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

下载本文档

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

文档简介

国家二级C语言(C语言程序设计)机试模拟试卷1(共9套)(共247题)国家二级C语言(C语言程序设计)机试模拟试卷第1套一、选择题(本题共26题,每题1.0分,共26分。)1、fun函数的功能是:通过键盘输入给x所指的整型数组所有元素赋值。在下划线处应填写的是#include<stdio.h>#defineN5Voidfun(intx[N]){intm;for(m=N-l;m>=0;m--)scanf("%d",_______);}A、x+mB、x[m+1]C、x+(m++)D、x[++m]标准答案:A知识点解析:本题考查数组和scanf函数的使用。程序通过for循环来给数组元素斌值,赋值语句通过调用scanf函数来实现。scanf函数从键盘接收数据,函数的第二个参数是数据保存的地址,因此选项B)和选项D)不是地址,错误。选项A)和选项C)是地址,但是选项C)的m值会++自增,然后for循环里面又m--自减,会导致死循环,不满足要求,选项A)正确。2、设有定义语句intx[61={2,4,6,8,5,7),*p=x,i;要求依次输出x数组6个元素中的值不能完成此操作的语句是A、for(i=0;i<6;i++)printf("%2d",*(p++));B、for(i=0;i<6;i++)printf("%2d",*(p+i));C、for(i=0;i<6;i++)printf("%2d",*p++);D、for(i=0;i<6;i++)pfintf("%2d",(*p)++);标准答案:D知识点解析:指针p指向数组x,因此可以使用p来输出数组x的值。选项A)中,*(p++)表示先取出p指向的元素的值,然后p++指向下一个元素,满足要求;选项B)中*(p+i)每次i的值发生变化,(p+i)指向x数组的x[i]元素,因此*(p+i)是取出数组x的x[i]元素的值,满足要求;选项C)和选项A)相比,少了括号,由于*运算符的优先级比++要求,因此,因此*p++表示先取出p指向的元素的值,然后p再++指向下一个元素,满足要求;选项D)中(+p)++表示先取出p指向的元素的值,然后该值++,p没有增加,每次循环都*p取出的x[0]的值,不满足要求。3、程序段:intx=12;doubley=3.141593;printf("%d%8.6f",x,y);的输出结果是A、123.141593B、123.141593C、12,3.141593D、123.1415930标准答案:A知识点解析:本题考查格式化输出函数printf。在printf函数调用里面首先输入整型变量x的值12,然后按照“%8.6f”格式输出double类型变量y的值,“%8.6f”表示输出8位,小数点后输出6位。4、有以下程序main(){chara,b,c,d;scanf("%c%c",&a,&b);c=getchar();d=getchar();printf(”%c%c%c%cha”,a,b,c,d);}当执行程序时,按下列方式输入数据(从第1列开始,代表回车,注意:回车也是一个字符)1234则输出结果是A、12B、1234C、123D、1234标准答案:C知识点解析:scanf和gecchar函数分别从键盘上读入一个字符,因此输入12空格34,则变量a中存放的为1,b中存放2,c中存放空格,d中存放3。5、设有定义:inta;floatb;执行scanf("%2d%f",&a,&b);语句时,若从键盘输入876543.0则a和b的值分别是A、876和543.0B、87和6.0C、87和543.0D、76和543.0标准答案:B知识点解析:在输入函数scanf的输入格式符%2d%f中,2d表示输入的数据的宽度为2,所以当从键盘输入876543.0<cR>时,这时把输入数字串的前两位87赋给变量a,然后将紧接着将6按照格式控制符%f的形式赋给变量b,所以b的值为6.000000。6、以下叙述中正确的是A、当用scanf从键盘输入数据时,每行数据在没按下回车键(Enter键)前,可以任意修改B、花括号对{}只能用来表示函数的开头和结尾,不能用于其他目的C、空语句就是指程序中的空行D、复合语句在语法上包含多条语句,其中不能定义局部变量标准答案:A知识点解析:当使用scanf函数从键盘输入数据时,每行数据在未按下回车键之前,可以任意修改。但按下回车键后,scanf函数即接受了这一行数据,不能再修改。选项A)正确,对于选项B),{}还可以表明复合语句的开头结尾,或者循环体的开头结尾等,选项B)错误,而空语句为“:”,不是空行,选项C)错误,在复合语句中可以定义变量为局部变量,选项D)错误。7、有以下程序#include<stdio.h>main(){charc1,c2,c3,c4,c5,c6;scanf("%c%c%c%c",&c1,&c2,&c3,&c4);c5=getchar();c6=getchar();putchar(c1);putchar(c2);printf("%c%c\n",c5,c6);}程序运行后,若从键盘输入(从第1列开始)12345678则输出结果是A、1256B、1278C、1245D、1267标准答案:C知识点解析:当用seanf函数从键盘输入数据时,每行数据的未尾按下回车键(Enter键)之前,可以任意修改。但按下回车键putchar(c1)(Enter键)之后,scanf函数即接受了这一行数据,不能再回去修改。所以本题中,当输入123<CR>时,变量c1、c2、c3的值分别为1、2、3,当输入45678<CR>时,变量c5、c6的值4和5。所以用输出函数putehar(c1)输出1.putchar(c2)输出2,printf("%c%c\n",c5,c6)输出45。8、有以下程序段intj;floaty;charname[50];scanf("%2d%f%s",&j,&y,name);当执行上述程序段,从键盘上输入555667777abc后,y的值为A、55566.0B、7777.0C、566.0D、566777.0标准答案:C知识点解析:因为在输入格式控制符中指定变量j的输入格式控制符为“%2d”,即变量j所占的宽度为2,所以变量i只接收输入数据的前两位,从第三位开始直到空格之间的输入整数都会被保存到变量y中,因为y为浮点型数据,所以输出结果为选项C)。9、以下是if语句的基本形式:if(表达式)语句其中“表达式”A、必须是逻辑表达式B、必须是关系表达式C、必须是逻辑表达或关系表达D、可以是任意合法的表达式标准答案:D知识点解析:本题考查if语句,C语言中if语句中的表达式可以是任意合法的表达式。10、有以下程序段inta,b,c;a=10;b=50;c=30;if(a>b)a=b,b=c;c=a;printf("a=%db=%dc=%d\n",a,b,c);程序的输出结果是A、a=10b=50c=30B、a=10b=30c=10C、a=10b=50c=10D、a=50b=30c=50标准答案:C知识点解析:本题的程序段首先定义三个整型变量a。b。c,并且其初始值分别等于10,50,30.然后判断a>b是否成立,如果条件成立,则把b的值赋给a,把c的值赋给b。由a和b的初始值可知,此条件表达式不成立,所以a和b的值保持不变。再执行下一条语句,把a的值赋给c,所以c的当前值等于10。最后由输出语句输出变量a,b,c的当前值,分别为10,50,10。11、有以下计算公式若程序前面已经在命令行中包含math.h文件,不能够正确计算上述公式的程序段是A、y=sqrt(x);if(x<0)y=sqrt(-x);B、if(x>=0)y=sqrt(x);elsey=sqrt(-x);C、if(x>=0)y=sqrt(x);if(x<0)y=sqrt(-x);D、y=sqrt(x>=07x:-x);标准答案:A知识点解析:由题意可知计算公式的含义是:当x大于等于0时,y值等于x的算*平方根;当x小于0时,y值等于x的相反数的算*平方根。所以选项B)用一个完整的ifelse语句表达了计算公式的含义:选项C)用两个if语句表达了计算公式的含义;选项D)在求平方根函数的后面用x≥0?x:-x条件表达式来表达了计算公式的含义。选项A)没有用C语言语句正确的表达计算公式的含义。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、5,1,2,-1D、1,2,3,4标准答案:B知识点解析:代码中有两条并列的if语句,第一条if语句执行,(a=2)||(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、以下叙述中正确的是A、if语句只能嵌套一层B、不能在else子句中再嵌套if语句C、if子句和else子句中可以是任意的合法的C语句D、改变if-else语句的缩进格式,会改变程序的执行流程标准答案:C知识点解析:含else子句的if语句的格式为ifr表达式)语句1else语句2其中if和else是C语言的关键字。“语句1”称为if子句,“语句2”称为else子句,这些子句只允许为一条语句,若需要多条语句时,则应该使用复合语句,对于if~fielse语句的嵌套原则是比较自由的。14、若有定义:floatx=1.5;inta=1,b=3,c=2;则正确的switch语句是A、switch(a+b){case1:printf("*\n");case2+1:printf("**\n");}B、switch((int)x);{case1:printf("*\n");case2:printf("**\n");}C、switch(x){case1.0:printf("*\n");case2.0:printf("**\n");}D、switch(a+b){case1:printf("*\n");casec:printf("**\n");}标准答案:A知识点解析:在C语言中,switch()后一对圆括号中的可以是整型表达式或字符表达式。case语句后面的常量表达式的类型必须与switch后圆括号中的表达式类型相同,各case语句标号的值应该互不相同,选项B)中switch后括号表达式出错,选项C)中case后面的常量类型不正确,选项D)中Case后面出现了变量表达式,所以D)不正确。15、有以下程序#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。16、关于“while(条件表达式)循环体”,以下叙述正确的是A、循环体的执行次数总是比条件表达式的执行次数多一次B、条件表达式的执行次数与循环体的执行次数一样C、条件表达式的执行次数总是比循环体的执行次数多一次D、条件表达式的执行次数与循环体的执行次数无关标准答案:C知识点解析:while语句中表达式是循环条件,语句为循环体。while语句中当表达式计算的值为真(非0)时,执行循环体语句。因此条件表达式执行的次数总是比循环体多一次。17、有以下程序#include<stdio.h>voidmain(){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、6666656标准答案:B知识点解析:这道试题主要考查了switch和break语句,当变量s的值为1时,执行case1、case2两条语句,输出65;当变量s的值为2时,执行case2语句,输出6;变量s的值为3时,执行case3、default两条语句,输出64;变量s的值为4时,执行default语句,输入5,变量s的值为5时,执行default语句,输出6;变量s的值为0时,程序运行结束。18、若有以下程序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。19、以下不构成无限循环的语句或语句组是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<=0)循环判定成立,循环将不进入无限循环。20、有以下程序main(){inta=3;do{printf("%d,",a-=2);}while(!(--a));printf("\n");}程序运行后的输出结果是A、1,1B、1,-2,C、3,0,D、1,0标准答案:B知识点解析:循环体执行两次。首先输出a=1,然后判断表达式!(--a),a为0,循环条件表达式值为1,执行第二次循环体,输出a=-2。判断循环条件表达式值为0,循环退出。21、有以下程序#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。22、设变量已正确定义,则以下能正确计算f=n!的程序段是A、f=0;for(i=;i<=n;i++)f*=i;B、f=1;for(i:1;i<n;i++)f*=i;C、f=1;for(i=n;i>1;i++)if=i;D、f=1;for(i=n;i>=2;i--)f*=i;标准答案:D知识点解析:本题主要考查for循环的使用。题目要求计算阶乘n!,通过for循环来实现,循环变量i可以从1到n(包括n)或者从n到1,在循环体内做累乘。选项A)中,累乘变量的初值为0,最终计算结果也为0:选项B)中循环次数为n-1次,累乘结果少乘了n;选项C)是死循环;选项D)正确。23、有以下程序段inti,n;for(i=0;i<8;i++){n=rand()%5;switch(n){case1:case3:printf("%d\n",n);break;case2:case4:printf("%(1\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时。执行case0:exit(0)这条语句,结束程序的运行。24、若有以下程序#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个字符开始一直输出到字符串的末尾。25、以下叙述中正确的是A、循环发生嵌套时,最多只能两层B、三种循环for,while,do-while可以互相嵌套C、循环嵌套时,如果不进行缩进形式书写代码,则会有编译错误D、for语句的圆括号中的表达式不能都省略掉标准答案:B知识点解析:在一个循环体内又完整包含了另一个循环,称为循环嵌套。循环的嵌套可以多层,但每一层循环在逻辑上必须是完整的。for循环、while循环、do-while循环可咀互相嵌套,但每层循环在逻辑上必须完整。而在for语句中,for语句中的表达式可以部分或全部省略,但两个“;”不可省略。26、以下叙述中正确的是A、break语句不能用于提前结束for语句的本层循环B、continue语句使得整个循环终止C、使用break语句可以使流程跳出switch语句体D、在for语句中,continue与break的效果是一样的,可以互换标准答案:C知识点解析:用break语句可以使程序流程跳出switch语句体,也可用break语句在循环结构中终止循环体,从而提前结束循环。而continue语句的作用是结束本次循环,即跳过本次循环体中continue语句后面的语句,立刻进行下一次的循环条件判断,可以理解为仅结束本次循环。国家二级C语言(C语言程序设计)机试模拟试卷第2套一、选择题(本题共26题,每题1.0分,共26分。)1、设有定义:intn1=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。2、以下叙述中正确的是A、赋值语句是一种执行语句,必须放在函数的可执行部分B、scanf和printf是C语言提供的输入和输出语句C、由printf输出的数据都隐含左对齐D、由printf输出的数据的实际精度是由格式控制中的域宽和小数的域宽来完全决定的标准答案:A知识点解析:C语言本身没有提供输入输出语句,但是可以通过调用标准库函数中提供的输入和输出函数来实现输入和输出,选项B)错误:采用printf输出数据,输出数据都默认为右对齐,若要左对齐,可以在格式控制中的“%”和宽度之间加一个“-”号来实现,选项C)错误;printf的输出精度由变量的类型决定,与域宽无关,选项D)错误。3、执行以下程序段后,w的值为intW=’A’,x=14,y=15;w=((x||y)&(w<’a’));A、-1B、NULLC、1D、0标准答案:C知识点解析:本题考查表达式和逻辑运算。x和y分别为14和15.因此(x||y)的值是真。w的值为’A’,其ASCII值为65,’a’的ASCII值为97,因此(w<’a’)的值为真。表达式w=((x||y)&(w<’a’))的前后两个值均为真,整个表达式的值为真(1)。4、若有以下程序#include<stdio.h>main(){intb=10,a=-11;a%=b%=4:printf("%d%d\n",a,b);}则程序的输出结果是A、12B、-1-2C、-12D、1-2标准答案:C知识点解析:对于表达式a%=b%=4为复合的赋值运算,结合性自右至左,相当于先计算b=b%4,a=a%b;结果的符号和第一个操作数的符号相同,因此b为2,a的结果为-1。5、若变量已正确定义为int型,要通过语句scanf("%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”,表示按十进制输入三个数据。要求在输入数据时,两个数据间一定以一个逗号“,”作为问隔符。6、若有定义inta;floatb;doublec;程序运行时输入:345能把值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)。否则,数据不能正确输入。7、以下叙述中正确的是A、在scanf函数的格式串中,必须有与输入项一一对应的格式转换说明符B、只能在printf函数中指定输入数据的宽度,而不能在scanf函数中指定输入数据占的宽度C、scanf函数中的字符串,是提示程序员的,输入数据时不必管它D、复合语句也被称为语句块,它至少要包含两条语句标准答案:A知识点解析:输入函数的调用格式:scanf(格式控制,输入项1,输入项2,…)格式控制的主要作用是指定输入时的数据转换格式,格式串中,必须含有与输入项一一对应的格式转换说明符选项A)正确,在scanf。函数的格式字符前可以加入一个正整数指定输入数据所占的宽度.但不可以用实数指定小数位的宽度,选项B)错误,scanf函数中的格式控制字符串是为了输入数据用的,无论其中有什么字符,也不会输出到屏幕上,因此若想在屏幕上输出提示信息,应该首先使用printf函数输出,选项C)错误,复合语句还可以是空语句昵,并没有规定语句条数,选项D)错误。8、以下程序段完全正确的是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”。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。10、有以下程序main(){intx=1,y=0;if(!x)y++;elseif(x==0)if(x)y+=2;elsey+=3;printf("%d\n",y);}程序运行后的输出结果是A、2B、0C、1D、3标准答案:B知识点解析:x=1,if和elseif的条件都不满足,故y值不改变输出。11、if语句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是A、必须是整数值B、必须是正数C、可以是任意合法的数值D、必须是逻辑值标准答案:C知识点解析:在if语句中,表达式可以是在意合法的数值。当其值为非零时,执行jf语句,为0时执行else语句。12、有以下程序main(){inta=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);elseprintf("%d,%d,%d\n",a,b,c);elseprintf("%d,%d,%d\n",a,b,c);}程序运行后的输出结果是A、1,3,2B、1,2,3C、1,3,3D、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。13、若有以下程序#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。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){casec1:y=a-b;casec2:y=a+b;}D、switcha*b{case10:x=a+b;default:y=a-b:}标准答案:B知识点解析:本题考查switch的使用。选项A)中的case0和case4没有break语句;选项B)正确;选项C)中的case后面不是常量,错误;选项D)中switch后面没有括号。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、在嵌套使用if语句时,C语言规定else总是A、和之前与其具有相同缩进位置的if配对B、和之前与其最近的if配对C、和之前与其最近的且不带else的if配对D、和之前的第一个if配对标准答案:C知识点解析:本题考查if语句,在C语言中,else总是和之前与其最近的且不带else的if配对。17、有以下程序main(){intk=5;while(--k)printf("%d",k-=3);printf("\n");}执行后的输出结果是A、2B、4C、1D、死循环标准答案:C知识点解析:在程序语句中,k的初始值为5,进行第1次while循环后-k自减l为4,菲0,执行循环体里的printf语句,输出1,此时k的值变为1。程序执行第2次循环时,k自减1变为0,为假,退出while循环语句。所以程序的最后结果为1。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是一个逻辑表达式。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初值为o,表达式a++&&++b值为1,同时a的值为-1,b的值为1。第二次循环条件判断以后,a的值为0,b的值2,执行循环体空,第三次判断条件表达式值为0,不执行循环体,而a的值为1,但是表达式a++的值为0,因此不计算表达式++b的值,b的值仍为2。20、若变量己正确定义,有以下程序段i=0;doprintf("%d,",i);while(i++);printf("%d\n",i);其输出结果是A、0,0B、1.1C、0,1D、程序进入无限循环标准答案:C知识点解析:do…while循环的执行过程如下:①执行do后面的循环体中的语句。②计算while后一对圆括号中表达式的值。当值为非0时,转去执行步骤①:当值为0时,执行步骤③。③退出do…while循环。对于本题变量i的初始值等于“0”,接着执行do后面的循环体中的语句,输出变量i的值0。再判断while后面括号中表达式i++的值,其值为0,所以循环结束。此时变量i的值经过自加已经变为l,所以再次输出i的值“1”。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,循环结束,因此循环只能执行一次。22、有以下程序#include<stdio.h>voidmain(){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的值加1,因为在default语句后面没有break语句,所以就会接着执行case2这条语句,再给变量c的值加1,其值变为2,这时退出switch语句块,进入第二次for循环,此对k的值等于2,就会执行switch语句块中的case2这条语句,再给变量c的值加l,这时变量c的值就是3,此时退出switch语句块,循环变量k的值加1,成为3,此时已不再满足循环条件,执行程序中的最后一条语句,把变量c的值在屏幕上输出。23、有以下程序#include<stdio.h>voidmain(){charb,c;inti;b=’a’;c=’A’;for(i=0:i<6;i++){if(i%2)putchar(i+b);elseputchar(i+c);}printf("\n");}程序运行后的输出结果是A、ABCDEFB、aBcDeFC、abcdefD、AbCdEf标准答案:D知识点解析:循环变量i从0依次递增到5,依次输出字母A,b,c,d,E,f。24、若有以下程序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。25、有以下程序main(){inti,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=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的每一个值,内层循环的自变量j每次从i开始,每次循环后增1,直到j等于3结束。所以在每次外循环开始后,内层循环在一行先打印i*j=两个乘数的积,然后回车换行,下次循环从下一行开始打印输出结果。26、有以下程序#include<stdio.h>main(){intx=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语言(C语言程序设计)机试模拟试卷第3套一、选择题(本题共27题,每题1.0分,共27分。)1、以下能正确定义且赋初值的语句是A、intn1=n2=10:B、charc=32;C、floatf+1.1:D、doublex=12.3E2.5;标准答案:B知识点解析:本题主要考查变量的定义和赋值,C语言中变量的定义形式为:类型说明符变量名=初始值:选项A)中。n1和n2只能单独赋初值;选项B)正确,定义了一个字符变量c,初值为32;选项C错误,初值设置自身不能参与运算;选项D)中字母E后面的指数必须是整数。2、以下选项中,合法的是A、charname[10];name="char";B、charstrl[5]=”pass”,str2[6];str2=str1;C、charstr3[]:{’d’,’e’,’b’,’u’,’g’,’\0’};D、charstr4;str4:"helloworld";标准答案:C知识点解析:本题考查字符数组。选项A)定义了一个字符数组name,接下来直接给name赋值字符串是错误的;选项B)定义了两个字符串数组str1和str2.str1和str2表示两个字符串的首地址,直接把str1赋值给str2错误;选项C)是正确的;选项D)定义了一个字符变量str4,给字符变量赋值字符串是错误的。3、有以下程序段intk=0,a=1,b=2,c=3;k:a<b?b:a;k=k>c?c:k;执行程序段后,k的值是A、3B、2C、1D、0标准答案:B知识点解析:本题主要考查条件表达式。k=a<b?b:a中a<b为真,因此k的值为b,即k=2。k=k>c?c:k中k>c为假,k的值为2,4、有如下程序段:intx=12;doubley=3.141593;printf("%d%8.6f",x,y);其输出结果是A、123.141593B、12,3.141593C、123.1415930D、123.141593标准答案:D知识点解析:本题考查printf语句。printf()函数是格式化输出函数,一股用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。printf()函数的调用格式为:printf"<格式化字符串>",(参量表>)。其中,“格式化字符串”包括两部分内容:一部分是正常字符,这些字符将按原样输出:另一部分是格式化规定字符,以“%”开始,后跟一个或几个规定字符,用来确定输出内容格式。格式化字符串的格式是:%[标志][输出最小宽度][精度][长度]格式字符①标志:标志字符为-、+、空格等,其意义如下所示:-:结果左对齐,右边填空格;+:输出符号(正号或负号);空格:输出值为正时冠以空格,为负时冠以负号。②输出最小宽度:用十进制整数来表示输出的最少位数(包括小数点在内至少要输出这么多位)。若实际位数多于定义的宽度,则按实际位数输出;若实际位数少于定义的宽度,则右对齐,左边留空;有负号,左对齐,右边留空:表示宽度的数字以0开始,则右对齐,左边留空。③精度:精度格式符以“.”开头,后跟十进制整数。它的意义是:如果输出数字,则表示小数的位数,若实际位数大于所定义的精度数,则四舍五入,若不足则补0;如果输出的是字符,则表示输出字符的个数,若实际位数大于所定义的精度数,则截去超过的部分;④长度:长度格式符为h和1两种。h表示按短整型量输出,1表示按长整型量输出。5、有以下程序段intn,t=1,s=0;scanf("%d",&n);do{s=s++;t=t-2;}while(t!=n);为使此程序段不陷入死循环,从键盘输入的数据应该是A、任意正奇数B、任意负偶数C、任意正偶数D、任意负奇数标准答案:D知识点解析:本题考查基本输入和循环。程序代码的功能是通过scanf给变量n赋值,在do…while循环中,s变量自增,t变量每次减2,t的初值为1,循环执行执行一次后t的值变成-1,然后是-3、-5…,直到t的值和n的值相同循环结束。从t的值的变化可知,t是一个变化的负奇数,因此输入的n如果是负奇数,则循环能退出,否则是死循环。6、若有定义:inta,b;通过语句scanf("%d;%d",&a,&b);能把整数3赋给变量a,5赋给变量b的输入数据是A、3.5B、35C、3;5D、35标准答案:C知识点解析:在采用scant这个函数输入数据时,要严格遵守其输入的规则定义。本题此函数定义的规则是,在两个整数之间加分号输入。7、以F叙述中正确的是A、在scanf函数中的格式控制字符串是为了输入数据用的,不会输出到屏幕上B、在使用scanf函数输入整数或实数时,输入数据之间只能用空格来分隔C、在printf函数中,各个输出项只能是变量D、使用printf函数无法输出百分号%标准答案:A知识点解析:scanf函数中的格式控制字符串是为了输入数据用的,无论其中有什么字符,也不会输出到屏幕上,因此若想在屏幕上输出提示信息,应该首先使用printf函数输出,选项A)正确;在使用scanf。函数输入整数或实数时,输入数据之问可以用空格、跳格、回车来分隔,选项B)错误;printf输出项不但可以为变量,还可以表达式或者常量,选项C)错误:如果要输出“%”,可以在格式控制中用“%%”表示。将输出一个“%”,选项D)错误。8、若有定义语句:doublex,y,*px,*py;执行px=&x;py=&y;正确的输入语句是A、scanf("%f%f"&x,&y);B、scanf("%f%f",x,y);C、scanf("%1f%le",px,py);D、scanf("%1f%1f",x,y);标准答案:C知识点解析:本题考查scanf语句。scanf()函数的一般格式为:scanf("格式字符串",输入项首地址表),对于。aouble类型数据,输入时候要加上1修饰,否则会产生错误的输入信息,同时输入项必须是地址,可以使保存变量地址的指针变量。9、有以下程序段charname[20];intnum;scanf("name=%snum=%d",name,&num);当执行上述程序段,并从键盘输入:name=Lilinum=1001后,name的值为A、name=LiliB、Lilinum=C、name=Lilinum=1001D、Lili标准答案:D知识点解析:在题目中以字符串的形式给字符数组赋值,所以字符数组name的值为Lili。10、有以下程序main(){inta=0,b=0,c=0,d=0;if(a=1)b=1;c=2;elsed=3;printf("%d,%d,%d,%d\11",a,b,c,d);}程序输出A、0,0,0,3B、1,1,2,0C、编译有错D、0,1,2,0标准答案:C知识点解析:if语句的格式为:if(表达式)语句1else语句2if和else是C语言的关键字。“语句1”称为if子句,“语句2”称为else子句,这些子句只允许为一条语句.若需要多条语句时,则应该使用复合语句。因此题目“if(a=1)b=1;c=2;elsed=3:”,if分支有两条语句,没构成复合语句。11、设有定义: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语言中,用分号表示一条语句的结柬;用f}把几条语句放在一块表示一个语句块,其整体表示一个功能。因而在题目给出的四个选项中,选项B)、C)、D)表示的功能相同,而选项A)表示的是一条if语句,两条赋值语句。12、有以下程序#includemain(){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时打印出来。13、若有以下程序#include<stdio.h>main(){inta=1,b=2,c=3,d=4,r=0;if(a!=1);elser=1;if(b==2)r+=2;else;if(c!=3)r+=3;else;if(d==4)r+=4;printf("%d\n",r);}则程序的输出结果是A、10B、6C、7D、3标准答案:C知识点解析:程序代码中有四条并列的if语句,第一条if表达式a!=1不成立,执行else分支,r=1;第二条if表达式b==2成立,执行r+=2,r=3;第三条if语句c!=3不成立,执行else分支,分支为空语句:第四条if分支d==4成立,执行该if分支语句,r+=4,r=7。14、以下选项中与if(a==1)a=b;elsea++;语句功能不同的switch语句是A、switch(a){case1:a=b;break;default:a++:}B、switch(a==1){case0:a=b;break;case1:a++;}C、switch(a){default:a++;break;case1:a=b;}D、switch(a==1){case1:a=b;break;case0:a++;}标准答案:B知识点解析:本题主要考查if和switch结构。“if(a==1)a=b;elsea++;”代码段的功能是如果a等于则把b的值赋值给a,否则a++。选项A)使用switch对a进行判断,如果是1则a=b,跳出switch,如果是其他值则a++;选项B)对a==1的结果进行switch判断,如果为0表示a不等于1则a=b,和题目要求不符合;选项C)和选项A)一样;选项D)和选项Case条件相反,满足题目要求。15、下列叙述中正确的是A、在switch语句中必须使用defaultB、break语句必须与switch语句中的case配对使用C、在switch语句中,不一定使用break语句D、break语句只能用于switch语句标准答案:C知识点解析:break为C语言关键字,又称间断语句。break语句的功能是跳出正在执行的条件语句或循环语句。它可以出现在switch语句中,也可以出现在循环语句中。defauh是关键字,起标号的作用,代表所有case标号之外的那些标号。default标号可以出现在语句体中任何标号位置上。在switch语句体中也可以没有default标号。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){case1: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常量表达式n:语句n:break;defauh:语句n+1;break;}switch语句的执行流程是:首先计算switch后面圆括号中表达式的值,然后用此值依次与各个case的常量表达式比较,若圆括号中表达式的值与某个case后面的常量表达式的值相等,就执行此case后面的语句,执行后遇break语句就退出switch语句;若圆括号中表达式的值与所有case后面的常量表达式都不等,则执行default后面的语句n+1,然后退出switch语句。对于选项B),case语句和常量之问没有空格,而选项C)中的case后面为变量.选项D)中switch后面没给出圆括号。17、有以下程序#include<stdio.h>main(){inty=10;while(y--);printf("y=%d\n",y);}程序执行后的输出结果是A、y=0B、y=-1C、y=1D、while构成无限循环标准答案:B知识点解析:在while循环中每次变量y的值减1,直到其值等于0时退出循环,这时y的再减1变为-1。18、有以下程序#includemain(){inta=7;while(a--);printf("%d\n",a);}程序运行后的输出结果是A、0B、1C、-1D、7标准答案:C知识点解析:在while语句中,先判断while后面的表达式是否为0,如果为0,则退出循环,否则执行循环体。在本题中.当变量a的值经过几次循环后,其值等于0时,退出while循环语句,变量a再执行自减运算,所以其值等于-1。19、由以下while构成的循环,循环体执行的次数是intk=0;while(k=1)k++;A、一次也不执行B、执行一次C、无限次D、有语法错,不能执行标准答案:C知识点解析:循环条件表达式为赋值表达式k=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、若i和k都是int类型变量,有以下for语句for(i=0,k=-1;k=1;k++)printf("*****\n");下面关于语句执行情况的叙述中正确的是A、循环体执行两次B、循环体执行一次C、循环体一次也不能执行D、构成无限循环标准答案:D知识点解析:本题考查for循环。本题的for循环初始条件为i=0,k=-1;循环结束条件为k=1永远为真(k不为0),因此循环不能结束。22、有以下程序#include<stdio.h>main(){inti,j,m=1;for(i=1;i<3;i++){for(j=3j>0;j--){if(i*j>3)break;m*=i*j;}}printf("m=%d\n",m);}程序运行后的输出结果是A、m=2B、m=4C、m=5D、m=6标准答案:D知识点解析:这道题考查了for循环的嵌套应用。对于外层for循环来说,变量i从l增到2,循环执行2次。当变量i的值等于1时,对于内层for循环来说,变量j从3减到1,求得变量m的值等于6。当变量i的值等于2时,第一遍执行内层for循环,变量j的值等于3,那么i*j的值等于6,其值大于3.这时执行break语句,退出内层for循环的执行。所以程序输出变量m的值为6。23、有以下程序main(){inti;for(i=1;i<=40;i++){if(i++%5==0)if(++i%8==0)printf("%d",i);}printf("\n");}执行后的输出结果是A、24B、5C、32D、40标准答案:C知识点解析:在for循环体中,先判断自变量i能否被5整除,然后自加两次,最后判断i能否被8整除。当for循环执行到第30次时,i的值为30能被5整除,然后i经过两次自加1运算,值变为32,能被8整除,故执行“printf("%d",i);”语句,即输出32。24、若有以下程序main(){inta=6,b=0,c=0;for(;a;){b+=a:a-=++C;}printf("%d,%d,%d\n",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,循环退出。25、以下程序段中的变量已正确定义for(i=0;i<4;i++,i++)for(k=1;k<3;k++);printf("*");程序段的输出结果是A、********B、****C、**D、*标准答案:D知识点解析:本题考查循环语句,题中第二个(内层)for循环之后有一个分号,意思是每次循环中的操作为空,不执行任何操作。再循环结束后执行printf语句,即只打出一个*。26、有以下程序main(){inti,j,x=0;for(i=0;i<2;i++){x++;for(j=0;j<=3;j++){if(j%2)continue;x++:}x++;}printf("x=%d\n",x);}程序执行后的输出结果是A、x=4B、x=6C、x=12D、x=8标准答案:D知识点解析:在第1次外层for循环中,首先x++得到x=1。进入到内层for循环,只有循环变量j的值为奇数时,变量x的值才自加1,所以在内层for循环执行过程中,变量x的值自加两次,当退出内层fof循环时,x=3,然后执行x++,得到x=4。在进入执行第2次外层fbr循环中,首先xH得到x=5。进入到内层for循环,只有循环变量j的值为奇数时,变量x的值才自加1,所以在内层for循环执行过程中,变量x的值自加1两次,当退出内层for循环时,x=7,然后执行x++,得到x=8,所以打印输出变量x的值为8。27、以下叙述中正确的是A、当break出现在循环体中的switch语句体内时,其作用是跳出该switch语句体,并中止循环体的执行B、只能在循环体内和switch语句体内使用break语句C、continue语句的作用是:在执行完本次循环体中剩余语句后,中止循环D、在while语句和do-while语句中无法使用continue语句标准答案:B知识点解析:break语句可以使程序流程跳出switch语句体,也可用brealk语句在循环结构中终止循环体.从而提前结束循环,而当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体,并不能中止循环体的执行,若想强行终止循环体的执行,可以在循环体中,但并不在switch语句中设置break语句,满足某种条件则跳出循环体。continue语句的作用是结束本次循环,在while和do-while循环中,confinue语句使得流程直接跳到循环控制条件的测试部分,然后决定循环是否继续进行。国家二级C语言(C语言程序设计)机试模拟试卷第4套一、选择题(本题共29题,每题1.0分,共29分。)1、以下叙述中正确的是A、赋值语句是一种执行语句,必须放在函数的可执行部分B、scanf和printf是C语言提供的输入和输出语句C、由printf输出的数据都隐含左对齐D、由printf输出的数据的实际精度是由格式控制中的域宽和小数的域宽来完全决定的标准答案:A知识点解析:C语言本身没有提供输入输出语句,但是可以通过调用标准库函数中提供的输入和输出函数来实现输入和输出,选项B)错误;采用printf输出数据,输出数据都默认为右对齐,若要左对齐,可以在格式控制中的“%”和宽度之间加一个“-”号来实现,选项C)错误;printf的输出精度由变量的类型决定,与域宽无关,选项D)错误。2、有以下程序main(){inta=3;a+=a-=a*a;printf("%d\n",a);}程序的输出结果是A、9B、3C、-12D、0标准答案:C知识点解析:对于表达式a+=a-=a*a相当于a=a-(a*a),然后计算a=a+a,a的初值为3,则表达式的值为-12。3、有如下程序段:intx=12;doubley=3.141593;printf("%d%8.6f",x,Y);其输出结果是A、123.141593B、12,3.141593C、123.1415930D、123.141593标准答案:D知识点解析:本题考查printf语句。printf()函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。printfi()函数的调用格式为:printf(“<格式化字符串>”,<参量表>)。其中,“格式化字符串”包括两部分内容:一部分是正常字符,这些字符将按原样输出;另一部分是格式化规定字符,以“%”开始,后跟一个或几个规定字符,用来确定输出内容格式。格式化字符串的格式是:%[标志][输出最小宽度][精度][长度]格式字符①标志:标志字符为-、+、空格等,其意义如下所示:.-:结果左对齐,右边填空格;.+:输出符号(正号或负号);.空格:输出值为正时冠以空格,为负时冠以负号。②输出最小宽度:用十进制整数来表示输出的最少位数(包括小数点在内至少要输出这么多位)。.若实际位数多于定义的宽度,则按实际位数输出;.若实际位数少于定义的宽度,则右对齐,左边留空;.有负号,左对齐,右边留空;.表示宽度的数字以0开始,则右对齐,左边留空。③精度:精度格式符以“.”开头,后跟十进制整数。它的意义是:如果输出数字,则表示小数的位数,若实际位数大于所定义的精度数,则四舍五入,若不足则补0;如果输出的是字符,则表示输出字符的个数,若实际位数大于所定义的精度数,则截去超过的部分;④长度:长度格式符为h和l两种,h表示按短整型量输出,l表示按长整型量输出。4、若有以下程序#includemain(){intb=10,a=-11;a%=b%=4;printf("%d%d\n",a,b);}则程序的输出结果是A、12B、-1-2C、-12D、1-2标准答案:C知识点解析:对于表达式a%=b%=4为复合的赋值运算,结合性自右至左,相当于先计算b=b%4,a=a%b;结果的符号和第一个操作数的符号相同,因此b为2,a的结果为-1.5、有以下程序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=%d,b=%d。6、有以下程序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。7、若变量已正确定义为int型,要通过语句scanf("%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知识点解析:本题t要考查scanf函数的输入格式问题。scanf函数的一般形式为:scanfi(格式控制字符串,地址1。地址2,…);格式控制字符串是由双撇号括起来的字符串,它主要由两种类型的字符组成:①格式说明符由“%”和格式字符组成,如%c,%d,%s,%f等。其作用是将输入的数据转换为指定的格式,赋给scanf的二个参量(是地址1)所指定的内存单元(可能一次使用多个)中。格式说明以“%”字符为标志。②普通字符,是需要用户在输入时原样输入的字符。在本题中格式控制字符串为“%d,%d,%d”,表示按十进制输入三个数据。要求在输入数据时,两个数据间一定以一个逗号“,”作为间隔符。8、设变量均已正确定义,若要通过scanf("%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”说明,数值型数据和字符数据输入之间不要加入空格间隔,而字符型数据和数值型数据的输入却可以加入任意的空格,回车和跳格。9、设有定义:inta;floatb;执行scanf("%2d%f",&a,&b);语句时,若从键盘输入876543.0则a和b的值分别是A、876和543.0B、87和6.0C、87和543.0D、76和543.0标准答案:B知识点解析:在输入函数scanf的输入格式符%2d%f中,2d表示输入的数据的宽度为2,所以当从键盘输入876543.0时,这时把输入数字串的前两位87赋给变量a,然后将紧接着将6按照格式摔制符%f的形式赋给变量b,所以b的值为6.000000。10、若有定义:inta,b;通过语句scanf("%d;%d",&a,&b);能把整数3赋给变量a,5赋给变量b的输入数据是A、3,5B、35C、3;5D、35标准答案:C知识点解析:在采用scanf这个函数输入数据时,要严格遵守其输入的规则定义。本题此函数定义的规则是,在两个整数之间加分号输入。11、若有定义inta;floatb;doublec;程序运行时输入:345能把值3输入给变量a、4输入给变量b、5输入给变量C的语句是A、scanf("%(1%lf%lf",&a,&b,&c);B、scanf("%d%f%lf",&a,&b,&c);C、scanf("%d%f%f",&a,&b,&c);D、scanf("%lf%lWolf",&a,&b,&c);标准答案:B知识点解析:scanf函数进行输入的时候,默认的输入间隔为空格、跳格和回车,变量a、b和c均为数值型数据,输入时间隔为空格,因此scanf函数的第一个表示格式的参数之间不用加入分隔符,而要输入double型数据,格式控制必须用%lf(或%le)。否则,数据不能正确输入。12、设有定义:doublea,b,c;若要求通过输入分别给a、b、C输入1、2、3,

温馨提示

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

评论

0/150

提交评论