全国计算机等级考试二级c语言选择题 1Word下载.docx

上传人:b****8 文档编号:22256566 上传时间:2023-02-03 格式:DOCX 页数:22 大小:56.98KB
下载 相关 举报
全国计算机等级考试二级c语言选择题 1Word下载.docx_第1页
第1页 / 共22页
全国计算机等级考试二级c语言选择题 1Word下载.docx_第2页
第2页 / 共22页
全国计算机等级考试二级c语言选择题 1Word下载.docx_第3页
第3页 / 共22页
全国计算机等级考试二级c语言选择题 1Word下载.docx_第4页
第4页 / 共22页
全国计算机等级考试二级c语言选择题 1Word下载.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

全国计算机等级考试二级c语言选择题 1Word下载.docx

《全国计算机等级考试二级c语言选择题 1Word下载.docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试二级c语言选择题 1Word下载.docx(22页珍藏版)》请在冰豆网上搜索。

全国计算机等级考试二级c语言选择题 1Word下载.docx

C)多态性

D)标识唯一性

【解析】对象有如下一些基本特点:

标识唯一性、分类性、多态性、封装性、模块独立性好。

所以选择A)。

 

一间宿舍可住多个学生,则实体宿舍和学生之间的联系是(  )。

A)一对一

B)一对多

C)多对一

D)多对多

【解析】因为一间宿舍可以住多个学生即多个学生住在一个宿舍中,但一个学生只能住一间宿舍,所以实体宿舍和学生之间是一对多的关系。

在数据管理技术发展的三个阶段中,数据共享最好的是(  )。

A)人工管理阶段

B)文件系统阶段

C)数据库系统阶段

D)三个阶段相同

【解析】数据管理发展至今已经历了三个阶段:

人工管理阶段、文件系统阶段和数据库系统阶段。

其中最后一个阶段结构简单,使用方便逻辑性强物理性少,在各方面的表现都最好,一直占据数据库领域的主导地位,所以选择C)。

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

由关系R和S通过运算得到关系T,则所使用的运算为(  )。

A)笛卡尔积

B)交

C)并

D)自然连接

【解析】自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以根据T关系中的有序组可知R与S进行的是自然连接操作。

下列叙述中错误的是(  )。

A)C程序可以由多个程序文件组成

B)一个C语言程序只能实现一种算法

C)C程序可以由一个或多个函数组成

D)一个C函数可以单独作为一个C程序文件存在

【解析】在一个C语言程序中可以进行多种算法的实现,对算法的个数没有规定,所以B)错误。

以下选项中,能用作数据常量的是(  )。

A)115L

B)0118

C)1.5e1.5

D)o115

【解析】A)选项中115L表示115是长整型数据,合法。

B)选项是八进制常量的表示方法,但是在八进制中不能含有数字8,所以B)错误。

C)选项中e后面应该是整数不能是小数1.5,所以C)错误。

D)选项中八进制常量应该是数字"

0"

开始,而不是字母"

o"

开始。

按照C语言规定的用户标识符命名规则,不能出现在标识符中的是(  )。

A)大写字母

B)下划线

C)数字字符

D)连接符

【解析】C语言中标识符由字母、下划线、数字组成,且开头必须是字母或下划线。

所以D)选项中的连接符不合法。

设变量已正确定义并赋值,以下正确的表达式是(  )。

A)x=y+z+5,++y

B)int(15.8%5)

C)x=y*5=x+z

D)x=25%5.0

【解析】B)与D)选项中取模运算符%的左右两个操作数均应为整数,所以B)、D)错误。

C)选项中不能将x+y的值赋给表达式y*5,所以C)错误。

设有定义:

intx=2;

,以下表达式中,值不为6的是(  )。

A)2*x,x+=2

B)x++,2*x

C)x*=(1+x)

D)x*=x+1

有以下程序:

#include<

stdio.h>

main()

{ intx,y,z;

 x=y=1;

 z=x++,y++,++y;

 printf("

%d,%d,%d\n"

,x,y,z);

}

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

A)2,3,3

B)2,3,2

C)2,3,1

D)2,2,1

【解析】z=x++,y++,++y;

因为赋值运算符的优先级高于逗号运算符的优先级,所以可以将上式表示成(z=x++),(y++),(++y)。

然后从左向右先计算表达式z=x++,因为x++先使用后自增,所以z的值为1,x的值为2。

再计算逗号表达式第二个表达式y++,此时y的值为2,最后计算第三个表达式++y,y的值为3。

{ charc1,c2;

  c1='

A'

+'

8'

-'

4'

  c2='

5'

  printf("

%c,%d\n"

,c1,c2);

已知字母A的ASCII码为65,程序运行后的输出结果是(  )。

A)E,68

B)D,69

C)E,D

D)输出无定值

【解析】本题目中字符变量c1是字符'

的ASCII码加上4,即69所对应的字符'

E'

字符变量c2是字符'

的ASCII码加上3,即68所对应的字符'

D'

但是打印输出时,c1以%c的格式输出,所以是E,c2以%d的格式输出,所以是68。

