C语言章节练习题参考答案_第1页
C语言章节练习题参考答案_第2页
C语言章节练习题参考答案_第3页
C语言章节练习题参考答案_第4页
C语言章节练习题参考答案_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、 程序设计基本概念 选择题解析: 计算机语言分为低级语言、汇编语言和高级语言,C语言属于高级语言,但并不是说C语言比其他语言高级,选项A)错误;除了低级语言外,其他各种语言都必须编译成能被计算机识别的二进制数才能执行,选项B)错误;C语言出现于1972年至1973年间,并不是出现最晚的语言,选项D)错误。解析: 本题考查最简单的C程序设计知识。在做题之前一定要慎重对待题干的主要信息,本题所描述的是“3种基本结构”,而选项B),C),D)三个选项则表达的是零零散散的循环结构。解析: C语言相对其他高级语言来说,放宽了语法检查,因此程序设计自由度大,但并不是不检查语法,C语言的程序是由函数构成的。

2、函数不能嵌套定义,但是可以嵌套调用。解析: 本题综合考查C语言的概念部分,关于C语言,我们应该了解以下必须要掌握的基础知识:C程序是由函数构成的。一个函数由两部分组成:函数的首部和函数体。一个C程序总是从main函数开始执行的,而不论main函数的整个程序中的位置如何(main函数可以放在程序最开始,也可以放在程序最后,或写在一些函数之前,在另一些函数之后)。C程序在书写上,表现形式比较自由,一行内可以写几个语句,一个语句可以分写在几行上。每个语句和数据定义的最后必须有一个分号。C程序本身没有输入输出语句。输入和输出的操作是由库函数scanf和printf等函数来完成。可以用/*/对C语言的程

3、序的任何部分作注释。解析: 本题考查C语言的综合基础知识。构成C程序的基本单位是函数,一个C程序总是从main函数开始执行,而不论main函数在整个程序中的位置如何。C语言的函数定义都是互相平行、独立的,在定义函数时,一个函数内不能定义另一个函数。C函数定义的一般格式有两种:传统格式和现代格式。传统格式也称K&R格式,是早期编译系统使用的格式;现代格式又称ANSI格式,是现代编译系统使用的格式。解析: C程序是由函数构成的。一个C源程序至少包括一个main函数,也可以包含一个main函数和若干个其他函数。因此,函数是C程序的基本单位,被调用的函数可以是系统提供的库函数,也可以是用户根据需要自己

4、编制设计的函数。解析: 一个C程序总是从main函数开始执行的,不论main函数在整个过程中的位置如何。解析: 本题考查C语言的基本基础知识。在C程序中,注释用符号“/*”开始,而以符号“*/”结束。程序的注释可以放在程序的任何位置。通常将注释放在程序的开始,以说明本程序的功能;或者放在程序的某个语句后面,以对此语句的功能进行说明。无论将注释放有何处,在程序进行编译时,编译程序不会处理注释的内容,且注释内容也不会出现在目标程序中。解析: C语言是一个函数语言,C语言的主体就是一个主函数,然后有库函数和用户自定义的函数来配合主函数完成一系列的任务,所以说,C语言的基本单位是函数。【命题目的】考查

5、算法5个性质的理解程度。【解题要点】算法是指为解决某个特定的问题而采取的确定且有限的步骤,一个算法应当具有以下几个特性:有穷性、确定性、可行性、有零个或多个输入和有一个或多个输出。【错解分析】C)答案是对算法可行性的解释,即算法中指定的操作,可以通过已经实现的基本运算执行有限次后实现。【命题目的】考查结构化程序的基本组成的掌握情况。【解题要点】结构化程序由顺序结构、选择结构和循环结构组成。【错解分析】跳转分支不是结构化程序的基本结构。填空题无解析: 用高级语言编写的程序称为源程序,源程序不能在计算机上直接运行,运行源程序有两种方式:一种是通过解释程序,对源程序逐句解释执行;另一种是先让编译程序

6、将源程序一次翻译产生目标程序(目标程序是计算机可直接执行的机器语言程序,它是一种二进制代码程序),然后执行目标程序。C程序设计的初步知识选择题解析: 本题考查C语言的数据类型。在C语言中,没有专门的逻辑型数据类型,可以用0和1来表示逻辑值。所以,在本题的选择答案中,不应该包括逻辑型。解析: 选项A)中包含一个不合法的运算符“:=”;选项C)应改为(int)18.5%3;选项D)可理解为两个表达式:a+7=c+b和a=a+7,其中第一个是错的,因为C语言规定赋值号的左边只能是单个变量,不能是表达式或常量等。因此,正确答案是选项B),它实际上相当于a=(b=c+2),进而可分解为两个表达式:b=c

7、+2和a=b。解析: C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线,排除选项C)和D)。C语言中还规定标识符不能为C语言的关键字,而选项A)中void为关键字,故排除选项A)。解析: C语言规定:取余运算符的运算对象必须是整型,复合运算符“%=”中包含%运算,它的运算对象也必须是整型。解析: 选项A是一个表达式,因为缺少分号,所以不是语句;选项C)包含一个不合法的运算符“+=”;选项D)应改为a=(int)i;。解析: 在C语言中,“%”运算符两侧的运算数必须是整型。解析: x+y的值为实型7.200000,经强制类型转化成整型7。a%3的值为1,1*7

8、的值为7,7%2值为1。1/4的值为0,而非0.25,因而为两个整数相除的结果为整数,舍去小数部分。与实型x相加,最终得结果为2.500000。解析: 在选项A)中的语句没有一条是错误的。选项B)和C)中有一个逗号表达式,选项B)中是x=0,y=x+1;在选项C)中是y=x+1,z=x+y;所以B)和C)中也没有错误。选项D)中的最后一条语句是以逗号结束的,而C语言中不能用逗号作为一个语句的结束标志,每一条语句最后应该是分号,所以D)选项中的程序是错误的。解析: 40000已经超过了C语言规定的短整型的范围。要将这样的数赋值给一个长整型的变量,需要在整型常量后面加字母L。解析: 逗号表达式的形

9、式如下:表达式1,表达式2,表达式3,. ,表达式n逗号表达式的要点:1)逗号表达式的运算过程是从左往右逐个计算表达式。2)逗号表达式作为一个整体,它的值为最后一个表达式(也即表达式n)的值。3)逗号运算符的优先级别在所有运算符中最低。解析: 当自加运算符做后缀表达式的时候,表达式的值不变,只有变量的值增1,所以表达式(x+*1/3)相当于(11*1/3)取整后为3。解析: 在C语言中,实数有两种形式表示,即十进制数形式和指数形式,在指数形式中,e3、.e3、e等都是不合法的指数形式。再如123e3或123E3都代表123乘以10的3次方。注意,字母e的前面必须有数字,且e的后面必须是整数。解

10、析: 根据混合运算规则,如果有一个数据是float型或double型,则其他数据类型先转化为double型,运算的结果最终也是double型。解析: 本题考查逗号表达式的用法。C语言中逗号“,”也是一种运算符,称为逗号运算符。其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式。其一般形式为:表达式1, 表达式2 其求值过程是分别求两个表达式的值,并以表达式2的值作为整个逗号表达式的值。逗号表达式的一般形式可以扩展为:表达式1,表达式2,表达式3,表达式n,它的值为表达式n的值。解析: 字符A要转换成相应的ASC码值,由于运算结果要赋值给int型变量,所以对1.6进行取整运算,最后a的值

11、应是66。解析: 选项A),C),D)答案中的n没有按题目要求进行任何转换,得到的结果达不到题目的要求,选项B中,先求出n*100+0.5的值,n的第3位小数四舍五入,后面的小数忽略变成整数m,将m/100.0的值赋给n时,先转换其类型,然后再赋值给n,即达到题目要求。解析: 8进制中,不可能包括8以上的数字,它的范围只在07之间,以0开头。同样,十六进制是以0 x开头,数字在09和af之间。解析: k=n+的意思是先将n的值赋给k,然后n的值再加1,选项A)符合题意;选项C)是先使n的值加1,然后再赋值给k;选项D)等价于k=k+(n+1)。解析: 选项A)错误,因为在C语言中,各语句间可以

12、用分号隔开,一行可以书写多个语句;选项B)错误的原因是,忽略了C语言中进行运算的数据类型必须一致的规定,因此实型变量中不允许存放整型数,存放整型数据其实是把整型转化为实型在存放。选项C)错误的原因是由于实型变量是用有限的存储单元存储的,因此能提供的有效数字总是有限的,在有效的位以外的数将被舍去,由此可能产生一些误差。解析: C语言中规定,标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须是字母或下划线,而且标识符不能是C语言的关键字。解析: “%”是求余运算符或模运算符,“%”两侧均应为整型数据,选项A)中的x是double型数据。解析: 运算符“%”的两侧都应该是整型数。另外,本题

13、需要掌握的知识点是:x%=k,等价于x=x%k。解析: 解答本题时,我们必须要明白“进制”数的表示方法。按不同的进制区分,整型常数有3种表示方法:十进制数:如:220,-560,45900八进制数:以0开始的数数字范围07.如:06,0106,05757十六进制数:以0X或0 x开始的数数字范围09,af或AF如:0X0D,0XFF,0 x4e,-0 x48a另外,可在整型常数后添加一个“L”或“l”字母表示该数为长整型数,如22L,0773L,0Xae4l。解析: 本题需要掌握的知识点是:逗号表达式的求解步骤,另外,注意一下两个整数相除的结果仍为整数。了解了知识点后,本题就可以逐步求解了:x

14、=2y=x+3/2y=2.000000+1y=3.000000解析: 本题中,“()”的优先级是最高的,“*”和“/”的优先级别相同,运算方向是从左向右。解析: 选项A)中的赋值方法为Pascal语言赋值格式;C语言中赋值直接为“=”无冒号;选项D)中“x+5y+2”赋值格式错误,赋值号左边不可以出现常量,也不可以同时出现两个变量。选项C)应改为(float)8%3【命题目的】考查+运算符的掌握情况。【解题要点】当+运算符做后缀使用时,只有这个语句结束时候,变量才被增1。【错解分析】由于+是后缀形式,所以先取m的值进行计算,k=-1,然后再将m加1。【考点链接】在C语言中,+运算符和负号运算符

15、是同优先级别,结合方向为“自右向左”。【命题目的】这个题目考查的是对于强制转换类型的掌握情况。【解题要点】强制类型转换表达式的形式如下:(类型名)表达式,取余运算符(%)的运算对象只能是整型。【错解分析】由于取余运算符的运算对象只能是整型,所以强制转换运算符号应该把浮点型转化为整型。【考点链接】取余运算为负数的时候,所得结果随机器的不同而不同。【命题目的】考查对于标识符的掌握情况。【解题要点】合法的标识符是由字母、数字和下划线组成,并且第一个字符必须为字母或下划线,用户定义的标识符不能与关键字相同。【错解分析】选项A),数字不能为第一个字母,auto为关键字;选项C)中,也是数字不能为第一个字

