C语言习题册1-3章题解

C语言习题册1-3章题解
C语言习题册1-3章题解

程序设计技术基础(C语言)习题集题解分析

第一、二、三章

一、选择题(四个选项中只有一个是正确的----下同)

1.与十进制数97不等值的字符常量是

A) ’a’ B) ’\101’ C) ’\x61’ D) ’\141’

题解分析:小写字母a的ASCII码是97;十六进制61转换为十进制为97;八进制141转换为十进制为97;八进制101转换为十进制为65,不等于97。

参考教材:p21 (3)字符常量;p22 转义字符表2-12,及其讲解。

2.在编写了一个C语言源程序C001.C并正确执行之后,当前目录下哪个文件不存在

A) C001.C B) C001.OBJ C) C001.DAT D) C001.EXE

题解分析:源程序C001.C经编译后生成目标文件C001.OBJ,再经过链接后生成可执行文件C001.EXE。

参考教材:p7 1.5.2 链接目标程序

3.以下选项中正确的整型常量是

A) 5.B)-10 C)1.000 D)4/5

题解分析:整型常量及整数也,实型常量及实数也。

参考教材:p19(1)整型常量,p20(2)实型常量

4.以下选项中正确的实型常量是

A) 0 B)3. 1415 C)0.03x102D).32

题解分析:0——属于整型常量;3. 1415——小数点和1415间不能分开(计算机不认);0.03x102——在C语言中要用0.03e2或0.03E2来表示。

参考教材:p20(2)实型常量

5.以下选项中不正确的实型常量是

A)2.670E-1 B)0.05e+1.5 C)-77.77 D)456e-2

题解分析: C语言在科学计数法表示实型常量时,指数部分必须是整数,不可用小数。答案B)中的0.05e+1.5表示的是0.05×101.5,指数1.5不符合要求。

6.以下选项中不合法的用户标识符是

A)wb-1 B)file C)Main D)PRINTF

题解分析:在C语言中标识符只能由字母、数字和下划线组成,A)中的“-”错了。

参考教材:p17 2.3.1 标识符

7.以下选项中不合法的用户标识符是

A)_123 B)printf C)A$ D)Dim

题解分析:参考上一题,$错了,printf是库函数名,如果不调用该函数,就可用。

注:教材有误。

8.C语言中运算对象必须是整型的运算符是

A)% B)/ C)* D)+

参考教材:p25 第一段第二行。

9.可在C程序中用作标识符的一组标识符是

A)void B)as_b3 C)For D)2c

Define _123 -abc DO

WORD If case SiG

题解分析:A)中的void和C)中的case是关键字,D)中的2c不符合数字不能打头的要求。另外,For和If因为有大写字母,所以不是关键字,C语言的关键字必须全部小写。

参考教材:p17 2.3.1 标识符。

10.若变量已正确定义并赋值,符合C语言语法的表达式是

A)a=a+7; B)a=7+b+c,a++ C)int(12.3%4) D)a=a+7=c+b 题解分析:a=a+7;因为有分号,所以是一个表达式语句,不是单纯的表达式;int(12.3%4)是强制类型转换,按照规定,int要写成(int),正确的形式是(int)(12.3%4);a=a+7=c+b:按照C规定赋值号左边必须是变量,“7”在赋值号“=”左边但不是变量;而a=7+b+c,a++是一个逗号表达式。

参考教材:p24 2.4.1 算数运算符及算数表达式;p32 2.4.6 逗号表达式;p33 2.4.7 数据类型的转换

11.以下非法的赋值语句是

A) n=(i=2,++i); B)j++; C) ++(i+1); D) x=j>0;

题解分析:按照C规则,++(i+1)相当于i+1=(i+1)+1, 1不可出现在”=”号左边。

参考教材:p26-27 例2-9后至例2-11前的讲解。

12.设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是

A) 6.500000 B) 6 C) 5.500000 D) 6.000000

题解分析:(int)a+b/b: 现将a转换为整型5,在加b/b=1.000000, 按照C的规则,整型数+浮点数,结果为浮点数。