若有定义intx,y;

并已正确给变量赋值,则以下选项中与表达式(x-y)?

(x++):

(y++)中的条件表达式(x-y)等价的是(  )。

A)(x-y<

0||x-y>

0)

B)(x-y<

C)(x-y>

D)(x-y==0)

【解析】条件表达式:

x=表达式1?

表达式2:

表达式3的含义是:

先求解表达式1,若为非0(真),则求解表达式2,将表达式2的值赋给x。

若表达式1的值为0(假),则求解表达式3,将表达式3的值赋给x。

在本题中与表达式1:

(x-y)等价的是(x-y<

0)。

{ intx=1,y=0;

  if(!

x)y++;

  elseif(x==0)

      if(x)y+=2;

      elsey+=3;

  printf("

%d\n"

,y);

A)3

B)2

C)1

D)0

【解析】在ifelse语句中else总是与离它最近的if配对。

本题目中x为1所以!

x为0,所以执行elseif语句中的内容,判断(x==0)是否成立,因为x为1所以条件不成立,所以elseif内部的if…else语句不再执行,所以y的值还是初始值0。

若有定义:

floatx=1.5;

inta=1,b=3,c=2;

则正确的switch语句是(  )。

A)switch(a+b)

{case1:

printf("

*\n"

);

 case2+1:

**\n"

}

B)switch((int)x);

 case2:

C)switch(x)

{case1.0:

 case2.0:

D)switch(a+b)

 casec:

【解析】B)选项中switch((int)x);

语句中不应该有最后的分号。

switch(expr1),中的expr1不能用浮点类型或long类型,也不能为一个字符串,所以C)错误。

case后面常量表达式的类型必须与switch后面表达式的类型一致,所以D)错误。

{ inty=9;

  for(;

y>

0;

y--)

    if(y%3==0)printf("

%d"

,--y);

程序的运行结果是(  )。

A)852

B)963

C)741

D)875421

【解析】第一次for循环,y的值为9,y%3的值为0,满足条件打印--y,即先减一后打印,所以打印8;

第二次for循环,y的值为7,y%3的值为1,不执行打印语句;

第三次for循环,y的值为6,y%3的值为0,满足条件打印--y,即先减一后打印,所以打印5;

第四次for循环,y的值为4,不满足if条件,不执行打印语句;

第五次for循环,y的值为3,满足if条件,打印输出2;

第六次for循环,y的值为1,不满足条件,不执行打印语句。

{  inti,j,m=1;

  for(i=1;

i<

3;

i++)

  { for(j=3;

j>

j--)

    {if(i*j>

3)break;

     m*=i*j;

    }

  }

m=%d\n"

,m);

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

intfun(intx,inty)

{ if(x!

=y)return((x+y)/2);

 elsereturn(x);

{ inta=4,b=5,c=6;

 printf("

,fun(2*a,fun(b,c)));

A)6

B)3

C)8

D)12

【解析】本题中第一次调用为fun(8,fun(5,6)),因为fun(5,6)返回值为5,所以第二次调用为fun(8,5)=6。

intadd(inta,intb){return(a+b);

{intk,(*f)(),a=5,b=10;

 f=add;

 …

则以下函数调用语句错误的是(  )。

A)k=f(a,b);

B)k=add(a,b);

C)k=(*f)(a,b);

D)k=*f(a,b);

【解析】D)选项中*f(a,b)表示调用后返回一个指向整型数据的地址指针,即该函数的返回值为指针类型,所以不能将其赋值给整形变量k。

{intn,*p=NULL;

 *p=&

n;

 printf("

Inputn:

"

scanf("

,&

p);

outputn:

,p);

该程序试图通过指针p为变量n读入数据并输出,但程序有多处错误,以下语句正确的是(  )

A)intn,*p=NULL;

B)*p=&

C)scanf("

p)

D)printf("

【解析】选项B)的正确写法应为p=&

选项C)的正确写法应为scanf("

选项D)的正确写法应为printf("

,*p)。

下列定义数组的语句中,正确的是(  )。

A)#defineN10

intx[N];

B)intN=10;

C)intx[0..10];

D)intx[];

【解析】数组说明的一般形式为:

类型说明符 数组名[常量表达式]。

B)中N是变量,不能用变量定义数组长度。

C)选项中数组长度是非法的一串数字。

定义数组时必须为其指明长度,D)选项中数组长度为空,所以非法。

{ inta[]={2,3,5,4},i;

  for(i=0;

4;

    switch(i%2)

    {case0:

switch(a[i]%2)

      { case0:

a[i]++;

break;

        case1:

a[i]--;

       }break;

     case1:

a[i]=0;

    }

i++)printf("

%d"

,a[i]);

\n"

A)0304

B)2050

C)3344

D)3040

【解析】第一次循环i为0,i%2为0,执行switch(a[0]%2)中的case0语句后内容即a[0]++,a[0]的值变成3;

第二次循环i的值为1,i%2为1,执行case1:

所以a[1]的值变成0;

