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