16、母,else为关键字;选项D)中负号不合法。【考点链接】C语言允许用户把预定义标识符另做它用,但这将使这些标识符失去系统规定的原意。【命题目的】考查基本运算符运算对象的掌握情况。【解题要点】取余运算符的运算对象只能是整型,所以这个k=m%2取余不合法。【考点链接】所有的双目运算符两边运算数的类型必须一致才能进行操作,如不一致,要进行类型转换。【命题目的】考查对于+和-运算对象的掌握情况 。【解题要点】按照C语言的规定,常量和表达式是不能进行+或-运算。【错解分析】按照C语言的规定,常量是不能进行+或-运算的,所以选择D)。【考点链接】前缀+,-和后缀+,-的区别。填空题此表达式为三目运算符,a

17、的值为6,b的值为6,则整个表达式的值为+a的值,a的值为7。请注意前缀,-和后缀,-的区别。【命题目的】考查对于基本运算符的掌握情况。【解题要点】+和-做前缀使用的时候,先对变量进行增1或减1,之后进行其他的运算。【考点链接】赋值运算符的优先级仅仅高于逗号运算符。【命题目的】考查对于数据的格式化输出的掌握情况。【解题要点】八进制的65转换为十进制的53之后减1输出。【考点链接】0开头的是八进制整数。顺序结构解析: 在C语言中,当一次输入多个数据的时候,数据之间要用间隔符,合法的间隔符可以是空格、制表符和回车符。逗号不是合法的间隔符。解析: 本题中a的值为6,b的值为8,最后s的值为8,s*=

18、s等价于ss*s。解析: printf函数的浮点数缺省输出格式:在printf函数的输出中,若无输出宽度限制,每种数据都有一个缺省的输出宽度,一般浮点数的小数位数则是6位,不管输出格式是%f或%lf皆如此。printf函数的浮点数宽度限制输出:以%mf或%mlf格式输出浮点时,如果指定的宽度大于实际数据宽度,按指定宽度输出,且多余数补以空格;如果指定的宽度小于实际数据宽度,浮点数的整数部分将以实际数据(位数)输出。小数部分按指定数输出,且对数据做四舍五入处理。printf的整数限宽输出:没有宽度制的整数原数输出。在宽度限制于数的实际位数时,宽度说明无效,按数的实际位数输出。解析: 在C语言所有

19、的运算符中,逗号运算符的优先级最低。C语中区分大小,所以APH和aph是两个不同的变量。赋值表达式a=b表示将b的值付给a,而b本身的值保持不变;通过键盘可以向计算机输入允许的任何类型的数据。选项D)中当从键盘输入数据时,对于整型变量可以输入整型数值和字符,对于实型变量可以输入实型数和整型数值等。解析: 本题中,程序先执行语句 x=1.2;,根据赋值运算的类型转换规则,先将double型的常量1.2转换为int型,即取整为1,然后将1赋值给变量x。接下来执行语句y=(x+3.8)/5.0;根据运算符的优先级,先计算小括号内,再计算除法,最后执行赋值运算。小括号内的运算过程:先将整型变量x的值1

20、转换为double型1.0,然后与3.8进行加法运算,得到中间结果4.8。接着进行除法运算4.8/5.0,其结果小于1.0,这里没有必要计算出精确值,因为接着进行赋值运算,赋值号左边的变量y的类型为整型,于是对这个小于1.0的中间结果进行取整,结果为0,于是变量y的值为0,d*y的值也为0。解析: 在C语言中,对于不同类型的数据用不同的格式字符,其中,“%d”是按整型数据的实际长度输出,“%md”中,m为指定的输出字段的宽度,如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。解析: 整型变量的输出形式有:%d,%o,%x,%u等,%x是以十六进制无符号形式输出整数。十六进制数同

21、样也可以想%md一样按%mlx输出指定宽度的长整型数。解析: 该题考查的是C语言中自减运算符和逗号表达式的应用。自减运算符位于变量之前时,先使变量的值减1,再进行赋值运算。逗号表达式的一般形式为:表达式1,表达式2,其求解过程是:先求解表达式1,再求解表达式2,整个逗号表达式的值是表达式2的值。解析: 本题中,“%d %d %d”表示按整型数形式输入数据,输入数据时,在两个数据之间以一个或多个空格间隔,也可以用回车键或Tab键。选项B)中不应该使用逗号。解析: scanf函数的一般格式是:scanf(格式控制,地址表列)该格式中,地址表列中应是变量地址,而不是变量名。解析: 在C语言中,自增1

22、运算符记为“+”,其功能是使变量的值自增1。自减1运算符记为“-”,其功能是使变量值自减1。自增1,自减1运算符均为单目运算,都具有右结合性。可有以下几种形式:+i i 自增1后再参与其他运算。-i i 自减1后再参与其他运算。i+ i 参与运算后,i的值再自增1。i- i 参与运算后,i的值再自减1。在理解和使用上容易出错的是i+和i-。 特别是当它们出在较复杂的表达式或语句中时,常常难于弄清,因此应仔细解析。解析: 对于逗号表达式中的第一个表达式等价为a=15;第二个表达式的值为154=60,此时变量a的值仍未改变还是15,第三个表达式的值为b的值。解析: 此题考查有关标准设备的知识。在多

