国家二级C语言(C语言程序设计)机试模拟试卷5(题后含答案及解析)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

国家二级C语言(C语言程序设计)机试模拟试卷5(题后含答案及
解析)
题型有:1. 选择题
选择题
1.设有定义:int n1=0,n2,*p=n2,*q=n1;,以下赋值语句中与n2=n1;语句等价的是
A.*p;*q;
B.p=q;
C.*p=n1;
D.p=*q;
正确答案:A
解析:本题考查指针的使甩。

指针p和q分别指向变量n2和n1,n2=n1可以用指针来代替,即*p代替n2,*q代替n1。

知识模块:C语言程序设计
2.以下叙述中正确的是
A.赋值语句是一种执行语句,必须放在函数的可执行部分
B.scanf和printf是C语言提供的输入和输出语句
C.由printf输出的数据都隐含左对齐
D.由printf输出的数据的实际精度是由格式控制中的域宽和小数的域宽来完全决定的
正确答案:A
解析:C语言本身没有提供输入输出语句,但是可以通过调用标准库函数中提供的输入和输出函数来实现输入和输出,选项B)错误:采用printf输出数据,输出数据都默认为右对齐,若要左对齐,可以在格式控制中的“%”和宽度之间加一个“-”号来实现,选项C)错误;printf的输出精度由变量的类型决定,与域宽无关,选项D)错误。

知识模块:C语言程序设计
3.执行以下程序段后,w的值为int W=‘A’,x=14,y=15;w=((x||y)&(w<’a’));
A.-1
B.NULL
C.1
D.0
正确答案:C
解析:本题考查表达式和逻辑运算。

x和y分别为14和15.因此(x||y)的值是真。

w的值为’A’,其ASCII值为65,’a’的ASCII值为97,因此(w<’a’)的值为真。

表达式w=((x||y)&(w<’a’))的前后两个值均为真,整个表达式的值为真(1)。

知识模块:C语言程序设计
4.若有以下程序#include<stdio.h>main( ){int b=10,a=-11;a%=b%=4:printf(“%d%d\n”,a,b);}则程序的输出结果是
A.1 2
B.-1 -2
C.-1 2
D.1 -2
正确答案:C
解析:对于表达式a%=b%=4为复合的赋值运算,结合性自右至左,相当于先计算b=b%4,a=a%b;结果的符号和第一个操作数的符号相同,因此b为2,a的结果为-1。

知识模块:C语言程序设计
5.若变量已正确定义为int型,要通过语句scanf(“%d,%d,%d”,&a,&b,&c);给a赋值1、给b赋值2、给c赋值3,以下输入形式中错误的是(注:□代表一个空格符)
A.□□□1.2,3
B.1,□□□2,□□□3
C.1.2.3
D.1□2□3
正确答案:D
解析:本题主要考查scanf函数的输入格式问题。

scanf函数的一般形式为:scanf(格式控制字符串,地址1,地址2,…);格式控制字符串是由双撇号括起来的字符串,它主要由两种类型的字符组成:①格式说明符由“%”和格式字符组成,如‰c,%d,%s,%f等。

其作用是将输入的数据转换为指定的格式,赋给scanf的二个参量(是地址1)所指定的内存单元(可能一次使用多个)中。

格式说明以“%”字符为标志;②普通字符,是需要用户在输入时原样输入的字符。

在本题中格式控制字符串为“%d,%d,%d”,表示按十进制输入三个数据。

要求在输入数据时,两个数据间一定以一个逗号“,”作为问隔符。

知识模块:C语言程序设计
6.若有定义int a;float b;double c;程序运行时输入:3 4 5能把值3输入给变量a、4输入给变量b、5输入给变量c的语句是
A.scanf(“%d%1f%1f’,&a,&b,&c);
B.scanf(“%d%f%1f”,&a,&b,&c);
C.scanf(“%d%f%f’,&a,&b,&c);
D.scanf(“%f%1f%1f”,&a,&b,&c);
正确答案:B
解析:scanf函数进行输入的时候,默认的输入间隔为空格、跳格和回车,变量a、b和c均为数值型数据,输入时问隔为空格,因此scanf。

函数的第一个表示格式的参数之间不用加入分隔符,而要输入double型数据,格式控制必须
用%1f(或%1e)。

否则,数据不能正确输入。

