簡體   English   中英

C-在數組中查找最大值

[英]C - Find maximum value in array

我正在這里的一個程序上工作,正在訪問文件輸入並遍歷文件中的值數組。 但是,它沒有正確計算最大值。 有什么幫助嗎?

#include <stdio.h>

int main() {

int header, i, j, cur_val, auction[50], sum = 0;
int max = 0;

FILE * ifp;

ifp = fopen("input.txt", "r");

fscanf(ifp, "%d", &header);

for (i = 0; i < header; i++) {

    fscanf(ifp, "%d", &cur_val);
    printf("%d\n", cur_val);

    for (j = 0; j < cur_val; j++) {
        fscanf(ifp, "%d", &auction[j]);

        printf("%d\n", auction[j]);

        max = auction[0];
        if (auction[j] > max) {
            max = auction[j];
        }

    }//end j loop

    printf("Max: %d\n", max);
    printf("\n");
    //printf("Auction %d was sold for $%.2f!\n", i+1, );
    //sum+=max;

}//end i loop

fclose(ifp);


return 0;

}

這是文件輸入:

5

4

100 500 250 300

1

700

3

300 150 175

2

920 680

8

20 10 15 25 50 30 19 23

打印到控制台的最大值如下:

300 700 300 920 23

中間3個作品,但不是第一個和最后一個。 知道為什么嗎?

您將max設置為auction [0]; 在每個循環中,消除您以前的最大值。

在循環內僅初始化一次最大值,或者在循環外初始化最大值(在讀取第一個值之后)。

您在列表中找到比拍賣更大的最后一個數字[0]

線性 max_value循環的規范實現是這樣的

給定

  • N值
  • MIN_N <= N <= MAX_N

max_value = MIN_N for i in 1...N if values[i] > max_value max_value = values[i]

現在,您可以將所有值讀入一個數組(我在上面將其稱為values ),也可以一次讀入一個值。

將其轉換為C,並在此處假設一個數組以簡化操作:

int max_value = MIN_N;
for (int i = 0; i < N; ++i) {
    if (values[i] > max_value)
        max_value = values[i];
}
printf("Max %d\n", max_value);

對於您的實際分配,您需要將其包裝在一個循環中以處理所有測試用例。 為了避免內存管理等需求,我可能會讀數字。

FILE *f = open_input_file(); // could return stdin for testing
int T = read_an_integer(f);

for (int t = 0; t < T; +=t) {
    int N = read_an_integer(f);
    int max_value = MIN_N;

    if (N <= 0) continue;

    for (int n = 0; n < N; ++n) {
        int v = read_an_integer(f);
        if (v > max_value)
             max_value = v;
    }

    printf("Max %d\n", max_value);
}
close_my_file(f);

我將保留文件處理和I / O的功能-但請確保您處理所有錯誤情況(在這種情況下,調用exit(-1)可能就足夠了)。

暫無
暫無

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

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