23、数C语言版本中,stdio.h文件至少定义了四种标准设备文件,可以直接引用不必含有打开操作,包括:标准输入文件指针 stdin缺省为键盘;标准输出文件指针 stdout缺省为显示器;标准错误输出文件指针 stderr缺省为显示器;标准打印输出文件指针 stdprn指打印机;此外,还可能包括如辅助设备等标准文件指针,且多数文件指针可以被重新定向到其他设备。解析: 在使用scanf函数时,我们必须要注意以下问题:在用scanf函数给普通变量输入数据时,在变量名前没有写地址运算符&。如scanf(dd, x, y);是错误的。正确的应为scanf(dd, &x, &y);。2)在scanf函数调用语

24、句中,企图规定输入实型数据的小数位。如执行以下语句:scanf(6.2f, &a);C语言规定是不允许指定输入数据的宽度的。3)是错误不允许输入数字宽度。用scanf函数输入数据时,必须注意要与scanf语句中的对应形式匹配。如:scanf(d,d,&x, &y);若按以下形式输入数据:2 4是不合法。数据2和4之间应当有逗号。本题选项A)中后面省略了符号&,其他选项也有省略逗号的错误,只要明白了以上解析,可以说,scanf函数的重要用法已经在我们掌握之中了。解析: 本题中,x原指定为float型,进行强制类型运算后得到一个int型的中间变量,它的值等于x的整数部分,而x的类型不变,仍为flo

25、at型【命题目的】考查格式化输出函数的掌握情况。【解题要点】表达式n=(k%m,k/m)实际上是将k/m的结果赋值给了n。【错解分析】逗号表达式中最后一个表达式的值是该逗号表达式的值,所以输出结果为k/m。【命题目的】考查格式化输入函数的掌握情况。【解题要点】若在scanf的格式控制串中插入了其他字符,则在输入时要求按一一对应的位置原样输入这些字符。【错解分析】由于scanf的格式控制串中插入了a、逗号和b=等字符,所以输入时候应该一一对应地在对应位置上输入这些字符。【考点链接】格式化输出也是在对应的位置上输出对应的插入的其他字符。填空题:解析: 在%与格式符之间插入一个整形数来指这输出宽度,

26、并不影响数据的完整性,当插入的宽度小于实际的宽度时,则实际的宽度输出。解析: 赋值表达式的值就是所赋值变量的值,本题中a+=8相当于a=a+8,对表达式逐步进行求解:a+=(a=8)此时,a的值由于赋值为8,而不是0a+=8a=a+8a=16选择结构选择题:解析: 该题目的关键是要搞清楚该程序执行了哪几条语句。由于x的值等于1,所以switch结构中,程序从case 1后面的语句开始执行,又因为case 1后面的语句没有以break结束,所以程序要继续往下执行case 2后面的语句。所以,该程序共执行了这三条语句:a+;a+;b+;因此,变量a和b最后的值应该为2和1。解析: 该题目的关键是要

27、搞清楚“&”和“|”两个逻辑运算符的运算功能。运算符“&”和“|”是双目运算符,要求有两个运算量。且规定逻辑与运算中,只有前面运算量的值为真时,才需要判别后面的值。只要前面为假,就不必判别后面的值。而逻辑或则为只要前为真,就不必判别后面的值;只有前为假,才判别后。本题中j+值为真,不进行k+的运算,所以k的值保持不变。解析: 该题目测验考生对if.else if结构的理解,比较简单。x的值满足x12的结果为假,所以执行的语句是x-12,最终y的值应该是0。解析: 在C程序中,判断逻辑值时,用非0表示真,用0表示假。逻辑表达式计算时,逻辑表达式值为真是用1表示的,若逻辑表达式的值为假,则用0表示

28、。解析: 此题综合考查多种运算符的使用;首先计算表达式a=25 &b-=2 &c的值,很容易看出b-=2的值为假,因此表达式为假;根据三目运算的特点,由于前面的表达式为假,应执行printf(“#a=%d,b=%d,c=%dn”,a,b,c),应注意a的值依然为25,b的值经过b-运算后改变为13,而c的值仍为19。解析: 本题考查if语句中的一种表达方式,即:ifelse if。该表达式的语句是:if(表达式1)语句1else if(表达式2)语句2else if(表达式3)语句3else语句4本题执行else y=1.0,并且以“%f”输出。解析: 选项D)为两条语句。解析: 本题考查C语

29、言的逻辑表达式及逻辑或(“|”)运算符的用法。“|”表示或的意思,“|”是按位或的意思,“&”是并且的意思,C语言中没有“or”。解析: if语句嵌套使用时,应当注意if 与else的配对关系,else总是与它上面的最近的if配对。因此,本题中先判断(ab),表达式值为0,则不执行下面的if语句,直接跳到printf语句中(c的值不变)。解析: 该题考查逻辑与“&”和逻辑或“|”以及逻辑非“!”符号的用法。选项A)即3&4为真,选项B)即3=4为真,选项C)是一个逻辑或与逻辑与的混合运算,只要执行了逻辑或左半部分,程序将直接停止执行逻辑或右半部分程序,因为x的值为真,此时选项C)变为1&-1为

