- 335.50 KB
- 2022-04-22 11:17:51 发布
- 1、本文档共5页,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
- 文档侵权举报电话:19940600175。
'培恩IT教育系列教材-习题详解-www.born365.cn第一章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)floatUSS应该为D)floatU$$。由于D选项包含非法字符$,所以答案为D。14.【A】分析:B选项中赋值运算符的左边不能是表达式;C选项中赋值运算符的左边不能是表达式;D选项中C语言中强制类型转换的正确格式应该为“(类型名)表达式”,即应该为(double)(x)/10。15.【A】分析:%运算符的运算对象必须是整型,%=是%和=的复合运算符,所以其运算对象也必须是整型。16.【C】分析:字符型变量可以被赋予单个字符和小于128的整型数据,当是整型数据时,相当于是对应字符的ACSII码值。字符是用""括起来的单个字符。17.【B】分析:在C语言中无“:=”运算符,故A错误,C选项中int18.5%3应该为(int)18.5%3;D选项中赋值运算符的左边不能是表达式。18.【B】46
培恩IT教育系列教材-习题详解-www.born365.cn19.【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-=9a=3②a+=-6a=-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++);输出的值为1334m=13n=35②printf("%d%dn",--n,--m);输出的值为3412n=34m=1246
培恩IT教育系列教材-习题详解-www.born365.cn36.【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】分析:通过#defined2,d为一常量,由于自增(自减)运算符的运算对象不能是常量,所以答案为D。53.【C】分析:根据各进制数的规则很容易得出答案。54.【A】分析:A选项应该为"\",具体查看书本上的转义字符。55.【D】分析:与第54题类似,具体查看书本上的转义字符。56.【D】57.【C】46
培恩IT教育系列教材-习题详解-www.born365.cn分析:字符常量是""括起来的单个字符或转义字符。二、填空题1.8.9分析:7+3.8/2=7+1.9=8.92.关键字预定义标识符用户标识符3.84.八十十六5.intfloatdouble6.1617分析:本题考查自增运算符,a++表达式的值是a变化之前的值,a变量本身加1。46
培恩IT教育系列教材-习题详解-www.born365.cn第二章顺序结构一、填空题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.5x=6.5③a=f/=65c=65④a=100.0/65=1f=100.0/65=1.5⑤a=1,c=65,f=1.5,x=6.546
培恩IT教育系列教材-习题详解-www.born365.cn12.【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】分析:输入的是876543.0,由于输入格式说明中指定了a的位数为两位,所以计算机会把87分配给a;接着计算机继续把6分配给b,由于6后面输入的是空格,计算机认为分配结束.同时把6转为6.000000(b是实型变量)25.【A】分析:本题与第7、15题类似。46
培恩IT教育系列教材-习题详解-www.born365.cn26.【D】分析:在prinf()函数的格式控制中,两个连着写的%,计算机会输出一个%,接下来的d原样输出。所以答案为D。27.【B】分析:该题是考查scanf()函数的输入格式控制,以及后面的数组的知识,将在后面详细讲解。28.【A】分析:此题不好解析,大家只要记住这一点,并在以后学习过程中注意就可以了。29.【A】分析:scanf()函数的定义:输入项为变量的地址,所以选项A,B错误;本题还牵涉到指针变量的概念,后面将会学习到,变量d其实是一个指针变量,指针变量其实就是储存一个变量的地址,所以选项B错误。30.【D】分析:此题和第7题类似。31.【D】分析:此题考查自减运算符、逗号运算符和printf()函数的概念,前两个知识点,在前面的题目中,我们已经讲述过了;当printf()函数的输出项为表达式时,输出的是该表达式的值,对于表达式z+1的值为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/3=6,答案为A。40.【A】分析:与第35题类似。41.【B】分析:printf()函数的定义:“”括起来的部分除了%d之外其它的原样输出。42.【C】分析:本题考查转义字符,"b"是退格符,所以遇到"b",就会把前面一个字符删除掉,"、\为转义字符,分别输出"和,所以答案为C。43.【C】46
培恩IT教育系列教材-习题详解-www.born365.cn分析:本题不好用文字表述,请大家通过编译器调试看结果,并记住这个知识点。二、填空题1.88分析:0210转为十六进制为882.1分析:本题涉及到第三章选择结构的内容,将在第三章讲述。3.220.000000分析:①x=f*=n/=(c=50)c=50②x=f*=n/=50③x=f*=2n=2④x=20.0f=20.0本题需要注意的地方,当以%f格式输出的时候,小数点后保留6位。4.11分析:9转为8进制是115.252137分析:本题考查十进制、八进制和十六进制之间的相互转化,输出格式中的空格对应输出。6.7分析:a="H"-"A"+"0"a=7+"0",所以以%c格式输出时,结构为字符7。7.1B分析:运行a=getchar();scanf("%d",&b);后,a="B",b=33,其它的运算和第6题类似。8.n1=%dnn2=%d分析:从输出结果中可知:n1=n2=必须在相应位置输入,并且输出n1后要换行。这种题目在考试时(笔试和机试)经常出现,大家一定要多加训练。9.i=10,j=20回车分析:scanf()函数中,除了%d之外,其它的都要原样输入。10.B66分析:字符A的ACSII码值为65,所以字符B的ACSII码值为66,当以%d格式输出ch时,即输出66。11.b分析:相同字符的小写的ACSII码值比大写的ACSII码值大32。12.261分析:177转为8进制是26113.-3分析:%运算符的操作必须时整数(正整数和负整数)。14.16分析:赋值运算符的运算规则为从左往右。①a+=(a=8)②a+=8a=8③a=1615.2,1分析:①a=a+ba=3b=2②b=a-ba=3b=1③a=a-ba=2b=1该类题必须小心,千万不能忘记“,”号,否则为0分。16.1030046
培恩IT教育系列教材-习题详解-www.born365.cn分析:%*d表示忽略一个数的输入,10赋值给i,20被忽略,30赋值给j,而k未获得新的值,保持原值0,所出输出10300。17.12分析:输入时,12分析作为字符"1"和"2"赋值给ch1和ch2。46
培恩IT教育系列教材-习题详解-www.born365.cn第三章选择结构一、选择题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项中先计算出aa为真,所以(n=b>a)为1,那么将不会去计算m=ab>c的值为0,所以不执行其后的语句;在判断第二个条件,c-1>=d46
培恩IT教育系列教材-习题详解-www.born365.cn表达式的结果为真,所以执行其下面的语句,那么将输出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-y<0或x-y>0。所以答案选C。19.【C】分析:此题主要是考查条件表达式和条件运算符。首先求括号内条件表达式a>c?a:c的值为c,那么整个表达式就等价于d=a>b?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语句。因此首先判断a>b为假,那么跳过其子句,即if-else语句,直接执行最后一条printf语句,将d输出。因此答案选A。二、填空题1.10200分析:此题多数同学会得到的答案是10201,显然是没有弄清楚第三条赋值语句:c=(a%b<1)||(a/b>1).这是将后面一个逻辑表达式的值给c。先计算第一个圆括号里面的内容,a%b的值是10(而不是0),所以10<1为假;a/b的值为0,0>1为假。在逻辑或运算的时候,两个运算对象都为假,则结果为假。所以c的值为0.答案是:102002.0分析:此题主要考查关系表达式。我们主要就是要计算a>b>c的值,首先a>b为真,其值为1,那么1>c为假,所以整个表达式为假,其值为0。所以d为0。3.585858分析:此题考查if语句。首先scanf语句使a的值为58,接着执行后面三条if语句,这三个if46
培恩IT教育系列教材-习题详解-www.born365.cn结构是相互独立的,是互不相关的,只要他们的条件成立,就要执行其子句。a>50、a>40、a>30、都为真,所以执行printf三次,a被输出3次。4.yes分析:此题考查if-else语句。赋值表达式c=a+b的值就是左边变量的值,为4,那么表达式为真,所以执行其后的printf语句,将yes输出。5.20,0分析:此题关键点if的子句只能是一条语句或一条复合语句,表达式x==y为假,跳过if子句t=x;,接着继续执行x=y;y=t;,因此最后x为20,y为0。6.4,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输出。8.4分析:从键盘得到x的值为5,那么判断表达式x--<5,x--的值为5,所以为假,判断了之后x的值变为4。此时执行else子句,将x++输出,为4。9.3分析:此题主要考查条件运算符。程序要输出(P/3>0?p/10:p%3)这个条件表达式的值。P为30,所以p/3=10,10>0显然为真,所以整个表达式的值应该是p/10的值,p/10得3。10.1分析:此题考查if-else语句。因为a为5,a!=0为真,所以p=a!=0等价与p=1,整个表达式p=a!=0为真,执行if子句,将p输出,输出为1。11.21分析:此题考查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输出,输出为21。12.a+b>c&&a+c>b&&b+c>a分析:此题是逻辑预算和if语句的结合。题目的提示很明显,构成三角形的条件是需要同时满足三条件:a+b>c,a+c>b,b+c>a,程序中的if的条件就是构成三角形的条件,所以我们填入a+b>c&&a+c>b&&b+c>a。这里大家注意同时满足条件我们需要用与逻辑,任意满足一个条件我们需要用或逻辑。46
培恩IT教育系列教材-习题详解-www.born365.cn第四章循环结构一、选择题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,n>6为真,执行n--;使n值变为8,接着执行printf语句输出8。第二轮循环,n为8,n>6为真,执行n--;使n值变为7,接着执行printf语句输出7。第三轮循环,n为7,n>6为真,执行n--;使n值变为6,接着执行printf语句输出6。此时n为6,n>6为假,结束循环。所以选B。4.【D】分析:此题是while循环和switch语句的结合。第一轮循环,k为5,k>0为真,执行switch语句,没有case5,所以执行default的break语句跳出switch语句(注意是跳出switch语句),接着执行k--;使k值变为4。第二轮循环,k为4,k>0为真,执行switch语句,没有case4,所以执行default的break语句跳出switch语句,接着执行k--;使k值变为3。第三轮循环,k为3,k>0为真,执行switch语句,执行case3的n+=k;使n值变为3,接着执行k--;使k值变为2。第四轮循环,k为2,k>0为真,执行switch语句,执行case2没有任何语句,那么什么都不做,因为没有break语句所以要继续执行case3的n+=k;使n值变为5,接着执行k--;使k值变为1。第五轮循环,k为1,k>0为真,执行switch语句,执行case1的n+=k;使n值变为6,因为没有break语句所以要继续执行case2(什么都不做),和case3的n+=k;使n值变为7,接着执行k--;使k值变为0。此时k为0,k>0为假,跳出循环,执行printf语句,将n输出,为7。所以答案选D。5.【A】分析:此题是考查while循环。第一轮循环,x为0,y为5,z为3,(z>0&&x<4)为真,执行y=y-1;、z--;、x++;三条语句,y值为4,z值为2,x值为1。第二轮循环,(z>0&&x<4)为真,执行y=y-1;、z--;、x++;三条语句,y值为3,z值为1,x值为2。第三轮循环,(z>0&&x<4)为真,执行y=y-1;、z--;、x++;三条语句,y值为2,z值为0,x值为3。此时(z>0&&x<4)为假,跳出循环,执行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的值为-246
培恩IT教育系列教材-习题详解-www.born365.cn,输出-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,i<6为真,执行sum+=i;,此时大家注意sum没有初值,所以得到不确定的值,此后不论循环怎么执行sum的值都为不确定,所以答案选C。10.【D】分析:变量i每次增量为2,变化过程为:1->3->5->7->9,语句s+=i+1每次执行使s增加的数为:2,4,6,8,10,所以s的值为自然数1~10中偶数的值。11.【B】分析:B选项每次进入循环体,都要先执行p=1;即1赋值给p.所以不能求出5!的值。12.【C】分析:C项s=s+1/n,1/n首先运算,n为整型变量,1也是整型变量,当n=2…10时,1/n的值都为整数0,故C不正确。13.【C】分析:本题考察点在for循环的基本概念和switch语句的基本知识。构成for循环的循环体的是一个switch语句。首先i的值为0,进入第一轮循环。在switch语句中,符合case0的条件,输出i的值,即输出一个0。根据switch语句的性质,在case后面没有break语句,还要继续完成下面的case后的各个语句,直到遇到break或者switch语句结束为止。因此还需要完成case2后面的输出,再次输出一个0,同理,default后面的输出i也要执行。第一轮循环输出了000。i自加为1,进入第二轮循环。没有匹配的case,执行default后面的输出。第二轮循环输出了一个1。i自加为2,进入第三轮循环,执行case2后面的输出,并执行default后面的输出。第三轮循环输出了22。i自加为3,i<3为假,跳出for循环。因此,程序最后输出的结果是000122。答案选择C。14.无分析:此题分析同13题。有印刷错误,最后答案为41。没有这个选项。15.【D】分析:变量i的值为0,执行while循环,表达式(i<10)为真,进入循环体,执行if(i<1)continue;表达式(i<1)为真,执行continue;提前结束此轮循环体的执行(后面两语句不执行),再判断表达式(i<10)的值,为真,进入循环体,执行if(i<1)continue;因为i的值为0,没改变,表达式(i<1)仍为真,执行continue;提前结束此轮循环体的执行(后面两语句不执行),再判断表达式(i<10)的值,为真,进入循环体……。就这样程序一直执行循环,进入死循环。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题。46
培恩IT教育系列教材-习题详解-www.born365.cn17.【A】分析:此题while循环嵌套了for循环。第一轮循环,i为0,i<20为真,进入for循环无条件执行,i%10==0为真,执行break语句结束整个for循环。接着执行i+=21使i变为21,执行a+=i使a变为21。第二轮循环,i为21,i<20为假,循环结束。所以答案选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。一、填空题1.y=-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。2.8921分析:从键盘上输入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。3.0分析:i的值从5变化到0时,for语句中的第二个表达式都为真。t=5*4*3*2*1*0=0。46
培恩IT教育系列教材-习题详解-www.born365.cn4.5分析:for循环语句的循环体是空语句;第一轮循环,s为0,i为1,i<3为真,执行空语句,然后执行i++使i变为2,s+=i使s变为2。第二轮循环,s为2,i为2,i<3为真,执行空语句,然后执行i++使i变为3,s+=i使s变为5。此时i<3为假,循环结束。输出s为5。5.6分析:此题属于循环的嵌套。当i=1时,j<=i为假,输出0个#号,当i=2时,j<=2,内存循环执行一次输出1个#号,依此分析,当i=3时,输出2个#号,当i=,4时,输出3个#号,共输出6个#号。大家特别注意每次进入内层循环j都没有赋初值为2。6.i<10j%3(或j%3!=0)分析:从j=i*10+6可以看出当i从1变化9时,就把100以内个位数为6的所有整数都选出来了。if( )continue;这条if语句很明显是判断是否能被3整除,如果不能则执行continue,去判断下一个数。所以填入条件j%3(或j%3!=0)。7.132分析:m=0,n=0,k=0,i=9第一轮循环,当i值为9时,i<=11为真,执行switch语句,(i/10)的值为0,匹配case0,执行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为假,循环结束。输出为132。8.17分析:首先x为15,x>10&&x<50为真,执行x++使x变为16,x/3为3,为真,执行x++使x变为17,执行break语句结束整个while循环。将x输出为17。9.j>0或j>=1i分析:此题是循环嵌套。外层的这个for(j=4;;j--)循环,控制输出的行数。输出为4行,所以填入j>0或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。46
培恩IT教育系列教材-习题详解-www.born365.cn第五章指针一、选择题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的意思,L=" "等价于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】分析:scanf函数的数据列表中的数据要求是地址量,只有A符合。a,*pa是值级别的量,&pa是地址的地址。13.【D】分析:同第4题。14.【D】分析:double类型应该对应%lf所以B选项错误。*p=&a;类型不匹配,A选项错误。scanf46
培恩IT教育系列教材-习题详解-www.born365.cn函数的数据列表中的数据要求是地址量,C选项错误。15.【C】分析:定义了整型变量a,整形指针b和指针的指针变量c。b中存放着a的地址,c中存放b的地址。所以*c等价于b,那么**c等价于*b等价于a。16.【A】分析:同第6题和第9题。17.【C】分析:p1、p2、p中分别存放着a、b、c的地址。因此*p1等价于a,*p2等价于b,*p等价于c。所以*p=*p1*(*p2)等价于c=a*b,c被赋为3。二、填空题1.k*k分析:scanf函数的数据列表中的数据要求是地址量,printf函数的数据列表中的数据要求是值级别的量。2.07分析:p1存放的是k的地址,所以p1==&m为假,a被赋0。*p1等价于k,*p2等价于m,所以(*p1)/(*p2)+7等价于k/m+7,k,m都为整型k/m为0,b被赋7。46
培恩IT教育系列教材-习题详解-www.born365.cn第六章数组一、填空题1.【B】分析:此题考查一维数组的定义。一维数组的定义,其数组长度即方括号中必须为常量,不能为变量,例如选项C,D。一维数组在定义并且初始化时可以省略数组的长度,但在单纯的定义时,数组的长度一定不能省,例如选项A。所以答案选B。2.【B】分析:此题是数组的简单引用。第一轮循环,i=0,判断i++<7成立,此时i变为1,进入循环体,但此时i=1,p[1]=12不满足if条件即p[i]%2为0,不执行j+=p[i]。第二轮循环,i=1,判断i++<7成立,此时i变为2,进入循环体,但此时i=2,p[2]=13满足if条件即p[i]%2为1,执行j+=p[i]。按照此方法,将整个while循环执行完,得到j=p[2]+p[4]+p[6]=45,即B正确。3.【A】分析:此题主要考查循环嵌套引用数组。第一个循环体执行完是将x[0],x[1],x[2],x[3]进行从大到小排序。第二个循环体执行完是将x[4],x[5],x[6],x[7]进行从小到大排序。4.【D】分析:此题同第二题很类似。首先i为0,i<7&&p[0]%2为真,执行k=k+p[0],即k=11,然后执行i++使i变为1,再进行判断,i<7&&p[1]%2为真,执行k=11+p[1],所以k=24,执行i++使i变为2,再进行判断,此时i<7&&p[2]%2为假,循环结束,输出k值,为24。5.【D】分析:此题是考查数组名是数组的首地址。p是一个指针变量,存放地址的,选项A,B,C都是将值赋给p,显然错误。D选项是a[2]的地址赋给p。所以答案选D。6.【B】分析:此题是通过指针来引用数组。由定义inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],*q=p+2;我们可知,p中存放了a[3]的地址,或者p指向了a[3],q中存放了a[5]的地址,或者q指向了a[5]。那么*p和*q就分别等价于a[3]和a[5],两着相加得10。所以答案选B。7.【C】分析:此题是指针,数组,循环的结合。首先p指向了a[1]。进入循环,x为1,x<3为真,执行y+=p[1];,此题的关键点就在这里p[1]等于多少?因为p指向了a[1],所以p[0]就等价与a[1],p[1]就等价与a[2],p[2]就等价与a[3],依次类推。所以执行y+=p[1]使y的值变6,然后i++使i变为2,x<3为真,执行y+=p[2];使y值变为14。所以答案选C。8.【A】分析:此题是指针,数组,循环的结合。第一轮循环,执行p=a;,那么p指向数组的a[0],p*s比较数组中两个数的大小。11.【A】分析:从函数调用f(a,3,7)可以看出,数组首地址a,整数3,整数7,分别传到形参b、m、n中。那么for(i=m;i