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

  给定程序中,函数fun的功能是:将形参s所指字符串中的所有字母字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。 

  例如,s所指字符串为:asd123fgh543df,处理后新字符串为:asdfghdf123543。 


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


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


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


  给定源程序: 


  #include  


  #include  


  #include  


  char *fun(char *s) 


  { int i, j, k, n; char *p, *t; 


  n=strlen(s)+1; 


  t=(char*)malloc(n*sizeof(char)); 


  p=(char*)malloc(n*sizeof(char)); 


  j=0; k=0; 


  for(i=0; i  { if(((s[i]>=’a’)&&(s[i]<=’z’))||((s[i]>=’A’)&&(s[i]<=’Z’))) { 


  t[j]=__1__; j++;} 


  else 


  { p[k]=s[i]; k++; } 


  } 


  for(i=0; i<__2__; i++) t[j+i]=p[i]; 


  t[j+k]= __3__; 


  return t; 


  } 


  main() 


  { char s[80]; 


  printf("Please input: "); scanf("%s",s); 


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


  } 


 解题思路: 


  第一处:函数中申请了两个内存空间,其p是存放字母字符串,t是存放非字母字符串,根


  据条件可知,p依次存放字母字符串,其位置由j来控制,所以应填:s[i]。 


  第二处:利用for循环再把t中的内容依次追加到p中,其中t的长度为k,所以应填:k。 


  第三处:字符串处理好后必须添加字符串结束符,所以应填:’\0’。 


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


  给定程序MODI1.C中函数 fun 的功能是:将s所指字符串中最后一次出现的与 


  t1所指字符串相同的子串替换成t2所指字符串,所形成的新串放在w所指的数组中。 


  在此处,要求t1和t2所指字符串的长度相同。 


  例如,当s所指字符串中的内容为:"abcdabfabc",t1所指子串中的内容为: "ab",t2所指子串中的内容为:"99"时, 结果,在w所指的数组中的内容应为: 


  "abcdabf99c"。 


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


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


  给定源程序: 


  #include  


  #include  


  int fun (char *s, char *t1, char *t2 , char *w) 


  { 


  int i; char *p , *r, *a; 


  strcpy( w, s ); 


  while ( w ) 


  { p = w; r = t1; 


  while ( *r ) 


  IF ( *r == *p ) 


  { r++; p++; } 


  else break; 


  if ( *r == ’\0’ ) a = w; 


  w++; 


  } 


  r = t2; 


  while ( *r ){ *a = *r; a++; r++; } 


  } 


  main() 


  { 


  char s[100], t1[100], t2[100], w[100]; 


  printf("\nPlease enter string S:"); scanf("%s", s); 


  printf("\nPlease enter substring t1:"); scanf("%s", t1); 


  printf("\nPlease enter substring t2:"); scanf("%s", t2); 


  if ( strlen(t1)==strlen(t2) ) 


  { fun( s, t1, t2, w); 


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


  } 


  else printf("\nError : strlen(t1) != strlen(t2)\n"); 


  } 


 解题思路: 


  第一处:判断w指针所指的值是否是结束符,应改为:while(*w)。 


  第二处:if错写成If。 


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


  函数fun的功能是:将s所指字符串中ASCII值为奇数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。 


  例如,若s所指字符串中的内容为:"ABCDEFG12345",其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、… 都应当删除,其它依此类推。最后t所指的数组中的内容应是:"BDF24"。 


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


  请勿改动主函数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); 


  NONO(); 


  } 


 解题思路: 


  本题是从一个字符串按要求生成另一个新的字符串。我们使用for循环语句来解决这个问题。 


  参考答案: 


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


  { 


  int i, j = 0 ; 


  for(i = 0 ; i < strlen(s); i++) if(s[i] % 2==0) t[j++] = s[i] ; 


  t[j] = 0 ; 


  } 


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

就业数据资源平台