我已经制作了一个程序来查找一维数组的平均值。它有点工作但我的问题是浮子子程序不会在main中返回float。
void vnesi_niza(int n, int a[50])
{
for (int i=0;i<n;i++)
{
cout << "a[" << i << "]=";
cin > >a[i];
}
}
float sreden_uspeh(int n, int a[50])
{
int sum=0;
float as;
for (int i=0;i<n;i++)
{
sum+=a[i];
as=sum/n;
}
return as;
}
int main()
{
int n;
int niza[50];
cout << "input the number of elements" << endl;
cout << "n=";
cin >> n;
vnesi_niza(n,niza);
cout << endl;
cout << "the average is " << endl;
cout << sreden_uspeh(n,niza); //sreden_uspeh means average
return 0;
}
答案 0 :(得分:2)
由于等级之和的类型为int
,因此除法运算将是整数除法,即它将下降到前一个最接近的整数。所以你应该像这样做一个十进制除法:as = (1.0 * sum) / n
。
注意:您不需要每次在循环中计算平均值,只需在循环中执行它就可以返回它。
答案 1 :(得分:2)
行as=sum/n
执行整数除法,然后将as
赋值等于结果,因此sreden_uspeh
函数将截断(向下舍入)的输入数组的平均值返回到整数。
如果您将变量sum
声明为float sum = 0
(而不是int sum = 0
),那么n
将被转换为浮点数,并且as=sum/n
将发生as=(float)sum/n
1}},根据conversions。
或者,您可以在执行除法as
时将第一个操作数转换为浮点数。
此外,您正在分配float sreden_uspeh(int n, int a[50])
{
int sum=0;
for (int i=0;i<n;i++)
{
sum+=a[i];
}
return (float)sum/n;
}
但不会在循环的每次迭代中使用它,这是低效的。实际上你可以写
int a[50]
另请注意int *a
已衰减为指针类型sreden_uspeh
;完整数组未传递给%
。
此外,当您执行整数除法以获取模数(使用.outer-div {
overflow: hidden;
}
.inner-div {
padding: 0px;
margin: 0px;
height: 100%;
}
#port1 {
height: 100%;
width: 100%;
background-size: cover;
background-position: center;
transition: all 0.5s ease;
background-image: url(../img/desk.jpg);
}
.inner-div:hover {
transform: scale(1.2);
}
运算符)时很常见,因为同时取整数商和模数都不会丢失任何信息。
答案 2 :(得分:0)
你犯了一个小错误。 $passwordList = ['password','secretPassword','anything'];
if (isset($_POST["password"]) && in_array($_POST["password"], $passwordList)) {
// do protected stuff here
}
的类型为sum
,int
。
float
声明float sreden_uspeh(int n, int a[50])
{
float sum=0;
float as;
for (int i=0;i<n;i++)
{
sum+=a[i];
as=sum/n;
}
return as;
}
中的另一个错误。
答案 3 :(得分:0)
当你输入int / int时,答案会在int中计算出来。在病房之后它变成了浮动,所以你必须使它成为float / int