计算机二级C语言笔试试题及解析Word文件下载.docx

上传人:b****6 文档编号:19328390 上传时间:2023-01-05 格式:DOCX 页数:17 大小:30.50KB
下载 相关 举报
计算机二级C语言笔试试题及解析Word文件下载.docx_第1页
第1页 / 共17页
计算机二级C语言笔试试题及解析Word文件下载.docx_第2页
第2页 / 共17页
计算机二级C语言笔试试题及解析Word文件下载.docx_第3页
第3页 / 共17页
计算机二级C语言笔试试题及解析Word文件下载.docx_第4页
第4页 / 共17页
计算机二级C语言笔试试题及解析Word文件下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

计算机二级C语言笔试试题及解析Word文件下载.docx

《计算机二级C语言笔试试题及解析Word文件下载.docx》由会员分享,可在线阅读,更多相关《计算机二级C语言笔试试题及解析Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。

计算机二级C语言笔试试题及解析Word文件下载.docx

A)选择B)投影C)插入D)连接

选择运算时从关系中找出满足给定条件的那些元素组,投影运算是从关系模型中挑选若干属性组成新的关系,连接运算时二目运算符,需要两个关系作为操作对象。

10.将E-R图转换为关系模式时,实体和联系都可以表示为(C)

A)属性B)键C)关系D)域

见书P108页原话。

11.一下选项中合法的标识符是(C)

A)1_1B)1-1C)_11D)1__

标识符是由字母、数字和下划线组成,只能由字母或下划线开头。

12.若函数中有定义语句:

intk;

则(B)

A)系统将自动给k赋初值0

B)这是k中的值无定义

C)系统将自动给k赋初值-1

D)这时k中无任何值

只开辟了储存单元,但是储存单元里没有放任何值。

13.如下选项中,能用作数据常量的是(D)

A)o115B)0118C)1.5e1.5D)115L

整型常量和实型常量统称为数值型常量。

A答案前面为字母o,B答案是八进制数但最后一位为8,最大只能为7。

C答案为指数形式,但是e后的数字必须是整数。

14.设有定义:

intx=2;

一下表达式中,值不为6的是(D)

A)x*=x+1B)X++,2*xC)x*=(1+x)D)2*x,x+=2

2*x后面有个逗号并没给x赋值,x+=2运算后x的值是4

15.程序段:

intx=12;

doubley=3.141593;

printf("

%d%8.6f"

x,y);

的输出结果是(A)

A)123.141593B)123.141593C)12,3.141593D)123.1415930

B答案12后不该有空格,C答案的12后多了个逗号,D答案的小数点后有7位数了,要求只输出六位小数。

16.若有定义语句:

doublex,y,*px,*py;

执行了px=&

x;

py=&

y;

之后,正确的输入语句是(C)

A)scanf("

%f%f"

B)scanf("

&

x,&

y);

C)scanf("

%lf%le"

px,py);

D)scanf("

%lf%lf"

只有C答案是真确的输入形式。

AB答案的%f都应该为%lf,D答案的xy前面都应加上&

符号。

17.如下是if语句的基本形式:

if(表达式) 语句

其中"

表达式"

(D)

A)必须是逻辑表达式B)必须是关系表达式

C)必须是逻辑表达式或关系表达式D)可以是任意合法的表达式

可以使任意合法表达式,如果表达式结果为0则为假,为其他值则为真。

18.有以下程序

#include <

stdio.h>

main()

{ int x;

  scanf("

%d"

&

x);

  if(x<

=3) ;

 else

  if(x!

=10) printf("

%d\n"

x);

}

程序运行时,输入的值在哪个范围才会有输出结果(B)

A)不等于10的整数B)大于3且不等于10的整数

C)大于3或等于10的整数D)小于3的整数

19.有以下程序

{ int a=1,b=2,c=3,d=0;

  if (a==1 &

&

 b++==2)

 if (b!

=2||c--!

=3)

     printf("

%d,%d,%d\n"

a,b,c);

  else printf("

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

A)1,2,3B)1,3,2C)1,3,3D)3,2,1

20.如下程序段中的变量已正确定义

for(i=0;

i<

4;

i++,j++)

   for(k=1;

k<

3;

k++);

 printf("

*"

);

程序段的输出结果是(D)

A)********B)****C)**D)*

第二个for循环后面没有循环体,什么也不输出,最后输出的就是最后一个语句的一个*号

21.有以下程序

{ char *s={"

ABC"

};

  do

  { printf("

*s);

s++;

  }

  while (*s);

注意:

字母A的ASCII码值为65。

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

A)5670B)656667C)567D)ABC

do-while循环为“直到型循环”先执行后判断。

程序执行3次后指针指向了\0,与10求余之后为0,就结束了循环。

所以得到567三个值

22.设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是(D)

A)n=0;

while((ch=getchar())!

='

\n'

)n++;

B)n=0;

while(getchar()!

C)for(n=0;

getchar()!

;

n++);

D)n=0;

for(ch=getchar();

ch!

D选项中ch=getchar()是给变量ch赋初值,如果输入回车,则程序就循环一次,如果输入一个非回车字符,则程序进入死循环。

因此D选项不能统计处想要的结果。

23.有以下程序

{ int a1,a2;

 char c1,c2;

%d%c%d%c"

a1,&

c1,&

a2,&

c2);

  printf("

%d,%c,%d,%c"

a1,c1,a2,c2);

若通过键盘输入,使得a1的值为12,a2的值为34,c1的值为字符a,c2的值为字符b,

程序输出结果是:

12,a,34,b则正确的输入格式是(以下_代表空格,<

CR>

代表回车)(A)

A)12a34b<

B)12_a_34_b<

C)12,a,34,b<

D)12_a34_b<

在进行scanf输入时,输入的格式必须和格式控制区域内(“”内)的格式一致,空格在此也要充当一个有效的字符,所以不能用空格键充当输入时的各个字符的分隔键。

依次顺序输入即可。

所以A为正确答案。

24.有以下程序

int f(int x,int y)

{ return ((y-x)*x);

{ int a=3,b=4,c=5,d;

  d=f(f(a,b),f(a,c));

d);

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

A)10B)9C)8D)7

先把a,b,c,的值带入到f(a,b),f(a,c)中,算得f(a,b)=3,f(a,c)=6.再计算f(3,6),算得d=9

25.有以下程序

void fun(char *s)

{ while(*s)

  { if (*s%2==0) printf("

%c"

    s++;

{ char a[]={"

good"

  fun(a);

\n"

字母a的ASCII码值为97,程序运行后的输出结果是(A)

A)dB)goC)godD)good

fun函数的功能是输出ASCII码中能被2整除的字符,g的ASCII码为103,o的ASCII码为111,d的ASCII码为100,只有d满足。

因此本答案为A

26.有以下程序

void fun(int *a,int *b)

{ int *c;

  c=a;

a=b;

b=c;

{ int x=3,y=5,*p=&

x,*q=&

  fun(p,q);

%d,%d,"

*p,*q);

 fun(&

%d,%d\n"

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

A)3,5,5,3B)3,5,3,5C)5,3,3,5D)5,3,5,3

fun函数的功能是交换形式参数的值,即交换指针变量a和b的值,但是fun函数并不能够交换实参的值,因此fun(p,q)不能交换p和q的值,所以第一个printf语句的输出为3,5。

第二个fun函数对x和y的地址进行了操作,同样不能交换x和y的值,并不能影响p和q指针指向的数据,因此第二个printf语句的输出也是3,5。

27.有以下程序

void f(int *p,int *q);

{ int m=1,n=2,*r=&

m;

  f(r,&

n);

%d,%d"

m,n);

void f(int *p,int *q)

{p=p+1;

*q=*q+1;

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

A)1,3B)2,3C)1,4D)1,2

在f(int*p,int*q)函数中,执行p=p+1是将p所对应的地址加1,而*q=*q+1是将q所指向的n的地址所对应的值加1,所以m的得知所对应的值没有变,而n的值则为3了。

28.以下函数按每行8个输出数组中的数据

void fun(int *w,int n)

{  int i;

   for(i=0;

n;

i++)

   { ____________

%d "

w[i]);

   }

   printf("

下划线出应填入的语句是(C)

A)if(i/8==0)printf("

B)if(i/8==0)continue;

C)if(i%8==0)printf("

D)if(i%8==0)continue;

在C语言循环语句中的continue用来跳出当次循环而进行下一次循环,因此B,D都不对。

if(i/8==0)是指当i除以8的得数0,即i的值小于8时,打印换行,因此A不正确。

if(i%8==0)

是指当i除以8的余数为0,即间隔8个数就打印换行,因此选项C正确。

29.若有以下定义

intx[10],*pt=x;

则对数组元素的正确引用是(B)

A)*&

x[10]B)*(x+3)C)*(pt+10)D)pt+3

*与&

放在一起作用抵消,所以A选项错误,最大只能引用到x[9],*(pt+i)表示引用指针pt所指元素后的第i个元素。

所以C答案错误,最大只能为*(pt+9),没有D答案的引用形式,所以只有B答案正确。

30.设有定义:

chars[81];

inti=0;

以下不能将一行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是(C)

A)gets(s);

B)while((s[i++]=getchar())!

s[i]='

\0'

%s"

s);

D)do{scanf("

s[i]);

}while(s[i++]!

以%s的形式输入时,遇到空格计算机就认为停止了输入,后面的字符就算无效字符,所以C答案不能达到题目要求的目的。

31.有以下程序

{ char *a[]={"

abcd"

"

ef"

gh"

ijk"

int i;

  for(i=0;

i++) printf("

*a[i]);

A)aegiB)dfhkC)dfhkD)abcdefghijk

a为一个指针数组,其中的每一个元素都是一个指针。

程序的功能是分别打印4个字符的首字母。

因此A为真确答案。

32.以下选项中正确的语句组是(D)

A)chars[];

s="

BOOK!

"

B)char*s;

s={"

C)chars[10];

D)char*s;

A与C答案错误情况相同,应该在定义的时候直接付初值chars[]="

chars[10]="

,B不加{}就可以了。

33.有以下程序

int fun(int x,int y)

{ if(x==y) return (x);

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

{ int a=4,b=5,c=6;

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

A)3B)6C)8D)12

fun函数的功能是求两个整数的平均值,返回值认为整数。

34.设函数中有整型变量n,为保证其在未赋初值的情况下初值为0,应该选择的存储类别是(C)

A)autoB)registerC)staticD)auto或register

static(静态局部变量);

如果定义静态局部变量时不赋值,则编译时自动赋初值为0(对数据型变量)或空字符(对字符变量)。

35.有以下程序

int b=2;

int fun(int *k)

{ b=*k+b;

return (b);

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

for(i=2;

i++) {b=fun(&

a[i])+b;

b);

A)1012B)810C)1028D)1016

b为全局变量,在第一次执行for循环后b的值变为10并输出。

第二次执行for循环后b的值变为28。

因此选择C答案。

36.有以下程序

#define PT 3.5 ;

#define S(x) PT*x*x ;

{ int a=1,b=2 ;

%4.1f\n"

S(a+b));

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

A)14.0B)31.5C)7.5D)程序有错无输出结果

本题目考查宏定义的用法,进行宏定义时语句不能用分号结束,否则会出现误。

37.有以下程序

struct ord

{ int x,y;

 } dt[2]={1,2,3,4};

{ struct ord *p=dt;

%d,"

++p->

程序的运行结果是(B)

A)1,2B)2,3C)3,4D)4,1

p->

x初始时为1,因为“->

