为什么函数返回值为float,但返回的却是int?

#include<iostream>
using namespace std;
float average(int *,int );
void main()
{
const int n=100;
int a[n];
for(int i=0;i<n;i++) a[i]=100+i;
cout<<"average: "<<average(a,n)<<endl;
}
float average(int *p,int x)
{
int total=0;
for(int i=0;i<x;i++)
total=total+p[i];
return total/x;
}

错误:return total/x ; total和x都是int型的,相除自然是int型,你要把其中一个强制转换成float型的才可以,可以这样写:(float(total))/x;
另外如果题目要求输出几位小数的话,你这样cout<<"average: "<<average(a,n)<<endl; 不一定正确,因为C++里面会把无效的0去掉,假如要输出149.50,就要这样写
#include<iomanip>
cout<<"average: "<<fixed<<setprecision(2)<<average(a,n)<<endl;//表示精确到小数点后两位

楼上的说法是错的,强制类型转换是优先的,会先转换为float型再相除,而一个float型跟一个int型进行运算的时候系统会把们都转换为float型后进行运算的,写成float(total)/x不会错,但是为了好看一点可以再将类型转换用括号括起来(float(total))/x
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-10-06
除法的结果的类型是由被除数的类型决定的。
所以应该是
return ((float)total)/x,被除数是什么类型,除出来的结果就是什么类型

一楼的是错的,因为 (float)total/x表达式实际上是 (float)(total/x)是把除了的结果强制转换,结果会是xxx.0。会把小数点后面的都忽略。
第2个回答  2011-10-06
你看函数的的参数x和total都是int型的,所以return的时候,它先是计算total/x,因为都是整数,所以值也是整数,所以return的是一个整数。它应该是一个float型的,但是是整数,不是整型。我的理解是这样的!本回答被提问者采纳
第3个回答  2011-10-06
for(int i=0;i<n;i++) a[i]=100+i;
你这是算100,101,102,......,199的平均值
第4个回答  2011-10-06
return total/x;
total和x全部是int型,C语言处理时知按int型处理
改为return (float)total/x;
相似回答