模拟试题

3773考试网计算机等级考试模拟试题正文

2014年3月全国计算机二级C语言上机模拟试题三十九之3

来源:2exam.com 2013-10-30 10:24:07

 解题思路: 

  第一处: 存放字符串初始位置也是从0开始存放的,由于k是控制c字符串的位置值,所以k值应为0。 

  第二处: 判断两个字符串中是否有字符串结束符产生,所以应改为:while( *p || *q ), 

  而不是两字符串中对应位置的值不相等。 

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

  假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导的*号之外,将串中其它*号全部删除。在编写函数时,不得使用C语言提供 

  的字符串函数。函数fun中给出的语句仅供参考。 

  例如,字符串中的内容为:****A*BC*DEF*G*******,删除后, 字符串中的内容应当是:****ABCDEFG。 

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

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

  给定源程序: 

  #include  

  void fun( char *a ) 

  { 

  int i=0,k; 

  while(a[i]==’*’) i++; 

  k=i+1; 

  while(a[i]!=’\0’) /* 以下程序段实现非*字符前移 */ 

  { 

  } 

  a[i+1]=’\0’; 

  } 

  main() 

  { char s[81]; 

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

  fun( s ); 

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

  NONO(); 

  }

  解题思路: 

  本题是考察字符串的操作。 

  1. 使用while循环语句求出字符串前导*号的个数。 

  2. 使用while循环语句判断a[i]是否是字符串结束符标志,如果不是字符串结束标志,则再判断是否是字符*号,如果不是*号,则把a[i]字符存入a[k]中,如果是*号则跳过该*号,直至字符串结束为止。 

  参考答案: 

  void fun( char *a ) 

  { 

  int i=0,k; 

  while(a[i]==’*’) i++; 

  k=i; 

  while(a[i]!=’\0’) /* 以下程序段实现非*字符前移 */ 

  { 

  if(a[i] != ’*’) a[k++]=a[i]; 

  i++; 

  } 

  a[k]=’\0’; 

  } 

触屏版 电脑版
3773考试网 琼ICP备12003406号-1