30、真。选项D)不用计算,括号内逻辑或右边的值为1,因而括号内的值为1,再进行逻辑非运算得0。解析: 条件运算符要求有三个操作对象,称三目(元)运算符,它是C语言中惟一的一个三目运算符。条件表达式的一般形式为:表达式1?表达式2:表达式3其求解顺序是:先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值。若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值。并且注意+、-的用法。解析: 本题考查的是逻辑与“&”,逻辑或“|”,逻辑非“! ”,表达式的应用。逻辑与运算符“&”,当参与运算的两个量都为真时,结果才是真,否则为假;逻辑或运算符“|

31、”,当参与运算的两个量有一个为真时,结果是真,否则为假;逻辑非运算符“! ”,当参与运算的量为真时,结果才是假,否则为真。解析: 本题考查逻辑与运算的运算规则。其规则是:当运算符前后两个条件表达式都满足时,其最终结果才为真。当发现第一个表达式的值为假后,计算机将不再执行后面表达式的运算。本题中,由于前一个表达式的值为“假”,所以,后面的表达式不再进行运算,因而n的值保持不变,仍为2。解析: 逻辑或表达式是先执行左边,再执行右边语句。如果左边等式为真,则不执行右边语句,本题中+x成立,不执行+y语句,所以,y的值不变。解析: 本题考查简单的ifelse语句。先执行条件if(ab),显然不成立,则

32、执行else语句。解析: 解答本题时,先判断if语句,因为a=b+c不成立,则执行else语句。【命题目的】考查逻辑运算符的掌握情况。【解题要点】&,|在某种情况下会实行“短路规则”,即当逻辑与前面一个表达式的值为假的时候,后面一个表达式就不需要计算,这个逻辑表达式一定为假;当逻辑或前面一个表达式为真的时候,后面一个表达式就不需要计算,这个逻辑或表达式一定为真。【错解分析】选项A)是将n的值赋值给m和k。选项C)就是进行了短路规则,当m=k赋值后,m得到的新值不为0,即为真,逻辑或后面的表达式就不被计算,所以n没有被赋值。D)答案没有什么意义。【考点链接】C语言中,没有专门的逻辑值,而是用非零

33、值来表示真,用零表示假。【命题目的】考查对于if-else语句的掌握情况。【解题要点】if-else语句的执行过程如下,首先计算if后面一对圆括号内表达式的值,若表达式的值为非0,执行if子句,然后跳过else子句,去执行if语句后的下一条语句;若表达式的值为0,跳过if子句,去执行else子句,接着去执行if语句后的下一条语句。【错解分析】C语言的语法规定,else子句总是与前面最近的不带else的if匹配,与书写格式无关,本题目的后一个if-else相当于嵌套在第一个if子句里,相当于xy&y0时,z=0;当x=0时,z=z+1。【考点链接】else不是一条独立的语句,它只能与if同时使用

34、。填空题【命题目的】考查对于if语句的掌握情况。【解题要点】C语言的语法规定:else子句总是与前面最近的不带else的if相结合。因为x不大于y,所以执行printf(%dn,z);语句。循环结构选择题解析: t=1是将t赋值为1,所以循环控制表达式的值为1,而判断t是否等于1时应用t=1注意“”与“”的用法。解析: 该题目应该根据循环体第一次和最后一次执行时的输出结果来决定哪一项是正确的。第一次进入循环时,n的值是9,循环体内,先经过n-运算,n的值变为8,所以第一次的输出值是8,由此可以排除选项A)和D)。由循环条件n6可以知道,最后一次循环开始时,n的值应该为7,所以最后一次执行循环体

35、时输出为6,由此可以排除选项C)。解析:选项A)的循环表达式的条件永久为1,并且小于100的数与100取余不超过99,所以在循环体内表达式i%100+1的值永远不大于100,break语句永远不会执行,所以是死循环;选项B)的括号内没有能使循环停下来的变量增量,是死循环;选项C)中先执行k+,使k=10001,从而使循环陷入死循环。解析: 本题中,“!”表示逻辑非运算符,“!=”等于运算符,逻辑非运算符比等于运算符的优先级低。解析: do-while语句的一般形式为:do 循环语句while(表达式);本题中,执行“语句”一次后,表达式的值为假,停止执行。解析: 本题涉及break语句,重在循

36、环次数的判定。本题的循环由于无出口,只能借助break语句终止。鉴于题目要求说明判断ij的执行次数,只需考查经过i+=k运算如何累计i的值,i值分别是i=2,4,6,8,10,12时,判断ij为真,程序输出s的值并结束,共循环6次。解析: do.while语句的一般形式是:do 语句while (表达式);特点是:“直到型”循环结构。先执行一次“语句”,判“表达式”,当“表达式”非0,再执行“语句”,直到“表达式”的值为0时停止执行语句。在一般情况下,用while和do-while语句解决同一问题时,若二者的循环体部分是一样的,它们的结果也一样。但当while后面的“表达式”一开始就为“假”时

37、,两种循环的结果不同。这是因为此时while循环的循环不被执行,而do-while循环的循环体被执行一次。本题的关键是两个加数分别能被13和11整除,在i=0时,直接将316赋值给k,当k%11的值为0时,则不必执行循环,将执行j=k/11语句,输出结果,所以该表达式合理的条件是k%11。解析: 本题考查“+”和“-”运算符,运算符“+”是操作数加1, 而“-” 则是操作数减1。例如:x=x+1可写成x+, 或+xx=x-1可写成x-, 或-xx+(x-)与+x(-x)在上例中没有什么区别, 但x=m+和x=+m却有很大差别。x=m+ 表示将m的值赋给x后, m加1。x=+m 表示m先加1后,