第三次循环i的值为2,i%2为0,执行switch(a[2]%2)中的case1语句后的内容a[2]--,a[2]的值变成4;

第四次循环i的值为3,i%2为1,执行case1:

所以a[3]的值变成0。

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

i<

i++)

    for(j=i;

j<

=i;

j++)t+=b[i][b[j][i]];

,t);

B)4

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。

以下语句中存在语法错误的是(  )。

A)charss[6][20];

ss[1]="

right?

B)charss()[20]={"

};

C)char*ss[6];

D)char*ss()={"

【解析】数组定义后,不可以对数组整体赋值,s是二维数组,因ss[1]是一维字符数组,即字符串,字符串赋值可以使用strcpy(ss[1],"

right"

这样的形式,而选项A)中对二维数组中的第"

1"

维(相当于一个一维数组)赋值,是不可以的。

选项B)和D)是定义时对数组初始化,这是可以的。

选项C)中,将字符串在内存中的首地址赋给指针数组的一个元素,这是可以的。

以下不能将s所指字符串正确复制到t所指存储空间的是(  )

A)do{*t++=*s++;

}while(*s);

B)for(i=0;

t[i]=s[i];

i++);

C)while(*t=*s){t++;

s++}

D)for(i=0,j=0;

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

);

【解析】do{*t++=*s++;

}while(*s);

不能因为当*s='

\0'

时,while(*s)跳出循环,这样字符串结束标志'

没有复制给*t,造成*t不完整。

注意,*t++=*s++是先执行t=*s,然后才进行t=t+1,s=s+1。

B),C),D)都能将'

复制过去。

voidswap(char*x,char*y)

{chart;

t=*x;

*x=*y;

*y=t;

{char*s1="

abc"

,*s2="

123"

swap(s1,s2);

%s,%s\n"

,s1,s2);

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

A)321,cba

B)abc,123

C)123,abc

D)1bc,a23

【解析】字符串是一个特殊的数组,所以按照数组的规则,s1应该指向的是数组的首地址,即"

的第一个字符的地址。

s2指向的是"

调用swap函数之后交换的是两个字符串的第一个字符'

a'

和'

1'

的内容,所以打印输出为D)。

有以下函数:

intfun(char*x,char*y)

{ intn=0;

  while((*x==*y)&

&

*x!

='

){x++;

y++;

n++;

  returnn;

函数的功能是(  )。

A)将y所指字符串赋给x所指存储空间

B)查找x和y所指字符串中是否有'

C)统计x和y所指字符串中最前面连续相同的字符个数

D)统计x和y所指字符串中相同的字符个数

【解析】本题中由循环条件可知遇到'

或x与y所指的字符的值不等中的一个条件时就结束,所以功能是统计x和y所指字符串中最前面连续相同的字符个数。

intfun()

{ staticintx=1;

  x*=2;

  returnx;

{ inti,s=1;

  for(i=1;

=3;

i++)s*=fun();

,s);

A)10

B)30

C)0

D)64

【解析】本题目中静态局部变量x,在静态存储区内分配存储单元。

在程序整个运行期间都不释放。

所以第一次循环s的值为2,第二次循环中,返回的x的值为4,所以s的值为8,第三次循环,返回的x的值为8,所以s的值为64。

在一个C源程序文件中所定义的全局变量,其作用域为(  )。

A)由具体定义位置和extern说明来决定范围

B)所在程序的全部范围

C)所在函数的全部范围

D)所在文件的全部范围

【解析】全局变量的作用域是从声明处到文件的结束。

所以选择A)

以下叙述中错误的是(  )。

A)可以通过typedef增加新的类型

B)可以用typedef将已存在的类型用一个新的名字来代表

C)用typedef定义新的类型名后,原有类型名仍有效

D)用typedef可以为各种类型起别名,但不能为变量起别名

【解析】关键字typedef的作用只是将C语言中的已有的数据类型作了置换,并不是增加新的类型,所以A)错误。

structS

{ inta,b;

}data[2]={10,100,20,200};

{ structSp=data[1];

,++(p.a));

A)10

B)11

C)20

D)21

【解析】声明data是结构S数组。

初始化data[0].a=10;

data[0].b=100;

data[1].a=20;

data[1].b=200。

主函数中p=data[1];

即p.a=data[1].a;

p.b=data[1].b;

执行语句printf("

,++(p.a));

打印输出时p.a先增1再打印。

p.a=data[1].a=20,先增1等于21。

#definePT3.5;

#defineS(x)PT*x*x;

{ inta=1,b=2;

%4.1f\n"

,S(a+b));

A)7.5

B)31.5

C)程序有错无输出结果

D)14.0

【解析】宏定义不是C语句,末尾不需要有分号。

所以语句printf("

展开后为printf("

3.5;

*a+b*a+b;

所以程序会出现语法错误。

#include<

{unsignedchara=2,b=4,c=5,d;

d=a|b;

d&

=c;

,d);

C)5

D)6

【解析】&

按位与,如果两个相应的二

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

当前位置:首页 > 高等教育 > 艺术

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

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