考试真题网,考试人的精神家园。

广告服务|设为主页 |加入收藏

当前位置:首页>计算机类>计算机二级C语言真题

2010  年 9  月全国计算机等级考试二级笔试试卷

C  语言程序设计(附答案)

(考试时间 90  分钟,满分 100  分)

 

 一、选择题(( 1 ) — ( 10 )、( 21 ) — ( 40 )每题 2  分,( 11 ) — ( 20 )每题 1  分,共 70  分) 

下列各题 A )、 B )、 C )、 D )四个选项中,只有一个选项是正确的,请将正确的选项填涂在答题卡相应位置上,答在试卷上不得分。 

( 1 )下列叙述中正确的是

A )线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的 

B )线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构 

C )线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构 

D )上述三种说法都不对 

( 2 )下列叙述中正确的是 

A )在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化  B )在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化  C )在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化  D )上述三种说法都不对 

( 3 )软件测试的目的是 

A )评估软件可靠性 

B )发现并改正程序中的错误 

C )改正程序中的错误 

D )发现程序中的错误 

( 4 )下面描述中,不属于软件危机表现的是 

A )软件过程不规范  B )软件开发生产率低  C )软件质量难以控制  C )软件成本不断提高 

( 5 )软件生命周期是指

A )软件产品从提出、实现、使用维护到停止使用退役的过程 

B )软件从需求分析、设计、实现到测试完成的过程 

C )软件的开发过程 

D )软件的运行维护过程

( 6 )面向对象方法中,继承是指

A )一组对象所具有的相似性质 

B )一个对象具有另一个对象的性质 

C )各对象之间的共同性质 

D )类之间共享属性和操作的机制 

( 7 )层次型、网状型和关系型数据库划分原则是 

A )记录长度  B )文件的大小  B )联系的复杂程度  D )数据之间的联系方式 

( 8 )一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员 与实体计算机之间的联系是 

A )一对一  B )一对多  C )多对多  D )多对一 

( 9 )数据库设计中反映用户对数据要求的模式是 

A )内模式  B )概念模式  C )外模式  D )设计模式 

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

 

R                               S                           T

 

 

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

A )自然连接  B )交  C )投影  D )并 

( 11 )以下关于结构化程序设计的叙述中正确的是

A )一个结构化程序必须同时由顺序、分支、循环三种结构组成 

B )结构化程序使用 goto  语句会很便捷 

C )在 C  语言中,程序的模块化是利用函数实现的 

D )由三种基本结构构成的程序只能解决小规模的问题 

( 12 )以下关于简单程序设计的步骤和顺序的说法中正确的是 

A )确定算法后,整理并写出文档,最后进行编码和上机调试 

B )首先确定数据结构,然后确定算法,再编码,并上机调试,最后整理文档 

C )先编码和上机调试,在编码过程中确定算法和数据结构,最后整理文档 

D )先写好文档,再根据文档进行编码和上机调试,最后确定算法和数据结构 

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

A ) C  程序在运行过程中所有计算都以二进制方式进行 

B ) C  程序在运行过程中所有计算都以十进制方式进行 

C )所有 C  程序都需要编译链接无误后才能进行 

D ) C  程序中整型变量只能存放整数,实型变量只能存放浮点数 

( 14 )有以下定义:

int a;

lo ng b;

double x,y; 

则以下选项中正确的表达式是 

A ) a%(int)(x-y) B ) a=x!=y; C ) (a*y)%b D ) y=x+y=x 

( 15 )以下选项中能表示合法常量的是

 A )整数: 1,200 B )实数: 1.5E2.0 C) 字符斜杠: ‟ \ ‟  D) 字符串: ”\007” 

( 16 )表达式 a+=a-=a=9  的值是

 A ) 9 B ) -9 C ) 18 D ) 0 

( 17 )若变量已正确定义,在 if(W)printf(“%d\n”,k); 中,以下不可替代 W 的是 

A ) a<>b+c B ) ch=getchar() C ) a==b+c D ) a++ 

(18) 有以下程序 

#include 

main()