参考教材:p33 2.4.7 数据类型的转换

13.已有定义:int x=3,y=4,z=5;,则表达式!(x+y)+z-1 && y+z/2的值是

A) 6 B) 0 C) 2 D) 1

题解分析:C语言中非零为真,只有零为假。(p30表2-17下面的注②)

!(x+y)= !7=0 ; !(x+y)+z-1=0+5-1=4为真;y+z/2=4+5/2为真,所以:真&&真还是真,真的结果用“1”表示。

参考教材:p29 2.4.2 关系运算符及关系表达式;p30 2.4.3 逻辑运算符及逻辑表达式14.以下叙述中正确的是

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 题解分析:A)C语言为不同类型的变量分配不同数量的内存单元,当把一个整型常量赋给一个实型变量时,系统自动将该整型常量转换为实型常量赋给实型变量。C)和D):在C 语言中当将一个变量赋给另一个变量时,赋给另一个变量的变量值不变。但被赋值的变量值改变为给其赋值的变量的值,所以C)中执行表达式a=b后,内存中a存储单元中的原有值被改变,等于b存储单元中的值,而b存储单元中的原有值不变。D)中执行了表达式a=b之后a=5,再执行b=a后还是b=5,所以a和b如要相互交换需引进第三变量。

参考教材:p24 2.4 基本运算符、表达式及运算的优先级;2.4.8 复杂表达式的计算顺序。

15.以下叙述中正确的是

A)在C程序中,无论是整数还是实数,只要在允许的范围内都能准确无误的表示。

B)C程序由主函数组成。

C)C程序由函数组成。

D)C程序由函数和过程组成。

题解分析:A)当将一个十进制小数用二进制小数表示时,有除不尽(其实是乘不尽)的情况,也就是无法准确表示。B)主函数是必须的,但不能代表全部。D)C程序中的函数和其它高级语言的过程是一回事,但不叫过程。

参考教材:p

16.Turbo C中int类型变量所占字节数是

A)1 B)2 C)3 D)4

题解分析:Turbo C中int类型变量占2字节。参考教材:p15 表2-3

17.不合法的八进制数是

A)0 B)028 C)07700 D)01

题解分析:代表8进制的符号是0-7,没有8这个数码。

18.不合法的十六进制数是

A)oxff B)0Xabc C)0x11 D)0x19 题解分析:C语言中十六进制数以0x开头,oxff的第一个是字母“O”,而不是数字“0”。

参考教材:p19 (1)整型常量

19.若a、b、c、d都是int类型变量且初值为0,以下选项中不正确的赋值语句是A)a=b=c=100; B)d++; C)c+b; D)d=(c=22)-(b++);

题解分析:赋值语句应有赋值号“=”,B)与C)没有,但d++是d=d+1的简化形式。

20.以下选项中不是C语句的是

A){int i; i++; printf(“%d\n”, i); } B);

C)a=5,c=10 D){ ; }

题解分析:C语句要以分号“;”结尾,C)无,如果只有一个分号,称其为“空语句”。

21.以下合法的C语言赋值语句是

A)a=b=58 B)k=int(a+b); C)a=58,b=58 D)--i;

题解分析:A)和D)结尾无分号,B)的正确形式是k=(int)(a+b);

参考教材:p33 2.4.7 数据类型的转换

22.以下程序的输出结果是

main()

{ int x = 10, y = 3;

printf(“%d\n” , y = x / y);

}

A)0 B)1 C)3 D)不确定的值题解分析:按常识x / y=3.333,但由于它们是整型变量,整型变量无小数点。

23.C语言中的简单数据类型有

A)整型、实型、逻辑型B)整型、实型、字符型

C)整型、字符型、逻辑型D)整型、实型、逻辑型、字符型题解分析:C语言中无逻辑型变量。

24.C语言中,字符(char)型数据在微机内存中的存储形式是

A)反码B)补码C)EBCDIC码D)ASCII码题解分析:参考教材p16表2-6

25.设有语句char a= …\172?;,则变量a

A)包含1个字符B)包含2个字符C)包含3个字符D)说明不合法