38、 再将新值赋给x。当y=2时,首先执行y-,使y值变为1。接着执行y,y值变为0,循环结束。最后执行输出语句,注意先输出此时y的值0,在再使y值自减1变为-1。解析: 本题考查两个知识点:自加自减运算符和do.while循环语句。题中b-=a等价于b=b-a;a+的含义是在使用a之后,使a的值加1;b-的含义是在使用b之后,使b的值减1。解析: 解答本题,当然先要清楚do.while语句的执行过程:先执行一次指定的循环体语句,本题中执行x-后判断表达式,表达式的值为!x为假,程序结束循环。解析: 除了考查基本的for循环结构外,本题还考查自加运算的相关知识,但均为基础。注意:for语句中的表达

39、式可以部分或全部省略,但两个“;”不能省略。解析: 本题中需要填空的是for循环的第3个条件,即“若分成9个零件一组,则多5个零件”,当总零件数零减去5后,并与9取余为0即可满足本题的条件。解析: 本题中,首先将0赋给k,表达式变为0,跳出循环,没有执行循环体语句。解答本题的关键是掌握while语句。解析: 本题中,省略了for语句的第二个表达式,C语言规定如果省略了第二个表达式,则表示为真,即为1。解析: 本题考查用于多分支选择的switch语句, 其一般形式为:switch(表达式) case常量表达式1: 语句1; case常量表达式2: 语句2; case常量表达式n: 语句n; de

40、fault : 语句n+1;其语义是:计算表达式的值。并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有 case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。解析: do-while 语句的一般格式为:do 循环体语句 while(表达式);先执行循环体语句一次,再判断表达式的值,若为真则继续执行循环,否则终止循环。本题中,先执行printf(“%dn”,x=-2)后,值为x=x-2,即为1。判断表达式的值,!(-x)为真,x=0,继续循环。再次执行循环体语句后,x=-2

41、,此时表达式!(x)的值为0,结束循环。解析: 根据本题提出的条件可知,控制循环的表达式应该是所输入的两数互不相等(相等时结束循环),也即只有满足这一条件时,两数才能进行排序输出的操作,由此得出循环的控制表达式应该为a!=b。解析: 选项A)for循环可以用于循环次数不确定的情况;选项B)for循环是先判断表达式,后执行循环体语句;选项C)在for循环中,可以用break语句跳出循环体,从而接着执行循环体后面的语句。解析: 该题是一个for循环嵌套语句。第一层for循环循环2次,第二层循环3次,但当j等于0和1时,将执行continue语句,不执行x+运算,所以每次执行完内循环后,x的增量为1

42、。最后一个x+运算将每次累加起来就是x的值。解析: 本题考查逻辑非运算符和不等于运算符的区别,逻辑非运算符“!”的优先级大于不等于运算符“!=”的优先级。解析: 和都属于无实际作用语句,但又都符合语法要求,因为条为1,是无限循环。中省略了全部的表达式,也代表真,因此也是无限循环。解析: do-while语句的一般形式为:do 循环体语句 while(表达式);,其中循环体语句可以是复合型语句,但必须用花括号括起来。while后必须要有分号作为语句的结束,在dowhile循环中,不可以省略while。解析: 此题中for循环的执行次数取决于关系表达式(i=9&!=876)的结果。只要i9,或者x

43、=876,只要在执行scanf语句时,从终端输入876,循环就将结束。如果从终端一直未输入876,则将由i值的增加使i9,从而结束循环。按照题中所给定的for语句,每执行一次循环,i自增1,因此执行10次循环后,i的值为10,循环最终也将结束。解析: while是先判断条件再执行语句;do-while则是先执行依次语句再判断条件从而决定是否继续再执行循环体中的语句,这正是二者主要区别。解析: while是先判断条件再执行语句;do-while则是先执行依次语句再判断条件从而决定是否继续再执行循环体中的语句,这正是二者主要区别。【命题目的】考查对于while循环的理解情况。【解题要点】while

44、循环是先判断循环条件之后再进入循环体。【错解分析】这个题目的循环体是空语句,每次做的仅仅是判断循环的条件,由于+运算优先于,所以每次都先+,后比较。【考点链接】do-while循环是先执行循环体,之后判断循环条件。【命题目的】考查for循环的掌握情况。【解题要点】for后一对括号中的表达式可以是任意有效的C语言表达式。【错解分析】该题目的循环体部分为空语句,循环控制条件为mn,每一次m增3,n减1,每当循环体执行结束时,循环控制变量m,n就会分别被增3和减1。【考点链接】for后一对括号中,允许出现各种形式的与循环控制无关的表达式,虽然在语法上合法,但这样会降低程序的可读性。【命题目的】考查循

45、环嵌套的掌握情况。【解题要点】这个题目中的k,每一次外层的for循环后都会被初始化为0,这样输出的k是最后一次做内部循环所得到的值。【错解分析】最后一次做内部的循环时,m的值为3,所以内部的循环做两次。【考点链接】for,while,do-while都可以相互嵌套,循环的嵌套可以多层,但每一层循环在逻辑上必须是完整的。【命题目的】主要考查continue语句的掌握情况。【解题要点】continue语句的作用是跳过本次循环体中余下尚未执行的语句,接着再一次进行循环条件的判定。【错解分析】当能被2整除时,a就会增1,之后执行continue语句,直接执行到for循环体的结尾,进行i+,判断循环条件

