从键盘入15个整数到教组中求其中正数的个数及其平均值
并新出结果。(平均值精确到小致点后两位)
注意:0既不是正数又不是负数
这里使用了两个变量 pos_count 和 pos_sum 来分别记录正数的个数以及总和。在遍历整个数组之后,我们就可以算出正数的平均值,并使用 cout.precision(2) 和 cout << fixed 来设置输出流输出小数点后两位的精度。
#include <iostream>
using namespace std;
int main() {
int nums[15]; // 定义存储 15 个整数的数组
int pos_count = 0; // 记录正数的个数
double pos_sum = 0; // 记录正数的和,使用 double 类型以防溢出
// 从键盘读入 15 个整数
for(int i=0; i<15; i++) {
cin >> nums[i];
}
// 遍历数组,统计正数的个数和和
for(int i=0; i<15; i++) {
if(nums[i]>0) {
pos_count++;
pos_sum += nums[i];
}
}
// 计算平均值
double pos_avg = (pos_count>0) ? (pos_sum/pos_count) : 0; // 注意分母不能为 0
// 输出结果
cout << "正数个数为:" << pos_count << endl;
cout.precision(2); // 设置输出流的小数点后两位
cout << "正数平均值为:" << fixed << pos_avg << endl; // 使用 fixed 保留小数位
return 0;
}
int main()
{
char x, y;
while (1)
{
printf(" 请输入一个字母, 输入 空格 结束程序: ");
fflush(stdin); //清空缓冲
x = _getch();
fflush(stdin); //清空缓冲
if (x >= 'a' && x <= 'z')
{
y = x - 32;
printf("输入的小写字母,转换后的的字符为:%c\n", y);
}
else if (x >= 'A' && x <= 'Z')
{
y = x + 32;
printf("输入的大写字母,转换后的的字符为:%c\n", y);
}
else if (x == ' ')
{
printf("再见\n");
return 0;
}
else
{
printf("输入错误\n");
}
}
return 0;
}
问题分析:
本题要求计算15个整数中正数的个数和它们的平均值,需要注意的问题有:
解决方案:
代码实现:
#include <stdio.h>
#define N 15
int main() {
int nums[N], cnt = 0, sum = 0;
for (int i = 0; i < N; i++) {
scanf("%d", &nums[i]);
}
for (int i = 0; i < N; i++) {
if (nums[i] > 0) { // 计算正数个数
cnt++;
}
if (nums[i] > 0) { // 计算有效值之和,不包括负数和0
sum += nums[i];
}
}
double avg;
if (cnt == 0) { // 特判除数为0的情况
avg = 0;
} else {
avg = (double)sum / cnt; // 平均值
}
printf("正数个数为%d,平均值为%.2f", cnt, avg);
return 0;
}
代码说明:
nums
,并以循环的方式读入15个整数并保存到数组中。示例输入:
1 2 3 -4 -5 6 7 0 9 10 11 -12 -13 -14 15
示例输出:
正数个数为11,平均值为6.55
完整代码及运行结果: