就业数据资源平台
当前位置:首页 > C语言程序设计
2010年9月计算机等级考试二级C语言模拟试题(一)-3

 9.以下程序段的输出结果是____【11】____

  main


  {


  int a=2,b=3,c=4;


  a*=16+(b++)-(++c);


  printf(″%d″,a);


  }


  【参考答案】


  【11】 28


  10.设i,j,k均为int型变量,则执行完下面的for语句后,k的值为____【12】____。


  for(i=0,j=10;i<=j;i++,j--)k=i+j;


  【参考答案】


  【12】 10


  11.以下程序的输出结果是____【13】____。


  void fun()


  {


  static int a=0;


  a+=2;printf(″%d″,a);


  }


  main()


  {


  int cc;


  for(cc=1;cc<4;cc++)fun();


  printf(″\n″);


  }


  【参考答案】


  【13】246


 12.用以下语句调用库函数malloc,使字符指针st指向具有11个字节的动态存储空间,请填空。


  st=(char*)____【14】____。


  【参考答案】www.Examw.CoM


  【14】 malloc(11)或malloc(sizeof(char)*11)


  13.以下程序段打开文件后,先利用fseek函数将文件位置指针定位在文件末尾,然后调用ftell函数返回当前文件位置指针的具体位置,从而确定文件长度,请填空。


  FILE *myf;long f1;


  myf=____【15】____(″test.t″,″rb″);


  fseek(myf,0,SEEK_END);f1=ftell(myf);


  fclose(myf);


  printf(″%d\n″,f1);


  【参考答案】


  【15】 fopen


  14.以下程序的输出结果是____【16】____。


  main()


  { 〖ZK(〗int a=0;


  a+=(a=8);


  printf(″%d\n″,a);〖ZK)〗


  }


  【参考答案】


  【16】 16


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

  P=〖SX(〗m!〖〗n!(m-n)!〖SX)〗


  例如: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++)____【17】____;


  for(i=1;i<=n;i++)____【18】____;


   for(i=1;i<=m-n;i++)p=p/i;


  return p;


  }


  main()


  { clrscr();


  printf(″p=%f\n″,fun(12,8));


  }


  【参考答案】


  【17】 p=p*i 【18】 p=p/i


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


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


  #include


  #include


  #define M 81


  int fun(char * ss,char c)


  { int i=0;


   for(____【19】____;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));


  }


  【参考答案】


  【19】 *ss!=′\0


17.设有如下宏定义

  #define MYSWAP(z,x,y)


  {z=x;x=y;y=z;}


  以下程序段通过宏调用实现变量a,b内容交换,请填空。


  float a=5,b=16,c;


  MYSWAP(____【20】____,a,b);


  【参考答案】


  【20】 c


  上机部分


  一、填空题


  给定程序中,函数fun的功能是:将形参n中各位上为偶数的数取出,按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。


  例如,从主函数输入一个整数27638496,函数返回值为26846。


  请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。


  注意:不得增行或删行,也不得更改程序的结构!


#include


  unsigned long fun(unsigned long n)


  {


  unsigned long x=0,s,i;


  int t;


  s=n;


  i= 1 ;


  while( 2 )


  {


  t=s;


  if(t%2==0)


  {


  x=x+t*i; i= ( 3 ) ;


  }


  s=s/10;


  }


  return x;


  }


  main()


  {


  unsigned long n=-1;


  while(n>99999999||n<0)


  {


  printf("input(0

  }


  printf("\nThe result is: %ld\n",fun(n));


  }


  【参考答案】


  (1)1或1L


  (2)s>0或s!=0或s


  (3)i*10


  【解析】


  (1)从x=x+t*i;语句,可以看到i是将t放到正确数位上的幂指数,相当于t*10n,空1给i赋初值,连乘的初值为1,因此应填入:1或1L。(2)空2是考查对循环条件表达式的判断,由于是取s每一位上的数给t,判断是否为偶数,同时s除10,显然s的值越来越小,当s不为零时,继续循环,因此应填入:s>0或s!=0或s。(3)空3是对i进行操作,由于随着循环的进行,所取出的数t的幂指数越来越大,每次增大10,因此应填入:i*10。


 二、改错题

  给定程序中,函数fun的功能是:根据整型形参m,计算如下公式的值:


  y=1+1/(2*2)+1/(3*3)+1/(4*4)+…+1/(m*m)


  例如:若m中的值为5,则应输出1.463611。


  请改正程序中的错误,使其能得出正确的结果。


  注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!


  #include


  double fun(int m)


  {


  double y=1.0;


  int i;


  for(i=2;i

  y+=1/(i*i);


  return(y);


  }


  main()


  {


  int n=5;


  printf("\nThe result is %lf\n", fun(n));


  }


【参考答案】


  (1)将for(i=2;i

  (2)将y+=1/(i*i); 改为:y +=1.0/(i*i);


  【解析】


  (1)第1处错误for循环的终止条件是i

  三、编程题


  函数fun的功能是:将s所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的数组中。


  例如,若s所指字符串中的内容为“ABCDEFG 123456”,其中字符A的ASCII码值为奇数,因此应当删除;其中字符B的ASCII码值为偶数,但在数组中的下标为奇数,因此也应当删除;而字符2的ASCII码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其他依此类推。最后,t所指的数组中的内容应是“246”。


  注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。


 #include

  #include


  void fun(char *s, char t[])


  {


  }考试用书


  main()


  {


  char s[100],t[100];


  printf("\nPlease enter string S:");


  scanf("%s", s);


  fun(s,t);


  printf("\nThe result is: %s\n",t);


  }


  【参考答案】


  #include


  #include


  void fun(char *s,char t[])


  {


  int k,n=0;


  for(k=0;k

  if(k%2==0 && s[k]%2==0)


  t[n++]=s[k];


  t[n]= '\0';


  }


  main()


  {


  char s[100],t[100];


  printf("\nPlease enter string S:");


  scanf("%s", s);


  fun(s,t);


  printf("\nThe result is: %s\n",t);


  }


  【解析】


(1)本题主要考查对奇偶数的判断以及库函数strlen的使用。根据题意可知,只保留下标为偶数、同时ASCII值也为偶数的字符,这就需要用循环变量k将字符串查看一遍,逐个字符判断是否满足条件k%2== 0 && s[k]%2==0,并将满足条件的字符复制到t中,再设一个计数器变量n,统计复制到t的字符数。复制完毕,在串尾设字符串结束符'\0'。{


  (2)按上述解析写出的函数是:


  void fun(char *s,char t[])


  {


  int k,n=0;


  for(k=0;k

  if(k%2==0 && s[k]%2==0)


  t[n++]=s[k];


  t[n]= '\0';


  }

就业数据资源平台