二级C语言51.docx

上传人:b****0 文档编号:9343314 上传时间:2023-05-18 格式:DOCX 页数:28 大小:26.73KB
下载 相关 举报
二级C语言51.docx_第1页
第1页 / 共28页
二级C语言51.docx_第2页
第2页 / 共28页
二级C语言51.docx_第3页
第3页 / 共28页
二级C语言51.docx_第4页
第4页 / 共28页
二级C语言51.docx_第5页
第5页 / 共28页
二级C语言51.docx_第6页
第6页 / 共28页
二级C语言51.docx_第7页
第7页 / 共28页
二级C语言51.docx_第8页
第8页 / 共28页
二级C语言51.docx_第9页
第9页 / 共28页
二级C语言51.docx_第10页
第10页 / 共28页
二级C语言51.docx_第11页
第11页 / 共28页
二级C语言51.docx_第12页
第12页 / 共28页
二级C语言51.docx_第13页
第13页 / 共28页
二级C语言51.docx_第14页
第14页 / 共28页
二级C语言51.docx_第15页
第15页 / 共28页
二级C语言51.docx_第16页
第16页 / 共28页
二级C语言51.docx_第17页
第17页 / 共28页
二级C语言51.docx_第18页
第18页 / 共28页
二级C语言51.docx_第19页
第19页 / 共28页
二级C语言51.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

二级C语言51.docx

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

二级C语言51.docx

二级C语言51

二级C语言-5-1

(总分:

79.00,做题时间:

90分钟)

一、{{B}}选择题{{/B}}(总题数:

35,分数:

45.00)

1.有下列程序:

main()

{intx=5;

do

{printf("%d",x-=4);}

while(!

(--x));

}

程序的输出结果是()。

∙A.1

∙B.20

∙C.14

∙D.死循环

(分数:

1.00)

 A.

 B.

 C. √

 D.

解析:

[解析]本题考查do…while循环。

①执行printf语句,x=x-41,输出1,判断while循环的控制条件,--x=0,则(!

(--x))非零,循环条件成立,执行下一次循环;②执行printf语句,x=x-4=-4,输出-4,判断while循环的控制条件,--x=-5,则(!

(--x))为零,循环条件不成立,结束循环。

2.设有如下关系表:

则下列操作中正确的是

∙A.T=R∩S

∙B.T=R∪S

∙C.T=R×S

∙D.T=R/S

(分数:

1.00)

 A.

 B. √

 C.

 D.

解析:

[解析]选项A、B、C分别进行交运算、并运算,笛卡尔积运算,选项D不是关系运算。

T由属于关系R以及关系S的元组组成,简单来说,就是s和R的元组之和,是并运算,选项B正确。

3.有以下程序:

#include<stdio.h>

main()

{chara='a',b;

printf("%c,",++a);

printf(1%c/n",b=a++);

}

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

∙A.b,b

∙B.b,c

∙C.a,b

∙D.a,c

(分数:

1.00)

 A. √

 B.

 C.

 D.

解析:

[解析]本题考核的知识点是运算符++的用法。

程序中的第一个输出语句输出表达式++a的值,该++a是在使用a之前,先使a的值加1,即a加1为字符b,此时a的值为b,所以第一个输出语句输出的值为b,第二个输出语句中输出的b的值,这时b的值为表达式a++的值,a++是在使用a之后(此时a的值为b,所以赋给b的值为b),使a的值加一,因此第二个输出的值也为b。

所以,4个选项中选项A)符合题意。

4.以下程序的输出结果是

#include<stdio.h>

main()

{charch[2][5]={"6937","8254"},*p[2];

inti,j,s=0;

for(i=0;i<2;i++)p[i]=ch[i];

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

for(j=0;p[i][j]>'/0';j+=2)

s=10*s+p[i][j]-'0';}

∙A.69825

∙B.63825

∙C.6385

∙D.693825

(分数:

1.00)

 A.

 B.

 C. √

 D.

解析:

[解析]本题考查通过指针引用字符串数组中的元素。

通过行指针p来实现数组元素的引用。

用格式说明符%s进行整串输入与输出。

本题中,每行字符指针跳跃式右移动,隔2个移动一次,s存放处理的累计和。

第一行中:

p[0]指针第一遍6-0=6s=0+6=6p[0]指针第二遍3-0=3s=10*6+3=63指针行下标变化,转向第二行第二行中:

p[1]指针第一遍8-0=8s=10*63+8=638p[2]指针第二遍5-0=5s=10*638+5=6385得出结果s=6385。

5.有以下程序;

main()

{inty=3,x=3,z=1;

printf("%d%d/n",(++x,y++),z+2);

}

执行后的输出结果是{{U}}{{/U}}

∙A.34

∙B.42

∙C.43

∙D.33

(分数:

1.00)

 A.

 B.

 C.

 D. √

解析:

6.在C语言中,变量的隐含存储类别是

∙A.auto

∙B.static

∙C.extem

∙D.无存储类别

(分数:

2.00)

 A. √

 B.

 C.

 D.

解析:

[解析]auto变量:

无static声明的局部变量。

用auto作存储类别的声明时,可以不写auto,存储类别隐含确定为auto(自动存储类别),是动态存储方式。

大多数变量是自动变量。

用static声明的局部变量是静态局部变量。

函数调用结束后静态局部变量占据的内存存储单元空间不释放,局部变量保留原值,下次调用时可以继续使用该值。

用extern声明外部变量,外部变量即全局变量,可以用extern声明来改变全局变量的作用域,实际上,关键字“auto”可以省略,auto不写则隐含确定为“自动存储类别”,属于动态存储方式。

7.以下选项中,非法的字符常量是______。

∙A.'t/'

∙B.'/17'

∙C."/n"

∙D.'/xaa'

(分数:

2.00)

 A.

 B.

 C. √

 D.

解析:

[解析]C语言中字符常量是以单引号括起来的单个字符,或以“/”与三位八进制数值或两位十六进制数值代替单个字符。

8.设有以下语句:

charstr1[]="string"mstr2[8],*str3,*str4=="string";

则______不是对库函数的正确调用。

∙A.strcpy(str1,"HELLO1");

∙B.strcpy(str2,"HELLO2");

∙C.strcpy(str3,"HELLO3");

∙D.strcpy(str4,"HELLO4");

(分数:

2.00)

 A.

 B.

 C. √

 D.

解析:

[解析]C语言中:

strcpy(st1,st2);,其两个参数均为字符指针或字符数组,选项C中的目的串指针str3没有指向具体有效的存储单元,故是错误的调用。

9.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是{{U}}{{/U}}。

∙A.chars[10]="abcdefg";

∙B.chart[]="abcdefg",*s=t;

∙C.chars[10];s="abcdefg";

∙D.chars[10];strcpy(s,"abcdefg");

(分数:

2.00)

 A.

 B.

 C. √

 D.

解析:

[解析]C语言中不能给数组整体赋初值,所以选项C是不正确的。

10.函数调用strcat(strcpy(str1,str2),str3)的功能是{{U}}{{/U}}。

∙A.将字符串str1复制到字符串str2中后再连接到字符串str3之后

∙B.将字符串str1连接到字符串str2之后再复制到字符串str3之后

∙C.将字符串str2复制到字符串sir1中后再将字符串str3连接到字符串str1之后

∙D.将字符串str2连接到字符串str1之后再将字符串str1复制到字符串str3中

(分数:

2.00)

 A.

 B.

 C. √

 D.

解析:

[解析]strcat(s1,s2)是把s2字符串连接到s1字符串末尾,strcpy(s1,s2)是把s2字符串复制给s1字符串,要保证s1能容纳下连接或复制后的字符串。

11.以下程序执行后x的值是{{U}}{{/U}}。

#include<stdio.h>

main()

{intx,y=252,i=386,*m=&y,*z=&i;

x=(z==m);

printf("%d",x);

}

∙A.252

∙B.1

∙C.0

∙D.运行时出错,x无定值

(分数:

1.00)

 A.

 B.

 C. √

 D.

解析:

[解析]指针变量m和z分别指向整型变量y,i,所以这两个指针变量中存储的地址是不同的,变量x接受的是一个关系运算结果0(因为m和z两个地址是不同的),所以x为0。

12.sizeof(float)是{{U}}{{/U}}。

∙A.一个双精度型表达式

∙B.一个整型表达式

∙C.一种函数调用

∙D.一个不合法的表达式

(分数:

1.00)

 A.

 B. √

 C.

 D.

解析:

[解析]sizeof是长度运算符,或称字节数运算符,用于计算数据类型和变量的长度。

13.下面程序的输出结果是()。

main()

{structm1{inta;intb;}en[2]={1,3,2,7);

printf("%d/n",en[0].b/en[0].a*en[1].a);

∙A.6

∙B.0

∙C.1

∙D.3

(分数:

1.00)

 A. √

 B.

 C.

 D.

解析:

[解析]en[2]是结构体类型的数组,en[0].b/en[0].a*en[1].a=3/1*2=6。

14.有以下程序:

#include<stdio.h>

structord

{intx,y;}dt[2]={11,12,13,14};

main()

{

structord*p=dt;

printf("%d,",++(p->x));printf("%d/n",++(p->y));

}

程序运行后的输出结果是

∙A.11,12

∙B.12,13

∙C.13,14

∙D.14,11

(分数:

1.00)

 A.

 B. √

 C.

 D.

解析:

[解析]本题中定义了一个结构体数组dt[2],其中dt[0].x=11,dt[0].y=12,dt[1].x=13,dt[1].y=14。

在main函数中指针p指向了结构体数组的第一个元素,因此p->x值为11,p->y值为12,自加运算的结果分别为12和13。

15.有以下程序:

#include<stdio.h>

#definef(x)x*x*x

main()

{

inta=3,s,t;

s=f(a+1);

t=f((a+1));

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

}

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

∙A.10,64

∙B.10,10

∙C.64,10

∙D.64,64

(分数:

1.00)

 A. √

 B.

 C.

 D.

解析:

[解析]本题考查宏定义的用法,宏定义只是做个简单的替换,所以本题中执行f(a+1)=a+1*a+1*a+1=3*a+1=10,f((a+1))=(a+1)*(a+1)*(a+1)=64,所以答案为A选项。

16.下列关于二叉树的叙述中,正确的是{{U}}{{/U}}。

∙A.叶子结点总是比度为2的结点少一个

∙B.叶子结点总是比度为2的结点多一个

∙C.叶子结点数是度为2的结点数的两倍

∙D.度为2的结点数是度为1的结点数的两倍

(分数:

2.00)

 A.

 B. √

 C.

 D.

解析:

[解析]由二叉树的性质可以知道在二叉树中叶子结点总是比度为2的结点多一个。

17.设有以下说明语句:

typedefstruct

{intn;

charch[8];

}PER;

则下面叙述中正确的是

∙A.PER是结构体变量名

∙B.PER是结构体类型名

∙C.typedefstruct是结构体类型

∙D.struct是结构体类型名

(分数:

1.00)

 A.

 B. √

 C.

 D.

解析:

[解析]本题中,typedef声明新的类型名PER来代替已有的类型名,PER代表上面指定的一个结构体类型,此时,也可以用PER来定义变量。

18.有以下程序

intb=2;

intfunc(int*A)

{b+=*a;return(B);}

main()

{inta=2,res=2;

res+=rune(&A);

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

}

程序运行后的输出结果是{{U}}{{/U}}

∙A.4

∙B.6

∙C.8

∙D.10

(分数:

1.00)

 A.

 B. √

 C.

 D.

解析:

19.下列叙述中正确的是{{U}}{{/U}}。

∙A.break语句只能用于switch语句

∙B.在switch语句中必须使用default

∙C.break语句必须与switch语句中的case配对使用

∙D.在switch语句中,不一定使用break语句

(分数:

1.00)

 A.

 B.

 C.

 D. √

解析:

[解析]break为C语言关键字,又称间断语句。

break语句的功能是跳出正在执行的条件语句或循环语句。

它可以出现在switch语句中,也可以出现在循环语句中。

default是关键字,起标号的作用,代表所有case标号之外的那些标号。

default标号可以出现在语句体中任何标号位置上。

在switch语句体中也可以没有default标号。

20.以下程序的输出结果是

longfun(intn)

{longs;

if(n==1‖n==2)s=2;

elses=n-fun(n-1);

returns;}

main()

{printf("%1d/n",fun(3));}

∙A.1

∙B.2

∙C.3

∙D.4

(分数:

2.00)

 A. √

 B.

 C.

 D.

解析:

[解析]该题考查的是递归函数的调用,题中读fun函数进行了递归调用,第1次调用:

fun(3)n=3s=3-fun

(2);第二次调用时:

fun

(2)n=2s=2返回第一次调用后,s=3-2=1。

21.以下定义语句中正确的是______。

∙A.chara='A'b='B';

∙B.floata=b=10.0;

∙C.inta=10,*b=&a;

∙D.float*a,b=&a;

(分数:

1.00)

 A.

 B.

 C. √

 D.

解析:

[解析]在A选项中,定义了两个char型的变量,但是在这两个变量之间应该加上逗号;在B选项中,没有对b进行定义,只是对b进行了赋值,因此是错误的;在D选项中,把一个指针赋值给了一个float型的变量,因此是错误的。

22.以下程序的输出结果是______。

main()

{intx=5,n=3,s,j;

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

{s=fun(x,n);

printf("%d",s);

}

}

fun(inta,intb)

{staticintn=0,i=2;

i=n+1;

n=i+a-b;

return(n);

}

∙A.37

∙B.35

∙C.36

∙D.33

(分数:

1.00)

 A.

 B.

 C. √

 D.

解析:

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

∙A.用C程序实现的算法必须要有输入和输出操作

∙B.用C程序实现的算法可以没有输出但必须要输入

∙C.用C程序实现的算法可以没有输入但必须要有输出

∙D.用C程序实现的算法可以既没有输入也没有输出

(分数:

1.00)

 A.

 B.

 C. √

 D.

解析:

[解析]算法的特性中包括“有零个或多个输入”及“有一个或多个输出”这两个特性。

一个算法得到的结果就是算法的输出,没有输出的算法是没有意义的,所以一千算法必须至少有一个输出。

24.设a、b、c、d、m.n均为血型变量,且a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式(m=a>b)&&(n=c>d)运算后,n的值为______。

∙A.0

∙B.1

∙C.2

∙D.3

(分数:

2.00)

 A. √

 B.

 C.

 D.

解析:

[解析]C语言中比较表达式的运算结果为0或1。

0代表不成立,1表示成立。

25.若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后,a的值是______。

∙A.-3

∙B.9

∙C.-12

∙D.6

(分数:

1.00)

 A.

 B.

 C. √

 D.

解析:

[解析]C语言中对赋值运算的运算的运算顺序是自右向左。

本题中,计算a*a之后,a的值依然为3,表达式a*a的值为9;a-=9,a=3-9=-6:

a+=-6,a=-6+-6=-12。

26.有三个关系R、S和T如下:

R

A

B

C

a

1

2

b

2

1

c

3

1

S

A

B

C

a

1

2

b

2

1

T

A

B

C

c

3

1

则由关系R和S得到关系T的操作是______。

∙A.自然连接

∙B.差

∙C.交

∙D.并

(分数:

1.00)

 A.

 B. √

 C.

 D.

解析:

[解析]关系T中的元组是R关系中有而S关系中没有的元组的集合,所以进行的是差运算。

27.设有如下的程序段:

charstr[]="Hello";

char*ptr;

ptr=str;

执行完上面的程序段后,*(ptr+5)的值为{{U}}{{/U}}。

∙A.'o'

∙B.'/0'

∙C.不确定的值

∙D.'o'的地址

(分数:

1.00)

 A.

 B. √

 C.

 D.

解析:

[解析]本题考杏字符数组的结束标志。

ptr=str是将串str的首地址赋给了指针变量ptr,所以ptr+5指向字符串str的第六个数组元素,即是串的隐含结束标志'/0',*(ptr+5)='/0',最后的结果为'/0'。

28.有以下程序:

#include<stdio.h>

intfun(intx[],intn)

{staticintsum=0,i;

for(i=0;i<n;i++)sum+=x[i];

returnsum;

}

main()

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

s=fun(a,5)+fun(b,4);printf("%d/n",s);

}

程序执行后的输出结果是()。

∙A.45

∙B.50

∙C.60

∙D.55

(分数:

1.00)

 A.

 B.

 C. √

 D.

解析:

[解析]函数fun的功能是求数组的n个元素之和。

fun(a,5)=15。

由于sum是静态局部变量,所以保持15不变,fun(b,4)=45,所以s=fun(a,5)+fun(b,4)=60。

29.下列能正确定义且赋初值的语句是{{U}}{{/U}}。

∙A.intn1=n2=10;

∙B.charc=32;

∙C.floatf=f+1.1;

∙D.doublex=12.3E2.5;

(分数:

2.00)

 A.

 B. √

 C.

 D.

解析:

[解析]C语言规定,可以在定义变量的同时给变量赋初值,称为变量初始化。

在选项A)中在给n1和n2进行赋初值,但变量n2没有定义;在选项C)中定义变量f时,不能在赋值表达式的右边出现变量f自身,所以选项C)错误;在选项D)用指数表达式的常量中,字母E后面的数应该为整数,而不应该为小数形式。

因此,选项B)正确。

30.有以下函数定义:

voidfun(intn,doublex){……}

若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是{{U}}{{/U}}。

∙A.fun(inty,doublem);

∙B.k=fun(10,12.5);

∙C.fun(x,n);

∙D.voidfun(n,x);

(分数:

1.00)

 A.

 B.

 C. √

 D.

解析:

[解析]本题考查函数调用。

函数调用时,实参前不需加类型说明,选项A)错误;题目中的函数没有返回值,所以选项B)错误;函数调用前不需要加类型说明,选项D)错误。

31.以下程序的运行结果是

#include"stdio.h"

main()

{structdate

{intyear,month,day;}today;

printf("%d/n",sizeof(structdate));}

∙A.6

∙B.8

∙C.10

∙D.12

(分数:

1.00)

 A. √

 B.

 C.

 D.

解析:

[解析]在解答本题时应该考虑两个问题:

结构体变量的长度及sizeof()求字节数的运算符。

结构体变量的长度是其内部成员总长度之和,本题中,structdate中包含year,month,day三个整型变量。

一个整型变量所占的字节数为2。

32.下列叙述中正确的是()。

∙A.线性链表中的各元素在存储空间中的位置必须是连续的

∙B.线性链表中的表头元素一定存储在其他元素的前面

∙C.线性链表中的各元素在存储空间中的位置不一定是连续的,但表头元素一定存储在其他元素的前面

∙D.线性链表中的各元素在存储空间中的位置不一定是连续的,且各元素的存储顺序也是任意的

(分数:

1.00)

 A.

 B.

 C.

 D. √

解析:

[解析]在线性表的链式存储结构中,各数据结点的存储位置不连续,且各结点在存储空间中的位置关系与逻辑关系也不一致。

在线性链表中,各数据元素之间的前后关系是由各结点的指针域来指示的。

所以,选项D正确。

33.当变量c的值不为2、4、6时,值也为“真”的表达式是()。

∙A.(c==2)‖(c==4)‖(c==6)

∙B.(c>=2&&c<=6)‖(c!

=3)‖(c!

=5)

∙C.(c>=2&&c<-6)&&!

(c%2)

∙D.(c>=2&&c<=6)&&(c%2!

=1)

(分数:

2.00)

 A.

 B. √

 C.

 D.

解析:

[解析]逻辑或运算中,只要有一项为真,表达式的值就为真,故选项B)中c的值不为2、4、6时,表达式的值也为真。

34.有以下程序

voidfun(int*a,inti,intj)

{intt;

if(i<j)

{

t=a[i];a[i]=a[j];a[j]=t;

i++;j--;

fun(a,i,j);

}

}

main()

{intx[]={2,6,1,8},i;

fun(x,0,3);

for(i=0;i<4;i++)printf("%2d",x[i]);

printf("/n");

}

程序运行后的输出结果是

∙A.126

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

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2