知识模块:C语言程序设计
7.以下叙述中正确的是
A.在scanf函数的格式串中,必须有与输入项一一对应的格式转换说明符B.只能在printf函数中指定输入数据的宽度,而不能在scanf函数中指定输入数据占的宽度
C.scanf函数中的字符串,是提示程序员的,输入数据时不必管它
D.复合语句也被称为语句块,它至少要包含两条语句
正确答案:A
解析:输入函数的调用格式:scanf(格式控制,输入项1,输入项2,…)格式控制的主要作用是指定输入时的数据转换格式,格式串中,必须含有与输入项一一对应的格式转换说明符选项A)正确,在scanf。

函数的格式字符前可以加入一个正整数指定输入数据所占的宽度.但不可以用实数指定小数位的宽度,选项B)错误,scanf函数中的格式控制字符串是为了输入数据用的,无论其中有什么字符,也不会输出到屏幕上,因此若想在屏幕上输出提示信息,应该首先使用printf函数输出,选项C)错误,复合语句还可以是空语句昵,并没有规定语句条数,选项D)错误。

知识模块:C语言程序设计
8.以下程序段完全正确的是
A.int k,*p=&k;scanf(“%d”,p);
B.int*p;scanf(“%d”,p);
C.int*p;scanf(“%d”,&p);
D.int k,*p;*p=&k;scanf(“%d”,p);
正确答案:A
解析:选项B)没有对指针进行初始化,无效指针。

选项C)错在没有对指针进行初始化,无效指针。

并且在scanf(“%d”,&p)中无需再进行取地址操作。

选项D),语句“*p=&k”的左端*p是指针所指内存空间的值,&k是地址,应为“p=&k”。

知识模块:C语言程序设计
9.s1和s2已正确定义并分别指向两个字符串。

若要求:当s1所指串大于s2所指串时,执行语句S;则以下选项中正确的是
A.if(s1>s2)S;
B.if(strcmp(s1,s2))S;
C.if(strcmp(s2,s1)>0)S;
D.if(strcp(s1,s2)>0)S;
正确答案:D
解析:字符串标记使用strcmp函数,该函数有两个参数分别是需要比较大小的两个字符串s1和s2,如果s1大于s2则返回值大于0,如果s1小于s2则返回值小于0,否则s1和s2相同返回0。

题目要求s1大于s2时执行语句s,因此strcmp(s1,s2)的返回值大于0时执行s。

知识模块:C语言程序设计
10.有以下程序main( ){int x=1,y=0;if(!x)y++;else if(x==0)if(x)y+=2;else y+=3;printf(“%d\n”,y);}程序运行后的输出结果是
A.2
B.0
C.1
D.3
正确答案:B
解析:x=1,if和elseif的条件都不满足,故y值不改变输出。

知识模块:C语言程序设计
11.if语句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是
A.必须是整数值
B.必须是正数
C.可以是任意合法的数值
D.必须是逻辑值
正确答案:C
解析:在if语句中,表达式可以是在意合法的数值。

当其值为非零时,执行jf语句,为0时执行else语句。

知识模块:C语言程序设计
12.有以下程序main( ){int a=1,b=2,c=3,d=0;if(a=1&&b++=2)if(b!=2||c--!=3)printf(“%d,%d,%d\n”,a,b,c);else printf(“%d,%d,%d\n”,a,b,c);else printf(“%d,%d,%d\n”,a,b,c);}程序运行后的输出结果是
A.1,3,2
B.1,2,3
C.1,3,3
D.3,2,1
正确答案:C
解析:a,b,c,d初始值分别为1,2,3,0。

嵌套的if语句中,第一个if 中,表达式a==1&&b++==2值为1,执行嵌套的if分支,此时“b=3,b!=2”成立,由于运算符是||,不管后面一个表达式的值是不是1,其整个表达式的值总是l,“c--!=3”表达式不执行,最后打印出a,b,c的值是1,3,3。

知识模块:C 语言程序设计
13.若有以下程序#include<stdio.h>main( ){int a=1,b=2,c=3,d=4;if((a:2)&&(b=1))c=2;if((c==3)||(d=-1))a=5;printf(“%d,%d,%d,%d\n”,a,b,c,d);}则程序的输出结果是
A.2,1,2,-1
B.2,2,2,4
C.1,2,3,4
D.5,1,2,-1
正确答案:D
解析:代码中有两条并列的if语句,第一条if语句,逻辑与表达式(a=2)&&(b=1)中,a=2,则执行b=1,得到该逻辑与表达式值为1,执行分支语句c=2:第二条if语句(c==3)||(d=-1),c==3不成立,执行d=-1,而后得出整个逻辑与表达式值为1,执行分支语句a=5。

