C语言程序计算整数平均值无法输出十进制小数问题求助
问题分析与解决方法
你的程序输出整数而非小数的核心原因有两个:
- avg函数返回类型错误:函数声明为返回
int,即便内部用double计算出带小数的平均值,返回时会被强制截断为整数,直接丢失小数部分。 - printf格式符不匹配:使用
%d格式符会按整数类型解析输出值,就算返回值是正确的浮点数,也会输出错误结果。
修改方案(不改动main函数内的变量类型)
只需调整两处:
- 将
avg函数的返回类型从int改为double - 将main函数中printf的格式符从
%d改为%f(或%.1f等控制小数位数)
修改后的完整代码
int main (){ int measurements[10]; int nrOfMeasurements = 0; char ch; while(1){ printf("\nView(v)Enter(e)Compute(c):"); scanf(" %c", &ch); switch(ch){ case 'c':printf("Avg:%f\n", avg(measurements,nrOfMeasurements)); break; } } } double avg(int a[], int n){ int i; double sum=0,avg; for(i=0;i<n;i++){ sum += a[i]; } avg=sum/n; return avg; }
补充说明
你之前把sum和avg改为double的思路是对的,但因为没修改函数返回类型,导致计算结果被截断,所以看不到小数。如果需要控制输出的小数位数(比如保留1位小数),可以把%f改成%.1f,这样3.7就会精准显示,而非默认的多位小数。
内容的提问来源于stack exchange,提问作者lata27
相关产品推荐
相关产品推荐

