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

  一、选择题

  (1)有以下程序

以下是引用片段:
  main()
  { int a[10]={1,2,3,4,5,6,7,8,9,10}, *p=&a[3], *q=p+2;
  printf("%d\n", *p + *q);
  }

  程序运行后的输出结果是

  A)16

  B)10

  C)8

  D)6

  (2)有以下程序

以下是引用片段:
  main()
  { int a[]={2,4,6,8,10}, y=0, x, *p;
  p=&a[1];
  for(x= 1; x<3; x++) y += p[x];
  printf("%d\n",y);
  }

  程序运行后的输出结果是

  A)10

  B)11

  C)14

  D)15

  (3)有以下程序

以下是引用片段:
  void sort(int a[], int n)
  { int i, j ,t;
  for (i=0; i 
  for (j=i+1; j 
  if (a[i] 
  }
  main()
  { int aa[10]={1,2,3,4,5,6,7,8,9,10}, i;
  sort(aa+2, 5);
  for (i=0; i<10; i++) printf("%d,",aa[i]);
  printf("\n");
  }

  程序运行后的输出结果是

  A)1,2,3,4,5,6,7,8,9,10, B)1,2,7,6,3,4,5,8,9,10,

  C)1,2,7,6,5,4,3,8,9,10, D)1,2,9,8,7,6,5,4,3,10,

  (4)有以下程序

以下是引用片段:
  void sum(int a[])
  { a[0] = a[-1]+a[1]; }
  main()
  { int a[10]={1,2,3,4,5,6,7,8,9,10};
  sum(&a[2]);
  printf("%d\n", a[2]);
  }

  程序运行后的输出结果是

  A)6

  B)7

  C)5

  D)8

  (5)有以下程序

以下是引用片段:
  void swap1(int c0[], int c1[])
  { int t ;
  t=c0[0]; c0[0]=c1[0]; c1[0]=t;
  }
  void swap2(int *c0, int *c1)
  { int t;
  t=*c0; *c0=*c1; *c1=t;
  }
  main()
  { int a[2]={3,5}, b[2]={3,5};
  swap1(a, a+1); swap2(&b[0], &b[1]);
  printf("%d %d %d %d\n",a[0],a[1],b[0],b[1]);
  }

  程序运行后的输出结果是

  A)3 5 5 3

  B)5 3 3 5

  C)3 5 3 5

  D)5 3 5 3

  (6)算法的时间复杂度是指

  A)执行算法程序所需要的时间

  B)算法程序的长度

  C)算法执行过程中所需要的基本运算次数

  D)算法程序中的指令条数

  (7)软件生命周期中所花费用最多的阶段是

  A)详细设计

  B)软件编码

  C)软件测试

  D)软件维护

  (8)数据库管理系统DBMS中用来定义模式、内模式和外模式的语言为

  A)C

  B)Basic

  C)DDL

  D)DML

  (9)下列有关数据库的描述,正确的是

  A)数据库是一个DBF文件

  B)数据库是一个关系

  C)数据库是一个结构化的数据集合

  D)数据库是一组文件

  (10)下列有关数据库的描述,正确的是

  A)数据处理是将信息转化为数据的过程

  B)数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变

  C)关系中的每一列称为元组,一个元组就是一个字段

  D)如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系的关键字,则称其为本关系的外关键字

  (6)算法的时间复杂度是指

  A)执行算法程序所需要的时间

  B)算法程序的长度

  C)算法执行过程中所需要的基本运算次数

  D)算法程序中的指令条数

  (7)软件生命周期中所花费用最多的阶段是

  A)详细设计

  B)软件编码

  C)软件测试

  D)软件维护

  (8)数据库管理系统DBMS中用来定义模式、内模式和外模式的语言为

  A)C

  B)Basic

  C)DDL

  D)DML

  (9)下列有关数据库的描述,正确的是

  A)数据库是一个DBF文件

  B)数据库是一个关系

  C)数据库是一个结构化的数据集合

  D)数据库是一组文件

  (10)下列有关数据库的描述,正确的是

  A)数据处理是将信息转化为数据的过程

  B)数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变

  C)关系中的每一列称为元组,一个元组就是一个字段

  D)如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系的关键字,则称其为本关系的外关键字

  (16)C语言中运算对象必须是整型的运算符是

  A)%=

  B)/

  C)=

  D)<=

  (17)若变量a,i已正确定义,且i已正确赋值,合法的语句是

  A)a= =1

  B)++i;

  C)a=a++=5;

  D)a=int(i);

  (18)已知

  int t=0;

  while (t=1)

  {...}

  则以下叙述正确的是

  A)循环控制表达式的值为0

  B)循环控制表达式的值为1

  C)循环控制表达式不合法

  D)以上说法都不对

  (19)若变量已正确说明为float型,要通过语句scanf("%f%f%f",&a,&b,&c);给a赋予10.0,b赋予22.0,c赋予33.0,下列不正确的输入形式是

  A)10<回车>22<回车>33<回车>

  B)10.0,22.0,33.0<回车>

  C)10.0<回车>22.033.0<回车>

  D)10 22<回车>33<回车>

  (20)有如下程序:

以下是引用片段:
  main()
  {
  int x=1,a=0,b=0;
  switch(x)
  {
  case 0: b++;
  case 1: a++;
  case 2: a++;b++;
  }
  printf("a=%d,b=%d\n",a,b);}

  该程序的输出结果是

  A)a=2,b=1

  B)a=1,b=1

  C)a=1,b=0

  D)a=2,b=2

  (21)有以下程序

以下是引用片段:
  main()
  {int i=1,j=1,k=2;
  if((j++||k++)&&i++)
  printf("%d,%d,%d\n",i,j,k);
  }

  执行后输出结果是

  A)1,1,2

  B)2,2,1

  C)2,2,2

  D)2,2,3

  (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)有如下程序:

以下是引用片段:
  main()
  {int n=9;
  while(n>6){n--; printf("%d",n);}
  }

  该程序的输出结果是

  A)987

  B)876

  C)8765

  D)9876

  (24)在下列选项中,没有构成死循环的是

  A)int i=100;

  while(1)

  {i=i%100+1;

  if(i>100)break;

  }

  B)for(;;);

  C)int k=10000;

  do{k++;}while(k>10000);

  D)int s=36;

  while(s)--s;

  (25)设int x=1,y=1;表达式(!x||y--)的值是

  A)0

  B)1

  C)2

  D)-1

  (26)若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是

  A)函数调用可以作为独立的语句存在

  B)函数调用可以作为一个函数的实参

  C)函数调用可以出现在表达式中

  D)函数调用可以作为一个函数的形参

  (27)有以下程序

以下是引用片段:
  float fun(int x,int y)
  {return(x+y);}
  main()
  {int a=2,b=5,c=8;
  printf("%3.0f\n",fun((int)fun(a+c,b),a-c));
  }

  程序运行后的输出结果是

  A)编译出错

  B)9

  C)21

  D)9.0

  (28)若有以下调用语句,则不正确的fun函数的首部是

以下是引用片段:
  main()
  { …
  int a[50],n;
  …
  fun(n, &a[9]);
  …
  }

  A)void fun(int m, int x[])

  B)void fun(int s, int h[41])

  C)void fun(int p, int *s)

  D)void fun(int n, int a)

  (29)fseek函数的正确调用形式是

  A)fseek(文件指针,起始点,位移量)

  B)fseek(文件指针,位移量,起始点)

  C)fseek(位移量,起始点,文件指针)

  D)fseek(起始点,位移量,文件指针)

  (30)若fp是指向某文件的指针,且已读到文件末尾,则函数feof(fp)的返回值是

  A)EOF

  B)-1

  C)1

  D)NULL

  (26)若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是

  A)函数调用可以作为独立的语句存在

  B)函数调用可以作为一个函数的实参

  C)函数调用可以出现在表达式中

  D)函数调用可以作为一个函数的形参

  (27)有以下程序

