簡體   English   中英

使用基本知識在C語言中的最小和最大

[英]Min and max in C using basics

當用戶輸入0並顯示計數,總和,平均值,最小值和最大值時,該程序應結束。 我可以算出總和和平均值,但是我的最小值和最大值不起作用。

int main()
{
    int number = 0;
    int count = 0;
    int sum = 0;
    int average;
    int min = 0;
    int max = 0;    

    do {        
        printf("Enter a number: ");
        scanf_s("%d", &number);
        if (number > 0)
        {
            count = count + 1;
            sum += number;      
            min = number;
            max = number;

        }
        average = sum / count;

            if (number < min)
            {
                min = number;
            }
            else if (number > max)
            {
                max = number;
            }


    } while (number != 0);

    printf("count: %d\n",  count);
    printf("Sum: %d\n", sum);
    printf("average: %d\n", average);
    printf("Minimum: %d\n", min);
    printf("Maximum: %d\n", max);

    system("pause");
}

首先,使用適當的值初始化min和max。

int min = INT_MAX;
int max = INT_MIN;

其次,僅當輸入數字小於當前最小值時才更新最小值。 僅當輸入數字大於當前最大值時才更新最大值。

int main()
{
    int number = 0;
    int count = 0;
    int sum = 0;
    int average;
    int min = INT_MAX;   // don't forget to include limits.h
    int max = INT_MIN;

    do {        
        printf("Enter a number: ");
        scanf_s("%d", &number);
        if (number > 0)
        {
            count = count + 1;
            sum += number;
            if (number < min)
            {
                min = number;
            }
            if (number > max)
            {
                max = number;
            }
        }
        else if (number < 0) 
        {
            printf("Negative value entered...skipping");
        }
    } while (number != 0);

    printf("count: %d\n",  count);
    printf("Sum: %d\n", sum);
    average = sum / count;
    printf("average: %d\n", average);
    printf("Minimum: %d\n", min);
    printf("Maximum: %d\n", max);

    system("pause");
}

您需要做兩件事:

  1. 刪除min = number; max = number支票number > 0 這是因為您要用數字值覆蓋變量。 這將導致丟失先前的minmax (如果有)。
  2. 而不是int min = 0; 並且int max = 0 ,對整數數據類型使用上限和下限。 這存在於limits.h 您可以使用INT_MAX (2147483647)和INT_MIN (–2147483648)。
  3. 您的代碼還有另一個問題。 而不是else if (number > max) ,應該是if (number > max) 對於每一個數字,你需要檢查這兩個最小值和最大值。
  4. 同樣,條件if (number > 0)應該改為if (number != 0) 這是因為您希望程序在用戶輸入0時結束,因此要使其接受負數,必須更改條件。
  5. 另外,您不必每次都計算average 相反,您可以在退出循環后進行計算。
  6. 同樣,您需要將支票number != 0內的最小和最大支票移動。 這樣做的原因是,當number == 0時,您不想計算最小值和最大值。

您使用了:

if (number > 0)
{
    count = count + 1;
    sum += number;      
    min = number;
    max = number;
}

在這里,不要使用:

min = number;
max = number;

因為,當數字大於0時,最小值和最大值將設置為輸入數字,因此它下面的if和else if語句將不起作用。

將scanf讀取的第一個數字設置為min的初始值和max的初始值;無論這些數字是什么,這將始終有效。

if (count==1)
{
    min=number;
    max=number;
}

暫無
暫無

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

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