#include <stdio.h>
int main()
{
int n;
printf("请输入一个数字:");
scanf_s("%d", &n);
double sum = formula(n);
printf("%.2lf", sum);
}
int Multiply_order(int n)//获取乘阶的函数
{
if (n > 1) {
return (n * Multiply_order(n - 1));
}
else {
return 1;
}
}
float formula(int n)
{
float sum = 0;
for (int i = 1; i <= n; i++) {
sum +=((double)(Multiply_order(i) - 1) / (double)(Multiply_order(i) + 1));
}
return sum;
}
当n = 2时,函数里头sum = 0.3333 但是返回后 主函数里头的sum为3.00 这是怎么回事
#include <stdio.h>
int Multiply_order(int n)//获取乘阶的函数
{
if (n > 1)
{
return (n * Multiply_order(n - 1));
}
else
{
return 1;
}
}
float formula(int n)
{
float sum = 0;
for (int i = 1; i <= n; i++)
{
sum +=((double)(Multiply_order(i) - 1) / (double)(Multiply_order(i) + 1));
}
return sum;
}
int main()
{
int n;
printf("请输入一个数字:");
scanf("%d", &n);
float sum = formula(n);
printf("%.2lf", sum);
}
本回答被网友采纳求问C语言写一个float函数,其返回值和在函数内数值不同,是怎么回事
可能是语法不规范,导致的编译器的问题。函数原型最好提前声明,特别是float强制转换成double的情况。编译通过的代码贴在了Ubuntu pastebin中:链接 图片预览:你可以通过这个网站在线验证一下:链接
C语言中声明一个为float类型的变量,输入输出都用%d,为什么与声明为int...
float和int的二进制表示方式是不同的,如果用int的格式输入数据再赋值给float类型的变量,实际值肯定不再是你预期的值了,所以应该用 %f 来输入输出
c语言中float函数出现的结果在小数点位的偏差
软办法1,自己写一个模拟无限小数的各种不丢失精度的运算。这种方式c里面需要自己实现,或找其他现成的方式,在c++\/c#\/java里已经有现成的方法和类了。软办法2,用double或者long double来提高更高的运算精度(但仍然会丢失精度,只不过会让你在可以容忍的范围内感觉不到)
...浮点运算感觉很奇怪同样的数,算出来结果却不一样,这是怎么回事?
小数点向右第二个1:位号为-2,因此1*2^-2=1*1\/4=0.25 小数点向右第三个1:位号为-3,因此1*2^-3=1*1\/4=0.125 合起来1+0.5+0.25+0.125=1.875,其他位依此类推。无需想得太多,你可以明显看到,二进制小数表达的数都是不同级别减半后的累加。与十进制的某些小数没有一一对应...
c语言中,当函数的类型与返回值的类型不同时,返回的是什么类型?
返回的还是函数的类型。对返回值做了类型的强制转换。int test(){ float a=3.2;return a;} int main(void){ int b;b=test();printf("b=%d\\n",b);return 0;} 打印的b值是3
在C++中为什么会有返回值类型与函数类型不相符
比如说你返回的数组是个局部变量,他的作用域只是在那个函数作用域内有效,调用函数结束后,这个局部变量就释放了,这种情况下不能返回,但是你可以在你传入进来的数组(或指针)参数上进行操作,这时的操作就是用指针的概念进行的,建议你仔细看看指针与数组这些方面,这是难点。其实上面说的基本上是C语言...
C语言中函数类型和返回值类型必须一致么
函数的返回值类型是定义函数时确定的,函数的返回值的类型须与定义的函数返回值类型兼容,并不要求完全一致,比如定义的返回值类型是int,可以在函数中返回char型、float型、double型等,但都被自动强制或截断(编译时会有精度损失提示)为int型;不兼容的返回值就会过不了编译,比如定义的返回值类型是char...
请C语言高手看看为什么计算结果的小数部分与答案不同
计算连乘的逻辑不对!i是自增变量,那么就不能写成i=j*i;而应该是j=j*i;j就是连乘的结果,j=i;这一步不用了;s=s+1.0\/i 要改成 s=s+1.0\/j 这么改好后理论上是对的,输入n 较小的话,可以和答案比较接近,但是n如果稍大一点,比如40,计算就会溢出,不能得到正确的结果。所以这个...
为什么函数返回值为float,但返回的却是int?
错误:return total\/x ; total和x都是int型的,相除自然是int型,你要把其中一个强制转换成float型的才可以,可以这样写:(float(total))\/x;另外如果题目要求输出几位小数的话,你这样cout<<"average: "<<average(a,n)<<endl; 不一定正确,因为C++里面会把无效的0去掉,假如要输出149.50,...
C语言,请问这个函数返回值怎么不妥?==
问题大了,char c[300]是函数内申请的局部变量,只在函数内部,函数返回就销毁了。应该设计为char* strcat(char* dst,const char*src)让dst=src+dst;然后返回dst char* __cdecl strcat(char* dst,constchar* src ){ char* cp = dst;while( *cp )cp++; \/* find end of dst *\/ whi...