输入m个数,求其最大数、最小数和平均值 输入格式: 先输入m的值,m必须是大于0的整数 另起一行输入m个数,可以是负数,可以是小数,中间用空格分隔 输出格式: 依次输出最大数、最小数和平均数,中间用逗号分隔,均保留2为小数 输入样例: 5 -2.3 -7.8 0 56 90 输出样例: 90.00,-7.80,27.18
时间: 2025-03-23 16:14:38 浏览: 41
<<
要实现这个功能,我们可以使用以下步骤:
1. 首先读取整数`m`作为接下来数组中数字的数量,并确保它是有效的(即大于0)。
2. 动态分配存储空间用于存放这`m`个浮点数值。
3. 从标准输入流依次读入这些数据并存放到动态分配的空间里。
4. 使用循环遍历整个数组找到最大值与最小值,并计算总和以便后续得到平均值。
5. 最后按照要求格式化输出结果。
下面是完整的C语言程序示例:
```c
#include <stdio.h>
#define PRECISION "%.2f"
int main() {
int m;
// 输入m的值
printf("Enter the value of m: ");
if (scanf("%d", &m) != 1 || m <= 0){
fprintf(stderr,"Error: Invalid input for m.\n");
return 1;
}
double *numbers = NULL;
numbers = (double *)malloc(m * sizeof(double));
if(numbers == NULL){
perror("Failed to allocate memory.");
return 1;
}
printf("Enter %d number(s): ", m);
for(int i=0;i<m;i++) {
scanf("%lf",&(numbers[i]));
}
double max = numbers[0];
double min = numbers[0];
double sum = 0;
for(int i=0;i<m;i++) {
if(max<numbers[i]){
max = numbers[i];
}if(min>numbers[i]){
min = numbers[i];
}
sum += numbers[i];
}
free(numbers);
double average = sum / m;
printf(PRECISION ","PRECISION","PRECISION"\n",max,min,average);
return 0;
}
```
**解释:**
上述代码首先定义了一个宏来处理精度设置,简化了printf调用中的重复部分。然后在main函数开始时声明变量m用来保存用户即将输入的数据数量。接着检查读入是否成功以及该数值是否符合预期条件——需为正整数;如果不满足,则会打印错误信息退出运行。
之后尝试利用系统库函数malloc根据所需大小开辟一块连续内存块供储存接下来的一系列实数元素之用。如果申请失败则报告问题终止执行。
完成初始化准备工作以后就是实际的数据录入过程。这里采用了简单的for循环逐一接收来自用户的每项具体数值直至达到预定数目为止。
紧接着设立三个局部变量分别代表当前已知的最大值、最小值及累加器初始状态设为首元内容。再一次运用类似的迭代逻辑逐一遍历所有成员更新对应的状态记录同时累积总量准备算出最终答案所需的分子成分。
释放之前所占有的堆区内存避免资源泄漏情况发生。最后将取得的各项指标依照指定样式呈现给使用者看到完整的结果集包括最高最低分数加上总体均值得分都精确到了两位小数位。
阅读全文
相关推荐



