知识模块:C语言程序设计
14.若以下选项中变量全部为整型变量,且已正确是义并赋值,则语法正确的switch语句是
A.switch(a+b){case1:case3:y=a+b;break;case0:case4:y=a-b;}
B.switch(a*a+b*b){default:break;case3:y=a+b:break;case2:y=a-b;break;}
C.switch(a+9){case c1:y=a-b;case c2:y=a+b;}
D.switch a*b{case10:x=a+b;default:y=a-b:}
正确答案:B
解析:本题考查switch的使用。

选项A)中的case0和case4没有break语句;选项B)正确;选项C)中的case后面不是常量,错误;选项D)中switch后面没有括号。

知识模块:C语言程序设计
15.有以下程序main( ){int k=5,n=0;do{switch(k){case1:case3:n+=1;k--;break;default:n=0;k--;case2:case4:n+=2;k--;break;}printf(“%d”,n);}while(k>0&&n<5)}运行以后的输出结果是
A.0235
B.235
C.02356
D.2356
正确答案:B
解析:因为变量的初始值分别为k=5,n=0,所以程序第1次进入循环时,执行default语句,“n=0,k=4”,没有break语句,因此执行case2分支语句,n 为2,k为3,程序进行第2次循环,执行“case3:n=3,k=2”,输出n值为3,程序进行第3次循环,执行case3这个分支,结果是“n=5,k=1”,打印出5;这时因为n=5不满足n<5的循环条件,因此退出循环,程序运行结束。

知识模块:C语言程序设计
16.在嵌套使用if语句时,C语言规定else总是
A.和之前与其具有相同缩进位置的if配对
B.和之前与其最近的if配对
C.和之前与其最近的且不带else的if配对
D.和之前的第一个if配对
正确答案:C
解析:本题考查if语句,在C语言中,else总是和之前与其最近的且不带else的if配对。

知识模块:C语言程序设计
17.有以下程序main( ){int k=5;while(--k)printf(“%d”,k-=3);printf(“\n”);}执行后的输出结果是
A.2
B.4
C.1
D.死循环
正确答案:C
解析:在程序语句中,k的初始值为5,进行第1次while循环后-k自减l 为4,菲0,执行循环体里的printf语句,输出1,此时k的值变为1。

程序执行第2次循环时,k自减1变为0,为假,退出while循环语句。

所以程序的最后结果为1。

知识模块:C语言程序设计
18.在以下给出的表达式中,与while(E)中的(E)不等价的表达式是
A.(E>0||E<0)
B.(!E==0)
C.(E!=0)
D.(E==0)
正确答案:A
解析:在while(E)中,表达式E可以是C语言中任意合法的条件表达式,但不能为空,由它来控制循环体是否执行。

在选项A)中表达式E>0||E<0是一个逻辑表达式。

知识模块:C语言程序设计
19.有以下程序main( ){int a=-2,b=0;while(a++&&++b);printf(“%d,%d\n”,a,b);}程序运行后输出结果是
A.0,3
B.1,2
C.1,3
D.0,2
正确答案:B
解析:循环体为空,共执行2次。

第一次变量a初值为-2,b初值为o,表达式a++&&++b值为1,同时a的值为-1,b的值为1。

第二次循环条件判断以后,a的值为0,b的值2,执行循环体空,第三次判断条件表达式值为0,不执行循环体,而a的值为1,但是表达式a++的值为0,因此不计算表达式++b的值,b的值仍为2。

知识模块:C语言程序设计
20.若变量己正确定义,有以下程序段i=0;doprintf(“%d,”,i);while(i++);printf(“%d\n”,i);其输出结果是
A.0,0
B.1.1
C.0,1
D.程序进入无限循环
正确答案:C
解析:do…while循环的执行过程如下:①执行do后面的循环体中的语句。

②计算while后一对圆括号中表达式的值。

当值为非0时,转去执行步骤①:当值为0时,执行步骤③。

③退出do…while循环。

对于本题变量i的初始值等于“0”,接着执行do后面的循环体中的语句,输出变量i的值0。

再判断while后面括号中表达式i++的值,其值为0,所以循环结束。

此时变量i的值经过自加已经变为l,所以再次输出i的值“1”。

