就业数据资源平台
当前位置:首页 > C语言程序设计
06年9月计算机等级考试二级C语言考前密卷十

  一、选择题


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


  A)线性表是线性结构


  B)栈与队列是非线性结构


  C)线性链表是非线性结构


  D)二叉树是线性结构


  (2)非空的循环单链表head的尾结点(由p所指向),满足


  A)p->next==NULL


  B)p==NULL


  C)p->next=head


  D)p=head


  (3)已知数据表A中每个元素距其最终位置不远,为节省时间,应采用的算法是


  A)堆排序


  B)直接插入排序


  C)快速排序


  D)直接选择排序


  (4)对建立良好的程序设计风格,下面描述正确的是


  A)程序应简单、清晰、可读性好


  B)符号名的命名只要符合语法


  C)充分考虑程序的执行效率


  D)程序的注释可有可无


  (5)下列不属于结构化分析的常用工具的是


  A)数据流图


  B)数据字典


  C)判定树


  D)PAD图


  (6)在软件生产过程中,需求信息的给出是


  A)程序员


  B)项目管理者


  C)软件分析设计人员


  D)软件用户


  (7)下列工具中为需求分析常用工具的是


  A)PAD


  B)PFD


  C)N-S


  D)DFD


  (8)NULL是指


  A)0


  B)空格


  C)未知的值或无任何值


  D)空字符串


  (9)数据库的故障恢复一般是由


  A)数据流图完成的


  B)数据字典完成的


  C)DBA完成的


  D)PAD图完成的


  (10)下列说法中,不属于数据模型所描述的内容的是


  A)数据结构


  B)数据操作


  C)数据查询


  D)数据约束


  (11)C语言程序的基本单位是


  A)程序行


  B)语句


  C)函数


  D)字符


  (12)下面四个选项中,均是合法整型常量的选项是


  A)160 -0xffff 011


  B)-0xcdf 01a 0xe


  C)-01 986,012 0668


  D)-0x48a 2e5 0x


  (13)以下选项中合法的用户标识符是


  A)long


  B)_2Test


  C)3Dmax


  D)A.dat


  (14)假定x和y为double型,则表达式x=2,y=x+3/2的值是


  A)3.500000


  B)3


  C)2.000000


  D)3.000000


  (15)以下变量x,y,z均为double类型且已正确赋值,不能正确表示数学式子x÷y÷z的C语言表达式是


  A)x/y*z


  B)x*(1/(y*z))


  C)x/y*1/z


  D)x/y/z


  (11)C语言程序的基本单位是


  A)程序行


  B)语句


  C)函数


  D)字符


  (12)下面四个选项中,均是合法整型常量的选项是


  A)160 -0xffff 011


  B)-0xcdf 01a 0xe


  C)-01 986,012 0668


  D)-0x48a 2e5 0x


  (13)以下选项中合法的用户标识符是


  A)long


  B)_2Test


  C)3Dmax


  D)A.dat


  (14)假定x和y为double型,则表达式x=2,y=x+3/2的值是


  A)3.500000


  B)3


  C)2.000000


  D)3.000000


  (15)以下变量x,y,z均为double类型且已正确赋值,不能正确表示数学式子x÷y÷z的C语言表达式是


  A)x/y*z


  B)x*(1/(y*z))


  C)x/y*1/z


  D)x/y/z


  (21)C语言中 while 和do-while循环的主要区别是


  A)do-while的循环体至少无条件执行一次


  B)while的循环控制条件比do-while的循环控制条件更严格


  C)do-while允许从外部转到循环体内


  D)do-while 的循环体不能是复合语句


  (22)以下程序的输出结果是






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


  A)1,6,3,1,3


  B)1,6,3,6,3


  C)1,6,3,2,3


  D)1,7,3,2,3


  (23)下面程序输出的结果是






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


  A)1 5 9


  B)7 5 3


  C)3 5 7


  D)5 9 1


  (24)请阅读以下程序:






