本系列资料由"韬略宏智" 授权发布,任何网站不得转载,否则追究法律责任。
1.填空题
下列给定程序中,函数fun()的功能是:求S的值。设
S=(22/(1*3))*(42/(3*5))*(62/(5*7))* …*(2k)2/((2k-1)*(2k+1))
例如,当k为10时,函数的值应为1.533852。
试题程序:
#include <conio.h>
#include <stdio.h>
#include <math.h>
double fun(int k)
{ int n;
double s,w,p,q;
【1】;
s=1.0;
while(n<=k)
【答案】
【1】n=1 【2】return s; 【3】)
【解析】
填空1:在这个空之前定义了整型变量n,下面紧接着对n的值进行了比较,可见该语句应该是对n进行赋值,由下面的语句我们可以看到n作为级数的项数应该从1开始,所以这里对n赋初值1。
2.改错题
下列给定程序中,函数fun的功能是:根据整型形参m的值,计算如下公式的值。
例如,若m中的值为5,则应输出:0.536389。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<conio.h>
#include<stdio.h>
double fun(int m)
{
double y=1.0;
int i;
/********found********/
for(i=2;i<m;i++)
/********found********/
y-=1/(i*i);
return(y);
}
main()
{
int n=5;
clrscr();
printf("\nThe result is %1f\n",fun(n));
}
【答案】
第1处:for(i=2;i<m;i++)应改为for(i=2;i<=m;i++)
第2处:y-=1/(i*i);应改为y-=1.0/(i*i);
【考点】循环语句及数据类型转换。
【解析】
(1)根据题目给出的公式可知,i最后的值为m,因此条件i<m是不正确的,应改为i<=m。
(2)i为int类型变量,表达式1/(i*i)的结果也是int型。int型数据在进行除法运算时因为结果只取整数部分,所以其精度会损失。而y是double变量,表达式1/(i*i)的结果会隐式转换成double型,但只是在整数后面加零表示精度提高了。所以应改为:y-=1.0/(i*i);,根据算术转换的原则,i会被提升为double型,这样在进行除法运算时就不会有精度损失了。
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |