《全国计算机等级考试二级教程C语言程序设计》_第1页
《全国计算机等级考试二级教程C语言程序设计》_第2页
《全国计算机等级考试二级教程C语言程序设计》_第3页
《全国计算机等级考试二级教程C语言程序设计》_第4页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、全国计算机等级考试二级教程C 语言程序设计课后题及参考答案第一章 程序设计基本概念1.1在 TRUBO C 环境中用RUN 命令运行一个C 程序时,所运行的程序的后缀是_。答案: .exe1.2 C语言源程序文件的后缀是_,经过编译后,生成文件的后缀是_,经过连接后,生成文件的后缀是_。答案: .c.obj.exe1.3结构化程序由_、_、_三种基本结构组成。答案:顺序、选择、循环第二章 C 程序设计的初步知识一、选择题2.1以下选项中正确的整型常量是A)12.B)-20C)1 ,000D)456答案: B2.2以下选项中正确的实型常量是A)0B)3.1415C)0.329 10(2) ( 1

2、0 的 2 次方)D).871答案: D2.3以下选项中不正确的实型常量是A)2.607E-1B)0.8103e2C)-77.77D)456e-2答案: B2.4以下选项中不合法的用户标识符是A)abc.cB)fileC)MainD)PRINTF答案: A2.5以下选项中不合法的用户标识符是A)_123B)printfC)A$D)Dim答案: C2.6 C 语言中运算对象必需是整型的运算符是A)%B)/C)!D)*答案: A2.7 可在 C 程序中用作用户标识符的一组标识符是A)voiddefineWORDB)as_b3_123IfC)For-abccaseD)2cDOSIG答案: B2.8

3、若变量已正确定义并赋值,符合C 语言语法的表达式是A)a=a+7;B)a=7+b+c,a+C)int(12.3%4)D)a=a+7=c+b答案: B2.9以下叙述中正确的是A)a 是实型变量, C 允许进行以下赋值a=10,因此可以这样说:实型变量中允许存放整型值。B)在赋值表达式中,赋值号右边既可以是变量也可以是任意表达式。C)执行表达式 a=b 后,在内存中 a 和 b 存储单元中的原有值都将被改变, a 的值已由原值改变为 b 的值, b 的值由原值变为 0。D)已有 a=3,b=5 。当执行了表达式a=b,b=a 之后,已使a 中的值为 5, b 中的值为 3。答案: B2.10以下叙

4、述中正确的是A)在 C 程序中无论是整数还是实数,只要在允许的范围内都能准确无误的表示。B)C 程序由主函数组成。C)C 程序由函数组成。D)C 程序由函数和过程组成。答案: C2.11 TURBO C 中 int类型变量所占字节数是A)1B)2C)3D)4答案: B2.12不合法的八进制数是A)0B)028C)077D)01答案: B2.13不合法的十六进制数是A)oxffB)0XabcC)0 x11D)0 x19答案: A二、填空题2.14若 k 为 int 整型变量且赋值 11。请写出运算 k+后表达式的值A)_和变量的值 B)_ 。答案: 11、122.15若 x 为 double 型

5、变量,请写出运算x=3.2 ,+x 后表达式的值A)_和变量的值 B)_ 。答案: 4.2 、4.22.16函数体由符号 _开始,用符号 _结束。函数体的前面是_部分,其后是 _部分。答案: 、 、定义、执行2.17 C 语言中的标识符可分为_、_、和预定义标识符三类。答案:关键字、用户标识符2.18在 C 语言程序中,用关键字 _定义基本整型量,用关键字_定义单精度实型变量,用关键字_定义双精度实型变量。答案: int 、float、double2.19把 a1、a2 定义成单精度实型变量,并赋初值1 的定义语句是 _。答案: floata1=1.0 ,a2=1.0 ;2.20 C 程序中定

6、义的变量,代表内存中的一个_。答案:存储单元2.21表达式 3.5+1/2 的计算结果是 _。答案: 3.52.22对以下数学式,写出三个等价的C 语言表达式 _、_、 _。abc答案: a*b/c 、 a/c*b 、 b/c*a2.23表达式 s=10 应当读做“ _”。答案:将 10 赋给变量 s2.24计算机中内存储器的最小存储单位称_,其中能容纳的数是 _。答案:位、 0 或 12.25通常一个字节包含 _个二进制位。在一个字节中能存放的最大(十进制)整数是_,它的二进制数的形式是 _;最小(十进制)整数是_,它的二进制数的形式是_。答案: 8、 255、1111 1111 、 -12

