23、 程序定义了N*N的二维数组,并在主函数中赋值。请编写函数fun,函数的功能是:
求出数组周边元素的平均值并作为函数值返回给主函数中的s。
则返回主程序后s的值应为:3.375。
着是 我自己写的
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define N 5
double fun (int w[][N])
{
int i,b=0;
double m=0,n=0;
for(i=0;i<=N;i++)
{
n+=w[0][i];
n+=w[N-1][i];
b+=2 ;
}
for(i=1;i<=N-1;i++)
{
n+=w[i][0];
n+=w[i][N-1];
b+=2 ;
}
m=n/b;
return m;
}
main()
{ int a[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1};
int i,j;
double s;
clrscr();
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 %lf\n",s);
}
\-----------------------------------------------------------------------------------------------------------------------------------\
下面的是 书上的程序
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define N 5
double fun (int w[][N])
{ int i,t=0;
double s=0;
for(i=0;i<N;i++)
{s+=w[i][0]+w[i][N-1]; t+=2;}
for(i=1;i<N-1;i++)
{s+=w[0][i]+w[N-1][i]; t+=2;}
s=s/t;
return s;
}
main()
{ int a[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1};
int i,j;
double s;
clrscr();
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 %lf\n",s);
}
\--------------------------------------------------------------------------------------------------------------------------------\
我真看不出 着两个程序有什么区别 ,但是结果咋 就不一样呢????
书上的是3.375
我的是 94.2500000
[此贴子已经被作者于2006-8-23 20:52:29编辑过]
----------------解决方案--------------------------------------------------------
23、 程序定义了N*N的二维数组,并在主函数中赋值。请编写函数fun,函数的功能是:
求出数组周边元素的平均值并作为函数值返回给主函数中的s。
则返回主程序后s的值应为:3.375。
着是 我自己写的
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define N 5
double fun (int w[][N])
{
int i,b=0;
double m=0,n=0;
for(i=0;i<=N;i++)
{
n+=w[0][i];
n+=w[N-1][i];
b+=2 ;
}
for(i=1;i<=N-1;i++)
{
n+=w[i][0];
n+=w[i][N-1];
b+=2 ;
}
m=n/b;
return m;
}
main()
{ int a[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1};
int i,j;
double s;
clrscr();
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 %lf\n",s);
}
\-----------------------------------------------------------------------------------------------------------------------------------\
下面的是 书上的程序
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define N 5
double fun (int w[][N])
{ int i,t=0;
double s=0;
for(i=0;i<N;i++)
{s+=w[i][0]+w[i][N-1]; t+=2;}
for(i=1;i<N-1;i++)
{s+=w[0][i]+w[N-1][i]; t+=2;}
s=s/t;
return s;
}
main()
{ int a[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1};
int i,j;
double s;
clrscr();
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 %lf\n",s);
}
\--------------------------------------------------------------------------------------------------------------------------------\
我真看不出 着两个程序有什么区别 ,但是结果咋 就不一样呢????
书上的是3.375
我的是 94.2500000
[此贴子已经被作者于2006-8-23 20:58:38编辑过]
----------------解决方案--------------------------------------------------------
一样的啊 大哥 反正都是加 我又没有加重复 都是加周边的元素啊
----------------解决方案--------------------------------------------------------
先加后加 还不是一样吗
----------------解决方案--------------------------------------------------------
<=和<的区别。
----------------解决方案--------------------------------------------------------
<=和<的区别。
对哇 我咋没想到呢!!!
但是还有个问题,不就是《=吗 为什么 结果的差距怎么打呢?
----------------解决方案--------------------------------------------------------
越界访问错误是无法预料的。
----------------解决方案--------------------------------------------------------
哦 哦哦
多谢了
----------------解决方案--------------------------------------------------------
我没看懂
----------------解决方案--------------------------------------------------------
i<=5,其实数组最大只能到a[0][4],第二个i<=N-1让n多执行了一次循环加
----------------解决方案--------------------------------------------------------