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
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
则变量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
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,正确的输入形式是。请用
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.描述算法的常用方法有:自然语言、流程图、伪代码和计算机语言。