以下是引用片段:
  float fun(int x,int y)
  {return(x+y);}
  main()
  {int a=2,b=5,c=8;
  printf("%3.0f\n",fun((int)fun(a+c,b),a-c));
  }

  程序运行后的输出结果是

  A)编译出错

  B)9

  C)21

  D)9.0

  (28)若有以下调用语句,则不正确的fun函数的首部是

以下是引用片段:
  main()
  { …
  int a[50],n;
  …
  fun(n, &a[9]);
  …
  }

  A)void fun(int m, int x[])

  B)void fun(int s, int h[41])

  C)void fun(int p, int *s)

  D)void fun(int n, int a)

  (29)fseek函数的正确调用形式是

  A)fseek(文件指针,起始点,位移量)

  B)fseek(文件指针,位移量,起始点)

  C)fseek(位移量,起始点,文件指针)

  D)fseek(起始点,位移量,文件指针)

  (30)若fp是指向某文件的指针,且已读到文件末尾,则函数feof(fp)的返回值是

  A)EOF

  B)-1

  C)1

  D)NULL

  (36)以下说法正确的是

  A)C语言程序总是从第一个的函数开始执行

  B)在C语言程序中,要调用函数必须在main()函数中定义

  C)C语言程序总是从main()函数开始执行

  D)C语言程序中的main()函数必须放在程序的开始部分

  (37)表达式0x13^0x17的值是

  A)0x04

  B)0x13

  C)0xE8

  D)0x17

  (38)有以下程序

以下是引用片段:
  #define F(X,Y)(X)*(Y)
  main()
  {int a=3, b=4;
  printf("%d\n", F(a++, b++));
  }

  程序运行后的输出结果是

  A)12

  B)15

  C)16

  D)20

  (39)下列程序执行后的输出结果是

以下是引用片段:
  void func(int *a,int b[])
  { b[0]=*a+6; }
  main()
  {int a,b[5];
  a=0; b[0]=3;
  func(&a,b); printf("%d\n",b[0]);
  }

  A)6

  B)7

  C)8

  D)9

  (40)若有下面的程序段:

  char s[]="china";char *p; p=s;

  则下列叙述正确的是

  A)s和p完全相同

  B)数组s中的内容和指针变量p中的内容相等

  C)s数组长度和p所指向的字符串长度相等

  D)*p与s[0]相等

  (41) 以下程序中函数sort的功能是对a数组中的数据进行由大到小的排序

以下是引用片段:
  void sort(int a[],int n)
  {int i,j,t;
  for(i=0;i 
  for(j=i+1;j 
  if(a[i] 
  }
  main()
  {int aa[10]={1,2,3,4,5,6,7,8,9,10},i;
  sort(&aa[3],5);
  for(i=0;i<10;i++)printf("%d,",aa[i]);
  printf("\n");
  }

  程序运行后的输出结果是

  A)1,2,3,4,5,6,7,8,9,10,

  B)10,9,8,7,6,5,4,3,2,1,

  C)1,2,3,8,7,6,5,4,9,10,

  D)1,2,10,9,8,7,6,5,4,3,

  (42) 以下程序的运行结果是

以下是引用片段:
  #include "stdio.h"
  main()
  {struct date
  {int year,month,day;}today;
  printf("%d\n",sizeof(struct date));
  }

  A)6

  B)8

  C)10

  D)12

  (43)若有语句int *point,a=4;和 point=&a;下面均代表地址的一组选项是

  A)a,point,*&a

  B)&*a,&a,*point

  C)*&point,*point,&a

  D)&a,&*point,point

  (44)在调用函数时,如果实参是简单的变量,它与对应形参之间的数据传递方式是

  A)地址传递

  B)单向值传递

  C)由实参传形参,再由形参传实参

  D)传递方式由用户指定

  (45)已定义以下函数