”的优先级大于“++”,所以先计算p->

x的值加1等于2并输出,在计算p->

y的值加1等于3并输出。

因此答案选择B

38.设有宏定义:

#defineIsDIV(k,n)((k%n==1)?

1:

0)且变量m已正确定义并赋值,

  则宏调用:

IsDIV(m,5)&

IsDIV(m,7)为真时所要表达的是(D)

A)判断m是否能被5或者7整除B)判断m是否能被5和7整除

C)判断m被5或者7整除是否余1D)判断m被5和7整除是否都余1

(k%n==1)?

0是C语言中唯一的三目运算符,表示k%n==1成立时整体表达式结果为1,否则为0。

为逻辑与符号,它的运算规则为符号两边同真则整体表达式为真。

所以只D答案为正确选项。

39.有以下程序

{ int a=5,b=1,t;

  t=(a<

<

2)|b;

t);

A)21B)11C)6D)1

40.有以下程序

{ FILE *f;

  f=fopen("

filea.txt"

w"

  fprintf(f,"

abc"

  fclose(f);

若文本文件filea.txt中原有内容为:

hello,则运行以上程序后,文件filea.txt的内容为(C)

A)helloabcB)abcloC)abcD)abchello

二、填空题(每空2分,共计30分)

1.假设用一个长度为50的数组(数组元素的下标从0到49)作为栈的存储空间,栈底指针bottom指向栈底元素,栈顶指针top指向栈顶元素,如果bottom=49,top=30(数组下标),则栈中具有【20】个元素。

栈中的元素都是依次挨个储存的,所以栈里的元素个数为49-30+1=20

2.软件测试可分为白盒测试和黑盒测试。

基本路径测试属于【白盒】测试。

3.符合结构化原则的三种基本控制结构是:

选择结构、循环结构和【顺序结构】。

4.数据库系统的核心是【数据库管理系统】。

5.在E-R图中,图形包括矩形框、菱形框、椭圆框。

其中表示实体联系的是【菱形】框。

各个图形的作用见教材

6.表达式(int)((double)(5/2)+2.5)的值是【4】。

7.若变量x,y已定义为int类型且x的值为99,y的值为9,请将输出语句printf(【x/y=%d】,x/y);

补充完整,使其输出的计算结果形式为:

x/y=11。

8.有以下程序

{ char c1,c2;

c1);

  while(c1<

65||c1>

90) scanf("

  c2=c1+32;

%c,%c\n"

c1,c2);

程序运行输入65回车后,能否输出结果,结束运行(请回答能或不能)

【不能】

9.一下程序运行后的输出结果是【s=0】

{ int k=1,s=0;

  do{

     if((k%2)!

=0) continue;

 s+=k;

k++;

  }while(k>

10);

s=%d\n"

10.下列程序运行时,若输入labcedf2df<

回车>

输出结果为【1AbCeDf2dF】

{ char a=0,ch;

  while((ch=getch())!

  { if(a%2!

=0&

(ch>

a'

ch<

z'

)) ch=ch-'

+'

A'

    a++;

 putchar(ch);

11.有以下程序,程序执行后,输出结果是【7777654321】

void fun(int *a)

{ a[0]=a[1];

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

  for(i=2;

i>

=0;

i--) fun(&

a[i]);

10;

a[i]);

12.请将以下程序中的函数声明语句补充完整。

int 【max(intx,inty)或max(int,int)】;

{ int x,y,(*p)();

%d%d"

  p=max;

(*p)(x,y));

int max(int a,int b)

{ return (a>

b?

a:

b);

13.以下程序用来判断指定文件是否能正常打开,请填空。

int max(int a,int b);

{ FILE *fp;

  if(((fp=fopen())==【NULL】))

未能打开文件!

  else

文件打开成功!

14.下列程序的运行结果为【1001,ChangRong,1098.0】

#in

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

当前位置:首页 > IT计算机 > 计算机软件及应用

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

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