如何创建一个要求用户输入“最多”20 个整数并使用传递给函数的参数来输出最大值、最小值和平均值的程序?

Posted

技术标签:

【中文标题】如何创建一个要求用户输入“最多”20 个整数并使用传递给函数的参数来输出最大值、最小值和平均值的程序?【英文标题】:How to create a program that asks user to enter "up to" 20 integers and uses parameter passing to functions to output the max, min, and average value? 【发布时间】:2016-03-02 19:05:32 【问题描述】:

对于作业,我需要用 C 语言创建一个程序,该程序使用数组和函数并提示用户输入最多 20 个整数来查找最小值、最大值和平均值。到目前为止,当用户输入 20 个数字但输入少于 20 个数字会使该程序打印垃圾值时,我有一个程序可以正常工作。我知道有一种方法可以用 malloc() 做到这一点,但我们还没有学会。我应该进行哪些更改以使该程序可以处理少于 20 个值?这是我的代码:

#include <stdio.h>
#define SIZE 20

int arrmin(int a[],int num_elements);
int arrmax(int a[], int num_elements);
float arraver(int a[],int num_elements);

int main(void)

   int a[SIZE],c,min,max;
   float avg;
   printf("Enter 20 numbers (q to quit)\n");
   for (c = 0; c <SIZE; c++)
   scanf("%d", &a[c]);


   max = arrmax(a,SIZE);
   printf("Maximum value is %d\n", max);

   min = arrmin(a,SIZE);
   printf("Minimum value is %d\n", min);

   avg = arraver(a,SIZE);
   printf("Average value is %f\n", avg);

   getch();


int arrmax(int a[], int num_elements)

   int i, max;
   max = a[0];
   for (i=1; i<num_elements; i++)
   
      if (a[i]>max)
      
         max=a[i];
      
   

   return(max);


int arrmin(int a[], int num_elements)

   int i, min;
   min = a[0];
   for (i=1; i<num_elements; i++)
   
      if (a[i]<min)
      
         min=a[i];
      
   

   return(min);


float arraver(int a[], int num_elements)

   int sum,i;
   float avg;
   sum=0;
   avg=0;

   for (i=0; i<num_elements;i++)
   
      sum=sum+a[i];
      avg=(float)sum/(i+1);
   
   return(avg);

【问题讨论】:

计算机如何知道用户不会再输入任何数字?您需要考虑一些分隔符,例如按 EOF 键。 总是检查可能遇到错误的函数的结果 - 例如scanf 用户如何指示少于输入的数字,而不是简单地等待更多? 您的代码显示“q to quit”。但是您的代码将无法准确捕获该条件,因为 scanf 仅在寻找整数。您可以通过多种方式解决这个问题,但我们假设任何非数字都被认为是输入的结尾。在这种情况下,检查scanf 返回值是否为1 是否成功。之后,您只需将输入的实际数量传递给 max/min/aver 函数,而不是 SIZE。计数已经存储在c 变量中,假设您在scanf 失败时break 好吧,我认为那是我做错了。我设置了这个程序,以便 q (或任何非整数)将结束程序。我会继续尝试你的建议谢谢! 【参考方案1】:

为了解决您的问题,我经常使用以下两种方法之一:

第一种方法,您应该在开头输入一个数字,该数字是数组的大小。之后,您应该分配一个具有此大小和输入元素的数组。 第二种方式,在元素大于0的时候输入元素。也就是说,如果你输入一个数字0,输入就会停止。开始时不需要输入大小,可以随时输入元素。

【讨论】:

以上是关于如何创建一个要求用户输入“最多”20 个整数并使用传递给函数的参数来输出最大值、最小值和平均值的程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Java中处理一维数组的跳过输入

只用2GB内存在20亿个整数中找到出现次数最多的数

为啥我的数组没有保存结果?

华为OD机试 - 最多几个直角三角形(Java & JS & Python)

1054. 求平均值 (20)

如何编写要求输入 10 个数字的代码