以下是引用片段:
  main()
  { int a=5,b=0,c=0;
  if(a=b+c)printf("***\n");
  else printf("$$$\n");
  }


  以上程序


  A)有语法错不能通过编译


  B)可以通过编译但不能通过连接


  C)输出***


  D)输出$$$


  (25)以下程序的输出结果是






以下是引用片段:
  main()
  { char c=′z′;
  printf("%c",c-25);
  }


  A)a


  B)Z


  C)z-25


  D)y


  (26)下面函数的功能是






以下是引用片段:
  char *fun(char *str1,char*str2)
  {while((*str1)&&(*str2++=*str1++));
  return str2;
  }


  A)求字符串的长度


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


  C)将字符串str1复制到字符串str2中


  D)将字符串str1接续到字符串str2中


  (27)下面函数调用语句含有实参的个数为


  func((exp1,exp2),(exp3,exp4,exp5));


  A)1


  B)2


  C)4


  D)5


  (28)下面程序段的运行结果是






以下是引用片段:
  char *s="abcde";
  s+=2;printf("%d",s);


  A)cde


  B)字符′c′


  C)字符′c′的地址


  D)无确定的输出结果


  (29)已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的正确输出结果是






以下是引用片段:
  void print_value(int *x)
  {printf("%d\n",++*x);}


  A)23


  B)24


  C)25


  D)26


  (30)当顺利执行了文件关闭操作时,fclose函数的返回值是


  A)-1


  B)TRUE


  C)0


  D)1


  (21)C语言中 while 和do-while循环的主要区别是


  A)do-while的循环体至少无条件执行一次


  B)while的循环控制条件比do-while的循环控制条件更严格


  C)do-while允许从外部转到循环体内


  D)do-while 的循环体不能是复合语句


  (22)以下程序的输出结果是






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


  A)1,6,3,1,3


  B)1,6,3,6,3


  C)1,6,3,2,3


  D)1,7,3,2,3


  (23)下面程序输出的结果是






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


  A)1 5 9


  B)7 5 3


  C)3 5 7


  D)5 9 1


  (24)请阅读以下程序:






以下是引用片段:
  main()
  { int a=5,b=0,c=0;
  if(a=b+c)printf("***\n");
  else printf("$$$\n");
  }


  以上程序


  A)有语法错不能通过编译


  B)可以通过编译但不能通过连接


  C)输出***


  D)输出$$$


  (25)以下程序的输出结果是






以下是引用片段:
  main()
  { char c=′z′;
  printf("%c",c-25);
  }


  A)a


  B)Z


  C)z-25


  D)y


  (26)下面函数的功能是






以下是引用片段:
  char *fun(char *str1,char*str2)
  {while((*str1)&&(*str2++=*str1++));
  return str2;
  }


  A)求字符串的长度


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


  C)将字符串str1复制到字符串str2中


  D)将字符串str1接续到字符串str2中


  (27)下面函数调用语句含有实参的个数为


  func((exp1,exp2),(exp3,exp4,exp5));


  A)1


  B)2


  C)4


  D)5


  (28)下面程序段的运行结果是






以下是引用片段:
  char *s="abcde";
  s+=2;printf("%d",s);


  A)cde


  B)字符′c′


  C)字符′c′的地址


  D)无确定的输出结果


  (29)已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的正确输出结果是






以下是引用片段:
  void print_value(int *x)
  {printf("%d\n",++*x);}


  A)23


  B)24


  C)25


  D)26


  (30)当顺利执行了文件关闭操作时,fclose函数的返回值是


  A)-1


  B)TRUE


  C)0


  D)1


  (31)设有如下定义


  char *s[2]={ "abcd","ABCD"};


  则下列说法错误的是


  A)s数组元素的值分别是"abcd"和"ABCD"两个字符串的首地址


  B)s是指针数组名,它含有两个元素分别指向字符型一维数组


  C)s数组的两个元素分别存放的是含有4个字符的一维字符数组中的元素


  D)s数组的两个元素中分别存放了字符′a′和′A′的地址


  (32)以下不能对二维数组a进行正确初始化的语句是


  A)int a[2][3]={0};


  B)int a[][3]={{1,2},{0}};


  C)int a[2][3]={{1,2},{3,4},{5,6}};


  D)int a[][3]={1,2,3,4,5,6};


  (33)有以下程序