以下是引用片段:
  fun(char *p2, char *p1)
  {
  while((*p2=*p1)!='\0'){p1++;p2++;}
  }

  函数的功能是

  A)将p1所指字符串复制到p2所指内存空间

  B)将p1所指字符串的地址赋给指针p2

  C)对p1和p2两个指针所指字符串进行比较

  D)检查p1和p2两个指针所指字符串中是否有'\0'

  (41) 以下程序中函数sort的功能是对a数组中的数据进行由大到小的排序

以下是引用片段:
  void sort(int a[],int n)
  {int i,j,t;
  for(i=0;i 
  for(j=i+1;j 
  if(a[i] 
  }
  main()
  {int aa[10]={1,2,3,4,5,6,7,8,9,10},i;
  sort(&aa[3],5);
  for(i=0;i<10;i++)printf("%d,",aa[i]);
  printf("\n");
  }

  程序运行后的输出结果是

  A)1,2,3,4,5,6,7,8,9,10,

  B)10,9,8,7,6,5,4,3,2,1,

  C)1,2,3,8,7,6,5,4,9,10,

  D)1,2,10,9,8,7,6,5,4,3,

  (42) 以下程序的运行结果是

以下是引用片段:
  #include "stdio.h"
  main()
  {struct date
  {int year,month,day;}today;
  printf("%d\n",sizeof(struct date));
  }

  A)6

  B)8

  C)10

  D)12

  (43)若有语句int *point,a=4;和 point=&a;下面均代表地址的一组选项是

  A)a,point,*&a

  B)&*a,&a,*point

  C)*&point,*point,&a

  D)&a,&*point,point

  (44)在调用函数时,如果实参是简单的变量,它与对应形参之间的数据传递方式是

  A)地址传递

  B)单向值传递

  C)由实参传形参,再由形参传实参

  D)传递方式由用户指定

  (45)已定义以下函数

以下是引用片段:
  fun(char *p2, char *p1)
  {
  while((*p2=*p1)!='\0'){p1++;p2++;}
  }

  函数的功能是

  A)将p1所指字符串复制到p2所指内存空间

  B)将p1所指字符串的地址赋给指针p2

  C)对p1和p2两个指针所指字符串进行比较

  D)检查p1和p2两个指针所指字符串中是否有'\0'

  (11) 用高级语言编写的程序称为【11】程序,它可以通过解释程序翻译一句执行一句的方式执行,也可以通过编译程序一次翻译产生目标程序,然后执行。

  解析: 用高级语言编写的程序称为源程序,源程序不能在计算机上直接运行,运行源程序有两种方式:一种是通过解释程序,对源程序逐句解释执行;另一种是先让编译程序将源程序一次翻译产生目标程序(目标程序是计算机可直接执行的机器语言程序,它是一种二进制代码程序),然后执行目标程序。

  (12) 以下程序的输出结果是【12】。

以下是引用片段:
  main()
  {int a=0;
  a+=(a=8);
  printf("%d\n",a);}

  解析: 赋值表达式的值就是所赋值变量的值,本题中a+=8相当于a=a+8,对表达式逐步进行求解:

  a+=(a=8)此时,a的值由于赋值为8,而不是0

  a+=8

  a=a+8

  a=16

  (13)函数 void fun(float *sn, int n)的功能是:根据以下公式计算S,计算结果通过形参指针sn传回;n通过形参传入,n的值大于等于0。请填空。

以下是引用片段:
  void fun( float *sn, int n)
  { float s=0.0, w, f=-1.0;
  int i=0;
  for(i=0; i<=n; i++)
  { f=【13】* f;
  w=f/(2*i+1);
  s+=w; }
  【14】=s;}

  解析: C语言中实参变量和形参变量的数据传递是单向的“值传递”方式。指针变量作函数也要遵循这一规则。调用函数不可能改变实参指针变量的值,但可以改变实参指针变量所指变量的值。

  (14)函数fun的功能是:根据以下公式求p的值,结果由函数值返回。m与n为两个正数且要求m>n。

  例如:m=12,n=8时,运行结果应该是495.000000。请在题目的空白处填写适当的程序语句,将该程序补充完整。