7、8 、1000 00002.26当计算机用两个字节存放一个整数时,其中能存放的最大(十进制)整数是_、最小(十进制)整数是_,它的二进制数的形式是_。答案: 65535、 -32768 、 1000 0000 0000 00002.27在 C 语言中整数可用 _进制数、 _进制数和 _进制数三种数制表示。答案:十、八、十六三、上机改错题224 【分析与解答】第 1 行的错误:(1) include是一个程序行,因此在此行的最后不应当有分号(;) 。(2) include程序行中后面的stdio.h是一个文件名,按规定,文件名应当放在一对双引号( )内,或放在一对尖括号 () 内。第 2 行的错

8、误:(1) main() 是主函数的起始行,不是语句,因此最后不应当有分号(;) 。(2)在同一行上的 /*main function*/ 显然是注释; C 语言规定:注释由 /* 开头,由 */ 结束,但在 *号和 / 之间不得插入任何空格,而在此处“/*”和“/*”之间存在空格,因此,/*main function*/ 的写法式是错误的,而应写成:/*main function*/。第 3 行的错误:(1)在主函数的起始行main() 的后面是函数体,函数体由左花括号() 开始。但在函数体的第一行:float 的前面缺少了左花括号 () 。(2)在同一行上的 /* /*r is radiu

9、s*/, /* s is area of circular*/ */显然是注释; C 语言规定:注释由 /* 开头,由 */ 结束,并且开头的 /* 将去找最近的 */ 去配对,因此在 /* /*r is radius*/中,第一个 /* 与最后的那个 */配上了对,结果紧跟在后面的那个逗号( ,) 落在了注释的外面, 而构成了一个多余符号,为此,在编译时将报告 “语法错”。第 6 行的错误:10printf( %f KG- *3n ,s) 应当是一条输出语句,但在最后缺少了一个分号。(2) printf( %f KG- *3n ,s);() ;此右花括号可以放在printf(是程序的最后一条

10、语句,程序应当结束; 但缺少了程序体结束所需的右花括号%f KG- *3n ,s); 的后面,也可以放在printf(%f KG- *3n ,s);的下一行上。225【分析与解答】第 1 行的错误:在include行中的文件名应该是stdio.h,而不是stdio.a。第 2 行的错误:在 main 的后面缺少一对圆括号。第 4 行的错误:在 c=4 0 的后面缺少分号。第 6 行的错误:在printf(%f KG-*3 n,v) 的后面缺少分号。第三章、顺序结构一、选择题3.1 若 a、 b、c、d 都是 int类型变量且初值为0,以下选项中不正确的赋值语句是A) a=b=c=100;B)

11、d+;C) c+b;D) d=(c=22)-(b+);答案: C3.2 以下选项中不是C 语句的是A) int i; i+; printf(%dn, i); B) ;C) a=5,c=10D);答案: C3.3 以下合法的 C 语言赋值语句是A) A=B=58B) k=int(a+b);C) a=58,b=58D) -i;答案: D3.4 以下程序的输出结果是A) 0B) 1C) 3D) 不确定的值main()int x=10,y=3;printf(%dn, y=x/y);答案: C3.5若变量已正确说明为int类型,要给a、b、 c 输入数据,以下不正确的输入语句是A) read(a,b,c

12、);B) scanf(%d%d%d,a,b,c);C) scanf(%D%D%D,&a,&b,&c);D) scanf(%d%d%d,&a,&b,&c);答案: D3.6若变量已正确说明为float类型,要通过以下赋值语句给a 赋予 10、b 赋予22、 c赋予33,以下不正确的输入形式是A) 10 22 33B) 10.0,22.0,33.0C) 10.0 22.0 33.0D) 1022 33scanf(%f %f %f, &a, &b, &c);答案: B3.7若变量以正确定义,要将a 和 b 中的数进行交换,下面不

13、正确的语句组是A) a=a+b,b=a-b,a=a-b;C) a=t; t=b; b=a;B) t=a,a=b,b=t;D) t=b; b=a; a=t;答案: C3.8若变量已正确定义,以下程序段的输出结果是输出格式说明与输出项不匹配,输出无定值B) 5.17000C) 5.168000D) 5.169000 x=5.16894;printf(%fn,(int)(x*1000+0.5)/(float)1000);答案: D3.9 若有以下程序段,c3 中的值是A) 0B) 1/2C) 0.5D) 1int c1=1,c2=2,c3;c3=c1/c2;答案: A3.10若有以下程序段,其输出结

14、果是A) 0,0,-10B) 0,0,5C) -10,3,-10D) 3,3,-10int a=0,b=0,c=0;c=(a-=a-5),(a=b,b+3);printf(%d,%d,%dn,a,b,c);答案: B3.11当运行以下程序时,在键盘上从第一列开始输入9876543210(此处 代表Enter ),则程序的输出结果是A) a=98,b=765,c=4321C) a=98,b=765.000000,c=4321.000000B) a=10,b=432,c=8765D) a=98,b=765,c=4321.0main()int a; float b,c;scanf(%2d%3f%4f

15、,&a,&b,&c);printf(na=%d,b=%f,c=%fn,a,b,c);答案: C3.12以下程序的输出结果是A) a=%2,b=%5B) a=2,b=5C) a=%d,b=%dD) a=%d,b=%dmain()int a=2,b=5; printf(a=%d,b=%dn,a,b);答案: D3.13 若 int 类型占两个字节,则以下程序段的输出是A) -1,-1B) -1,32767C) -1,32768D) -1,65535int a=-1;printf(%d,%un,a,a);答案: D3.14以下程序段的输出是A) *496*B) *496*C)

