c语言编写程序实现求一维数组(8个元素)元素之和。

要求用数组名作为函数形参,在子函数中实现求和,在主函数中输出结果
这是我写出来的
#include<stdio.h>
int l(int a[7])
{int i=0,j=0;

for(;i<=7;i++)
j=j+a[i];
return j;
}
void main()
{
int b[7],n=0,m=0,c;
for(;n<=7;n++)
scanf("%d",&b[n]);
c=l(b);

printf("%d",c);

}
运行完了之后可以求和,但是程序会报错。
另外希望大家写一下通过指针怎么写这道题。

你的数组只有定义了维数为7,但是你却往b地址开始的内存里面读入了8个数,然后算的时候,也是算的8个数字的和,所以会出错,。 修改办法:把两处<=7 都改成 <7 就行了!
int l( int* a, int num )
{
int i=0,j=0;

for(;i<num;i++)
j=j+a[i];
return j;
}

void main()
{
int b[7] = { 0 };
for ( int i = 0; i < 7; ++i )
{
scanf( "%d", &b[i] );
}
int kk = l( b, 7 );
printf( "%d", kk );

system("pause");
}追问

b[0]到b[7]不是8个么?

追答

定义b[7]的意思就是说这是个包含7个元素的数组,只能是b[0]到b[6]。[]里面的数字代表这个数组有多少个元素,最后一个元素的下标是[]里面的数字-1。比如定义int a[44],表示有44个元素,最后一个元素是a[43]。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-06

你的之所以报错,是由于你定义的数组int  b[7].(可以操作b[0]-b[6])

而你用for(;n<=7;n++)  的时候会出现scanf("%d",&b[7]); 这样就数组下标越界了。。

通过指针把求和函数的形参改为指针就可以了。

int getSum(int *array,int endIndex){
      int sum=0;
      for(int i=0;i<endIndex;i++){
        sum+=array[i]; 
     }
     return sum;
}

本回答被提问者采纳