就业数据资源平台
当前位置:首页 > C语言程序设计
2014年计算机二级C语言上机模拟试题42

 给定程序中,函数fun的功能是:在形参ss所指字符串数组中查找与形参t所指字符串相同的串,找到后返回该串在字符串数组中的位置(下标值),未找到则返回-1。ss所指字符串数组中共有N个内容不同的字符串,且串长小于M。请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 

  注意:源程序存放在考生文件夹下的BLANK1.C中。 


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


  给定源程序: 


  #include  


  #include  


  #define N 5 


  #define M 8 


  int fun(char (*ss)[M],char *t) 


  { int i; 


  for(i=0; i< __1__ ; i++) 


  if(strcmp(ss[i],t)==0 ) return __2__ ; 


  return -1; 


  } 


  main() 


  { char ch[N][M]={"if","while","switch","int","for"},t[M]; 


  int n,i; 


  printf("\nThe original string\n\n"); 


  for(i=0;i  printf("\nEnter a string for search: "); gets(t); 


  n=fun(ch,t); 


  if(n== __3__) printf("\nDon’t found!\n"); 


  else printf("\nThe position is %d .\n",n); 


  } 


 解题思路: 


  本题是考察在字符串查找指定的子串。  


  第一处:利用for循环,从几个字符串中进行查找,程序中已经给定了N个字符串,所以应填:N。 


  第二处:在字符串已经找到,则返回字符串数组中的位置(下标值),所以应填:i。 


  第三处:如果没有发现,则显示没有找到信息,所以应填:-1。 


  *************************************************** 


  给定程序MODI1.C中函数fun的功能是:从整数1到55之间,选出能被3整除、且有一位上的数是5的那些数,并把这些数放在b所指的数组中,这些数的个数作为函数值返回。规定,函数中a1放个位数,a2放十位数。 


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


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


  给定源程序: 


  #include  


  fun( int *b ) 


  { int k,a1,a2,i=0; 


  for(k=10; k<=55; k++) { 


  a2=k/1O; 


  a1=k-a2*10; 


  if((k%3==0 && a2==5)||(k%3==0 && a1==5)) 


  { b[i]=k; i++; } 


  } 


  return k; 


  } 


  main( ) 


  { int a[100],k,m; 


  m=fun( a ); 


  printf("The result is :\n"); 


  for(k=0; k  } 


 解题思路: 


  第一处: 取当前变量k的十位数字上的数,所以应改为:a2=k/10;。 


  第二处: 要求统计个数并存入变量i中,最后返回i,所以应改为:return i;。 


  *************************************************** 


  假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串尾部的*号全部删除,前面和中间的*号不删除。 


  例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:****A*BC*DEF*G。在编写函数时,不得使用C语言提供的字符串函数。 


  注意: 部分源程序在文件PROG1.C文件中。 


  请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 


  给定源程序: 


  #include  


  void fun( char *a ) 


  { 


  } 


  main() 


  { char s[81]; 


  printf("Enter a string:\n");gets(s); 


  fun( s ); 


  printf("The string after deleted:\n");puts(s); 


  NONO(); 


  } 


  解题思路: 


  本题是考察字符串的移动。 


  1. 使用while循环语句和字符串指针p扫描出尾部的*号。 


  2. 定义两个字符串中间变量s和t,其中s是存放*号后面的字符串,t是存放*号字符串。 


  3. 最后利用字符串拷贝和连接,重新组成字符串a。 


  参考答案: 


  void fun( char *a ) 


  { 


  char *p = a ; 


  while(*p) p++ ; p-- ; 


  while(*p == ’*’) p-- ; 


  p++ ; 


  *p = 0 ; 


  } 


  ※※※※※※※※※※※※※※※※※※※※※※※※※

就业数据资源平台