【问题标题】:Average, max, and min program in CC 中的平均、最大值和最小值程序
【发布时间】:2014-01-13 05:22:41
【问题描述】:

所以我正在用 C 语言编写代码,我需要编写从用户那里获取 n 个数字的代码,并为它们的值找到它们的最小值、最大值、平均值和平方和。到目前为止,我有平均值和平方和部分,但最小值和最大值对我很不利。

请记住,我处于非常初级的水平,还没有达到数组。我只知道逻辑运算符、函数、循环以及 stdlib.h、math.h 和 stdio.h 库的使用。

这是我目前所拥有的。 当我在编译过程中尝试放置 float 和 double 时,average 函数给了我很多问题,所以将它乘以 1.0 来修复它。我什么都有,只有最小和最大。我一直将最后一个条目作为我的最大值,并将 0 作为我的最小值。

#include<stdio.h>
int main()
{
    float average;
    int i, n, count=0, sum=0, squaresum=0, num, min, max;


    printf("Please enter the number of numbers you wish to evaluate\n");
    scanf_s("%d",&n);

    printf("Please enter %d numbers\n",n);

    while(count<n)
    {
        min=0;
        max=0;

            if(num>max)
               max=num;
            if(num<min)
               min=num;

            scanf_s("%d",&num);

        sum = sum+num;
        squaresum = squaresum + (num*num);

        count++;
    }
        average = 1.0*sum/n;

    printf("Your average is %.2f\n",average);
    printf("The sum of your squares is %d\n",squaresum);    



    printf("Your maximum number is %d\n",max);
    printf("Your minimum number is %d\n",min);

return(0);
}

