打印本文 打印本文  关闭窗口 关闭窗口  
07年4月等级考试二级C语言考前密卷(2)
作者:佚名  文章来源:不详  点击数  更新时间:2008/4/18 14:36:11  文章录入:杜斌  责任编辑:杜斌

一、选择题

(1)已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为
  A)GEDHFBCA
  B)DGEBHFCA
  C)ABCDEFGH
  D)ACBFEDHG
(2)树是结点的集合,它的根结点数目是
  A)有且只有1
  B)1或多于1
  C)0或1
  D)至少2
(3)如果进栈序列为e1,e2,e3,e4,则可能的出栈序列是
  A)e3,e1,e4,e2
  B)e2,e4,e3,e1
  C)e3,e4,e1,e2
  D)任意顺序
(4)在设计程序时,应采纳的原则之一是
  A)不限制goto语句的使用
  B)减少或取消注解行
  C)程序越短越好
  D)程序结构应有助于读者理解
(5)程序设计语言的基本成分是数据成分、运算成分、控制成分和
  A)对象成分
  B)变量成分
  C)语句成分
  D)传输成分
(6)下列叙述中,不属于软件需求规格说明书的作用的是
  A)便于用户、开发人员进行理解和交流
  B)反映出用户问题的结构,可以作为软件开发工作的基础和依据
  C)作为确认测试和验收的依据
  D)便于开发人员进行需求分析
(7)下列不属于软件工程的3个要素的是
  A)工具
  B)过程
  C)方法 
  D)环境
(8)单个用户使用的数据视图的描述称为
  A)外模式
  B)概念模式
  C)内模式
  D)存储模式
(9)将E-R图转换到关系模式时,实体与联系都可以表示成
  A)属性
  B)关系
  C)键
  D)域
(10)SQL语言又称为
  A)结构化定义语言
  B)结构化控制语言
  C)结构化查询语言
  D)结构化操纵语言
(11)下列叙述中正确的是
  A)C语言编译时不检查语法
  B)C语言的子程序有过程和函数两种
  C)C语言的函数可以嵌套定义
  D)C语言的函数可以嵌套调用
(12)在C语言中,退格符是
  A)\n
  B)\t
  C)\f
  D)\b
(13)以下叙述中正确的是
  A)构成C程序的基本单位是函数
  B)可以在一个函数中定义另一个函数
  C)main()函数必须放在其他函数之前
  D)所有被调用的函数一定要在调用之前进行定义
(14)在C程序中,判逻辑值时,用“非0”表示逻辑值“真”, 又用“0”表示逻辑值“假”。 在求逻辑值时,用()表示逻辑表达式值为“真”, 又用()表示逻辑表达式值为“假”。
  A)1   0
  B)0  1
  C)非0  非0
  D)1  1
(15)在C语言中,运算对象必须是整型数的运算符是
  A)%
  B)\
  C)%和\
  D)**
(16)字符型数据在机器中是用ASCII码表示的,字符“5”和“7”在机器中表示为
  A)10100011和 01110111
  B)01000101和01100011
  C)00110101和00110111
  D)01100101和01100111
(17)若已定义:int a=25,b=14,c=19;以下三目运算符(?:)所构成语句的执行后
  a<=25&&b--<=2&&c?printf("***a=%d,b=%d,c=%d\n",a,b,c):printf("###a=%d,b=%d,c=%d\n",a,b,c);程序输出的结果是
  A)***a=25,b=13,c=19
  B)***a=26,b=14,c=19
  C)### a=25,b=13,c=19
  D)### a=26,b=14,c=19
(18)若有定义:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是
  A)2.500000
  B)2.750000
  C)3.500000
  D)0.000000
(19)下列程序段的输出结果是:
  int a=1234;
  float b=123.456;
  double c=12345.54321;
  printf("%2d,%2.1f,%2.1f",a,b,c);
  A)无输出
  B)12,123.5,12345.5
  C)1234,123.5,12345.5
  D)1234,123.4,1234.5
(20)若运行以下程序时,从键盘输入 ADescriptor<CR>(<CR>表示回车),则下面程序的运行结果是#include <stdio.h>
  main()
  {char c;
  int v0=1,v1=0,v2=0;
  do{switch(c=getchar())
  {case ′a′:case ′A′:
  case ′e′:case ′E′:
  case ′i′:case ′I′:
  case ′o′:case ′O′:
  case ′u′:case ′U′:v1+=1;
  default:v0+=1;v2+=1;  } 
   }while(c!=′\n′);
   printf("v0=%d,v1=%d,v2=%d\n",v0,v1,v2);}
  A)v0=7,v1=4,v2=7
  B)v0=8,v1=4,v2=8
  C)v0=11,v1=4,v2=11
  D)v0=13,v1=4,v2=12
