《2022年《全国计算机等级考试二级教程——C语言程序设计》习题分析与解答-- .pdf》由会员分享,可在线阅读,更多相关《2022年《全国计算机等级考试二级教程——C语言程序设计》习题分析与解答-- .pdf(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、全国计算机等级考试二级教程C语言程序设计习题分析与解答(二)第三章顺序结构习题分析与解答一、选择题 ( 单选题 )3.1 【参考答案】 C)3.2 【参考答案】 C)3.3 【参考答案】 D)3.4 【参考答案】 C)3.5 【参考答案】 D)3.6 【参考答案】 B)3.7 【参考答案】 C)3.8 【参考答案】 C)3.9 【参考答案】 A)3.10 【参考答案】 B)3.11 【参考答案】 C)3.12 【参考答案】 D)3.13 【参考答案】 D)3.14 【参考答案】 A)3.15 【参考答案】 C)3.16 【参考答案】 C)3.17 【参考答案】 C)3.18 【参考答案】 D)
2、3.19 【参考答案】 C)3.20 【参考答案】 B)二、3.21 【参考答案】名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 13 页 - - - - - - - - - (1) -200,2500 (2) i=-200,j=2500(3) i=-200j=25003.22 【参考答案】1 12 2 0 3 03.23 【参考答案】1 一条语句2 分号 ( 或; )3.24 【参考答案】分号 ( ;)3.25 【参考答案】1 :100 25.82 1.892342 :
3、 100 25.82 1.89234 3 :100 25.82 1.892343.26 【参考答案】 x=127, x= 127, x= 177,x= 7f, x= 1273.27 【参考答案】 x=127, x=127 , x=127 ,x= 000127, x=%06d3.28 【参考答案】 a=513.789215,a= 513.79,a= 513.78921500,a= 513.78921500 三、3.29 【分析与解答】(1) 主函数名main(2) 变量定义语句中,v(3) 第三行的printf语句用以提示输入,但是原样输出的字符串没有用双引号括起来;另外,从输入的形式看, 输入
4、的数据紧跟在提示之后,因此,printf格式串中最后不应该有换行符n(4) 因为输入项a、b、c 从定义和计算结果来看都是double 类型,因此,第四行scanf 语句格式串中的格式说明不应当用%d而应当用 %lf ;且每一个变量之前应该加地址运算符&(5) 第七行的printf语句中应当把 %d都改成 %lf 或 %f;按输出要求在格式串中应添加相应的原样输出的字符;因为下一个printf的输出从新的一行开始,因此在本输出语句的格式串的最后应当加换行符n名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - -
5、 - - - - 第 2 页,共 13 页 - - - - - - - - - (6) 第八行的printf语句中应当把格式串整理合并放在输出项的前面,输出项放在后面,%d都改成 %lf 或%f;中间的 n(7) 3.30 【分析与解答】(1) 分析:可用算术式56060(2) 确定变量的名字和定义变量的类型:在程序中把小时数放在变量h 中,把分钟数放在变量m中。这两个变量的类型可以是整型( 本题中采用整型) ,(3) 确定所用算法:求SX()560 60SX 的商数,在C语言中可以用整除的算法,语句是h=560/60; 。求余数可用求余运算符 %:560%60 ,其值放入变量 m中的语句是:
6、 m=560%60; 。(4) 设计输出格式。若输出的形式定为:小时:(5) (6) main() int h, m; h=560/60; m=560%60; printf(The result: %3d : %3dn, h,m); The result: 9 : 203.31 【分析与解答】(1) 确定变量的名字和定义变量的类型。若用a 存放 1500,用 b 存放 350;用 q 存放商数,用r 存放余数,所有变量应定义成int(2) 设计输入语句从终端输入1500 和 350;在输入语句之前,应当设计一个输出语句,用以提示输入。(3) 可用整除求商数,结果放在变量q 中。可用求余运算符%
7、 求两数之余数,结果放在变量r(4) 设计输出语句。输出a、b、q、r名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 13 页 - - - - - - - - - (5) 本题的程序与3.303.32 【分析与解答】(1) 定义 4 个双精度变量a、b、c 和 ave,变量 a、b、c 分别存放读入的3 个双精度数, ave(2) 设计输入语句,以及在此之前用于提示输入的(printf)(3) 设计求平均值的算法,把所求得的平均值放入变量ave(4) 设计把变量ave 中
8、的数,从小数点后第二位数进行四舍五入的算法。现举例说明:若ave 中的数为123.4644 ,为了保留此值小数点后一位,可用表达式: (int)(123.4644*10)/10.0;依次推算,为了保留此值小数点后二位,可用表达式:(int)(123.4644*100)/100.0(5) 若要求对小数点后第二位数进行四舍五入,则可对原数加0.05 后再进行以上运算。如要求保留123.4644 小数点后一位且对第二位数进行四舍五入,可用表达式: (int)(123.467+0.05)*10)/10.0。注意:分母一定要用实数10.0 而不能用整数10,否则就变成整除了;若要求保留123.4644
9、小数点后两位且对第三位数进行四舍五入,可用表达式:(int)(123.467+0.005)*100)/100.0(6) 设计输出语句。输出a、b、c 和 ave(7) (8) main() double a,b,c,ave;printf(Enter a ,b ,c : );scanf( %lf%lf%lf, &a, &b, &c );ave=(a+b+c)/3;printf(ave=%fn, ave); /*用以比较四舍五入前后的数据*/ave=(int)(ave+0.05)*10)/10.0;printf(a=%f, b=%f, c=%f, ave=%fn, a,b,c,ave); 3.33
10、 【分析与解答】 (1) 关于对变量中的数进行交换的算法请参考3.7名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 13 页 - - - - - - - - - (2) 定义 4 个整型变量a、b、c 和 t ,变量 a、b、 c 分别存放读入的3 个整数, t(3) 设计输入语句,以及在此之前用于提示输入的(printf)(4) 输出 a、b、 c(5) 把 c 中的值赋给t 把 b 中的值赋给c 把 a 中的值赋给b 把 t 中的值赋给a(6) 输出 a、b、 c(7
11、) main() int a, b, c, t;printf( Enter a, b, c :n );scanf( %d%d%d ,&a,&b,&c);printf( (1) a=%d,b=%d,c=%d n,a,b ,c);t=c; c=b; b=a; a=t;printf( (2) a=%d,b=%d,c=%d n,a,b,c); 第四章选择结构习题分析与解答一、4.1 【参考答案】 A)4.2 【参考答案】 B)4.3 【参考答案】 A)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - -
12、- 第 5 页,共 13 页 - - - - - - - - - 4.4 【参考答案】 D)4.5 【参考答案】 C)4.6 【参考答案】 A)4.7 【参考答案】 B)4.8 【参考答案】 C)4.9 【参考答案】 D)4.10 【参考答案】 D)二、4.11 【参考答案】1 非零24.12 【参考答案】 、 =、=、!KG-*2=4.13 【参考答案】1 ! 2 & 3 JB1|JB1|4.14 【参考答案】1 :!KG-*2(逻辑非 ) 2 :、=(小于、大于、小于等于、大于等于) 3 :=、!KG-*2=(等于、不等 ) 4 :&(逻辑与 ) 5 :JB1|JB1|(逻辑或 ) 。4.
13、15 【参考答案】 !4.16 【参考答案】1 a=b 或 a1|xJB1|4 4.17 【参考答案】 14.18 【参考答案】1 xm0)JB1|JB1|(m1=m0&d1=d0) age=y1-y0; else age=y1-y0-1;4.23 【分析与解答】(1) 若输入的整数a 是奇数,输出 :odd number ,是偶数输出:even number(2) 若一个 a 是偶数,它就能被2 除尽,即a%2=0 ,输出 even number ;若是奇数,它就不能被2 除尽,即a%2! KG-*2=0,输出 odd number读者可以参考以上给出的算法,写出相应的C4.24 【分析与解
14、答】本题的主要算法是从3 个数中找出最大的那个数。假定始终把最大的数放在变量max名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 13 页 - - - - - - - - - (1) 假定 a 中的数最大,把a 赋给 max(2) 用 b 去和 max比较,若 b 大于 max ,则把 b 赋给 max;若不大于max(3) 用 c 去和 max比较,若 c 大于 max ,则把 c 赋给 max;若不大于max(4) 经过以上操作,max中已放入了a、 b、c 三个数中
15、的最大数,输出max读者可以参考以上给出的算法,写出相应的C4.25 【分析与解答】 (1) 本题已给出了非常明确的条件,只要写出正确的条件判断语句就可基本完成程序的编写。(2) 由给出的函数可知,只有x 的值在规定的范围内时,才求出y 的值,因此程序应当对输入的x 进行判断,若超过范围就不求y(3) 现以使用ifCD#*2else main() int x,y;printf( Enter x : ); scanf(%d , &x);if(x-5&x10) if(x=0) y=x-1;else if(x0 ) y=x+1;else if(x-5) y=x;printf( x=%d y=%dn,
16、 x,y); printf( *END* n n); 第五章循环结构习题分析与解答一、选择题 ( 单选题 )5.1 【参考答案】 D)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 13 页 - - - - - - - - - 5.2 【参考答案】 C)5.3 【参考答案】 B)5.4 【参考答案】 C)5.5 【参考答案】 C)5.6 【参考答案】 B)5.7 【参考答案】 D)5.8 【参考答案】 A)5.9 【参考答案】 D)5.10 【参考答案】 D)二、5.11
17、 【参考答案】1 5 2 4 3 65.12 【参考答案】5.13 【参考答案】 -15.14 【参考答案】 115.15 【参考答案】1 d=1.0 2 k+ 3 k=0 2 xamin三、5.17 【分析与解答】(1) 本题的基本算法是求累加值。累加项的值有规律的递增,每一项的绝对值比前一项增2, 因此可以利用循环的控制变量的递增来得到累加项的绝对值。 for( i=1; i=1e-4 ) t=t/i;e+=t;i+; (6) 请读者自己对变量做出正确的定义,设计输出语句,完善程序;也可以参考此程序段,(7) e的值应当是: 2.71828(8) 根据以上分析,读者已不难用for循环来实现
18、求e(9) 注意:在完成此程序时,不要对分母中的阶乘值进行单独计算,因为17! 的值已超过long 类型的最大值,更无法求到50!5.19 【分析与解答】名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 13 页 - - - - - - - - - (1) 从 1880 年至 2000 年的年数可用一个for(2) (3) 按输出的要求,需要设一个变量用于统计一行中输出的个数,若在一行上已连续输出了5 个年数,就需输出一个换行符,使下一个输出项在新的一行上开始;若用变量n
19、 来做此统计,则当表达式n%5=0时就应输出一个换行符,同时使n 重新置 0(4) 若变量 y 代表年数, if (y%4=0 & y%100!=0JB1|JB1|y%400=0)(5) for ( y=1880; y1|JB1|y%400=0) printf(%d ,y);n+;if(n%5=0) printf( n); n=0; (6) 请读者自己对变量做出正确的定义并赋初值,完善程序;也可以参考此程序段,按照自己的思路独立地完成程序。从1880 年至 2000 年有 30 个闰5.20 【分析与解答】(1) 不难理解利用以下的for循环可以在一行上连续输出n 个* for(i=1; i=
20、n; i+) printf(* ); printf( n);若 n 的值是 6,则连续输出6 个*(2) 以上图形是在各行上输出数目不等的* 号,只是 * 号的数目依次有规律地变化。在上半部分各行依次是1、3、5、 7 个,因此可以用以下的程序段来实 for(k=1;k=7;k+,k+) for(i=1;i=1;k-,k-) for(i=1;i=k; i+)printf(* );printf( n); * 现在我们已完成了在每行输出指定数目的* (3) 输出结果与题目要求不同,它们的区别是:按题目每一行之前有不同的空格,而这里则是所有的行都在第一列上开始输出* 号;所以接着就应当解(4) 分析
21、题目要求,每行第一个* 号位置的缩进是有规律的,假定中间这一行第一个* 号位置是在第一列,则可看出,第一至第三行的缩进分别是3、2、1个空格;而图形下半部的缩进数则刚好相反。这可在以上循环中添加输出连续空格的for b=3;for(k=1;k=7;k+,k+) for(j=1;j=b; j+)printf( );b-;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 13 页 - - - - - - - - - for(i=1;i=k; i+)printf(* );printf( n); (5) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 13 页 - - - - - - - - -