跑步书籍推荐:数组编程:求一个二维矩阵的转置矩阵,即将原矩阵行列互换的结果。

来源:百度文库 编辑:高考问答 时间:2024/05/09 10:56:09
c语言

哈哈,这正好是我的一个作业,直接拷给你了~~

//将以下数据保存为文本文件。
// 90 76 80 67
// 86 88 98 84
// 96 77 69 74
// 再读入该文件,用指针实现距阵转置,并打印结果。

#include<stdio.h>
#include<process.h> //为了使用exit()函数儿加入,在TC中不需要。
int i,j;

void shift(int p1[][4],int p2[][3]) //注意1:参数列表也可写成(int (*p)[4],int (*p)[3])
{ //注意2:函数参数的数组与传入的数组的维度必须一致。
for(i=0;i<3;i++)
for(j=0;j<4;j++)
p2[j][i]=p1[i][j]; //也可写成指针形式*((*p2+j)+i)=*((*p1+i)+j)

}

void main()
{FILE *fp;
int i,j,matrix1[3][4]={90,76,80,67,86,88,98,84,96,77,69,74},matrix2[3][4],matrix3[4][3];
if((fp=fopen("file","w"))==NULL)
//::写入文件::
{printf("Can't open file.\n");
exit(0);
}else{
for(i=0;i<3;i++)
for(j=0;j<4;j++)
fprintf(fp,"%2d",matrix1[i][j]); //注意最好写成"%2d",以与读取时形式一致。
}
fclose(fp);

//::读取文件::
if((fp=fopen("file","r"))==NULL)
{printf("Can't open file.\n");
exit(0);
}else{
for(i=0;i<3;i++)
for(j=0;j<4;j++)
fscanf(fp,"%2d",&matrix2[i][j]); //注意:"%2d"写成"%d"的话就会发生严重错误,系统将不知道该读入的单个数据的长度。
}
//::调用转置函数::
shift(matrix2,matrix3);
//::打印原矩阵::
printf("The oringinal matrix (3*4):\n");
for(i=0;i<3;i++)
{for(j=0;j<4;j++)
printf("%5d",matrix2[i][j]);
printf("\n");
}
//::打印转置矩阵::
printf("The matrix after shift (4*3):\n");
for(i=0;i<4;i++)
{for(j=0;j<3;j++)
printf("%5d",matrix3[i][j]);
printf("\n");
}

fclose(fp);
}