16、 *000496*D) 输出格式符不合法int x=496;printf(*%-06d*n,x);答案: A3.15以下程序段的输出是A) |3.1415|B) |3.0|C) |3|D) |3.|float a=3.1415;printf(|%6.0f|n,a);答案: C3.16以下程序段的输出是A) |2345.67800|B) |12345.6780|C) |12345.67800|D) |12345.678|printf(|%10.5f|n,12345.678);答案: C3.17以下程序段的输出是A) *0000057.66*B) *57.66*C) *0000057.67*D)

17、*57.67*float a=57.666;printf(*%010.2f*n,a);答案: C3.18若从终端输入以下数据,要给变量C 赋以 283.19 ,则正确的输入语句是A) scanf(%f,c);B) scanf(%8.4f,&c);C) scanf(%6.2f,&c);D) scanf(%8,&c);283.1900 表示 Enter 键答案:由于印刷错误,本题没有正确答案。改正意见:把选项 A 改为: scanf(%f,&c);或者把选项 D 改为: scanf(%8f,&c);则可分别选择A 或者 D 为正确答案。3.19若变量已正确说

18、明,要求用以下语句给a 赋予 3.12 、给 b 赋予 9.0 ,则正确的输入形式是(代表空格)A) 3.12 9.0B) a= 3.12b= 9C) a=3.12,b=9D) a=3.12 ,b=9 scanf(a=%f,b=%f,&a,&b); 表示 Enter 键答案: C3.20以下程序的输出结果是A)98B) 89C) 66D) 以上三个都不对#includemath.hmain()double a=-3.0, b=2;printf(%3.0f %3.0fn,pow(b,fabs(a),pow(fabs(a),b);答案: B二、填空题3.21若有以下定义,请写出以下

19、程序段中输出语句执行后的输出结果。(1)_(2)_(3)_int i=-200,j=2500;printf(1) %d %d,i,j);printf(2) i=%d, j=%dn,i,j);printf(3) i=%dn j=%dn,i,j);答案:-200 2500i=-200, j=2500i=-200j=25003.22 变量 i 、j 、k 已定义为int 类型并有初值0,用以下语句进行输入时scanf(%d,&i); scanf(%d,&j); scanf(%d,&k);当执行第一个输入语句,从键盘输入:12.3 表示 Enter 键则变量i 、 j、k 的值

20、分别是_、_、_。答案: 12、0、 03.23 复合语句在语法上被认为是_。空语句的形式是_。答案:一条语句、;3.24 C 语句的最后用 _结束。答案:;3.25 以下程序段,要求通过scanf 语句给变量赋值,然后输出变量的值。写出运行时给81,给 x 输入 1.89234 时的三种可能的输入形式_、 _、_。k 输入100 ,给 a 输入 25.int k; float a; double x;scanf(%d%f%lf,&k,&a,&x);printf(k=%d,a=%f,x=%fn,k,a,x);答案:(1) 10025.811.89234(2) 10025

21、.811.89234100 25.81 1.892343.26 以下程序段的输出结果是 _。int x=0177;printf(x=%3d,x=%6d,x=$%6o,x=%6x,x=%6un,x,x,x,x,x);答案: x=127, x=127 , x=177 , x=7f,x=1273.27 以下程序段的输出结果是_。int x=0177;printf(x=%-3d,x=%-6d,x=$%-06d,x=$%06d,x=%06dn,x,x,x,x,x);答案: 27、x=127, x=127, x=$127,x=$000127, x=%06d3.28 以下程序段的输出结果是_。double

22、a=513.789215;printf(a=%8.6f,a=%8.2f,a=%14.8f,a=%14.8lfn,a,a,a,a);答案: a=513.789215,a=513.79,a=513.78921500,a=513.78921500三、编程题和改错题3.16【分析与解答】0主函数名 main 后应有一对圆括号。1变量定义语句中, v 的前面缺逗号。2第三行的 printf语句用以提示输入,但是原样输出的字符串没有用双引号括起来;另外,从输入的形式看,输入的数据紧跟在提示之后,因此,printf格式串中最后不应该有换行符n。(4)因为输入项a、 b、c 从定义和计算结果来看都是doubl

