《C语言程序设计》习题及解答14章.docx
- 文档编号:10155024
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:32
- 大小:27.10KB
《C语言程序设计》习题及解答14章.docx
《《C语言程序设计》习题及解答14章.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计》习题及解答14章.docx(32页珍藏版)》请在冰点文库上搜索。
《C语言程序设计》习题及解答14章
《C语言程序设计》习题及解答1-4章
第1章习题
一、单项选择题
1.C语言程序的执行,总是起始于【】。
A)程序中的第一条可执行语句
B)程序中的第一个函数
C)main函数
D)包含文件中的第一个函数
分析:
在一个C语言源程序中,无论main函数书写在程序的前部,还是后部,程序的执行总是从main函数开始,并且在main函数中结束。
本题正确答案为C。
2.下列说法中正确的是【】。
A)C程序书写时,不区分大小写字母
B)C程序书写时,一行只能写一个语句
C)C程序书写时,一个语句可分成几行书写
D)C程序书写时每行必须有行号
分析:
C语言严格区分大小写字母,如"A1"和"a1"被认为是两个不同的标识符,C程序的书写非常灵活,既可以一行多句,又可以一句多行,且每行不加行号。
本题正确答案为C。
3.下面对C语言特点,不正确描述的是【】。
A)C语言兼有高级语言和低级语言的双重特点,执行效率高
B)C语言既可以用来编写应用程序,又可以用来编写系统软件
C)C语言的可移植性较差
D)C语言是一种结构式模块化程序设计语言
分析:
C语言是介于汇编语言和高级语言之间的一种语言,由于它可以直接访问物理地址,对硬件操作,所以C语言既可以编写应用程序,又可以开发系统软件,而且C程序可移植性好于汇编语言,程序清晰具有模块化的特点。
本题正确答案为C。
4.C语言源程序的最小单位是【】。
A)程序行
B)语句
C)函数
D)字符
分析:
程序行、语句、函数都是由字符构成的,字符是C语言的最小单位。
本题正确答案为D。
5.以下四项中属于C语言关键字的是【】。
A)CHAR
B)define
C)unsigned
D)return
分析:
C语言有32个关键字(或称保留字),它们都有特定的含意,并且由小写字母组成,所以选项A是错的,选项B不是保留字,选项D是return的错误拼写。
本题正确答案为C。
6.十进制数2403转换成十六进制数为【】。
A)963
B)369
C)953
D)359
分析:
十进制数化成十六进制数的方法是:
不断除以16,商0为止,倒取余数。
本题正确答案为A。
7.二进制数00110101转换成八进制数是【】。
A)055
B)065
C)056
D)152
分析:
二进制数化成八进制数的方法是:
从右向左划分,将每3位二进制数书写成1位八进制数。
本题正确答案为B。
8.将二进制数1011011.011转换成十进制数是【】。
A)91.75
B)91.375
C)91.125
D)91.25
分析:
二进制数化成十进制数的方法是:
各数字乘以权重再相加,题中整数部分为:
(1011011)2=1×26+1×24+1×23+1×21+1×20=64+16+8+2+1=91,小数部分为:
(0.011)2=0×2-1+1×2-2+1×2-3=0.25+0.125=0.375,再将两者合在一起得91.375。
本题正确答案为B。
9.计算机内部运算使用的数是【】。
A)十进制数
B)十六进制数
C)二进制数
D)八进制数
分析:
在实际生活中找不到具有十个稳定状态的物理元件,而具有两种稳定状态的元件到处可见,如一个开关具有通电和断电两个稳定状态,计算机内部的元件正是以"1"代表通电,以"0"代表断电的,所以计算机内部运算使用的数是二进制数,至于八进制数和十六进制数是对二进制数的人为缩写。
本题正确答案为C。
10.一个字长的二进制位数是【】。
A)2个BYTE,即16个bit
B)3个BYTE,即24个bit
C)4个BYTE,即32个bit
D)随计算机系统不同而不同
分析:
一个二进制位也称做1bit,八个二进制位称做1个BYTE,即所说的一个字节,BYTE和bit有固定的换算关系,但是计算机中的字长WORD和字节BYTE没有固定的换算关系,字长WORD是随CPU型号而异的。
本题正确答案为D。
11.在C语言系统中,假设int类型数据占2个字节,则double、long、unsignedint、char类型数据所占字节数分别多少【】。
A)8,2,4,1
B)2,8,4,1
C)4,2,8,1
D)8,4,2,1
分析:
由上题知CPU字长决定了分配给各种类型变量多少个字节,当int类型占2个字节时,double、long、unsignedint、char型所占的字节分别为8、4、2、1个字节。
本题正确答案为D。
12.下面程序段执行结果是【】。
inti=5,k;
k=(++i)+(++i)+(i++);
printf("%d,%d",k,i);
A)24,8
B)21,8
C)21,7
D)24,7
分析:
k=(++i)+(++i)+(i++)表达式中,"++"号在i前面的有两个,所以在计算k之前,i要先增两次,即i变为7,然后再将3个7相加,使k得21,表达式中"++"号在i后面的有1个,所以得出k的值以后i又增1次变为8。
本题正确答案为B。
13.下面程序段执行结果是【】。
inti=5;
printf("%d,%d,%d",i,(++i)+(++i)+(i++),i);
A)8,20,5
B)8,21,5
C)5,20,8
D)5,21,8
分析:
此题不能看作将12题中的k=(++i)+(++i)+(i++)代入printf函数,因为函数处理参数的顺序是从右向左,所以(++i)+(++i)+(i++)表达式的值不再是求7+7+7,而是为8+7+5=20。
本题正确答案为A。
14.下面程序段的输出结果是【】。
inti=32769;
printf("%d\\n",i);
A)32769
B)32767
C)-32767
D)输出不是确定的数
分析:
int型变量表示数据的范围是-32768~+32767,赋值时比-32768小或比+32767大,都会发生溢出,溢出后存放的数值是:
正向溢出时,为该数减去模65536,负向溢出时,为该数加上模65536,所以本题输出为32769-65536=-32767。
本题正确答案为C。
15.下面的程序运行后输出为【】。
main()
{inta=-32769;
ptintf("%8U\\n",a);
}
A)32769
B)%8U
C)32767
D)–32767
分析:
格式字符必须小写,题中的"%8U"不会当作格式控制符,而是原样输出,变量a将没有对应的格式说明,也不会送出。
本题正确答案为B。
二、填空题
1.若以下程序的输出结果是13,请填空。
main()
{intx=016;
printf("%d\\n",【1】);}
分析:
在C语言中以0开头的数字是八进制数,016相当于十进制数14,执行printf语句时,输出项应为x的值减1。
本题正确答案为【1】--x或x-=1。
2.下面程序段的输出结果是【2】。
intk=10;
floata=3.5,b=6.7,c;
c=a+k%3*(int)(a+b)%2/4;
分析:
本题考查运算符的优先级概念,式中要先算(a+b)的值,再算强制类型变换,*、/、%是同级的要从左到右计算,最后算加法和赋值。
本题正确答案为【2】3.500000
3.若执行下面程序段后的输出为:
3,4,5,请填空。
inta,b=3,c=5;
a=b 【3】: c++; printf("%d,%d,%d",a,b,c); 分析: 本题考查条件运算符和增量运算符的概念,题中b 本题正确答案为【3】b++。 4.C语言中的运算符,优先级最低的是【4】。 分析: 与其它高级语言相比,在C语言中赋值号并不是优先级最低的,C语言中优先级最低的运算符是逗号运算符。 本题正确答案为【4】逗号运算符。 5.若下面程序的输出结果是4,请填空。 main() {inti,j,k; k=0;i=j=-2; k+=-i--【5】; printf("%d\\n",k); } 分析在C语言中当3个加号或3个减号连在一起时,中间的符号归属左边的变量,即-i---j相当于-(i--)-j。 本题正确答案为【5】-j。 第2章习题 一、单项选择题 1.下面叙述不正确的是【】。 A)C语句末尾必须有分号 B)C语言中无论是整数还是实数都能准确的表示 C)运算符“%”只能用于整数运算 D)乘除运算符优先级高于加减运算符 2.以下叙述正确的是【】。 A)C语句前面必须有行号 B)C程序中每行只能写一条语句 C)C语言本身没有输入输出语句 D)注释必须跟在一行语句的后面 3.复合语句应用【】括起来。 A)小括号 B)方括号 C)大括号 D)尖括号 4.将二进制数101101101111转换成十六进制数是【】。 A)5557 B)B6F C)7555 D)F6B 5.将十进制数0.625转换成二进制数是【】。 A)0.111 B)0.101 C)0.5 D)0.A 6.C语言语句一行写不下时,可以【】。 A)用逗号换行 B)用分号换行 C)用回车换行 D)在任意一空格处换行 7.下列语句不正确是【】。 A)inta; B)inta;intb; C)inta,b,c; D)intab; 8.下面程序的输出是【】。 (“□”表示一个空格) inta=3366; printf("|%-08d|",a); A)|-0003366| B)|00003366| C)|3366□□□□| D)输出格式非法 9.若有说明语句: inta;floatb;,以下输入语句正确的是【】。 A)scanf("%f%f",&a,&b); B)scanf("%f%d",&a,&b); C)scanf("%d,%f",&a,&b); D)scanf("%6.2f%6.2f",&a,&b); 10.以下程序的输出结果是【】。 main() {intx=11,y=11; printf("%d%d\\n",x--,--y); } A)11,11 B)10,10 C)10,11 D)11,10 11.将八进制数307转换成二进制数是【】。 A)100110011 B)11000111 C)1100000111 D)111000011 12.执行下面程序段,给x、y赋值时,不能作为数据分隔符的是【】。 intx,y; scanf("%d%d",&x,&y); A)空格 B)Tab键 C)回车 D)逗号 13.下面合法的语句是【】。 A)inta=8,b; b=++a++; printf("%d,%d",a,b++); B)inta; printf("\\"%d\\"",scanf("%d",&a)); C)chara; scanf("%c",&a); charb=scanf("b=%c",&b); D)charc=getchar(); putchar((int)c); 14.执行下面程序时,欲将25和2.5分别赋给a和b,正确的输入方法是【】。 inta; floatb; scanf("a=%d,b=%f",&a,&b); A)25□2.5 B)25,2.5 C)a=25,b=5.5 D)a=25□b=2.5 15.与数学公式a·b x·y不等价的语句是【】。 A)a*b/x*y B)a*b/x/y C)a*b/(x*y) D)a/(x*y)*b 二、填空题 1.表达式5%(-3)的值是【1】,表达式-5%(-3)的值是【2】。 2.在C语言中,格式输入库函数为【3】,格式输出库函数为【4】。 3.下面程序的输出结果是【5】。 intx=-32769; printf("%d",x); 4.执行下列程序的输出结果是【6】。 main() { floata=1,b; b=++a*++a; printf("%f\\n",b); } 5.执行下列程序的输出结果是【7】。 main() { intx=5,y; y=++x*++x; printf("y=%d\\n",y); } 参考答案 一、选择题 (1)B (2)C (3)C (4)B (5)B (6)D (7)D (8)C (9)C (10)D (11)B (12)D (13)D (14)C (15)A 二、填空题【1】2 【5】32767 【2】-2 【6】6.000000 【3】scanf 【7】49 【4】printf 第三章习题 一、单项选择题 1.下面不属于C语言的数据类型是【】。 A)整型 B)实型 C)逻辑型 D)双精度实型 分析: 和其它高级语言相比,C语言中没有逻辑型数据,也没有逻辑型变量。 本题正确答案为C。 2.C语言中,下列属于构造类型的是【】。 A)整型 B)实型 C)指针类型 D)结构体类型 分析: C语言中构造类型的数据有三种: 数组、结构体和共用体,数组是同类型数据的集合,结构体是不同类型的数据集合。 本题正确答案为D。 3.下列字符串不符合标识符规定的是【】。 A)SUM B)sum C)3cd D)end 分析: 标识符规定只能由26个英文字母(大小写均可),数字0~9和下划线组成,且不能以数字开头,题中的3cd不符合规定。 本题正确答案为C。 4.下面能正确表示八进制数的是【】。 A)0x16 B)029 C)-114 D)033 分析: 选项A)以0x开头是十六进制数,选项B)虽然是0开头,但出现了数字9,选项C)是十进制数。 本题正确答案为D。 5.下面四个选项中,是合法实数的选项是【】。 A)2e-4.2 B)06e3 C)0.2e-.5 D)-e5 分析: 实数有两种表示形式: 小数形式和指数形式,小数形式必须有小数点,指数形式中,字母e之前必须有数字,e之后必须是整数。 选项A)中的"2e-4.2",选项C)中的"",选项D)中的"-e5"均是不合法的。 本题正确答案为B。 6.C语言中,字符型数据在内存中存储形式是【】。 A)原码 B)反码 C)补码 D)ASCII码 分析: C语言中int型数据是以补码形式存放的,字符型数据是以ASCII码形式存放的。 本题正确答案为D。 7.下列正确的字符型常量是【】。 A)"a" B)′\\\\′ C)"\\r" D)277 分析: 字符常量的定义是用单引号括起来的一个字符,A和C的定界符不对,D超过了char型数据的表示范围,′\\\\′是转义字符。 本题正确答案为B。 8.若有说明语句charch1=′\\x41′;则ch1【】。 A)包含4个字符 B)包含3个字符 C)包含2个字符 D)包含1个字符 分析: "\\x41"中的"41"是十六进制数,即十进制的65,题中ch1存放的65是字母"A"的ASCII码。 本题正确答案为D。 9.下列程序段输出的字符串长度为【】。 printf("\\\\aaa\\′ccc\\bddd\\""); A)11 B)12 C)13 D)17 分析: \\\\、\\′、\\b和\\"为转义字符,程序输出结果为: \\aaa′ccddd"。 本题正确答案为A。 10.下列运算符中,要求运算对象必须是整数的是【】。 A)/ B)* C)% D)! 分析: 题目中"/"、"*"、"! "的运算对象既可以整数,也可以是实数,只有取余数运算符"%"要求运算对象必须是整数。 本题正确答案为C。 11.下面合法的赋值语句是【】。 A)x+y=2002; B)ch="green"; C)x=(a+b)++; D)x=y=0316; 分析: 赋值号左端不能为表达式,选项A)是错的;赋值号不能将字符串赋给某个变量,选项B)也是错的;增量运算符“++”不能用于表达式,选项C)也是错的。 本题正确答案为D。 12.已知a为int型,b为double型,c为float型,d为char型,则表达式a+b*c-d/a结果的类型为【】。 A)int型 B)float型 C)double型 D)char型 分析: 不同类型数据混合运算的转换规律是: 运算前float型数据会自动转换为double型,char型数据会自动转换为int型。 运算时int型数据和double型数据要先化为相同类型,即double型,运算结果也为double型。 本题正确答案为C。 13.执行以下程序段后的输出结果是【】。 intx=0xcde; printf("%4d,%4o,%4x\\n",x,x,x); A)3294,6336,cde B)3294,6336,xcde C)3294,06336,0xcde D)3294,6336,0cde 分析: 0xcde是十六进制数,写成二进制数形式为: 110011011110,按八进制送出时,是从右向左3位二进制数写成1位,按十六进制形式送出时,是从右向左4位二进制数写成1位。 本题正确答案为A。 14.下面的程序运行后输出为【】。 #include #include main() {inta,b; floatc; b=5;c=6;c=b+7;b=c+1; a=sqrt((double)b+c); printf("%d,%f,%d",a+6,c,b); } A)11.000000,12.000000,13.000000 B)11.000000,12.000000,13 C)11.0000000,12,13 D)11,12.000000,13 分析: C语言允许将一种类型的数据赋给另一种类型的变量,但是变量的类型并不会因为赋值而发生改变,如本题中将b+7,即12赋给float型变量c,c值应为12.000000而不是整数12,同样a=sqrt((double)b+c),赋值号右边是双精度数,但由于a是整形变量,故a的值为5。 本题正确答案为D。 15.执行以下程序后x的值为【】。 unsignedintx=65535; printf("%d\\n",x); A)65535 B)1 C)有错误 D)–1 分析: 题中将x定义成无符号整数,并且已初始化为: 111111*********1,若按%d格式输出,则最高位的1被当成了符号,111111*********1成了负数的补码,输出结果为-1。 本题正确答案为D。 二、填空题 1.下面程序段的功能是输出大写字母对应的小写字母的ASCII码,请填空。 charch; scanf("%c",&ch); ch=(ch>=′A′&&ch<=′Z′)? (【1】): ch printf("【2】\\n",ch); 分析: 题目中条件运算为判断输入字母是否为大写,当ch>=′A′&&ch<=′Z′为真时,将其转换成对应的小写字母,需ASCII码值加上32,已知题意是将大写字母对应的小写字母ASCII值输出,所以printf语句中的输出格式应为十进制格式。 本题正确答案为【1】ch+32,【2】%d。 2.下面程序段的执行结果是x=【3】,y=【4】。 inta=3,b=5,x,y; x=a+1,b+6; y=(a+1,b+6); printf("x=%d,y=%d",x,y); 分析: 此题考查逗号表达式的概念,因逗号运算符的优先级比赋值号还低,所以执行x=a+1,b+6时,x得到的是a+1的值。 本题正确答案为【3】4,【4】11。 3.下面程序执行后k的值为【5】。 inta=1,b=2,c=3,d=4,k; k=a>b? a: c>d? c: d 分析: 因题中a>b的值为假,故求解表达式k=a>b? a: c>d? c: d相当于求k=a>b? a: (c>d? c: d)。 本题正确答案为【5】4。 4.已知: inta=5;则执行a+=a-=a*a;语句后,a的值为【6】。 分析: a+=a-=a*a的运算顺序是从右向左,相当于求a+=(a-=a*a),其中小括号内的运算得a=5-5*5即a=-20,下一步再求a+=a,即a=a+a,将-20代入得a=-40。 本题正确答案为【6】-40。 5.下面程序的运行结果是x=【7】,y=【8】。 main() {floatx=4.9;inty; y=(int)x; printf("x=%f,y=%d",x,y);} 分析: 强制类型变换并不改变x的原值,x仍为4.9,而变换得到的是中间结果,此题将中间结果赋给了y,另外注意是舍弃小数部分,而不是四舍五入。 本题正确答案为【7】4.900000【8】4。 第四章习题 一、单项选择题 1.对if语句中表达式的类型,下面正确的描述是【】。 A)必须是关系表达式 B)必须是关系表达式或逻辑表达式 C)必须是关系表达式或算术表达式 D)可以是任意表达式 分析: C语言中if语句的表达式可以是任意类型,只要表达式的值非0就算作真,是0就作为假。 本题正确答案为D。 2.多重if_else语句嵌套使用时,寻找与else配套的if方法是【】。 A)缩排位置相同的if B)其上最近的if C)下面最近的if D)同行上的if 分析: 多重if_else嵌套时,else总是与它上面最近的if配对。 本题正确答案为B。 3.以下错误的if语句是【】。 A)if(x>y)z=x; B)if(x==y)z=0; C)if(x! =y)printf("%d",x)elseprintf("%d",y); D)if(x 分析: 选项C)中的第一个printf语句后面丢了分号,所以是错误的。 本题正确答案为C。 4.以下判断两个字符串相等的正确方法是【】。 A)if(str1=str2) B)if(str1==str2) C)if(strcpy(str1,str2)=0) D)if(strcmp(str1,str2)==0) 分析: 选项A)中用了赋值号,显然是错误的,选项C)中的字符串拷贝函数strcpy不能比较大小,选项B)中的"=="号也不具有串比较功能,比较两个字符串的大小应用字符串比较函数。 本题正确答案为D。 5.执行下面程序的正确结果是【】。 main() {floata=1.9; switch(a) {case0: printf("0000"); case1: printf("1111"); case2: printf("2222"); } printf("%f",a); } A)1.900000 B)111122221.900000 C)22221.90
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计 语言程序设计 习题 解答 14