一个二级C的小题目

来源:百度知道 编辑:UC知道 时间:2024/05/30 18:18:36
3. 编程题
下列程序定义了N×N的二维数组,并在主函数中赋值。请编写函数fun(),函数的功能是:求出数组周边元素的平方和并作为函数值返回给主函数中的s。例如:若a 数组中的值为
a=0 1 2 7 9
1 11 21 5 5
2 21 6 11 1
9 7 9 10 2
5 4 1 4 1
则返回主程序后s的值应为310。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define N 5
int fun (int w[][N])
{

}
void main()
{
int a[N][N]={0,1,2,7,9,1,11,21,5,5,2,21,6,11,1,9,7,9,10,2,5,4,1,4,1};
int i, j;
int s;
system("CLS");
printf("*****The array*****\n ");
for (i=0; i<N; i++)
{ for (j=0;j<N;j++)
{printf("%4d ",a[i][j]);}
printf("\n ");
}
s=fun(a);
printf("*****THE RESULT*****\n ");
printf("The sum is : %d\n ",s);
}

我用了一种很笨的方法<

int fun (int w[][N])
{
int i,j,sum; //sum初始化为0
for(i=0;i<5;i++)
sum+=w[0][i]*w[0][i];
for(i=0;i<5;i++)
sum+=w[4][i]*w[4][i];
for(j=1;j<4;j++)
sum+=w[0][j]*w[0][j]; //这里应该是w[j][0];第J行第0列..分清楚行列
for(j=1;j<4;j++)
sum+=w[4][j]*w[4][j]; //这里应该是w[j][4];第J行第4列..分清楚行列
return sum;
}

我将代码简单了下..如下:
int fun (int w[][N])
{

int i,j,sum=0;
for(i=0;i<5;i++)
sum+=w[0][i]*w[0][i]+w[4][i]*w[4][i];
for(j=1;j<4;j++)
sum+=w[j][0]*w[j][0]+w[j][4]*w[j][4];
return sum;
}

sum没初始化
前面要加一句:
sum=0;

你的 sum 没有赋初值,一开始应赋为 0

sum..悲剧