23、e 类型,因此,第四行scanf 语句格式串中的格式说明不应当用 %d 而应当用 %lf ;且每一个变量之前应该加地址运算符&。第七行的 printf语句中应当把 %d 都改成 %lf 或 %f;按输出要求在格式串中应添加相应的原样输出的字符;因为下一个 printf的输出从新的一行开始,因此在本输出语句的格式串的最后应当加换行符n。(6)第八行的 printf语句中应当把格式串整理合并放在输出项的前面,输出项放在后面,%d 都改成 %lf 或%f;中间的 n 删去。请读者自己写出修改后的程序,并上机调试。3.17 【分析与解答】11分析:可用算术式56060 把分钟换算成小时和分钟,

24、商数就是小时数,余数就是分钟数。(2)确定变量的名字和定义变量的类型:在程序中把小时数放在变量h 中,把分钟数放在变量m 中。这两个变量的类型可以是整型 ( 本题中采用整型 ) ,也可以是实型。(3)确定所用算法:求 SX()560 60 SX的商数,在C 语言中可以用整除的算法,语句是h=560/60; 。求余数可用求余运算符 %:560%60,其值放入变量 m 中的语句是: m=560%60;。(4) 设计输出格式。若输出的形式定为:小时 : 分钟,则按此形式设计输出语句。12把以上内容放在主函数的一对花括号中。13编写程序如下:main()inth, m;h=560/60;m=560%6

25、0;printf(The result:%3d : %3d n, h,m);运行结果是:The result:9 :203.18【分析与解答】14确定变量的名字和定义变量的类型。若用 a 存放 1500,用 b 存放 350;用 q 存放商数,用 r 存放余数,所有变量应定义成 int 类型。15设计输入语句从终端输入1500 和 350;在输入语句之前,应当设计一个输出语句,用以提示输入。(3)可用整除求商数,结果放在变量q 中。可用求余运算符%求两数之余数,结果放在变量r 中。16设计输出语句。输出a、 b、q、r 。17把以上内容放在主函数的一对花括号中。本题的程序与3.30 相似,请读

26、者参考上题并根据本题的解释自己编程,并上机调试。3.19【分析与解答】18定义 4 个双精度变量 a、 b、c 和 ave ,变量 a、 b、 c 分别存放读入的 3 个双精度数, ave 存放它们的平均值。19设计输入语句,以及在此之前用于提示输入的(printf)语句。(3)设计求平均值的算法,把所求得的平均值放入变量ave 中。(4)设计把变量 ave 中的数,从小数点后第二位数进行四舍五入的算法。现举例说明:若ave 中的数为 123.4644 ,为了保留此值小数点后一位,可用表达式:(int)(123.4644*10)/10.0;依次推算,为了保留此值小数点后二位,可用表达式: (i

27、nt)(123.4644*100)/100.0;其他依此类推。(5)若要求对小数点后第二位数进行四舍五入,则可对原数加 0.05 后再进行以上运算。如要求保留 123.4644 小数点后一位且对第二位数进行四舍五入,可用表达式:(int)(123.467+0.05)*10)/10.0。注意:分母一定要用实数10.0 而不能用整数 10,否则就变成整除了;若要求保留123.4644 小数点后两位且对第三位数进行四舍五入,可用表达式: (int)(123.467+0.005)*100)/100.0;其他依此类推。(6)设计输出语句。输出a、 b、c 和 ave 。20把以上内容放在主函数的一对花括

28、号中。21编写程序如下:main()doublea,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.20【分析与解答】22关于对变量中的数进行交换的算法请参考 3.7 题中的解释和教程中有关的例题。23定义 4 个整型变量 a、b、 c

29、 和 t ,变量 a、 b、 c 分别存放读入的 3 个整数, t 用作临时存储单元。24设计输入语句,以及在此之前用于提示输入的(printf)语句。25输出 a、b、 c 中的值,以便于比较。26交换的步骤如下: 把 c 中的值赋给t 。 把 b 中的值赋给c 。 把 a 中的值赋给b。 把 t 中的值赋给a。经过以上步骤,已按要求进行了交换。27输出 a、b、 c 中的值。28编写程序如下:main()inta, b, c, t;printf( Entera, b, c :n);scanf( %d%d%d ,&a,&b,&c);printf( (1) a=%d,b

30、=%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) !B) %C) -=D) &答案: A4.2 下列运算符中优先级最低的运算符是A) |B) !=C) =y)&(y=z)B) (x=y)AND(y=z)C) (x=y=z)D) (x=y)&(y=z)答案: A4.4 设 a、 b 和 c 都是 int 型变量,且 a=3, b=4,c=5; 则以下的表达式中,值为0 的表达式是A) a&bB)