以下是引用片段:
  struct STU
  { char num[10]; float score[3]; };
  main()
  {struct STU s[3]={{"20021",90,95,85},
  {"20022",95,80,75},
  { "20023",100,95,90},
  },*p=s;
  int i; float sum=0;
  for(i=0;i<3;i++)
  sum=sum+p->score[i];
  printf("%6.2f\n",sum);
  }


  程序运行后的输出结果是


  A)260.00


  B)270.00


  C)280.00


  D)285.00


  (34)若有说明:int a[10];则对a数组元素的正确引用是


  A)a[10]


  B)a[3,5]


  C)a(5)


  D)a[10-10]


  (35)下面程序段中,输出*的个数是


  char *s="\ta\018bc";


  for(;*s!=′\0′;s++)printf("*");


  A)9


  B)5


  C)6


  D)7


  (36)设有如下函数






以下是引用片段:
  fun (float x)
  {
  printf("\n%d",x*x);}


  则函数的类型是


  A)与参数x的类型相同


  B)是void


  C)是int型


  D)无法确定


  (37)有如下定义






以下是引用片段:
  #define D 2
  int x=5;float y=3.83;


  char c=′D′;


  则下面选项中错误的是


  A)x++;


  B)y++;


  C)c++;


  D)D++;


  (38)以下程序段的执行结果为






以下是引用片段:
  #define PLUS(X,Y)X+Y
  main()
  { int x=1,y=2,z=3,sum;
  sum=PLUS(x+y,z)*PLUS(y,z);
  printf("SUM=%d",sum);
  }


  A)SUM=9


  B)SUM=12


  C)SUM=18


  D)SUM=28


  (39)C语言规定,函数返回值的类型是由


  A)return语句中的表达式类型所决定


  B)调用该函数时的主调函数类型所决定


  C)调用该函数时系统临时决定


  D)在定义该函数时所指定的函数类型所决定


  (40)下列程序的运行结果是






以下是引用片段:
  void fun(int *a,int *b)
  { int *k;
  k=a;a=b;b=k;
  }
  main()
  { int a=2004, b=9,*x=&a,*y=&b;
  fun(x,y);
  printf("%d%d",a,b);
  }


  A)2004 9


  B)9 2004


  C)0 0


  D)编译时出错


  (41)下列程序是用来判断数组中特定元素的位置所在。如果输入如下整数:


  876 675 896 101 301 401 980 431 451 777






以下是引用片段:
  #include 
  #include 
  int fun(int *s, int t, int *k)
  { int i;
  *k=0;
  for(i=0;i 
  if(s[*k] 
  return s[*k];
  }
  main()
  {
  int a[10]={ 876,675,896,101,301,401,980,431,451,777},k;
  clrscr();
  fun(a, 10, &k);
  printf("%d, %d\n ", k, a[k]);
  }


  则输出结果为


  A)7,431


  B)6


  C)980


  D)6,980


  (42) C语言结构体类型变量在程序执行期间


  A)所有成员一直驻留在内存中


  B)只有一个成员驻留在内存中


  C)部分成员驻留在内存中


  D)没有成员驻留在内存中


  (43)下面程序应能对两个整型变量的值进行交换。以下正确的说法是






以下是引用片段:
  main()
  {int a=10,b=20;
  printf("(1)a=%d,b=%d\n",a,b);
  swap(&a,&b);
  printf("(2)a=%d,b=%d\n",a,b);
  }
  swap(int p,int q)
  {int t;
  t=p;p=q;q=t;
  }


  A)该程序完全正确


  B)该程序有错,只要将语句swap(&a,&b);中的参数改为a,b即可


  C)该程序有错,只要将swap()函数中的形参p和q以及t均定义为指针(执行语句不变)即可


  D)以上说法都不对


  (44)有以下程序