(21)设有以下程序段
  int x=0,s=0;
  while(!x!=0)s+=++x;
  printf("%d",s);
  则
  A)运行程序段后输出0
  B)运行程序段后输出1
  C)程序段中的控制表达式是非法的
  D)程序段执行无限次
(22)有如下程序
  main()
  { float x=2.0,y;
  if(x<0.0)y=0.0;
  else if(x>10.0)y=1.0/x;
  else y=1.0;
  printf("%f\n",y);}
  该程序的输出结果是
  A)0.000000
  B)0.250000
  C)0.500000
  D)1.000000
(23)执行下面的程序段后,变量k中的值为
  int k=3, s[2];
  s[0]=k; k=s[1]*10;
  A)不定值
  B)33
  C)30
  D)10
(24)以下程序段的描述,正确的是
  x=-1;
  do
  {x=x*x;}
  while(!x);
  A)是死循环
  B)循环执行两次
  C)循环执行一次
  D)有语法错误
(25)以下选项错误的是
  A)main()
  { int x,y,z;
  x=0;y=x-1;
  z=x+y;}
  B)main()
  { int x,y,z;
  x=0,y=x+1;
  z=x+y;}
  C)main()
  { int x;int
  int y;
  x=0,y=x+1;
  z=x+y;}
  D)main()
  { int x,y,z;
  x=0;y=x+1;
  z=x+y,}
(26)有如下程序段
  int a=14,b=15,x;
  char c=′A′;
  x=(a&&b)&&(c<′B′);
  执行该程序段后,x的值为
  A)ture
  B)false
  C)0
  D)1
(27)下列程序执行后的输出结果是
  void func1(int i);
  void func2(int i);
  char st[]="hello,friend!";
  void func1(int i)
  { printf("%c",st[i]);
  if(i<3){i+=2;func2(i);}}
  void func2(int i)
  { printf("%c",st[i]);
  if(i<3){i+=2;func1(i);}}
  main()
  { int i=0; func1(i); printf("\n");}
  A)hello
  B)hel
  C)hlo
  D)hlm
(28)以下函数返回a所指数组中最大值所在的下标值
  fun(int *a,int n)
  { int i,j=0,p;
  p=j;
  for(i=j;i<n;i++)
  if(a[i]>a[p])_________;
  return(p);}
  在下划线处应填入的内容是
  A)i=p
  B)a[p]=a[i]
  C)p=j
  D)p=I
(29)下面说明不正确的是
  A)char a[10]="china";
  B)char a[10],*p=a;p="china"
  C)char *a;a="china";
  D)char a[10],*p;p=a="china"
(30)以下程序的输出结果是
  #include <stdio.h>
  void prt (int  *x, int  *y, int  *z)
  {printf("%d,%d,%d\n",++*x,++*y,*(z++));}
  main()
  {int a=10,b=40,c=20;
  prt (&a,&b,&c);
  prt (&a,&b,&c);}
  A)11,42, 31
    12,22,41
  B)11,41,20
    12,42,20
  C)11,21,40
    11,21,21
  D)11,41,21
    12,42,22
(31)若有函数内部说明:int a[3][4];则数组a中各元素
  A)可在程序的运行阶段得到初值0
  B)可在程序的编译阶段得到初值0
  C)不能得到确定的初值
  D)可在程序的编译或运行阶段得到初值0
(34)定义如下变量和数组:
  int k;
  int a[3][3]={9,8,7,6,5,4,3,2,1};
  则下面语句的输出结果是
  for(k=0;k<3;k++)printf("%d",a[k][k]);
  A)7 5 3
  B)9 5 1
  C)9 6 3
  D)7 4 1
(35)下列程序执行后的输出结果是
  main()
  { char arr[2][4];
  strcpy(arr,"you"); strcpy(arr[1],"me");
  arr[0][3]=′&′;
  printf("%s\n",arr);}
  A)you&me
  B)you
  C)me
  D)err
  (36)有以下函数
  char fun(char *p)
  {return p;}
  该函数的返回值是
  A)无确切的值
  B)形参p中存放的地址值
  C)一个临时存储单元的地址
  D)形参p自身的地址值