31、a=bC) a|b+c&b-cD) !(ab)&!c|1)答案: D4.5 以下程序的输出结果是A) 0B) 1C) 2D) 3main()int a=2,b=-1,c=2; if(ab)if(b0)c=0;elsec+=1;printf(%dn,c);答案: C4.6以下程序的输出结果是A)1B)2C)3D)4main()int w=4,x=3,y=2,z=1;printf(%dn,(wx?w:zy?z:x);答案: A4.7若执行以下程序时从键盘上输入3 和 4,则输出结果是A) 14B) 16C) 18D) 20main()int a,b,s; scanf(%d%d,&a

32、mp;a,&b);s=a;if(ab) s=b;s*=s;printf(%dn,s);答案: B4.8下面的程序片段所表示的数学函数关系是-1(x0)1(x0)0(x0)-1(x0)y=-1;if(x!=0) y=1;if(x0) y=1;else y=0;答案: A4.9运行以下程序后,输出A) *B) &C) #&D) 有语法错误不能通过编译main()int k=-3;if(k、 =、 =、 =、 !=4.13 C 语言中的逻辑运算符按优先级别是_、 _、_。答案:!、 &、|4.14C 语言中的关系运算符和逻辑运算符的优先级别是_、 _、_、 _、_、

33、_、_。答案:!、 、 =、 != 、 &、 |4.15C 语言中逻辑运算符 _的优先级高于算术运算符。答案:!4.16将下列数学式改写成C 语言的关系表达式或逻辑表达式 A)_B)_ 。A)a=b 或 a4答案: A)a=b|a4|x100)printf(%dn,a100);elseprintf(%dn,a0)B) !0答案: A) xc)b=a; a=c; c=b;答案: 3、 2、 24.20 若变量已正确定义,以下语句段的输出结果是_。x=0; y=2; z=3;switch(x)case 0:switch(y=2)case 1: printf(*); break;case 2

34、: printf(%); break;case 1:switch(z)casecasedefault1: printf($);2: printf(*); break;: printf(#);答案: *#三、编程题4.21【分析与解答】相关内容请参考教程4.2 节和 4.4 节。32改写如下:switch(a/10)default: m=5;break;case0: case1 : case2: m=1; break;case3:m=2; break;case4:m=3; break;case5:m=4; break;(2)本题中对 a 的判断条件有一定的规律可寻;关键是,在switch 语句后

35、的表达式中利用了a/10 ,从而简化了 case 标号。4.22【分析与解答】编写本题的程序,首先要解决如何计算学生当前的年龄( 设存放实足年龄的变量是age) 。(1)如果当前的月份大于生日的月份,则学生的实足年龄age=y1-y0 。(2)如果当前的月份等于生日的月份,就要看日数,当前的日数大于或等于生日的日数,则学生的实足年龄age=y1-y0 。(3)如果不满足以上的条件,就可断定当前的日期没有超过生日日期,就是说学生的年龄应当是age=y1-y0-1 。以上 3 条,用 C 语言可以描述如下:if(m1m0)JB1|JB1|(m1=m0&d1=d0)age=y1-y0;els

36、eage=y1-y0-1;读者可以参考以上语句写出程序,也可以根据分析写出与此形式不同的语句和程序。4.23 【分析与解答】33若输入的整数 a 是奇数,输出 dd number ,是偶数输出: even number 。34若一个 a 是偶数,它就能被 2 除尽,即 a%2=0,输出 even number ;若是奇数,它就不能被 2 除尽,即 a%2! KG-*2=0,输出 odd number 。读者可以参考以上给出的算法,写出相应的 C 语句,并编写出完整的程序。4.24 【分析与解答】本题的主要算法是从3 个数中找出最大的那个数。假定始终把最大的数放在变量max 中。35假定 a 中

37、的数最大,把a 赋给 max。36用 b 去和 max 比较,若 b 大于 max,则把 b 赋给 max;若不大于 max,则什么也不做。37用 c 去和 max 比较,若 c 大于 max,则把 c 赋给 max;若不大于 max,则什么也不做。(4)经过以上操作, max 中已放入了 a、b、c 三个数中的最大数,输出max 即可。读者可以参考以上给出的算法,写出相应的C 语句,并编写出完整的程序。4.25【分析与解答】38本题已给出了非常明确的条件,只要写出正确的条件判断语句就可基本完成程序的编写。(2) 由给出的函数可知,只有 x 的值在规定的范围内时,才求出 y 的值,因此程序应当

38、对输入的过范围就不求 y 的值。x 进行判断,若超39现以使用 ifCD#*2else 语句为例写出程序供参考。 main()intx,y;printf(Enterx :);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, x,y);printf( *END* nn);第五章、循环结构一、选择题5.1以下程序段的输出结果是A)9B)1C)11D)10int k,j,s;for(k=2; k6; k+,k+)s=1;for(j=k; j6; j+

39、)s+=j;printf(%dn, s);答案: D5.2以下程序段的输出结果是A) 12B) 15C) 20D) 25int i,j,m=0;for(i=1; i=15; i+=4)for(j=3; j7)n-;printf(%dn, n);答案: B5.4以下程序段的输出结果是A)1B)30C)1-2D) 死循环int x=3;do printf(%3d,x-=2); while(!(-x);答案: C5.5以下程序段的输出结果是A) 15B) 14C) 不确定D) 0main()int i,sum;for(i=1; i0; y-)if(y%3=0)printf(%d, -y); cont

