二级C语言111.docx

上传人:b****5 文档编号:6144649 上传时间:2023-01-04 格式:DOCX 页数:19 大小:24.98KB
下载 相关 举报
二级C语言111.docx_第1页
第1页 / 共19页
二级C语言111.docx_第2页
第2页 / 共19页
二级C语言111.docx_第3页
第3页 / 共19页
二级C语言111.docx_第4页
第4页 / 共19页
二级C语言111.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

二级C语言111.docx

《二级C语言111.docx》由会员分享,可在线阅读,更多相关《二级C语言111.docx(19页珍藏版)》请在冰豆网上搜索。

二级C语言111.docx

二级C语言111

二级C语言-111

(总分:

100.00,做题时间:

90分钟)

一、选择题(总题数:

41,分数:

100.00)

1.若有以下程序:

#include<stdio.h>

main()

{inta=1,b=2;

for(;a<8;a++){b+=a;a+=2;}

printf("%d,%d/n",a,b);

}

则程序运行后的输出结果是______。

(分数:

2.00)

 A.9,18

 B.8,11

 C.7,11

 D.10,14 √

解析:

[解析]第一次循环a的值为1,满足条件,执行b+=a与a+=2,则b的值变为3,a的值变为3。

执行a++,a的值为4,满足条件进入第二次循环,执行完循环体后b的值为7,a的值为6。

执行a++,a的值为7,满足条件进入第三次循环,执行完循环体后b的值为14,a的值为9。

执行a++,a的值变为10,不满足条件循环结束。

所以选择D选项。

2.若有以下程序:

#include<stdio.h>

main()

{

intx=8;

for(;x>0;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的值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()

{inta=6,b=0,c=0;

for(;a;){b+=a;a-=++c;}

printf("%d,%d,%d/n",a,b,c);

则程序的输出结果是______。

(分数:

2.50)

 A.1,14,3

 B.0,14,3 √

 C.0,18,3

 D.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()

{inta=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,0

 B.6,0,0

 C.6,6,1 √

 D.5,6,1

解析:

[解析]本题重点考查C语言中for语句和逻辑表达式,for语句的一般形式为:

fbr(表达式1;表达式2;表达式3)语句

其循环中的“表达式1(循环变量赋初值)”、“表达式2(循环条件)”和“表达式3(循环变量增量)”都是选择项,即可以缺省,但“;”不能缺省。

该题目中省略了“表达式1(循环变量赋初值)”和“表达式3(循环变量增量)”。

for(;a&&(b==0);){b+=a;a-=c++;}相当于while(a&&(b==0)){b+=a;a-=c++;}。

因此C选项正确。

5.若有以下程序:

#include<stdio.h>

main()

{inti,sum;

for(i=1;i<6;i++)sum+=1;

printf("%d/n",sum);

}

则程序运行后的输出结果是______。

(分数:

2.50)

 A.随机值 √

 B.0

 C.15

 D.16

解析:

[解析]本题重点考查for语句,变量没有初始化的情况下,默认值与编译器有关系,不同的编译器有不同的值。

因此A选项正确。

6.若有以下程序:

#include<stdio.h>

main()

{

inti,j;

for(i=1;i<4;i++)

{

for(j=i;j<4;j++)pfinff("%d*%d=%d",i,j,i*j);

printf("/n");

}

}

则程序运行后的输出结果是______。

(分数:

2.50)

 A.1*1=11*2=21*3=32*2=42*3=63*3=9 √

 B.1*1=11*2=21*3=32*1=22*2=43*1=3

 C.1*1=11*2=22*2=41*3=32*3=63*3=9

 D.1*1=12*1=22*2=43*1=33*2=63*3=9

解析:

[解析]外循环第一次i的值为1,内循环第一次的初值为1,打印1*1=1;内循环第二次j的值为2,打印1*2=2;内循环第三次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()

{inti=5;

do

{if(i%3==1)

if(i%5==2)

{printf("%*d",i);break;}

i++;

}while(i!

=0);

pnnff("/n");

}

则程序的运行结果是______。

(分数:

2.50)

 A.*2*6

 B.*3*5

 C.*5

 D.*7 √

解析:

[解析]do…while语句是先执行后判断,所以第一次先执行循环体,判断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()

{inti,j;

for(i=3;i>=1;i--)

{for(j=1;j<=2;j++)printf("%d",i+j);

printf("/n");

}

}

则程序的运行结果是______。

(分数:

2.50)

 A.432543

 B.453423 √

 C.233423

 D.233423

解析:

[解析]第一次执行外循环,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<stdio.h>

main()

{inti,j,m=1;

for(i=1;i<3;i++)

{for(j=3;j>0;j--)

{if(i*j>3)break;

m*=i*j;

}

}

printf("m=%d/n",m);

}

则程序运行后的输出结果是______。

(分数:

2.50)

 A.m=4

 B.m=2

 C.m=6 √

 D.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语句,跳出循环。

10.若有以下程序:

#inelude<stdio.h>

main()

{intb[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;

for(i=0;i<3;i++)

for(j=i;j<=i;j++)t+=b[i][b[j][i]];

printf("%d/n",t);

}

则程序运行后的输出结果是______。

(分数:

2.50)

 A.3

 B.4 √

 C.1

 D.9

解析:

[解析]每次内循环只循环一次就结束,第一次外循环时,t=t+b[0][b[0][0]]=1+b[0][0]=1+0=1;第二次外循环时t=t+b[1][b[1][1]]=1+b[1][1]=1+1=2;第三次外循环时,t=t+b[2][b[2][2]]=2+b[2][2]=2+2=4。

11.若有以下程序:

#include<stdio.h>

main()

{inti;

for(i=1;i<=40;i++)

{if(i++%5==0)

if(++i%8==0)printf("%d",i);

}

printf("/n");

}

则执行后的输出结果是______。

(分数:

2.50)

 A.5

 B.24

 C.32 √

 D.40

解析:

[解析]本题的含义是在1-40的整数的范围中,只有当i的值能被5整除,且i+2的值能被8整除时,打印i的值,满足这个条件的只有32,选择C选项。

12.以下叙述中正确的是______。

(分数:

2.50)

 A.continue语句的作用是使程序的执行流程跳出包含它的所有循环

 B.break语句只能用在循环体内和switch语句体内 √

 C.在循环体内使用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的效果是一样的,可以互换

解析:

[解析]break语句通常用在循环语句和开关语句中。

当break用手开关语句switch中时,可使程序跳出switch而执行switch以后的语句;当break语句用于do…while、for、while循环语句中肘,可使程序终止循环而执行循环后面的语句,即满足条件时便跳出循环。

continue语句的作用是跳过循环体中剩余的语句而强行执行下一次循环。

A、B和D三个选项中均有错误。

因此C选项正确。

14.若有以下定义:

intx[10],*pt=x;

则对x数组元素的正确引用是______。

(分数:

2.50)

 A.pt+3

 B.*&x[10]

 C.*(pt+10)

 D.*(x+3) √

解析:

[解析]没有A选项的引用形式。

*与&放在一起作用抵消,所以B选项错误。

*(pt+i)表示引用指针pt所指元素后的第i个元素,所以C选项错误,最大只能为*(pt+9)。

因此D选项正确。

15.若有以下程序:

#include<stdio.h>

main()

{inti,s=0,t[]={1,2,3,4,5,6,7,8,9};

for(i=0;i<9;i+=2)a+=*(t+i);

printf("%d/n",s);

}

则程序执行后的输出结果是______。

(分数:

2.50)

 A.20

 B.25 √

 C.45

 D.36

解析:

[解析]统计1~9中的奇数和,此题考查指向数组的指针。

C语言规定数组名代表数组的首地址,也就是第一个元素的地址。

因此*(t+i)代表数组的第i+1个元素。

程序运行的结果是1+3+5+7+9=25。

16.若有以下程序:

#include<stdio.h>

voidfun(int*s,intn1,intn2)

{

inti,j,t;

i=n1;j=n2;

while(i<j)

t=s[i];s[i]=s[j];s[j]=t;i++;j--;

}

}

main()

{

inta[10]={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;k<10;k++)

printf("%d",a[k]);

printf("/n");

}

则程序的运行结果是______。

(分数:

2.50)

 A.4321098765

 B.5678901234 √

 C.0987654321

 D.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()

{

ints[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;

for(i=0;i<12;i++)

c[s[i]]++;

for(i=1;i<5;i++)

printf("%d",c[i]);

printf("/n");

}

则程序的运行结果是______。

(分数:

2.50)

 A.2344

 B.4332 √

 C.1234

 D.1123

解析:

[解析]在for(i=0;i<12;i++)c[s[i]]++;语句中,数组元素s[i]的值作为数组c的下标,当退出循环时,数组c的4个元素的值分别为4、3、3、2。

因此B选项正确。

18.若有以下程序:

#include<stdio.h>

voidfun(inta[],intn)

{intt,i,j;

for(i=1;i<n;i+=2)

for(j=i+2;j<n;j+=2)

if(a[i]>a[j]){t=a[i];a[i]=a[j];a[j]=t;}

}

main()

{intc[10]={10,9,8,7,6,5,4,3,2,1},i;

fun(c,10);

for(i=0;i<10;i++)printf("%d,",c[i]);

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的嵌套循环。

该题首先对一维数组进行初始化,c[0]到c[9]依次赋值为10到1;fun(c,10);语句调用fun函数,fun函数的功能是将一维数组偶数位元素的数值由小到大排序;最后将排好序的新的一维数组进行输出。

因此D选项正确。

19.若有以下程序:

#include<stdio.h>

main()

{intc[6]={10,20,30,40,50,60},*p,*s;

P=c;s=&c[5];

printf("%d/n",s-P);

}

则程序运行后的输出结果是______。

(分数:

2.50)

 A.5 √

 B.50

 C.6

 D.60

解析:

[解析]本题主要考查数组和指针。

首先初始化一维数组c[6],语句p=c;指将c[0]元素的地址赋给指针变量p,语句s=&c[5];指将c[5]元素的地址赋给指针变量s。

程序最后输出s-p,即结果为5。

因此A选项正确。

20.若有以下程序:

#include<stdio.h>

main()

{inta[3]={0},i,j,k=2;

for(i=0;i<k;i++)

for(j=0;j<k;j++)a[j]=a[i]+1;

printf("%d/n",a[1]);

}

则程序运行后的输出结果是______。

(分数:

2.50)

 A.0

 B.2

 C.1

 D.3 √

解析:

[解析]该题首先初始化一维数组a[3]所有元素都为0;执行嵌套循环for语句,当i=0、j=0时,a[0]=a[0]+1=1;当i=0、j=1时,a[1]=a[0]+1=2;当i=1、j=0时,a[0]=a[1]+1=3;当i=1、j=1时,a[1]=a[1]+1=3;因此D选项正确。

21.有以下程序:

#include<stdio.h>

main()

{inta[5]={2,4,6,8,10},*p,**k;

P=a;k=&p;

printf("%",*(p++));

printf("%d/n",**k);

}

程序运行后的输出结果是______。

(分数:

2.50)

 A.46

 B.44

 C.22

 D.24 √

解析:

[解析]本题主要考查指针。

首先通过p=a使p指向数组的第1个元素,所以输出2;在输出2以后,由于p++,即p就指向数组的第2个元素,**k就是取出p所指向元素的值,而p指向的是数组的第2个元素,即输出4:

因此D选项正确。

22.以下叙述中正确的是______。

(分数:

2.50)

 A.一条语句只能定义一个数组

 B.每个数组包含一组具有同一类型的变量,这些变量在内存中占有连续的存储单元 √

 C.数组说明符的一对方括号中只能使用整型常量,而不能使用表达式

 D.在引用数组元素时,下标表达式可以使用浮点数

解析:

[解析]A选项中,一条语句只能定义一个数组是不准确的,可以通过一条语句定义多个数组;C选项中,数组说明符的一对方括号中可以是整型常量,也可以是整型常量表达式;D选项中,在引用数组元素时,下标表达式必须是整型的。

因此B选项正确。

23.以下叙述中正确的是______。

(分数:

2.50)

 A.数组下标的下限是1

 B.数组下标的下限由数组中第一个非零元素的位置决定

 C.数组下标的下限由数组中第一个被赋值元素的位置决定

 D.charc1,c2,*c3,c4[40];是合法的变量定义语句 √

解析:

[解析]C语言规定,数组下标值的下限一律为0,对于一维数组a[max](max是一个编译时可知的值)来说,它的第一个和最后一个元素分别是a[0]和a[max-1]。

所以,数组下标值的下限与数组中元素的位置无关,故A、B、C选项错误。

24.有以下程序:

#include<stdio.h>

#defineN4

voidfun(inta[][N],intb[])

{inti;

for(i=0;i<N;i++)b[i]=a[i][i];

}

main()

{intx[][N]={{1,2,3},{4},{5,6,7,8},{9,10}},y[N],i;

fun(x,y);

for(i=0;i<N;i++)printf("%d,",y[i]);

printf("/n");

}

程序的运行结果是______。

(分数:

2.50)

 A.1,0,7,0, √

 B.1,2,3,4,

 C.1,4,5,9,

 D.3,4,8,10,

解析:

[解析]该程序首先在定义变量时,对二维数组x[][N]进行赋值操作;调用函数fun,函数fun的功能是将=维数组中的a[0儿0]、a[1][1]、a[2][2]和a[3][3]赋值给一维数组。

最后将输出一维数组1,0,7,0,。

25.有以下程序:

#include<stdio.h>

intfun(int(*s)[4],intn,intk)

{intm,i;

m=s[0][k];

for(i=1;i<n;i++)

if(s[i][k]>m)

m=s[i][k];

returnm;

main()

{inta[4][4]={{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.4

 B.34

 C.31 √

 D.32

解析:

[解析]本题重点考查二维数组名作为实参进行参数传递。

在主函数中调用了fun函数,买参为二维数组名a和两个整数4、0,这样对应定义fun函数首部也有三种形式,这里采用第一种形式,也就是行指针,这样在fun函数对s[i][j]进行操作实际上就是对主函数中的a[i][j]进行操作,再分析fun函数的作用,其是求二维数组第0列中最大的那个元素。

因此C选项正确。

26.有以下程序:

#include<stdio.h>

main()

{

inta[4][4]={{1,4,3,2},

{8,6,5,7},

{3,7,2,5},

{4,8,6,1}};

inti,j,k,t;

for(i=0;i<4;i++)

for(j=0;j<3;j++)

for(k=j+1;k<4;k++)

if(a[j][i]>a[k

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1