给出一个整数数组,找到其元素的总和。 我的问题是在C语言中,您只有固定大小的数组; 我的代码没有打印问题所要求的随机大小数组的总和; [1,2,3,4,5,------- n个元素]仅针对ex 6或defnite大小打印。使用循环;
#include <stdio.h>
int main() {
int i;
scanf("%d\n",&i);
int a[6];
int sum=0;
for(i=0;i<=5;i++)
scanf("%d\n",&a[i]);
for(i=0;i<=5;i++)
sum=sum+a[i];
printf("%d\n",sum);
return 0;
}
答案 0 :(得分:1)
似乎您想让用户输入数组中元素的数量。您的代码将这些信息扫描到变量i
中。因此,不能在for循环中使用变量i
作为计数器。您需要两个不同的变量。一个变量保存要包含在总和中的整数的数量,另一个变量保存循环。
要获得可变大小的数组,还需要在定义数组时使用用户输入。这就是所谓的VLA(可变长度数组)。
类似的东西:
#include <stdio.h>
int main() {
int i;
int N = 0; // New variable holding the number of integers in the sum
scanf("%d\n",&N); // scan into N
int a[N]; // Use N for the VLA
int sum=0;
for(i=0;i<N;i++) // Use N as limit
scanf("%d\n",&a[i]);
for(i=0;i<N;i++) // Use N as limit
sum=sum+a[i];
printf("%d\n",sum);
return 0;
}
那是-注意VLA。如果用户为N输入高数字,则可能会发生堆栈溢出。如果要使用VLA,则您的代码应强制使用最大数量 用户输入的限制。
通常最好使用动态分配而不是VLA。喜欢:
#include <stdio.h>
#include <stdlib.h>
int main() {
int i;
int N = 0;
scanf("%d\n",&N);
int *a = malloc(N * sizeof *a); // Dynamic allocation
if (a == NULL) exit(1); // Check for allocation failure
int sum=0;
for(i=0;i<N;i++)
scanf("%d\n",&a[i]);
for(i=0;i<N;i++)
sum=sum+a[i];
printf("%d\n",sum);
free(a); // Free allocated memory
return 0;
}
一些额外的评论:
1)要计算总和,实际上不需要数组。只需扫描到一些int
并将其添加到sum
。无需先将其存储在数组中。
2)始终检查scanf
的返回值。示例:if (scanf("%d\n",&N) != 1) exit(1);