当前位置:   article > 正文

计算机二级C语言题库(60套真题+刷题软件)2024年新题第二套

计算机二级c语言题库

订阅专栏领取刷题软件

1、在数据库的三级模式中,外模式(用户模式或子模式)_____。

A. 只有3个

B. 只有2个

C. 可以有任意多个

D. 只有1个

本题考查的知识点是数据库设计基础。外模式也称子模式或用户模式。它是用户的数据视图,也就是用户所见到的数据模式,它由概念模式推导而出。概念模式给出了系统全局的数据描述而外模式则给出每个用户的局部数据描述。一个概念模式可以有若干个外模式,每个用户只关心与它有关的模式,这样不仅可以屏蔽大量无关信息而且有利于数据保护。所以本题答案为C。

2、在商场购物时,顾客可以购买不同的商品,而同样的商品也销售给不同的顾客,则实体顾客和实体商品之间的联系是_______。

A. 一对多

B. 一对一

C. 多对一

D. 多对多

本题考查的知识点是数据模型。根据题目要求,一名顾客可以购买多种商品,一种商品也可以被多名顾客购买,所以实体顾客和实体商品之间的联系是多对多的关系。所以本题答案为D。

3、学生选课成绩表的关系模式是SC(S#,C#,G),其中S#为学号,C#为课号,G为成绩,检索课号为2的成绩不及格的学生的学号____。

 本题考查的知识点是关系代数。首先在SC中进行选择运算,选择出课程号为2且成绩不及格的学生信息,故B、D选项错误;其次查找出符合该条件的学生学号,故选项C错误。所以本题答案为A。

4、在数据库的三级模式中,内模式(物理模式)有____。

A. 任意多个

B. 2个

C. 3个

D. 1个

本题考查的知识点是数据库设计基础。内模式又称为物理模式,它是数据库中全体数据的内部表示或底层描述,它是唯一的,而建立在数据库系统之上的应用则是非常广泛的、多样的,因此外模式不是唯一的,也不可能是唯一的。所以本题答案为D。

5、由若干零件组合成的、具有一定功能的部分为系统的部件,而零件可用于不同的部件,则实体部件和实体零件之间的联系是_______。

A. 多对多

B. 一对一

C. 多对一

D. 一对多

本题考查的知识点是数据模型。根据题目要求,部件由多个零件组成,零件可用于不同的部件,所以部件与零件之间的联系是多对多的关系。所以本题答案为A。

6、关系R经过运算

的结果为____。

A. (b, e,1,2)

B. (c, c,11,4)

C. (a, a,2,2)

D. (e, e,6,1)

本题考查的知识点是关系代数。根据题意可知,需要选择出关系R中A=B并且D>2的关系元组,只有(c, c,11,4)满足条件。所以本题答案为B。

7、长期储存在计算机内、有组织的、可共享的大量数据的集合是_______。

A. 数据库

B. 数据库系统

C. 关系数据库系统

D. 数据库管理系统

本题考查知识点是数据库基本概念。数据库(Database,简称DB)是数据的集合,它具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集合,并可被各个应用程序所共享。所以本题答案为A。

8、某工厂生产中使用若干种原材料,原材料置于多个仓库中,并且同样的材料可放在不同的仓库中,则实体材料和实体仓库之间的联系是______。

A. 多对一

B. 一对一

C. 多对多

D. 一对多

本题考查的知识点是数据模型。根据题目要求,一个仓库可以存储多种材料,一种材料可以被存储在不同的仓库中,所以实体材料和实体仓库是多对多的关系。所以本题答案为C。

9、设有表示商店聘用职工的三张表,其中商店(商店号,商店名,地址),职工(职工号,姓名,性别,业绩),聘用(职工号,商店号,聘期,月薪),则关系聘用的关键字(键或码)为___。

A. 职工号,商店号

B. 职工号,聘期

C. 职工号,月薪

D. 商店号,聘期,月薪

本题考查知识点是数据库基础知识。主键也称为主关键字,是在一个二维表中,唯一限定一条元组的属性或属性集合。商品关系的主键为商品号,职工关系的主键为职工号,且商品与职工属于多对多联系。聘用表可以将商品与职工的多对多联系拆分为两个一对多联系,所以聘用的关键字为职工号,商品号。所以本题答案为A。

10、循环队列的存储空间为Q(1:50),初始状态为front=rear=50。经过一系列正常的入队与退队操作后,front=rear=25,此后又正常地插入了一个元素,则循环队列中的元素个数为____。

A. 51

B. 49

C. 50

D. 1

本题考查知识点是循环队列。循环队列是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。经过一系列的入队操作和退队操作后,头指针(front=25)尾指针(rear=25)说明入队25次,退队25次,此时队列中有零个元素或队列满,此后又正常地插入了一个元素,说明队列满的情况是不可能的,所以此时队列中元素个数为1。所以本题答案为D。

11、C语言中,下列叙述正确的是_______。

A. 不能使用do-while语句构成的循环

B. do-while语句构成的循环,必须用break语句才能退出

C. do-while语句构成的循环,当while语句中的表达式值为非零时结束循环

D. do-while语句构成的循环,当while语句中的表达式值为零时结束循环

本题的考查点是do-while语句。选项A是错误的,C语言支持do-while语句; do-while构成的循环,当while语句中的表达式值为零时结束循环,而不是非零,故选项B、C都是错误的。故本题答案为D。

12、设有如下的程序段 char str[]="Hello"; char *ptr; ptr=str; 执行完上面的程序段后,*(ptr+5)的值为____。

A. 'o'

B. '\0'

C. 不确定的值

D. 'o'的地址

本题的考查点是字符数组的结束标志。 ptr=str实际上是将串str的首地址赋给了指针变量ptr,所以ptr+5将指向str串的第六个数组元素,即是串的隐含结束标志'\0',*(ptr+5)='\0',最后的结果为'\0'。故本题答案为B。

13、设有以下语句 char a=3,b=6, c; c=a^b<<2; 则c的二进制值是_______。

A. 00011011

B. 00010100

C. 00011100

D. 00011000

本题的考查点是位运算。 "<<"是C语言中规定的左移运算符,例如,a=a<<2,这个语句即是将a的二进制数左移两位,左移一位相当该数乘以2,移两位相当于该数乘以2的2次方;^是异或运算符,所以,c的二进制值应为00011011。故本题答案为A。

14、设有 static char str[]="Beijing" ; 则执行 printf ("%d \n",strlen(strcpy (str,"China"))) ; 后的输出结果为_____。

A. 5

B. 7

C. 12

D. 14

本题的考查点是求字符串的长度。在执行printf()函数前,数组str的长度是7,但是使用strcpy()函数将新的值赋给str后,strlen()函数返回的应当是现在的str字符串的字符个数,即是5。故本题答案为A。

15、下列语句中,符合C语言语法的赋值语句是_______。

A. a=7+b+c=a+7;

B. a=7+b++=a+7;

C. a=7+b, b++, a+7

D. a=7+b, c=a+7;

本题的考查点是赋值语句。选项A和B中,"7+b+c"和"7+b++"中是表达式,而赋值语句中赋值号的左边应为变量,所以不正确;选项C中由于没有";",所以不是语句,因为语句必需以分号结束故本题答案为D。

16、下面程序

main()

{

int y=9;

for(; y>0 ; y--)

{

if(y%3==0)

{

printf("%d",__-y);

continue ;

}

}

}

的输出是_____。

A. 741

B. 852

C. 963

D. 875421

本题的考查点是if判断语句。 "%"是求模运算符,所以if判断语句中实际是指出只有当y可以被3整除时方可以执行循环体;--y是先进行y的自减运算,再使用y值。所以,最后的打印结果应当为"852"。故本题答案为B。

17、下面程序

void prtv(int *x)

{

printf("%d\n",++*x);

}

main()

{

int a=25;

prtv(&a) ;

}

的输出是____。

A. 23

B. 24

C. 25

D. 26

本题的考查点是指针变量作为函数参数。观察程序,可以发现,函数prtv()的作用是将地址等于x的内存单元中值加1,因为我们在主函数中是将变量a的地址作为实参传递给了prtv()函数,所以,函数prtv()将地址等于变量a的地址的那个内存单元中的值加1,打印结果自然就是25+1=26了。故本题答案为D。

18、下面的程序片段

y=-1;

if (x!=0)

if(x>0)

y=1 ;

else

y=0;

所表示的数学函数关系是______。

A.①

B.②

C.③

D.④

19、下面的程序

main()

{

int x=3;

do

{

printf("%d\n", x-=2);

} while(! (--x));

} ____。

A. 输出的是1

B. 输出的是1和-2

C. 输出的是3和0

D. 是死循环

本题的考查点是do-while语句。在第一次循环时,先计算表达式x-=2,所以输出1,--x为0,判断表达式的值为非零,返回重新执行该语句;在第二次循环时,表达式x-=2,即-2,所以输出-2,--x为-3,判断表达式的值为零,循环结束。故本题答案为B。

20、下面的程序中____错误(每行程序前面的数字是行号)。

#include<stdio.h>

main()

{

float a[3]={0.0} ;

int i;

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

scanf("%d", a[i]);

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

a[0]=a[0]+a[i];

printf("%f\n",a[0]);

}

A. 没

B. 第4行

C. 第6行

D. 第8行

本题的考查点是函数scanf()的格式输入。根据函数scanf()的语法可知,在函数中的参数表列部分,应当是欲赋值变量的内存地址,像第六行这样,将数组元素直接放在参数表列中是无法达到给数组元素赋值的目的。故本题答案为C。

21、下面函数

int fun1 (char*x)

{

char *y=x ;

while(*y++);

return(y-x-1) ;

} 的功能是_______。

A. 求字符串的长度

B. 比较两个字符串的大小

C. 将字符串x复制到字符串y

D. 将字符串x连接到字符串y后面

本题的考查点是while()循环语句。这个函数的功能是求字符串的长度,需要注意的是,在返回长度时一定记住要减一,否则计算出的串长度将会多故本题答案是A。

22、以下程序的输出结果是_______。

#include <stdio.h>

#include <math. h>

main()

{

int a=1, b=4, c=2;

float x=10.5, y=4.0,z;

z=(a+b)/c+sqrt ((double)y)*1.2/c+x;

printf("%f\n",z);

}

A. 14.000000

B. 15.400000

C. 13.700000

D. 14.900000

本题的考查点是sqrt()函数的应用。函数sqrt(x)是一个标准的数学函数,用于求x的二次方根,知道这一点以后就好做了,将各变量的值带入程序求解即可,另外,程序中的(double)是强制类型转换,将原来为float型的y强制转换成double型变量。故本题答案为C。

23、以下程序的输出结果是____

#include <stdio.h>

main()

{

int a=2,c=5;

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

}

A. a=%2,b=%5

B. a=2, b=5

C.a=%%d,b=%%d

D. a=%d, b=%d

本题的考查点是格式控制字符的应用。 printf()函数:当"格式控制"字符串中连续使用两个"%"符号时,表示要输出字符"%",所以,a, c两个变量的值并不带入输出字符串,最后的打印结果应当是a=%d,b=%d。故本题答案为D。

24、以下程序的输出结果是_______。

#include<stdio.h>

main ()

{

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

}

A. 不确定的(因变量无定义)

B. 0

C. -1

D. 1

本题的考查点是对'NULL'的理解。 NULL在C编译器中是一个值为0的常量,它的定义在头文件"stdio.h"中,本题的程序在一开始就包含了这个头文件,所以,在打印的时候,将打印出0。故本题答案为B。

25、以下程序的输出结果是_______。

main()

{

int k=4, m=1, p;

p=func(k, m);

printf("%d,", p);

p=func (k,m);

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

}

func(int a,int b)

{

static int m=0,i=2;

i+=m+1 ;

m=i+a+b;

return(m);

}

A. 8,17

B. 8,16

C. 8, 20

D. 8,8

本题的考查点是函数的调用。将k和m的值带入函数func中,第一次调用完func()后,其中m和i的值要保留,并在第二次调用时使用,这是因为两者都是局部静态变量,最后的结果是8和17。故本题答案为A。

26、以下程序的输出结果为_

main()

{

char *alpha[6]={"ABCD","EFGH","IJKL","MNOP","QRST","UVWX"};

char **p ;

int i;

p=alpha;

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

printf("%s", p[i]);

printf("\n") ;

}

A. ABCDEFGHIJKL

B. ABCD

C. ABCDEFGHIJKLMNOP

D. AEIM

本题的考查点是指向指针的指针。指针数组*alpha[6]实际上相当于一个二维数组,而p是一个指向指针的指针,p=alpha后,引用p[x]便是引用数组*alpha[6]中的第x个数组元素的首地址,所以打印的结果应当为ABCDEFGHIJKLMNOP。故本题答案为C。

27、以下程序调用findmax函数求数组中值最大的元素在数组中的下标,请选择填空:

#include <stdio.h>

findmax(int *s,int t,int *k)

{

int p;

for(p=0,*k=p;p<t ;p++)

if(s[p]>s[*k])

____;

}

main()

{

int a[10],i,k;

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

scanf("%d",&a[i]);

findmax(a,10,&k);

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

}

A. k=p

B. *k=p-s

C. k=p-s

D. *k=p

本题的考查点是求数组中最大值的下标。 k是一个指针,它的值是一个地址,要通过它为主函数的变量改变数据,必须使用*p,这样就可以把一个下标数赋给p指针指向的那个内存单元,所以横线处应填入k=p。故本题答案为D。

28、以下的for循环: for (x=0, y=0 ; (y!=123)&&(x<4) ; x++);

A. 是无限循环

B. 循环次数不定

C. 执行4次

D. 执行3次

本题的考查点是for语句循环条件的判断。循环条件是表达式(y !=123)d&(x(4),因为y值始终为0,所以表达式左边一定恒为1,当x<4时,循环可以运行,当x=4时,循环终止,所以这个循环一共可以执行4次。故本题答案为C。

28、以下的for循环: for (x=0, y=0 ; (y!=123)&&(x<4) ; x++);

A. 是无限循环

B. 循环次数不定

C. 执行4次

D. 执行3次

本题的考查点是for语句循环条件的判断。循环条件是表达式(y !=123)d&(x(4),因为y值始终为0,所以表达式左边一定恒为1,当x<4时,循环可以运行,当x=4时,循环终止,所以这个循环一共可以执行4次。故本题答案为C。

29、若有说明: int i, j=7,*p=&i;则与i=j;等价的语句是_______。

A. i=*p ;

B. *p=*&j;

C. i=&j;

D. i=**p ;

本题的考查点是指针变量的引用。 p的地址本身和i的地址一样,所以p代表i中的数值,而&j是j的地址, *&j就是j中的数值,所以,*p=&j和i=j是等价的。故本题答案为B。

30、若有以下说明: int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则值为6的表达式是______。

A. *p+6

B. *(p+6)

C. *p+=5

D. p+5

本题的考查点是通过指针引用数组元素。选项A,*p+6,其值等于1+6=7; 选项B,*(p+6),其值等于a[6]=7; 选项C,冷p+=5,其值等于*p=*p+5=1+5=6; 选项D,p+5是个地址值。故本题答案为C。

31、下面程序的输出是_____________

main ()

{

int k=11;

printf("k=%d, k=%o,k=%x \n",k,k,k);

}

A. k=11,k=12,k=11

B. k=11,k=13,k=13

C. k=11,k=013,k=0xb

D. k=11,k=13,k=b

本题的考查点是格式字符。在C语言格式字符的输出中,"%d"是以带符号的十进制形式输出整数,即k=11;"%o"是以8进制无符号形式输出整数(不输出前导符0),即k=13;"%x"是以16进制无符号形式输出整数(不输出前导符0x),即k=b。故本题答案为D。

32、下面程序的输出是______。

main()

{

int t=1;

fun(fun(t)) ;

}

fun(int h)

{

static int a[3]={1,2,3} ;

int k;

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

a[k]+=a[k]-h;

for (k=O ;k<3;k++)

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

printf("\n") ;

return(a[h]);

}

A. 1,3,5, 1,5,9,

B. 1,3,5, 1,3,5,

C. 1,3,5 0,4,8

D. 1,3,5 -1,3,7

本题的考查点是函数的反复调用。在子函数fun()中,第一次执行使得a数组的3个元素的值都翻倍后减一,即为1,3,5,此时h的值为1,a[h]即a[1]的值3,返回作为fun()第二次执行的实参,函数第二次的执行使得各个数组元素的值分别变为-1,3,7。故本题答案为D。

33、以下程序的输出结果是_______。

#include <string.h>

main()

{

char *a="abcdefghi" ;

int k;

fun(a) ;

puts(a) ;

}

fun (char *s)

{

int x, y ;

char c;

for(x=0, y=strlen(s)-1 ; x<y ;x++,y--)

{

c=s[y] ;

s[y]=s[x] ;

s[x]=c;

}

}

A. ihgfedcba

B. abcdefghi

C. abcdedcba

D. ihgfefghi

本题的考查点是字符串的应用。观察子函数fun()可知,它是实现一个数组首末元素位置互相依次交换。联系主函数,可以看出,是对字符串中的元素依次进行首末位置的对调。故本题答案为A。

34、以下程序的输出结果是_______。

main()

{

int n[3][3],i,j;

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

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

n[i][j]=i+j;

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

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

n[i+1][j+1]+=n[i][j];

printf("%d\n" , n[i][j]);

}

A. 14

B. 0

C. 6

D. 值不确定

本题的考查点是二维数组的运算。观察程序段可知,第一个for循环语句是给数组中的各元素赋值,第二个for循环语句是给数组中的元素进行重新赋值,得到数组中的最大元素值为6。故本题答案为C。

35、以下程序的输出结果是_______。

main()

{

union

{

char i[2];

int k ;

} r;

r.i[0]=2;

r.i[1]=0;

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

}

A. 2

B. 1

C. 0

D. 不确定

本题的考查点是共用体类型数据的特点。根据共用体的定义可知:共用体r的成员k和成员i[2]是共用同一段内存空间,所以,当程序给r.i[0]赋值后,实际上,共用体成员k的值也确定了,为2。所以打印输出的结果应当为2。故本题答案为A。

36、设有以下定义和语句,则输出的结果是_______。(用small模式编译,指针变量占2个字节)

struct date

{

long*cat;

struct date*next ;

double dog;

}too ;

printf("%d", sizeof(too)) ;

A. 20

B. 16

C. 14

D. 12

本题的考查点是计算结构体的长度。结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。double占8个字节,指针变量占2个字节,2+2+8=12,所以,输出结果是12。故本题答案为D。

37、以下程序的输出结果是_______。

#define f(x) x*x

main()

{

int a=6, b=2, c;

c=f(a)/f(b) ;

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

}

A. 9

B. 6

C. 36

D. 18

本题的考查点是带参数的宏定义。观察程序段可知,对带参数的宏的展开只是将语句中的宏名后面括号内的实参字符串代替#define命令行中的形参。本题中c=f(a)/f(b)用#define f(x)x*x代替得c=f(6)/f(2),即c=6*6/2*2,结果为36。故本题答案为C。

38、以下程序的输出结果是_______。

main()

{

char *s="12134211";

int v[4]={0,0,0,0} ,k, i ;

for (k=0 ; s[k] ;k++)

{

switch(s[k])

{

case '1' :

i=0;

case '2' :

i=1;

case '3' :

i=2;

case '4':

i=3;

}

v[i]++;

}

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

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

}

A. 4 2 1 1

B. 0 0 0 8

C. 4 6 7 8

D. 8 8 8 8

本题的考查点是switch语句的应用。在每次执行switch后面括号内的表达式s[k]时,要先取当前s[k的值与case后的字符常量进行比较,找到与之匹配的分支后,即转去执行该分支中的语句。switch语句中,某分支执行完毕,若未遇到break语句,则接着执行剩余的其它分支,直到遇到break语句。此题中,因为没有break语句,所以总会执行到i=3,即总是v[3]在递加。故本题答案为B。

39、有如下程序

main()

{

int n = 9;

while(n>6)

{

n--;

printf("%d", n);

}

}

该程序的输出结果是______。

A. 987

B. 876

C. 8765

D. 9876

本题考查点是while语句循环次数的问题。符合n>6的n只有7,8,9,所以循环次数为3。选项C、D可以排除。又因n在输出之前要执行n--,所以输出结果只能是876。本题答案为B。

40、以下对结构体类型变量的定义中,不正确的是______。

①typedef struct aa { int n; float m; }AA; AA td1;

②#define AAstruct aa AA{ int n; float m; } td1;

③struct { int n; float m; } aa; struct aa td1;

④struct { int n; float m; }td1;

A. ①

B. ②

C. ③

D. ④

本题的考查点是结构体类型变量的定义。在选项C中,aa是一个结构体变量,而不是结构体名,所以struct aa td1;是非法的。本题答案为C。

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/586349
推荐阅读
相关标签
  

闽ICP备14008679号