以下是引用片段:
  #include 
  main()
  { char *p,*q;
  p=(char *)malloc(sizeof(char)*20); q=p;
  scanf("%s %s",p,q); printf("%s %s\n",p,q);
  }


  若从键盘输入:abc def<回车>,则输出结果是


  A)def def


  B)abc def


  C)abc d


  D)d d


  (45)以下程序的输出结果是






以下是引用片段:
  int f()
  { static int i=0;
  int s=1;
  s+=i; i++;
  return s;
  }
  main()
  { int i,a=0;
  for(i=0;i<5;i++)a+=f();
  printf("%d\n",a);
  }


  A)20


  B)24


  C)25


  D)15


  (46)已知 int a=1,b=3则a^b的值为


  A)3


  B)1


  C)2


  D)4


  (47)如果需要打开一个已经存在的非空文件“Demo”进行修改下面正确的选项是


  A)fp=fopen("Demo","r");


  B)fp=fopen("Demo","ab+");


  C)fp=fopen("Demo","w+");


  D)fp=fopen("Demo","r+");


  (48)若要打开A盘上user子目录下名为abc.txt的文本文件进行读、写操作,下面符合此要求的函数调用是


  A)fopen("A:\user\abc.txt","r")


  B)fopen("A:\\user\\abc.txt","rt+")


  C)fopen("A:\user\abc.txt","rb")


  D)fopen("A:\user\abc.txt","w")


  (49)有以下程序






以下是引用片段:
  #include 
  main()
  { char *p="abcde\0fghjik\0 ";
  printf("%d\n ",strlen(p));
  }


  程序运行后的输出结果是


  A)12


  B)15


  C)6


  D)5


  (50) 有以下程序






以下是引用片段:
  #include 
  struct NODE
  { int num; struct NODE *next; };
  main()
  { struct NODE *p,*q,*r;
  p=(struct NODE*)malloc(sizeof(struct NODE));
  q=(struct NODE*)malloc(sizeof(struct NODE));
  r=(struct NODE*)malloc(sizeof(struct NODE));
  p->num=10; q->num=20; r->num=30;
  p->next=q;q->next=r;
  printf("%d\n ",p->num+q->next->num);
  }


  程序运行后的输出结果是


  A)10


  B)20


  C)30


  D)40


  二、填空题


  (1)冒泡排序算法在最好的情况下的元素交换次数为 【1】 。


  解析: 根据冒泡排序算法思想可知,若待排序的初始序列为“正序”序列,则只需进行一趟排序,在排序过程中进行n-1次关键字间的比较,且不移动和交换记录,这种情况是冒泡排序的最好情况,故冒泡排序算法在最好的情况下的元素交换次数为0。


  (2)在最坏情况下,堆排序需要比较的次数为 【2】 。


  答案:0(nlog2n)


  (3)若串s="MathTypes",则其子串的数目是 【3】 。


  解析: 串s中共有9个字符,由于串中字符各不相同,则其子串中有0个字符的1个(空串),1个字符的9个,2个字符的8个,3个字符的7个,4个字符的6个,5个字符的5个,6个字符的4个,7个字符的3个,8个字符的2个,9个字符的1个,共有1+2+3+4+5+6+7+8+9+1=46。


  (4)软件开发环境是全面支持软件开发全过程的 【4】 集合。


  答案:软件工程


  (5)关系数据库的关系演算语言是以 【5】 为基础的DML语言。


  解析: 关系数据库中的关系演算包括元组关系演算和域关系演算。二者都是由原子公式组成的公式。而这些关系演算都是以数理逻辑中的谓词演算为基础的。


  (6)下列y的值是 【6】 。


  int y; y=sizeof (2.25*4);


  解析: sizeof (2.25*4)为sizeof (10.00)值为8,C语言规定浮点型常量当双精度处理(以IRM-PC机为例)。


  (7)下列x的值是 【7】 。


  int x;x=sizeof 2.25*4;


  解析: sizeof运算符高于算术运算符,所以sizeof 2.25*4等价于(sizeof 2.25)*4为8×4=32(以IBM-PC机为例)。


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






