《二级C语言上机100题带解析.pdf》由会员分享,可在线阅读,更多相关《二级C语言上机100题带解析.pdf(387页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第一套给定程序的功能是:求二分之一的圆面积,函数通过形参得到圆的半径,函数返回二分之一的圆面积(注:圆面积公式为在程序中定义的变量名要与公式的变量相同)。例如,输入圆的半径值:1 9.5 2 7,输出为:s=5 98.94 99910注意:部分源程序给出如下。请勿改动ma i n函数和其他函数中的任何内容,仅在横线上填入所编写的若干表达式或语句。试题程序:tti nc lud e d oub le f un(d oub le r)(re turn 3.1 4 1 5 9*1 /2.0;voi d ma i n()d oub le x;pri ntf(Ente r x:);sc a nf 2 )
2、;pri ntf(s=%lf n”,f un(3 );)【参考答案】(Dr*r(2)&x(3)x【考点分析】本题考查:圆面积计算公式*r*r;sc a nf ()函数的形式,其一般形式为 sc a nf (格式控制字符串”,地址表列);,注意地址是由地址运算符后跟变量名组成的;pri ntf()函数的形式,其一般形式为 pri ntf (格式控制字符串,输出表列);函数实参调用,函数作为另一个函数调用的实际参数出现。【解题思路】填 空 1:计算圆的面积,公式为:*r。填空2:sc a nf ()函数一般形式为sc a nf (格式控制,地址表列),因此填入&x。填空3:函数的实际参数是圆的半径
3、xo下列给定程序中,函 数 f u n 的功能是:计算S=f (-n)+f (-n+1)+-+f (0)+f (1)+f (2)+f(n)的值。例如,当 n 为 5时,函数值应为1 0.4 07 1 4 3.f(x)函数定义如下:f(x)=请改正程序中的错误,使它能得出正确的结果。注意:不要改动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 1|x=2.0)re turn 0.0;e lse i f (x0.0)re t
4、urn(x-1)/(x-2);e lsere turn(x+l)/(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);pri ntf(%fn,f un(5);)【参考答案】(1)错误:f (d oub le x)正确:d oub le f (d oub le x)(2)错误:re turn s 正确:re turn s;【考点分析】本题考查:函数的定义,其一般形式为类型标识符函数名(
5、形式参数表列),其中类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的类型。【解题思路】该程序的流程是,f un()程序对f (n)项循环累加,并且采用条件选择语句计算函数f (x)的值。本题的错误在于未定义函数f (d oub le x)的返回值类型。C 语言规定,在未显式声明的情况下,函数返回值默认为i nt型。编写函数f un,函数的功能是:根据以下公式计算s,计算结果作为函数值返回;n 通过形参传入。S=l+l/(l+2)+1/(1+2+3)+1/(1+2+3+n)例如,若n 的值为1 1 时,函数的值为1.83 3 3 3 3。注意:部分源程序给出如下。请勿改动ma i n
6、函数和其他函数中的任何内容,仅在函数f un的花括号中填入所编写的若干语句。试题程序:#i nc lud e#i nc lud e#i nc lud e i 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 (X nPle a se e nte r N:);sc a nf(%d,&n);s=f un(n);pri ntf(T h e r e s u l t i s:%f n ,s);w f=f o p e n(,o u t.d a t ,w);f p r i
7、 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 o r(i=l;i=n;i+)s l=s l+i;/*求每一项的分母*/s=s+l.O/s l;/*求多项式的值*/r e t u r n s;【考点分析】本题考查:计算给定表达式的值,根据题意判断表达式为1 到 n累加倒数之和。变量数据类型及强制转换操作。f o r 循环语句,一般情况需要确定循环变量的取值范
8、围。使用r e t u r n 语句完成函数值的返回。【解题思路】本题可以通过f o r 循环语句来实现第1 项到第n 项的变化,然后计算各项的累加和。方法是先根据题目要求定义变量(注意该变量的数据类型),然后对其进行初始化操作,因为该变量用作累加器,所以初始值应为0(或0.0,根据变量数据类型来确定),再通过f o r 循环语句来完成累加过程。本 题 中 s i 用来表示式中每一项的分母,它可以由前一项的分母加项数得到。注意:由 于 s i定义成一个整型,所以在s=s+l.0/s l 中不能把1.0 写 成 1。【解题宝典】此类计算表达式值的程序,首先需要根据题意分析表达式的规律,得出通项,
9、然后再完成程序语句。第二套请补充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 时,s u m=4 95 5 5 0o注意:部分源程序给出如下。请勿改动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
10、n g s u m;1 ;s y s t e m(C L S );p r i n t f (,z n l n p u t n,m n );s c a n f (/z%d,%d ,&n,&m);w h i l e(n=m)(2 ;n+;)p r i n t f (,zs u m=%3 n ,s u m);)【参考答案】(1)s u m=O (2)s u m+=n (3)I d【考点分析】本题考查:变量初始化,需要注意该变量是累加器还是累乘器:p r i n t f ()函数,其一般形式为 p r i n t f (格式控制符”,输出表列),其中,格式控制符用于指定输出格式,可由格式字符串和非格式
11、字符串两种组成,格式字符串是以开头的字符串,在外后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等,如%I d”表示按十进制长整型输出,非格式字符串在输出时原样照印,在显示中起提示作用。【解题思路】填 空 1:变 量 sum 进行了类型声明,但没有进行初始化,而后面的程序用sum 来存放最后的结果,所以要在使用前将sum初始化为0。填空2:通过wh i le循环将自然数n 和 m之间的数进行累加,结果存于sum 中。填 空 3:由于sum 为长整型,所以标准输出函数p ri n tf ()中的格式控制符为%I d 。下列给定程序中,f un 函数的功能是:根据形参m,计算下列公
12、式的值:t=l+l/2+l/3+l/4+l/m例如,若输入5,则应输出2.2 83 3 3 3,请改正程序中的错误,使它能计算出正确的结果。注意:不要改动m a i n 函数,不得增行或删行,也不得更改程序的结构。试题程序:i n c lud e tti n c lud e tti n c lud e d o ub le f un(i n t m)(d o ub le t=l.0;i n t I;f o r(1=2;K=m;I+)/*f o un d*/t+=l.0/k;/*f o un d*/return I;vo i d m a i n()i n t m;sy stem(C L S );p
13、 ri n tf(n P lea se en ter 1 i n teg er n um b er:);sc a n f(%d ,&m);p ri n tf (,zn T h e result i s%lf n”,f un(m);【参考答案】(1)错误:t+=l.0/k;正确:t+=1.0/I;(2)错误:return I;正确:return t;【考点分析】本题考查:f o r循环语句的循环条件,这类题目的一般解法是根据题意确定循环变量的取值范围;函数返回值,其一般形式为 return表达式二 该语句的功能是计算表达式的值,并返回给主调函数。【解题思路】该 题 目 考 查 分 母 成 等 差
14、 数 列 递 增 的 一 个 数 学 公 式,我 们 先 看 循 环 条 件f o r(1=2;1 c m;I+),i从2开始递增到m,所以t的值应该是由1.0/i的值逐步循环叠加后的结果,而不是t+=L 0/k;。(2)return I;考查对程序的解读能力,当循环结束后(由输入m的值决定),函数返回当前t的值。请编写一个函数vo i d f un (c h a r*tt,i n t p p口),统计在tt字符串中 a 到 z 2 6个字母各自出现的次数,并依次放在p p所指数组中。例如,当输入字符串abcdefghabcdeabc后,程序的输出结果应该是:3 3 3 2 2 1 1 1 0
15、000000000000000000注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:ttinclude include ttinclude void fun(char*tt,int p p )void m a i n()F I L E *wf;char aa1 0 0 0;int bb2 6,k;system(,C L S,/);p rintf(,znPlease enter a char string:);scanf(%s,aa);fun(aa,bb);for(k=0 ;k 2 6;k+)p rintf(z,%d
16、z,,bb k);p rintf(,zn);wf=fop en(,zout.dat,w);fun(/abcdefgabcdeabc,,,b b);for(k=0 ;k 2 6;k+)fp rintf(wf,z%d”,b b k );fclose(wf);)【参考答案】void fun(char*tt,int p p)(int i;for(i=0;i 2 6;i+)Pp i=0;while(*tt)(switch(*tt)(case 匕:p p 0+;break;case 廿 :p p l+;break;case:p p 2+;break;case dp p 3+;break;case e,p
17、p 4+;break;case fp p 5+;break;case gp p 6+;break;case hp p 7+;break;case ip p 8+;break;case jp p 9+;break;case kp p 1 0+;break;case 1 p p l1+;break;case mp p 1 2+;break;case np p 1 2+;break;case op p 1 4+;break;case p,p p 1 5+;break;case q p p 1 6+;break;case rp p 1 7+;break;case sp p 1 8+;break;cas
18、e tp p 1 9+;break;case up p 2 0+;break;case v,p p 2 1+;break;case wp p 2 2+;break;case xp p 2 3+;break;case yp p 2 4+;break;case zp p 2 5+;break;tt+;)【考点分析】本题考查:统计小写字母在指定字符串中出现次数。for循环语句,需要注意循环变量的取值范围。if条件语句要注意条件表达式的判定。【解题思路】第 1个循环的作用是初始化数组PP,未经赋值变量的量为一个不确定数字。由于它要将a到z 2 6个字母的个数依次放到数组p p 中,即a的个数存于p p
19、 0 中,b的个数存于p p l中,c的个数存于p p 2 中,依此类推,而 a-a的值正好为0,b-a的值为a 的值为2,依此类推。任一个小写字母减去a后所得结果正好是它对应的下标,所以就有了 p p*tt-a+,但*tt必须是小写字母,即 if()不应省略。第三套给定程序的功能是:判断字符ch是否与串str中的某个字符相同,若相同什么也不做,若不同则插在串的最后。注意:部分源程序给出如下。请勿改动函数main和其他函数中的任何内容,仅在横线上填入所编写的若干表达式或语句。试题程序:ttinclude ttinclude void fun(char*str,char ch)(while(*s
20、tr&*str!=ch)str+;if(*str 1 ch)str0=ch;2 =0;)void main()char s81,c;system(Z,C L S,/);p rintf(nPlease enter a string:);gets(s);p rintf(z/n Please enter the character to search:);c=getchar();fun(3 );p rintf(wnThe result is%sn”,s);)【参考答案】!=(2)str 或*(str+l)(3)s,c【考点分析】本题考查:if语句,一般掌握条件表达式的判定。函数的调用,其一般形式为函
21、数名(实际参数表)”。【解题思路】填 空 1:根据题意 若相同什么也不做”,则 应 填 入!=。填空2:若不同则插在串的最后,那么0就在字符串的倒数第二了。填 空 3:函数传递的参数为输入的两个字符串,则填入s,c下列给定程序中,函数fun的功能是:分别统计字符串中大写字母和小写字母的个数。例如,给字符串s 输入:AaaaBBbl 2 3 CCccccd,则应输出结果:u p p er=5,l o w er=9。请改正程序中的错误,使它能计算出正确的结果。注意:不要改动m ai n 函数,不得增行或删行,也不得更改程序的结构。试题程序:#i n cl u de#i n cl u de/*f o
22、 u r i d*/v o i d fu n (char *s,i n t a,i n t b)|w hi l e(*s)(/*f o u r i d*/i f(*s =A&*s =a&*s =z)b+;s+;)m ai n()(char s 1 0 0;i n t u p p er=0,l o w er=0;p r i n t f(,zn p l eas e a s t r i n g:);get s(s);fu n(s,&u p p er,fel o w er);p r i n t f(,zn u p p er=%d l o w er=%dn,/,u p p er,l o w er);)【
23、参考答案】(1)错误:v o i d fu n (char *s,i n t a,i n t b)正 确:v o i d fu n (char *s,i n t *a,i n t *b)错 误:a+;正确:(*a)+;错误:b+;正确:(*b)+;【考点分析】本题考查:函数的参数传递和指针变量,理解指针变量作为函数的参数,函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型,它的作用是将一个变量的地址传送到另一个函数中。【解 题 思 路】(1)根据题中程序可以看出,函 数fu n传递的是地址,那么,在函数中就应该出现指针,所以改为 v o i d fu n (char *s ,i n
24、 t i n t *b)。(2)和(3)很明显,这里是要累加数值,因 为a、b是指针变量,所以是错误的。请 编 写 函 数fu n,它 的 功 能 是:求 出s s所指字符串中指定字符的个数,并返回此值。例 如,若 输 入 字 符 串1 2 3 4 1 2 1 3 2,输 入 字 符1,则 输 出3。注意:部分源程序给出如下。请 勿 改 动m ai n函数和其他函数中的任何内容,仅 在 函 数fu n的花括号中填入所编写的若干语句。试 题 程 序:t t i n cl u de#i n cl u de#i n cl u de#defi n e M 8 1i n t fu n(char *s s
25、,char c)()v o i d m ai n()(F I L E *w f;char aM,ch;s y s t em(CL S);p r i n t f(,zn Pl eas e en t er a s t r i n g:);get s(a);p r i n t f(,zn Pl eas e en t er a char:);ch=get char ();p r i n t f(,zn The n u m ber o f t he char i s:%dn,z,fu n (a,ch);w f=fo p en(,zo u t.dat,w );fp r i n t f(w f,d,fu n
26、(“1 2 3 4 1 2 1 3 2,1);fcl o s e(w f);【参考答案】i n t fu n(char *s s,char c)i n t i=0;fo r(;*s s!=0 :s s+)i f(*s s=c)i+;/*求出s s 所指字符串中指定字符的个数*/r et u r n i;【考点分析】本题考查:字符串结束标识0;fo r 循环语句,如何遍历字符串;通 过 i f条件语句,判断是否相同。【解题思路】从字符串SS中找出子字符串的方法是:从第1 个字符开始,对字符串进行遍历;若SS串的当前字符等于t串的第1个字符,两字符串的指针自动加1,继续比较下一个字符;若比较至字符
27、串的结尾,则跳出循环;若SS串的字符和C 串的字符不对应相同,则继续对SS串的下一个字符进行处理。本程序是采用逐一比较的方式找出出现的次数。循环的作用是在串中从左到右逐一走动,i f()的作用是进行判断是否相同,若与C 相同,则表示又出现一次。第四套请补充函数f u n,该函数的功能是:把A SC I I 码为偶数的字符从字符串s t r 中删除,结果仍然保存在字符串s t r 中,字符串s t r 从键盘输入,其长度作为参数传入函数f u n。例如,输入 a b c d ef ,输出 a c e”。注意:部分源程序给出如下。请勿改动m a i n 函数和其他函数中的任何内容,仅在函数f u
28、n 的横线上填入所编写的若干表达式或语句。试题程序:t t i n c l u d e t t i n c l u d e#d ef i n e N 8 0 1i n t i,j;2;f o r (i=0;i n;i+)i f(s i%2!=0)s j+=s i ;)3;v o i d m a i n()i n t i=0,s t r l en=0;c h a r s t r N ;s y s t em(C L S);p r i n t f C n l n p u t a s t r i n g:nz,);g et s (s t r);w h i l e(s t r i !=0 )(s t r
29、 l en+;i+;)f u n (s t r,s t r l en);p r i n t f(n*d i s p l a y s t r i n g *n );p u t s (s t r);)【参考答案】(1)v o i d f u n(c h a r s ,i n t n)(2)j=0 s j =,(r【考点分析】本题考查:函数定义,需要确定类型标识符、函数名和形式参数。变量初始化,变量声明后,要进行初始化赋值,我们对变量进行初始化时,必须确定好变量的作用。字符串结束标识 0 ,用来结束字符串,是经常考查的知识点。【解题思路】填 空 1 :由m a i n 函数调用函数f u n 的格式
30、可以知道,函数f u n 没有返回值,第一个参数是字符数组,第二个参数是整型变量。填空2:变量j 声明时,没有初始化,所以在使用j 之前要将它初始化为0。填 空 3:当把所有A SC I I 码为偶数的字符都存入字符串s中后,要在最后加上 0 ,表示字符串的结束。下列给定程序中函数f u n 的功能是:计算正整数n u m 各位上的数字之积。例如,若输入25 2,则输出应该是20 o若输入20 2,则输出应该是0。请改正程序中的错误,使它能得出正确的结果。注意:不要改动m a i n 函数,不得增行或删行,也不得更改程序的结构。试题程序:#i n c l u d e#i n c l u d e
31、 l o n g f u n (l o n g n u m)(/*f o u n d*/l o n g k;d o(k *=n u m%10;/*f o u n d*/n u m =10;w h i l e(n u m);r et u r n(k);m a i n()(i n t n;p r i n t f (XP l ea s e en t er a n u m b er:);s c a n f (,z%l d,z,&n);p r i n t f(n%l d n ,f u n (n);)【参考答案】(1)错误:l o n g k;正确:l o n g k=l;(2)错误:n u m =10;
32、正确:n u m/=10;【考点分析】变量初始化,保存乘积的变量初始化为1。【解题思路】(l)k 用来存放各位数字的积,初值应为lo(2)这里是一个符号错误,除号使用/来表示的。请编写一个函数f u n,它的功能是:求出1 到 m(含m)之内能被7 或 1 1 整除的所有整数放在数组a 中,通过n返回这些数的个数。例如,若传给m的值为50,则程序输出:7 1 1 1 4 2 1 2 2 2 8 3 3 3 5 4 2 4 4 4 9注意:部分源程序给出如下。请勿改动m ai n 函数和其他函数中的任何内容,仅在函数f u n 的花括号中填入所编写的若干语句。试题程序:#i n c lu d e
33、#i n c lu d e#i n c lu d e#d e f i n e M 1 0 0v o i d f u n(i n t m,i n t *a,i n t *n)(v o i d m ai n()(F I L E *w f;i n t aa M ,n,k;s y s t e m (C L S);f u n (50,aa,&n);f o r (k=0;k n;k+)i f(k+l)%2 0=0)/*每行输出 2 0 个数*/p r i n t f(4 d ,aa k );p r i n t f(n);)e ls ep r i n t f(%4 d”,aa k );p r i n t f
34、 C n O;w f=f o p e n(,zo u t.d at ,w);f o r (k=0;k n;k+)f p r i n t f (w f,z r%4 d,z,aa k );f c lo s e(w f);【参考答案】v o i d f u n(i n t m,i n t *a,i n t *n)int i,j=0;for(i=l;i=m;i+)if(i%7=0|i%ll=O)/*求 出1到m(含m)之内能被7或11整除的所有整数放在数组a中*/aj+=i;*n=j;/*返回这些数的个数*/【考点分析】本题考查:整除的判断方法,用%对除数求余,若余数为0,表示能被整除。i f语句条件
35、表达式,注意 逻辑与 和 逻辑或 的区别。f o r循环语句,注意循环变量的取值范围。一维数组的定义与引用。【解题思路】本题要找出能被7或11整除的所有整数,注意数学中的 或 和C语言中的 或”的区别,在此处,i f条件语句中用I I”运算符,若要找能同时被7和11整除的所有整数,则在i f()中,应用&”运算符。第五套请补充函数fun,该函数的功能是:判断某一个年份是否为闰年。例如,1900年不是闰年,2004是闰年。注意:部分源程序给出如下。请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。试题程序:#include#include#inclu
36、de int fun(int n)(int flag=0;if(n%4=0)(if(1 )flag=l;)if(2 )flag=l;return 3;v o i d m ai n()i n t y e ar;s y s t e m(C L S );p r i n t f C ln p u t t h e y e ar:z/);sca nf&yea r);i f (f u n(y e ar)p r i n t f(%d i s a le ap y e ar.n ,y e ar);e ls ep r i n t f (,z%d i s n o t a le ap y e ar.n/z,y e ar
37、);【参考答案】(1)n%1 0 0!=0 或 n%1 0 0(2)n%4 0 0=0 (3)f lag【考点分析】本题考查:判断闰年的算法,年份能被4整除但不能被100整除,或者年份能被4 0 0 整除。r e t u r n 语句,负责将函数值返回给主调函数。一般情况下,f lag 在 C语言中作为一种标志来使用,本书中有多个题目都使用了 f lag 标志。【解题思路】填 空 1:判断闰年的方法是,年份能被4整除但不能被100整除,或者年份能被4 0 0 整除。n不能被1 0 0 整除,即对1 0 0 取余非零。填空2:能被4 0 0 整除的年份也是闰年,n能被4 0 0 整除,即对4 0
38、 0 取余为零。填 空 3:f lag 标记年份n是否为闰年,当 f lag 为 1 时,是闰年,当 f lag 为。时,不是闰年。下列给定程序中函数f u n 的功能是:计算n!。例如,给n 输入5,则输出1 2 0.0 0 0 0 0 0。请改正程序中的错误,使程序能输出正确的结果。注意:不要改动m a i n 函数,不得增行或删行,也不得更改程序的结构。试题程序:t t i n c l u d e t t i n c l u d e d o u b l e f u n(i n t n)d o u b l e r e s u l t =1.0;/*f o u n d*/i f n=0r e
39、 t u r n 1.0;w h i l e(n l&n 170)/*f o u n d*/r e s u l t=n-;r e t u r n r e s u l t;v o i d m a i n()(i n t n;p r i n t f (I n p u t N:);s c a n f(%d,&n);p r i n t f (,n n%d!=%l f n,z,n,f u n(n);)【参考答案】(1)错误:i f n=0 正确:i f(n=0)(2)错误:r e s u l t =n-;正确:r e s u l t *=n-;【考点分析】本题考查:i f 语句,一般情况下,需要根据题目
40、要求确定条件表达式的内容,同时需要注意其格式。计算阶乘的方法,n!=n*(n-l)!。请编写函数f u n,其功能是:将两个两位数的正整数a、b合并成一个整数放在c中。合并的方式是:将a 数的十位和个位数依次放在c 数的十位和千位上,b 数的十位和个位数依次放在c 数的个位和百位上。例如,当 a=45,b=12,调用该函数后,c=5241o注意:部分源程序给出如下。请勿改动m a i n 函数和其他函数中的任何内容,仅在函数f u n 的花括号中填入所编写的若干语句。试题程序:#i n c l u d e#i n c l u d e v o i d f u n (i n t a ,i n t
41、b,l o n g *c)(v o i d m a i n()(i n t a,b;l o n g c;FI L E *o u t;p r i n t f (/zI n p u t a ,b:);s c a n f(%d%d”,&a,&b):f u n (a,b,&c);p r i n t f C T h e r e s u l t i s :%l d n”,c);o u t=f o p e n(o u t.d a t,w);f u n(a+l l,b+22,&c);f p r i n t f(o u t,c);f c l o s e(o u t);【参考答案】v o i d f u n(i
42、n t a,i n t b,l o n g *c)*c=(a%l 0)*1000+(b%l 0)*100+(a/10)*10+b/l 0;)【考点分析】本题考查:如何取出数值n的各个位,主要是考查和/的交换使用。两个整型数相除,/用来求得数的整数部分,留用来求余数。【解题思路】本题中主要的问题是怎么取出a 和 b的个位数和十位数,取出后怎么表示成c 中相应的位数。由于a 和 b 都是只有两位的整数,所以分别对它们除10可得到它们的十位数,分别用10对它们求余可得到它们的个位数。得到后对应乘以1000、100、10、1 就可得到c的千位数、百位数、十位数和个位数。注意:使用c时要进行指针运算。第
43、六套请补充函数f u n,函数f u n 的功能是求n的阶乘。注意:部分源程序给出如下。请勿改动m a i n 函数和其他函数中的任何内容,仅在函数f u n 的横线上填入所编写的若干表达式或语句。试题程序:#i n c l u d e l o n g f u n(i n t n)i f (1 )r e t u r n(n*f u n(2 );r e t u r n 3 ;v o i d m a i n()(p r i n t f(z,10!=%l d n/,,f u n(10);【参考答案】(l)n l 或 l l 和 n=l 这两种情况的处理方法不同,需要分开考虑。填空 2:阶乘的算法是,
44、当 n l 时,n!=n*(n-l)!,即 f u n(n)=n*f u n(n-l)填 空 3:n=l 是递归的终止条件,返回值为1。下列给定的程序中,函 数 f u n 的功能是:计算并输出k以内最大的10个能被13 或 17整除的自然数之和。k的值由主函数传入,若k的值为5 00,则函数的值为4 6 2 2。请改正程序中的错误,使它能得出正确的结果。注意:不要改动m ai n 函数,不得增行或删行,也不得更改程序的结构。试题程序:f t i n c l u d e t i i n c l u d e#i n c l u d e i n t f u n(i n t k)i n t m=0,
45、m c=0,j;w h i l e(k =2)&(m c l 0)(/*f o u n d*/i f(k%13=0)|(k%17=0)m=m+k;m c+;k-;/*f o u n d*/re t u rn m;v o i d m ai n()s y s t e m(C L S);pri n t f (z,%d n ”,f u n (5 00);【参考答案】(1)错误:i f(k%13=0)|I(k%17=0)正 确:i f(k%13=0)|(k%17=0)(2 )错误:缺少大括号 正 确:力 口 【考点分析】本题考查:i f 语句,这类题目的一般解法是根据题意确定i f 语句的条件表达式,区
46、别逻辑表达式和算术表达式。同时注意c 语言书写程序应遵守的规则。【解题思路】(Dx能 被 y 整 除 的 表 示 方 法 是 x%y=0,而 并 非 像 题 目 中 所 表 示 的 x%y=0。所以,i f(k%13=0)|(k%17=0)修改后的结果应该是答案所示信息。(2)缺少程序完整所需的”此类信息在做题时一定要注意,我们可以在做题前先运行一下程序,这样明显的错误一般都会有错误信息显示出来,比如丢失 的错误信息是 C o m po u n ds t at e m e n t m i s s i n g i n f u n c t i o n f u n”,并在当前错误处停止光标,我们只要
47、按回车键进行编辑就可以了。请编写函数f u n,它的功能是计算:s=(I n (1)+l n (2)+l n (3)+-+l n (m)0.5在 C 语言中可调用l o g(n)函数求l n(n)例如,若 m的值为2 0,则 f u n 函数值为6.5 06 5 8 3,注意:部分源程序给出如下。请勿改动m ai n 函数和其他函数中的任何内容,仅在函数f u n 的花括号中填入所编写的若干语句。试题程序:t t i n c l u d e t t i n c l u d e t t i n c l u d e i n c l u d e d o u b l e f u n(i n t m)(
48、v o i d m a i n()F I LE *w f;s y s t e m(CLS);p r i n t f (z,%f n ,f u n (20);w f=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(20);f c l o s e(w f);)【参考答案】d o u b l e f u n(i n t m)(i n t i;d o u b l e s=0.0;f o r(i=l;i=m;i+)s=s+l o g(i);r e t u r n s q r t(s);/*计算 s=l n (1)+l n (2)+l n (3)+
49、-+l n (m)*/*对 s 求平方根并返回*/【考点分析】计算表达式的值,一般都要定义一个变量s u m 作为累加(乘器),加法运算时赋初值为0,乘法运算时,赋初值为1,然后利用循环语句,使 s u m 进行累加或累乘。【解题思路】题目要求计算从1 到 m的对数的和,可用从1 到 m的循环,每次循环都累加求和。该题需要注意之处是,l o g()函数的形式参数应当为d o u b l e 型变量,而用于循环的基数变量为整数,需要进行强制转换,在返回的时候求出平方根。第七套请补充函数f u n,该函数的功能是:整除x 且是偶数的数,把这些数保存在数组b b 中,并按从大到小的顺序输出。例如当x
50、=20时,依次输出:20 10 4 2。注意:部分源程序给出如下。请勿改动m a i n 函数和其他函数中的任何内容,仅在函数f u n 的横线上填入所编写的若干表达式或语句。试题程序:#i n c l u d e Si n c l u d e Si n c l u d e v o i d f u n(i n t k,i n t b b )(i n t I;i n t j=0;f o r(1 ;I=0;I)p r i n t f(%d ,b b I );v o i d m a i n()i n t k=l;i n t b b 100;s y s t e m (Z ZCLS/Z);p r i n