40、inue;答案: B5.7 若 x 是 int型变量,以下程序段的输出结果是40*3#4*541#3*4#542#3*4#543*3#4*5for(x=3; x6; x+)printf(x%2)?(*%d):(#%dn),x);答案: D5.8以下程序的输出结果是A) *#*#*#$B) #*#*#*$C) *#*#$D) #*#*$main()int i;for(i=1; i=5; i+)if(i%2)printf(*);elsecontionue;printf(#);printf($n);答案: A5.9以下叙述正确的是44do_while语句构成的循环不能用其它语句构成的循环来代替。45

41、do_while语句构成的循环只能用break 语句退出。C) 用 do_while 语句构成循环时,只有在while后的表达式为非零时结束循环。D) 用 do_while 语句构成循环时,只有在while后的表达式为零时结束循环。答案: D5.10以下程序的输出结果是A) 39 81B) 42 84C) 26 68D) 28 70main()int x,i;for(i=1; ib; +b) i+;while(a+c) j+;do k+;while(ad+);答案: 5、 4、 65.12 以下程序段的输出结果是_。int k,n,m;n=10; m=1; k=1;while(k=n)m*=2

42、;printf(%dn,m);答案:死循环5.13 以下程序的输出结果是_。main()int x=2; while(x-);printf(%dn,x);答案: -15.14 以下程序段的输出结果是_。int i=0,sum=1;do sum+=i+; while(i5);printf(%dn,sum);答案: 115.15有以下程序段:s=1.0;for(k=1; k=n; k+) s=s+1.0/(k*(k+1);printf(%fn,s);请填空,使下面的程序段的功能完全与之等同。s=0.0;_;k=0;dos=s+d;_;d=1.0/(k*(k+1);while(_);printf(%

43、fn,s);答案: d=1.0 、 k+、kamax)amax=x;if(_)amin=x;scanf(%f,&x);printf(namax=%fnamin=%fn,amax,amin);答案: x=0、xamin三、编程题5.17 【分析与解答】(1)本题的基本算法是求累加值。累加项的值有规律的递增,每一项的绝对值比前一项增2,因此可以利用循环的控制变量的递增来得到累加项的绝对值。例如:for( i=1; i=1e-4 ) t=t/i; e+=t;i+;52请读者自己对变量做出正确的定义,设计输出语句,完善程序;也可以参考此程序段,按照自己的思路独立地完成程序。53e 的值应当是:

44、 2.71828 。(8)根据以上分析,读者已不难用for 循环来实现求 e 值的计算。(9)注意:在完成此程序时,不要对分母中的阶乘值进行单独计算,因为17! 的值已超过 long 类型的最大值,更无法求到 50! 。5.19 【分析与解答】(1)从 1880 年至 2000 年的年数可用一个for 循环来取得。54对每一年,用以上指定的条件来进行判断,若满足条件即为闰年,进行输出。(3)按输出的要求,需要设一个变量用于统计一行中输出的个数,若在一行上已连续输出了5 个年数,就需输出一个换行符,使下一个输出项在新的一行上开始;若用变量n 来做此统计,则当表达式n%5=0 时就应输出一个换行符

45、,同时使n 重新置 0 值。55若变量 y 代表年数, if 语句的逻辑表达式可以写成如下:(y%4=0 & y%100!=0JB1|JB1|y%400=0)56以下程序段供参考:for( y=1880; y1|JB1|y%400=0)printf( %d ,y);n+;if(n%5=0)printf(n);n=0;57请读者自己对变量做出正确的定义并赋初值,完善程序;也可以参考此程序段,按照自己的思路独立地完成程序。从 1880 年至 2000 年有 30 个闰年。5.20【分析与解答】(1)不难理解利用以下的for循环可以在一行上连续输出n 个* 号:for(i=1; i=n; i

46、+)printf(* );printf(n);若 n 的值是 6,则连续输出 6 个* 号。(2)以上图形是在各行上输出数目不等的* 号,只是 * 号的数目依次有规律地变化。在上半部分各行依次是1、3、5、58个,因此可以用以下的程序段来实现这样的输出:for(k=1;k=7;k+,k+)for(i=1;i=1;k-,k-)for(i=1;i=k; i+)printf(*);printf(n);以上程序段从第一列起输出的结果如下:*现在我们已完成了在每行输出指定数目的* 号。59输出结果与题目要求不同,它们的区别是:按题目每一行之前有不同的空格,而这里则是所有的行都在第一列上开始输出 * 号;

47、所以接着就应当解决这一问题。60分析题目要求, 每行第一个 * 号位置的缩进是有规律的, 假定中间这一行第一个 * 号位置是在第一列, 则可看出,第一至第三行的缩进分别是 3、2、1 个空格;而图形下半部的缩进数则刚好相反。这可在以上循环中添加输出连续空格的 for 循环来实现,对于上半部程序如下:b=3;for(k=1;k=7;k+,k+)for(j=1;j=b; j+)printf();b-;for(i=1;i=k; i+)printf(* );printf(n);61请读者在理解以上给出的示例的基础上,自己添加下半部空格的输出。第六章、字符型数据一、选择题6.1 C 语言中的简单数据类型

48、有A) 整型、实型、逻辑型B) 整型、实型、字符型C) 整型、字符型、逻辑型D) 整型、实型、逻辑型、字符型答案: B6.2 C 语言中,字符( char )型数据在微机内存中的存储形式是A) 反码B) 补码C) EBCDIC 码D) ASCII 码答案: D6.3 设有语句 char a=72;,则变量 aA) 包含 1个字符B) 包含 2 个字符C) 包含 3 个字符D) 说明不合法答案: A6.4 C 语言中不合法的字符常量是A) 0 xffB) 65C) &D) 028答案:本题 A)和 D)选项都是不合法的字符常量。若A) 选项改为 xff,则正确。6.5 C 语言中不合法的