(37)以下正确的说法是
  A)定义函数时,形参的类型说明可以放在函数体内
  B)return后边的值不能为表达式
  C)如果函数值的类型与返回值类型不一致,以函数值类型为准
  D)如果形参与实参类型不一致,以实参类型为准


(38)有以下程序
  int f(int n)
  { if(n==1)return 1;
  else return f(n-1)+1;}
  main()
  { int i,j=0;
  for(i=1;i<3;i++)j+=f(i);
  printf("%d\n",j);}
  程序运行后的输出结果是
  A)4
  B)3
  C)2
  D)1
(39)设有如下定义:
  struck sk
  { int a;
  float b;
  } data;
  int *p;
  若要使P指向data中的a域,正确的赋值语句是
  A)p=&a;
  B)p=data.a;
  C)p=&data.a;
  D)*p=data.a;‘
(40)以下对结构体类型变量的定义中,不正确的是
  A)typedef struct aa
  { int n;
  float m;
  }AA;
  AA tdl;
  B)#define AA struct aa
  AA{ int n;
  float m;
  } tdl;
  C)struct
  { int n;
  float m;
  } aa;
  struct aa tdl;
  D)struct
  { int n;
  float m;
  } tdl;
(41)若说明int *p,n;则通过语句scanf能够正确读入数据的程序段是
  A)p=&n;scanf("%d",&p);
  B)p=&n;scanf("%d",*p);
  C)scanf("%d",n);
  D)p=&n;scanf("%d",p);
(42) 在下述程序中,判断i>j共执行的次数是
  main()
  {int i=0, j=10, k=2, s=0;
  for (;;)
  {i+=k;
  if(i>j)
  {printf("%d",s);
  break;
  }s+=i;
  }
  }
  A)4
  B)7
  C)5
  D)6
(43)以下4个选项中,不能看做一条语句的是
  A);
  B)a=5,b=2.5,c=3.6;
  C)if(a<5);
  D)if(b!=5)x=2;y=6;
(44)在C语言中,变量的隐含存储类别是
  A)auto
  B)static
  C)extern
  D)无存储类别
(45)若有以下程序
  #include <stdio.h>
  void f(int n);
  main()
  { void f(int n);
  f(5);
  }
  void f(int n)
  { printf("%d\n",n); }
  则以下叙述中不正确的是
  A)若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数f
  B)若在主函数前对函数f进行说明,则在主函数和其后的其他函数中都可以正确调用函数f
  C)对于以上程序,编译时系统会提示出错信息:提示对f函数重复说明
  D)函数f无返回值,所以可用void将其类型定义为无返回值型
(46)若有下面的说明和定义
  struct test
  { int ml; char m2; float m3;
  union uu {char ul[5]; int u2[2];} ua;
  } myaa;
  则sizeof(struct test )的值是
  A)12
  B)16
  C)14
  D)9
(47)以下程序的输出是
  struct st
  { int x; int *y;} *p;
  int dt[4]={ 10,20,30,40 };
  struct st aa[4]={ 50,&dt[0],60,&dt[0],60,&dt[0],60,&dt[0]};
  main()
  { p=aa;
  printf("%d\n",++(p->x));
  }
  A)10
  B)11
  C)51
  D)60
(48)若有运算符<<,sizeof,^,&=,则它们按优先级由高至低的正确排列次序是
  A)sizeof,&=,<<,^
  B)sizeof,<<,^,&=
  C)^,<<,sizeof,&=
  D)<<,^,&=,sizeof
(49)函数fseek(pf, OL,SEEK_END)中的SEEK_END代表的起始点是
  A)文件开始
  B)文件末尾
  C)文件当前位置
  D)以上都不对
(50)有以下程序
  #include <stdio.h>
  main()
  { FILE *fp; int i=20,j=30,k,n;
  fp=fopen("d1.dat","w");
  fprintf(fp,"%d\n",i);fprintf(fp,"%d\n",j);
  fclose(fp);
  fp=fopen("d1.dat","r");
  fscanf(fp,"%d%d",&k,&n); printf("%d %d\n",k,n);
  fclose(fp);
  }
  程序运行后的输出结果是
  A)20 30
  B)20 50
  C)30 50
  D)30 20

二、填空题

(1)数据结构分为逻辑结构与存储结构,线性链表属于 【1】 。
解析: 数据的逻辑结构是指反映数据元素之间逻辑关系的数据结构;数据的存储结构是指数据的逻辑结构在计算机存储空间中的存放形式。在数据的存储结构中,不仅要存放各数据元素的信息,还需要存放各数据元素之间的前后件关系的信息。

