[英]Sum of array including a function - C
我在編程方面有點菜鳥,這就是為什么我在這個相當簡單的代碼上苦苦掙扎。 我們的任務是使用 function 對數組的所有元素求和。 function 應該打印出數組,然后將其元素相加並將其和返回給主數組。 應該在那里打印。 我認為它一直在工作,直到它到達 function。
閱讀有關此問題的許多其他帖子,但仍然無法解決解決方案。 我的編譯器還告訴我“分段錯誤(核心轉儲)”。 我真的很困惑。
那是我的代碼:
#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;
}
幫助我真的很好。 謝謝!
這是因為數組元素 go 從0
到MAX - 1
。 通過從0
循環到MAX
(包括),您要求您的程序最多訪問第 11 個元素( array[10]
)。
獎勵:您對 function 的調用應該是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 )
。
function sum
不使用參數size
,傳遞的參數size
未初始化。
此外 function 調用的第一個參數
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;
}
它的 output 可能看起來像
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
我使用 function 和來掃描數組的元素,並將數組的元素相加
scanf("%d", &array[i - 1]);
如果您想將數組從 SIZE-1 填充到 0,只需反轉 for 循環 (for(int i=SIZE-1;i>=0;i--))
int size;
如果您想在調用 function 時將大小作為參數,則應將其初始化為 SIZE(size=SIZE)
你的 function 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;
}
您需要清楚地記住,使用MAX
元素聲明的數組的最后一個元素是MAX-1
-th,因為元素從 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
的所有代碼
現在來到 function 調用sum(array[MAX], size);
它應該是
sum(array, size);
要傳遞一個數組,您必須傳遞其第一個元素的地址,即&array[0]
甚至只是array
。 數組名是指針嗎?
然后你傳遞的size
是未初始化的,你甚至沒有在sum()
中使用它,所以沒有理由聲明它。
另外我注意到您想在最后打印size
,並且由於您將它傳遞給sum()
,也許您想將其值修改為sum()
function。 如果是這樣,那么僅僅傳遞size
是不夠的。 這將傳遞size
的副本,並且對其值的任何更改都將丟失(除非您返回它,但您已經返回sum
)。 要真正修改size
,您必須傳遞其地址&size
,並讓sum()
接收指向 int int *
的指針
int sum(int array[], int *size)
而且您還返回了sum
,但不要將其存儲在任何地方。 你應該把它存儲在類似的地方
newVariable = sum(array, size);
或者,如果您只想打印它,那么只需打印它
printf("%d", sum(array, size));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.