2 yzy4829229 yzy4829229 于 2015.06.03 15:33 提问

关于C语言求平均数的程序

大家帮我看看,为什么我在输入4个2之后,结果平均数是1呢?

 # include<stdio.h>
main(){
    printf("*************************\n");
    printf("这个程序是求平均数的程序\n");
    printf("*************************\n");
    int i = 0 ;
    int n = 0  ;
    int p ;
    double average ;
    printf("请输入数字\n");
    scanf("%d",&n); 
    n += n ;
    i++;
    while(2){
    printf("还输入数字吗?是的话按1,否则按0\n");
    scanf("%d",&p);
    if(p == 1){
        printf("请输入数字\n");
        scanf("%d",&n); 
        n += n ;
        i++;
    }
    else{
        average = n / i ;
        printf("平均是是%lf\n",average);break;
        }
    }
}

14个回答

xianfajushi
xianfajushi   2015.06.03 15:38

scanf("%d",&n);
n += n ;你这累加是什么意思?

monaso
monaso   2015.06.03 15:37

程序有问题,你每次都重新输入一次n,之前的相当于没有累加,最后一次i=4,n=4,结果当然是1啦

monaso
monaso   2015.06.03 15:39

你应该先定义一个变量sum表示总和,然后用sum+=n;就没有问题了。

xianfajushi
xianfajushi   2015.06.03 15:40

你这样,新建一个变量 int c(0);然后
scanf("%d",&c);
n += c ;这样试看

edouardzyc
edouardzyc   2015.06.03 16:01

每次 scanf("%d",&n) 把原来的n都给覆盖了
定义个sum, 用来计算累加的值

a1193561652
a1193561652   Rxr 2015.06.03 16:16

逻辑问题,每次scanf()都把n给重新赋值了,所以累加不起来。另外最后的average = n / i部分,两个int型的相除可以得到double型吗?

qq1976824764
qq1976824764   2015.06.03 16:25

scanf("%d",&n);
n += n ;//你这两行累加是错误的,出现的两处都删掉,
并且应该先定义一个变量sum表示总和并初始化为0——— int sum =0;然后while循环里面用sum+=n求和;
这样就没有问题了。
这是我按照你写的程序改过之后的代码和调试结果
图片说明
如果还有问题可以私信我

yangjie1987636
yangjie1987636   2015.06.03 16:46

这么写,4个2的平均肯定是1啊。每次循环到scanf("%d",&n); 时,输入数据后都会将n之前的值覆盖掉,所以最后就变成4/4,结果自然为1。你这里应该
额外定义一个变量用于存取累加和,例如int sum=0; 用sum += n代替n+=n后就能求得平均值。

qq_17246605
qq_17246605   2015.06.03 16:53

相信我,听他们的你还是对不了。

最重要的一点他们已经说了,n重复使用导致和并没有存下来,用一个变量保存和。

但是!!!!
你的average定义为double型也就是说你想要的是double型的平均值,你现在的程序只能给出int型的平均值,也就是输入
1 1 1 0的平均值不是0.75而是0,(int除法自动向下取整)
解决方式,定义一个double型的sum保存和。

#include
main(){
printf("*************************\n");
printf("这个程序是求平均数的程序\n");
printf("*************************\n");
int i = 0 ;
int n = 0 ;
double sum=0;
int p ;
double average ;
printf("请输入数字\n");
scanf("%d",&n);
sum += n ;
i++;
while(2){
printf("还输入数字吗?是的话按1,否则按0\n");
scanf("%d",&p);
if(p == 1){
printf("请输入数字\n");
scanf("%d",&n);
sum += n ;
i++;
}
else{
average = sum / i ;
printf("平均是是%lf\n",average);break;
}
}
}


yunfenglw
yunfenglw   2015.06.03 18:55

while(2)//2没错,也是逻辑1,循环继续,不过从规范来说是不是还是写成1好?
while(2)之上的n += n ;是不是有些多多余?
while(2)循环里面的scanf("%d",&n),这样用户属于的值是不是已经覆盖之前的历史值?n += n 相当于n=n+n, n=n*2,相对于把用户输入乘2?
scanf("%d",&p);还有对用户输入,用户输入的判断if(p == 1) { .....}else{.......}只把1,0作为用户输入是不是范围有点小,用户误输入其他字符也是代表0进入else分支程序?

共14条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片