一道c语言题目求解 挺急的 在线等 30
【问题描述】文本文件data.txt中保存了一组整数,其中解释为:前两个数表示一个矩阵(记为A)的行数和列数(记为n和m),随后是矩阵的先按行再按列排列的元素数据,接着是...
【问题描述】文本文件data.txt中保存了一组整数,其中解释为:前两个数表示一个矩阵(记为A)的行数和列数(记为n和m),随后是矩阵的先按行再按列排列的元素数据,接着是共规格矩阵(记为B)的先按行再按列的数据。请编程将两个矩阵分别读入到二维数组中,然后计算A和B的和并保存到结果文件result.txt中。
【输入形式】
【输出形式】
【样例输入】设文件data.txt中的数据为:3 2 1 2 3 4 5 6 1 2 3 4 5 6 ,则表示的矩阵A为{{1, 2}, {3, 4}, {5, 6}},矩阵B为{{1, 2},{ 3, 4}, {5, 6}}
【样例输出】输出文件result.txt中的内容应为:3 2 2 4 6 8 10 12
【样例说明】
【评分标准】
--------------------------------------------------------------------------------
提交源文件: 展开
【输入形式】
【输出形式】
【样例输入】设文件data.txt中的数据为:3 2 1 2 3 4 5 6 1 2 3 4 5 6 ,则表示的矩阵A为{{1, 2}, {3, 4}, {5, 6}},矩阵B为{{1, 2},{ 3, 4}, {5, 6}}
【样例输出】输出文件result.txt中的内容应为:3 2 2 4 6 8 10 12
【样例说明】
【评分标准】
--------------------------------------------------------------------------------
提交源文件: 展开
1个回答
展开全部
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE* fp;
int n,m,i,j;
fp=fopen("data.txt","r");//打开数据文件流
fscanf(fp,"%d%d",&n,&m);
int** A,**B;//以下都是建立二维动态数组的过程
A=(int**)malloc(sizeof(int*)*n);
B=(int**)malloc(sizeof(int*)*n);
if(A==0||B==0)printf("Alloc Error");
for(i=0;i<n;++i)
{
A[i]=(int*)malloc(sizeof(int)*m);
B[i]=(int*)malloc(sizeof(int)*m);
if(A[i]==0||B[i]==0)printf("Alloc Error");
}
for(i=0;i<n;++i)//从这里开始逐一读取数据到二维数组
for(j=0;j<m;++j)
fscanf(fp,"%d",A[i][j]);
for(i=0;i<n;++i)
for(j=0;j<m;++j)
fscanf(fp,"%d",B[i][j]);
fclose(fp);
for(i=0;i<n;++i)//计算矩阵各元素之和并保存到A相应的位置
for(j=0;j<m;++j)
A[i][j]+=B[i][j];
for(i=0;i<n;++i)//释放堆空间,指针B悬空
free(B[i]);
free(B);
B=0;
fp=fopen("result.txt","w");//创建或重写result.txt
fprintf(fp,"%d %d ",n,m);//写入n和m
for(i=0;i<n;++i)//写入结果
for(j=0;j<m;++j)
if(!(i==n-1&&j==m-1))fprintf(fp,"%d ",A[i][j]);
fprintf(fp,"%d",A[n-1][m-1]);//最后一个数据后无空格
fclose(fp);
for(i=0;i<n;++i)//同上
free(A[i]);
free(A);
A=0;
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询