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

 给定程序中,函数fun的功能是根据形参i的值返回某个函数的值。当调用正确时, 程序输出: 

  x1=5.000000, x2=3.000000, x1*x1+x1*x2=40.000000 


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


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


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


  给定源程序: 


  #include <stdio.h> 


  double f1(double x) 


  { return x*x; } 


  double f2(double x, double y) 


  { return x*y; } 


  __1__ fun(int i, double x, double y) 


  { if (i==1) 


  return __2__(x); 


  else 


  return __3__(x, y); 


  } 


  main() 


  { double x1=5, x2=3, r; 


  r = fun(1, x1, x2); 


  r += fun(2, x1, x2); 


  printf("\nx1=%f, x2=%f, x1*x1+x1*x2=%f\n\n",x1, x2, r); 


  } 


  解题思路: 


  本题是根据给定的公式来计算函数的值。 


  第一处:程序中使用双精度double类型进行计算,所以函数的返回值类型也为double,所以应填:double。 


  第二处:当i等于1时,则返回f1函数的值,所以应填:f1。 


  第三处:如果i不等于1,则返回f2函数的值,所以应填:f2。 


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


  给定程序MODI1.C中函数fun的功能是: 比较两个字符串,将长的那个字符串的首地址作为函数值返回。 


  请改正函数fun中指定部位的错误, 使它能得出正确的结果。 


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


 给定源程序: 


  #include <stdio.h> 


  char fun(char *s, char *t) 


  { int sl=0,tl=0; char *ss, *tt; 


  ss=s; tt=t; 


  while(*ss) 


  { sl++; 


   (*ss)++; 


  } 


  while(*tt) 


  { tl++; 


   (*tt)++; 


  } 


  if(tl>sl) return t; 


  else return s; 


  } 


  main() 


  { char a[80],b[80],*p,*q; int i; 


  printf("\nEnter a string : "); gets(a); 


  printf("\nEnter a string again : "); gets(b); 


  printf("\nThe longer is :\n\n\"%s\"\n",fun(a,b)); 


  } 


  解题思路: 


  第一处: 试题要求返回字符串的首地址,所以应改为:char *fun(char *s,char *t) 


  第二处: 取字符串指针ss的下一个位置,所以应改为:ss++;。 


  第三处:取字符串指针tt的下一个位置,所以应改为:tt++;。 


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


  请编写函数fun,函数的功能是: 移动字符串中的内容,移动的规则如下: 把第1到第m个字符, 平移到字符串的最后, 把第m+1到最后的字符移到字符串的前部。 


  例如, 字符串中原有的内容为: ABCDEFGHIJK, m的值为3, 则移动后, 字符串中的内容应该是: DEFGHIJKABC。 


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


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


  给定源程序: 


  #include <stdio.h> 


  #include <string.h> 


  #define N 80 


  void fun1(char *w) /* 本函数的功能是将字符串中字符循环左移一个位置 */ 


  { 


  int i; char t; 


  t=w[0]; 


  for(i=0;i<strlen(w)-1;i++) 


  w[i]=w[i+1]; 


  w[strlen(w)-1]=t; 


  } 


  void fun(char *w, int m) /* 可调用fun1函数左移字符 */ 


  { 


  } 


  main() 


  { char a[N]= "ABCDEFGHIJK"; 


  int m; 


  printf("The original string:\n");puts(a); 


  printf("\n\nEnter m: ");scanf("%d",&m); 


  fun(a,m); 


  printf("\nThe string after moving:\n");puts(a); 


  printf("\n\n"); 


  NONO(); 


  }


 解题思路: 


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


  1. 由于函数fun1是将字符串中字符循环左移一个位置,并通过实参w返回循环左移一个位置的字符串。 


  2. 利用循环for语句来操作多少个字符(m)需要循环左移。 


  参考答案: 


  void fun1(char *w) /* 本函数的功能是将字符串中字符循环左移一个位置 */ 


  { 


  int i; char t; 


  t=w[0]; 


  for(i=0;i<strlen(w)-1;i++) 


  w[i]=w[i+1]; 


  w[strlen(w)-1]=t; 


  } 


  void fun(char *w, int m) /* 可调用fun1函数左移字符 */ 


  { 


  int i; 


  for(i = 0 ; i < m ; i++) fun1(w); 


  } 


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

就业数据资源平台