以下是引用片段:
  main ()
  {int i=010,j=10;
  pirntf ("%d,%d\n",i,j);
  }


  解析: 以0开头的是八进制数。


  (9)下列程序的输出结果为 【9】 。






以下是引用片段:
  main ()
  {int x=3,y=5;
  printf ("%d",x=(x--)*(--y));
  }


  解析: x--的值为3,--y的值为4;注意前缀--和后缀--的区别。


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






以下是引用片段:
  fun (int x,int y,int z)
  { z =x*x+y*y;}
  main ()
  {int a=31;
  fun (6,3,a)
  printf ("%d", a)
  }


  解析: 在函数调用时,形参值和改变,不能会改变实参的值。


  二、填空题


  (1)冒泡排序算法在最好的情况下的元素交换次数为 【1】 。


  解析: 根据冒泡排序算法思想可知,若待排序的初始序列为“正序”序列,则只需进行一趟排序,在排序过程中进行n-1次关键字间的比较,且不移动和交换记录,这种情况是冒泡排序的最好情况,故冒泡排序算法在最好的情况下的元素交换次数为0。


  (2)在最坏情况下,堆排序需要比较的次数为 【2】 。


  答案:0(nlog2n)


  (3)若串s="MathTypes",则其子串的数目是 【3】 。


  解析: 串s中共有9个字符,由于串中字符各不相同,则其子串中有0个字符的1个(空串),1个字符的9个,2个字符的8个,3个字符的7个,4个字符的6个,5个字符的5个,6个字符的4个,7个字符的3个,8个字符的2个,9个字符的1个,共有1+2+3+4+5+6+7+8+9+1=46。


  (4)软件开发环境是全面支持软件开发全过程的 【4】 集合。


  答案:软件工程


  (5)关系数据库的关系演算语言是以 【5】 为基础的DML语言。


  解析: 关系数据库中的关系演算包括元组关系演算和域关系演算。二者都是由原子公式组成的公式。而这些关系演算都是以数理逻辑中的谓词演算为基础的。


  (6)下列y的值是 【6】 。


  int y; y=sizeof (2.25*4);


  解析: sizeof (2.25*4)为sizeof (10.00)值为8,C语言规定浮点型常量当双精度处理(以IRM-PC机为例)。


  (7)下列x的值是 【7】 。


  int x;x=sizeof 2.25*4;


  解析: sizeof运算符高于算术运算符,所以sizeof 2.25*4等价于(sizeof 2.25)*4为8×4=32(以IBM-PC机为例)。


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






以下是引用片段:
  main ()
  {int i=010,j=10;
  pirntf ("%d,%d\n",i,j);
  }


  解析: 以0开头的是八进制数。


  (9)下列程序的输出结果为 【9】 。






以下是引用片段:
  main ()
  {int x=3,y=5;
  printf ("%d",x=(x--)*(--y));
  }


  解析: x--的值为3,--y的值为4;注意前缀--和后缀--的区别。


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






以下是引用片段:
  fun (int x,int y,int z)
  { z =x*x+y*y;}
  main ()
  {int a=31;
  fun (6,3,a)
  printf ("%d", a)
  }


  解析: 在函数调用时,形参值和改变,不能会改变实参的值。


 答案

  选择题


  01-05  A  C  B  A  A


  06-10  D  D  C  C  C


  11-15  C  A  B  D  A


  16-20  C  C  B  A  C


  21-25  A  C  B  D  A


  26-30  C  B  C  D  C


  31-35  C  C  B  D  C


  36-40  C  D  B  D  A


  41-45  B  A  D  A  D


  46-50  C  D  B  D  D

就业数据资源平台