由用户输入20个整数,编写程序统计输出其中负数的个数以及所有正数的平均值 注意:输入只能使用scanf()函数,使用其他输入函数不得分。 输入格式: 输入20个整数 输出格式: 分两行输出负数个数和正数平均值,平均值保留两位小数
时间: 2025-07-11 15:48:30 浏览: 4
<think>好的,用户需要编写一个C语言程序,用scanf读取20个整数,统计负数个数和正数的平均值。首先,我得考虑如何用循环结构来读取20次输入。可能需要一个循环变量,比如用for循环从0到19。
接下来,如何区分正数和负数。这里要注意,0的处理可能需要明确,用户的问题里只提到负数和正数,所以0应该不算在两者中。因此,在判断时,如果输入的数大于0,则计入正数的总和和计数;如果小于0,则负数计数加一。
然后,需要考虑变量的初始化。负数计数器初始化为0,正数的总和和计数器也要初始化为0。另外,计算平均值时,如果正数的数量是0,要避免除以零的错误,所以需要检查除数是否为零。
使用scanf时,要注意每次读取一个整数,并且处理可能的输入错误,但用户可能希望简单实现,所以暂时不处理输入错误的情况,假设用户输入的都是整数。
在循环内部,每次读取一个数后,立即判断是正数还是负数。如果是正数,加到正数总和,并增加正数计数;如果是负数,增加负数计数。循环结束后,计算平均值:正数总和除以正数数量,但要注意类型转换,避免整数除法的问题,所以总和和计数应该用浮点类型或进行强制转换。
最后,输出结果,负数个数和正数的平均值。如果正数数量为0,可能需要提示没有正数输入,避免除以零的错误。
现在把这些思路转化为代码结构,大致步骤如下:
1. 声明变量:循环变量i,输入数num,负数计数器negative_count,正数计数器positive_count,正数总和positive_sum。
2. 初始化所有计数器为0。
3. 循环20次,每次用scanf读取num。
4. 判断num的正负,更新相应计数器。
5. 循环结束后,计算平均值,注意类型转换。
6. 输出结果,处理可能的除零情况。
然后,检查可能的边界情况,比如所有数都是负数,或者都是正数,或者包含零的情况。根据用户需求,零不参与正数或负数的统计,所以需要明确判断条件为num > 0和num < 0。
现在编写代码时,需要注意变量的类型。positive_sum应该声明为float或double,而positive_count可以是整数,但计算平均值时需要转换为浮点数。
例如,代码结构可能如下:
#include <stdio.h>
int main() {
int num, negative_count = 0, positive_count = 0;
float positive_sum = 0.0f;
for (int i = 0; i < 20; i++) {
scanf("%d", &num);
if (num < 0) {
negative_count++;
} else if (num > 0) {
positive_count++;
positive_sum += num;
}
}
float average = positive_count > 0 ? positive_sum / positive_count : 0.0f;
printf("负数个数: %d\n", negative_count);
if (positive_count > 0) {
printf("正数平均值: %.2f\n", average);
} else {
printf("没有正数输入\n");
}
return 0;
}
需要测试几种情况,比如输入中有零的情况是否被忽略,负数是否正确统计,正数平均值是否正确计算。例如,输入中有5个负数,10个正数,5个零,结果应该负数个数5,正数平均值是总和除以10。
还要注意格式化输出,比如平均值保留两位小数。此外,在计算平均值时,使用三元运算符处理除零的情况,或者可以在输出时判断positive_count是否为0。
这样应该能满足用户的需求了。</think>要编写一个C语言程序统计20个整数中的负数个数和正数平均值,可以按以下步骤实现:
```c
#include <stdio.h>
int main() {
int num, negative_count = 0, positive_count = 0;
float positive_sum = 0.0f;
printf("请输入20个整数:\n");
for (int i = 0; i < 20; i++) {
scanf("%d", &num);
if (num < 0) {
negative_count++; // 负数计数
} else if (num > 0) {
positive_count++; // 正数计数
positive_sum += num; // 累加正数值
}
}
// 计算正数平均值(注意除零保护)
float average = (positive_count > 0) ? (positive_sum / positive_count) : 0;
printf("负数个数:%d\n", negative_count);
if (positive_count > 0) {
printf("正数平均值:%.2f\n", average);
} else {
printf("未输入正数\n");
}
return 0;
}
```
**代码解析:**
1. 通过`for`循环和`scanf`连续读取20个整数
2. 使用`num < 0`判断负数,`num > 0`判断正数(注意0被排除统计)
3. 正数总和`positive_sum`采用`float`类型以保证计算精度
4. 通过三元运算符`?:`实现除零保护
5. 结果输出保留两位小数,符合常规统计需求[^1][^2]
阅读全文