49、字符串常量是A) 121B) y=C) nnD) ABCDx6d答案: B6.6 判断 char 型变量 c 是否为大写字母的最简单且正确的表达式是A) A=c=Z)C) (A=c)D) (c=A)&(c=A&x=Z)?(x+32):x;printf(%cn,x);答案: B6.9以下程序的输出结果是A) 67,CB) B,CC) C,DD) 不确定的值main()char ch1,ch2; ch1=A+5-3;ch2=A+5-3;printf(%d,%cn,ch1,ch2);答案: A6.10对以下程序,从第一列开始输入数据:A) 668977B) 6689662473, 代

50、表 EnterC) 66778777。程序的输出结果是D) 6688766#include stdio.hmain()int c; while(c=getchar()!=n)switch(c-2)case 0:case 1: putchar(c+4);case 2: putchar(c+4); break;case 3: putchar(c+3);default : putchar(c+2); break;printf(n);答案: A6.11若变量已正确说明,要求用以下语句给c1 赋予字符%、给c2 赋予字符 #、给 a 赋予 2.0 、给 b 赋予4.0 ,则正确的输入形式是(代表空格)A

51、) 2.0 %4.0 #B) 2.0%4.0#C) 2%4#D) 2 %4scanf(%f%c%f%c,&a,&c1,&b,&c2);62代表 Enter 键)答案: B二、填空题6.12 EOF 的十进制值是 _。答案: -16.13 C 语言中,字符占内存_个字节。答案: 16.14 调用 C 语言对字符处理的库函数时,在#include命令行中应包括的头文件是答案: string.h6.15 若输入字符 A,在以下 while语句执行后ch 的值是 _。_。while(ch=getchar()=A);答案: 16.16 若要通过以下语句给a、b、c、d 分