【问题讨论】:

    标签: c while-loop


    【解决方案1】:

    您的代码当前的编写方式,min 必须以较高的值(而不是 0)开始,否则代码将无法工作。选择的最佳值是int 的最大可能值。

    您还应该考虑是否要在每次循环中重置这些变量。

    【讨论】:

      【解决方案2】:

      你的 while 循环应该是这样的

         min=3;
         max=0;
      while(count<n)
          { 
      
           scanf("%d",&num);
          if(num>max)
          max=num;
          if(num<min)
          min=num;
      
          sum = sum+num;
          squaresum = squaresum + (num*num);
      
          count++;
      }
      

      我同意Robert Harvey♦.. 你必须设置min

      【讨论】:

      • @RobertHarvey minmax 不在循环中
      【解决方案3】:

      您的算法不太正确。下面是正确的实现:

      #include <stdio.h>
      #include <stdlib.h>
      #include <limits.h>
      
      int main(void)
      {
          float average;
          int n, num, count = 0, sum = 0, squaresum = 0;
          int min = INT_MAX, max = INT_MIN;
          bool gotAnswer = false;
      
          /* Don't Let User Enter Wrong Input */
          while(!gotAnswer)
          {
              printf("Please enter the number of numbers you wish to evaluate: ");
              if(scanf_s("%d", &n) != 1)
              {
                  /* User Entered Wrong Input; Clean Up stdin Stream*/
                  while(getchar() != '\n')
                  {
                       continue;
                  }
              }
              else
              {
                  /* User Input Was Good */
                  gotAnswer = true;
              }
          }
      
          /* Clear stdin Stream Just In Case */
          while(getchar() != '\n')
              continue;
      
          while(count < n)
          {
              /* Don't Let User Enter Wrong Input */
              gotAnswer = false;
              printf("Enter number %d: ", count + 1);
              if(scanf_s("%d", &num) != 1)
              {
                  /* User Entered Wrong Input; Clean Up stdin Stream */
                  while(getchar() != '\n')
                      continue;
      
                  /* Let User Try Again */
                  continue;
              }
              else
              {
                  /* User Input Was Correct */
                  gotAnswer = true;
      
                  /* Clear stdin Stream Just In Case */
                  while(getchar() != '\n')
                      continue;
              }
      
              if(num > max)
                  max = num;
              if(num < min)
                  min = num;
      
              sum += num;
              squaresum += num * num;
              count++;
          }
      
          average = 1.0 * sum / n;
      
          printf("Your average is %.2f\n", average);
          printf("The sum of your squares is %d\n", squaresum);    
          printf("Your maximum number is %d\n", max);
          printf("Your minimum number is %d\n", min);
      
          system("pause");
          return 0;
      }
      

      我添加了错误检查和恢复功能。如果您对逻辑有任何疑问,请询问。

      【讨论】:

      • +1 用于检查scanf() 的结果并使用min = INT_MAX, max = INT_MIN
      • @chux 只是因为我知道你会确保我做对了。 :-D
      • @chux 你确实得到了我的圣诞愿望清单!谢谢圣诞老人!
      【解决方案4】:

      您的代码中存在一些问题:

      1. num 在哪里读取?你应该在 之前 minmax
      2. while 循环 执行第一次 时,您应该分配 nummaxmin

      类似的东西:

        int min = 0;
        int max = 0;
      
        // If your compiler supports C99 standard you can put
        // bool first_time = true;
        int first_time = 1;
      
        while (count < n) {
          printf("Please, enter the next number\n");
          scanf_s("%d", &num); 
      
          // If your compiler supports C99 you can put it easier:
          // if (first_time) { 
          if (first_time == 1) {
            first_time = 0;
            max = num;
            min = num;
          }
          else {
            if(num > max)
              max = num;
      
            if(num < min)
              min = num;
          }
        ...
      

      【讨论】:

      • @Ed Heal: boolean (bool) 只出现在 C99 中;由于在使用哪个 C 标准的问题中没有任何信息,所以我输入了 int
      • @DimitryBychenko - 我们正在进入 2014 年,所以人们假设有一个更现代的编译器!
      • @EdHeal 告诉所有使用微软编译器的人,如果他们想学习 C89 以外的任何东西,可以切换编译器!迅速地! :-P
      【解决方案5】:

      添加一个布尔值,移动给定值 min,max 0 是循环的开始

      #include<stdio.h>
      int main()
      {
          float average;
          int i, n, count=0, sum=0, squaresum=0, num, min, max;
      
          bool first = true;
          printf("Please enter the number of numbers you wish to evaluate\n");
          scanf_s("%d",&n);
      
          printf("Please enter %d numbers\n",n);
              min=0;
              max=0;
      
          while(count<n)
          {
                  scanf_s("%d",&num);
      
              if (first) {
                 first = false;
                 min = max = num;
              }
                  if(num>max)
                     max=num;
                  if(num<min)
                     min=num;
      
      
              sum = sum+num;
              squaresum = squaresum + (num*num);
      
              count++;
          }
              average = 1.0*sum/n;
      
          printf("Your average is %.2f\n",average);
          printf("The sum of your squares is %d\n",squaresum);    
      
      
      
          printf("Your maximum number is %d\n",max);
          printf("Your minimum number is %d\n",min);
      
      return(0);
      }
      

      还应该考虑检查scanf的返回值

      【讨论】:

        【解决方案6】:

        在循环外输入第一个num并将其分配给maxmin

        scanf("%d",&num);
        max = min = num;  
        

        将你的while循环改为无限循环

        while(1) {...} 
        

        现在检查您的计数器count 是否等于n 是否等于break 从无限循环中退出

        if(count == n)
            break;  
        

        修改后的完整代码:

        #include<stdio.h>
        int main()
        {
            float average;
            int i, n, count=0, sum=0, squaresum=0, num, min, max;
        
            printf("Please enter the number of numbers you wish to evaluate\n");
            scanf_s("%d",&n);
        
           printf("Please enter %d numbers\n",n);
        
           scanf_s("%d",&num);
           max = min = num;
        
           while(1)
           {
                if(num>max)
                   max=num;
                if(num<min)
                   min=num;
        
             sum = sum+num;
             squaresum = squaresum + (num*num);
        
             count++;
             if(count == n)
                break;
             scanf_s("%d",&num);
        
           }
            average = 1.0*sum/n;
        
        printf("Your average is %.2f\n",average);
        printf("The sum of your squares is %d\n",squaresum);
        
        
        
        printf("Your maximum number is %d\n",max);
        printf("Your minimum number is %d\n",min);
        
        return(0);
        }
        

        【讨论】:

          【解决方案7】:

          假设您在列表中的第一个数字是最小值和最大值。 将每个下一个字符与当前最小值和当前最大值进行比较并相应更新。

          【讨论】:

            【解决方案8】:
            int marks , marks_count=0 , max=0 , min=100 , marks_number=1;
            float total , avg;
            
            printf("Hit enter to input marks of 10 student.\n\n");
            getchar();
            
            do
            {
                printf("Input %d Mark : " , marks_number);
                scanf("%d" ,& marks);
            
            
                if (marks>max)
                {
                    max=marks;
                }
            
                else if (marks<min)
                {
                    min=marks;
                }
            
                marks_count++;
                marks_number++;
            
                total=total+marks;
            }
            
            while (marks_count<10);
            while (marks_number<10);
            
            
            avg=total/marks_count;
            
            printf("\n\nAverage marks are : %.2f\n" , avg);
            printf("Maximum marks are : %d\n" , max);
            printf("Minimum marks are : %d\n\n\n" , min);
            

            【讨论】:

              【解决方案9】:

              您可以使用此代码,它会检查循环是否第一次开始。如果它第一次运行,它将 n 的值分配给最小值和最大值变量,然后继续运行。当它第二次运行时,它会检查并发现程序第二次运行,因此它不会用 n 的值初始化变量而不进行比较。

              int n, limit, sum = 0, minimum, maximum;
              float average;
              bool firstTime = "true";
              
              printf("\nEnter Limit: ");
              scanf("%d", &limit);
              
              printf("\nEnter %d numbers: \n", limit);
              for (int i = 0; i < limit; i++)
              {
                  scanf("%d", &n);
                  if (firstTime)
                  {
                      minimum = n;
                      maximum = n;
                      firstTime = false;
                  }
                  if (minimum > n)
                  {
                      minimum = n;
                  }
              
                  if (maximum < n)
                  {
                      maximum = n;
                  }
                  sum = sum + n;
              }
              
              average = sum / limit;
              printf("\nMinimum: %d", minimum);
              printf("\nMaximum: %d", maximum);
              printf("\nSum: %d", sum);
              printf("\nAverage: %.3lf", average);
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2015-09-30
                • 1970-01-01
                • 2023-03-31
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-12-24
                • 2012-09-27
                相关资源
                最近更新 更多