C语言笔试习题集答案与解析.doc_第1页
C语言笔试习题集答案与解析.doc_第2页
C语言笔试习题集答案与解析.doc_第3页
C语言笔试习题集答案与解析.doc_第4页
C语言笔试习题集答案与解析.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

校园网.新视野教育全国计算机等级考试二级C语言笔试习题集答案及解析第一章C语言基础知识一、选择题1、答案是AA正确B 可以作为复合语句的标志C main 函数不是用户命名的D 分号是语句结束的标志,肯定是语句的一部分做这个题目需要对书上的概念透彻的理解2、答案是AA 错误、用户标识符:命名时,标识符的选择由用户自定,但是不能与关键字相同,所以A选项错误。这个题目考察用户标识符3、答案是B用户标识符是标识符,所以可以是有下划线,但是中划线不属于字母,数字,下划线其中一种。这个题目考察用户标识符的概念。4、答案是Bdefine 是预定义标识符,而预定义标识符可以是用户标识符,所以define可以是用户标识,if 是关键字,而关键字不能是用户标识符,所以if不可以是用户标识符5、答案是Dlong 是关键字,参照附录二注:6-13、考察用户标识符概念6、答案是DD答案以数字2开头了,不符合标识符定义7、答案是CC答案以数字开头了8、答案是Dint是关键字9、答案是B答案A 是关键字,答案C是以数字开头了,不符合概念,答案D出现了小数点10、答案是A答案A出现了小数点11、答案是C答案C 以数字开头了12、答案是AB答案中float 是关键字,C答案中3c以数字3开头了,D答案中-5d中 - 不属于字母,数字,下划线中一种13、答案是AB答案中-max中-错误,C答案中3COM以字母3开头了,D答案中int 是关键字,不是用户标识符14、答案是BA答案中15. 后面不应该有点,C答案中出现了逗号,D中字母B有问题15、答案是DVisual C+6.0中int类型的变量占的字节数为4。16、答案是BB中出现了8,而八进制只能有0到7组成17、答案是D答案D中开头是0不是o18、答案是C答案A中E后面是整数,0.5是小数。答案B 中E后面不能为空。答案D中E前面不能为空、本题目考察指数的表示形式19、答案是C答案A中2.0有问题,不能为小数形式 答案B中E前面不能为空。答案D中E后面不能为空 本题目考察指数的表示形式20、答案是AB中八进制中不能出现数字8,C中e后面不能是小数,D中e后面不能为空21、答案是BB中0.4是小数,不正确22、答案是CC中0.5是小数,不正确23、答案是D3.6-5/2+1.2+5%2=3.6-2+1.2+1=3.8本题目考察算术运算符,需要注意整数除以整数结果只能是整数24、答案是D%不能用于实型的计算25、答案是DD答案中$不属于字母,数字,下划线26、答案是 AA答案是逗号表达式,B答案中x+1=y是赋值表达式,左边只能是变量,而这里是x+1, 同理答案C中x+10也是错误的,在D答案中,考察的是强制类型转换,正确的是(double)x/1027、答案是 A本题考察的是注释需要注意的地方,具体解答见课本第2页中间部分28、答案是B答案A中n2没有定义,答案C中在定义f之前不能使用它,答案D中E后面必须是整数29、答案是 C考察的是强制类型转换,正确的是k%(int)f30、答案是 D本题目类似与第七课时的例一,解题方法是要抓住+m,-n,-m,表达式的值是变量变化之后的值,而n-表达式的值是变量n变化之前的值31、答案是B本题目考察的是负整数与无符号正整数在计算机中存放的格式的一样的,但表示的不同的两个数32、答案是CA答案中%运算对象不能为实型,26.8错误,B答案中考察的赋值运算符,赋值运算符左边必须是变量,所以赋值运算符左边1+2错误,同理答案D错误33、答案是 C本题目考察的是课本第15页的关于自加与自减运算符的第一点说明,即增量运算符的运算对象只能是变量,而在C答案中+(i+1)中,i+1是表达式34、答案是 B本题目考察的是整数除以整数结果是整数,在B答案中1/2结果是0,导致整个表达式的值是0,明显是错误的35、答案是D对于+、-单目运算符来说,其运算对象可以是char型、int型和float型变量36、答案是A本题目主要考察n+表达式的值是n变化之前的值,然后使n的值增加137、答案是 Bc=a/b+0.4、c=8/5+0.4、c=1+0.4、c=1.4、因为c 是int 型的,所以c的值是1 ,做此题目需要仔细阅读题目38、答案是 D(int)a+b/b=(int)5.5+2.5/2.5=5+1.000000=b=6.000000同样a,b的类型是double型的39、答案是Dlong 和short不能相互修饰40、答案是 C标识符中不能有$答案是CA选项中,在变量赋值时不能赋给表达式,而y*5是表达式;选项B中进行强制类型转换时,类型标识符要加上括号,所以错误;选项D中,%(求余运算符)运算对象只能是整形数。42、答案是 A选项A中,b变量还没有定义43、答案是C选项A中long是关键字;选项B中“-”符号不属于字母、数字或下划线;选项D中,int是关键字。44、答案是 B选项A中,八进制数只能由07之间的数字组成;选项C,十六进制数应该以0X开头,并且由09以及af组成,Oabc不正确;选项D中10,000包含逗号,不正确。45、答案是BC语言的标识符中只能包含字线、数字和下划线,没有连接符。46、答案是 C既然在内存中,字符数据以 ASCII 码存储,它的存储形式就与整数的存储形式类似。这样使字符型数据和整型数据之间可以通用。一个字符数据既可以以字符形式输出,也可以以整数形式输出。以字符形式输出时,需要先将存储单元中的 ASCII 码转换成相应字符,然后输出。以整数形式输出时,直接将 ASCII 码作为整数输出。也可以对字符数据进行算术运算,此时相当于对它们的 ASCII 码进行算术运算。47、答案是D不同的计算机系统或者编译系统,对3种整数类型所占用的字节数有不同的规定。48、答案是A选项B中求余运算(%)的运算对象必须是整型;选项C中,赋值运算符(=)的左边必须是变量,不能是常量或表达式;选项D与选项C同理。49、答案是 A+运算符有前缀和后缀两种形式,本题中的选项C就是前缀形式,其表达式的值为增1后的值,而选项A为后缀形式,其表达式的值为增1之前的值。而选项B和D的表达式都是k加1之后的值50、答案是A51、答案是C选项A中将一个变量j的值赋给了一个表达式,这种写法是错误的,只能给变量赋值,而不能给常量和表达式赋值;选项B中强制类型转换的格式使用出错,强制类型转换时,类型标识符必须用括号括起来;选项D中,求余运算符(%)的两端必须是整形数。52、答案是 D字符常量是用单引号括起来的单个字符,所以选项B错误;此外还有一种特殊的字符专为控制设计,称为转义字符,有三种转义字符:一种是由一个“”开头加一个普通字符组成,代表一个字符。如表示一个单引号字符,所以选项D正确;表示一个斜杠字符,而选项C中的则是错误的;用“”与其后的13位八进制数字构成的字符序列,表示ASCII码等值于该八进制数的字符;用“x”与其后的12位十六进制数字构成的字符序列,表示ASCII码等值于该十六进制数的字符;所以选项A错误。53、答案是B字符常量是用单引号括起来的单个字符,所以选项A正确;此外还有一种特殊的字符专为控制设计,称为转义字符,有三种转义字符:一种是由一个“”开头加一个普通字符组成,代表一个字符。如n表示一个换行符,所以选项D正确;用“”与其后的13位八进制数字构成的字符序列,表示ASCII码等值于该八进制数的字符,所以选项B错误,因为9不是八进制数字;用“x”与其后的12位十六进制数字构成的字符序列,表示ASCII码等值于该十六进制数的字符;所以选项C正确。54、答案是D大写字母的ASCII码值比小写字母的ASCII码值小3255、答案是 A选项A中的字符变量ch只能接收单个字符,ab不是单个字符,所以错误。56、答案是Bchar x=C将一个大写字母赋给了字符型变量x;然后通过x=x+32将x中字符的ASCII码值加32,即为小写字符c的ASCII码值;然后将x以字符形式输出,即为小写字母c。57、答案是A语句char x,y;定义两个字符型变量x,y;然后通过x=B-A+a将用大写字母B的ASCII码送去大写字母A的ASCII码,结果便为1,然后再加上小写字每a的AS CII码,结果就为小写字母b的ASCII码,然后再赋值给变量x;通过y=x+2,将变量x中的ASCII码值加2,即变成小写字母d的ASCII码值再赋值给变量y;然后以数值形式输出变量x中的ASCII码值为98,再以字符形式输出变量y中的字符为d。58、答案是B选项A中字符0的ASCII码值为48,所以A的结果不为1;选项B中0代表空值,空值NULL的ASCII码值为0所以结果为1;选项C中字符1的ASCII码值为49,所以结果不为1;选项D相当于用0-48结果也不为1。59、答案是 D如果要表示十六进制字符,则要用x开头,所以选项A错误;如果要表示八进制,则0开头,后面跟13位的八进制数,八进制数由07组成,不包含8,所以选项B错误;用单引号括起来的单个字符才是字符常量,所以C错误;而n是转义字符,用来表示回车符。60、答案是B用单引号括起来的单个字符,称为字符常量,所以选项B错误。61、答案是C先将c1 变量中的字符的ASCII码值输出,即为65,将变量c2中字符的ASCII码值减2后输出,即为66。62、答案是 A我们知道异或运算,只有两个操作数不同,结果才为1。所以01=1,11=0,由此可推理,任何数与1进行异或运算都得它的相反数;变量b中的高4位为1,所以要让变量a的高4位取反,即可让变量a和变量b进行异或运算。63、答案是A变量c1和c2中的值相同,所以转换成二进制数后,对应的二进制位上的值也相同,当两值相同时,只有进行异或运算,结果才为0,所以c1c2值为0。所以本题的正确答案为A。64、答案是A4|3转换成对应的二进制数即100|011=111再转换为十进制数即为7;而4&3转换成对应的二进制数即100&011=000,再转换为十进制数即为0;所以选择A。65、答案是 Dx/y的值为1,z的值也为1,1和1求反进行与运算,结果一定为0。所以本题选择D。66、答案是D2+x=00000010+10100111=10101001;3=00000011=11111100;所以就相当于1010100111111100=01010101,所以选择D。67、答案是 Da=0x3转换为二进制数即为00000011;b=a|0x8转换为二进制数即为00000011|00001000=00001011即b=11,b1即000010111=00010110即c=22,所以本题选择D。二、填空题1、位、0、12、关键字、预定义标识符、用户标识符3、84、八、十、十六5、int、float、double6、5+3.6/2=5+1.8=6.87、15、16、a+表达式的值是a变化之前的值,当然a本身增加了18、把10赋给变量B9、123.46 (int)(x*100+0.5)/100.0=(int)(12345.67+0.5)/100.0=(int)(12346.17)/100.0=12346/100.0=123.46。10、3整个表达式是一个逗号表达式,变量n和i赋值为2后,通过+i将i的值增加1变为3,然后再通过i+为i增加1,整个逗号表达式的值为i+的值,此时是后缀,所以整个i+表达式的值为3,而变量i的值为2。11、11110111第11题没有详细解析而且答案出错:xy1=00000010000001011=1111110100001010=1111011112、2只有和b是正确的13、2 20.000000x=f*=n/=(c=50)是一个赋值表达式,它的顺序是从右向左赋值,先执行c=50,然后执行n/=50即n=n/50=100/50=2,接着执行f*=2即f=f*2=10*2=20.000000,最后再将值赋给变量x。输出变量n和x的值,即为2 20.000000。14、a=14表达式a=(3*5,a+4)的括号中是一个逗号表达式,其结果是最后一个表达式的值,即将a+4=14的值赋给变量a。所以输出结果为a=14。第二章、顺序结构一 选择题1、答案是 C随意使用空语句会导致逻辑上出现错误,不要随便使用。2、答案是 B语句必须以分号结尾,A,C,D表达式后面均没有分号。3、答案是 Cint x=13,y=4;说明x,y均为整型,所以x/y只取整数部分(舍去法),值为3,把3赋值给x,整个x=x/y表达式的值为左边变量x的值,所以输出为3。4、答案是 Aa,b均为整型,a/b是取ab所得商的整数部分,所以是0,再把0赋值给 c,所以是c的值是0。5、答案是 DA、注释语句可以放在代码的任何位置B、将r定义为整型不会在编译时出错,会自动进行类型转换C、变量s为浮点型,格式描述符f时正确的D、是非法的变量6、答案是 D(x,y)是逗号表达式,它的值只有一个,所以格式说明符的个数和输出项的个数是相等的。并且逗号表达式的值为最后一个表达式的值,最后一个表达式是y=2003,所以整个表达式的值是2003,因此输出值为2003。7、答案是 Am是十进制整数以十进制有符号的形式输出,即照原样输32767,n=032767,032767是八进制的整数以八进制无符号形式输出,去掉前面的0。见教材P348、答案是 Cm,n的值都是十六进制数0xabc,m-=n即是m=m-n, 把m-n的值赋给m,即把0赋给m,再把m值以十六进制无符号的形式输出,输出的十六进制数不用在前面0x或者0X。见教材P359、答案是 B表达式i的值是在变量自减之前的值,i的初值为10,所以该表达式的值也为10;表达式j+的值是变量自加之后的值,j初值为1,所以该表达式在值是2。10、答案是 Cm=0256,即m是八进制的数0256,要以八进制无符号的形式输出,即输出256;n=256,即n是十进制的数256,也要以八进制无符号的形式输出,首先要把十进制数转化为八进制数,256转化为八进制为0400,以无符号形式输出,即输出400。11、答案是 B在printf语句中,格式控制的个数只有一个,即d,而输出项有两项,即a和b。而得到的结果应该只有一个,所以应该输出第一个变量的值,即变量a的值。12、答案是 C第一个数据的输出控制宽度是2位,但是x的值是102,占3位,要输出的数据宽度大于规定的输出宽度,所以按数据的实际宽度输出,输出102。第二个数据要求以十进制形式输出,输出控制宽度是2,y的值为012,是八进制数,所以要转换成十进制数10后再输出。13,、答案是 B表达式af/=c*=(x=6.5),按从右到左结合,先把6.5赋值给x,再执行cc*6.5,c的值变为65,再执行ff/65,为浮点数的除法,f的值为1.53,再把f的值赋给a,a为整型数据,执行强制类型转换,a的值为1。a对应的输出格式为d,即输出1;c对应的输出格式为d,输出65,f对应的输出格式3.1f,即输出控制宽度为3位,保留小数点后一位小数,即输出1.5,x对应的输出格式也为3.1f,输出6.5。14、答案是 Dfloat x=-123.456;说明x为单精度浮点数据,单精度浮点数据对应的输出格式应该为%f。15、答案是 Cm=(k+=i*=k);按从右到左结合,先执行i=i*k;即i被赋值为4,再执行kk4;k被赋值为6,最后把6赋给m,输出m和i的值。16、答案是 C略(参考12题)17、答案是 Dm遵循从右向左结合的原则;m的值为m自增之前的值,所以执行完xm以后,x被赋值为3;表达式xx8/+n中有加号除号,先算8/+n,+n的值为自增之后的值为5,8/5取整为1,即xx8/+n转化为xx1,即把x1的值赋给x,x的值变为2。18、答案是 DA 输入函数应为scanf();B,C 输入数据列表必须是地址表达式;19、答案是 A从键盘输入数据的格式必须与输入控制要求的格式一样B答案三个之间不要有空格;C答案用逗号分开是多余的;D答案格式不匹配。20、答案是 A格式控制要求输入的两个数据之间要用逗号隔开,A没有逗号所以错误,D两个输入数之间的回车换行可以忽略。21、答案是 Cx乘以100是为了把x小数点后的两位小数变为整数,再加上0.5,如果小数点后一位大于等于5则会进一位,如果小数点后一位小于5则不会出现进位的情况,再对其进行强制类型转换,采用舍去法丢掉小数部分,即对x乘上100后的数实现了小数位到整数位的四舍五入。最后再除以100.0,把数字变回原来的大小,整数与浮点数相除结果为浮点数,即实现了要求。22、答案是 C从键盘输入数据的格式必须与输入控制要求的格式一样。23、答案是 B输入控制中第一个数要求以“2d”形式输入,即要求输入一个两位的数,而从键盘输入的数为876,所以从左到右取两位数字87,即把87赋值给整型变量a,余下的6再赋值给浮点型变量b,自动进行类型转换,b的值为6.000000,后面输入的543则没有赋值给变量。24、答案是 D“”会输出一个“”,“d”会照原样输出,因为没有格式说明,m,n无法输出到屏幕。25、答案是 D第1个输出语句要求ch以%c(字符)形式输出所以为输出“a”,以%d(整数)形式输出为,字符转换为整型要使用ASCII码所以为“97”,k没有对应的输出符所以没有输出,第2个输出语句要求以整型方式输出k得到“12”。结果为“a,97,k=12”26、答案是 Ba+b的结果为30,按照“a+b=%dn”的输出格式得到输出结果“a+b=30”B27、答案是 Bprintf可以没有输出项,没有输出项的printf只是没有输出内容;整数不能以十二进制输出,getchar()只能读入字符。28、答案是 Agetchar()可以读入空格符合回车符。二、填空题1、一条语句、 分号2、88首先将八进制数0210转化为十六进制的数0X88,输出格式说明要以十六进制无符号的形式输出,所以省略0X,直接输出88。3、11把十进制数转化为八进制数,以无符号的形式输出4、25 21 37b为八进制数025,c为十六进制数0X25,首先把b、c都转化为十进制的整数,分别为21、37,按照输出格式要求a、b、c以十进制整数形式输出,中间以空格分开,所以输出为25 21 37。5、n1%dnn2=%d除了n1,n2的值之外,还必须加入“n1”“n2”照原样输出的字符,很明显在两个数据之间还加了换行符。6、i=10,j=20格式控制中加入了格式说明以外的其他字符,则在输入数据时这些字符也要同样输入。输入格式控制为i=%d,j=%d,所以则应该从键盘输入i=10,j=207、261a为十进制数177转化为八进制的数为0261,以无符号的形式输出为2618、16a的初值为0,在表达式a+=(a=8)中,a首先被赋值为8,再执行操作a=aa,所以a最后被赋值为16,即输出a的值为169、printf(“a=%d,b=%d”, a, b);10、B 66B在ASCII码中派在A的后面A为65,那么B为66。11、10012为八进制数,转换为十进制为10。12、12 34在scanf函数中指定了宽度为2,输入123456,a=12,b=34,后面的567无效。13、12程序运行时输入12,getchar()函数只能接受单个字符,所以ch1=1,ch2=2。n1=ch1-0,转化为ASCII码计算n1=50-49,n1的值为1。n2=n1*10+(ch2-0)转化为ASCII码计算n2 = 1*10+(51-49),n2的值为12。第三章 选择结构一、选择题1、D 此题主要是考语句的特征。一条语句只包含一个分号,D项有两个分号,应该是两条语句,所以选D。2、C此题主要是考真假条件的等价。题目中的E为非0时条件为真,为0时为假。那么把非0和0带到选项中可知,C项正好是E为0时表达式为真,非0时为假,所以选C。3、D 任意合法的表达式都可以作为逻辑运算符的运算对象4、D 此题主要是考逻辑运算和关系运算的优先级别.只要掌握!、算术运算和&的优先级别便可选对.这几种运算符的具体优先级关系见见教材P188,附录三。5、A 此题主要是考逻辑运算符!、&和|之间的优先级别。!最高,&次之,|最低。先求得!a为0,所以不必计算!b的值,即!a&!b的值为0,由c=0,!c=1,而0|1=1,所以选A。6、A 此题主要是考了逻辑、关系和算术运算,熟练掌握逻辑运算、关系运算和算术运算的优先级别后,就不难了。A 选项中!a为0,所以!a=1为假,那么就不用计算&后面的表达式了,因为0与任何数均为假;B项中先计算出ab为假,则(ab)&!c也为假,而0|1=1; C项中a和b均为真,所以a&b的值为1;D项中先计算出(b+b)&(c-a)=1,又a=2,2|1=1 所以选A。7、D 此题考到了+运算符以及逻辑运算。当计算机碰到a&b时,先计算表达式a的值,若为真才会计算表达式b的值,否则将不会去计算b的值,因为一旦a=0,则0&b必为0;而a|b则正好是相反的,即先计算表达式a的值,若a为假才会计算表达式b的值,否则将不会去计算b的值,因为一旦a=1,则1|b的值必为1,理解了这两点后,我们在看题目:i+=1的值为1,此时i为2,所以计算&后的表达式,首先计算+j=3的值为1,j的值为3,由上面的原理我们可知,|后面的表达式不用再计算,所以此时i,j,k的值分别为2,3,3。8、D 此题和题2非常的相似,也是考真假条件的转换,其中D项中只有k为0时,!k%2=1才成立,显然和A、B、C三项不同。9、C 此题主要是考if和else的配对问题。见教材P51。10、D 此题主要是考if和else的一般形式。if后面的语句要么是单条语句,要么是由 扩起来的复合语句,不能是if后有两条语句的,所以本题程序在运行的时候会出错。11、C 此题考到了关系运算和逻辑运算及一定数学知识。|x-y|10可等价为-10x-y10,首先选项A表示x-y的绝对值小于10,与题中的数学关系一样;将-10x-ya为真,所以(n=ba)为1,那么将不会去计算m=abc的值为0,所以不执行第一条语句;在判断第二个条件,c-1=c表达式的结果为假,所以也不执行其下面的语句,因此执行最后一条语句,将输出d+2的值为4 。17、C 此题主要是考查条件表达式和条件运算符。首先要注意条件表达式的结合方向,它是从右至左的(可参照附录三) 第一个条件表达式的值为a,第二个条件表达式的值为c ,而c=6,所以答案选C。18、A此题主要是考查if-else语句和条件表达式的转化。只要理解了if-else语句和条件表达式的运算规则的话,就很容易选出A19、D 此题主要是考查在switch语句中break和default的作用及break的适用范围。详细说明可参看教材第三章 P53对switch的说明部分。20、B此题考查的是条件表达式求解问题。先看第一个条件表达式语句,ac为假,所以k=k=2选 B21、A此题考查的是条件表达式的求解顺序。参照附录三可知,它的结合方向是自右至左,所以先求得右边一个条件表达式的值为2,再求得左边一个的值为1,即选A22、C此题考查的是真假条件的等价问题。x-y为真表示x-y是非0的,也即x-y0 即选C23 答案是BC语言的字符以其ASCII码的形式存在,所以要确定某个字符是大写字母,只要确定它的ASCII码在A和Z之间就可以了,选项A和C符合要求。大写字母的ASCII码值的范围为65到90,所以D选项符合要求,所以只有C是错误的。24 答案是B满足表达式(c=2&c=6)的整型变量c的值是2,3,4,5,6。当变量c的值不为2,4,6时,其值只能为3或5,所以表达式c!=3和c!=5中至少有一个为真,即不论c为何值,B选项中的表达式的值都为真,所以B选项正确。25 答案是A条件x=0|x=1为真,所以执行y=1,然后执行y=x*x-(x-2)*(x-2)=1-(-1)*(-1)=1-1=0,所以选择A。26 答案是B当表达式EXP为非0值时条件成立,即执行语句i+;当EXP等于0时执行语句j-;。这就等同于条件表达式“(EXP!=0)?i+:j”。所以本题选择B。27 答案是DC语言的字符以其ASCII码的形式存在,所以要确定某个字符是大写字母,只要确定它的ASCII码在A和Z之间就可以了,选项B的书写格式错误,而选项C不符合要求。大写字母的ASCII码值的范围为65到90,所以A选项不符合要求,小写字母的ASCII码比大写字母的ASCII码大32,所以只有D是正确的。28 答案是D奇数和2求余一定不为0,所以当x为奇数时,x%2=0是不成立的,值为0,此题选择D。29 答案是B两个if语句的判断条件都不满足,程序只执行了c=a这条语句,所以变量c的值等于3,变量b的值没有变化,程序输出的结果是3,5,3。所以本题选择B。30 答案是C表达式y%3=0的值为1,所以执行下面的输出语句,表达式y的值为8,所以输出结果是8。选择C。31 答案是C表达式x%3的值为2,非0所以执行下面的输出语句,将x-的值8输出,此时x的值变为7,然后再执行下一个输出语句,将-x的值6输出,x的值也变为6,所以选择C。32 答案是D这是嵌套形式的switch语句,因为break结构影响较大,而此程序中的第一个case后没有break语句,程序执行时,x=1,执行内嵌的switch语句,因y=0,执行a+,使变量a的值为1并终止内层switch结构,回到外层。程序继续执行case 2后面的语句a+;b+;,这使变量a,b的值分别为2和1,外层switch语句结束。所以此题选择D。33 答案是Dbreak与continue语句都可用于switch语句中。选择D。二、填空题1、答案是:10、20、0分析:多数同学得到的答案是10、20、1,显然是没有弄清楚第三条赋值语句:c=(a%b1).这是将后面一个逻辑表达式的值给c,那么关于逻辑表达式的考题,无非就是考察运算符的优先级,也就是说先算哪个,后算哪个的问题。在这个题里面,先计算第一个圆括号里面的内容,a%b的值是10,所以101为假。在逻辑或运算的时候,两个运算对象都为假,则结果为假。所以c的值为0.答案是:10、20、02、答案是: 1分析:程序中是一个ifelse结构。这个题最容易出错的地方在于if的条件,注意,里面的是c=a是一个赋值表达式,不是将c与a的值进行比较。所以条件为真,输出赋值以后c的值,为1。3、答案是:4,5,99分析:题中的重点在于两个if结构,大家要注意两点:第一,如果if后面没有花括号,则它后面的第一条语句是它的结构体,并且只有一条语句。(如果后面是一个结构,则整个结构都属于if结构的结构体)。第二,变量在不断的被重新赋值,所以其值在不断的变化。4、答案是:yes分析:该题与第二题是同一回事。5、答案是:1分析:这个题还上一个ifelse结构,考查点仍然是考察考生是否能够正确识别if后面括号里的表达式p=a!=0,根据运算符的优先级知道,这里应该先算a!=0,这是一个逻辑运算,a的值为5,所以a!=0为真,其逻辑值为1,将1赋值给p,所以条件为真,输出p的值,为1。6、答案是:20,0分析:见第3题分析。7、答案是:585858分析:题中有三个if结构,注意,这三个if结构是相互独立的,是互不相关的,只要他们的条件成立,就要执行其结构体(后面的输出语句)。通过键盘输入,得a的值为58,所以a50为真,输出58;然后判断a40,仍然为真,再输出58,最后判断a30,肯定为真,所以再输出58,连续三次输出58。8、答案是:0分析:本题的关键在于关系运算符的运算次序,a=5,b=4,c=3.abc看起来是真的,但是这这是数学里面是这样的,这里我们要一步一步的计算,先算ab,a确实大于b,所以为真,逻辑值为1,后面的计算就变成了1c,显然为假,逻辑值为0,并将它赋值给d,所以最后输出d的值为0。9、答案是:3分析:这个题主要考察条件运算符。程序要输出(P/30?p/10:p%3)这个条件表达式的值。P为30,所以p/3=10,100显然为真,所以整个表达式的值应该是p/10的值,p/10得3。10、答案是:2 1分析:题中是一个switch嵌套结构。里面的switch是case 1的语句,题的关键点在于这个语句(即里面的这个switch结构)的后面并没有跳出整个结构的break语句。所以,当x=1,与case相配以后,执行完后面的语句(即里面的这个switch结构),然后没有遇到break语句,所以并不跳出结构体,而是继续执行case 2后面的语句。所以最后得到的结果应该是2、1,而不是1、0。11、答案是:0字符空格的ASCII码不为0,所以本题中表达式!c的值为0,b=0&1的结果显然为0。12、答案是:1执行“j=!ch&i+”时,首先判断j=!ch的值,因为ch=$不为0,所以j=!ch=0,编译便不再计算表达式i+的值,i的值不变仍为1。13、答案是:-4表达式!n的值为1,所以执行x-=1后x=1;表达式m的值为非0值,所以执行其后的语句x-=2后x的值为-1,表达式x的值也为非0,所以执行其后的语句后x的值为-4,最后输出x的值即为-4。14、答案是:#&表达式c=5的值为真,所以表达式的值等于1,因此输出符号“#”,然后执行“break”,继而去执行“default:printf(“&”);”语句,输出符号“&”。15、答案是:1因为在条件表达式(ab)a:b中,比较表达式ab为真,所以x的值为a的值等于1。后面两个条件表达式中的比较表达式都真,所以最终x的值等于1。16、答案是:a:b、c:t1条件表达式类似于if语句,根据“?”前面子表达式的逻辑值来判断应该计算“:”前面的子表达式还是后面的作为整个条件表达式的结果。题目要求输出a、b、c3个变量中的最小值,所以当a7为真,执行循环体,n的值减1后为9,输出n的值9N的值为9,n7为真,执行循环体,n的值减1后为8,输出n的值8N的值为8,n7为真,执行循环体,n的值减1后为7,输出n的值7N的值为7,n7为假,结束循环。2、答案:Ak的值为5,进入循环,(-k)表达式的值为4(真),同时k的值改变为4,输出表达式k-=3的值1,同时k的值为1。k为1,表达式(k)的值为0, 结束循环。3、答案:AX=0,y=5,z=3,(z0&x0&x0&x0&x3-5-7-9,语句s+=1每次执行使s增加的数为:2,4,6,8,10,所以s的值为自然数110中偶数的值。10、答案:C分析:C项s=s+1/n, 1/n首先运算,n为整型变量,1也是整型变量,当n=210时,1/n的值为整数0,故C不正确11、答案:A执行第一次循环时,a= 7,b = 4,a!=b为真继续循环。第二次循环a = 3,b=1,a!=b为真继续循环。第三次循环a = 2,b = 1, a!=b为真继续循环。第四次循环a = 1,b=1,a!=b为假退出循环。12、答案:C13、答案:C分析:x的值为15。执行while循环,(x10)为真,执行循环体。执行x+;x的值为16。再执行if语句。(x%3)为真,执行x+,x的值为17,再执行break;语句,退出循环体,结束while语句的执行。最后输出x的值17。14、答案:D在循环中当x等于0,3,6,9时x%3等于0,这时会进入if语句执行printf语句,在输出前x会先自加。屏幕上输出14710。15、答案:D分析:continue语句会提前结束此次循环体的执行,不会结束整个for语句的执行。16、答案:2345选择中没有此答案。解析:本题注意的是在循环第一次进入switch语句的时候是执行的default后面的语句块,由于没有break,所以还会执行case2:case4:后面的语句。17、答案:A本题答案为A解析:A首先执行+n,判断条件表达式n=0为假退出循环。B条件表达式1永远为真是无限循环,C条件表达式n的值为10永远为真是无限循环,D没有条件表达式,所以没有退出条件,是无限循环。此题要注意的是0为假,非0为真。18、答案:Ado-while循环先执行后判断,先执行循环体中的printf语句输出n的值0,在while(i+)中i先执行再自加,所以while(i+)的等于while(0)为假退出循环。输出结果为 “0,0”。19、答案:D分析:第一次循环x=8,x%30,进入if语句输出x的值为8,然后x自减1,执行continue立即进行下次循环条件判断。第二次循环x=6,x%3=0,不进入if语句,执行if语句后面的printf(“%d,”,-x),x先自减1再输出得到5。第三次循环x=4,x%30,进入if语句输出x的值为4,然后x自减1,执行continue立即进行下次循环条件判断。第四次循环x=2,x%30,进入if语句,输出x的值为2,然后x自减1,执行continue立即进行下次循环条件判断。第五次循环x=0,判断表达式x0为假。结束循环输出结果为8,5,4,2。答案D20、C第一次循环y=9,y%3=0,进入if语句y先自减,输出y的值为8。第二次循环y=7,y%30,进入下次循环。第三次循环y=6,y%3=0,进入if语句y先自减,输出y的值为5。第四次循环y=4,y%30,进入下次循环。第五次循环y=3,y%3=0,进入if语句y先自减,输出y的值为2。第六次循环y=1,y%30,进入下次循环。第七次循环y=0,判断表达式y0为假结束循环。输出结果为8,5,2。答案C21、B在第一层循环中,当i自加到值等于3的时候才会进入第二层循环55%3=1。输出m的值为1.22、B外层循环3次,i的值在内层循环中依次为1,2,3内层循环次数依次为3,2,1次。23、D代码“if(n%3!=0) continue;”无实际意义。当n自加到4的时候结束循环。答案D24、B需要填入的实际是每行输出“*”的个数,从图形看到每行“*”的个数是行数的两倍减一,i可以代表行数。所以填入的是“2*i-1”。答案B25、A0%任何数等于0,所以第一次循环的时候就进入了if语句退出了for循环。i=21,i20为假,退出了while循环。a的值为21。26、Di的初值为0,第一次循环的时候满足i0,进入第一个if语句,执行continue直接进行下次循环,i的值没有改变。第二次循环又重复了第一次循环的操作,所以是死循环。二、填空题:1、答案:1分析:此题的循环体是省略了大括号的空语句、;,x的初值是2;执行while语句,先判断表达式的值,(x-)的值为1(真),同时x的值减1变为0,再执行循环体(空语句;),再判断表达式(x-)的值,表达式的值为0,同时x值减1,变为1,因为表达式的值为0(假),循环结束。最后输出x的值1。2、答案:11循环的判断表达式为i5,i的初值是1,所以i得值依次是1,2,3,4。sum=sum+1+2+3+4,sum的值等于11.答案是113、答案:n=n/10此题的解法是先用输入的数据%10可以得到个位数,再让输入的数据除以10,使十位变成个位。循环使用上面的方法。当只剩下个位的时候也就是n小于10的时候n/10等于0退出循环。所以填入的是“n=n/10”。4、答案:0分析:i的值从5变化到0时,for语句中的第二个表达式都为真。t=5*4*3*2*1*00。最后输出i的值为0。5、答案:5分析:for循环语句的循环体是空语句。6、答案:6分析:此题属于循环的嵌套。当i=1时,输出0个号,当i=2时,输出1个号,当i=3时,输出2个号,当i=,4时,输出3个号,共输出6个号。7、答案:0分析:getchar()只能获得单个字符,输入“1234567890”ch的值为1。循环条件为假,循环一次也没有执行。答案为:08、答案:23分析:参考第3题。答案:543219、答案:k=n、k+分析:见书59,64页while和for循环的执行过程。答案:k=n、k+10、答案: ACE分析:理解字符转化为整形数使用到ASCII码,a的ASCII码是97,f是102,A是65。答案是ACE11、答案:120分析:i的值是1,sum的值是1,执行while循环。i=5为真,sum的值为1,i自加1,值为2。i=5为真,sum的值为2,i自加1,值为3。i=5为真,sum的值为6,i自加1,值为4。i=5为真,sum的值为24,i自加1,值为5。i=5为真,sum的值为120,i自加1,值为6。i=5为假,结束循环。输出sum=120。12、答案: 23分析:此题需理解的是在switch中case后面没有break的话会继续执行下一个case或default后面的语句。答案为2313、答案:1 3 2分析:m=0,n=0,k=0,i=9当i值为9时,i=11为真,执行switch语句,(i/10)的值为0,匹配case 0,执行m+,n+,再执行break语句,跳出switch体,再执行i+, i值为10;此时m值为1,n的值为1,k的值为0.当i值为10时,i=11为真,执行switch语句,(i/10)的值为1,匹配default,执行k+,n+,结束switch体,执行i+,i值为11. 此时m值为1,n的值为2,k的值为1.当i值为11时,i=11为真,执行switch语句,(i/10)的值为1,匹配default,执行k+,n+,结束 switch体,执行i+,i值为12. 此时m值为1,n的值为3,k的值为2.i值为12时,i=11为假,结束for循环。最后输出m,n,k的值132.14、答案: i10、i%3根据题意先得到100以内

温馨提示

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

评论

0/150

提交评论