C语言章节练习题参考答案.docx
- 文档编号:13917394
- 上传时间:2023-06-19
- 格式:DOCX
- 页数:56
- 大小:69.36KB
C语言章节练习题参考答案.docx
《C语言章节练习题参考答案.docx》由会员分享,可在线阅读,更多相关《C语言章节练习题参考答案.docx(56页珍藏版)》请在冰点文库上搜索。
C语言章节练习题参考答案
第1章程序设计基本概念
选择题
1.解析:
计算机语言分为低级语言、汇编语言和高级语言,C语言属于高级语言,但并不是说C语言比其他语言高级,选项A)错误;除了低级语言外,其他各种语言都必须编译成能被计算机识别的二进制数才能执行,选项B)错误;C语言出现于1972年至1973年间,并不是出现最晚的语言,选项D)错误。
2.解析:
本题考查最简单的C程序设计知识。
在做题之前一定要慎重对待题干的主要信息,本题所描述的是“3种基本结构”,而选项B),C),D)三个选项则表达的是零零散散的循环结构。
3.解析:
C语言相对其他高级语言来说,放宽了语法检查,因此程序设计自由度大,但并不是不检查语法,C语言的程序是由函数构成的。
函数不能嵌套定义,但是可以嵌套调用。
4.解析:
本题综合考查C语言的概念部分,关于C语言,我们应该了解以下必须要掌握的基础知识:
①C程序是由函数构成的。
②一个函数由两部分组成:
函数的首部和函数体。
③一个C程序总是从main函数开始执行的,而不论main函数的整个程序中的位置如何(main函数可以放在程序最开始,也可以放在程序最后,或写在一些函数之前,在另一些函数之后)。
④C程序在书写上,表现形式比较自由,一行内可以写几个语句,一个语句可以分写在几行上。
每个语句和数据定义的最后必须有一个分号。
⑤C程序本身没有输入输出语句。
输入和输出的操作是由库函数scanf和printf等函数来完成。
⑥可以用/*……*/对C语言的程序的任何部分作注释。
5.解析:
本题考查C语言的综合基础知识。
构成C程序的基本单位是函数,一个C程序总是从main函数开始执行,而不论main函数在整个程序中的位置如何。
C语言的函数定义都是互相平行、独立的,在定义函数时,一个函数内不能定义另一个函数。
C函数定义的一般格式有两种:
传统格式和现代格式。
传统格式也称K&R格式,是早期编译系统使用的格式;现代格式又称ANSI格式,是现代编译系统使用的格式。
6.解析:
C程序是由函数构成的。
一个C源程序至少包括一个main函数,也可以包含一个main函数和若干个其他函数。
因此,函数是C程序的基本单位,被调用的函数可以是系统提供的库函数,也可以是用户根据需要自己编制设计的函数。
7.解析:
一个C程序总是从main函数开始执行的,不论main函数在整个过程中的位置如何。
8.解析:
本题考查C语言的基本基础知识。
在C程序中,注释用符号“/*”开始,而以符号“*/”结束。
程序的注释可以放在程序的任何位置。
通常将注释放在程序的开始,以说明本程序的功能;或者放在程序的某个语句后面,以对此语句的功能进行说明。
无论将注释放有何处,在程序进行编译时,编译程序不会处理注释的内容,且注释内容也不会出现在目标程序中。
9.解析:
C语言是一个函数语言,C语言的主体就是一个主函数,然后有库函数和用户自定义的函数来配合主函数完成一系列的任务,所以说,C语言的基本单位是函数。
10.【命题目的】考查算法5个性质的理解程度。
【解题要点】算法是指为解决某个特定的问题而采取的确定且有限的步骤,一个算法应当具有以下几个特性:
有穷性、确定性、可行性、有零个或多个输入和有一个或多个输出。
【错解分析】C)答案是对算法可行性的解释,即算法中指定的操作,可以通过已经实现的基本运算执行有限次后实现。
11.【命题目的】考查结构化程序的基本组成的掌握情况。
【解题要点】结构化程序由顺序结构、选择结构和循环结构组成。
【错解分析】跳转分支不是结构化程序的基本结构。
填空题
1.无
2.解析:
用高级语言编写的程序称为源程序,源程序不能在计算机上直接运行,运行源程序有两种方式:
一种是通过解释程序,对源程序逐句解释执行;另一种是先让编译程序将源程序一次翻译产生目标程序(目标程序是计算机可直接执行的机器语言程序,它是一种二进制代码程序),然后执行目标程序。
第2章C程序设计的初步知识
选择题
1.解析:
本题考查C语言的数据类型。
在C语言中,没有专门的逻辑型数据类型,可以用0和1来表示逻辑值。
所以,在本题的选择答案中,不应该包括逻辑型。
2.解析:
选项A)中包含一个不合法的运算符“:
=”;选项C)应改为(int)18.5%3;选项D)可理解为两个表达式:
a+7=c+b和a=a+7,其中第一个是错的,因为C语言规定赋值号的左边只能是单个变量,不能是表达式或常量等。
因此,正确答案是选项B),它实际上相当于a=(b=c+2),进而可分解为两个表达式:
b=c+2和a=b。
3.解析:
C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线,排除选项C)和D)。
C语言中还规定标识符不能为C语言的关键字,而选项A)中void为关键字,故排除选项A)。
4.解析:
C语言规定:
取余运算符的运算对象必须是整型,复合运算符“%=”中包含%运算,它的运算对象也必须是整型。
5.解析:
选项A是一个表达式,因为缺少分号,所以不是语句;选项C)包含一个不合法的运算符“++=”;选项D)应改为a=(int)i;。
6.解析:
在C语言中,“%”运算符两侧的运算数必须是整型。
7.解析:
x+y的值为实型7.200000,经强制类型转化成整型7。
a%3的值为1,1*7的值为7,7%2值为1。
1/4的值为0,而非0.25,因而为两个整数相除的结果为整数,舍去小数部分。
与实型x相加,最终得结果为2.500000。
8.解析:
在选项A)中的语句没有一条是错误的。
选项B)和C)中有一个逗号表达式,选项B)中是x=0,y=x+1;在选项C)中是y=x+1,z=x+y;所以B)和C)中也没有错误。
选项D)中的最后一条语句是以逗号结束的,而C语言中不能用逗号作为一个语句的结束标志,每一条语句最后应该是分号,所以D)选项中的程序是错误的。
9.解析:
40000已经超过了C语言规定的短整型的范围。
要将这样的数赋值给一个长整型的变量,需要在整型常量后面加字母L。
10.解析:
逗号表达式的形式如下:
表达式1,表达式2,表达式3,......,表达式n
逗号表达式的要点:
1)逗号表达式的运算过程是从左往右逐个计算表达式。
2)逗号表达式作为一个整体,它的值为最后一个表达式(也即表达式n)的值。
3)逗号运算符的优先级别在所有运算符中最低。
11.解析:
当自加运算符做后缀表达式的时候,表达式的值不变,只有变量的值增1,所以表达式(x++*1/3)相当于(11*1/3)取整后为3。
12.解析:
在C语言中,实数有两种形式表示,即十进制数形式和指数形式,在指数形式中,e3、2.1e3.5、.e3、e等都是不合法的指数形式。
再如123e3或123E3都代表123乘以10的3次方。
注意,字母e的前面必须有数字,且e的后面必须是整数。
13.解析:
根据混合运算规则,如果有一个数据是float型或double型,则其他数据类型先转化为double型,运算的结果最终也是double型。
14.解析:
本题考查逗号表达式的用法。
C语言中逗号“,”也是一种运算符,称为逗号运算符。
其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式。
其一般形式为:
表达式1,表达式2其求值过程是分别求两个表达式的值,并以表达式2的值作为整个逗号表达式的值。
逗号表达式的一般形式可以扩展为:
表达式1,表达式2,表达式3,…,表达式n,它的值为表达式n的值。
15.解析:
字符′A′要转换成相应的ASCⅡ码值,由于运算结果要赋值给int型变量,所以对1.6进行取整运算,最后a的值应是66。
16.解析:
选项A),C),D)答案中的n没有按题目要求进行任何转换,得到的结果达不到题目的要求,选项B中,先求出n*100+0.5的值,n的第3位小数四舍五入,后面的小数忽略变成整数m,将m/100.0的值赋给n时,先转换其类型,然后再赋值给n,即达到题目要求。
17.解析:
8进制中,不可能包括8以上的数字,它的范围只在0~7之间,以0开头。
同样,十六进制是以0x开头,数字在0~9和a~f之间。
18.解析:
k=n++的意思是先将n的值赋给k,然后n的值再加1,选项A)符合题意;选项C)是先使n的值加1,然后再赋值给k;选项D)等价于k=k+(n+1)。
19.解析:
选项A)错误,因为在C语言中,各语句间可以用分号隔开,一行可以书写多个语句;选项B)错误的原因是,忽略了C语言中进行运算的数据类型必须一致的规定,因此实型变量中不允许存放整型数,存放整型数据其实是把整型转化为实型在存放。
选项C)错误的原因是由于实型变量是用有限的存储单元存储的,因此能提供的有效数字总是有限的,在有效的位以外的数将被舍去,由此可能产生一些误差。
20.解析:
C语言中规定,标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须是字母或下划线,而且标识符不能是C语言的关键字。
21.解析:
“%”是求余运算符或模运算符,“%”两侧均应为整型数据,选项A)中的x是double型数据。
22.解析:
运算符“%”的两侧都应该是整型数。
另外,本题需要掌握的知识点是:
x%=k,等价于x=x%k。
23.解析:
解答本题时,我们必须要明白“进制”数的表示方法。
按不同的进制区分,整型常数有3种表示方法:
十进制数:
如:
220,-560,45900
八进制数:
以0开始的数数字范围0~7.
如:
06,0106,05757
十六进制数:
以0X或0x开始的数数字范围0~9,a~f或A~F
如:
0X0D,0XFF,0x4e,-0x48a
另外,可在整型常数后添加一个“L”或“l”字母表示该数为长整型数,如22L,0773L,0Xae4l。
24.解析:
本题需要掌握的知识点是:
逗号表达式的求解步骤,另外,注意一下两个整数相除的结果仍为整数。
了解了知识点后,本题就可以逐步求解了:
x=2
y=x+3/2
y=2.000000+1
y=3.000000
25.解析:
本题中,“()”的优先级是最高的,“*”和“/”的优先级别相同,运算方向是从左向右。
26.解析:
选项A)中的赋值方法为Pascal语言赋值格式;C语言中赋值直接为“=”无冒号;选项D)中“x+5=y+2”赋值格式错误,赋值号左边不可以出现常量,也不可以同时出现两个变量。
选项C)应改为(float)8%3
27.【命题目的】考查++运算符的掌握情况。
【解题要点】当++运算符做后缀使用时,只有这个语句结束时候,变量才被增1。
【错解分析】由于++是后缀形式,所以先取m的值进行计算,k=-1,然后再将m加1。
【考点链接】在C语言中,++运算符和负号运算符是同优先级别,结合方向为“自右向左”。
28.【命题目的】这个题目考查的是对于强制转换类型的掌握情况。
【解题要点】强制类型转换表达式的形式如下:
(类型名)表达式,取余运算符(%)的运算对象只能是整型。
【错解分析】由于取余运算符的运算对象只能是整型,所以强制转换运算符号应该把浮点型转化为整型。
【考点链接】取余运算为负数的时候,所得结果随机器的不同而不同。
29.【命题目的】考查对于标识符的掌握情况。
【解题要点】合法的标识符是由字母、数字和下划线组成,并且第一个字符必须为字母或下划线,用户定义的标识符不能与关键字相同。
【错解分析】选项A),数字不能为第一个字母,auto为关键字;选项C)中,也是数字不能为第一个字母,else为关键字;选项D)中负号不合法。
【考点链接】C语言允许用户把预定义标识符另做它用,但这将使这些标识符失去系统规定的原意。
30.【命题目的】考查基本运算符运算对象的掌握情况。
【解题要点】取余运算符的运算对象只能是整型,所以这个k=m%2取余不合法。
【考点链接】所有的双目运算符两边运算数的类型必须一致才能进行操作,如不一致,要进行类型转换。
31.【命题目的】考查对于++和--运算对象的掌握情况。
【解题要点】按照C语言的规定,常量和表达式是不能进行++或--运算。
【错解分析】按照C语言的规定,常量是不能进行++或--运算的,所以选择D)。
【考点链接】前缀++,--和后缀++,--的区别。
填空题
1.此表达式为三目运算符,++a的值为6,b--的值为6,则整个表达式的值为++a的值,++a的值为7。
请注意前缀++,--和后缀++,--的区别。
2.【命题目的】考查对于基本运算符的掌握情况。
【解题要点】++和--做前缀使用的时候,先对变量进行增1或减1,之后进行其他的运算。
【考点链接】赋值运算符的优先级仅仅高于逗号运算符。
3.【命题目的】考查对于数据的格式化输出的掌握情况。
【解题要点】八进制的65转换为十进制的53之后减1输出。
【考点链接】0开头的是八进制整数。
第3章顺序结构
1.解析:
在C语言中,当一次输入多个数据的时候,数据之间要用间隔符,合法的间隔符可以是空格、制表符和回车符。
逗号不是合法的间隔符。
2.解析:
本题中a的值为6,b的值为8,最后s的值为8,s*=s等价于s=s*s。
3.解析:
①printf函数的浮点数缺省输出格式:
在printf函数的输出中,若无输出宽度限制,每种数据都有一个缺省的输出宽度,一般浮点数的小数位数则是6位,不管输出格式是%f或%lf皆如此。
②printf函数的浮点数宽度限制输出:
以%mf或%mlf格式输出浮点时,如果指定的宽度大于实际数据宽度,按指定宽度输出,且多余数补以空格;如果指定的宽度小于实际数据宽度,浮点数的整数部分将以实际数据(位数)输出。
小数部分按指定数输出,且对数据做四舍五入处理。
③printf的整数限宽输出:
没有宽度制的整数原数输出。
在宽度限制于数的实际位数时,宽度说明无效,按数的实际位数输出。
4.解析:
在C语言所有的运算符中,逗号运算符的优先级最低。
C语中区分大小,所以APH和aph是两个不同的变量。
赋值表达式a=b表示将b的值付给a,而b本身的值保持不变;通过键盘可以向计算机输入允许的任何类型的数据。
选项D)中当从键盘输入数据时,对于整型变量可以输入整型数值和字符,对于实型变量可以输入实型数和整型数值等。
5.解析:
本题中,程序先执行语句x=1.2;,根据赋值运算的类型转换规则,先将double型的常量1.2转换为int型,即取整为1,然后将1赋值给变量x。
接下来执行语句y=(x+3.8)/5.0;根据运算符的优先级,先计算小括号内,再计算除法,最后执行赋值运算。
小括号内的运算过程:
先将整型变量x的值1转换为double型1.0,然后与3.8进行加法运算,得到中间结果4.8。
接着进行除法运算4.8/5.0,其结果小于1.0,这里没有必要计算出精确值,因为接着进行赋值运算,赋值号左边的变量y的类型为整型,于是对这个小于1.0的中间结果进行取整,结果为0,于是变量y的值为0,d*y的值也为0。
6.解析:
在C语言中,对于不同类型的数据用不同的格式字符,其中,“%d”是按整型数据的实际长度输出,“%md”中,m为指定的输出字段的宽度,如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。
7.解析:
整型变量的输出形式有:
%d,%o,%x,%u等,%x是以十六进制无符号形式输出整数。
十六进制数同样也可以想%md一样按%mlx输出指定宽度的长整型数。
8.解析:
该题考查的是C语言中自减运算符和逗号表达式的应用。
自减运算符位于变量之前时,先使变量的值减1,再进行赋值运算。
逗号表达式的一般形式为:
表达式1,表达式2,其求解过程是:
先求解表达式1,再求解表达式2,整个逗号表达式的值是表达式2的值。
9.解析:
本题中,“%d%d%d”表示按整型数形式输入数据,输入数据时,在两个数据之间以一个或多个空格间隔,也可以用回车键或Tab键。
选项B)中不应该使用逗号。
10.解析:
scanf函数的一般格式是:
scanf(格式控制,地址表列)该格式中,地址表列中应是变量地址,而不是变量名。
11.解析:
在C语言中,自增1运算符记为“++”,其功能是使变量的值自增1。
自减1运算符记为“--”,其功能是使变量值自减1。
自增1,自减1运算符均为单目运算,都具有右结合性。
可有以下几种形式:
++ii自增1后再参与其他运算。
--ii自减1后再参与其他运算。
i++i参与运算后,i的值再自增1。
i--i参与运算后,i的值再自减1。
在理解和使用上容易出错的是i++和i--。
特别是当它们出在较复杂的表达式或语句中时,常常难于弄清,因此应仔细解析。
12.解析:
对于逗号表达式中的第一个表达式等价为a=15;第二个表达式的值为15×4=60,此时变量a的值仍未改变还是15,第三个表达式的值为b的值。
13.解析:
此题考查有关标准设备的知识。
在多数C语言版本中,stdio.h文件至少定义了四种标准设备文件,可以直接引用不必含有打开操作,包括:
标准输入文件指针stdin缺省为键盘;标准输出文件指针stdout缺省为显示器;标准错误输出文件指针stderr缺省为显示器;标准打印输出文件指针stdprn指打印机;此外,还可能包括如辅助设备等标准文件指针,且多数文件指针可以被重新定向到其他设备。
14.解析:
在使用scanf函数时,我们必须要注意以下问题:
①在用scanf函数给普通变量输入数据时,在变量名前没有写地址运算符&。
如scanf(″%d%d″,x,y);是错误的。
正确的应为scanf(″%d%d″,&x,&y);。
2)在scanf函数调用语句中,企图规定输入实型数据的小数位。
如执行以下语句:
scanf(″%6.2f″,&a);C语言规定是不允许指定输入数据的宽度的。
3)是错误不允许输入数字宽度。
用scanf函数输入数据时,必须注意要与scanf语句中的对应形式匹配。
如:
scanf(″%d,%d″,&x,&y);
若按以下形式输入数据:
24是不合法。
数据2和4之间应当有逗号。
本题选项A)中后面省略了符号&,其他选项也有省略逗号的错误,只要明白了以上解析,可以说,scanf函数的重要用法已经在我们掌握之中了。
15.解析:
本题中,x原指定为float型,进行强制类型运算后得到一个int型的中间变量,它的值等于x的整数部分,而x的类型不变,仍为float型
16.【命题目的】考查格式化输出函数的掌握情况。
【解题要点】表达式n=(k%m,k/m)实际上是将k/m的结果赋值给了n。
【错解分析】逗号表达式中最后一个表达式的值是该逗号表达式的值,所以输出结果为k/m。
17.【命题目的】考查格式化输入函数的掌握情况。
【解题要点】若在scanf的格式控制串中插入了其他字符,则在输入时要求按一一对应的位置原样输入这些字符。
【错解分析】由于scanf的格式控制串中插入了"a\\"、逗号和"b="等字符,所以输入时候应该一一对应地在对应位置上输入这些字符。
【考点链接】格式化输出也是在对应的位置上输出对应的插入的其他字符。
填空题:
1.解析:
在%与格式符之间插入一个整形数来指这输出宽度,并不影响数据的完整性,当插入的宽度小于实际的宽度时,则实际的宽度输出。
2.解析:
赋值表达式的值就是所赋值变量的值,本题中a+=8相当于a=a+8,对表达式逐步进行求解:
a+=(a=8)此时,a的值由于赋值为8,而不是0
a+=8
a=a+8
a=16
第4章选择结构
选择题:
1.解析:
该题目的关键是要搞清楚该程序执行了哪几条语句。
由于x的值等于1,所以switch结构中,程序从case1后面的语句开始执行,又因为case1后面的语句没有以break结束,所以程序要继续往下执行case2后面的语句。
所以,该程序共执行了这三条语句:
a++;a++;b++;因此,变量a和b最后的值应该为2和1。
2.解析:
该题目的关键是要搞清楚“&&”和“||”两个逻辑运算符的运算功能。
运算符“&&”和“||”是双目运算符,要求有两个运算量。
且规定逻辑与运算中,只有前面运算量的值为真时,才需要判别后面的值。
只要前面为假,就不必判别后面的值。
而逻辑或则为只要前为真,就不必判别后面的值;只有前为假,才判别后。
本题中j++值为真,不进行k++的运算,所以k的值保持不变。
3.解析:
该题目测验考生对if...elseif结构的理解,比较简单。
x的值满足x<10.0的关系,所以程序将执行y=1.0/x;语句,y的值应该等于0.5。
最后,用printf函数输出时,%f的输出格式为小数点后保留6位。
4.解析:
C语言规定的运算优先级由高到低分别是逻辑非、算术运算、逻辑或。
所以先计算!
x,值是0,然后再计算y--,由于是后缀运算符,所以y在本次运算中的值仍然是1,最后计算0||1,值为1。
5.解析:
本题考查的是三目运算符的用法,三目运算符的形式为(表达式1)?
(表达式2):
(表达式3)。
当(表达式1)的值为真时,求(表达式2)的值为整个表达式的值;如果(表达式1)的值为假,则求(表达式3)的值为整个表达式的值。
题中,表达式x>12的结果为假,所以执行的语句是x-12,最终y的值应该是0。
6.解析:
在C程序中,判断逻辑值时,用非0表示真,用0表示假。
逻辑表达式计算时,逻辑表达式值为真是用1表示的,若逻辑表达式的值为假,则用0表示。
7.解析:
此题综合考查多种运算符的使用;首先计算表达式a<=25&&b--<=2&&c的值,很容易看出b--<=2的值为假,因此表达式为假;根据三目运算的特点,由于前面的表达式为假,应执行printf(“###a=%d,b=%d,c=%d\n”,a,b,c),应注意a的值依然为25,b的值经过b--运算后改变为13,而c的值仍为19。
8.解析:
本题考查if语句中的一种表达方式,即:
if…elseif…。
该表达式的语句是:
if(表达式1)语句1
elseif(表达式2)语句2
elseif(表达式3)语句3
else
语句4
……本题执行elsey=1.0,并且以“%f”输出。
9.解析:
选项D)为两条语句。
10.解析:
本题考查C语言的逻辑表达式及逻辑或(“||”)运算符的用法。
“||”表示或的意思,“|”是按位或的意思,“&&”是并且的意思,C语言中没有“or”。
11.解析:
if语句嵌套使用时,应当注意if与else的配对关系,else总是与它上面的最近的if配对。
因此,本题中先判断(a
12.解析:
该题考查逻辑与“&&”和逻辑或“||”以及逻辑非“!
”符号的用法。
选项A)即3&&4为真,选项B)即3<=4为真,选项C)是一个逻辑或与逻辑与的混合运算,只要执行了逻辑或左半部分,程序将直接停止执行逻辑或右半部分程序,因为x的值为真,此时选项C)变为1&&-1为真。
选项D)不用计算,括号内逻辑或右边的值为1,因而括号内的值为1,再进行逻辑非运算得0。
13.解析:
条件运算符要求有三个操作对象,称三目(元)运算符,它是C语言中惟一的一个三目运算符。
条件表达式的一般形式为:
表达式1?
表达式2:
表达式3其求解顺序是:
先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值。
若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值。
并且注意++、--的用法。
14.解析:
本题考查的是逻辑与“&&”,逻辑或“||”,逻辑非“!
”,表达式的应用。
逻辑与运算符“&&”,当参与运算的两个量都为真时,结果才是真,否则为假;逻辑或运算符“||”,当参与运算的两个量有一个为真时,结果是真,否则为假;逻辑非运算符“!
”,当参与运算的量为真时,结果才是假,否则为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 章节 练习题 参考答案