簡體   English   中英

C 中的 Function 查找數組中的最大元素

[英]Function in C to find max element in an array

您正在參與一個游戲,玩家在游戲中為各種已解決的謎題收集積分。 最后,得分最高的玩家獲勝。 您想知道得分最高的人與其他人相差多遠,才能知道您是否還有機會獲勝。

請編寫一個 C 程序,該程序使用 function “behind()”(您也必須編寫)以幫助完成此任務。 您的程序應該首先從用戶輸入中讀取參與游戲的玩家數量。 游戲中的玩家永遠不會超過 10 人。 接下來,您的程序應該讀取每個玩家的當前分數並將它們存儲在一個數組中。 然后你應該調用 function behind(),作為第一個參數傳遞給它,數組保存玩家的分數,第二個參數是游戲中的玩家數量。 后面的 function 應該將存儲在數組中的分數替換為每個玩家落后於得分最高的玩家的分數。

為了幫助你,程序的主要function已經寫好了,所以你的工作就是在后面寫function,它的原型也給你了。

#include <stdio.h>

void behind(int *, int);

int main(void) {
int array[10];
int N, i;

scanf("%d", &N);
for (i=0; i<N; i++) {
    scanf("%d", &array[i]);
}
behind(array, N);
for (i=0; i<N; i++) {
    printf("%d\n", array[i]);
}

return 0;
}

我的問題是我如何編寫代碼來查找數組元素的最大值,而不將最后一個元素與 memory 塊之外的東西進行比較? 我有一些想法,例如:

if(array[i] > array[i+1]) {
max = array[i];
} else {
 max = array[i+1];
}

但意識到一旦到達最后一個元素,它就會超出數組的范圍。

我如何編寫代碼來查找數組元素的最大值而不將最后一個元素與 memory 塊之外的東西進行比較?

您只需在進入循環之前將max設置為0 然后比較每次迭代時array[i]是否大於max 如果是,則maxarray[i]分配。 循環條件i < len檢查array中是否有更多元素:

int max = 0;

for (unsigned int i = 0; i < N; i++) {

    if (array[i] > max) {
       max = array[i];
    }    
}

另一件事是,您首先有一個由 10 個元素組成的固定大小的數組

int array[10];

然后要求用戶輸入元素的數量:

scanf("%d", &N);

如果用戶為N輸入大於11的數字,則您在循環中訪問 memory 超出了數組的邊界。

在這種情況下,在scanf()調用之后將array聲明為可變長度數組會更合適:

int N, i;

scanf("%d", &N);
int array[N];

由於永遠不會超過 10 名玩家:“游戲中永遠不會超過 10 名玩家” - 您也可以將固定大小的array保留為10元素,並在循環中分析N的輸入並要求用戶重新輸入如果N不在此范圍內,則為 0 到 10 之間的有效數字。 您僅將N用於迭代,但它不會影響數組大小。

int array[10];

while (1) {

   scanf("%d", &N);

   if ( N >= 0 || N <= 10 ) {
       break;
   }  

   printf("Please reinput a valid number!\n");
}

旁注:

我如何編寫代碼來查找數組元素的最大值而不將最后一個元素與 memory 塊之外的東西進行比較?

您可以對behind()進行編碼,例如:

void behind(int *arr, int n) {
    int max_value = 0;

    for (int i = 0; i < n; i++)
        if (arr[i] > max_value)
            max_value = arr[i];
    
    printf("Max value: %d\n", max_value);
}

您可以將array聲明為指針變量,而不是定義數組,這會很有幫助。 然后,您可以動態分配 memory ,然后像數組一樣使用它,還要注意您正在嘗試傳遞指針,因此最好從指針聲明中受益。

完整的方法:

#include <stdio.h>
#include <stdlib.h> // for dynamic memory allocation

void behind(int *, int);

int main(void) {
    int *array; // declaring as pointer rather than array
    int N, i;

    scanf("%d", &N);

    if (N > 11) { // must be less than 10
        printf("Must be lesser than or equal to 10!\n");
        return -1;
    }

    // dynamically allocating the required memory
    array = (int *)malloc(sizeof(int) * N);

    for (i = 0; i < N; i++)
        scanf("%d", &array[i]);

    // here we go
    behind(array, N);

    for (i = 0; i < N; i++)
        printf("%d\n", array[i]);

    return 0;
}

void behind(int *arr, int n) {
    int max_value = 0;

    for (int i = 0; i < n; i++)
        if (arr[i] > max_value)
            max_value = arr[i];
    
    printf("Max value: %d\n", max_value);
}

output 示例如下:

5    // ------------ INPUT
12
45
23
1 
05
Max value: 45 // --- OUTPUT
12
45
23
1
5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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