题解分析:参考教材p22表2-12

26.C语言中不合法的字符常量是

A)?\xff? B)?\65? C)?&? D)?\028?

题解分析:?\028?表示的是8进制数,但8进制中不应有数字“8”。另外,‘\ddd?可以是1-3位8进制数,所以B)也正确。另外?\xhh?可以是1-2位十六进制数。(教材可以修正一下)

27.C语言中不合法的字符串常量是

A)”\121” B)?y=? C)”\n\n” D)”ABCD\x6d”

题解分析:字符串常量用双引号,所以B)不对。参考p21 (4)字符串常量

28.若变量已正确说明为int类型,要给a、b、c输入数据,以下正确的输入语句是

A)read(a,b,c) B)scanf(“%d%d%d”,a,b,c);

C)scnaf(“%D%D%D”,&a,&b,&C); D)scanf(“%d%d%d”, &a,&b,&c);

题解分析:B)中输入变量前没加&;C)中两处错。一处是3个%D,D必须小写,另一处是&C,大写C与小写c表示的是不同的变量。

参考教材:p41 2.5.2格式化输入函数scanf()

29.若变量已正确说明为float类型,要通过以下赋值语句给a赋予10、b赋予22、c赋予33,以下不正确的输入形式是

scanf(“%f %f %f”, &a, &b, &c);

A)10 B)10.0,22.0,33.0 C)10.0 D)10 22

22 22.0 33.0 33

33

题解分析:当%f之间用空格分开时,输入数据时可用空格、回车区分。

30.已知i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1、j的值为2、k的值为3,以下选项中正确的输入语句是

A)scanf("%2d%2d%2d",&i,&j,&k); 010203 或 1 2 3

B)scanf("%d %d %d",&i,&j,&k); 1 2 3

C)scanf("%d,%d,%d",&i,&j,&k); 1,2,3

D)scanf("i=%d,j=%d,k=%d",&i,&j,&k); i=1,j=2,k=3

题解分析:每句后面的红色是对应的输入格式

31.若有以下程序:

main()

{ int k=2, i=2, m;

m=(k+=i*=k); printf("%d,%d\n",m,i);

}

执行后的输出结果是

A) 8,6 B) 8,3 C) 6,4 D) 7,4

题解分析:m=(k+=i*=k)从右向左运算:1.i*=k 即 i=i*k=2*2=4 2.k+=i即k=k+i=2+4=6 3.m=k=6。

32 若变量已正确定义,要将a和b中的数进行交换,下面不正确的语句是

A)a=a+b, b=a-b, a=a-b;B)t=a; a=b; b=t;

C)a=t; t=b; b=a; D)t=b; b=a; a=t;

题解分析:用具体数试一遍。

33.有以下程序

main()

{ int i = 10, j = 1;

printf("%d,%d\n",i--, ++j);

}

执行后输出结果是

A) 9,2 B) 10,2 C) 9,1 D) 10,1

题解分析:略

34.若变量已正确定义,以下程序段的输出结果是

x=5.16894;

printf(“%f\n”, (int)(x*1000+0.5)/(float)1000);

A)输出格式说明与输出项不匹配,输出无定值B)5.17000

C)5.168000 D)5.169000

题解分析:(int)(x*1000+0.5)=(int)(5.16894*1000+0.5)

= (int)(5168.94+0.5)

= (int) (5169.44)=5169

5169/(float)1000)=5.169

35.若有以下程序段,c3中的值是

int c1 = 1, c2 = 2, c3;

c3 = c1 / c2;

A)0 B)1/2 C)0.5 D)1

题解分析:0.5取整为零

36.若有以下程序段,其输出结果是

int a = 0, b = 0, c = 0;

c = ( a -= a - 5), (a = b, b+3);

printf(“%d,%d,%d\n”,a, b, c);

A)0,0,-10 B)0,0,5 C)-10,3,-10 D)3,3,-10

