高手,帮我看个c程序哪有错?

来源:百度知道 编辑:UC知道 时间:2024/06/11 03:30:13
要求是求各3*3矩阵的两条对角线之和,而且输入,计算,输出要求分别在一个子函数中。大家看看,我的这个错在哪,已经知道是逻辑错误,结果不对。

#include "stdio.h"
#include "conio.h"

int i,j,n1,n2,a[3][3];
int *b=0,*c=0;

int input(int a[3][3])
{
printf("please input 9 numbers:");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
}

int num(int a[3][3],int *b,int *c)
{
for(i=0;i<3;i++)
*b+=a[i][i];
*c+=a[i][2-i];
}

int output(int n1,int n2)
{
printf("The answer is %d and %d\n",&n1,&n2);
}

main()
{ int input(),num(),output();
input(a);
num(a,&n1,&n2);
output(n1,n2);
getch();
}

如果实在是不行,就不用指针了,用个数组也行啊。

int num(int a[3][3],int *b,int *c)
{
for(i=0;i<3;i++)
*b+=a[i][i];
*c+=a[i][2-i];
}

main()函数的n1,n2要加声明;
num函数for循环后面加上大括号;

“for循环里面的b和c好像也不该再用指针开头了,就是改成:
b+=a[i][i];
c+=a[i][2-i];”

引号里是楼下回复前写的,现在回复,把函数改成这样:

int num(int a[3][3],int &b,int &c)
{
for(i=0;i<3;i++)
{b+=a[i][i];
c+=a[i][2-i]; }
}

把实参改成这样:

num(a,n1,n2);

试下行不行。

回楼下:
前面那几个是函数声明,似乎记得声明的时候要声明数组的大小,函数使用的时候实参只用数组名,也就是只用a,不用a[][]。手边没书没法查。不过试想,如果你是编译器,现在你要处理一个函数,你对于一个传进来的数组不知道它的大小如何为它分配空间。所以我觉得从这样来分析还是要加a[3][3]的。

关于b和c要不要指针开头的问题,我仔细看了一看。不如把函数改成这样:

int num(int a[3][3],int &b,int &c)
{
for(i=0;i<3;i++)
b+=a[i][i];
c+=a[i][2-i];
}

把实参改成这样:

num(a,n1,n2);

试下行不行。

原有
int num(int a[3][3],int *b,int *c)
{
for(i=0;i<3;i++)
*b+=a[i][i];
*