C программирование поиска мин, макс и суммы без использования рекурсии и массивов - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь написать программу, которая получает набор чисел, n> = 5. Программа просит пользователя ввести n неотрицательных чисел и вычислить min, max и сумму чисел. Если пользователь вводит отрицательные числа, функция просит ввести положительное число. У меня проблема с первым отрицательным числом, какая-либо подсказка, что не так со следующим кодом?

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


Ответы [ 3 ]

2 голосов
/ 02 апреля 2020

вы должны положить после получения ввода от пользователя, чтобы не допустить отрицательного числа также внутри, когда нет необходимости ставить двойные отвердители

#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;
}
````````````  
0 голосов
/ 01 апреля 2020

У меня проблема с первым отрицательным числом, есть какие-либо подсказки, что не так со следующим кодом?

Не читать первое число по специальному коду, в котором отсутствует отрицательный тест. Упростите и читайте так же, как и другие числа.

Просто начните 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);
0 голосов
/ 01 апреля 2020

проверить, если 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}
         }
...