国家二级C语言机试(C语言程序设计)模拟试卷1(共200题)_第1页
国家二级C语言机试(C语言程序设计)模拟试卷1(共200题)_第2页
国家二级C语言机试(C语言程序设计)模拟试卷1(共200题)_第3页
国家二级C语言机试(C语言程序设计)模拟试卷1(共200题)_第4页
国家二级C语言机试(C语言程序设计)模拟试卷1(共200题)_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

国家二级C语言机试(C语言程序设计)模拟试卷1(共6套)(共200题)国家二级C语言机试(C语言程序设计)模拟试卷第1套一、选择题(本题共28题,每题1.0分,共28分。)1、以下叙述中正确的是A、赋值语句是一种执行语句,必须放在函数的可执行部分B、scanf和printf是C语言提供的输入和输出语句C、由printf输出的数据都隐含左对齐D、由printf输出的数据的实际精度是由格式控制中的域宽和小数的域宽来完全决定的标准答案:A知识点解析:C语言本身没有提供输入输出语句,但是可以通过调用标准库函数中提供的输入和输出函数来实现输入和输出,选项B错误;采用printf输出数据,输出数据都默认为右对齐,若要左对齐,可以存格式控制中的”%”和宽度之间加一个”-”号来实现,选项C错误;printf的输出精度由变量的类型决定,与域宽无关,选项D错误。2、有如下程序段:intx=12;doubley=3.141593;printf(’’%d%8.6t’’,x,y);其输出结果是A、123.141593B、12,3.141593C、123.1415930D、123.142标准答案:D知识点解析:本题考查printf语句。printf()函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。printf()函数的调用格式为:print(’’<格式化字符串>’’,<参量表>)。其中,”格式化字符串”包括两部分内容:一部分是正常字符,这些字符将按原样输出:另一部分是格式化规定字符,以”%”开始,后跟一个或几个规定字符,用来确定输出内容格式。格式化字符串的格式是:%[标志][输出最小宽度][精度][长度]格式字符①标志:标志字符为-、+、空格等,其意义如下所示:.-:结果左对齐,右边填空格;.+:输出符号(正号或负号):.空格:输出值为正时冠以空格,为负时冠以负号。②输出最小宽度:用十进制整数来表示输出的最少位数(包括小数点在内至少要输出这么多位)。.若实际位数多于定义的宽度,则按实际位数输出;.若实际位数少于定义的宽度,则右对齐,左边留空;.有负号,左对齐,右边留空;.表示宽度的数字以0开始,则右对齐,左边留空。③精度:精度格式符以“.”开头,后跟十进制整数。它的意义是:如果输出数字,则表示小数的位数,若实际位数大于所定义的精度数,则四舍五入,若不足则补0;如果输出的是字符,则表示输出字符的个数,若实际位数火于所定义的精度数,则截去超过的部分;④长度:长度格式符为h和1两种,h表示按短整型量输出,1表示按长整型量输出。3、有以下程序main(){chara,b,C,d;scanf(’’%c%c’’,&a,&b);c=getchar();d=getchar();printf(’’%c%c%c%c\n’’,a,b,C,d);}当执行程序时,按下列方式输入数据(从第1列开始,代表回车,注意:回车也是一个字符)1234则输出结果是A、12B、1234C、123D、1234标准答案:C知识点解析:scanf和getchar函数分别从键盘上读入一个字符,因此输入12空格34,则变量a中存放的为1,b中存放2,c中存放空格,d中存放3。4、设变量均已正确定义,若要通过scanff’’%d%c%d%c’’,&a1,&c1,&a2,&c2);语句为变量a1和a2赋数值10和20,为变量c1和c2赋字符x和Y。以下所示的输入形式中正确的是(注:□代表空格字符)A、10□x20□YB、10□x20□YC、10x20YD、10□x□20□Y标准答案:C知识点解析:存使用scanf’函数进行输入数据时,输入的数据之间必须用空格、回车符、制表符(Tab键)等间隔符隔开,似是空格为合法的字符型数据的输入。而按照格式符’’%d%c%d%c’’说明,数值型数据和宁符数据输入之间不要加入空格间隔,而字符型数据和数值型数据的输入却可以加入任意的空格,同车和跳格。5、若有定义inta;floatb;doublec;程序运行时输入:345能把值3输入给变量a、4输入给变量b、5输入给变量C的语句是A、scanff’’%d%1f%1f’,&a,&b,&c);B、scanff’’%d%f%1P’,&a,&b,&c);C、scanf(’’%d%PAf’’,&a,&b,&c);D、scanff’’%1f%1f%1f’,&a,&b,&c);标准答案:B知识点解析:scanf函数进行输入的时候,默认的输入间隔为空格、跳格和回车,变量a、b和c均为数值型数据,输入时间隔为空格,因此scanf函数的第一个表示格式的参数之间不用加入分隔符,而要输入double型数据,格式控制必须用%lf(或%1e)。否则,数据不能正确输入。6、以下叙述中正确的是A、在scanf函数中的格式控制字符串是为了输入数据用的,不会输出到屏幕上B、在使用scanf函数输入整数或实数时,输入数据之间只能用空格来分隔C、在printf函数中,各个输出项只能是变量D、使用printf函数无法输出百分号%标准答案:A知识点解析:scanf函数中的格式控制字符串是为了输入数据用的,无论其中有什么字符,也不会输出到屏幕上,因此若想在屏幕上输出提示信息,应该首先使用Drintt函数输出,选项A卫确;在使用scanf函数输入整数或实数时,输入数据之间可以用空格、跳格、回车来分隔,选项B错误;printf’输出项不但可以为变量,还可以表达式或者常量,选项C错误;如果要输出”%”,可以在格式控制中用”%%”表示,将输出一个”%”,选项D错误。7、有以下程序#include<stdio.h>main(){charcl,c2,c3,c4,c5,c6;scanf(’’%c%c%c%c’’,&c1,&c2,&c3,&c4);c5=getchar0;c6=getchar0;putchar(c1);putchar(c2);pfintf(’’%c%ckn’’,c5,c6);}程序运行后,若从键盘输入(从第1列开始)12345678则输出结果是A、1256B、1278C、1245D、1267标准答案:C知识点解析:当用scanf的数从键盘输入数据时,每行数据的未尾按下回车键(Enter键)之前,可以任意修改。但按下回车键putchar(c1)(Enter键)之后,scanf’函数即接受了这一行数据,不能再回去修改。所以本题中,当输入123<CR>时,变量c1、c2、c3的值分别为1、2、3,当输入45678<CR>时,变量c5、c6的值4和5。所以用输出函数putchar(c1)输出1,putchar(c2)输出2,printf(’’%c%c\n’’,c5,c6)输出45。8、若在定义语句:inta,b,c,*p=&c;接着执行以下选项中的语句,则能正确执行的语句是A、scanf(’’%d%d%dtt,a,b,c);B、scanf(’’%dt.,a,b,c);C、scanf(’’%d’’,p);D、scanf(’’%d’’,&p);标准答案:C知识点解析:程序语句inta,b,c,*p=&c;定义了三个整型变量a,b,c,和一个整型指针变量p,并且把变量c的地址赋给p。scanf函数的一般形式为”scanf(“格式控制字符串”,地址列表)”,其中的地址列表应当是存放输入数据变量的地址。9、若变量已正确定义,在if(W)printf(’’%d\n’’,k);中,以下不可替代W的是A、ch=getchar()B、a=-b+cC、a<>b+cD、a++标准答案:C知识点解析:在iff)语句的括号是一个合法的C语言表达式即可,如果表达式的值为0,则不执行if语句,否则执行if语句,而在选项C中,符号<>不是C语言的合法运算符,如果要表达a大于或小于b+c可用a!=b+c或(a>b+Cll(a<b+C来表达,而不能使用a<>b+c。所以它不是一个合法的C语言表达式。10、if语句的基本形式是:if(表达式)语句,以下关于’’表达式’’值的叙述中正确的是A、必须是整数值B、必须是正数C、可以是任意合法的数值D、必须是逻辑值标准答案:C知识点解析:在if语句中,表达式可以是任意合法的数值。当其值为非零时,执行if语句,为0时执行else语句。11、有以下程序#inc1udemain(){intx;scanf(’’%d’-,&x);if(x<=3);elseif(x!=10)printf(’’%d\n’’,x);}程序运行时,输入的值在哪个范围才会有输出结果A、不等于10的整数B、大于3或等于10的整数C、小于3的整数D、大于3且不等10的整数标准答案:D知识点解析:题目中,虽然else和第二个if不在同一行上,但等价于在同一行上,因此,程序的意思是当x人于3且不等于10时打印出来。12、若有以下程序#include<stdio.h>main(){inta=1,b=2,c=3,d=4;if((a=2)ll(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,-1B、2,2,2,4C、5,1,2,-1D、1,2,3,4标准答案:B知识点解析:代码中有两条并列的if语句,第一条if语句执行,(a=2)11(b=1)值为1,由于逻辑或表达式,根据其短路运算规则,a=2,b=2,即b值不变执行if分支c=2。并列的if语句中表达式(c=3)&&(d=-1)为逻辑与表达式,c=3不成立,不考虑d=-1表达式,d为5.逻辑表达式值为0,不执行相应if分支。13、若有以下程序main(){inta=1,b=2,c=3,d=4,r=0;if(a!=1);elser=1;if(b=2)r+=2;if(c!=3);r+=3;if(d=4)r+=4;printf(’’%d\n’’,r);)则程序的输出结果是A、7B、10C、6D、3标准答案:B知识点解析:程序代码中有四条并列的if语句,第一条if表达式a!=1不成立,执行else分支,r=1;第二条if表达式b=2成立,执行r+=2,r=3;第三条if语句c!=3不成立,执行语句r+=3,r=6;第四条if分支d一4成立,执行该if分支语句,r+=4,r=10。14、有以下程序main(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++:break;case1:b++;break;)case2:a++;b++;break;case3:a++;b++;)printf(’’a=%d,b=%d\n’’,a,b);)程序的运行结果是A、a=2,b=2B、a=1,b=1C、a=1,b=0D、a=2,b=1标准答案:D知识点解析:本题考查的是用switch语句实现多分支选择结构,首先进入第一个switch(x)判断,进入case1中进行嵌套判断,如果switch(y)也成立,a自加1,遇到break,退出嵌套,接着执行case2,a自加为2,b自加为1,遇到break,结束循环,此时a=2,b=1。15、有以下程序main(){intk=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、0235B、235C、02356D、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的循环条件,因此退出循环,程序运行结束。16、若以下选项中的变量a,b,y均已正确定义并赋值,则语法正确的switch语句是A、switch(a*a+b*b){default:break;case3:y=a+b;break;case2:y=a-b;break;)B、switch(a+b){casel:case3:y=a+b;break;case0:case4:y=a-b;)C、switch(a+9){casea:y=a-b;caseb:y=a+b;}D、switcha*b{case10:y=a+b;default:y=a-b;)标准答案:A知识点解析:使用switch语句直接处理多个分支,其一般形式为:switch(表达式){case常量表达式1:语句1;break;case常量表达式2:语句2;break;case常量表达式n:语句n;break;default:语句n+l;break;}switch语句的执行流程是:首先计算switch后面圆括号中表达式的值,然后用此值依次与各个case的常量表达式比较,若圆括号中表达式的值与某个case后面的常量表达式的值相等,就执行此case后面的语句,执行后遇break语句就退出switch语句;若圆括号中表达式的值与所有case后面的常量表达式都不等,则执行default后面的语句n+1,然后退出switch语句。对于选项B,case语句和常量之间没有空格,而选项C中的case后面为变量,选项D中switch后面没给出圆括号。17、有以下程序main(){intk=5;while(-k)printf(’’%d’’,k一=3);printf(’’\n’’);)执行后的输出结果是A、2B、4C、1D、死循环标准答案:C知识点解析:在程序语句中,k的初始值为5,进行第1次while循环后,k自减1为4,非0,执行循环体里的printf语句,输出1,此时k的值变为1。程序执行第2次循环时,k自减1变为0,为假,退出while循环语句。所以程序的最后结果为1。18、有以下程序#includemain(){inta=7;while(a-);printf(’’%dkn’’,a);}程序运行后的输出结果是A、0B、1C、.1D、7标准答案:C知识点解析:在while语句中,先判断while后面的表达式是否为0,如果为0,则退出循环,否则执行循环体。在本题中,当变量a的值经过几次循环后,其值等于0时,退出while循环语句,变量a再执行自减运算,所以其值等于-1。19、若有以下程序main(){inta=-2,b=0;while(a++)++b:printf(’’%d,%d\n’’,a,b);)则程序的输出结果是A、0,2B、1,2C、1,3D、2,3标准答案:B知识点解析:循环体执行两次,第一次表达式a++值为.2,a的值为-1,执行循环体++b,b值为1,第二次表达式a++值为-1,a的值等于0,执行++b,b值为2,第三次判断条件a++,表达式值为0,不执行循环体,但是条件判断以后,a的值为1。20、有以下程序main(){inti=5;do{if(i%3=1)if(i%5=2){printf(’’*%d’’,i);break;}i++:}while(i!=0);printf(’’\n’’);}程序的运行结果是A、*3*5B、*5C、*7D、*2*6标准答案:C知识点解析:由于循环变量i的初值等于5,所以第一、二次进入do…,while循环语句时,条件语句if(i%3=1),if(i%5:=2){printf(“*%d”,i);break;)不执行,只执行i++语句。当i=7时,满足条件语句if(i%3=1),if(i%5=2){printf(’’*%d’’,i);break;},所以输出*7,结束循环。21、有以下程序main(){inta=3;do{printf(’’%d,’’,a-=2);}while(!(-a));printf(’’\n’’);}程序运行后的输出结果是A、1,B、1,-2,C、3,0,D、1,0标准答案:B知识点解析:循环体执行两次。首先输出a=1,然后判断表达式!(一a),a为0,循环条件表达式值为1,执仃第二次循环体,输出a=-2。判断循环条件表达式值为0,循环退出。22、有以下程序#include<stdio.h>main(){inty=9;for(;y>0;y-)if(y%3=0)printf(’’%d’’,-y);}程序的运行结果是A、963B、852C、741D、875421标准答案:B知识点解析:y的值的初值为9,所以在for循环中,当y的值为9、6或3时,if语句的条什成立,执行输出语句,输出表达式一y的值。因为自减符号在y的前面,所以首先y的自减1,然后再输出y的值,故输出结果为852。23、有以下程序#include<stdio.h>main(){inti,j;for(i=3;i>=1;i-){for(j=1;j<=2;j++)printf(’’%d’’,i+j);printf(’’\n’’);}}程序的运行结果是A、43B、2325344345C、45D、2.33434e+009标准答案:C知识点解析:本题中的外层行变量i从3逐次递减到1,共输出3行。内层列变量i每次从1递增到2,每行输出2个数字。所以当i=3时,第一行输出i+1=4i+2=5,即45:当i=2时,第~行输出i+1=3和i+2=4,即34;当i=1时,第一行输出i+1=2和i+2=3,即23。24、有以下程序main(){inta=1,b=2;for(;a<8;a++){b+=a;a+=2;}printf(’’%d,%d\n’’,a,b);)程序运行后的输出结果是A、8,11B、10,14C、7,11D、9,18标准答案:B知识点解析:在这段程序中变量a的初值等于1,变量b的初值等于2。第1次执行for循环语句后,变量a的值等于3,变量b的值等于3。第2次执行for循环后,变量a等于6,变量b的值等于7。第3次执行for循环后,变量a等于9,变量b的值等于14。第4次执行for循环后,变量a等于10,这时退出for循环,此时变量b的值等于14。因而程序输出变量a,b的值分别为10,14。25、若有以下程序main(){inta=6,b=0,c=0;for(;a&&(b=0);){b+=a;a-=c++;}printf(’’%d,%d,%d\n’’,a,b,c);}则程序的输出结果是A、6,0,0B、5,6,0C、6,6,1D、5,6,1标准答案:C知识点解析:循环条件a&&(b=0),a非零同时b=0则执行循环体,否则退出。循环体执行一次,此时b=6,a=6,c=1。26、有以下程序#include<stdio.h>main(){inti,j,m=55;for(i=1;i<=3;i++)for(j=3;j<=i.j++)m=m%j;printf(’’%d\n’’,m);}程序的运行结果是A、0B、1C、2D、3标准答案:B知识点解析:存程序中,内层循环判断条件为”i<=i”而i的初值为3,故当外层循环变量i的值为1和2时,内层循环体都不会被执行。只有当i和i都等于3时循环才会执行一次。因为m的值为55对3求余结果为1。27、有以下程序main(){inti,j,x=0;for(i=0;i<2;i++){x++;for(j=0.j<=3.j++){ir(j%2)continue;x++;}x++;}printff’’x=%d\n’’,x);}程序执行后的输出结果是A、x=4B、x=6C、x=12D、x=8标准答案:D知识点解析:在第1次外层for循环中,首先x++得到x=1。进入到内层。for循环,只有循环变量j的值为奇数时,变量x的值才自加l,所以在内层for循环执行过程中,变量x的值自加两次,当退出内层for循环时,x=3,然后执行x++,得到x=4。在进入执行第2次外层for。循环中,首先x++得到x=5。进入到内层for循环,只有循环变量j的值为奇数时,变量x的值才自加1,所以在内层for循环执行过程中,变量x的值自加1两次,当退出内层for循环时,x=7,然后执行x++,得到x=8,所以打印输出变量x的值为8。28、以下叙述中正确的是A、break语句不能用于提前结束for语句的本层循环B、continue语句使得整个循环终止C、使用break语句可以使流程跳出switch语句体D、在for语句中,continue与break的效果是一样的,可以互换标准答案:C知识点解析:用break语句可以使程序流程跳出switch语句体,也可用break语句在循环结构中终止循环体,从而提前结束循环,而continue语句的作用是结束本次循环,即跳过本次循环体中continue语句后面的语句,立刻进行下一次的循环条件判断,可以理解为仅结束本次循环。国家二级C语言机试(C语言程序设计)模拟试卷第2套一、选择题(本题共30题,每题1.0分,共30分。)1、若x为int变量,则以下语句的输出结果是()。x=1234;printf("|\%-06d|n",x);A、输出格式描述符不合法B、输出为|001234|C、输出为|1234|D、输出为|-01234|标准答案:C知识点解析:本题主要考查C语言prinltf函数中格式控制字符串的使用,%表示格式说明的起始符号,“-”表示输出是否左对齐,“0”表示输出是空位是否填0。在本题中格式字符串的“f”将原样输出。若用格式描述’%6d’输出x值,则输出占6格,右对齐,左边用空格填满。若用格式描述%06d,将输出x值,输出同上,只是左边用0填满。若用格式描述%-06d,输出为左对齐即左边没有空位置,右边有空位置。2、已知定义k为double类型变量,k=260.72631:p血t"%-6.2e\n",k);则以上语句的输出结果是()。A、输出格式描述的域宽不够,不能输出B、输出为26.07e+01C、输出为2.6e+02D、输出为-2.64e2标准答案:C知识点解析:在C语言中,使用e格式描述符输出浮点数时(浮点数将以指数形式输出),用户可指定输出数据的宽度和小数部分的位数,其一般形式为%m.he或%-m.ne,其中m、n和字符“-”的含义均与上题所述相同。需要指出的是,在不同的计算机系统中,虽然对指数部分应占宽度的规定不同,但是数值部分均按标准化指数形式输出(即小数点前必须有而且仅有一位非零数字)。本题按标准化指数形式输出k值的整数部分,截去小数点并四舍五入,输出项k的实际宽度为9列,而格式说明中所给定的域宽为6,因此,将自动突破规定宽度,而按实际宽度输出,输出结果为2.6e+02。3、若m是int型变量,n是noat型变量,所用的scanf调用语句格式为:scanf("m=%d,n=%f,"&m,&n);则为了将数据10和66.6分别赋给m和n,正确的输入应当是()。A、m=10,n=66.6<回车>B、1066.6<回车>C、10<回车>66.6<回车>D、in=10<回车>n=66.6<回车>标准答案:A知识点解析:在C语言中,scanf函数的两个格式说明项有一个或多个普通字符,这些字符被称为通配符。在输入数据时,在两个数据之间也必须以相同的字符分隔。4、已知字母c的ASCII十进制代码为99,则执行以下语句后的输出结果为()。chara=’c’:a--;printf("%d,%c\n",a+’2’,a+’3’-’0’);A、d,eB、a--运算不合法,故有语法错C、100,eD、格式描述和输出项不匹配,输出无定值标准答案:C知识点解析:C语言规定,所有字符常量可以作为整型常量来处理,因而字符常量也可参与算术运算。本题中字符变量a的初值为字符c,其对应整数值就是c的ASCII码,其十进制代码为99,经过自减运算a--后,变量a所对应的整数值为98;虽然题中未给出字符’2’和’0’的ASCII代码值,但是’2’-’0’是求字符’2’和字符’0’之间的距离为2。故a+’2’-’0’的值为100。同理可知,第二个输出项相当于算术表达式98+3,其值为101。按照题中所给定的格式描述符,第一个输出项应当以%d格式输出100,;第二个输出项应当以%c格式输出字符,已知字符c的ASCII代码值为99,故不难推算出101的对应字符应该是字母e。5、两次执行下面的程序,如果从键盘上分别输入4和2,则输出结果是()。main(){intx;scanf("%d\n",&x);ifi(x++>3)printf("%d\n",x);elseprintf("%d\n",x--);}A、7和5B、5和3C、7和4D、6和4标准答案:B知识点解析:本题的考点是增1减1运算符作为后缀时的运算程序。如果从键盘上输入4,执行if(x++>3)时条件为真,x的值加1,输出结果为5,当键盘输入2时,执行if(x++>3)时条件为假,x值增1后执行printf("%d\n",x--);,即输出结果为3。6、下面程序的输出结果是()。main(){intm1=’a’,m2=’e’,m3=’e’;printf("%d%c\n",m2-m1,m3-’b’+’A’);}A、2,MB、4,DC、2,ED、输出结果不确定标准答案:B知识点解析:本题中字符变量m1的初值为字符’a’,m2的初值为字符’e’,m3的初值为字符’e’;因为英文字母的ASCII码值是连续的,所以m2-m1=’e’’a’=4,m3-’b’+’A’=’e’-’b’+’A’=3+’A’=’D’。7、设有定义:longx=745321L,则能正确输出变量x的语句是()。A、printf("x=%d\n",x);B、printf("x=%LD\n",x);C、printf("x=%d1\n",x);D、printf("x=%1d\n",x);标准答案:D知识点解析:本题考查C语言中长整型数据的输出。在题中格式控制符只有采用格式字符%1d,且必须是小写字母d,才能表示输出长整型数据x。8、以下叙述正确的是()。A、当输入数据时,必须指明变量的地址,例如,scanf("%f",&a);B、只有格式控制,没有输入项,也能正确输入数据到内存。例如,scanf("m=%d,n=%d");C、当输入一个实型数据时,格式控制部分可以规定小数点后的位数,例如,scanf("%5.1f",&a);D、输入项可以是一个实型常量,例如,scanf("%f",7.5);标准答案:A知识点解析:本题考查对scanf函数的理解。选项B)中没有给出输入项;选项C)中的格式字符指定了小数位数;选项D)中的输入项为一个常量;以上均是错误的。9、已知字母A的ASCII码值为65,则下面程序的输出是()。main(){charc1,c2;c1=’A’+’5’-’3’;c2=’A’+’6’-’3’;printf("%d,%c\n",c1,c2);}A、67,DB、B,CC、C,DD、不确定的值标准答案:A知识点解析:程序中’A’+’5’-’3’相当于“’A’+2=67”,“’A’+’6’-’3’”相当于’A’+3=68。输出函数的格式控制符分别为%d,%c,对应输出一个整数和一个字符。10、在C语言中的if语句中,用作判断的表达式为()。A、逻辑表达式B、关系表达式C、任意表达式D、算术表达式标准答案:C知识点解析:在C语言中,不论采用任何形式的if语句,在if后面都必须有用做判断的表达式,且表达式的类型不限于关系表达式或逻辑表达式,只要表达式的值能判断为0或非0即可,所以if后面的表达式可以是任意类型的表达式。11、为了避免嵌套的条件语句if-else的二义性,C语言规定:与else配对的是()。A、if同一行上的ifB、缩排位置相同的ifC、其之前最近的ifD、其之后最近的if标准答案:C知识点解析:C语言中在if语句中又包含一个或多个if语句称为if语句的嵌套。使用嵌套的if语句时应注意if-else的配对关系,else总是与它上面的最近if配对。12、有以下程序,输出结果是()。main(){inti=15j=21,n=0;switch(i%3){case0:n++;break;case1:n++:switch(j%2){default:n++;case0:n++;break;}}pintf("%d\n",n);}A、1B、2C、3D、4标准答案:A知识点解析:本题考查switch-case语句的嵌套形式。程序的主体部分是switch-case语句的嵌套,变量i的值是15,表达式i%3之后是0,对应的分支是“case0:n++;break”,变量n自加变为1,遇到break语句,跳出外层的switch-case语句。内层switch-case语句未执行,n为1。13、设变量m和n均已正确定义并赋值,以下if语句中,在编译时将产生错误信息的是()。A、if(m>0)m-elsen++;B、if(m++)C、if(m>n&&n!=0)D、if(n<0){;}elsem++;标准答案:A知识点解析:选项B)和C)在条件判断语句的后面是空语句,什么都不做;在选项D)中,在if语句后面是一个复合空语句;在选项A)中,在m--后面少了一个分号,所以程序段在编译时,会出现语法错误。14、阅读以下程序:#include<stdio.h>main(){inti;scanf("%dt",&i);if(i--<5)printf("%d",i);elseprintf("%d",i++);}程序运行后,如果从键盘上输入5,则输出结果是()。A、2B、3C、4D、5标准答案:C知识点解析:本题考查if-else语句的一般形式。i--是自减运算的后置形式,即先计算i是否小于5,再对i减1,所以条件(i--<5)的结果为0,i的值变为4,执行else子句,输出i++,这是自加运算的后置形式,即先输出i的值,再对i加1,i的值变为5。15、以下程序运行后的输出结果是()。#include<stdio.h>main(){intm=1,n=0,i=0,j=0;switch(m){case1:switch(n){case0:i++;break;case1:j++;break;)case2:i++ij++;break;}printf("i=%d,j=%d\n",i,j);}A、i=2j=1B、i=1,j=0C、i=1,j=1D、i=2,j=2标准答案:A知识点解析:本题考查switch语句的嵌套应用。m=1,执行外层switch语句的case1,此时进入内层switch语句,因为n=0,执行i++,遇到break退出内层switch语句,回到外层。由于外层没有break语句,继续执行case2后面的语句i++;j++。所以程序最后输出的结果是i=2,j=1。16、运行下面的程序,输出结果是()。main(){inta=3,b=0,c=0;if(a==b+c)printf("****");elseprintf("####");}A、有语法错误,不能通过编译B、输出####C、可以通过编译,但是不能通过连接,因而不能运行D、输出****标准答案:B知识点解析:本题考查if语句的一般形式。当inta=3,b=0,c=0时,a=b+c=0表示逻辑假,故if(a==b+c)条件为假,输出####。17、两次执行下面的程序,分别从键盘上输入6和4,则输出结果是()。main(){intx;scanf("%d",&x);if(x++>5)printf("%d",x);elseprintf("%d",x--);}A、74B、63C、75D、64标准答案:C知识点解析:当从键盘上输入6时,x=6,x++表达式的值为6,接着x自加1,即:x=7,故x++=6>5成立,输出x的值7;当从键盘上输入4时,x=4,x++表达式的值为4,接着x自加1,即x=5,故x++=4>5不成立,输出x--(后置运算),所以先输出x的值5,之后再进行自减1操作。18、以下程序运行后的输出结果是()。#include<stdio.h>main(){inti=0,j=0,k=0,x=35;if(i)x--;elseif(j);if(k)x=3;elsex=4;prinff("%d\n",x);}A、4B、34C、3D、35标准答案:A知识点解析:本题是两个并列的if语句。当inti=0;j=0,k=0,x=35时,i的逻辑值为0,故第一个if语句的条件为假,执行else操作。又因j=0,故第二条if语句if(j)的条件仍为假,不执行任何操作。接着顺序执行至if(k)语句,由于k=0,此if语句的条件仍为假,执行其后的else语句,x=4,故最后x的值为4。19、执行以下程序时,为了使输出结果为:t=4,则给i和j输入的值应该满足的条件是()。#include<stdio.h>main(){ints,t,ij;scanf("&d,&d",&i,&j);s=1,t=1;if(i>0)s=s+1;if(i>j)t=s+t:elseif(i==j)t=-5;elest=2*s:printf("t=%d\n",t);}A、i>jB、0<i<jC、i<j<0D、0>i>j标准答案:B知识点解析:本题考查if-else的嵌套应用。求解本题可以将上述4个条件逐个代入到程序中,最后看哪个满足题目要求。只有当j>i>0,程序顺序执行时,才能输出结果t=4。具体分析如下:当i>i>0,s=1,t=1时,i>0逻辑值为真,故执行if(i>0)s=s+1;语句后,s=s+1=1+1=2。由于if(i>j)条件为假,elseif(i==j)的条件仍为假,故程序将执行语句elset=2*s;,此时t=2*s=2*2=4。故选项B)正确。同理可求得,A)、C)和D)都不满足条件。故本题的答案为B)。20、下列关于switch语句和break语句的结论中,正确的是()。A、在switch语句中可以根据需要使用或不使用break语句B、在switch语句中必须使用break语句C、break语句是switch语句的一部分D、以上三个结论中有两个是正确的标准答案:A知识点解析:在C语言程序中,从语法上说bteak语句并不是switch语句中的一部分,在实际使用过程中也不是必须使用的。break语句是限定转向语句,可以中止执行switch语句,但是执行switch语句时可以不使用break语句。21、若运行下列程序时,输入以下指定数据,则正确的运行结果是()。#include<stdio.h>main(){inti;while((i=getchar())!=’\n’){switch(i){case’0’:case’1’:putchar(i+4);case’2’:putchar(i+4);break;case’3’:putchar(i+4);default:putchar(i+2);break;}}pfintf("\n");}输入数据(第一列):2473<回车>A、6688766B、66975C、66778777D、668966标准答案:B知识点解析:在执行switch语句的case时,遇到break语句时,结束当前switch语句,若case语句中无break语句,将接着执行下一个case语句。本题中,输入数据2473后,i的初值为2。执行switch语句时,首先执行“case’2’:putcllar(i+4);break;”语句,输出字符“2+4”即“6”。当程序第二次进入while循环,i的值被赋为4。执行switch语句时,将执行“default:putcIlar(i+2);break;”语句,输出字符“4+2”即“6”。当程序第三次进入while循环,i的值被赋为7,执行switch语句时,将执行default:putchar(i+2);break;语句,输出字符“7+2”即“9”。当程序第四次进入while循环,i的值被赋为3。执行switch语句时,将执行“case’3’:putchar(i+4);default:putcllar(i+2);break;"语句,先后输出字符“3+4”即“7”和“3+2”即“5”。由上分析可知运行结果为66975。22、在C语言中()。A、不能使用do-while语句构成的循环B、do-while语句构成的循环必须用break语句才能退出C、do-while语句构成的循环,当while语句中的表达式值为零时结束循环D、do-while语句构成的循环,当while语句中的表达式值为非零时结束循环标准答案:C知识点解析:本题考查对do-while循环语句的理解。Do-while语句是先执行循环体,再判断条件,当条件为真时,就再次执行循环体,当条件为假时就结束循环。23、以下程序的输出结果是()。#include<stdio.h>main(){inti;for(i=1;i<=5;i++){if(i%2)printf("*");elsecontinue;printf("#");}printf("$\n");}A、#*#*$B、*#*#$C、*#*#*#$D、*#*#*#$标准答案:D知识点解析:本题考查对continue语句功能的了解,由于循环体中有if语句存在,所以在循环过程中将会有选择地执行continue语句,遇到continue语句时,将会跳过循环体后半部分,提前结束本次循环,进入下一循环的条件判断。本题中,当i值为奇数时,表达式i%2值为1,输出*#,否则无输出。24、请阅读程序:#include<math.h>#include<stdio.h>main(){floata,b,c;scanf("%f%f",&a,&b);c=a/b;while(1){if(fabs(c)>1.6){a=b;b=c;c=a/b;}elsebreak;}printf("%f\n",b);}若运行时从键盘上输入3.62.4<回车>,则输出结果是()。A、1.500000B、1.600000C、2.000000D、2.400000标准答案:D知识点解析:本题考查甩break语句终止循环。程序中定义了两个实型变量a、b,并给scanf()函数赋值,键盘输入3.62.4<回车>后,a=3.6,b=2.4,c=a/b=3.6/2.4=1.5,因为c=1.5<1.6,退出循环,输出b的原值。表面上看,while(1)条件恒为真,将会产生死循环,但利用break语句可以终止循环。25、下面程序的输出是()。main(){inti=9;for(;i>0;i--){if(i%3==0){printf("%d",--i);continue;}}}A、741B、852C、963D、875421标准答案:B知识点解析:本题考查continue的应用。程序中for循环体内有一个continue语句,它的功能是提前结束本次循环体(即循环体的后半部分不执行了),直接来到下一次循环的条件判断。本题中,当i值为3的倍数(9,6,3)时,表达式i%3值为0,输出--i(8,5,2),否则无输出。第6次循环结束后,i--使i得0,此时i>0为假,循环结束。26、以下程序中,while循环的循环次数是()。main(){intn=0;while(n<10){if(n<1)continue;if(n==5)break;n++;}}A、1B、10C、6D、死循环,不能确定次数标准答案:D知识点解析:本题考查break语句和continue语句。循环控制变量n的初始值为0,满足n<10,进入循环体,此时,n的值也满足第一个if语句的条件(n<1),执行continue语句,开始第二次循环,可见,循环控制变量n的值用于保持不变(恒为0),语句“n++;”执行不到,即无法使n的值等于5或大于等于10,因此,是一个死循环。27、已定义i和i为int类型变量,则以下for语句的循环次数是()。for(i=0,j=0;i<=9&&j!=876;i++)scanf("%d",&j);A、最多执行9次循环B、循环最多执行10次C、是无限循环D、循环体一次也不执行标准答案:B知识点解析:本题中for循环的执行次数取决于关系表达式(i<=9&&j!=876)的结果。只要i<=9且j!=876,循环就将继续执行。结束循环取决于两个条件:i>9或者j=876,只要在执行scanf语句时,从终端输入876,循环就将结束。如果输入一直不等于876,则将由i值的增加使i>9,从而结束循环。按照题目中所给定的for语句,每次执行一次循环,i自增1,因此执行10次循环后,i值为10,循环最终也将结束。28、下面程序段的执行结果是()。i=3;do{print"%2d",i--);}while(!i);A、3B、321C、不打印任何内容D、陷入死循环标准答案:A知识点解析:do-while语句不管循环条件是什么都至少执行一次,在执行了一次打印语句后,i值变为2,!i为假(0),程序退出循环。29、执行下列程序的输出结果是()。#include<stdio.h>main(){inti,j,x=0,y=0;for(i=0;i<2,i++){for=j=0.j<3;j++)x++;x-=j;}y=i+j;printf("x=%d,y=%d\n",x,y);}A、x=0,y=3B、x=0,y=5C、x=1,y=3D、x=1,y=5标准答案:B知识点解析:本题考查C语言中for循环结束后循环变量的取值。第一次执行外循环时i=0,退出内层循环时j=3,x=3,再执行x-=j时得x=0;第二次执行外循环时i=1,退出内层循环时i=3,x=3,执行x-=j时得x=0,退出外层循环时i=2,j=3,执行y=i+j得y=5。30、在C语言中do-while语句中结束该循环的条件为()。A、0B、1C、非0D、true标准答案:A知识点解析:在C语言中,使while或do-while循环结束的条件都是while后面的表达式的值为0,只是无论表达式的值为0还是非0,do-while语句的循环体至少要执行一次。C语言中的do-while循环仍是“当型”循环而不是“直到型”循环。国家二级C语言机试(C语言程序设计)模拟试卷第3套一、选择题(本题共28题,每题1.0分,共28分。)1、有以下程序main(){inta=2,c=5;printf(’’a=%%d,b=%%d\n’’,a,c);)程序的输出结果是A、a=%2,b=%5B、a=%d,b=%dC、a=2,b=5D、a=%%d,b=%%d标准答案:B知识点解析:输出”%”,可以住格式控制中用”%%”表示,将输出一个”%”,而没有%表示格式符的开始,%%d不能表示格式符,因此仅输出:a=e/od,b=%d。2、若变量已正确定义为int型,要通过语句scanff’’%d,%d,d’’,&a,&b,&c);给a赋值1、给b赋值2、给c赋值3,以下输入形式中错误的是(注:□代表一个空格符)A、□□□1,2,3B、1,□□□2,□□□3C、1,2,3D、1□2□3标准答案:D知识点解析:本题丰要考查scanf函数的输入格式问题。scanf函数的一般形式为:scanf(格式控制字符串,地址1,地址2…);格式控制字符串是由双撇号括起来的字符串,它主要由两种类型的字符组成:①格式说明符由”%”和格式字符组成,如%c,%d,%s,%f等。其作用是将输入的数据转换为指定的格式,赋给scanf的二个参量(是地址1)所指定的内存单元(可能一次使用多个)中。格式说明以”%”字符为标志。②普通字符,是需要用户在输入时原样输入的字符。在小题中格式摔制字符串为”%d,%d,%d”,表示按十进制输入三个数据。要求在输入数据时,两个数据间一定以一个逗号”,”作为间隔符。3、若有定义:inta,b;通过语句scanf(’’%d;%d’,&a,&b);能把整数3赋给变量a,5赋给变量b的输入数据是A、3.5B、35C、3;5D、35标准答案:C知识点解析:在采用scanf这个函数输入数据时,要严格遵守其输入的规则定义。本题此函数定义的规则是,存两个整数之间加分号输入。4、以下叙述中正确的是A、当用scanf从键盘输入数据时,每行数据在没按下回车键(Enter键)前,可以任意修改B、花括号对{}只能用来表示函数的开头和结尾,不能用于其他目的C、空语句就是指程序中的空行D、复合语句在语法上包含多条语句,其中不能定义局部变量标准答案:A知识点解析:当使用scanf函数从键盘输入数据时,每行数据在未按下回车键之前,可以任意修改。但按下回车键后,scanf函数即接受了这一行数据,不能冉修改。选项A正确,对于选项B,{}还可以表明复合语句的开头结尾,或者循环体的开头结尾等,选项B错误,而空语句为,不是空行,选项C错误,在复合语句中可以定义变量为局部变量,选项D错误。5、有以下程序#includemain(){inta1,a2;charc1,c2;scanf(’’%d%c%d%c’’,&al,&c1,&a2,&c2);printf(’’%d,%c,%d,%c’’,a1,c1,a2,c2);}若想通过键盘输入,使得a1的值为12,a2的值为34,cl的值为字符a,c2的值为字符b,程序输出结果是:12,a,34,b则正确的输入格式是(以下□代表空格,代表回车)A、12□a□34□bB、12,a,34,bC、12a34bD、12□a34□b标准答案:C知识点解析:本题考查scanf语句。scanf()函数是格式化输入函数,它从标准输入设备(键盘)读取输入的信息。其调用格式为:scanff”<格式化字符串>”,<地址表>)格式化字符串包括以下3类不同的字符;①格式化说明符:格式化说明符与前而用的printf()函数中的格式说明符基本相同。②空白字符:空白字符会使scanff)函数在读操作中略去输入中的一个或多个空白字符。③非空白字符:一个非空白字符会使scanff()函数在读入时剔除掉与这个非空白字符相同的字符。由于在scanf函数中,几个变量之间没有任何间隔,所以输入的时候,也同样不应该有间隔。6、以下程序段完全正确的是A、intk,*p=&k;scanf(’’%d’’,p);B、int*p;scanf(’’%d’’,p);C、int*p;scanf(’’%d’’,&p);D、intk,*p;*p=&k;scanf(’’%d’’,p);标准答案:A知识点解析:选项B没有对指针进行初始化,无效指针。选项C错在没有对指针进行初始化,无效指针,并且在scanf(“%d”,&p)中无需再进行取地址操作。选项D,语句*p=&k;的左端*p是指针所指内存空间的值,&k是地址,应为p=&k。7、有以下程序段charname[20];intnum;scanf(’’name=%snum=%d.t,name,&num);当执行上述程序段,并从键盘输入:name=Lilinum=1001后,name的值为A、name=LiftB、Lilihum=C、name=Lilinum=1001D、Lili标准答案:D知识点解析:在题目中以字符串的形式给字符数组赋值,所以字符数组name的值为Lili。8、有以下程序main(){intx=1,y=0;if(!x)y++;elseif(x=0)if(x)y+=2;elsey+=3;pfintf(’’%d\n’’,y);)程序运行后的输出结果是A、2B、0C、1D、3标准答案:B知识点解析:x=1,if和elseif的条件都不满足,故y值不改变输出。9、设有定义:inta=1,b=2,c=3;以下语句中执行效果与其它三个不同的是A、if(a>b)c=a;a=b;b=c;B、if(a>b){c=a,a=b,b=c;}C、if(a>b)c=a,a=b,b=c;D、if(a>b){c=a;a=b;b=c;)标准答案:A知识点解析:在C语言中,用分号表示一条语句的结束,用{}把几条语句放在一块表示一个语句块,其整体表示一个功能。因而在题目给出的四个选项中,选项B、C、D表示的功能相同,而选项A表示的是一条if语句,两条赋值语句。10、有以下计算公式若程序前面已经在命令行中包含math.h文件,不能够正确计算上述公式的程序段是A、y=sqrt(x);if(x<0)y=sqrt(-x);B、if(x>=0)y=sqrt(x);elsey=sqrt(-x);C、iffx>=0)y=sqrt(x);iffx<0)y=sqrt(-x);D、y=sqrt(x>=07x:-x);标准答案:A知识点解析:由题意可知计算公式的含义是:当x大于等于0时,v值等于x的算*平方根;当x小于0时,y值等于x的相反数的算*平方根。所以选项B用一个完整的ifelse语句表达了计算公式的含义;选项C用两个if语句表达了计算公式的含义;选项D在求平方根函数的后面用x≥0?x;-x条件表达式来表达了计算公式的含义。选项A没有用C语言语句正确的表达计算公式的含义。11、下列条件语句中,输出结果与其他语句不同的是A、if(a=0)printf(’’%d\n,x);elseprintf(’’%d\n’’,y);B、if(a=0)printf(’’%d\n’’,y);elseprintf(’’%d\n’’,x);C、if(a!=0)printf(’’%d\n’’,x);elseprintf(’’%d\n’’,y);D、if(a)printf(’’%d\n’’,x);elseprintf(’’%d\n’’,y);标准答案:A知识点解析:选项B、C、D这三条语句都是在变量不等于0的情况下,输出x;等于0的情况下输出v,而选项A则正好相反。12、若有以下程序#include<stdio.h>main(){inta=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,-1B、2,2,2,4C、1,2,3,4D、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。13、下列叙述中正确的是A、在switch语句中必须使用defaultB、break语句必须与switch语句中的case配对使用C、在switch语句中,不一定使用break语句D、break语句只能用于switch语句标准答案:C知识点解析:break为C语言关键字,又称间断语句。break语句的功能是跳出正在执行的条件语句或循环语句。它可以出现在switch语句中,也可以出现在循环语句中。default是关键字,起标号的作用,代表所有case标号之外的那些标号。default标号可以出现在语句体中任何标号位置上。在switch语句体中也可以没有default标号。14、有以下程序#includemain(){intx=1,y=0,a=0,b:0;switch(x){case1:switch(Y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;)printf(’’a=%d,b=%d\n’’,a,b);}程序运行后的输出结果是A、a=1,b=1B、a=1,b=0C、a=2,b=1D、a=2,b=2标准答案:C知识点解析:本题考查的是用switch语句实现多分支选择结构,首先进入第一个switch(x)判断,进入case1中进行嵌套判断,如果switch(y)也成立,a自加1,遇到break,退出嵌套,接着执行case2,a自加为2,b自加为1,遇到break,结束循环,此时a=2,b=1。15、以下程序段中,与语句:k=a>b?(b>c?1:0):0;功能相同的是A、if((a>b)Tl(b>c))k=1;elsek=0;B、if(a<=b)k=0;elseif(b<=c)k=1;C、if((a>b)&&(b>c))k=1;elsek=0;D、if(a>b)k=1;elseif(b>c)k=1;elsek=0;标准答案:C知识点解析:题干中的表达式的功能是当a>b并且b>c时,变量k的值等于1,其余情况下,变量k的值都是等于0。16、有以下程序#include<stdio.h>main(){inty=10;while(y-);printf(’’Y=%d\n’’,y);}程序执行后的输出结果是A、y=0B、y=-1C、y=1D、while构成无限循环标准答案:B知识点解析:在while循环中每次变量y的值减l,直到其值等于0时退出循环,这时y的再减1变为-1。17、有以下程序#include<stdio.h>yoidmain(){ints;scanf(’’%d’’,&s);while(s>0){switch(s){case1:printf(’’%d’’,s+5);case2:printf(’’%d’’,s+4);break;case3:printf(’’%d’’,s+3);default:printf(’’%d’’,s+1);break;}scanf(’’%d’’,&s);}}运行时,若输入123450,则输出结果是A、66656B、6566456C、66666D、6.66666e+006标准答案:B知识点解析:这道试题主要考查了switch和break语句,当变量s的值为1时,执行casel、case2两条语句,输出65;当变量s的值为2时,执行case2语句,输出6;变量s的值为3时,执行case3、default两条语句,输出64;变量s的值为4时,执行default语句,输入5;变量s的值为5时,执行default语句,输出6;变量s的值为0时,程序运行结束。18、要求通过while循环不断读入字符,当读入字*N时结束循环。若变量已正确定义,以下正确的程序段是A、while(ch=getchar()=’N’)printf(’’%c’’,ch);B、while(ch=getchar()=’’N’’)pfintf(’’%c’’,ch);C、while((ch=getchar())!=’N’)printf(’’%c’’,ch);D、while((ch=getchar())=’N’)printf(’’%c’’,ch);标准答案:C知识点解析:while循环的执行过程如下:①计算while后面圆括号中表达式的值,当值为非0时,执行步骤②:当值为0时,执行步骤④;②执行循环体一次:③转去执行步骤①:④退出循环。在选项C中,表达式(ch=getchar())!=’N’表示输入的字符不等于N,如果这个条件表达式成立,则执行循环体,打印输出输入的字符。如果这个条件表达式不成立,即输入的字符等于N,则退出循环。19、有以下程序main(){inta=-2,b=0;while(a++&&++b);printf(’’%d,%d\n’’,a,b);)程序运行后输出结果是A、0,3B、1,2C、1,3D、0,2标准答案:B知识点解析:循环体为空,共执行2次。第一次变量a初值为-2,b初值为0,表达式a++&&++b值为l,同时a的值为-1,b的值为1,第二次循环条件判断以后,a的值为0,b的值2,执行循环体空,第三次判断条件表达式值为0,不执行循环体,而a的值为1,但是表达式a++的值为0,因此不计算表达式++b的值,b的值仍为2。20、以下不构成无限循环的语句或语句组是A、n=0;do{++n;)while(n<=0);B、n=0;while(1){n++;)C、n=10;while(n);{n-;}D、for(n=0,i=1;;i++)n+=i;标准答案:A知识点解析:选项B中while(1)永远为真所以进入死循环,选项C中while(n=10)同理,选项D中for循环没有循环限定条件也将进入无限循环,只有选项A中while(n<=01循环判定成立,循环将不进入无限循环。21、若有以下程序main(){inta=-2,b=0;do{++b;)while(a++);printf(’’%d,%d\n’’,a,b);)则程序的输出结果是A、0,2B、1,2C、1,3D、2,3标准答案:C知识点解析:由于a的初始值等于.2,所以while循环语言执行三次结束,第一次a=-2,b=1,然后判断循环条件a++非零,执行第二次循环体a=-1,b=2,判断循环条件非零,执行循环体a=0,b=3,判断循环条件为0,此时变量a的值等于1。22、有以下程序段inti,n;for(i=0;i<8;i++){n=rand()%5;switch(n){case1:case3:printf(’’%d\n’’.n);break;case2:case4:printf(’’%d\n’’,n);continue;case0:exit(0);}printf(’’%d\n’’,n);}以下关于程序段执行情况的叙述,正确的是A、当产生的随机数n为4时结束循环操作B、当产生的随机数n为1和2时不做任何操作C、当产生的随机数n为0时结束程序运行D、for循环语句固定执行8次标准答案:C知识点解析:rand()函数功能为产生一个随机数,rand()%5,则产生0~4之间的任意随机数,当产生的随机数n为0时,执行”caseO:exit(0)”这条语句,结束程序的运行。23、有以下程序#include<stdio.h>yoidmain(){intc=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、9B、7C、5D、3标准答案:D知识点解析:在这段程序中,整型变量c的初始值赋为0,在第一次执行for循环语句时,因为此时变量k的值等于1,所以在switch语句中首先执行default语句,给变量c的值加l,因为在default语句后面没有break语句,所以就会接着执行case2这条语句,再给变量c的值加1,其值变为2,这时退出switch语句块,进入第二次for循环,此时k的值等于2,就会执行switch语句块中的case2这条语句,再给变量c的值加1,这时变量c的值就是3,此时退出switch语句块,循环变量k的值加1,成为3,此时已不再满足循环条件,执行程序中的最后一条语句,把变量c的值在屏幕上输出。24、有以下程序#include<stdio.h>yoidmain(){charb,c;inti;b=’a’;c=’A’;for(i=0;i<6;i++){if(i%2)putchar(i+b);elseputchar(i+c);}pfintf(’’\n’’);}程序运行后的输出结果是A、abcDEFB、abcDeFC、abcdefD、abcdEf标准答案:D知识点解析:循环变量i从0依次递增到5,依次输出字*A,b,c,d,E,f。25、若有以下程序main(){inta=6,b=0,c=0;for(;a;){b+=a;a-=++C;}printf(’’%d,%d,%dkn’’,a,b,c);)则程序的输出结果是A、1,14,3B、0,18,3C、0,14,3D、0,14,6标准答案:C知识点解析:循环体执行三次,a初值6,第一次执行循环体,b=6,题a=5。继续执行循环体,b=11,a=3,第三次执行循环体,b=14,a=0,循环退出。26、若有以下程序#includechar*a=’’you’’;charb[]=’’WelcomeyoutoChina!’’;main(){inti,j:0;char*p;for(i=0;b[i]!=’\0’;i++){if(*a=b[i]){p=a;for(j=i;*p!=’\0’;j++){if(*P!=b[j])break;p++;}if(*p=’\0’)break;}}printf(’’%s’’,&b[i]);}则程序的输出结果是A、youtoChina!B、toChina!C、meyoutoChina!D、China!标准答案:A知识点解析:程序中循环部分的主要功能是,在字符串b中寻找是否含有予串a,如果含有则退出,此时i为子串a在字符串b中第一次出现的位置。因此最后的输出函数则从第i个字符开始一直输出到字符串的末尾。27、有以下程序main(){inti,j;for(i=1;i<4;i++){for(j=i;j<4;j++)printf(’’%d*%d=%d’’,i,j,i*j);printf(’’\n’’);}}A、1*1=11*2=21*3=32*1=22*2=43*1=3B、1*1=11*2=22*2=41*3=32*3=63*3=9C、1*1=11*2=21*3=32*2=42*3=63*3=9D、1*1=12*1=22*2=43*1=33*2=63*3=9标准答案:C知识点解析:外层for循环的自变量i从1开始,每次循环后增1,直到i等于3结束。对于外层循环自变量i的每一个值,内层循环的自变量i每次从i开始,每次循环后增l,直到j等于3结束。所以在每次外循环开始后,内层循环在一行先打印一=两个乘数的积,然后回车换行,下次循环从下一行开始打印输出结果。28、以下叙述中正确的是A、continue语句的作用是:使程序的执行流程跳出包含它的所有循环B、break语句只能用在循环体内和switch语句体内C、在循环体内使用break语句和continue语句的作用相同D、break语句只能用于switch语句体中标准答案:B知识点解析:只能在循环体内和switch语句体内使用break语句。continue语句的作用是结束本次循环,即跳过本次循环体中continue语句后面的语句,立刻进行下一次的循环条件判断,可以理解为仅结束本次循环。而break语句可以使程序流程跳出switch语句体,也可用break语句在循环结构中终止循环体。国家二级C语言机试(C语言程序设计)模拟试卷第4套一、选择题(本题共42题,每题1.0分,共42分。)1、以下叙述中正确的是A、赋值语句是一种执行语句,必须放在函数的可执行部分B、scanf和printf是C语言提供的输入和输出语句C、由printf输出的数据都隐含左对齐D、由printf输出的数据的实际精度是由格式控制中的域宽和小数的域宽来完全决定的标准答案:A知识点解析:C语言本身没有提供输入输出语句,但是可以通过调用标准库函数中提供的输入和输出函数来实现输入和输出,选项B)错误;采用printf输出数据,输出数据都默认为右对齐,若要左对齐,可以在格式控制中的“%”和宽度之间加一个“-”号来实现,选项C)错误:printf的输出精度由变量的类型决定,与域宽无关,选项D)错误。2、有如下程序段:intx=12;doubley=3.141593;printf("%d%8.6f",x,y);其输出结果是A、12,3.141593B、12,3.141593C、123.1415930D、123.141593标准答案:D知识点解析:本题

温馨提示

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

评论

0/150

提交评论