46、。【考点链接】continue语句并没有使整个循环终止,而break语句则是终止整个循环。字符型数据选择题:解析: C语言的字符型常量中,允许用一种特殊形式的字符常量,就是以一个“”开头的字符。其中“ddd”表示用ASCII码(八进制数)表示一个字符,本题中的char c=72即表示占一个字符的变量c的ASCII码值。解析: C语言的转义字符见下表所示。转义字符转义字符的意义n回车换行t横向跳到下一制表位置v竖向跳格b退格r回车f换页反斜线符“”单引号符a鸣铃ddd13位八进制数所代表的字符xhh12位十六进制数所代表的字符解析: 为便于表示各种数据类型,机器中采用了BCD码(表示十进制数)、

47、ASCII码(字符型)、汉字机内码等等各种码。数据采用了补码、原码和反码为表示形式。实型数据表示方法有浮点法和定点法等,考生需熟练掌握各种码的含义,并用之来计算、比较。需要提出的是,在机器内部,所有码都是由二进制编码而成的,它都是以二进制存储在机器之中的。字符“5”和“7”的ASCII的值分别为53和55,其二进制形式分别为00110101和00110111。解析: 本题考查switch语句的掌握。必须撑握以下内容:首先应该明白switch语句的语法格式:switch语句的语法格式为:switch (表达式) case 常量表达式1:语句组1; case 常量表达式2:语句组2; case 常

48、量表达式n:语句组n; default:语句组n+1;另外,注意以下几点关于switch语句的重点:系统在执行时计算开关表达式的值;根据所得的值在各个case标号表达式中寻找匹配,直到发现与表达式匹配的标号(本例中匹配的是case B:);找到匹配后执行后面相应的语句表,顺序往下执行;如果无相匹配的标号,若存在default标号,则执行该语句标号后面的语句表n+1;当不存在default标号时,不执行switch中的任何一个语句表。一般而言,在多分支结构中总会出现“意外”的情况,这时均可归入default:程序段,作统一的处理。default标号是可选性的,不必每次都有,视需要而定。switc

49、h语句中还可以包含switch语句,形成switch的嵌套。解析: 在C语言中,逻辑运算符有4个,它们分别是:!(逻辑非)、|(逻辑或)、&(逻辑与)、(异或)。在位运算里面还有(位与)、|(位或)的运算。本题考查逻辑与运算符的用法,在表达式x=(a&b)&(cB);中,先判断a&b条件,逻辑与条件的两边都要保证为1,即a和b都成立,当然cap这一关系成立,应该把i的值值赋给p,这样才满足题目的要求。解析: 我们可以把二维数组的常量表达式看做是矩阵或者表格的行数与列数,要注意每个元素有两个下标,第一个是方括号中的下标代表行号,称行下标;第二个是方括号中的下标代表列号。行下标和列下标总是从0开始

50、的,二维数组在不赋初值时,不能得到确定。解析: 本题中,a12是二维数组中的第6个元素,对应for循环中i的值为5,p5=5+1。解析: 本题中的二维数组的每个元素就是一个由三个元素构成的一维数组,根据条件for(k=0;k3;k+)和要求的akk可以得出本题的答案应该是9 5 1。解析: 在C语言中,数组元素是从0开始的。指针变量p指向数组的首地址,(p+2)就会指向数组中的第3个元素。题目中要求输出的是元素的值。解析: p=&a3将指针指向数组a的第4个元素,p5指向数组a的第9个元素,而a8=9,所以b=9。解析: 通常,引用一个数组元素可以用下标法,如ap-a形式,或指针法,如*(&a

51、i)的形式。本题中a9=9,a10显然超出了数组范围,注意,数组的下标是从0开始的。解析: 在一维数组中要注意的是作为下标表达式的常量表达式的值必须是大于等于0,选项B)中定义有5个元素,但赋初值时有6个元素,所以是错误的。解析: 本题的知识点主要是:在C语言中,数组元素下标是从0开始的;指针变量p指向数组的首地址。for循环语句中,指针变量p始终指向数组的首地址,因而执行循环赋值语句后数组各元素的值均变为2。解析: 在main函数中,调用reverse函数将b数组中的前8个成员进行互置,执行完毕后,b数组中的成员为8,7,6,5,4,3,2,1,9,10,然后再执行for循环结构,将b6,b

52、7.b9的值相加,结果为22。解析: 本题考查二维数组的定义方式。第一维的大小由以下方法判断:当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小;2)当初值的个数不能被第二维的常量表达式的值除尽时,则第一维的大小=所得的商数+1。解析: 在一维数组中要注意的是下标表达式的常量表达式的值必须是大于等于零,并且小于自身元素的个数,既数组长度,选项B)的下标不是整数,所以错误解析: 本题考查数组指针的应用。选项D)第一层括号中为数组a中第i项元素的值,外面再加指针运算符没有意义。解析: 指针变量p指向数组a的首地址,并把指针变量p的地址赋于指向指针的指针变量k。解析: 此题的关键

53、是要分清指针数组与指向一组数组指针之间的不同,题中的说明语句定义了一个指针变量prt,它指向包含三个整数元素的一维组数。应注意:*prt两侧的圆括号不能缺少,如果写成*ptr3,则p与3先结合,是数组,然后再与前面的*号结合,则*ptr3将是一个指针数组。解析: 函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中去。在本题解析中,我们试图将这一问题解释清楚!大家可以考虑一下利用下面这函数可不可以实现a和b的互换。swap(x,y)int x,y; int t; t=x; x=y; y=t;如果在main函数中用swap(a,b),会有什

