#include<stdio.h> int main(void) { int m,i=0,j=0,sum= 0; float ave1,ave2; while((m = getchar()) !=0) { if(m%2==0) { i++; sum+=m; ave1=sum/i; } if(m%2==1) { j++; sum+=m; ave2 = sum/j; } } printf("%d,%f",i,ave1); printf("%d,%f",j,ave2); return 0; }
时间: 2024-02-14 19:12:18 浏览: 75
这个程序仍然存在问题。虽然使用了 getchar() 函数来读取用户输入的字符,但是字符类型和整数类型是不同的,所以在进行模 2 运算时会出错。正确的做法是将读取到的字符转换为整数类型,可以使用 atoi() 函数或者手动转换。此外,printf 函数的格式化字符串中应该包含换行符,以便输出结果时每个数值占一行。下面是一个改进后的版本:
```c
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int m, i = 0, j = 0, sum1 = 0, sum2 = 0;
float ave1, ave2;
while ((m = getchar()) != EOF) {
m = atoi(&m);
if (m % 2 == 0) {
i++;
sum1 += m;
ave1 = (float) sum1 / i;
} else {
j++;
sum2 += m;
ave2 = (float) sum2 / j;
}
}
printf("偶数个数:%d,平均值:%f\n", i, ave1);
printf("奇数个数:%d,平均值:%f\n", j, ave2);
return 0;
}
```
在这个程序中,我们使用了 atoi() 函数将读取到的字符转换为整数类型。由于 getchar() 函数返回的是字符类型,我们需要将其传递给 atoi() 函数时取其地址,以便 atoi() 函数可以正确地解析。另外,我们需要在 while 循环中使用 EOF(即 End of File)来判断何时结束循环。最后,我们需要在 printf 函数的格式化字符串中包含换行符,以便输出结果时每个数值占一行。
阅读全文