读书人

09年4月全国计算机等级二级C语言笔试练

发布时间: 2008-11-28 09:05:10 作者: liuhuituzi

特意为大家整理的09年4月全国计算机等级二级C语言考前练习,希望对大家的备考有好的帮助!

一、(1)下面的if语句与y=(x>=10)?3*x-11:(x<1)?x:2'x.1;的功能相同,请补充完整。
  If(  【1】  )
  if(  【2】  )y=2*x-1;
  else y=x;
  else y=3*x-11:
  答案:【1】x<10
  【2】x>=1
  评析:条件表达式的一般形式为:表达式l?表达式2:表达式3
  条件运算符的执行顺序:先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值;若表达式1的值为O(假),则求解表达式3,表达式3的值就是整个条件表达式的值。y。(x>。10)?3。x-1 1:(x>=1)?x:2*x-1;的功能是先求(x>=1)?x:2*x-1:的值,所的的结果再与前面的语句构成条件表达式进行求值。所以【1】应该填x<10,【2】应该填x>=1。

  (2)以下程序中用户由键盘输入一个文件名,然后输入一串字符(用拌结束输入)存放到此
  文件中,形成文本文件,并将字符的个数写到文件的尾部。请填空。
  #include
  main()
  { FILE *fp;
  char ch,fname[32];im count=0;
  printf("Input the filename:");
  scanf("%s",fname);
  if((币=fopen( 【3】 ,"w+"))==NULL)
  { print印Can't open file:%s\n",fname};exit(0);}
  printf("Enter data:in");
  while((ch=getchar())!_1≠)')
  { fputc(ch,fp);count++;}
  fprintf( 【4】 ,"\n%d\n",count);
  fclose(fp);
  }
  答案:【3】fname
  【4】fp
  评析:fopen()函数实现打开文件的功能,通常的调用方式为:FILE*fp;fp=fopen(文件名,使用文件方式),因此,第一个横线处要求填写要打开文件的名字fname。fprintf()函数的一般调用方式为:fprintf (文件指针,格式字符串,输出表列),所以第二个横线处应填写fb。

  (3)函数void fun(noat*sn,int n)的功能是:根据以下公式计算s,计算结果通过形参指针sn传回;n通过形参传入,n的值大于等于0。请补全程序。
  S=I-1/3+1/5-1/7+...+1/(2n+1)
  void fun(float*sn,int n)
  {  float s=O.O,w,f=-1.0;
  int i=0:
  for(I=0;i<=n;i++)
  { f= 【5】 *f;
  w=f/(2*i+1);
  S+=W:
  }
  【6】  =s;
  }
  答案:【5】-1或-1.0
  【6】*sn
  评析:由于在对s求和时,相诹较畹姆号刚好相反,而在函数fun中没有对数据进行取反的操作,故第一空的目的是对数据进行取反,以保证序列中相邻两项的符号不同。故第一个应填-1或-1.0。在执行完循环体后,要将求和结果通过指针参数的形式传递给调用fun的函数,故第二空应填*sn。

  (4)下面的函数strcat(strl,str2)实现将字符串str2拼接到字符串strl后面的功能。请填空使之完整。
  Char*strcat(strl,str2)
  char*strl.*str2;
  { char*t=strl;
  while( 【7】 )strl++;
  while( 【8】 );
  return(t);}
  答案:【7】*strl或*str1!='\0'或*str1!=0或*strl!=NULL
  【8】*strl++=*str2++或*strl++=*str2,*str2++
  评析:函数strcat(strl,str2)实现将字符串str2连接到字符串strl后面,所以首先要找到字符串strl的串尾,根据c语言的语法规定,一个串的串尾一定是一个隐含字符"\0",而在程序中,对字符串中字符的访问是通过两/卜指针变量来完成的,因此要找到字符串strl的串尾,要判断*strl是否为"\0",要找到字符串str2的串尾,要判断*str2是否为"\0",程序中必须可以使字符串中字符逐一顺序体现,所以在题中我们应填写"*str1"和"*strl++=*str2++"。

  (5)以下函数fun用于求两个整数a和b的最大公约数。
  fun(a'b)
  int a'b;
  {int I,J,m,n;
  if(a>b)
  {m=a;a=b; 【9】 ;}
  i=a.j=b;
  while((n= 【10】 )!=O)
  {j=i;i= 【11】 ;}
  retum(i);
  }
 答案:【9】b=m
  【10】j%i
  【11】n
  评析:函数中的变量i和j分别存放两个形参的最小数和最大数,在语句i=a和i=b执行之前,要将a和b分别变为最小数和最大数,当a>b时,程序使用中间变量将两者交换,所以题中第一个空中应当填写"b=m";为求两个整数的最大公约数,程序的where循环条件必须为j整除i成立,所以题_中第二个空中应当填写"j%i";程序要通过i的值返回最大公约数,因此在循环中要将每次整除的公约数赋给i,以保证最后返回的是两个整数的最大公约数,所以第三个空中应当填写"n"。
(6)在先左后右的原则下,根据访问根结点的次序,二叉树的遍历可以分为三种:前序遍历、【1】遍历和后序遍历。
  答案:【1】中序
  评析:在先左后右的原则下,根据访问根结点的次序,二叉树的遍历可以分为三种:前序遍历、中序遍历和后序遍历。
  前序遍历是指在访问根结点、遍历左子树与遍历右子树这三者中,首先访问根结点,然后遍历左子树,最后遍历右子树;并且遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。
  中序遍历指在访问根结点、遍历左子树与遍历右子树这三者中,首先遍历左子树,然后访问根结点,最后遍历右子树;并且遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树。
  后序遍历指在访问根结点、遍历左子树与遍历右子树这三者中,首先遍历右子树,然后访问根结点,最后遍历左子树;并且遍历左、右子树时,仍然先遍历右子树,然后访问根结点,最后遍历左子树。



  (7)结构化程序 设计 方法的主要原则可以概括为自顶向下、逐步求精、【2】和限制使用goto语句。
  答案:【2】模块化
  评析:结构化程序设计方法的主要原则可以概括为自项向下、逐步求精、模块化和限制使用goto语句。
  自顶向下:程序设计时,应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。不要一开始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化。
  逐步求精:对复杂问题,应设计一些子目标作过度,逐步细化。
  模块化:一个复杂问题,肯定是由若干稍简单的问题构成。模块化是把程序要解决的总目标分解为分目标,再进一步分解为具体的小目标,把每个小目标称为一个模块。
  限制使用goto语句。

  (8)软件测试是保证软件质量的重要手段,而软件测试的主要和重要的测试方法是通过测试数据和【3】 的设计来实现。
  答案:【3】测试实例
  评析:进行软件测试时,应精心设计测试实例和选择测试数据,以对系统进行全面测试。

  (9)数据库系统的三级模式分别为【4】模式、内部级模式与外部级模式。
  答案:【4】概念 或 概念级
  评析:数据库系统在其内部具有三级模式及二级映射,三级模式分别是概念级模式、内部级模式和外部级模式。
  概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户(应用)公共数据视图。
  内模式又称物理模式,它给出了数据库物理存储结构与物理存取方法,如数据存储的文件结构、索引、集簇及hash等存取方式与存取路径,内模式的物理性主要体现在 操作系统 及文件级上,.它还未深入到设备级上(如磁盘及磁盘操作)。
  外模式也称子模式或用户模式,它是用户的数据视图,也就是用户所见到的数据模式,它由概念模式推导面出。

  (10)数据字典是各类数据描述的集合,它通常包括5个部分,即数据项、数据结构、数据流、【5】和处理过程。
  答案:【5】数据存储
  评析:数据字典是各类数据描述的集合,它通常包括5个部分,即数据项,是数据的最小单位;数据结构,是若干数据项有意义的集合;数据流,可以是数据项,也可以是数据结构,表示某一处理过程的输入或输出;数据存储,处理过程中存取的数据,常常是手工凭证、手工文档或计算机文件;处理过程。

  (11)下面程序的输出是【6】。
  main()
  {int arr[10],i,k=O:
  for(i=0;i<10;i++)
  arr[i]=i;
  for(I=1;i<4;i++)
  k+=arr[I]+i;
  printf("%d\n",k);}
  答案:【6】12
  评析:本题通过第一个for循环将数组arr[O]-arr[9]分别赋值为0-9,通过第二个for循环的三次循环累加,求出结果为12,具体分析如下:
  i=l:k=0+arr[1]+l即k=2:
  i=2:k=2+arr[2]+2即k=6:
  i=3:k=6+arr[3]+3即k=12;

  (12)若a=10,b=20,则表达式!(a<b)的值是【7】。
  答案:【7】0
  评析:已知a=10,b=20,所以逻辑表达式a<b的值为true,即为1,在这个表达式前面有一个逻辑运算符!,表示反操作,所以整个语句的值应当为false,即为0。

  (13)有以下程序:
  int fa(int x){return x*x;}
  int fb(int x){return x*x*x;}
  int f(int(*f1)(),int(*f2)(),int x)
  {return f2(X)-n(x);}
  main()
  {int i;i=f(fa,fb,2);printf("%d\n",i);}
  程序运行后,输出结果是【8】。
  答案:【8】4
  评析:在主函数中调用函数f,函数f有三个参数,形参f1与f2分别是两个指向函数的指针。在f中执行r2(x)-f1(x),实际上是执行了fb(2).fa(2),故执行i=(fa,fb,2)后i的值为2^3-2^2=4。

  (15)下面程序的输出是【9】。
  main()
  {enum em{eml=3,em2=1,em3};
  char*aa[]={"AA","BB","CC","DD"};
  primf("%s%s%s\n",aa[eml],aa[em2],aa[em3]);
  }
  答案:【9】DDBBCC
  评析:c语言对枚举的定义规定:在枚举中声明的各个枚举元素,如果没有明确指出某个枚举元素的值,它的上一个元素存在并有明确值的情况下,这个枚举元素的值为其上一个元素的值+1。
  在本题中,没有明确说明枚举元素em3的值,则em3=em2+l=1+l=2,进而可知,在printf()打印函数中,要打印的数组元素是aa[3]、aa[1]、aa[2],因此最后的打印结果应当为"DDBBCC"。

  (16)若想通过以下输入语句使a=5.0,b=4,c=3,则输入数据的形式应该是【10】。
  int b,c;float a;
  scanf("%£%d,c=%d",&a,&b,&c)
  答案:【10】5.0,4,c=3

读书人网 >考试试题

热点推荐