54、么结果呢?在函数调用开始时,a的值传送给x,b的值传递给y 。执行完swap函数后,x和y的值是互换了,但main函数中的a和b并未互换。也就是说由于“单向传递”的“值传递”方式,形参值的改变无法传递给实参。为了使在函数中改变了的变量值能被main函数所用,不能采取上述把要改变值的变量作为参数的办法,而应该用指针变量做函数参数。在函数执行过程中使指针变量所指向的变量值发生变化,函数调用结束后,这些变量值的变化被保留下来,这样就实现了调用函数改变变量的值,在主调函数中使用这些改变了的值的目的。swap(p1,p2)int *p1,*p2; int p; p=*p1; *p1=*p2; *p2=p

55、;注意交换*p1和*p2的值是如何实现的,如果写成下面这样就有问题了!swap(p1,p2)int *p1,*p2; int *p; *p=*p1; /*此语句有问题*/ *p1=*p2; *p2=*p; *p1就是a,是整型变量。而*p是指针变量p所指向的变量,但p中并无确切地址,用*p可能会造成破坏系统的正常工作状态。应该将*p1的值赋给一个整型变量,用整型变量作为过渡变量实现*p1和*p2的交换。请注意,不能企图通过改变指针形参的值而使指针实参的值也改变swap(p1,p2)int *p1,*p2; int *p; p=p1; p1=p2; p2=p;程序的原意是:交换两个指针的值。但是

56、语言中实参变量和形参变量之间的数据传递是单向的“值传递”方式。指针变量做函数参数也要遵循这一规则。调用函数不能改变实参指针变量的值,但可以改变实参指针变量所指向变量的值当然,明白了以上指针变量的调用方式后,本题便可迎刃而解。解析: 该程序先判断ai=0 & tcj),这个语句是控制排序的关键语句,它即实现了比较两个元素大小的作用,又实现了元素向后移动的作用,不断地把大的数据向前移动,直到找到一个比它小的,或到数据的上界为止。【考点链接】getchar()和putchar()函数的用法。【命题目的】考查对于通过地址来引用二维数组元素的掌握情况。【解题要点】数组a55,0=i5,0=j5,则可以用

57、五种表达式来引用,aij,*a(ai+j),*(*(a+i)+j),(*(a+i)j,*(&a00+5*i+j)。【错解分析】数组的下限为0,%后面为小写的x,所以输出的结果为小写字母表示的十六进制。【考点链接】如果%后面用大写的X则输出用大写的字母表示,否则用小写字母表示。填空题解析: 在函数中,可以通过指针变量来引用调用函数中对应的数组元素,此操作是通过传递数组的首地址来实现。解析: 解答本题的关键是要读懂程序,试题要找出能被7或11整除的所有整数,注意数学中的“或”和C语言中的“或”的区别,但在此处,if条件语句中用了“|”运算符,若要找能同时被7和11整除的所有整数则在if()中应用“

58、&”运算符。当然,如果m的值输入50,即表达式fun(10,aa,&n);为fun(50,aa,&n);时输入结果为:7 11 14 21 22 28 33 35 42 44 49。【命题目的】考查对于数组操作的综合运用。【解题要点】深刻理解十进制转化为二进制的方法,即取余法;数组名作为实参,在函数内部可以直接修改调用函数中定义的数组的值。【考点链接】dowhile循环,先执行循环体,后判断循环条件。字符串选择题解析: 字符型指针变量p中存放的是“china”的首地址,所以选项A)和B)错误。s数组长度为6,而p所指向的字符串长度为5,二者不相等,排除选项C)。解析: 在本题中,while(*

59、p2=*p1)!= 0)有两个作用,一个是判断条件是否成立以决定是否再次进入循环,另一个作用是判定前先完成*p2=*p1,该处的作用是把p1所指存储单元的字符逐一送p2所指存储单元中,直到p1所指单元内容为0为止。解析: 在内存中,字符数据以ASCII码存储,它的存储形式就与整数的存储形式相类似。C语言使字符型数据和整型数据之间可以通用。也可以对字符数据进行算术运算,此时相当于对它们的ASCII码进行算术运算,在本题中,s+相当于s=s+1,即让s指向数组中的下一个元素。解析: 函数调用的一般形式为:函数名(实参列表)首先调用函数func1(0),输出st0=h。i值变为2,并调用函数func

60、2(2),输出st2=l。i值此时变为4,又调用函数func1(4),输出st4=0。此时i值大于等于3,执行完毕。因此,输出结果为hlo。解析: C语言中操作一个字符串常量的方法有:把字符串常量存放在一个字符数组之中;用字符指针指向字符串, 然后通过字符指针来访问字符串存贮区域。当字符串常量在表达式中出现时, 根据数组的类型转换规则, 它被转换成字符指针。本题D)项中错误的关键是对数组初始化时,可以在变量定义时整体赋初值,但不能在赋值语句中整体赋值。解析: 本题考查指向字符串的指针的运算方法。指针变量p首先指向字符串中的第一个字符A,执行p=s+1后,p指向字符串中的第二个字符B,然后输出值

温馨提示

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

最新文档

评论

0/150

提交评论