(2)在面向对象方法中,类之间共享属性和操作的机制称为 【2】 。
解析: 类是面向对象语言中必备的程序语言结构,用来实现抽象数据类型。类与类之间的继承关系实现了类之间的共享属性和操作,一个类可以在另一个已定义的类的基础上定义,这样使该类型继承了其超类的属性和方法,当然,也可以定义自己的属性和方法。

(3)耦合和内聚是评价模块独立性的两个主要标准,其中 【3】 反映了模块内各成分之间的联系。
解析: 内聚性是一个模块内部各个元素间彼此结合的紧密程度的度量,内聚是从功能角度来度量模块内的联系;耦合性是模块间互相连接的紧密程度的度量。

(4)一个项目具有一个项目主管,一个项目主管可管理多个项目,则实体"项目主管"与实体"项目"的联系属于 【4】 的联系。
解析: 两个实体集间的联系实际上是实体集间的函数关系,这种函数关系可以有3种,即一对一(1∶1)的联系、一对多(1∶N)或多对一(N∶1)的联系和多对多(N∶N)的联系。

(5)数据库设计分为以下6个设计阶段:需求分析阶段、 【5】 、逻辑设计阶段、物理设计阶段、实施阶段、运行和维护阶段。
解析: 数据库设计分为以下6个设计阶段:需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段、实施阶段及数据库运行和维护阶段。

(6)以下程序的运行结果是【6】。
#define MAX (a,b)(a>b?a:b)+1
main  ()
{ int i=6,j=8,k;
printf ("%d\n",MAX(i,j));
}
解析: 本题考查宏定义与三目运算符的综合用法,宏定义是原样替换,本题中,如果a>b成立,则a+1的值为整个表达式的值,否则为b+1的值为整个表达式的值,(应注意后面的加1)。

(7)以下程序的功能是从健盘输入若干学生的成绩,并输出最高成绩和最低成绩,当输入负数时结束。请填空。
main ()
{float x,amax,amin;
scanf ("%f",&x);
amax=x;
amin=x;
while (【7】)
{if (x>amax)
amax=x;
else
if【8】
amin=x;
 else scanf ("%f",&x);
}
printf ("\n amax=%f\n amin=%f\n",amax,amin);
}
解析: 本题先从键盘接受数值,并分别赋给amax(用于保存最高成绩)和amin(用干保存最低成绩),然后通过while循环控制是否结束输入,并且通过if语句来给amax和amin赋值和进行下一次的输入。

(8)在对文件操作的过程中,若要求文件的位置指针回到文件的开始处,应当调用的函数是【9】。
答案;rewind()

(9)在计算机中,字符的比较是对它们的【10】进行比较。
解析: C语言中,字符也可以进行比较运算,且是按照ASCII码值进行的。

(10)在内存中,存储字符′x′要占用1个字节,存储字符串″X″要占用【11】个字节。
解析: 计算机存储一个字符用1个字节,存储字符串时,每个字符用占用1个字节,另在字符串的有效字符之后存储1个字符串的结束标记符。所以存储字符串“X”要占用2个字节,存储字符′x′只要1个字节。

(11)下列程序的输出结果是16.00,请填空。
main()
{int a=9, b=2;
float x=【12】, y=1.1,z;
z=a/2+b*x/y+1/2;
printf("%5.2f\n", z );
}
解析: 本题最后一条语句,表示以浮点格式输出z的值,宽度为5,其中所含2位小数,应该注意的是,两个整型运算结果仍为整型,如1/2的结果为0,对本题可逐步求解:
16.00=9/2+2*x/1.1+1/2
16.00=4+2*x/1.1+0
12.00=2*x/1.1
所以,x的值为6.6。

(12)设在主函数中有以下定义和函数调用语句,且fun函数为void类型;请写出fun函数的首部【13】。要求形参名为b。
main()
{double s[10][22];
int n; ┆

fun(s);

}
解析: 本题中,为了明确表示“不带回值”,可以用“void”定义“无类型”(或称“空类型”)。这系统就保证不使函数带回任何值,二维数组的第一维可以省略。