题解分析:关键句:c = ( a -= a - 5), (a = b, b+3); 逗号表达式,第一部分:c = ( a -= a - 5),第二部分:(a = b, b+3)。先算第一部分从右到左a-=a-5可写成a=a-(a-5),得a=5,再得c=5; 第二部分:(a=b,b+3); 得a=0;由此可得:a=0 (取第二个表达式的值),b=0(其值没变),c=5(第一部分所得)。

37.当运行以下程序时,在键盘上从第一列开始,输入9876543210(此处表示Enter),则程序的输出结果是

main()

{ int a; float b, c;

scanf(“%2d%3f%4f”, &a, &b, &c);

printf(“\na=%d,b=%f,c=%f\n”,a, b, c);

}

A)a=98,b=765,c=4321 B)a=10,b=432,c=8765

C)a=98,b=765.000000,c=4321.000000 D)a=98,b=765.0,c=4321.0

题解分析:scanf(“%2d%3f%4f”, &a, &b, &c);语句a取两位,b取3位,c取4位。

38.以下程序的输出结果是

main()

{ int a = 2, b =5;

printf(“a=%%d,b=%%d\n”,a, b);

}

A)a=%2,b=%5 B)a=2,b=5 C)a=%%d,b=%%d D)a=%d,b=%d

题解分析:%%是输出一个百分号,第一个%是格式控制符号,如果后跟d,是控制其后的变量,但后跟的是%,表示要输出一个%,后面的d只好按原样输出。参考教材p40例2-21前面的一行。

39.若int类型占两个字节,则以下程序段的输出是

int a=-1;

printf(“%d, %u\n”, a, a);

A)-1,-1 B)-1,32767 C)-1,32768 D)-1,65535

题解分析:%u是无符号数,二进制的16位全1就是10进制的65535.

40.以下程序段的输出是

int x = 496;

printf(“*%-06d*\n”, x);

A)*496 * B)* 496* (*%6d*)

C)*000496* (*%06d*)D)输出格式不合法

题解分析:红色的是对应的格式。

41.以下程序段的输出是

float a=3.1415;

printf(“|%6.0f|\n”, a);

A)|3.1415| B)| 3.0| C)| 3| D)| 3.|

题解分析:%6.0f即变量a按6位宽度零位小数输出

42.以下程序段的输出是

printf(“|%10.5f|\n”, 12345.678);

A)|2345.67800| B)|12345.6780| C)|12345.67800| D)|12345.678| 题解分析:%10.5f:按十位宽度(连小数点在内的全部数),5位小数输出。如果宽度不够,按实际需要输出。

43.若从终端输入以下数据,要给变量c赋以283.19,则正确的输入语句是

A)scanf(“%f”,&c) ;B)scanf(“%8.4f”, &c); C)scanf(“%6.2f”, &c); D)scanf(“%8f”, &c);题解分析:红色引号是印刷错误,应该有的。A)错在应是&c且少分号,B)和C)错在scanf 函数与printf函数不同,不可控制小数点的位数,即%8.4,%6.2不可用。参考教材p42(1)字段宽度

44.若变量已正确说明,要求用以下语句给a赋予3.12、给b赋予9.0,则正确的输入形式是scanf(“a=%f,b=%f”,&a, &b);

A)3.12 9.0 B)a= 3.12b= 9 C)a=3.12,b=9.0 D)a=3.12 ,b=9

题解分析:输入要与输入格式相对应。

45.以下程序的输出结果是

#include “math.h”

main()

{ double a = -3.0, b = 2;

printf(“%3.0f %3.0f\n”, pow(b,fabs(a)), pow(fabs(a), b) );

}

A)9 8 B)8 9

C)6 6 D)以上三个都不对

题解分析:pow()指数函数,fabs()取绝对值函数。参考数学库函数math.h

46.以下程序的输出结果是

main()

{ char c1 = …A?, c2 = …Y?;

printf(“%d,%d\n”, c1, c2);

}

A)因输出格式不合法,无正确输出B)65,90

C)A,Y D)65,89

题解分析:…A?的ASCII码65,…Y?的ASCII码89.

47.以下程序段的输出结果是

main()

{ char x = …A?;

x = (x>=?A? && x<=?Z?)?(x+32):x;

printf(“%c\n”, x);

}