52、别输入字符的输入形式是 _,请用 代表 Enter 键。A、B、C、 D,给w、x、y 、z 分别输入10、 20、30、40,正确scanf(%d%c%d%c%d%c%d%c,&w,&a,&x,&b,&y,&c,&z,&d);答案: 10A20B30C40D6.17若有以下说明和输入语句,要求给入数据的形式是 _。c1、c2输入字符A 和 B,给 a1、a2 输入7.29和 101.298 ,从键盘正确输char c1,c2;float a1,a2;scanf(%f%f,&a1,&a2);scanf(%c%c,&

53、amp;c1,&c2);答案: 7.29101.298AB6.18 若有以下说明和输入语句,要求给c1、c2入数据的形式是 _。输入字符A 和 B,给 a1、a2 输入7.29和 101.298 ,从键盘正确输char c1,c2;float a1,a2;scanf(%c%f%c%f,&c1,&a1,&c2,&a2);答案:6.19若有以下说明和输入语句,要求给c1、c2、c3 输入字符A、B 和 C,请写出各种从键盘正确输入数据的形式。char c1,c2,c;scanf(%4c,&c1);scanf(%4c,&c2);scanf(%4

54、c,&c3);答案: A B C三、编程题6.20 【分析与解答】(1)在进行字符输入时,即使一次输入了一行字符( 最后用回车结束输入定义为 char 型变量,可以用以下的程序段来完成操作:while(ch!KG-*2=n) ,字符也只能一个一个地读入。若 ch=getchar();ch 已ch=getchar();当读入的是一个回车符时,循环就结束。循环体内的“”符号表示需要在循环体内完成的其他操作。(2)在循环内要求进行的操作之一是:输出每个字符以及与之对应的ASCII 代码值。因此可用以下语句来实现。printf( %c : %d ,ch,ch);(3)在循环内要求进行的另一个操

55、作是:变量,则可用来作计数器;使n 的初值为每行只能输出3 对字符和与之对应的ASCII0,每输出一次, n 的值增 1,当 n 的值为代码值。若 n 已定义为 int 3的整数倍时,额外输出一个型换行符。例如:n+;if(n%3=0)putchar(n);63把(2) 和(3) 中给出的语句放在循环体内,并按要求给出正确的定义和初值,就可完成题目所要求的操作。(5) 也可以在 while 后的一对括号中来完成字符的读入,如 while(ch=getchar()!KG- *2= n) 。这时,循环内、外的“ ch=getchar(); ”语句应当去掉。6.21 【分析与解答】64一行字符的读入

56、,请参照题 6.20(1) 和 (5) 中的解释。循环体内的“”符号表示需要在循环体内完成的其他操作。ch=getchar();while(ch!KG-*2=n)ch=getchar();(2)在本题中循环体内需要把读入的所有数字字符转换成一个整数。若用变量 n 来存放这个整数, 为了保证有效的存放,应当把它定义成long 类型。(3)要把输入的一串数字字符转换成一个整数,首先需要判断当前读入的字符是否是数字字符,若不是则什么也不做;若是,则进行以下操作: 把当前读入的一个字符转换成一个一位整数,这可由语句“d=ch- 0; ”来实现, 在这里 d 是一个整型变量; 把 d 中的一位数归并到n

57、 的低位中,这可用语句“n=n*10+d; ”来实现。这里所述的操作可由以下语句来完成:ifif(ch= 0&ch= 0&ch= a & ch= z)n+;68在退出循环后,输出n 的值。69请自己完善程序。6.24 【分析与解答】70若图案的行数输入到变量L 中。(2)按要求 L 决定了图形的行数,因此可通过循环来实现L 行的输出:for(i=1; i=L; i+)循环体中的“ ”号,代表输出L 行的操作。(3)假定 ch 中存放了一个字符,我们知道,通过以下循环可以在一行上输出n 个字符:for(j=1; j=n; j+)putchar(ch);putchar(n)

58、;注意,在循环后putchar( n); 语句不可少,它用以换行。(4)现在应当解决如何按要求给出每行输出的字符。由图分析,行数( 或行号 ) 为 1 时输出字符A,行数为 2 时输出字母 B若输出的字母放在变量ch 中,行号取决于外循环的控制变量i ,则输出的字母和行号的关系可用表达式:ch=A+i -1 来表示。当 i 为 1 时 ch 中被赋予字母 A,当 i 为 2 时 ch 中被赋予了字母 B,其他依此类推。因此,在此表达式后,利用 (3) 中的循环就解决了各行上输出的字母。(5)按要求每行输出的字母的个数不同,第二行输出3 个字母,第三行输出5 个字母,第四行输出7 个字母 (3)

59、中 for 循环体的执行次数取决于n 的值,也就是说n 的值决定了每行输出字母的个数。其实,n 的值与行号有着密切的关系: n=2*i-1 ,当 i 为 1 时 n 的值是 1、当 i 的 2 时 n 的值是 3、当 i 的 3 时 n 的值是 5、当 i 的 4 时 n 的值是 7。因此在 (3) 中 for 循环之前可用此表达式求出 n 的值。71总结以上分析,我们可得到以下的程序段: for(i=1; i=L; i+) ch= A +i-1; n=2*i-1;for(j=1; j=i; k-)putchar( );把此循环放在i 控制的循环体内、输出每行字符的循环之前即可。72请读者自己

60、补充有关的 include 行、语句和变量的定义,以完成整个程序。注意,如果有能力可在某些地方作些简化。第七章、函数一、选择题7.1以下说法中正确的是73C 语言程序总是从第一个定义的函数开始执行74C 语言程序总是从 main 函数开始执行75C 语言程序中的 main 函数必须放在程序的开始部分答案: C7.2以下函数的类型是A) 与参数 x 的类型相同B) void类型C) int类型D) 无法确定fff(float x)printf(%dn,x*x); 答案: C7.3以下函数调用语句中,含有的实参个数是A)1B)2C)4D)5func( (exp1,exp2),(exp3,exp4,exp5);答案: B7.4以下程序的输出结果是A) 11B) 20C) 21D) 31fun(int a,int b)int c; c=a+b; return c;main()int x=6,y=7,z=8,r;r=func(x-,y+,x+y),z-);printf(%dn,r);答案: C7.5以下程序的输出结果是A)-1B)0C)1D)2main()int i=2,p; p=f(i,i+1);printf(%d,p);int f(int a, int b)int c; c=a; if(ab) c=1;elseif(a=b)elsec=-1;return(c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论