1、二级C语言111二级C语言-111(总分:100.00,做题时间:90分钟)一、选择题(总题数:41,分数:100.00)1.若有以下程序: #include stdio.h main( ) int a=1,b=2; for( ;a8;a+ +) b+ =a; a+ =2; printf(%d,%d/n,a,b); 则程序运行后的输出结果是_。(分数:2.00)A.9,18B.8,11C.7,11D.10,14解析:解析 第一次循环a的值为1,满足条件,执行b+=a与a+=2,则b的值变为3,a的值变为3。执行a+,a的值为4,满足条件进入第二次循环,执行完循环体后b的值为7,a的值为6。执行
2、a+,a的值为7,满足条件进入第三次循环,执行完循环体后b的值为14,a的值为9。执行a+,a的值变为10,不满足条件循环结束。所以选择D选项。2.若有以下程序: #include stdio.h main( ) int x=8; for( ;x0; x-) if(x%3) printf(%d,x-); continue; printf(%d,-x); 则程序的运行结果是_。(分数:2.00)A.7,4,2,B.8,7,5,2,C.9,7,6,4,D.8,5,4,2,解析:解析 coutinue的作用是跳出循环体中剩余的语句而进行下一次循环。第一次循环,x的值为8,循环体中if条件成立,打印x
3、的值8后将x减1,再执行continue语句,跳出本次循环。第二次判断循环条件时,x的值变为6,不满足循环体内if条件,执行打印-x的操作,即打印5后跳出循环。第三次判断循环条件时x的值为4,满足循环体中if条件。执行打印x-的操作,即打印4后将x值减1,执行continue语句,跳出本次循环。第四次判断循环条件时x的为2,满足循环体中if条件,打印x-,即打印2后将x减1,执行continue语句,跳出本次循环。在进行for条件表达式中第三个表达式x-的操作后x的值为0,不满足条件结束循环。所以打印结果为8,5,4,2,。3.若有以下程序: #include stdio.h main( )
4、int a=6,b=0, c=0; for (;a;) b + = a; a - = + + c; printf(%d,%d,%d/n,a,b,c); 则程序的输出结果是_。(分数:2.50)A.1,14,3B.0,14,3C.0,18,3D.0.14,6解析:解析 本循环的条件判断时,只要a为0就退出循环体,初始a的值为6,满足条件,执行完循环体后b的值为6,a-=+c即a=a-(+c),所以a的值为5,c的值为1;第二次循环后b的值为11,a的值为3,c的值为2;第三次也是最后循环后,a的值为0,b的值14,c的值为3。4.若有以下程序: #include stdio.h main( )
5、int a=6,b=0,c=0; for(;a&(b= =0);) b + =a; a- = c+ + ; printf(%d,%d,%d/n,a,b,c); 则程序的输出结果是_。(分数:2.50)A.5,6,0B.6,0,0C.6,6,1D.5,6,1解析:解析 本题重点考查C语言中for语句和逻辑表达式,for语句的一般形式为: fbr(表达式1;表达式2;表达式3)语句 其循环中的“表达式1(循环变量赋初值)”、“表达式2(循环条件)”和“表达式3(循环变量增量)”都是选择项,即可以缺省,但“;”不能缺省。该题目中省略了“表达式1(循环变量赋初值)”和“表达式3(循环变量增量)”。fo
6、r(;a&(b=0);)b+=a;a-=c+;相当于while(a&(b=0)b+=a;a-=c+;。因此C选项正确。5.若有以下程序: #include stdio.h main( ) int i, sum; for(i=1; i6; i + + ) sum+ =1; printf(%d/n,sum); 则程序运行后的输出结果是_。(分数:2.50)A.随机值B.0C.15D.16解析:解析 本题重点考查for语句,变量没有初始化的情况下,默认值与编译器有关系,不同的编译器有不同的值。因此A选项正确。6.若有以下程序: #include stdio.h main( ) int i,j; fo
7、r(i=1; i4; i + +) for(j=i; j4; j + +) pfinff(%d*%d=%d,i,j,i*j); printf(/n); 则程序运行后的输出结果是_。(分数:2.50)A.1*1=1 1*2=2 1*3=32*2=4 2*3=63*3=9B.1*1=1 1*2=2 1*3=32*1=2 2*2=43*1=3C.1*1=11*2=2 2*2=41*3=3 2*3=6 3*3=9D.1*1=12*1=2 2*2=43*1=3 3*2=6 3*3=9解析:解析 外循环第一次i的值为1,内循环第一次的初值为1,打印1*1=1;内循环第二次j的值为2,打印1*2=2;内循环
8、第三次j的值为3,打印1*3=3,打印回车换行,退出内循环。外循环第二次i的值为2,内循环第一次j的初值为2,打印2*2=4;内循环第二次j的值为3,打印2*3=6,打印回车换行,退出内循环。外循环第3次,i的值为3,内循环第一次j的初值为3,打印3*3=9,打印回车换行,退出内循环。7.若有以下程序: #include stdio.h main( ) int i=5; do if(i%3= =1) if(i%5= =2) printf(%*d,i); break; i+ +; while(i! =0); pnnff(/n); 则程序的运行结果是_。(分数:2.50)A.*2*6B.*3*5C
9、.*5D.*7解析:解析 dowhile语句是先执行后判断,所以第一次先执行循环体,判断i%3=1的条件,由于i为5,所以余数为2,条件不成立,执行i+,i的值为6,判断while条件为真,第二次执行循环体,同第一次循环体的执行过程一样,i的值变为7,判断while条件为真,第三次执行循环体,此时i%3=1条件成立,判断i%5=2也成立,打印*与i的值,即*7,然后执行break语句,跳出循环。所以选择D选项。8.若有以下程序: #inelude stdio.h main( ) int i,j; for(i=3; i=1; i-) for(j=1; j=2; j+ +) printf(%d,i
10、+j); printf(/n); 则程序的运行结果是_。(分数:2.50)A.4 32 54 3B.4 53 42 3C.2 33 42 3D.2 33 42 3解析:解析 第一次执行外循环,i的值为3;第一次执行内循环,j的值为1,j=2条件成立,打印i+j的值,即4。第二次执行内循环,j的值为2,j=2条件成立,打印i+j的值,即5;再判断条件不成立,打印回车换行符,跳出内循环。第二次执行外循环,i的值为2,内循环的执行同第一次一样,所以打印3和4,打印回车换行,结束内循环。第三次执行外循环i的值为1,同理内循环中打印2和3,打印回车换行符,结束内循环。9.若有以下程序: #include
11、 stdio.h main( ) int i,j,m=1; for(i=1;i3;i+ +) for(j=3;j0;j- -) if(i*j3) break; m*=i*j; printf(m=%d/n,m); 则程序运行后的输出结果是_。(分数:2.50)A.m=4B.m=2C.m=6D.m=5解析:解析 第一次外循环i的值为1,第一次内循环j的值为3,不满足条件,执行m*=i*j,即m的值为3;第二次j的值为2,不满足条件,执行m*=i*j,即m的值为6;第三次j的值为1,不满足条件,执行m*=i*j,即m的值仍为6。第二次外循环i的值为2,j的值为3,满足条件,执行break语句,跳出循
12、环。10.若有以下程序: #inelude stdio.h main( ) int b33=0,1,2,0,1,2,0,1,2,i,j,t=1; for(i=0;i3;i+ +) for(j=i;j=i;j+ +) t + = bibji; printf(%d/n,t); 则程序运行后的输出结果是_。(分数:2.50)A.3B.4C.1D.9解析:解析 每次内循环只循环一次就结束,第一次外循环时,t=t+b0b00=1+b00=1+0=1;第二次外循环时t=t+b1b11=1+b11=1+1=2;第三次外循环时,t=t+b2b22=2+b22=2+2=4。11.若有以下程序: #include
13、 stdio.h main( ) int i; for(i=1;i=40; i+ +) if(i+ +%5= =0) if(+ +i%8= =0) printf(%d,i); printf(/n); 则执行后的输出结果是_。(分数:2.50)A.5B.24C.32D.40解析:解析 本题的含义是在1-40的整数的范围中,只有当i的值能被5整除,且i+2的值能被8整除时,打印i的值,满足这个条件的只有32,选择C选项。12.以下叙述中正确的是_。(分数:2.50)A.continue语句的作用是使程序的执行流程跳出包含它的所有循环B.break语句只能用在循环体内和switch语句体内C.在循环
14、体内使用break语句和continue语句的作用相同D.break语句只能用于switch语句体中解析:解析 continue语句的作用是:跳过循环体中剩余的语句而进行下一次循环,所以A选项错误。Break语句的作用是终止正在执行的switch流程,跳出switch结构或者强制终止当前循环,从当前执行的循环中跳出所以C、D选项错误。13.以下叙述中正确的是_。(分数:2.50)A.continue语句使得整个循环终止B.break语句不能用于提前结束for语句的本层循环C.使用break语句可以使流程跳出switch语句体D.在for语句中,continue与break的效果是一样的,可以互
15、换解析:解析 break语句通常用在循环语句和开关语句中。当break用手开关语句switch中时,可使程序跳出switch而执行switch以后的语句;当break语句用于dowhile、for、while循环语句中肘,可使程序终止循环而执行循环后面的语句,即满足条件时便跳出循环。continue语句的作用是跳过循环体中剩余的语句而强行执行下一次循环。A、B和D三个选项中均有错误。因此C选项正确。14.若有以下定义: int x10, *pt=x; 则对x数组元素的正确引用是_。(分数:2.50)A.pt+3B.*&x10C.*(pt+10)D.*(x+3)解析:解析 没有A选项的引用形式。
16、*与&放在一起作用抵消,所以B选项错误。*(pt+i)表示引用指针pt所指元素后的第i个元素,所以C选项错误,最大只能为*(pt+9)。因此D选项正确。15.若有以下程序: #include stdio.h main( ) int i, s=0, t=1,2,3,4,5,6,7,8,9; for(i=0;i9;i+ =2) a+ =* (t+i); printf(%d/n,s); 则程序执行后的输出结果是_。(分数:2.50)A.20B.25C.45D.36解析:解析 统计19中的奇数和,此题考查指向数组的指针。C语言规定数组名代表数组的首地址,也就是第一个元素的地址。因此*(t+i)代表数组
17、的第i+1个元素。程序运行的结果是1+3+5+7+9=25。16.若有以下程序: #include stdio.h void fun(int *s, int n1, int n2) int i,j,t; i=n1; j=n2; while(ij) t=si; si=sj; sj=t; i+ +; j-; main( ) int a10=1,2,3,4,5,6,7,8,9,0,k; fun(a,0,3); fun(a,4,9); fun(a,0,9); for(k=0;k10;k+ +) printf(%d,ak); printf(/n); 则程序的运行结果是_。(分数:2.50)A.43210
18、98765B.5678901234C.0987654321D.0987651234解析:解析 该程序首先给一维数组赋值,然后三次调用fun函数,其中fun(a,0,3);的功能是将一维数组中的第1个元素和第4个元素互换,第2个元素和第3个元素互换;fun(a,4,9);的功能是将一维数组中的第5个元素和第10个元素互换,第6个元素和第9个元素互换,第7个元素和第8个元素互换;fun(a,0,9);的功能是将将一维数组中的第1个元素和第10个元素互换,第2个元素和第9个元素互换依次类推。因此B选项正确。17.若有以下程序: #include stdio.h main( ) int s12=1,2
19、,3,4,4,3,2,1,1,1,2,3,c5=0,i; for(i=0;i12;i+ +) csi+ +; for(i=1;i5;i+ +) printf(%d,ci); printf(/n); 则程序的运行结果是_。(分数:2.50)A.2 3 4 4B.4 3 3 2C.1 2 3 4D.1 1 2 3解析:解析 在for(i=0;i12;i+)csi+;语句中,数组元素si的值作为数组c的下标,当退出循环时,数组c的4个元素的值分别为4、3、3、2。因此B选项正确。18.若有以下程序: #include stdio.h void fun(int a, int n) int t,i,j;
20、 for(i=1;in; i+ =2) for(j=i+2; jn; j + =2) if(ai aj) t=ai; ai=aj;aj=t; main( ) int c10=10,9,8,7,6,5,4,3,2,1,i; fun(c,10); for(i=0;i10;i+ +) printf(%d,ci); printf(/n); 则程序的输出结果是_。(分数:2.50)A.1,10,3,8,5,6,7,4,9,2,B.10,9,8,7,6,5,4,3,2,1,C.2,9,4,7,6,5,8,3,10,1,D.10,1,8,3,6,5,4,7,2,9,解析:解析 本题主要考查for的嵌套循环。
21、该题首先对一维数组进行初始化,c0到c9依次赋值为10到1;fun(c,10);语句调用fun函数,fun函数的功能是将一维数组偶数位元素的数值由小到大排序;最后将排好序的新的一维数组进行输出。因此D选项正确。19.若有以下程序: #include stdio.h main( ) int c6=10,20,30,40,50,60, *p,*s; P=c; s=&c5; printf(%d/n,s-P); 则程序运行后的输出结果是_。(分数:2.50)A.5B.50C.6D.60解析:解析 本题主要考查数组和指针。首先初始化一维数组c6,语句p=c;指将c0元素的地址赋给指针变量p,语句s=&c
22、5;指将c5元素的地址赋给指针变量s。程序最后输出s-p,即结果为5。因此A选项正确。20.若有以下程序: #include stdio.h main( ) int a3=0, i,j,k=2; for(i=0; ik; i+ +) for(j=0;jk;j+ +) aj=ai+1; printf(%d/n,a1); 则程序运行后的输出结果是_。(分数:2.50)A.0B.2C.1D.3解析:解析 该题首先初始化一维数组a3所有元素都为0;执行嵌套循环for语句,当i=0、j=0时,a0=a0+1=1;当i=0、j=1时,a1=a0+1=2;当i=1、j=0时,a0=a1+1=3;当i=1、j
23、=1时,a1=a1+1=3;因此D选项正确。21.有以下程序: #include stdio.h main( ) int a5=2,4,6,8,10, *p,* *k; P=a; k=&p; printf(%,*(p+ +); printf(%d/n,* * k); 程序运行后的输出结果是_。(分数:2.50)A.4 6B.4 4C.2 2D.2 4解析:解析 本题主要考查指针。首先通过p=a使p指向数组的第1个元素,所以输出2;在输出2以后,由于p+,即p就指向数组的第2个元素,* *k就是取出p所指向元素的值,而p指向的是数组的第2个元素,即输出4:因此D选项正确。22.以下叙述中正确的是
24、_。(分数:2.50)A.一条语句只能定义一个数组B.每个数组包含一组具有同一类型的变量,这些变量在内存中占有连续的存储单元C.数组说明符的一对方括号中只能使用整型常量,而不能使用表达式D.在引用数组元素时,下标表达式可以使用浮点数解析:解析 A选项中,一条语句只能定义一个数组是不准确的,可以通过一条语句定义多个数组;C选项中,数组说明符的一对方括号中可以是整型常量,也可以是整型常量表达式;D选项中,在引用数组元素时,下标表达式必须是整型的。因此B选项正确。23.以下叙述中正确的是_。(分数:2.50)A.数组下标的下限是1B.数组下标的下限由数组中第一个非零元素的位置决定C.数组下标的下限由
25、数组中第一个被赋值元素的位置决定D.char c1, c2, *c3,c440;是合法的变量定义语句解析:解析 C语言规定,数组下标值的下限一律为0,对于一维数组amax(max是一个编译时可知的值)来说,它的第一个和最后一个元素分别是a0和amax-1。所以,数组下标值的下限与数组中元素的位置无关,故A、B、C选项错误。24.有以下程序: #include stdio.h #define N 4 void fun(int aN,int b) int i; for(i=0;iN;i+ +) bi = aii; main( ) int xN=1,2,3,4,5,6,7,8,9,10,yN,i;
26、fun(x, y); for(i=0;iN;i+ +) printf(%d, yi); printf(/n); 程序的运行结果是_。(分数:2.50)A.1,0,7,0,B.1,2,3,4,C.1,4,5,9,D.3,4,8,10,解析:解析 该程序首先在定义变量时,对二维数组xN进行赋值操作;调用函数fun,函数fun的功能是将=维数组中的a0儿0、a11、a22和a33赋值给一维数组。最后将输出一维数组1,0,7,0,。25.有以下程序: #include stdio.h int fun(int (*s)4, int n, int k) int m,i; m=s0k; for(i=1;in
27、; i+ +) if(sikm) m=sik; return m; main( ) int a44=1,2,3,4, 11,12,13,14, 21,22,23,24, 31,32,33,34; printf(%d/n,fun(a,4,0); 程序的运行结果是_。(分数:2.50)A.4B.34C.31D.32解析:解析 本题重点考查二维数组名作为实参进行参数传递。在主函数中调用了fun函数,买参为二维数组名a和两个整数4、0,这样对应定义fun函数首部也有三种形式,这里采用第一种形式,也就是行指针,这样在fun函数对sij进行操作实际上就是对主函数中的aij进行操作,再分析fun函数的作用,其是求二维数组第0列中最大的那个元素。因此C选项正确。26.有以下程序: #include stdio.h main( ) int a44=1,4,3,2, 8,6,5,7, 3,7,2,5, 4,8,6,1; int i,j,k,t; for(i=0;i4; i+ +) for(j=0; j3; j+ +) for(k=j+1;k4; k+ +) if(aji ak
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1