{ int a=1,b=0;

 if(!a) b++;

 else if(a==0)

 if(a) b+=2; 

else b+=3;

 printf(“%d\n”,b);

 } 

程序运行后的输出结果是 

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

( 19 )若有定义语句

int a,b; 

double x; 

则下列选项中没有错误的是 

A )  switch (x%2)

 { case 0: a++; break;

case 1: b++; break; 

default: a++; b++; }

B) switch ((int)x/2.0) 

{ case 0: a++; break;

 case 1: b++; break; 

default : a++; b++; } 

C ) switch((int)x%2)

{ case 0: a++; break;

case 1: b++; break;

 default : a++; b++; }

D)switch((int)(x)%2) 

{ case 0.0: a++; break;

 case 1.0: b++; break; 

default : a++; b++; }

(20) 有以下程序

 #include 

main() 

{    int a=1,b=2;

 while(a<6) {b+=a; a+=2;b%=10;}

printf(“%d, %d\n”,a,b); 

程序运行后的输出结果是 

A ) 5,11 B)7,1 C)7,11 D)6,1

 (21) 有以下程序 

#include 

main() 

{ int y=10; 

while(y--);

printf(“y=%d\n”,y); 

程序执行后的输出结果是   

A )  y=0 B)y=-1 C)y=1 D)while  构成无限循环 

( 22 )有以下程序 

#include 

main() 

{ char s[ ]=”rstuv”; 

printf(“%c\n”,*s+2);

 }

 程序运行后的输出结果是 

A ) tuv B)  字符 t  的 ASCII  值  C ) t D) 出错 

( 23 )有以下程序

 #include  <stdio.h>

 #include  <string.h>

main() 

{ char x[ ]=”STRING”; 

x[0]=0; x[1]= ‟ \0 ‟ ; x[2]= ‟ 0 ‟ ; 

printf(“%d  %d\n”,sizeof(x),strlen(x)); 

}

程序运行后的输出结果是 

A) 6 1 B) 7 0 C) 6 3 D) 7 1

(24) 有以下程序 

#include 

int f(int x);

main() 

{ int n=1,m; 

m=f(f(f(n))); 

printf(“%d\n”,m); 

}

 int f(int x)

 { return x*2; }

程序运行后的输出结果是 

A ) 1 B ) 2 C ) 4 D ) 8 

( 25 )以下程序段完全正确的是 

A ) int *p; scanf(“%d”,&p); 

B) int *p; scanf(“%d”,p); 

C) int k, *p=&k; scanf(“%d”,p); 

D) int k,*p; *p=&k; scanf(“%d”,p); 

(26) 有定义语句: int *p[4]; 

以下选项中与此语句等价的是 

A ) int p[4]; B)int **p; C)int *(p[4]); D)int (*p)[4];

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

 A) int N=10; B) #define N 10 int x[N]; int x[N]; C) int x[0..10]; D) int x[ ]; 

(28) 若要定义一个具有 5  个元素的整型数组,以下错误的定义语句是 

A)int a[5]={0}; B) int b[ ]={0,0,0,0,0}; C)int c[2+3]; D) int i=5,d[i]; 

(29) 有以下程序 

#include 

void f(int *p);

main() 

{ int a[5]={1,2,3,4,5},*r=a; 

f(r );

printf(“%d\n”,*r); } 

void f(int *p) 

{ p=p+3;

 printf(“%d,”,*p);

}

 程序运行后的输出结果是 

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

( 30 )有以下程序(函数 fun  只对下标为偶数的元素进行操作) 

#include 

void fun(int *a,int n) 

{ int i,j,k,t; 

for(i=0;i <n-1;i+=2)

{k= i ;

  for (j= i;j<n;j+=2 )  if(a[j]> a[k]) k=j; 

t=a[i]; a[i]=a[k]; a[k]=t; }

main() 

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

 fun(aa,7); 

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

printf(“%d,”,aa[i]); 

printf(“\n”); 

程序运行后输出结果是 

A ) 7,2,5,4,3,6,1 ,  B ) 1,6,3,4,5,2,7 ,  C ) 7,6,5,4,3,2,1 ,  D ) 1,7,3,5,6,2,1 , 

