大家帮我看看,为什么我在输入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;
}
}
}
程序有问题,你每次都重新输入一次n,之前的相当于没有累加,最后一次i=4,n=4,结果当然是1啦
你应该先定义一个变量sum表示总和,然后用sum+=n;就没有问题了。
每次 scanf("%d",&n) 把原来的n都给覆盖了
定义个sum, 用来计算累加的值
scanf("%d",&n);
n += n ;//你这两行累加是错误的,出现的两处都删掉,
并且应该先定义一个变量sum表示总和并初始化为0——— int sum =0;然后while循环里面用sum+=n求和;
这样就没有问题了。
这是我按照你写的程序改过之后的代码和调试结果
如果还有问题可以私信我
这么写,4个2的平均肯定是1啊。每次循环到scanf("%d",&n); 时,输入数据后都会将n之前的值覆盖掉,所以最后就变成4/4,结果自然为1。你这里应该
额外定义一个变量用于存取累加和,例如int sum=0; 用sum += n代替n+=n后就能求得平均值。
相信我,听他们的你还是对不了。
最重要的一点他们已经说了,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;
}
}
}
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分支程序?
重新定义int sum sum=sum+n;
n+=n是什么意思 定义一个sum sum+=n
你的n每次都被更新了,再加一个sum来记录总和就好了
求出和以后在除以个数就是平均数了
再定义一个变量吧,n的值每次都被覆盖啦
逻辑问题,每次scanf()都把n给重新赋值了,所以累加不起来。另外最后的average = n / i部分,两个int型的相除可以得到double型吗?