一道初学者的C语言题目 矩阵运算,求解答,万分感谢!

【问题描述】
对于多个N阶矩阵,依次进行加、减运算。

【输入形式】
从标准输入读取输入。第一行只有一个整数N(1≤N≤10),代表矩阵的阶数。
接下来是一个矩阵,是N行,每行有N个整数(可能是正、负整数),是矩阵的所有元素。
然后一行只含一个字符“+”或“-”,代表加、减操作。
然后用同样的方式输入另一个矩阵。
后续仍然是运算符和矩阵。直至运算符为“#”时停止计算,将结果输出。

【输出形式】
向标准输出打印矩阵的操作结果。输出N行,每行对应矩阵在该行上的所有元素,每一行末均输出一个回车符。每个元素占5个字符宽度(包括负号),向右对齐,不足部分补以空格。
【输入样例】
3
1 -2 7
2 8 -5
3 6 9
+
3 5 7
-1 2 6
3 7 10
-
1 -2 7
2 8 -5
3 6 9
#

【输出样例】
(下图中”-”代表空格)
####3####5####7
###-1####2####6
####3####7###10
【评分标准】
本题不准使用数学库函数。运行时限1秒,完全正确20分,每个测试点4分。提交程序文件名为matrix.c。

下面是我写的,为什么在输入第一个矩阵时就会出现错误呢?
#include<stdio.h>
int main()
{
int m,x,p,q,s,t=0;
int a[99],b[99],result[99];
int fun(int a[],int x);
char op;
scanf("%d",&x);
fun(a,x); /*输入一个矩阵*/
for(p=0;p<100;p++)
result[p]=a[p];
scanf("%c",&op); /*输入一个运算符*/
while(op!='#'){
fun(b,x); /*输入一个矩阵*/
if(op=='+'){
for(m=0;m<100;m++)
result[m]=result[m]+b[m];
}
else if(op=='-'){
for(m=0;m<100;m++)
result[m]=result[m]-b[m];
}
scanf("%d",&op); /*输入一个运算符*/
}
for(q=0;q<x;q++){ /*输出矩阵*/
for(s=0;s<9*t+x;s++){
if(result[s]<0){
printf("###");
printf("%d",result[s]);
}
else{
printf("####");
printf("%d",result[s]);
}
}
t++;
}
return 0;
}
int fun(int a[],int x) /*函数:输入一个矩阵*/
{
int i=0,j,k=0;
for(j=0;j<x;j++){
for(;i<9*k+x;i++)
{
scanf("%d",a[i]);
}
i+=(10-x);
k++;
}
}

矩阵,那么就要用二维数组,你一位数组也是可以的,但是要确定怎么分割成二维数组的样子
N*N=10*10=100,可以定义一个100元素的数组
但是这个题目,我估计要定义二维数组的,呵呵

int a[100],sum[100]={0}; //最终结果一定要初始化
int i,n;
char op;
scanf("%",&n);
do //至少输入一次,用do--while最好
{
for(i=0;i<n*n;i++)
scanf("%d",&a[i]); //输入n*n个数据,也就是n阶矩阵
fflush(stdio); //清理一下缓冲,要不然char型op输入不进去
op=getchar();
switch(op) 计算加减,用switch也可,用if判断op也行(因为只有加减)
case '+':
for(i=0;i<n*n;i++)
sum[i]+=a[i];
break;
case '-':
for(i=0;i<n*n;i++)
sum[i]-=a[i];
break;
}while(op!='#');

for(i=0;i<n*n;i++) //输出
{
printf("%5d",a[i]);
if(i%n==0) //n个一行
printf("\n");
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-19
我用二维数组存的 发给楼主借鉴一下
#include <stdio.h>
#define Max 10

void fun(int a[][Max],int x )
{
int i,j;
for(i = 0 ; i < x; i++ )
for( j = 0 ; j < x ; j++)
{
scanf("%d",&a[i][j]);
}
fflush(stdin);
}

int main()
{
int a[Max][Max],result[Max][Max];
int num,i,j;
char op;
scanf("%d",&num);
fun(a,num);
for( i = 0 ; i < num ;i++)
for( j = 0; j < num;j++)
result[i][j] = a[i][j];
while( (op=getchar())!= '#')
{
fun(a ,num);
if( op =='+')
{
for( i = 0 ; i < num ;i++)
for( j = 0; j < num;j++)
result[i][j]+= a[i][j];
}
else
{
for( i = 0 ; i < num ;i++)
for( j = 0; j < num;j++)
result[i][j]-= a[i][j];
}
}
for( i = 0 ; i < num ;i++)
{
for( j = 0; j < num;j++)
printf("%5d",result[i][j]);
printf("\n");
}
reutn 0;
}
第2个回答  2012-11-13
运行cpucash 的算法。发现还是有点问题。在上面改了改。解决了点逻辑问题。运行结果正确。

#include <stdio.h>
int main(void)
{
int a[100],sum[100]={0}; //最终结果一定要初始化
int i,n;
char op='+';
scanf("%d",&n);
while(op!='#') //这个地方改了下
{

for(i=0;i<n*n;i++)
scanf("%d",&a[i]); //输入n*n个数据,也就是n阶矩阵
switch(op)//这样用效果好些,逻辑通顺
{
case '+':
for(i=0;i<n*n;i++)
sum[i]+=a[i];
fflush(stdin); //清理一下缓冲,要不然char型op输入不进去
op=getchar();
break;
case '-':
for(i=0;i<n*n;i++)
sum[i]-=a[i];
fflush(stdin); //清理一下缓冲,要不然char型op输入不进去
op=getchar();
break;
default:
break;
}

};

for(i=1;i<=n*n;i++) //输出
{
printf("%5d",sum[i-1]);
if(i%n==0) //n个一行
printf("\n");
}
return 0;
}追问

谢啦!~不过 ,系统提示运行时间过长怎么办啊?

本回答被提问者采纳
第3个回答  2012-11-13
你写的fun函数是有返回值的,你在函数里面加上return就行了,还有在调用时也要对返回值加处理。