c语言函数处理矩阵 c语言4×4矩阵

C语言函数怎么返回矩阵矩阵 一般是用二维数组存储的
所以 要用返回值返回矩阵
唯一可行的方法
1 把矩阵封装在结构里面
比如
struct A{
int a[10][10];
};
2 用二维动态数组返回
分配int**的动态数组
返回值用int**
3不用返回值 而是用参数返回 。
用C语言编写一个矩阵运算的程序,高分!//矩阵三元组之矩阵相加 相乘
#include iostream
using namespace std;
typedef int Elemtype;
#defineMAXSIZE12500//最大非零元素
typedef struct Triple
{
Elemtype value;
int row,col;
}Triple;
typedef struct TSMatrix
{
Triple data[MAXSIZE 1];
int mu,nu,tu;
}TSMatrix;
TSMatrix T;
void InputMatrix(TSMatrix T)//输入t个非零元素
{
cout"请输入稀疏矩阵的信息,(行,列,非零元素个数)"endl;
cinT.muT.nuT.tu;
int i;
cout"请输入非零元素的信息(行,列,值),提醒(下标从1开始)"endl;
for(i=1;i=T.tu;i)
{
cinT.data[i].rowT.data[i].colT.data[i].value;
}
}
void Output(TSMatrix T)
{
cout"矩阵的三元组表示(ROW=)"T.mu" COL="T.nu"非零个数="T.tuendl;
int i;
for(i=1;i=T.tu;i)
{
cout"ROW(行):"T.data[i].row" COL(列):"T.data[i].col" Value(值)"T.data[i].valueendl;
}
}
void TransposeSMatrix(TSMatrix M,TSMatrix T)//矩阵的转置
{
T.mu=M.nu;T.nu=M.mu;T.tu=M.tu;
int i,j,k=1;
for(i=1;i=M.nu;i)
{
for(j=1;j=M.tu;j)
if(M.data[j].col==i)
{
T.data[k].row=i;
T.data[k].col=M.data[j].row;
T.data[k].value=https://www.04ip.com/post/M.data[j].value;
k;
}
}
}
void AddMastrix(TSMatrix M,TSMatrix T,TSMatrix Q)//矩阵相加
{
int index_a,index_b,i=1,j=1,k=1;
Q.mu=M.mu; Q.nu=M.nu;
while (i=M.tuj=T.tu)
{
index_a=(M.data[i].row)*(M.data[i].col) M.data[i].col;
index_b=(T.data[j].row)*(T.data[j].col) T.data[j].col;
if(index_aindex_b)
{
Q.data[k]=M.data[i];
i;
k;
}
else if(index_aindex_b)
{
Q.data[k]=T.data[j];
j;
k;
}
else if(index_a==index_b)
{
if((M.data[i].value T.data[j].value)!=0)
{
Q.data[k]=M.data[i];
Q.data[k].value=https://www.04ip.com/post/M.data[i].value T.data[j].value;
k;
【c语言函数处理矩阵 c语言4?矩阵】}
i;
j;
}
}
//复制剩余元素
for(;i=M.tu;i)
{
Q.data[k]=M.data[i];
k;
}
for(;j=T.tu;j)
Q.data[k]=T.data[j];
Q.tu=k-1;
}
void Multiply(TSMatrix M,TSMatrix T,TSMatrix Q)//相乘
{
if(M.nu!=T.mu)
{
cerr"两矩阵相乘不合法"endl;
return ;
}
int *rowSize=new int[T.mu 1]; //存放每行非零元素的个数
int *rowStart=new int[T.mu 2]; //矩阵每行在三元组开始位置
int *temp=new int[T.nu 1];//存放结果矩阵中每行的计算结果
int i,Current,k,ROWM,COLM,COLB;
for(i=1;i=T.mu;i) rowSize[i]=0;
for(i=1;i=T.tu;i) rowSize[T.data[i].row];
rowStart[1]=1;
for(i=2;i=T.mu 1;i)
rowStart[i]=rowStart[i-1] rowSize[i-1];
Current=1; k=1;
while (Current=M.tu)
{
ROWM=M.data[Current].row;//当前三元组数据中元素的行号
for(i=1;i=T.nu;i) temp[i]=0;
while (Current=M.tuROWM==M.data[Current].row)
{
COLM=M.data[Current].col;//当前元素的列号,方便与T矩阵的行号相乘
for(i=rowStart[COLM];irowStart[COLM 1];i)//对应T矩阵中每行的个数
{
COLB=T.data[i].col;
temp[COLB] =(M.data[Current].value)*(T.data[i].value);
}
Current;
}
for(i=1;i=T.nu;i)
{
if(temp[i]!=0)
{
Q.data[k].row=ROWM;
Q.data[k].col=i;
Q.data[k].value=https://www.04ip.com/post/temp[i];
}
k;
}
}
Q.mu=M.mu;Q.nu=T.nu;
Q.tu=k-1;
}
int main()
{
TSMatrix T,M,Q,S;
InputMatrix(M);
InputMatrix(T);
cout"两矩阵相乘"endl;
Multiply(M,T,Q);
Output(Q);
cout"两矩阵相加"endl;
AddMastrix(M,M,S);
Output(S);
system("pause");
return 0;
}
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; i3; i)
{ for(j=0; j3; j)
printf("[%d,%d]",a[i][j].x,a[i][j].y);
printf("\n");
}
printf("after:\n");
for(i=0; i3; i)
for(j=0; ji; j)
{ t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
for(i=0; i3; i)
{ for(j=0; j3; j)
printf("[%d,%d]",a[i][j].x,a[i][j].y);
printf("\n");
}
return 0;
}
或:
#include stdio.h
struct aaa
{ int x;
int y;
};
void zhuanzhi(struct aaa a[][3])
{ struct aaa t;
int i,j;
for(i=0; i3; i)
for(j=0; ji; 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; i3; i)
{ for(j=0; j3; j)
printf("[%d,%d]",a[i][j].x,a[i][j].y);
printf("\n");
}
}
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);
zhuanzhi(a);
printf("after:\n");
prt(a);
return 0;
}
用C语言编写一个矩阵转置的函数,矩阵的行数和列数在程序中由用户输入,请问怎么写 , 非常感谢我的代码逻辑是:
矩阵行指针初值指向每行首地址,迭代依次取所有行指针指向值组成新行,所有行指针自增 。最终组合新的矩阵 。
#include stdio.h
#include malloc.h
int **getList(int row,int clo);//获取矩阵地址空间
void setNum(int **nList,int n);//填写数值
void prtList(int **nList,int row,int clo);//打印矩阵
int **zz(int **nList,int row,int clo);//转置函数
int main()
{
int row,clo,**nList=NULL,**nListSave=NULL;
printf("输入矩阵行列数:");
scanf("%d%d",row,clo);
nList=getList(row,clo);
setNum(nList,row*clo);
printf("输入的矩阵为:\n");
prtList(nList,row,clo);
printf("转置后的矩阵为:\n");
nListSave=zz(nList,row,clo);
free(nList);
nList=nListSave;
prtList(nList,clo,row);
return 0;
}
int **zz(int **nList,int row,int clo)
{
int *nSave=NULL,**listSave=NULL,**listp=nList,*p=NULL,i,j;
nSave=(int *)malloc(sizeof(int)*row*clo);
listSave=(int **)malloc(sizeof(int*)*clo);//倒置后的矩阵
p=nSave;
for(j=0;jclo;j)
{
for(i=0;irow;i)
{
*p=*listp[i];
listp[i]=listp[i] 1;
}
}
for(i=0;iclo;i)
listSave[i]=nSave[i*row];
for(i=0;irow;i)
free(nList[i]);//释放原矩阵行空间
returnlistSave;
}
void prtList(int **nList,int row,int clo)
{
int i,j;
for(i=0;irow;i)
{
for(j=0;jclo;j)
printf("%d ",nList[i][j]);
printf("\n");
}
}
void setNum(int **nList,int n)
{
int *p=nList[0];
printf("填写矩阵中%d个数值:\n",n);
while(n--0)
scanf("%d",p);
}
int **getList(int row,int clo)
{
int *nums,**nList,i;
nums=(int *)malloc(sizeof(int)*row*clo);
nList=(int **)malloc(sizeof(int*)*row);
for(i=0;irow;i)
nList[i]=nums[i*clo];
return nList;
}
关于c语言函数处理矩阵和c语言4×4矩阵的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读