计算机等级二级C语言填空题练习题及答案解析.docx
- 文档编号:30250044
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:13
- 大小:19.23KB
计算机等级二级C语言填空题练习题及答案解析.docx
《计算机等级二级C语言填空题练习题及答案解析.docx》由会员分享,可在线阅读,更多相关《计算机等级二级C语言填空题练习题及答案解析.docx(13页珍藏版)》请在冰豆网上搜索。
计算机等级二级C语言填空题练习题及答案解析
求阶乘
1.该fun函数的功能是求10的阶乘。
1)#include
2)longfun(intn)
3){if(___1___)
4)return(n*fun(___2___));
5)elseif(___3___)
6)return1;}
第一处:
n>1
第二处:
n-1·
第三处:
n==1
解析:
从第2、4行看到了函数名,函数体中又出现了函数的调用,则是递归。
我们知道:
n!
=n*(n-1)!
这就是一个递归的表达式,写成函数就是fun(n)=n*fun(n-1)。
因此,4行处填写n-1。
又:
1!
=1故3,5行就好填了。
因此答案是n>1n-1n==1。
还有0!
=1故,还可填写:
n>0n-1n==0
注意:
35行的条件是相反的,这也是if与else条件的互斥性。
2.程序的功能是计算s=1!
+2!
+3!
+……+n!
1)longfun(intn)
2){inti;
3)longs;
4)s=___1___;
5)for(i=1;i<=n;i++)
6)s=___2___;
7)returns;
8)}
9)main()
10){longs;
11)intk,n;
12)scanf("%d",&n);
13)s=___3___;
14)for(k=1;k<=n;k++)
15)s=___4___;
16)printf("%ld\n",s);
17)}
第一处:
1
第二处:
s*i
第三处:
0
第四处:
s+fun(k)
解析:
首先,搞清楚函数fun、main各自的功能。
Fun是求一个数的阶乘,我们知道:
n!
=1*2*3*…*n
同时要死记住:
求积,积的初值一般等于1。
故fun中s是用来存放积的,其初值等于1;求阶乘是连乘,故s=s*i
Main是求和,记住:
和的初值一般等于0.
两个函数中的局部变量s的作用是不同的。
Main中的s是存放和的。
最后:
注意一些变量的类型。
阶乘是求积,积的增长速度是比较快的,为防止溢出,fun的返回值类型是long。
输出中ld是输出长整数。
3.请补全main函数,该函数的功能是:
求1+2!
+3!
+…+N!
的和。
1)main()
2){inti,n;
3)longs=0,t=1;
4)//clrscr();
5)printf("\nInputn:
\n");
6)scanf("%d",___1___);
7)for(i=1;i<=n;i++)
8){
9)t=___2___;
10)s=___3___;
11)}
12)printf("1!
+2!
+3!
...+%d!
=%ld\n",n,s);
13)}
第一处:
&n
第二处:
t*i
第三处:
s+t
解析:
求前n项的阶乘之和。
这里没有使用子函数。
我们知道:
5!
=5*4!
。
即需要利用前一个数的阶乘,还有就是替换。
从第3行可知:
s存放和,t存放积。
输入n,记住应是&n。
i是循环变量。
记住:
填空后,手工地将循环执行几次,检验是否正确。
求和、平均值
1.请补全main函数,该函数的功能是:
从键盘输入一个长整数,如果这个数是负数,则取它的的绝对值,并显示出来。
main()
{longintn;
clrscr();
printf("Enterthedata:
\n");
scanf(___1___);
printf("******theorigialdata********\n");
if(n<0)
___2___
printf("\n\n");
printf(___3___);
}
第一处:
"%ld",&n
第二处:
n=-n
第三处:
"%ld",n
解析:
此题要注意的是数据类型,输入输出的格式控制。
长整数使用ld(或Ld)
双精度浮点数使用lf(或Lf)
此处df不能大写
2.请在函数fun的横线上填写若干个表达式,使从键盘上输入一个整数n,输出斐波纳契数列。
斐波契数列是一种整数数列,其中每数等于前两数之后,如:
011235813……
1)intfun(intn){
2)if(___1___)
3)return0;
4)elseif(___2___)
5)return1;
6)else
7)return___3___;
8)}
第一处:
n==0
第二处:
n==1
第三处:
fun(n-1)+fun(n-2)
解析:
求斐波契数列:
一项等于其前两项的和。
这也是一个递归。
求斐波契数列的第n项的值,n从0开始。
3.请补全函数fun,该函数的功能是求出以下分数序列的前n项之和。
和值通过函数值返回到main函数。
1)#include
2)#include
3)___1___fun(intn)
4){inta,b,c,k;
5)doubles;
6)s=0.0;
7)a=2;
8)b=1;
9)for(k=1;k<=n;k++)
10){
11)s=s+(___2___)a/(___3___)b;
12)c=a;
13)a=a+b;
14)b=c;
15)}
16)returns;
17)}
第一处:
double
第二处:
double
第三处:
double
解析:
从第11----14总结出数列的表达式。
第1项是a/b=2/1;3/24/3
故:
s=2/1+3/2+4/3+……和的初值是0。
记住:
两个整数进行算术运算结果也是整数,算术运算中只要有一个操作数是实数,运算结果就是实数。
本题希望结果是实数,故要进行强制类型转换,2,3只要有一个进行强制转换就可以了。
最后,函数需要有一个返回值类型,当然也是双精度浮点数了。
4.给定程序的功能是计算并输出下列级数的前N项之和SN,直到SN大于q为止,q的值通过形参传入。
1)doublefun(doubleq)
2){intn;
3)doubles;
4)n=2;
5)s=2.0;
6)while(s___1___q)
7){
8)s=s+(double)(n+1)/n;
9)___2___;
10)}
11)printf("n=%d\n",n);
12)___3___;
13)}
第一处:
s<=q
第二处:
n++
第三处:
returns
解析:
从第8行,
从数学的角度总结出数列的表达式。
(n+1)/nn从2开始,每次增加1,故:
SN=2+3/2+4/3+……和的初值是2.0
循环条件是“SN大于q为止”,while是满足条件才循环,故填写s<=q
最后,函数需要有一个返回值。
5.给定程序功能是计算S=f(-n)+f(-n+1)+…+f(0)+f
(1)+f
(2)+…+f(n)的值。
floatf(doublex)
{
if(x==0.0||x==2.0)
return___1___;
elseif(x<0.0)
return(x-1)/(x-2);
else
return(x+1)/(x-2);
}
doublefun(intn)
{inti;doubles=0.0,y;
for(i=-n;i<=___2___;i++)
{y=f(1.0*i);s+=y;}
return___3___;
}
main()
{
printf("%f\n",fun(5));
}
第一处:
0.0
第二处:
n
第三处:
s
解析:
函数f(doublex)求每个单项的值。
if……else的条件是互斥的。
fun()是求和。
1.给定程序的功能是计算score中m个人的平均成绩aver,将低于aver的成绩放在below中,通过函数名返回人数。
intfun(intscore[],intm,intbelow[])
{inti,j=0;
floataver=0.0;
for(i=0;i aver/=(float)m; for(i=0;i if(score[i] returnj; } main() {inti,n,below[9]; intscore[9]={10,20,30,40,50,60,70,80,90}; n=fun(score,9,___2___); printf("\nBelowtheaveragescoreare: "); for(i=0;i } 第一处: score[i] 第二处: below 第三处: below[i] 解析: 求平均值,应先求和。 此处,和与平均值使用了同一个变量。 Score[]是原来的成绩, Below【】存放低于平均分的分数,还有人数。 Below的长度一定不大于score的长度。 Below的长度必须通过计数才能得到,且是在比较的过程中得到的。 Below数组的长度用j来计数,其初值当然为0。 Fun函数中: 先求总分,平均分;再比较,比平均分低,存于below,j++。 J是后加,不能错了。 函数fun的返回值赋值给n,n就是below数组的长度。 2.在主函数中从键盘输入若干个数放入数组x中,用0结束输入但不计入数组。 下列给定程序中,函数fun功能是: 输出数组元素中小于平均值的元素。 voidfun(___1___,intn) { doublesum=0.0; doubleaverage=0.0; inti=0; for(i=0;i average=___3___; for(i=0;i if(i%5==0) printf("\n"); printf("%d,",x[i]); } } 第一处: intx[] 第二处: sum+=x[i] 第三处: sum/n 解析: 算法思想同上题 3.请补全fun函数,该函数的功能是求不超过给定自然数的各个偶数之和。 intfun(intx) { inti,s; s=___1___; for(___2___) s+=i; returns; } 第一处: 0 第二处: i=2;i 解析: 求和,和的初值s为0。 最小的非负偶数是0,偶数间的大小关系是 相差2。 4.请补全main函数,该函数的功能是: 计算并输出下列多项式的值。 S=1+1/(1+2)+1/(1+2+3)+……+1/(1+2+3+……+50) #include ___1___fun(intn) { inti,j; doublesum=0.0,t; for(i=1;i<=n;i++) { t=0.0; for(j=1;j<=i;j++) t+=___2___; sum+=___3___; } returnsum; } 第一处: double 第二处: j 第三处: 1.0/t 解析: S中的每一项的分母是1+2+3+……+i需要用一个一重循环实现, 把所有商相加,需要用一个循环; 组合起来整个就需要二重循环。 内循环求每个单项的和,外循环求商的和。 每单项的分子是1,应该用浮点数1.0; 每单项的分母是求和,和的初值为0.0; 函数的返回值是浮点数。 5.请补全main函数,该函数的功能是,计算两个自然数n和m(m<10000)之间所有数的和。 n和m从键盘输入。 main() {intn,m; longsum; ___1___; clrscr(); printf("\nInputn,m\n"); scanf("%d,%d",&n,&m); while(n<=m) { ___2___; n++; } printf("sum=%___3___\n",sum); } 第一处: sum=0 第二处: sum+=n 第三处: ld 解析: 求和问题 求最值 1.请补全main函数,该函数的功能是: 从键盘上输入3个整数,然后找出最大的数并输出。 main() {inta,b,c,max; clrscr(); printf("\nInputthreenumbers: \n"); scanf("%d,%d,%d",&a,&b,&c); printf("Thethreenumbersare: %d,%d,%d\n",a,b,c); if(a>b) ___1___; else ___2___; if(max printf("max=%d\n",max); } 第一处: max=a 第二处: max=b 第三处: max=c 解析: 若a>b则a较大,将其放入max中;否则将b存于max。 此时,max中存放的就是前两个数中较大的,再将max与c比较。 2.函数fun的功能是: 从三个形参a,b,c中找出中间的那个数,作为函数值返回。 intfun(inta,intb,intc) {intt; t=(a>b)? (b>c? b: (a>c? c: ___1___)): ((a>c)? ___2___: ((b>c)? c: ___3___)); returnt; } 第一处: a 第二处: a 第三处: b 解析: 条件表达式的理解。 3.请补全fun函数,该函数的功能是把从键盘输入的3个整数按从小到大输出。 main() {intx,y,z,t; clrscr(); printf("Inputx,y,z\n"); scanf("%d%d%d",&x,&y,&z); if(___1___) { t=x; x=y; y=t; }/*交换x,y的值*/ if(___2___) { t=z; z=x; x=t; }/*交换x,z的值*/ if(___3___) { t=y; y=z; z=t; }/*交换z,y的值*/ 第一处: x>y 第二处: x>z 第三处: y>z 解析: 3个数排序,两两比较,小的放前,大者放后。 交换。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 等级 二级 语言 填空 练习题 答案 解析