【问题标题】:C programming find min,max and sum without using recursion and arraysC 编程在不使用递归和数组的情况下查找最小值、最大值和总和
【发布时间】:2020-07-13 13:24:34
【问题描述】:

我正在尝试编写一个获取一堆数字的程序,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


【问题讨论】:

  • 在输入的号码为&gt;= 0 的情况下,您没有维护min 等。将这些东西移出重新输入 num1 的代码块。
  • scanf("%d", num1); 应该是scanf("%d", &amp;num1); 的两个实例注意编译器警告。
  • 你遇到了什么错误?
  • ...最里面的大括号也没有形成真正需要它们的代码块。

标签: c sum max min


【解决方案1】:

检查min&lt;0 是否将新输入的num1 值分配给它。

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

【讨论】:

    【解决方案2】:

    我对第一个负数有疑问,知道下面的代码有什么问题吗?

    不要读取带有特殊代码的第一个数字,它缺少否定测试。像其他数字一样简化和阅读。

    简单地从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);
    

    【讨论】:

      【解决方案3】:

      您应该在接受用户输入后放置 while 以防止任何负数也在其中,而无需放置双重固化 prates

      #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;
      }
      ````````````  
      

      【讨论】:

        猜你喜欢
        • 2021-03-23
        • 2016-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-28
        • 2016-06-10
        • 2017-08-18
        • 2015-01-25
        相关资源
        最近更新 更多