簡體   English   中英

C 編程不使用遞歸和數組查找最小值、最大值和總和

[英]C programming find min,max and sum without using recursion and arrays

我正在嘗試編寫一個獲取一堆數字的程序,n >= 5 該程序要求用戶輸入 n 個非負數並計算最小值、最大值和數字的總和。 如果用戶輸入負數,該函數會要求輸入正數。 我對第一個負數有疑問,是否知道以下代碼有什么問題?

void main()
{
    int x;
    printf("Enter number:\n");
    scanf("%d", &x);
    if (x >= 5)
    {
        int max = 0, min, num1;
        printf("Enter numbers: \n");
        scanf("%d", &num1); //here was the error
        min = num1;
        int sum = num1;
        for (int i = 1; i < x; i++)
        {
            scanf("%d", &num1); 
            while (num1 < 0)
            {
                {
                    printf("Enter again number: /n");
                    scanf("%d", &num1);
                }
            }
            if (num1 > max)
                max = num1;
            else if (num1 < min)
                min = num1;
            sum += num1;
        }
        printf("The max number is %d, and the min is %d, and the sum is %d", max, min, sum);
    }
    else
        printf("invalid number!");
}

output:

Enter number:
8
Enter numbers:
-8
7
6
9
10
6
7
6
The max number is 10, and the min is -8, and the sum is 43


檢查min<0是否為它分配了新輸入的num1值。

        for (int i = 1; i < x; i++)
        {
            scanf("%d", &num1);
            if (min < 0)
                min = num1;
            while (num1 < 0){
            //rest of the code}
         }

我對第一個負數有疑問,是否知道以下代碼有什么問題?

不要用特殊代碼讀取第一個數字,因為它沒有否定測試。 像其他數字一樣簡化和閱讀。

只需從極端開始min,max

#include <limits.h>

    ...
    int max = INT_MIN;
    int min = INT_MAX;
    int sum = 0;
    printf("Enter numbers: \n");
    for (int i = 0; i < x; i++) { // start at 0
        int num1;
        scanf("%d", &num1); 
        while (num1 < 0) {
            printf("Enter again number: /n");
            scanf("%d", &num1);
        }
        if (num1 > max)
            max = num1;
        // else if (num1 < min)
        if (num1 < min)
            min = num1;
        sum += num1;
    }
    printf("The max number is %d, and the min is %d, and the sum is %d", 
        max, min, sum);

您應該在從用戶那里獲取輸入后放入 while 以防止在里面也出現任何負數,而無需放入雙重治療板

#include <stdio.h>

int  main()
{
    int x;
    printf("Enter number:\n");
    scanf("%d", &x);

    if (x >= 5)
    {
        int max = 0, min, num1,sum;

        printf("Enter numbers:\n");



        sum = 0;
        min = num1;

        for (int i = 1; i<=x; i++)
        {   
            scanf("%d",&num1); 

             while(num1<0)
        {
            printf("Enter again number: \n ");
            scanf("%d", &num1);
        }


            if (num1 > max)
               { max = num1;}
            if (num1<min)
               { min = num1;}

          sum += num1;
        }
        printf("The max number is %d, and the min is %d, and the sum is %d", max, min, sum);
    }
    else
        printf("invalid number!");


 return 0;
}
````````````  

暫無
暫無

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

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