c语言输出转置矩阵
❶ c语言三元组输入输出的转置矩阵
分类: 电脑/网络 >> 程序设计 >> 其他编程语言
解析:
用三元组存储的稀疏矩阵的转置运算
三元组采用行优先表示法,转置后的矩阵的三元组同样要采用行优先表示法
0 1 12
0 2 9
2 0 -3
3 5 14
3 2 24
4 1 18
5 0 15
5 3 -7
struct node
{
int i,j; 定义三元组的行、列号
int v; 三元组的值
};
struct sparmatrix
{
int rows,cols; 稀疏矩阵的行纯指裂、列数
int terms; 稀疏矩阵的非零元个数
struct node data[maxsize]; 存放稀疏矩阵的三元组表
};
(1)按照A的列序进行转置
由于A的列即为B的行,在a.data(原表)中,按列扫描,则得到的b.data(转置表)必按行优先存放。
但为了找到A的每一列中所有的非零的元素,每次都必须从头到尾扫描A的三元组表(有多少列,则扫描多少遍)
void transpose(struct sparmatrix a)
{
struct sparmatrix b; /*b为a的转置*/
int ano,bno=0,col,i;
b.rows=a.cols; b.cols=a.rows;
b.terms=a.terms;
if (b.terms>0)
{
for ( col=0; col<a.cols; col++) /*按列号扫描*/
for( ano=0;ano<a.terms;ano++) /*对三元组扫描*/
if (a.data[ano].j==col) /*进行转置*/
{ b.data[bno].j=a.data[ano].i;
b.data[bno].i=a.data[ano].j;
b.data[bno].v=a.data[ano].v;
bno++;
}
}
…………….
(2)按照A的行序进行转置
即按a.data中三元组的次序进行转置,并将转置后的三元组放入b中恰当的位置。
若能在转置前求出矩阵A的每一列col(即B中每一行)的第一个非零元转置后在b.data中的正确位置pot[col](0≤col<a.cols),那么在对a.data的三元组依次作转置时,只要将三元组按列号col放置到b.data[pot[col]]中,之后将pot[col]内容加1,以指示第逗铅col列的下一个非零做闭元的正确位置。
void fastrans(struct sparmatrix a)
{
struct sparmatrix b;
int pot[maxsize],col,ano,bno,t,i;
b.rows=a.cols; b.cols=a.rows;
b.terms=a.terms;
if(b.terms>0)
{
for(col=0;col<=a.cols;col++)
pot[col]=0;
for( t=0;t<a.terms;t++) /*求出每一列的非零元个数*/
{
col=a.data[t].j;
pot[col+1]=pot[col+1]+1;
}
pot[0]=0;
for(col=1;col<a.cols;col++) /*求出每一列的第一个非零元在转置后的位置*/
pot[col]=pot[col-1]+pot[col];
for( ano=0;ano<a.terms;ano++) /*转置*/
{ col=a.data[ano].j;
bno=pot[col];
b.data[bno].j=a.data[ano].i;
b.data[bno].i=a.data[ano].j;
b.data[bno].v=a.data[ano].v;
pot[col]=pot[col]+1;
}
}
❷ C语言编程:输入一个2x3的矩阵,输出它的转置矩阵。
#include<stdio.h>拍判雀
int main()
{int a[2][3],b[3][2],i,j;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
{scanf("%d",&a[i][j]);
冲哗b[j][i]=a[i][j];
}
printf("========== ");
for(i=0;i<3;i++)
{for(j=0;j<2;j++)
printf("袭早%4d",b[i][j]);
printf(" ");
}
return 0;
}
❸ c语言~使用函数 完成3×3矩阵转置,输入一矩阵,输出其转置矩阵。
#include<stdio.h>
#defineN3
intarray[N][N];
voidtransition(intarray[][3])
{
inti,j,temp;
for(i=0;i<N;i++)
for(j=i+1;j<N;j++)
{
temp=array[i][j];
array[i][j]=array[j][i];
array[j][i]=temp;
}
}
intmain(void)
{
voidtransition(intarray[][3]);
inti,j;
printf("请输入数据 ");
高禅灶for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%d",&array[i][j]);
printf(" ");
transition(array);
printf("调换数据如下 ");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%5d",array[i][j]);
printf(" ");
}
return0;
}
~~~~~~
我写的代码,你自袭厅己戚扮参考吧,很简单的
❹ C语言编程实现2*3的矩阵转置
#include<iostream>
usingnamespacestd;
voidzhuang(inta[3][3])
{intm,n,i;
for(m=0;m<2;m++)
for(i=0;i<3;i++)
{if(m!=1||i!=0)
{n=a[i][m];
a[i][m]=a[m][i];
a[m][i]=n;
}
}
}
intmain()
{
inta[3][3];
inti,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
cin>>a[i][j];
zhuang(a)做汪伏;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
cout<<a[i][j]<<"";
cout<<endl;
}
return0;
}
cout<<"处理后的矩阵:"<<endl;
for(i=0;i<3;i++)//输出处理后的矩阵
{
for(j=0;j<3;j++)
{
cout<<setw(5)<<a<i>[j];
}
cout<<endl;
}
return0;
}
//交换函数
voidmove(int*pointer)
{
inti,j,t;
for(i=0;i<3;i++)
{
for(j=i;j<3;j++)
{
t=*(pointer+3*i+j);//这是关键将矩阵转置的条件
*(pointer+3*i+j)=*(pointer+3*j+i);
*(pointer+3*j+i)=t;
}
}
}
运行效果:
(4)c语言输出转置矩阵扩展阅读:
在C语言或C++中,会把用来#include的文件的扩展名叫.h,称其为头文件。
#include文件的目的就是把多个编译单元(也就是c或者cpp文件)公用的内容,单独放在一个文件里减少整体代码尺寸;或者提供跨工程公共代码。在现行的c++版本中,应用这个头文件应是#include<stdio.h>
stdio 就是指 “standard input & output"(标准输入输出)所以,源代码中如用到标准输纯携入输出函数时,就要包含这个头文件!
例如c语言中的 printf("%d"陵旅,i); scanf("%d",&i);等函数。
❺ C语言编译,目的是输入一个四行四列的矩阵,找出最小值并输出转置矩阵
#include<stdio.h>
intmain()
{
inta[4][4];
intb[4][4];//
inti,j,min;
introw,colum;//
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
}
min=a[0][0];
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
if(a[i][j]<min)
{
min=a[i][j];
row=i;//
colum=j;//
}
}
printf("min=%d row=%d colum=%d ",min,row,colum);//
printf(" ");
printf(" ");
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
b[j][i]=a[i][j];
}
}
printf("b: ");
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
printf("%5d",b[i][j]);
}
printf(" ");
}
return0;
}
❻ c语言如何通过定义函数来转置矩阵
#include <stdio.h>
int main()
{ struct aaa
{ int x;
int y;
};
struct aaa t,a[3][3]= {0,0,0,1,0,2,1,0,1,1,1,2,2,0,2,1,2,2};
int i,j;
for(i=0; i<3; i++)
{ for(j=0; j<3; j++)
printf("[%d,%d] ",a[i][j].x,a[i][j].y);
printf(" ");
}
printf("after: ");
for(i=0; i<3; i++)
for(j=0; j<i; j++)
{ t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
for(i=0; i<3; i++)
{ for(j=0; j<3; j++)
printf("[%d,%d] ",a[i][j].x,a[i][j].y);
printf(" ");
}
return 0;
}
或:
#include <stdio.h>
struct aaa
{ int x;
int y;
};
void zhuan(struct aaa a[][3])
{ struct aaa t;
int i,j;
for(i=0; i<3; i++)
for(j=0; j<i; j++)
{ t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
}
void prt(struct aaa a[][3])
{ int i,j;
for(i=0; i<3; i++)
{ for(j=0; j<3; j++)
printf("[%d,%d] ",a[i][j].x,a[i][j].y);
printf(" ");
}
}
int main()
{ struct aaa a[3][3]= {0,0,0,1,0,2,1,0,1,1,1,2,2,0,2,1,2,2};
prt(a);
zhuan(a);
printf("after: ");
prt(a);
return 0;
}
❼ C语言矩阵转置
//经握销过vc6调试成功段毕游
void transferMat(int a[] , int b[], int n) //a表示待转置的矩阵,b表示输出矩阵,n表数拍示元素个数
{
int i,j;
for(i=0; i<n; i++)
for(j=0; j<n; j++)
{
b[j,i]=a[i,j];
}
}