计算机二级笔试宝典习题答案与详解.doc_第1页
计算机二级笔试宝典习题答案与详解.doc_第2页
计算机二级笔试宝典习题答案与详解.doc_第3页
计算机二级笔试宝典习题答案与详解.doc_第4页
计算机二级笔试宝典习题答案与详解.doc_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

培恩IT教育系列教材-习题详解-第一章 C语言基础知识一、选择题1【A】分析:C语言中,标志符包括:关键字、预定义标识符、和用户标识符。其中我们常用的关键字只有30来个,也就是说要学好C语言,我们只需要记住30来个单词就可以了。用户标识符由字母、数字和_组成标识符只能由字母、数字和下划线组成;其第一个字符必须是字母或下划线;标识符区分大小写字母。如int与Int是两个完全不同的标识符。2【B】3【B】分析:if为关键字,肯定不能做为用户标识符。预定义标识符可以作为“用户标识符”使用,只是这将使这些标识符失去系统规定的原意,所以一般也不要将预定义标识符作为“用户标识符”使用。4【D】分析:sizeof为关键字,不能做为用户标识符。5【D】分析:用户标识符命名规则里规定,不能以数字开头。6【B】分析:与第5题类似。7【C】分析:与第5题类似。8【D】分析:int为关键字,所以不能定义为用户标识符,但是scanf为预定义标识符,最好也不要用做用户标识符。9【B】分析:A选项long为关键字;C选项以数字5开头;D选项中包括非法的。10【A】分析:A选项中包括非法的。11【C】分析:C选项中以数字开头。12【A】分析:B选项中包含非法的;C选项中以数字开头;D选项中包含关键字。13【D】分析:该题有误,D)float USS 应该为D)float U$。由于D选项包含非法字符$,所以答案为D。14【A】分析:B选项中赋值运算符的左边不能是表达式;C选项中赋值运算符的左边不能是表达式;D选项中C语言中强制类型转换的正确格式应该为“(类型名)表达式”,即应该为(double)(x)/10。15【A】分析:运算符的运算对象必须是整型,是和的复合运算符,所以其运算对象也必须是整型。16【C】分析:字符型变量可以被赋予单个字符和小于128的整型数据,当是整型数据时,相当于是对应字符的ACSII码值。字符是用 括起来的单个字符。17【B】分析:在C语言中无“:=”运算符,故A错误,C选项中int 18.5%3应该为(int) 18.5%3;D选项中赋值运算符的左边不能是表达式。18【B】19【B】分析:B选项中八进制中不能出现数字8。20【D】分析:十六进制数只能以0X或0x开头,不能以oX开头。21【C】分析:本题考查指数的表示形式,选项A中E后面只能是整数,0.5是小数;选项B 中E后面不能为空;选项D中E前面不能为空。22【C】分析:本题考查指数的表示形式,选项A中E后面只能是整数,5.0是小数;选项B 中E前面不能为空;选项D中E后面不能为空。23【A】分析:选项B中八进制中不能出现数字8,选项C中e后面不能是小数,选项D中e后面不能为空。24【B】分析:选项B中e后面是小数0.4,所以非法。25【B】分析:字符是用 括起来的单个字符字符常量是,B选项其实是一个转义字符。26【B】分析:选项B中e后面只能是整数,0.5是小数。27【D】分析:选项D中赋值运算符的左边不能是表达式。28【C】分析:选项C中E后面只能是整数,0.5是小数。29【D】分析:3.6-5/2+1.2+5%2=3.6-2+1.2+1=3.8,本题目考察算术运算符,需要注意整数除以整数结果只能是整数。30【C】分析: a+=a-=9 a=3 a+=-6 a=-6 a=a+(-6) a=-1231【A】分析:A选项中最右边的赋值符号的左边不能为表达式,只能是变量,故A不正确。32【A】分析:本题考查C语言中的注释,程序中以“/*”开头并且以“*/”结尾的部分表示程序的注释部分。计算机运行程序时,完全不理会程序的注释部分,这部分将被完全忽略掉。 因此/*给a赋值 b=20; 给b赋值 */不被运行,所以a =10,b=0;答案为A。33【B】分析:选项A中n2没有定义,选项C中在定义f之前不能使用它,选项D中E后面必须是整数。34【C】分析:选项C的强制类型转换int(f)应该为(int)f。35【D】分析:本题考查自增(自减)运算符:自增运算符在变量之前时,变量的值加1,表达式的值为变量的值加1,自增运算符在变量之后时,变量的值加1,表达式的值为原变量的值。自减运算符类似。 printf(%d%d,+m, n+); 输出的值为13 34 m=13 n=35 printf(%d%dn,-n,-m); 输出的值为34 12 n=34 m=1236【C】分析:A选项中的运算对象只能时整数;B选项的赋值运算符的左边不能是表达式;D选项的赋值运算符的左边不能是表达式。37【B】分析:语句必须以;结束,而A选项没有;号;C选项没有赋值符号=,因此不构成赋值表达式;D选项的强制类型转换应该为(int)(a+b)。38【B】分析:本题考查运算规则,*和/运算符的运算规则为从左到右运算。当/运算符的运算对象为整型时,结果一定为整型,所以1/2=0。39【D】分析:自加、自减运算符的运算对象可以是char型变量、int型变量和float型变量,但不能是常量。40【A】41【B】分析:当运算符/的运算对象都是整型时,结果一定是整型,所以8/5=1,1+0.4结果为1.4,当1.4赋值给c时, 因为c是整型,只能存储整型数据,系统会自动将.14转换为整型数据1,再将1赋值给c, 答案为B。42【D】分析:(int)a+b/b=(int)5.5+2.5/2.5=5+1.000000=b=6.000000,答案为D。43【D】分析:当/运算符的运算对象为整型时,结果一定为整型。y=x+3/2=x+1=3.000000。答案为D。44【A】分析:1.0/c2*c1=1.0/2*1=0.5*1=0.5,由于c3为整型,0.5转换为0,再赋值给c3,所以c3的值为0。45【D】46【A】分析:本题考点与第35题类似,x+ * 1/3=11*1/3=3。47【D】分析:D选项中的$不是标识符的合法符号,标识符只能有字母、数字和下划线组成。48【A】分析:因为赋值运算符的左边不能是表达式,B和C选项错误;D选项中的强制类型转换int(x)应该为(int)x。49【C】50【A】分析:本题考查转义字符。转义字符是用“”后面跟八进制或十六制数来表示一个字符。51【C】分析:本题考查十进制和十六进制之间的转换。52【D】分析:通过#define d 2,d为一常量,由于自增(自减)运算符的运算对象不能是常量,所以答案为D。53【C】分析:根据各进制数的规则很容易得出答案。54【A】分析:A选项应该为,具体查看书本上的转义字符。55【D】分析:与第54题类似,具体查看书本上的转义字符。56【D】57【C】分析:字符常量是 括起来的单个字符或转义字符。二、填空题18.9分析:7+3.8/2=7+1.9=8.92关键字 预定义标识符 用户标识符384八 十 十六5int float double616 17分析:本题考查自增运算符,a+表达式的值是a变化之前的值,a变量本身加1。第二章 顺序结构 一、填空题1【B】分析:A选项,printf函数可以没有输出项,当没有输出项时,函数输出“”括起来的字符串;C选项,在C语言中,整数可以以十进制、八进制或十六进制的形式输出,但不能以二进制的形式输出;D选项,调用getchar函数读入字符时,只能从键盘上输入字符。所以答案选B。2【C】分析:C选项错误:随意使用空语句将会导致逻辑错误。3【D】 分析:在C语言中,所有的变量都必须先定义后使用,而在本程序中,变量在使用之前没有定义,所以会出现编译错误,答案为D。该程序的修改有两种方法:1、在定义变量s时,同时定义变量,并初始化为3.14;2、在程序最前面使用宏定义define 3.14。4【D】 分析:该printf函数的输出项为逗号表达式,根据printf函数的定义,没有语法错误;在上一章,我们学习了,逗号表达式的值为最后一个表达式的值,所以表达式(x, y)的值为y的值,即2003,因此答案为D。5【A】 分析:本题主要考查数据的表示方式,和printf函数的格式控制。d表示以十进制输出数据,o表示以八进制输出数据,m的值是以十进制表示的,所以以原样输出,n的值是以八进制表示的,所以也以原样输出,答案为A。6【C】分析:同上题一样,本题也是考查数据的表示方式,和printf函数的格式控制。X表示以十六进制输出数据,通过计算,m的值为十六进制的0,所以答案为C。通过该题我们必须注意一点,不管以十进制、八进制还是以十六进制输出数据时,数据前面不会有0、0x。7【B】分析:本题考查自增、自减运算符,以及printf函数的输出项。从printf函数的一定可以知道,当输出项为表达式时,输出该表达式的值;自加(自减)在变量之前时,表达式的值为变量加1以后的值,自加(自减)在变量之后时,表达式的值为变量的原始值,答案为B。8【C】分析:本题考查点与第5、6题类似,只是n的值是以十进制表示的,但却是以八进制输出的,所以要先转化为八进制,即为0400,所以答案为C。9【B】分析:printf函数的定义:当输出格式说明个数少于输出项时,那么多余的输出项不输出。所以只输出666,答案为B。10【C】分析:012转为十进制为10,再以指定的两位格式输出为10;十进制102有三位,指定位数是两位。当指定格式的位数少于输出数据的位数时,按实际数的位数输出,即输出102,答案为C。11【B】分析: a=f/=c*=(x=6.5) a=f/=c*=6.5 x=6.5 a=f/=65 c=65 a=100.0/65=1 f=100.0/65=1.5 a=1,c=65,f=1.5,x=6.512【B】分析:本题考查长整形变量的输出格式。%和d中间必须加l(L的小写)。13【C】分析: m=(k+=i*=k) m=(k+=i=2*2=4) i=4 m=(k=2+4=6) k=6 m=6答案为C。14【C】分析:同10题类似,当指定格式的位数少于输出数据的位数时,按实际数的位数输出,即输出1234。答案为C。15【D】分析:自加(自减)运算符,根据“符号在前,先加减后使用;符号在后,先使用后加减。”进行计算 x=-m+ x=-3,m=4 x=x+8/+n x=-3+8/5=-2 x=-2 答案为D。16【D】分析:从scanf函数的定义可以得出答案。17【A】 分析:在scanf()函数中,“”括起来的格式说明中,除了输入格式控制之外,其它的都要原样输入,所以答案为A。18【A】 分析:本题考查的与第17题一样,在scanf()函数中,“”括起来的格式说明中”,”要原样输入,所以答案选A。19【C】分析:本题考查运算符的优先级和简单的编程思想,大家通过答案反过来推敲以知道如何形成解决一个问题的编程思想。 20【A】分析:由getchar()函数的定义可得知答案,请大家理解透该函数的定义。21【A】分析:用scanf()函数输入字符型数据,当输入格式为d时,等于输入以该整型数据为ASCII码值的字符,所以答案为A。22【B】分析:A:main()函数后面不能有;号;C:注释以/* */成对括起来的;D:命令行必须以号开始。所以答案为B。23【C】分析:本题考查的知识点与第17、18题一样,只不过时一种逆向思维。24【B】分析:输入的是876 543.0,由于输入格式说明中指定了a的位数为两位,所以计算机会把87分配给a;接着计算机继续把6分配给b,由于6后面输入的是空格,计算机认为分配结束.同时把6转为6.000000(b是实型变量)25【A】分析:本题与第7、15题类似。26【D】分析:在prinf()函数的格式控制中,两个连着写的%,计算机会输出一个%,接下来的d原样输出。所以答案为D。27【B】分析:该题是考查scanf()函数的输入格式控制,以及后面的数组的知识,将在后面详细讲解。28【A】分析:此题不好解析,大家只要记住这一点,并在以后学习过程中注意就可以了。29【A】分析:scanf()函数的定义:输入项为变量的地址,所以选项A,B错误;本题还牵涉到指针变量的概念,后面将会学习到,变量d其实是一个指针变量,指针变量其实就是储存一个变量的地址,所以选项B错误。30【D】分析:此题和第7题类似。31【D】分析:此题考查自减运算符、逗号运算符和printf()函数的概念,前两个知识点,在前面的题目中,我们已经讲述过了;当printf()函数的输出项为表达式时,输出的是该表达式的值,对于表达式z1的值为3,所以答案为D。32【B】分析:本题只要很好地理解scanf()函数的定义,很容易得出答案。33【A】分析:本题有误:“不正确的输入形式”应该改为“正确的输入形式”。只要很好地理解scanf()函数的定义,很容易知道答案为A。本题还考查了一个知识点,那就是分隔符,在C语言中,有三类分隔符,分别是:回车、空格和tab键。34【D】分析:先计算a*a的值为9,再计算a-=9(此时a的值是3),计算后a的值为6,整个表达式(a-=a*a)的值是-6, 然后计算a加上表达式的值(此时a的值为-6),输出结果为-1235【A】分析:表达式c-25相当于字符c的ASCII值减25,当以c的格式输出时,相当于输出ASCII值为c-25的字符,所以答案为A。36【B】分析:gets()函数可以从键盘读入含有空格字符的字符串,它以回车为输入结束的标志。37【C】38【C】分析:由于x为int型变量,所以x=1.2后,x的实际值为1;由于y也是int型变量,所以y=(x+3.8)/5.0后,y的值为0。因此d*y的值为0,答案为C。39【A】分析:此题考查算术运算符号“/”的使用,由于“/”的运算对象为整型,所以其结果只能是整型,20/36,答案为A。40【A】分析:与第35题类似。41【B】分析:printf()函数的定义:“”括起来的部分除了d之外其它的原样输出。42【C】分析:本题考查转义字符,b是退格符,所以遇到b,就会把前面一个字符删除掉,、为转义字符,分别输出和,所以答案为C。43【C】分析:本题不好用文字表述,请大家通过编译器调试看结果,并记住这个知识点。二、填空题188分析:0210转为十六进制为8821分析:本题涉及到第三章选择结构的内容,将在第三章讲述。32 20.000000分析: x=f*=n/=(c=50) c=50 x=f*=n/=50 x=f*=2 n=2 x=20.0 f=20.0本题需要注意的地方,当以f格式输出的时候,小数点后保留6位。411分析:9转为8进制是11525 21 37分析:本题考查十进制、八进制和十六进制之间的相互转化,输出格式中的空格对应输出。67分析:a=H-A+0 a=7+0,所以以c格式输出时,结构为字符7。71 B分析:运行a=getchar(); scanf(%d,&b);后,a=B, b=33,其它的运算和第6题类似。8n1=%dnn2=%d分析:从输出结果中可知:n1= n2=必须在相应位置输入,并且输出n1后要换行。这种题目在考试时(笔试和机试)经常出现,大家一定要多加训练。9i=10,j=20回车分析:scanf()函数中,除了d之外,其它的都要原样输入。10B 66分析:字符A的ACSII码值为65,所以字符B的ACSII码值为66,当以d格式输出ch时,即输出66。11b分析:相同字符的小写的ACSII码值比大写的ACSII码值大32。12261分析:177转为8进制是26113-3分析:运算符的操作必须时整数(正整数和负整数)。1416分析:赋值运算符的运算规则为从左往右。 a+=(a=8) a+=8 a=8 a=16 152, 1分析: a=a+b a=3 b=2 b=a-b a=3 b=1 a=a-b a=2 b=1该类题必须小心,千万不能忘记“,”号,否则为0分。1610300分析:%*d表示忽略一个数的输入,10赋值给i, 20被忽略,30赋值给j,而k未获得新的值,保持原值0,所出输出10300。 1712分析:输入时,12分析作为字符1和2赋值给ch1和ch2。第三章 选择结构一、选择题1【B】分析:此题主要考察逻辑运算。首先x=1, y=1,那么!x为0,y-是-在后,则先使用后自减,y的值就是表达式y-的值,为1。因此!x|y-等价于0|1,结果为1。2【D】分析:此题主要是考语句的特征。一条语句只包含一个分号,D项有两个分号,应该是两条语句,所以选D。if(b=0) m=1;是条if语句,n=2;是条赋值语句。3【D】分析:此题主要是考逻辑运算和关系运算的优先级别.掌握!、算术运算符和&的优先级别依次降低。4【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。5【D】分析:此题是考真假条件的转换,其中D项中只有k为0时,!k%2=1才成立,显然和A、B、C三项不同。6【A】分析:此题主要是考逻辑运算符!、&和|之间的优先级别。!最高,&次之,|最低。先求得!a为0,所以不必计算!b的值,即!a&!b的值为0,由c=0,!c=1,而0|1=1,所以选A。7【C】分析:此题考到了关系运算和逻辑运算及一定数学知识。|x-y|10可等价为-10x-y10,首先选项A表示x-y的绝对值小于10,与题中的数学关系一样;将-10x-ya为真,所以(n=ba)为1,那么将不会去计算m=ab的值,k被并赋值1,所以m依然为0 。答案选C。9【D】分析:此题考到if-else语句。A、B、C三项都是表示a为真时输出x,为假时输出y,而D则是a为假时输出x,为真时输出y。10【C】分析:此题主要是考查if-else-if和if语句。A选项,ca为假,ba也为假,所以最后执行x=3;。B选项,a3为真,执行x=3;。C选项,a3为真,执行x=3;然后a2也为真,执行x=2; abc的值为0,所以不执行其后的语句;在判断第二个条件,c-1=d表达式的结果为真,所以执行其下面的语句,那么将输出d+1的值为3 ,所以选答案B。14【D】分析:此题主要考查if,else的配对问题。这里在if后面跟了两条语句,其中第一条是if的子句,第二条是条独立的语句,这样第二条语句就夹在了if和else之间,使得else找不到和它配对的if。所以程序会出错。15【C】分析:请大家记住:else总是和之前与其最近的且不带else的if配对。16【A】分析:此题考查的是条件表达式的求解顺序。参照附录可知,它的结合方向是自右至左,所以先求得右边一个条件表达式的值为2,再求得左边一个的值为1,即选A。17【B】分析:此题考查的是条件表达式求解问题。先看第一个条件表达式语句,ac为假,所以条件表达式等价于k=k;所以答案选 B。18【C】分析:此题考查的是真假条件的等价问题。x-y为真表示x-y是非0的,也即x-y0。所以答案选C。19【C】分析:此题主要是考查条件表达式和条件运算符。首先求括号内条件表达式ac?a:c的值为c,那么整个表达式就等价于d=ab?c:b;求解这个条件表达式得d=c,所以答案选C 。20【D】分析:此题主要是考查在switch语句中break和default的作用及break的适用范围。break语句可以在switch语句中使用也可以在循环结构中使用,只能在这两个地方使用。switch语句中可以有default也可以没有。switch语句中可以有break语句也可以没有。21【D】分析:此题主要考查switch语句的语法规则。A选项错在swich(a+b); 这里多了一个分号。请大家注意switch后圆括号中的表达式的值必须是整型或字符型,不能为实型。B选项错在有两个case3。C选项case后面只能是常量表达式,而这里出现变量,所以错误。答案选D。22【C】分析:同21题。23【A】分析:此题主要考查if和else配对问题。此题关键就是else是与第二个if配对组成一条if-else语句。因此首先判断ab为假,那么跳过其子句,即if-else语句,直接执行最后一条printf语句,将d输出。因此答案选A。二、填空题110 20 0分析:此题多数同学会得到的答案是10 20 1,显然是没有弄清楚第三条赋值语句:c=(a%b1).这是将后面一个逻辑表达式的值给c。先计算第一个圆括号里面的内容,a%b的值是10(而不是0),所以101为假。在逻辑或运算的时候,两个运算对象都为假,则结果为假。所以c的值为0.答案是:10 20 020分析:此题主要考查关系表达式。我们主要就是要计算abc的值,首先ab为真,其值为1,那么1c为假,所以整个表达式为假,其值为0。所以d为0。3585858分析:此题考查if语句。首先scanf语句使a的值为58,接着执行后面三条if语句,这三个if结构是相互独立的,是互不相关的,只要他们的条件成立,就要执行其子句。a50、a40、a30、都为真,所以执行printf三次,a被输出3次。4yes分析:此题考查if-else语句。赋值表达式c=a+b的值就是左边变量的值,为4,那么表达式为真,所以执行其后的printf语句,将yes输出。520,0分析:此题关键点if的子句只能是一条语句或一条复合语句,表达式x=y为假,跳过if子句t=x;,接着继续执行x=y;y=t;,因此最后x为20,y为0。64,5,99分析:同上题。7-4分析:此题考查if语句。首先第一条if语句n=0那么!n为真,执行x-=1;使x值为1,接着第二条if语句m为1条件为真,执行x-=2;使x值为-1,再执行第三条if语句,x为-1条件为真,执行x-=3;使x值为-4。最后执行printf将-4输出。84分析:从键盘得到x的值为5,那么判断表达式x-0?p/10:p%3)这个条件表达式的值。P为30,所以p/3=10,100显然为真,所以整个表达式的值应该是p/10的值,p/10得3。101分析:此题考查if-else语句。因为a为5,a!=0为真,所以p=a!=0等价与p1,整个表达式p=a!=0为真,执行if子句,将p输出,输出为1。112 1分析:此题考查switch语句的嵌套。x为1,则外层switch语句选择case1,case1又是一个switch语句,y为0,执行case0的a+使a的值变为1,然后执行break语句跳出内层的switch的语句,接着执行外层switch语句的case2,a+;b+;使a的值变为2,b的值变为1,然后执行break语句跳出外层的switch语句。最后执行printf语句将a,b输出,输出为2 1。12a+bc& a+cb& b+ca分析:此题是逻辑预算和if语句的结合。题目的提示很明显,构成三角形的条件是需要同时满足三条件:a+bc,a+cb,b+ca,程序中的if的条件就是构成三角形的条件,所以我们填入a+bc& a+cb& b+ca。这里大家注意同时满足条件我们需要用与逻辑,任意满足一个条件我们需要用或逻辑。第四章 循环结构一、 选择题1【A】分析:此题考查while循环。第一轮循环,k的值为5,进入循环,(-k)表达式的值为4(真),同时k的值改变为4,输出表达式k-=3的值1,同时k的值为1。第二轮循环,k为1,表达式(-k)的值为0, 结束循环。所以选A。2【C】分析:此题是条件等价的问题。当E不等于0是条件为真,E等于0时条件为假。因此只有E=0不符合上述条件。所以答案选C。3【B】分析:此题考查while循环。第一轮循环,n为9,n6为真,执行n-;使n值变为8,接着执行printf语句输出8。第二轮循环,n为8,n6为真,执行n-;使n值变为7,接着执行printf语句输出7。第三轮循环,n为7,n6为真,执行n-;使n值变为6,接着执行printf语句输出6。此时n为6,n6为假,结束循环。所以选B。4【D】分析:此题是while循环和switch语句的结合。第一轮循环,k为5,k0为真,执行switch语句,没有case5,所以执行default的break语句跳出switch语句(注意是跳出switch语句),接着执行k-;使k值变为4。第二轮循环,k为4,k0为真,执行switch语句,没有case4,所以执行default的break语句跳出switch语句,接着执行k-;使k值变为3。第三轮循环,k为3,k0为真,执行switch语句,执行case3的n+=k;使n值变为3,接着执行k-;使k值变为2。第四轮循环,k为2,k0为真,执行switch语句,执行case2没有任何语句,那么什么都不做,因为没有break语句所以要继续执行case3的n+=k;使n值变为5,接着执行k-;使k值变为1。第五轮循环,k为1,k0为真,执行switch语句,执行case1的n+=k;使n值变为6,因为没有break语句所以要继续执行case2(什么都不做),和case3的n+=k;使n值变为7,接着执行k-;使k值变为0。此时k为0,k0为假,跳出循环,执行printf语句,将n输出,为7。所以答案选D。5【A】分析:此题是考查while循环。第一轮循环,x为0,y为5,z为3, (z0&x0&x0&x0&x4)为假,跳出循环,执行printf语句,将x,y,z输出,所以答案选A。6【D】分析:while循环,do-while循环,for循环三种循环可以相互转换。do-while循环,在while后的表达式为零时结束循环,使用break语句也可以强制结束。7【C】分析:此题考查do-while循环。do-while循环一定会先执行循环体一次,执行printf语句,x-=2的值为1,输出为1。此时-x的值为0,x的值变为0,所以!(-x)为真。进入第二轮循环,执行printf语句,x-=2的值为-2,输出-2。此时-x的值为-3,所以!(-x)为假。跳出循环。所以答案选C。8【B】分析:此题考查do-while循环。因为循环体中有语句s+=1;,s的初值为0,若要使程序的输出值为2,那么循环体要执行两次。因此在第二轮循环结束后,a!=n因该为假,执行两次循环就是执行a=a-2;两次后a的值为-3,所以n的值应为-3。答案选B。9【C】分析:此题考查for循环。i为1,i3-5-7-9,语句s+=i+1每次执行使s增加的数为:2,4,6,8,10,所以s的值为自然数110中偶数的值。11【B】分析:B选项每次进入循环体,都要先执行p=1;即1赋值给p.所以不能求出5!的值。12【C】分析:C项s=s+1/n, 1/n首先运算,n为整型变量,1也是整型变量,当n=210时,1/n的值都为整数0,故C不正确。13【C】分析:本题考察点在for循环的基本概念和switch语句的基本知识。构成for循环的循环体的是一个switch语句。首先i的值为0,进入第一轮循环。在switch语句中,符合case 0的条件,输出i的值,即输出一个0。根据switch语句的性质,在case后面没有break语句,还要继续完成下面的case后的各个语句,直到遇到break或者switch语句结束为止。因此还需要完成case 2后面的输出,再次输出一个0,同理,default后面的输出i也要执行。第一轮循环输出了000。i自加为1,进入第二轮循环。没有匹配的case,执行default后面的输出。第二轮循环输出了一个1。i自加为2,进入第三轮循环,执行case 2后面的输出,并执行default后面的输出。第三轮循环输出了22。i自加为3,i3为假,跳出for循环。因此,程序最后输出的结果是000122。答案选择C。14无分析:此题分析同13题。有印刷错误,最后答案为41。没有这个选项。15【D】分析:变量i的值为0,执行while循环,表达式(i10)为真,进入循环体,执行if(i1) continue; 表达式(i1)为真,执行continue; 提前结束此轮循环体的执行(后面两语句不执行),再判断表达式(i10)的值,为真,进入循环体,执行if(i1) continue; 因为i的值为0,没改变,表达式(i1)仍为真,执行continue; 提前结束此轮循环体的执行(后面两语句不执行),再判断表达式(i10)的值,为真,进入循环体。就这样程序一直执行循环,进入死循环。16【D】分析:首先for (;)三个表达式都缺省,那么循环无条件执行。第一轮循环,i为0,i=3|i=5为假,i=6也为假,执行i+使i变为1,执行s+=i使s变为1。第二轮循环,i为1,i=3|i=5为假,i=6也为假,执行i+使i变为2,执行s+=i使s变为3。第三轮循环,i为2,i=3|i=5为假,i=6也为假,执行i+使i变为3,执行s+=i使s变为6。第四轮循环,i为3,i=3|i=5为真,执行continue会提前结束此次循环体的执行,不会结束整个for语句的执行。此后的分析同15题。17【A】分析:此题while循环嵌套了for循环。第一轮循环,i为0,i20为真,进入for循环无条件执行,i%10=0为真,执行break语句结束整个for循环。接着执行i+=21使i变为21,执行a+=i使a变为21。第二轮循环,i为21,i20为假,循环结束。所以答案选A。18【C】分析:此题题目印刷有问题。应该是i+%5=0, +i%8=0此题的分析思路应该是只有当i+%5=0, +i%8=0都为真的时候才会将i输出。我们对四个选项进行分析,如果A选项24正确,那么因为判断的时候i自加了两次,所以i进入循环体的值为22,那么i+%5=0就为假了。所以A选项不对。分析C选项32,那么进入循环时,i为30,则i+%5=0, +i%8=0都为真,所以答案选C。19【B】分析:此题是for嵌套。每执行一次最外层的for(i=1;i=4;i+)这个循环就输出一行,内层第一个for循环for(j=1;j=4-i;j+) printf( );是输出此行的空格,内层第二个for循环for(j=1;j=_;j+) printf(*);是输出此行的*号。第一行应该是先输出3个空格,然后输出一个*号,最后输出换行符。那么分析第一行i为1,进入内层第一个for循环,那么for(j=1;j=4-i;j+)等价于for(j=1;j=3;j+)可以看出循环执行三次,输出三个空格。进入第二个for循环for(j=1;j=_;j+)它只执行一次,空白处值应为1。依此分析后面三行,空白处值应分别为3、5、7。所以答案选B。二、 填空题1y=-1分析:本题需要注意的是while(y-)后面紧跟一个分号,它表示while循环的循环体部分是一个空语句,而不是printf语句。考察点在循环结束的标志,应特别加以注意。(1)程序首先将y的值初始化为10。进入while循环后,表达式y-的值为10,即为真,执行空循环体,此时y的值为9。第一轮循环结束。(2)进入第二轮循环,y-的值为9,表达式仍然为真,继续执行空循环体,此时y的值为8。第二轮循环结束。(3)如此反复,直到进入第十轮循环。y-的值为1,表达式为真,继续执行空循环体,此时y的值为0,第十轮循环结束。(4)进入第十一轮循环,y-的值为0,表达式为假,不执行空循环体,此时y的值为-1,跳出while循环。最后得到y的值为-1。28921分析:从键盘上输入1298,n2为1298,进入while循环。第一轮循环,n2!=0为真,进入循环体,执行n1=n2%10使n1赋为8,执行n2=n2/10使n2赋为129,将n1输出,输出8。第二轮循环,n2!=0为真,进入循环体,执行n1=n2%10使n1赋为9,执行n2=n2/10使n2赋为12,将n1输出,输出9。第三轮循环,n2!=0为真,进入循环体,执行n1=n2%10使n1赋为2,执行n2=n2/10使n2赋为1,将n1输出,输出2。第四轮循环,n2!=0为真,进入循环体,执行n1=n2%10使n1赋为1,执行n2=n2/10使n2赋为0,将n1输出,输出1。此时n2!=0为假,循环结束。输出为8921。30分析:i的值从5变化到0时,for语句中的第二个表达式都为真。t=5*4*3*2*1*00。45分析:for循环语句的循环体是空语句;第一轮循环,s为0,i为1,i3为真,执行空语句,然后执行i+使i变为2,s+=i使s变为2。第二轮循环,s为2,i为2,i3为真,执行空语句,然后执行i+使i变为3,s+=i使s变为5。此时i3为假,循环结束。输出s为5。56分析:此题属于循环的嵌套。当i=1时,j=i为假,输出0个号,当i=2时,j=2,内存循环执行一次输出1个号,依此分析,当i=3时,输出2个号,当i=,4时,输出3个号,共输出6个号。大家特别注意每次进入内层循环j都没有赋初值为2。6i10 j%3(或j%3!=0)分析:从j=i*10+6可以看出当i从1变化9时,就把100以内个位数为6的所有整数都选出来了。if( )continue;这条if语句很明显是判断是否能被3整除,如果不能则执行continue,去判断下一个数。所以填入条件j%3(或j%3!=0)。7132分析: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,i10 & x0或j=1 i分析:此题是循环嵌套。外层的这个for(j=4; ; j-)循环,控制输出的行数。输出为4行,所以填入j0或j=1。内层的for(i=1; i=4; i+)循环控制每行的元素个数。x=(j-1)*4 + ;这条语句就是要求出每个元素的值。当j从4变化到1时,(j-1)*4的值分别为12,8,4,0。从元素的值可以看出每行的元素都是依此增1,正好符合i的变化规律,所以第二空填入i。第五章 指针一、选择题1【C】分析:+运算符对指针没有意义。2【A】分析:p,q是指针变量存放着n2,n1的地址。*p等价于n2,*q等价于n1。所以与n2=n1;语句等价的是*p=*q;3【B】分析:p是指针变量存放着x的地址。*p等价于x。因此输出*p就是输出x的值为0。4【D】分析:此题考查类型是否符合的问题。我们之前学过的整型,实型,字符型变量都是值级别的变量,存放的是一个值。而今天学习的指针变量是存放地址的变量,是地址级别的变量。p是地址级别,*p等价于n就是值级别了。所以只有D错误,p为地址级别,n是值级别。之后我们还会遇到地址的地址级别。5【D】分析:同第3题6【A】分析:NULL就是0,内存单元最开始的地方,地址为0的那一点,它没有对应的内存单元。7【C】分析:A,B选项错在,定义了指针,但是没有初始化就使用,也就是说你并不知道这个指针指向哪个内存单元,就想通过指针访问该内存单元。D选项错在s=p;这里s和p的类型不一致。8【B】分析:p指向a,*p等价于a为10,所以a=*p+b;等价于a=10+1;。答案选B。9【D】分析:A,B选项错在,NULL是一个特殊地址,它是地址为0的那一点,它没有对应的内存单元,因此不能通过NULL访问到内存单元。C选项错在*c是值级别了不能存放地址。D答案0这个转义字符就是0的意思,L=0等价于L=NULL。正确。10【B】分析:同第2题。11【C】分析:此程序定义了两个整型变量a和b,并且定义了三个基类型为整型的指针变量p、q和r。然后将整型变量a的地址赋给指针变量p,将整型变量b的地址赋给指针变量q。接下来,语句r=p;是将指针变量p中存放的地址赋给指针变量r,则指针变量r也存放了整型变量a的地址,然后语句p=q;是将指针变量q中存放的地址赋给了指针变量p,则指针变量p中存放的是整型变量b的地址,即指针变量p指向了整型变量b,语句q=r;是将整型变量a的地址赋给指针变量q,则指针变量q指向了整型变量a。最后通过printf语句依次输出指针变量p,q所指向的存储单元中的值和变量a,b中的值,应为8,7,7,8。12【A】分析:scan

温馨提示

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

评论

0/150

提交评论