C程序: Updating max and min integers without using arrays

标签 c

我正在试验一个简单的 C 程序,该程序应提示用户输入选定数量的正整数。我在不使用数组的情况下获取输入的整数集的最大值和最小值时遇到问题。

我目前的方式是,它将更新最后两个输入值中的最大值和最小值。如果有人不介意看看我做错了什么,我将不胜感激。

看这里:

#include<stdio.h>

int main()
{
   int N ,i, value=0, min=0, max=0, sum=0, oldmin=0, Newmin=0, oldmax=0, Newmax=0;
double mean;

do{

  printf("How many values are to be entered?: ");
  scanf("%d", &N);
  printf("\n");

  if (N>0){

  do{   
     if (N>0){

                                // 1st value updated
     for (i=1;i<=N;i++)
     {   

         printf("Value %d:\n",i);
         scanf("%d", &value);
         sum  = sum+value; 
      }
       mean = (double)sum/(double)N;

      //max
         if(oldmax<Newmax){
            max = Newmax;
         }
         else max = oldmax;

      //min
        if(oldmin>Newmin){
            min = Newmin;
         }
         else min = oldmin;

  }

  else printf("INPUT ERROR!\n");
  }
  while(N<0);
      printf("\nThe minimum value is %d, the maximum value is %d, and the average value is %.2lf.",min,max,mean);

      }else printf("INPUT ERROR!\n");
  } while(N<0);

return 0;}

最佳答案

一些评论:

  • 您需要在执行的同一循环中设置 的最小/最大值 sum = sum+value; ,这就是你关于最小/最大问题的原因
  • 检查 scanf 结果以确保输入了数字
  • if (N>0){ do{ if (N>0){所以两次检查但N永远不会改变
  • if (N > 0) { do { ... } while (N<0); }这毫无意义
  • 嵌入的循环没有意义,只需要 1 个循环

消除问题的提案:

#include<stdio.h>

int main()
{
   int N;

   fprintf(stderr, "How many values are to be entered?: ");
   if ((scanf("%d", &N)  != 1) || (N <= 0))
     printf("INPUT ERROR!\n");
   else {
     int i, min, max, sum = 0;

     for (i = 0; i < N; ++i) {
       int value;

       fprintf(stderr, "Value %d:\n",i);
       if (scanf("%d", &value) != 1) {
         printf("INPUT ERROR!\n");
         return -1;
       }
       sum  = sum+value; 
       if (i == 0) {
         min = max = value;
       }
       else {
         if (value < min)
           min = value;
         if (value > max)
           max = value;
       }
     }

     printf("\nThe minimum value is %d, the maximum value is %d, and the average value is %.2lf\n",
            min,max, (double)sum/(double)N);
   }

   return 0;
}

编译和执行:

pi@raspberrypi:/tmp $ gcc -g -pedantic -Wextra c.c
pi@raspberrypi:/tmp $ ./a.out
How many values are to be entered?: 3
Value 0:
1
Value 1:
2
Value 2:
3

The minimum value is 1, the maximum value is 3, and the average value is 2.00

我使用fprintf用\n刷新消息,并将第一轮的第一个minmax值设置为不必使用 MIN_INT MAX_INT 可能没有为您定义

关于C程序: Updating max and min integers without using arrays,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54751906/

相关文章:

c - socket sendto在udp数据包期间得到错误22

python - 如何以最简单的方式调试 Python C 扩展中的引用计数?

将 uint** 转换为 uint

c - 我应该在 GlobalRealloc 之后释放全局内存吗?

c - "Connection Reset by Peer"如果服务器在 write() 之后立即调用 close()

c - 非确定性 CUDA C 内核

C 通过引用传递结构

c - 将项目添加到链接列表

c - c 中的指针- "is a pointer; did you mean to use ' ->'?"

c - 除了 C 中的 printf() 和 fprintf() 之外,还有其他方法可以在屏幕上打印吗?