A)A B)a C)Z D)z

题解分析:(x>=?A? && x<=?Z?)?(x+32):x是一个问号表达式

48 以下程序段的输出结果是

main()

{ char ch1, ch2;

ch1 = …A? + …5? - …3?;

ch2 = …A? + …5? - …3?;

printf(“%d,%c\n”, ch1,ch2);

}

A)67, C B)B,C

C)C,D D)不确定的值

题解分析:…A? + …5? - …3?=65+2=67是C的ASCII码。

49.若变量已正确说明,要求用以下语句给c1赋予字符%、给c2赋予字符#、给a赋予2.0、给b赋予4.0,则正确的输入形式是

scanf(“%f%c%f%c”, &a, &c1, &b, &c2);

A)2.0 % 4.0 # B)2.0%4.0# C)2% 4# D)2 % 4 #

题解分析:字符和浮点数正好相互分隔。

50.以下程序的输出结果是

main()

{ int w = 4, x = 3, y = 2, z = 1;

printf(“%d\n”, (w < x) ? w: z < y ? z: x));

}

A)1 B)2 C)3 D)4

题解分析:输出的是(w < x) ? w: z < y ? z: x)即该问号表达式的值。

51.下列程序段的输出结果是

int a=1234;

float b=123.456;

double c=12345.54321;

printf("%2d,%2.1f,%2.1f",a,b,c);

A)无输出

B)12,123.5,12345.5

C )1234,123.5,12345.5

D )1234,123.4,1234.5

题解分析:当输出宽度不能表达实际数值时,要按实际数值输出。如果整数部分超出要求的宽度,要按实际数值输出,小数部分按要求四舍五入输出。参考教材p38(1)字符宽度修饰符 “可以看出…”一段。

52. 一个算法应该具有“确定性”等五个特性,下面对另外4个特性的描述中错误的是

A) 有零个或多个输入 B) 有零个或多个输出

C) 有穷性 D) 可行性

题解分析:一个算法一定是需要结果的,所以要有一个或多个输出。

53. 以下叙述中正确的是

A) C 语言的源程序不必通过编译就可以直接运行 B) C 语言的每条可执行语句最终都将被转换成二进制的机器指令

C) C 语言的源程序经编译形成的二进制代码可以直接运行

D) C 语言的函数不可以单独进行编译

题解分析:

54. 对用C 语言编写的代码程序,以下叙述中哪个是正确的

A) 可立即执行 B) 是一个源程序

C) 经过编译即可执行 D) 经过编译解释才能执行

55. 结构化程序由三种基本结构组成, 由这三种基本结构组成的算法

A) 可以完成任何复杂的任务 B) 只能完成部分复杂的任务

C) 只能完成符合结构化的任务 D) 只能完成一些简单的任务

56.有一个命名为C001.C 的C 语言源程序,当正常执行后,在当前目录下不存在的文件是

A )C001.OBJ

B )C001.DAT

C )C001.EXE

D )C001.C

二、填空题

1.若k 为int 型变量且赋值11,请写出运算k++后表达式的值 11 和变量的值 12 。

2.若x 为double 型变量,请写出运算x = 3.2, ++x 后表达式的值 4.2 和变量的值 4.2 。

3.函数体由符号 { 开始,用符号 } 结束。

4.函数体的前面是 函数首部 部分,其后面是 函数体 部分。

5.在C 语言程序中,用关键字 int 定义基本整型变量,用关键字 float 定义单精度实型变

量,用关键字 double 定义双精度实型变量。

6.把a1、a2定义成单精度实型变量,并赋初值1的说明语句是 float a1=0, a2=0 。

7.C 程序中定义的变量,代表内存中的一组 存储单元 。

8.表达式3.5 + 1 / 2的计算结果是 3.5 。因为1/2是整型数除整型数,结果仍为整型数。

9.对以下数学式,写出三个等价的C 语言表达式是 a/(a*b) 、 a/b/c 、 a/c/b 。

c b a

10.表达式s = 10应当读做“ 将10赋给变量s ”。

