全国计算机等级考试二级C语言上机题库及详细解答

举报
资源描述
第一套给定程序的功能是:求二分之一圆面积,函数通过形参得到圆的半径,函数返回二分之一的圆面积(注:圆面积公式为:S =%r 2,在程序中定义的变量名要与公式的变量相同)。例 如,输 入 圆 的 半 径 值:1 9.52 7,输 出为:s=59 8.9 4 9 9 9 1。注意:部分源程序给出如下。请勿改动m a i n 函数和其他函数中的任何内容,仅 在 横 线 上 填入所编写的若干表达式或语句。试题程序:tti nc lud e d oub le f un(d oub le r)(re turn 3.1 4 1 59*1 /2.0;)voi d ma i nO(d oub le x;pri ntf(Ente r x:);sc a nf 2 );pri ntf (/zs=%lf n,z,f un(3 );)【参考答案】(l)r*r(2)&x(3)x【考 点 分 析】本 题 考 查:圆 面 积 计 算 公 式S =7T*r*r;s c anf()函数的形式,其一般形式为 sc a nf(格式控制字符串”,地址表列);,注意地址是由地址运算符”&”后跟变量名组成的;pri ntf()函数的形式淇一般形式为“pri ntf(格式控制字符串”,输出表列);函数实参调用,函数作为另一个函数调用的实际参数出现。【解题思路】填空1:计算圆的面积,公式为:S =7 1 r*F o填空2:sc a nf()函数一般形式为sc a nf(格式控制,地址表列),因此填入&X。填空3:函数的实际参数是圆的半径X。下 列 给 定 程 序 中,函 数 f un的功能是:计算S=f(-n)+f(-n+l)+.+f(O)+f(l)+f(2)+.f(n)f l o 0 X =0或X =2(x-l)/(x-2)x 0请改正程序中的错误,使它能得出正确的结果。注意:不要改动ma i n函数,不得增行或删行,也不得更改程序的结构。试题程序:i nc lud e#i nc lud e i nc lud e#i nc lud e /*f ound*/f (d oub le x)(i f (x=0.0 I x=2.0)re turn 0.0;e lse i f (x0.0)re turn(x-1)/(x-2);e lsere turn(x+1)/(x-2);d oub le f un(i nt n)(i nt i ;d oub le s=0.0,y;f or(i=-n;i=n;i+)y=f(1.0*i);s+=y;/*f ound*/re turn s)voi d ma i n()syste m(CL S );p r in t ffu n(5);)【参考答案】(1)错误:f(d oub le x)1 E确 rd oub le f(d oub le x)(2)错误:re turns 正确:re turns;【考点分析】本题考查:函数的定义,其一般形式为”类型标识符函数名(形式参数表列)”,其中类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的类型。【解题思路】该程序的流程是,f un()程序对f(n)项循环累加,并且采用条件选择语句计算函数f(x)的值。本题的错误在于未定义函数f(d oub le x)的返回值类型。C语言规定,在未显式声明的情况下,函数返回值默认为i nt型。编写函数f un,函数的功能是:根据以下公式计 算 s,计算结果作为函数值返回;n通过形参传入。S=l+l/(l+2)+l/(l+2+3)+.+l/(l+2+3+.+n)例如,若n的值为1 1 时,函数的值为1.8 3 3 3 3 3。注意:部分源程序给出如下。请勿改动ma i n函数和其他函数中的任何内容,仅在函数f un的花括号中填入所编写的若干语句。试题程序:tti nc lud e tti nc lud e tti nc lud e tti nc lud e f loa t f un(i nt n)()voi d ma i n()(F I L E*wf;i nt n;f loa t s;syste m(CL S);pri ntf (zz nPle a se e nte r N:);s c a n f&n);s=f u n (n);p r i n t f(T h e r e s u l t i s:%f n ”,s);w f 二 o p e n(o u t.d a t ,w );f p r i n t f (w f,%f”,f u n(l l);f c l o s e(w f);)【参考答案】f l o a t f u n(i n t n)(i n t i,s l=0;/*定义整型变量s i,表示分母*/f l o a t s=0.0;/*定义单精度变量s,表 示 每 一项*/f b r(i=l;i=n;i+)s l=s 1+i;/*求每一项的分母*/s=s+1.0/s 1;/*求多项式的值*/r e t u r n s;)【考点分析】本题考杳:计算给定表达式的值,根据题意判断表达式为1 到n 累加倒数之和。变量数据类型及强制转换操作。f o r 循环语句,一般情况需要确定循环变量的取值范围。使用r e t u r n 语句完成函数值的返回。【解题思路】本 题 可 以通过f o r 循环语句来实现第1 项到第n 项的变化,然后计算各项的累加和。方法是先根据题目要求定义变量(注意该变量的数据类型),然后对其进行初始化操作,因为该变量用作累加器,所以初始值应为0(或0。根据变量数据类型来确定),再通过f o r 循环语句来完成累加过程。本题中s i 用来 表 示 式 中 每 项 的 分 母,它可以由前一项的分母加项数得到。注意油于 定义成一个整型,所以在s=s+1.0/s 1 中不能把1.0 写成1。【解题宝典】此类计算表达式值的程序,首先需要根据题意分析表 达 式 的 规 律,得 出通 项,然后再完成程序语句。第二套请补充m a i n 函数,该函数的功能是:计算两个 自然数n 和m(m 1 0 0 0 0)之 间所有数的和(n 和m从键盘输入)。例 如,当 n=l,m=1 0 0 时,s u m=5 0 5 0;当n=1 0 0,m=1 0 0 0 H;t,s u m=4 9 5 5 5 0 o注意:部分源程序给出如下。请勿改动m a i n 函数和其他函数中的任何内容,仅在m a i n 函数的横线上填入所编写的若干表达式或语句。试题程序:i n c l u d e#i n c l u d e#i n c l u d e v o i d m a i n ()(i n t n,m;l o n g s u m;1;s y s l e m(C L S );p r i n t f(X n l n p u t n,m n);s c a n f (%d,&n,&m);w h i l e(n=m)(2;n+;)p r i n t f (z,s u m=%3 n ,s u m);【参考答案】(l)s u m=O (2)s u m+=n (3)I d【考点分析】本题考查:变量初始化,需要注意该变量是累加器还是累乘器:p r i n t f()函数,其一般形式为 p r i n t f(格式控制符,输出表列厂。其中,格式控制符用于指定输出格式,可由格式字符串和非格式字符串两种组成,格式字符串是以开头的字符串,在后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等,如“Id”表示按十进制长整型输出,非格式字符串在输出时原样照印,在显示中起提示作用。【解题思路】填空1:变量s u m进行了类型声明,但没有进行初始化,而后面的程序用s u m来存放最后的结果,所以要在使用前将s u m初始化为0。填空2:通过w hile循环将自然数n和m之间的数进行累加,结果存于s u m中。填空3:由于s u m为长整型,所以标准输出函数p r in t*)中的格式控制符为 Id。下列给定程序中,f u n函数的功能是:根据形参m,计算下列公式的值:t=l+l/2+l/3+l/4+.+l/m例如,若输入5,则应输出2.2 8 3 3 3 3。请改正程序中的错误,使它能计算出正确的结果。注意:不要改动m a in函数,不得增行或删行,也不得更改程序的结构。试题程序:t t in clu de#in clu de#in clu de do u b le f u n(in t m)(do u b le t=l.0;in t I;f o r(I=2;I=m;I+)/*f o u n d*/t+=l.0/k;/*f o u n d*/r et u r n I:)v o id m a in O in t m;s y s t em(C L S );p r in t f(n P lea s e en t er 1 in t eg ern u m b er:);s ca n f&m);p r in t f (n T he r es u lt isf u n (m);)【参考答案】错误:t+=1.0/k;正确:t+=1.0/1;(2)错误:r et u r n I;正确:r et u r n t;【考点分析】本题考查:f o r循环语句的循环条件,这 类 题 目 的 般解法是根据题意确定循环变量的取值范围;函数返回值,其一般形式为“r et u r n表达式;”,该语句的功能是计算表达式的值,并返叵I给主调函数。【解题思路】该 题F I考查分母成等差数列递增的一个数学公式,我们先看循环条件f o r(I=2;I=m;I+),i从2开始递增到m,所以t的值应该是由1.0/i的值逐步循环叠加后的结果,而不是t+=L O/k;。r et u r n I;考查对程序的解读能力,当循环结束后(由输入m的值决定),函数返回当前t的值。请编写一个函数 v o id f u n(cha r *t t,in t p p ),统计在tt字符串中上“到“z”2 6个字母各自出现的次数,并依次放在pp所指数组中。例如,当输入字符串a b cdefgha b cdea b c后,程序的输出结果应该是:3 3 3 2 2 1 1 10 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0注意:部分源程序给出如卜。请勿改动ma in函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include#include ttinclude void fun(cha r*tt,int p p )()void ma in()F I LE *wf;cha r a a 1 000;int b b 2 6 ,k;system(C LS );printf(zz nP lea se enter a cha r string:);sca nf a a);fun(a a,b b);for(k=0;k2 6 ;k+)printf(%d ,b b k);printf(,z n );wf=fopen(out.da t,w);fun(a b cdefga b cdea b c”,bb);for(k=0;k2 6 ;k+)fprintf(wf,*%d ,b b k);fclose(wf);1/【参考答案】void fun(cha r*tt,int pp )(int i;for(i=0;i=a,&*tt=,z)pp*tt-,a +;/*将tt字符串中 a 到N 2 6个字母各自出现的次数,依次放在pp数组中,任 个 小 写 字 母 减 去 H后所得结果正好是它对应的下标率/【考点分析】本题考查:统计小写字母在指定字符串中出现次数。for循环语句,需要注意循环变量的取值范围。if条件语句要注意条件表达式的判定。【解题思路】第1个循环的作用是初始化数组pp,未经赋值变量的量为个不确定数字。由于它要将W到Z 2 6个字母的个数依次放到数组pp中,即宜的个数存于pp中,b的个数存于pp l中为的个数存于pp 2 中,,依此类推,而 的
展开阅读全文
温馨提示:
金锄头文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料


电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号