( 31 ) 下列选项中,能够满足 “ 若字符串 s1  等于字符串 s2,  则执行 ST” 要求的是

A ) if(strcmp(s2,s1) ==0) ST;

B) if(s1==s2) ST; 

C) if(strcpy(s1,s2) ==1) ST; 

D) if(s1-s2==0) ST; 

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

A)while(*t=*s){t++,s++;} 

B)for(i=0;t[i]=s[i];i++); 

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

D)for(i=0,j=0;t[i++]=s[j++]; ); 

(33) 有以下程序( strcat  函数用以连接两个字符串) 

#include  <stdio.h>  

#include  <string.h> 

main() 

{ char a[20]=”ABCD\0EFG\0”, b[ ]=”IJK”; 

strcat(a,b); 

printf(“%s\n”,a);

 } 

程序运行后的输出结果是 

A ) ABCDE\OFG\OIJK B)ABCDIJK C)IJK D)EFGIJK 

(34) 有以下程序,程序中库函数 islower(ch) 用以判断 ch  中的字母是否为小写字母 

#include  <stdio.h>

#include  <ctype.h>

void fun(char *p) 

{ int i=0; 

while(p[i])

 { if(p[i] == ‟  „ &&islower(p[i-1])) p[i-1]=p[i-1]- ‟ a ‟ + ‟ A ‟ ; 

i++; 

main() 

{ char  s1[100]=”ab cd EFG !”; 

fun(s1); 

printf(“%s\n”,s1);

 } 

程序运行后的结果是 

A) ab cd EFG ! B) Ab Cd EFg ! C) aB cD EFG ! D) ab cd EFg ! 

(35) 有以下程序 

#include 

void fun(int x) 

{ if(x/2>1) 

fun(x/2); 

printf(“%d ”,x); 

main() 

{ fun(7); 

printf(“\n”);

程序运行后的输出结果是 

A )  1 3 7 B ) 7 3 1 C )  7 3 D ) 3 7 

( 36 )有以下程序 

#include 

int fun() 

{ static int x=1; 

x+=1; 

return x;

 }

 main() 

