包含函数的数组总和 - C
Sum of array including a function - C
我在编程方面有点菜鸟,这就是为什么我在这个相当简单的代码上苦苦挣扎。
我们的任务是使用函数对数组的所有元素求和。
该函数应打印出数组,然后对其元素求和并将其总和返回给 main。
应该在那里打印。
我认为它一直在工作,直到达到功能为止。
阅读了很多关于这个问题的其他帖子,但仍然无法解决这个问题。
我的编译器还告诉我“Segementation fault (core dumped)”。我真的很困惑。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX 9 // i think the math one is a bit unneccessary but well
int sum(int array[], int size)
{
int i;
int sum = 0;
for (i = 0; i <= MAX; i++)
{
printf("\n%d", array[i]);
}
for (i = 0; i <= MAX; i++)
{
sum = sum + array[i];
}
return sum;
}
int main()
{
int i;
int array[MAX];
int size;
for (i = 1; i <= 10; i++)
{
printf("\nGeben Sie die %d. Zahl ein: ", i); // Its in german, basically saying the user should fill the array, starting with the 1. element
scanf("%d", &array[i - 1]);
}
sum(array[MAX], size);
printf("%d", size);
return 0;
}
能帮到我真是太好了。
谢谢!
我使用函数 sum 扫描数组的元素并对数组的元素求和
scanf("%d", &array[i - 1]);
如果你想从 SIZE-1 到 0 填充数组,只需反转 for 循环 (for(int i=SIZE-1;i>=0;i--))
int size;
如果您想在调用函数时将大小作为参数,则应将其初始化为 SIZE(size=SIZE)
你的函数 sum 返回了数组元素的总和,所以改变了这个
sum(array[MAX], size);//use it in void main()
到
int k = sum(array, size);//just write the name of array without [MAX]
我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX 9 // i think the math one is a bit unneccessary but well
int sum(int array[], int size)
{
int sum = 0;
for (int i = 0; i < MAX; i++)
{
scanf("%d",&array[i]);
sum = sum + array[i];
}
return sum;
}
int main()
{
int array[MAX];
printf("%d",sum(array, MAX));//here you just write the name of array without his size
return 0;
}
发生这种情况是因为数组元素从 0
变为 MAX - 1
。通过从 0
循环到 MAX
(包括在内),您要求您的程序访问第 11 个元素(array[10]
)。
奖励:您对该函数的调用应该是 sum(array, size)
并且您可以使用一个循环而不是两个循环:
for (i = 0; i < MAX; i++)
{
printf("\n%d", array[i]);
sum = sum + array[i]; // Same as sum += array[i];
}
<math.h>
在这里确实是不必要的,你没有使用 <stdlib.h>
也没有使用参数 size
,所以你可以安全地删除它们。
如果您的数组包含 MAX
个元素,则索引的有效范围为 [ 0, MAX )
.
函数sum
没有使用参数size
并且传递的参数size
没有被初始化。
而且函数调用的第一个参数
sum(array[MAX], size);
具有类型 int
而不是 int *
。
程序如下所示
#include <stdio.h>
#define MAX 9
long long int sum( const int array[], size_t size )
{
long long int total = 0;
for ( size_t i = 0; i < size; i++ )
{
total += array[i];
printf( "%d ", array[i] );
}
putchar( '\n' );
return total;
}
int main(void)
{
int array[MAX];
for ( size_t i = 0; i < MAX; i++ )
{
printf("Geben Sie die %zu. Zahl ein: ", i + 1 );
scanf( "%d", array + i );
}
printf( "%lld\n", sum( array, MAX ) );
return 0;
}
它的输出可能看起来像
Geben Sie die 1. Zahl ein: 1
Geben Sie die 2. Zahl ein: 2
Geben Sie die 3. Zahl ein: 3
Geben Sie die 4. Zahl ein: 4
Geben Sie die 5. Zahl ein: 5
Geben Sie die 6. Zahl ein: 6
Geben Sie die 7. Zahl ein: 7
Geben Sie die 8. Zahl ein: 8
Geben Sie die 9. Zahl ein: 9
1 2 3 4 5 6 7 8 9
45
您需要清楚地记住,用 MAX
元素声明的数组的最后一个元素是第 MAX-1
个,因为元素从 0 开始。
例如int array[3]
的元素是:array[0]
、array[1]
和array[2]
。
现在你明白你的循环应该是
for (i = 0; i < MAX; i++)
因为在 i == MAX
的情况下,您将尝试访问不属于数组的 array[MAX]
。
如果MAX
是9,最后一个元素是array[8]
所以for (i = 0; i <= 10; i++)
应该是
for (i = 0; i < 9; i++)
但是最好使用 MAX
而不是 9,这样如果你想让你的程序适用于 20 个元素的数组,你只需修改 MAX
的值和不是你写的所有代码 9
现在来函数调用sum(array[MAX], size);
应该是
sum(array, size);
要传递数组,您必须传递其第一个元素的地址,即 &array[0]
甚至只是 array
。 Is an array name a pointer?
那么你传递的size
是未初始化的,你甚至没有在sum()
中使用它,所以没有理由声明它。
我还注意到你想在最后打印 size
并且因为你将它传递给 sum()
,也许你想将它的值修改到 sum()
函数中。如果是这样,那么仅仅传递 size
是不够的。这将传递 size
的副本,并且对其值的任何更改都将丢失(除非你 return 它,但你已经 returning sum
)。要真正修改 size
,您必须传递其地址 &size
,并让 sum()
接收指向 int int *
的指针
int sum(int array[], int *size)
还有你 return sum
但不要将其存储在任何地方。你应该把它存储在像
这样的地方
newVariable = sum(array, size);
或者如果你只是想打印它,那么就打印它
printf("%d", sum(array, size));
我在编程方面有点菜鸟,这就是为什么我在这个相当简单的代码上苦苦挣扎。 我们的任务是使用函数对数组的所有元素求和。 该函数应打印出数组,然后对其元素求和并将其总和返回给 main。 应该在那里打印。 我认为它一直在工作,直到达到功能为止。
阅读了很多关于这个问题的其他帖子,但仍然无法解决这个问题。 我的编译器还告诉我“Segementation fault (core dumped)”。我真的很困惑。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX 9 // i think the math one is a bit unneccessary but well
int sum(int array[], int size)
{
int i;
int sum = 0;
for (i = 0; i <= MAX; i++)
{
printf("\n%d", array[i]);
}
for (i = 0; i <= MAX; i++)
{
sum = sum + array[i];
}
return sum;
}
int main()
{
int i;
int array[MAX];
int size;
for (i = 1; i <= 10; i++)
{
printf("\nGeben Sie die %d. Zahl ein: ", i); // Its in german, basically saying the user should fill the array, starting with the 1. element
scanf("%d", &array[i - 1]);
}
sum(array[MAX], size);
printf("%d", size);
return 0;
}
能帮到我真是太好了。 谢谢!
我使用函数 sum 扫描数组的元素并对数组的元素求和
scanf("%d", &array[i - 1]);
如果你想从 SIZE-1 到 0 填充数组,只需反转 for 循环 (for(int i=SIZE-1;i>=0;i--))
int size;
如果您想在调用函数时将大小作为参数,则应将其初始化为 SIZE(size=SIZE)
你的函数 sum 返回了数组元素的总和,所以改变了这个
sum(array[MAX], size);//use it in void main()
到
int k = sum(array, size);//just write the name of array without [MAX]
我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX 9 // i think the math one is a bit unneccessary but well
int sum(int array[], int size)
{
int sum = 0;
for (int i = 0; i < MAX; i++)
{
scanf("%d",&array[i]);
sum = sum + array[i];
}
return sum;
}
int main()
{
int array[MAX];
printf("%d",sum(array, MAX));//here you just write the name of array without his size
return 0;
}
发生这种情况是因为数组元素从 0
变为 MAX - 1
。通过从 0
循环到 MAX
(包括在内),您要求您的程序访问第 11 个元素(array[10]
)。
奖励:您对该函数的调用应该是 sum(array, size)
并且您可以使用一个循环而不是两个循环:
for (i = 0; i < MAX; i++)
{
printf("\n%d", array[i]);
sum = sum + array[i]; // Same as sum += array[i];
}
<math.h>
在这里确实是不必要的,你没有使用 <stdlib.h>
也没有使用参数 size
,所以你可以安全地删除它们。
如果您的数组包含 MAX
个元素,则索引的有效范围为 [ 0, MAX )
.
函数sum
没有使用参数size
并且传递的参数size
没有被初始化。
而且函数调用的第一个参数
sum(array[MAX], size);
具有类型 int
而不是 int *
。
程序如下所示
#include <stdio.h>
#define MAX 9
long long int sum( const int array[], size_t size )
{
long long int total = 0;
for ( size_t i = 0; i < size; i++ )
{
total += array[i];
printf( "%d ", array[i] );
}
putchar( '\n' );
return total;
}
int main(void)
{
int array[MAX];
for ( size_t i = 0; i < MAX; i++ )
{
printf("Geben Sie die %zu. Zahl ein: ", i + 1 );
scanf( "%d", array + i );
}
printf( "%lld\n", sum( array, MAX ) );
return 0;
}
它的输出可能看起来像
Geben Sie die 1. Zahl ein: 1
Geben Sie die 2. Zahl ein: 2
Geben Sie die 3. Zahl ein: 3
Geben Sie die 4. Zahl ein: 4
Geben Sie die 5. Zahl ein: 5
Geben Sie die 6. Zahl ein: 6
Geben Sie die 7. Zahl ein: 7
Geben Sie die 8. Zahl ein: 8
Geben Sie die 9. Zahl ein: 9
1 2 3 4 5 6 7 8 9
45
您需要清楚地记住,用 MAX
元素声明的数组的最后一个元素是第 MAX-1
个,因为元素从 0 开始。
例如int array[3]
的元素是:array[0]
、array[1]
和array[2]
。
现在你明白你的循环应该是
for (i = 0; i < MAX; i++)
因为在 i == MAX
的情况下,您将尝试访问不属于数组的 array[MAX]
。
如果MAX
是9,最后一个元素是array[8]
所以for (i = 0; i <= 10; i++)
应该是
for (i = 0; i < 9; i++)
但是最好使用 MAX
而不是 9,这样如果你想让你的程序适用于 20 个元素的数组,你只需修改 MAX
的值和不是你写的所有代码 9
现在来函数调用sum(array[MAX], size);
应该是
sum(array, size);
要传递数组,您必须传递其第一个元素的地址,即 &array[0]
甚至只是 array
。 Is an array name a pointer?
那么你传递的size
是未初始化的,你甚至没有在sum()
中使用它,所以没有理由声明它。
我还注意到你想在最后打印 size
并且因为你将它传递给 sum()
,也许你想将它的值修改到 sum()
函数中。如果是这样,那么仅仅传递 size
是不够的。这将传递 size
的副本,并且对其值的任何更改都将丢失(除非你 return 它,但你已经 returning sum
)。要真正修改 size
,您必须传递其地址 &size
,并让 sum()
接收指向 int int *
int sum(int array[], int *size)
还有你 return sum
但不要将其存储在任何地方。你应该把它存储在像
newVariable = sum(array, size);
或者如果你只是想打印它,那么就打印它
printf("%d", sum(array, size));