以下是引用片段:
  #include 
  #include 
  float fun (int m, int n)
  { int i;
  double p=1.0;
  for(i=1;i<=m;i++)【15】;
  for(i=1;i<=n;i++)【16】;
  for(i=1;i<=m-n;i++)p=p/i;
  return p;}
  main ()
  { clrscr();
  printf ("p=%f\n",fun (12,8));}

  解析:本题中,欲求p的值,需要先求m,n,m-n的阶乘值,可用循环语句实现。

  (15)该程序运行的结果是【17】。

以下是引用片段:
  #include
  #include
  #define M 100
  void fun(int m, int *a, int *n)
  { int i,j=0;
  for(i=1;i<=m;i++)
  if(i%7==0||i%11==0)
  a[j++]=i;
  *n=j;}
  main()
  { int aa[M],n,k;
  clrscr();
  fun(10,aa,&n);
  for(k=0;k 
  if((k+1)%20==0)printf("\n");
  else printf("%4d",aa[k]);
  printf("\n");}

  解析: 解答本题的关键是要读懂程序,试题要找出能被7或11整除的所有整数,注意数学中的“或”和C语言中的“或”的区别,但在此处,if条件语句中用了“||”运算符,若要找能同时被7和11整除的所有整数则在if()中应用“&&”运算符。

  当然,如果m的值输入50,即表达式fun(10,aa,&n);为fun(50,aa,&n);时输入结果为:7 11 14 21 22 28 33 35 42 44 49。

  (16)下列程序的功能是:求出ss所指字符串中指定字符的个数,并返回此值。

  例如,若输入字符串123412132,输入字符1,则输出3,请填空。

以下是引用片段:
  #include 
  #include 
  #define M 81
  int fun(char *ss, char c)
  { int i=0;
  for(; 【18】;ss++)
  if(*ss==c)i++;
  return i;}
  main()
  { char a[M], ch;
  clrscr();
  printf("\nPlease enter a string: "); gets(a);
  printf("\nPlease enter a char: "); ch=getchar();
  printf("\nThe number of the char is: %d\n", fun(a,ch));}

  解析: 从字符串ss中找出子字符串的方法是:从第1个字符开始,对字符串进行遍历;若ss串的当前字符等于t串的第1个字符,两字符串的指针自动加1,继续比较下一个字符;若比较至字符串的结尾,则跳出循环;若ss串的字符和c串的字符对应不同,继续对ss串的下一个字符进行处理。本程序是采用逐一比较的方式找出出现的次数。循环的作用是在串中从左到右逐一走动,if()的作用是进行判断是否相同,若与c相同则表示又出现一次。

  (17)下面程序把从终端读入的文本(用@作为文本结束标志)输出到一个名为bi.dat的新文件中,请填空。

以下是引用片段:
  #include "stdio.h"
  FILE *fp;
  { char ch;
  if((fp=fopen(【19】))==NULL)exit(0);
  while((ch=getchar( ))!='@')fputc (ch,fp);
  fclose(fp);}
  解析: fopen函数的调用方式通常为:
  FILE *fp
  fp=fopen(文件名,使用文件方式);
  (18)设有如下宏定义
  #define MYSWAP(z,x,y)
  {z=x;x=y;y=z;}
  以下程序段通过宏调用实现变量a,b内容交换,请填空。
  float a=5,b=16,c;
  MYSWAP(【20】,a,b);

  解析: 该题考查两个知识点:

  (1)用一个指定的标识符(即名字)来代表一个字符串,它的一般形式为#define 标识符 字符串

  (2)在MYSWAP宏定义中,利用中间变量z来交换x和y的值,所以要实现a和b的交换,只需通过中间变量即可,所以,此处应填c。

答案

选择题

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

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