11.计算机中内存储器的最小单位称为 位 ,其中能容纳的数是 0和1 。

12.通常一个字节包含 8 个二进制位。在一个字节中能存放的最大十进制整数是 255 ,

它的二进制数的形式是 11111111 ;最小十进制整数是 -128 ,它的二进制形式是 100000000 。

13.当计算机用两个字节存放一个整数时,其中能存放的最大十进制整数是65535 、最小十进制整数是-32768 ,它们的二进制形式是1111 1111 1111 1111 和1000 0000 0000 0000。

14.以下程序的输出结果是 16 。

main()

{ int a=0;

a+=(a=8); a=a+(a=8)

printf("%d\n",a);

}

15.若有以下定义,请写出以下程序段中输出语句执行后的结果。

(1)-22 2500 (2)i=-200 j=2500 (3)i=-22

j=2500

int i = -200, j =2500;

printf(“(1) %d %d”, i, j);

printf(“(2) i = %d, j = %d\n”, i, j);

printf(“(3) i = %d\n j = %d\n”, i, j);

16.变量i、j、k已定义为int类型并赋初值0,用以下语句输入时

scanf(“%d”, &i); scanf(“%d”, &j); scanf(“%d”, &k);

当执行第一个输入语句时从键盘输入:

12.3 表示Enter键

则变量i、j、k的值分别是12 、0 、0 。

17.复合语句在语法上被认为是一条语句。空语句的形式是;。

18.以下程序段,要求通过scanf语句给变量赋值,然后输出变量的值。写出运行时给k输入100,给a输入25.81,给x输入1.89234时的三种可能的输入形式100 25.8 1.89234、100 25.8 1.89234 、10025.8 1.89234 。(为回车)

int k; flaot a; double x;

scanf(“%d%f%lf”, &k, &a, &x);

printf(“k = %d, a = %f, x = %f\n”, k, a, x);

19.以下程序段的输出结果是x=127,x= 127,x= 177,x= 7f,x= 127 。

int x = 0177;

printf(“x = %3d, x = %6d, x = %6o, x = %6x, x = %6u\n”, x, x, x, x, x);

20.以下程序段的输出结果是a = 513.789215,a = 513.79,a = 513.78921500,

a = 513.78921500,。

double a = 513.789215;

printf(“a = %8.6f, a = %8.2f, a = %14.8f, a = %14.8lf\n”, a, a, a, a);

21.若要通过以下语句给a、b、c、d分别输入字符A、B、C、D,给w、x、y、z分别输入10、

20、30、40,正确的输入形式是。请用代表Enter键。

scanf(“%d%c%d%c%d%c%d%c”, &w, &a, &x,&b, &y, &c, &z, &d);

22.若有以下说明和输入语句,要求给c1、c2输入字符A和B,给a1、a2输入7.29和101.298,从键盘正确输入数据的形式是7.29 101.298AB 。

char c1, c2; float a1, a2;

scanf(“%f%f”, &a1, &a2);

scanf(“%c%c”, &c1, &c2);

23.若有以下说明和输入语句,要求给c1、c2、c3输入字符A、B和C,请写出从键盘正确输

入数据的形式是AAAABBBBCCCCDDDD 。

char c1, c2, c3;

scanf(“%4c”, &c1);

scanf(“%4c”, &c2);

scanf(“%4c”, &c3);

24.下列程序的输出结果是16.00,请填空。

main()

{ int a=9, b=2;

float x=6.6, y=1.1,z;

z=a/2+b*x/y+1/2;

printf("%5.2f\n", z );

}

25.结构化程序由顺序结构、选择结构、循环结构三种基本结构组成。26.模块化程序设计的设计原则是自顶向下和逐步求精。

27.组成C程序的基本单位是函数,其组成部分包括函数首部和函数体。

28.C程序中的main称主函数,它可以出现在程序的,任何位置。

29.由“/*”和“*/”括起来的内容称为注释,它的作用是,提高程序的可读性。30.描述算法的常用方法有:自然语言、流程图、伪代码和计算机语言。

相关主题
相关文档
最新文档