{ int i, s=1;

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

s+=fun(); 

printf(“%d\n”,s); 

程序运行后的输出结果是 

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

( 37 )有以下程序 ` 

#include  <stdio.h>

#include  <stdlib.h>

main()

{ int *a,*b,*c; 

a=b=c=(int *)malloc(sizeof(int)); 

*a=1;*b=2;*c=3; 

a=b; 

printf(“%d,%d,%d\n”,*a,*b,*c);

 } 

程序运行后的输出结果是 

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

 

( 38 )有以下程序 

#include 

main() 

{ int s,t,A=10; 
double B=6; 

s=sizeof(A); 

t=sizeof(B); 

printf(“%d,%d\n”,s,t);

 } 

在 VC6  平台上编绎运行,程序运行后输出结果是 

A ) 2,4 B ) 1,4 C ) 4,8 D ) 10,6 

 

( 39 )若有以下语句 

typedef struct S 

{int g ; char h;} T; 

以下叙述中正确的是 

A )可用 S  定义结构体变量  B )可用 T  定义结构体变量  C ) S  是 struct  类型的变量  D ) T  是 struct S  类型的变量 

 

( 40 )有以下程序 

#include 

main() 

{ short c=124; c=c ;

 printf(“%d\n”,c); 

}

 若要使程序的运行结果为 248 ,应在下划线处填入的是 

A ) >>2 B) |248 C)& 0248 D) <<1 

 

 

 

二、填空题(每空 2  分,共 30  分) 请将每空的正确答案写在答题卡【 1 】至【 15 】序号的横线上,答在试卷上不得分。

 (1)  一个栈的初始状态为空。首先将元素 5,4,3,2,1  依次入栈,然后退栈一次 , 再将元素  A,B,C,D  依次入栈,之后将所有元素全部退栈,则所有元素退栈(包括中间退栈的元素)的顺序为 【 1 】 。 

( 2 )在长度为 n  的线性表中,寻找最大项至少需要比较 【 2 】 次。 

( 3 )一棵二叉树有 10  个度为 1  的结点, 7  个度为 2  的结点,则该二叉树共有 【 3 】 个结点。 

( 4 )仅由顺序、选择(分支)和重复(循环)结构构成的程序是 【 4 】 程序。 

( 5 )数据库设计的四个阶段是:需求分析,概念设计,逻辑设计和 【 5 】 。 

( 6 )以下程序运行后输出结果是 【 6 】 。 

#include main() 

{ int a=200, b=010; 

printf(“%d%d\n”,a,b);

 } 

(7) 有以下程序 

#include 

main() 

{ int x,y; 

scanf(“%2d%ld”,&x,&y);

 printf(“%d\n”,x+y);

 } 

程序运行时输入: 1234567 ,程序的运行结果是 【 7 】 。 

(8) 在 C  语言中,当表达式值为 0  时表示逻辑值 “ 假 ” ,当表达式为 【 8 】 时表示逻辑值 “ 真 ” 。  (9)  有以下程序 

#include 

main() 

{ int i,n[ ]={0,0,0,0,0}; 

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

{n[i]=n[i-1]*3+1;

 printf(“%d”,n[i]); 

}

程序运行后输出结果是 【 9 】 。 

(10) 以下 fun  函数的功能是:找出具有 N  个元素的一维数组中的最小值,并作为 函数值返回,请填空。(设 N  已定义) 

int fun(int x[N])

{ int i,k=0; 

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

if (x[i]<x[k]) k= 【 10 】 ;

return x[k];

}

(11) 有以下程序

#include <stdio.h>  

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

main() 

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

 r=f(r,&n); printf(“%d\n”,*r);

 }

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

 { return (*p>*q)?p:q;} 

程序运行后的输出结果是 【 11 】 。 

(12)  以下  fun  函数的功能是在  N  行  M  列的整型二维数组中,选出一个最大值作 为函数值返回,请填空。(设 M , N  已定义) 

int fun(int a[N][M]) 

{ int i,j,row=0,col=0; 

for(i=0;ia[row][col]) 

{row=i;col=j;

return (  【 12 】  ) ; 

}

 (13) 有以下程序 

#include 

main() 

{ int n[2],i,j; 

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

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

for(j=0;j<2;j++) n[j]=n[i]+1;

printf(“%d\n”,n[1]); 

}

程序运行后的输出结果是 【 13 】 。 

(14) 以下程序的功能是:借助指针变量找出数组元素中最大值所在的位置并输出该最大值。请在输出语句中填写代表最大值的输出项。 

#include 

main() 

{ int a[10], *p, *s; 

for(p=a;p-a<10; p++) 

scanf(“%d”,p); 

for(p=a,s=a;p-a<10;p++) 

if(*p>*s) s=p; 

printf(“max=%d\n” ,  【 14 】  ); 

(15) 以下程序打开新文件 f.txt, 并调用字符输出函数将 a  数组中的字符写入其中,请填空。  #include 

main() 

{  【 15 】  *fp;

 char a[5]={„1 ‟ , ‟ 2 ‟ , ‟ 3 ‟ , ‟ 4 ‟ , ‟ 5 ‟ },i; 

fp=fopen{“f,txt”,”w”};  

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

fputc{a[i],fp}; f

close(fp); 

 

 

2010  年 9  月二级 C  语言笔试真题参考答案 

一、选择题  1-5 B C D A A 6-10 D D C C A 11-15 C B B A D 16-20 D A A C B 21-25 B C B D C 26-30 C B D D A 31-35 A C B C D 36-40 B A C B D  二、填空题  1. 1DCBA2345 2. 1 3. 25 4.  结构化  5.  物理设计  6. 2008 7. 15 8.  非 0 9. 1 4 13 40 10. i 11. 2 12. a[row][col] 13. 3 14. *s 15. FILE

 

客服QQ:2651301595  QQ群:328265675  客服邮箱:zhenti8@126.com

本站所刊资料均为热心网友提供,我们不对内容的真实性和完整性负责。

Copyright © 2014-2020 zhenti8.com 考试真题网   版权所有