簡體   English   中英

數組總和,包括 function - C

[英]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 從0MAX - 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM