全国计算机二级C语言模拟646.docx

上传人:b****8 文档编号:9613683 上传时间:2023-02-05 格式:DOCX 页数:24 大小:39.51KB
下载 相关 举报
全国计算机二级C语言模拟646.docx_第1页
第1页 / 共24页
全国计算机二级C语言模拟646.docx_第2页
第2页 / 共24页
全国计算机二级C语言模拟646.docx_第3页
第3页 / 共24页
全国计算机二级C语言模拟646.docx_第4页
第4页 / 共24页
全国计算机二级C语言模拟646.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

全国计算机二级C语言模拟646.docx

《全国计算机二级C语言模拟646.docx》由会员分享,可在线阅读,更多相关《全国计算机二级C语言模拟646.docx(24页珍藏版)》请在冰豆网上搜索。

全国计算机二级C语言模拟646.docx

全国计算机二级C语言模拟646

二级C语言模拟646

一、选择题

1.有以下程序:

#include<stdio.h>

main()

{

charc[2][5]={"6938","8254"},*p[2];

inti,j,s=0;

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

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

for(j=0;p[i][j]>0;j+=2)s=10*s+p[i][j]-'0';

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

}

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

A.6938

B.9824

C.4528

D.6385

答案:

D

[解答]本题中首先是将二维字符数组c赋值指针数组p,然后遍历p找到两个字符串中的偶数位置的字符并组成一个数值输出,根据代码执行即可得到结果为6385。

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

A.break语句不能用于提前结束for语句的本层循环

B.使用break语句可以使流程跳出switch语句体

C.continue语句使得整个循环终止

D.在for语句中,continue与break的效果是一样的,可以互换

答案:

B

[解答]break跳出switch语句或循环语句,contiune结束本次循环,继续进行剩余的循环。

所以答案选择B。

3.程序调试的任务是______。

A.设计测试用例

B.验证程序的正确性

C.发现程序中的错误

D.诊断和改正程序中的错误

答案:

D

[解答]程序调试的任务是诊断和改正程序中的错误。

4.有以下程序

#include<stdio.h>

main()

{

intx=8;

for(;x>0;x--)

{

if(x%3)

{

printf("%d,",x--);

continue;

}

printf("%d,",--x);

}

}

程序的运行结果是______。

A.8,5,4,2,

B.8,7,5,2,

C.9,7,6,4,

D.7,4,2,

答案:

A

[解答]第一次x为8,输出8,第二次x为6,输出5,第三次x为4,输出4,第四次x为2,输出2,循环结束,所以答案选择A。

5.有以下程序:

#include<stdio.h>

structSTU{charname[9];charsex;intscore[2];};

voidf(structSTUa[])

{structSTUb={"Zhao",'m',85,90};

a[1]=b;

}

main()

{structSTUc[2]={{"Qian",'f',95,92},{"Sun",'m',98,99}};

f(c);

printf("%s,%c,%d,%d,",c[0].name,c[0].sex,c[0].score[0],c[0].score[1]);

printf("%s,%c,%d,%d\n",c[1].name,c[1].sex,c[1].score[0],c[1].score[1]);

}

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

A.2hao,m,85,90,Sun,m,98,99

B.2hao,m,85,90,Qian,f,95,92

C.Qian,f,95,92,Sun,m,98,99

D.Qian,f,95,92,Zhao,m,85,90

答案:

D

[解答]f函数是为结构体数组的第二个数赋值,数组的第一个数没有变化,所以正确答案应选D。

6.下列字符串是标识符的是______。

A.aa

B.a-class

C.int

D.LINE1

答案:

A

7.有以下程序

intf(intb[][4])

{inti,j,s=0;

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

{i=j;

if(i>2)i=3-j;

s+=b[i][j];

}

returns;

}

main()

{inta[4][4]={{1,2,3,4},{0,2,4,6},{3,6,9,12),{3,2,1,0}};

printf("%d\n",f(a));

}

执行后的输出结果是

A.12

B.11

C.18

D.16

答案:

D

[解答]本题考核的知识点是二维数组的定义、赋初值和对;维数组元素的引用。

分析程序可知,函数f()中的for循环作用,是将数组前三行中的对角线上的元素,即b[0][0]、b[1][1],b[2][2]和第一行的第四列元素即b[0][3]累加到变量s中,然后将s的值返回。

在主函数中首先定义了一个4行4列的二维数组,接着通过输出语句输出函数f(a)的返回值。

调用f(a)的返回值为a[0][0]+a[1][1]+a[2][2]+a[0][3]=1+2+9+4=16。

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

8.关系数据模型

A.只能表示实体间的1:

1联系

B.只能表示实体间的1:

n联系

C.只能表示实体间的m:

n联系

D.可以表示实体间的上述3种联系

答案:

D

[解答]数据模型用来表示实体间的联系,但不同的数据库管理系统支持不同的数据模型。

常用的数据模型有层次模型、网状模型和关系模型,层次模型不能表示多对多联系,网状模型和关系模型都能表示任意一种联系。

9.构成C程序的三种基本结构是

A.顺序结构、转移结构、递归结构

B.顺序结构、嵌套结构、递归结构

C.顺序结构、选择结构、循环结构

D.选择结构、循环结构、嵌套结构

答案:

C

10.设计软件结构是在软件生命周期的。

A.软件定义期

B.软件开发期

C.软件维护期

D.以上3个都不是

答案:

B

[解答]设计软件结构是在软件概要设计阶段进行的,而概要设计属于软件开发期。

11.以下选项中,能用作用户标识符的是______。

A._0_

B.8_8

C.void

D.unsigned

答案:

A

[解答]C语言中的标识符由字母、下划线、数字组成,且开头必须是字母或下划线。

另外,关键字不能作为标识符。

B选项中以数字8开头,所以错误。

C选项与D选项中用的是关键字void与unsigned,所以错误。

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

A.用C语言编写的程序只能放在一个程序文件中

B.C程序书写格式严格,要求一行内只能写一个语句

C.C程序中的注释只能出现在程序的开始位置和语句的后面

D.C程序书写格式自由,一个语句可以写在多行上

答案:

D

[解答]C语言编写的程序可以放置于多个程序文件中,所以A选项错误。

C程序中的一行可以有多条语句,所以B选项错误。

C语言中的注释语句可以与原语句放在一行,也可以不放在一行,所以C选项错误。

13.下列叙述中正确的是______。

A.程序执行的效率与数据的存储结构密切相关

B.程序执行的效率只取决于程序的控制结构

C.程序执行的效率只取决于所处理的数据量

D.以上三种说法都不对

答案:

A

[解答]数据的存储结构、程序处理的数据量、程序的算法等都会影响程序执行效率。

14.若已有定义语句:

inta,b,c;,且变量已正确赋初值,则以下选项中正确的赋值表达式是______。

A.a=(b=c)+8;

B.(a=b)=c=9;

C.a=(b==c)='A';

D.a+b=c+1;

答案:

A

[解答]赋值运算符左边必须是一个变量,B、D选项错误;C选项中,(b==c)是个表达式,语法错误,故排除C选项,故答案为A选项。

15.一棵二叉树中共有80个叶子结点与70个度为1的结点,则该二叉树中的总结点数为______。

A.219

B.229

C.230

D.231

答案:

B

[解答]二叉树中,度为0的结点数等于度为2的结点数加1,即n2=n0-1,叶子结点即度为0,则n2=79,总结点数为n0+n1+n2=80+70+79=229,答案为B选项。

16.有以下程序:

main()

{inta[]={2,4,6,8,10),y=0,x,*P;

P=&a[1];

for(x=1;x<3;x++)y+=p[x];

printf("%d\n",y);

}

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

A.10

B.11

C.14

D.15

答案:

C

[解答]指针变量p指向数组元素a[1],则p[1]即为a[2],p[2]即为a[3],执行第一次for循环时,y=y+p[1]=0+a[2]=6,第二次执行for循环,y=y+p[2]=6+a[3]=14,此时x为3,for循环条件不满足,退出循环,输出y的值为14。

17.整型变量x和Y的值相等,且为非0值,则以下选项中结果为0的表达式是______。

A.X‖Y

B.X|Y

C.X&Y

D.X^Y

答案:

D

[解答]“‖”为或运算符,当其左右表达式中只要一个为非零则整个表达式的值1。

|是按位或,&是按位与,^是按位异或,这三位运算符是按值的二进制位来比较的。

18.以下不能输出字符A的语句是______(注:

字符A的ASCII码值为65,字符a的ASCII码值为97)。

A.printf("%c\in",65);

B.printf("%c\in",'a'-32);

C.printf("%d\n",'A');

D.printf("%c\n",'B'-1);

答案:

C

[解答]%d输出整数,所以选择C。

19.下列关系表达式中,结果为“假”的是______。

A.(3+4)>6

B.(3!

=4)>2

C.3<=4||3

D.(3<4)=1

答案:

B

[解答]在一个表达式中,括号的优先级高,先计算3!

=4,为真即是1,1>2为假。

20.若有定义语句:

chars[10]="1234567\0\0";

则strlen(s)的值是______。

A.7

B.8

C.9

D.10

答案:

A

[解答]strlen()函数的功能是计算字符串长度时,遇到结束标识为止,且长度不包括结束标识。

本题中,从第_一个字符开始,遇到第一个结束标识'\0'为止,注意’\0'不占字符串长度,所以字符串长度为7。

因此A选项正确。

21.若有定义:

int*p[3];,则以下叙述中正确的是______。

A.定义了一个基类型为int的指针变量p,该变量具有3个指针

B.定义了一个指针数组p,该数组含有3个元素,每个元素都是基类型为int型的指针

C.定义了一个名为*p的整型数组,该数组含有3个int类型元素

D.定义了一个可指向一维数组的指针变量p,所指一维数组具有3个int类型元素

答案:

B

22.若变量已正确定义为float型,要通过输入语句:

scanf("%f%f%f",&a,&b,&c);给a赋值11.0,b赋值22.0,c赋值33.0,不正确的输入形式是______。

A.11

22

33

B.11.0,22.0,33.0

C.11.0

22.033.0

D.1122

33

答案:

B

[解答]B中不应该加“,”号。

23.有以下定义和语句

structworkers

{intnum;charname[20];charc;

struct

{intday;intmonth;intyear;}s;

};

structworkersw,*pw;

pw=&w;

能给w中year成员赋值为1980的语句是______。

A.w.s.year=1980;

B.w.year=1980;

C.pw->year=1980;

D.*pw.year=1980;

答案:

A

[解答]嵌套的结构体定义,要访问内层的成员,需要一层层用“.”访问,所以答案选择A。

24.若有定义语句:

chars[10]="1234567\0\0";

则strlen(s)的值是______。

A.7

B.8

C.9

D.10

答案:

A

[解答]本题考查的是字符串的长度。

字符数组中可以存放字符串,但字符数组的长度并不是字符串的长度,字符串的长度是指字符数组中存放的有效字符个数,即\0之前的字符数。

字符数组s中依次存放的字符是:

1234567和2个字符串结束标记\0,故字符串的长度是7,所以应该选择A。

25.以下选项中,合法的实数是______。

A.1.5E2

B.E1.1

C.2.10E

D.1.9E1.4

答案:

A

[解答]用尾数指数形式表示浮点数时,E的右侧必须是整数且不能为空。

26.有以下程序:

#include<stdio.h>

main()

{intm=1,n=2,*p=&m,*q=&n,*r;

r=p;p=q;q=r;

printf("%d,%d,%d,%d\n",m,n,*p,*q);

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

A.2,1,1,2

B.1,2,1,2

C.2,1,2,1

D.1,2,2,1

答案:

D

[解答]intm=1,n=2,*p=&m,*q=&n,*r;即指针变量p指向m,指针变量q指向n,r=p;p=q;q=r;即通过指针变量r,将指针p和指针q的指向交换。

因此最后输出1,2,2,1。

所以选择D选项。

27.若有以下定义和语句:

#include<stdio.h>

chars1[10]="abcd!

",*s2="\n123\\";

printf("%d%d\n",strlen(s1),strlen(s2));

则输出结果是______。

A.107

B.105

C.55

D.58

答案:

C

[解答]strlen函数的功能是返回字符串的长度,求字符串长度时,遇到结束标识“\0”为止,但是长度不包括结束标识。

字符数组s]的后5个元素没有赋值,都为“\0”,即“abcd!

”后为“\0”。

所以strlen(s1)的值为5。

字符指针s2所指向的字符串中,“\n”为转义字符换行符,表示1个字符;“\\”也为转义字符,代表“\”,也是1个字符,其后为字符串结柬标识“\0”;所以strlen(s2)的值也为5。

因此C选项正确。

28.C语言主要是借助______的手段来实现程序模块化。

A.定义函数

B.定义常量和外部变量

C.使用丰富的数据类型

D.使用三种基本结构语句

答案:

A

[解答]C语言程序的模块化通过函数来体现,所以选择A选项。

29.下面选项中的程序段,没有编译错误的是______。

A.char*sp,s[10];sp="Hello";

B.char*sp,s[10];s="Hello";

C.charstr1[10]="computer",str2[10];str2=str1;

D.charmark[];mark="PROGRAM";

答案:

A

[解答]char类型指针可以用字符串赋值,字符数组在定义时可以,其他地方不能直接用字符串赋值。

30.以下不能对文件进行输出的库函数是______。

A.fwite

B.fpute

C.fpout

D.fprintf

答案:

C

[解答]fputs函数的功能是用来向指定文件输出一个字符串。

fwrite函数的功能是用来向文件写数据块。

fprintf函数按照格式向文本文件中输出数据。

这三者都是库函数,而fpout.不是库函数,故选择C选项。

31.设有如下函数定义

#include<stdio.h>

intfun(intk)

{if(k<1)return0;

elseif(k==1)return1;

elsereturnfun(k-1)+1;

}

若执行调用语句:

n=fun(3);,则函数fun总共被调用的次数是______。

A.3

B.2

C.4

D.5

答案:

A

[解答]首先n=fun(3),3被当作参数传递进去,进行了第一次调用,3被当作参数传进去后,程序会执行语句elsereturnfun(k-1)+1,进行了第二次调用,而参数是3-1也就是2。

2被当作参数传进去后,程序会执行语句elsereturnfun(k-1)+1,进行了第三次调用,而参数是2-1也就是1。

1被当作参数传进去后,程序会执行语句elseif(k==1)return1;不再递归调用,因此最终结果为3次,选项A正确。

32.以下程序执行后x的值是。

#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无定值

答案:

C

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

33.下列说法不正确的是。

A.调用函数时,实参可以是表达式

B.调用函数时,实参与形参可以共用内存单元

C.调用函数时,将实参的值复制给形参,使实参变量和形参变量在数值上相等

D.调用函数时,实参与形参的类型必须一致

答案:

B

[解答]本题考查函数调用的基本概念。

调用函数时,实参的形式可以是具体的数值,也可以是表达式。

实参将数值或表达式的值传递给形参,因而两者的类型必须保持一致:

形参在运算过程中会发生改变,但不一定会影响到实参值,所以可知两者不共用内存单元。

34.有以下程序

#include<stdio.h>

voidmain()

{

intn=2,k=1;

while(!

(k>0||n++));

printf("%d%d\n",k,n);

}

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

A.02

B.13

C.57

D.12

答案:

D

[解答]在程序中整型变量n的初始值等于2,整型变量k的初始值等于1,在执行while语句时,由于表达式k的值大于0为真,所以不再需要判断“n++”是否为真,“(k>0||n++)”表达式的值为真。

“!

(k>0||n++)”表达式的值为假,所以while语句中的条件不满足,循环语句不会执行,变量n的值也不会加1,所在输出变量k和n的值是1和2。

35.有两个关系R、S如下:

由关系R通过运算得到关系S,则所使用的运算为______。

A.选择

B.投影

C.插入

D.连接

答案:

B

[解答]投影运算是指对于关系内的域指定可引入新的运算。

本题中S是在原有关系R的内部进行的,是由R中原有的那些域的列所组成的关系。

所以选择B选项。

36.有如下程序:

#include<stdio.h>

intchange(int*data)

{

return(*data)++;

}

main()

{

intdata=123;

change(&data);

printf("%d,",data);

data=change(&data);

printf("%d,",data);printf("\n");

}

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

A.124,124,

B.123,124,

C.124,123,

D.123,123,

答案:

A

[解答]本题程序执行过程为:

调用change函数,将变量data地址传入函数,返回当前指针指向的变量值123,之后此变量加一,data=124。

输出data=124。

再次调用函数,返回当前指针指向的变量值124,然后此地址内存中变量加一,data=125,然后将返回值124赋给变量data=124,最后输出data=124。

故A选项正确。

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

#include<stdio.h>

main()

{inti=0,a=0;

while(i<20)

{for(;;){if((i%10)==0)break;elsei--;}

i+=11;a+=i;

}

printf("%d\n",A);

}

A.21

B.32

C.33

D.11

答案:

B

38.阅读以下程序:

#include<stdio.h>

main()

{intx;

scanf("%d",&x);

if(x--<5)printf("%d",x);

elseprintf("%d",x++);

}

程序运行后,如果从键盘输入5,则输出结果是______。

A.3

B.4

C.5

D.6

答案:

B

39.已知字母A的ASCII码为十进制的65,下面程序

main()

{charch1,ch2;

ch1='A'+'5'-'3';

ch2='A'+'6'-'3';

printf("%d,%c\n",ch1,ch2);

}

的输出是_________。

A.67,D

B.B,C

C.C,D

D.不确定的值

答案:

A

[解答]由于字符“5”和“3”的ASCII码相差为2,所以ch1经过运算后的值应为65+2=67;同理,ch2经过运算后的值应为65+3=68,即是字符“D”。

40.有以下程序

#include<stdio.h>

voidfun(char*t,char*s)

{while(*t!

=0)t++;

while((*t++=*s++)!

=0);

}

main()

{charss[10]="acc",aa[10]="bbxxyy";

fun(ss,aa);printf("%s,%s\n",ss,aa);

}

程序的运行结果是______。

A.accbbxxyy,bbxxyy

B.acc

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

当前位置:首页 > PPT模板 > 其它模板

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

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