2级考试C语言一程序解读

来源:百度知道 编辑:UC知道 时间:2024/05/10 06:27:26
下列给定程序中,函数fun()的功能是:求S的值。设
S=(22/(1*3))*(42/(3*5))*(62/(5*7))* …*(2k)2/((2k-1)*(2k+1))
例如,当k为10时,函数的值应为1.533852。

试题程序:
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
/*********************************************/
double fun(int k) 这里的返回值为什么是双精度型的?个人认为应是实型的,帮忙解答下
{ int n; float s, w, p, q;
n=1;
s=1.0;
while(n<=k)
{ w=2.0*n;
p=w-1.0;
q=w+1.0;
s=s*w*w/p/q;
n++;
}
return s;
}
void main()
{ system("CLS");
printf("%f\n ",fun(10));
}
老实说这个是道二级的机试题,我知道双精度也是实型,但是如果这里填的是float那么机试的检测就是辨别为错误,这个对于考试来讲是很实际的问题,所以希望那个大虾讲解一下里面为什么要用double,谢谢

喺实际应用中,都系用double多过float嘅(至少我系咁啦)因为double更加精确吖嘛。
所以,如果你用float得出嘅数值位数唔够佢要求,以至得出咗唔一样嘅答案嘅话咧,噉呢道题就算你白做啦。
仲有啊,你最好将嗰D变量都定义成double啦。虽然你定义为float都可以得出结果,但仲要系统同你将float转换成double架嘛。(返回值类型依函数定义为准)
顺便话俾你知,我都系今次考二级嘅^^

你哪个是什么破机器,我的float和double都可以运行