知识模块:C语言程序设计
21.若k是int类型变量,且有以下for语句1for(k=-1;k<0;k++)printf(“****\n”);下面关于语句执行情况的叙述中正确的是
A.循环体执行两次
B.循环体执行一次
C.循环体一次也不执行
D.构成无限循环
正确答案:B
解析:本题考查for循环的使用。

在程序中,for循环的初始值k=-1,循环结束条件是k<0,每次循环k增加1,第一次进入循环的时候k为-1,k小于0,执行打印,然后k的值变成0,下次进入循环k不小于0,循环结束,因此循环只能执行一次。

知识模块:C语言程序设计
22.有以下程序#include<stdio.h>void main( ){int c==0,k;for(k=1;k<3;k++)switch(k){default:c+=k;case2:c++;break;case4:c+=2;break;}printf(“%d\n”,c);}
A.9
B.7
C.5
D.3
正确答案:D
解析:在这段程序中,整型变量c的初始值赋为0,在第一次执行for循环语句时,因为此时变量k的值等于1,所以在switch语句中首先执行default语句,给变量c的值加1,因为在default语句后面没有break语句,所以就会接着执行case2这条语句,再给变量c的值加1,其值变为2,这时退出switch语句块,进入第二次for循环,此对k的值等于2,就会执行switch语句块中的case2这条语句,再给变量c的值加l,这时变量c的值就是3,此时退出switch语句块,循环变量k的值加1,成为3,此时已不再满足循环条件,执行程序中的最后一条语句,把变量c的值在屏幕上输出。

知识模块:C语言程序设计
23.有以下程序#include<stdio.h>void main( ){char b,c;int i;b=‘a’;
c=‘A’;for(i=0:i<6;i++){if(i%2)putchar(i+b);else putchar(i+c);}printf(“\n”);}程序运行后的输出结果是
A.ABCDEF
B.aBcDeF
C.abcdef
D.AbCdEf
正确答案:D
解析:循环变量i从0依次递增到5,依次输出字母A,b,c,d,E,f。

知识模块:C语言程序设计
24.若有以下程序main( ){int a=6,b=0,c=0;for(;a&&(b==0);){b+=a;a-=c++:}printf(“%d,%d,%d\n”,a,b,c);}则程序的输出结果是A.6,0,0
B.5,6,0
C.6,6,1
D.5,6,1
正确答案:C
解析:循环条件a&&(b==0),a非零同时b==0则执行循环体,否则退出。

循环体执行一次,此时b=6,a=6,c=1。

知识模块:C语言程序设计
25.有以下程序main( ){int i,j;for(i=1;i<4;i++){for(=i;j<4.j++)printf(“%d*%d=%d”,i,j,i*j);printf(“\n”);}}
A.1*1=1 1*2=2 1*3=3 2*1=2 2*2=4 3*1=3
B.1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9
C.1*1=1 1*2=2 1*3=3 2*2=4 2*3=6 3*3=9
D.1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9
正确答案:C
解析:外层for循环的自变量i从1开始,每次循环后增1,直到i等于3结束。

对于外层循环自变量i的每一个值,内层循环的自变量j每次从i开始,每次循环后增1,直到j等于3结束。

所以在每次外循环开始后,内层循环在一行先打印i*j=两个乘数的积,然后回车换行,下次循环从下一行开始打印输出结果。

知识模块:C语言程序设计
26.有以下程序#include<stdio.h>main( ){int x=8;for(;x>0;x--){if(x%3){printf(“%d,”,x--);continue;}printf(“%d,”,--x);}}程序的运行结果是
A.8,7,5,2,
B.9,7,6,4,
C.7,4,2,
D.8,5,4.2,
正确答案:D
解析:“x--”表示先执行程序,再令x的值减1:而“--x”表示令x的值减1,再执行程序。

x=8时,x%3为非0值,执行语句“{print(“%d,”,x--):contlnue;}”,输出“8,”,此时经过x--,x的值变为7,跳出此次循环:执行“x--,x=6,x%3=0”,后面语句不执行,执行语句“printf(“%d,”,--x);”,输出“5,”;执行for 语句中的x--,得到x=4,判断x%3,输出“4,”,执行两次x--后,x=2,执行“{printf(“%d,”,x--);continue;}”后,输出“2,”;然后执行两次x--后,x=0,不符合“x>0”,循环全部结束。

知识模块:C语言程序设计。

相关文档
最新文档