(13)下列程序的功能是输入一个整数,判断是否是素数,若为素数输出1,否则输出0,请填空。
main()
{int i, x, y=1;
scanf("%d", &x);
for(i=2; i<=x/2; i++)
if【14】{ y=0; break;}
printf("%d\n", y);
}
解析: 为判数x是否是素数,预置变量y的值为1(x可能是素数),然后用循环,用2至x/2的整数i测试对x的整除性,若能被其中的某个整数整除,则x是合数,置y的值为0(x不是素数),结束测试循环。若都不能整除,则x为素数。i能否整除x,可用求余运算x%i等于0来判定。所以程序中的空框可填x%i == 0。测试x为素数的代码可写成:y = 1;
for(i=2; i <=x/2; i++)
if(x%i == 0){ y = 0; break; }

(14)下面程序的功能是将一个字符串str的内容颠倒过来,请填空。
#include<string.h>
main()
{ int i,j,【15】;char str[]={"1234567"};
for(i=0,j=strlen(str)【16】;i<j;i++,j--)
{k=str[i];str[i]=str[j];str[j]=k;}
printf("%s\n",str);
}
解析: 颠倒一个字符串中的字符,就是首尾对应的元素两两交换。简单地可用两个游标变量i和j,i是前端元素的下标,j是后端元素的下标,交换以这两个变量值为下标的元素str[i]和str[j]。开始时,i的值为0,j的值为字符串末元素的下标(字符串长度减1)。每次交换后,i增1,j减1。继续交换的条件是str[i]还位于str[j]的前面,即i<j。字符串末元素的下标是它的长度减1,所以在第二个空框处应填入-1。程序为了交换str[i]和str[j],使用了变量k,该变量应在程序的变量定义部分中一起定义,所以在第一个空框处应填入k。

(15)以下程序可把输入的十进制数以十六进制数的形式输出,请填空。
main()
{char b[17]={"0123456789ABCDEF"};
int c[64],d,i=0,base=16;
long n;
printf("Enter a number:\n");scanf("%ld",&n);
do{c[i]=【17】;i++;n=n/base;}
while(n!=0);
printf("Transmite new base:\n");
for(--i;i>=0;--i)
{d=c[i];printf("%c",b【18】);}
printf("\n");
}
解析: 程序中,字符数组b存储十六进制的16个数字符,整型数组c存储译出的十六进制数的各位数值。从整数n译出它的各位十六进制数值,需采用除16取余的方法,即求n除16的余,得到它的十六进制的个位数,接着将n除以16。在n不等于0的情况下循环,能顺序求出n的十六进制的个位数、十位数、百位数等等。程序中变量base已预置16,所以在第1个空框处可填代码n%base。当n的十六进制数的个位、十位、百位等依次存放于数组c中后,就从最高位至最低位,参照数组c[i]的内容d(以其内容为下标),取十六进制数字符表中的字符b[d]输出。所以在第2个空框处可填入代码[d]。

(16)若给fun函数的形参s传送字符串:“]]6354abcc” (其中]表示空格字符),则函数的返回值是【19】。
#include <ctype.h>
long fun(char s[])
{long n;int sign;
for(;isspace(*s);s++);
sign=(*s==′-′)?-1:1;
if(*s==′+′||*s==′-′)s++;
for(n=0;isdigit(*s);s++)n=10*n+(*s-′0′);
return sign*n;
}
解析: 函数fun的第一个for循环跳过字符串的前导空白符,接着判断第一个非空白符是否是负号,若是则置变量sign为-1;否则,置变量sign为1。接着的if语句在第一个非空白字符是负号或正号时,跳过该字符。以后的for循环将后面的数字符当作十进制数的各位数字译出一个长整数n。遇字符a时,结束循环。最后,函数返回sign与n的乘积。所以若调用函数时提供的实参是“∪∪6354abc”,函数返回值是6354。

(17)设有定义“struct {int a; float b; char c;} abc, *p_abc=&abc;”,则对结构体成员a的引用方法可以是abc.a和p_abc【20】a。
解析: 若有结构变量abc有成员a,并有指针p_abc指向结构变量abc,则引用变量abc成员a的标记形式有abc . a和p_abc->a。

选择题

01-05  B  A  B  D  D
                   
06-10  D  D  A  B  C
                   
11-15  D  D  A  A  A
                   
16-20  C  C  A  C  D
                   
21-25  B  D  A  C  D
                   
26-30  D  C  D  D  B
                   
31-35  C  D  B  B  A
                
36-40  B  C  B  C  C
                   
41-45  D  D  D  A  C
                   
46-50  A  C  B  B  A

打印本文 打印本文  关闭窗口 关闭窗口