平均值不对
#include <stdio.h>int average(int a[],int c )
{
float d,sum=0;
int i;
for(i=0;i<c;i++)
{
sum=sum+a;
}
d=sum/c;
return (d);
}
int main()
{
float b;
int e;
scanf("%d %d %d %d %d %d %d %d %d %d",&e,&e,&e,&e,&e,&e,&e,&e,&e,&e);
b=average(e,10);
printf("%.1f",b);
return 0;
}
为什么平均值是小数时结果就不对,float不是可以到小数点后6位吗? 原因是你限制了结果的输出
printf("%.1f",b);
这种情况,求出来的平均值只有一位小数,不管是 5.303,还是 5.3999,用 %.1f 输出都是 5.3
解决方法:
printf("%f", b); //或者 printf("%.6f", b); zhangjinxuan 发表于 2022-11-6 11:32
原因是你限制了结果的输出
这种情况,求出来的平均值只有一位小数,不管是 5.303,还是 5.3999,用 %.1f ...
不是吧,我输入5个1和5个2结果却不是1.5,不信你可以去试试 你先别下线,我先研究研究 本帖最后由 jackz007 于 2022-11-6 11:43 编辑
int average(int a[],int c )
{
. . . . . .
float average(int a[],int c )
{
. . . . . .
问题解决了:
#include <stdio.h>
double average(int a[], int c) { //返回值必须为double(或float),否则就会强制转换为int而失去小数位数
double d, sum = 0; //推荐double
int i;
for(i = 0; i < c; i++) {
sum = sum + (double)a;
}
d = sum / c;
return d;
}
int main() {
double b;
int e;
for (int i = 0; i < 10; ++i)
scanf("%d", &e);
b = average(e, 10);
printf("%g", b); //输出不能 %.1f ,可以试试 %.6f, %f, %g 等等
return 0;
} 根本原因在于函数的返回值,比如声明返回类型为 int,即使返回一个 double,C会自动帮你转换为 int 再返回 jackz007 发表于 2022-11-6 11:41
int average(int a[],int c )
{
. . . . . .
同时回帖{:10_277:} jackz007 发表于 2022-11-6 11:41
int average(int a[],int c )
{
. . . . . .
就看楼主会选谁的了 zhangjinxuan 发表于 2022-11-6 11:43
同时回帖
他比你快一分钟{:10_284:} 你干嘛哈哈哎哟 发表于 2022-11-6 13:01
他比你快一分钟
俺这--
页:
[1]