C语言如何统计奇偶数,并求出奇偶数的平均数?

这段代码哪里有问题?

#include <stdio.h>
int main(){
    int n, sum=0,s=0,cnt=0,k=0;
    while(scanf("%d",&n)!=EOF){//原来的问题主要在getchar()
    //getchar()每次只能获取一个数字字符。而期望输入应该是整数,长度可能
    //不止一个数位。比如输入可能是12 ,234,4444。
        if(n==0) //所以,接收输入整数,再加以判断一下是否结束输入,退出循环
            break;
        cnt++;//统计所有输入整数个数及和
        sum+=n;
        if(n%2==0){//统计偶数个数及偶数和,奇数和明显可以用总和减去偶数和。
        //奇数个数可用总个数减去偶数个数
            s+=n;
            k++;
        }    
    }
    printf("奇数和 %d,平均数 %f,偶数和 %d,平均数 %f\n",sum-s,1.0*(sum-s)/(cnt-k),s,1.0*s/k );
    //平均数可能带有小数,用浮点型%f输出
    //用1.0去乘再除,告诉系统结果转为浮点型
    return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-09-12
getchar函数获取到的时char型的字符,也就是说你输入的1,程序接收到的是字符'1',它的ASCII码是49,求和的时候参与计算的时候是49。所以会出现平均数那么大的原因。解决方法是getchar后ch减去48(0的ASCII值)。
相似回答