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

 程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。函数fun的功能是将形参a所指结构体变量中的数据赋给函数中的结构体变量b,并修改b中的学号和姓名,最后输出修改后的数据。例如:a所指变量中的学号、姓名、和三门课的成绩依次是:10001、"ZhangSan"、95、80、88,则修改后输出b中的数据应为:10002、"LiSi"、95、80、88。请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 

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


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


  给定源程序: 


  #include  


  #include  


  struct student { 


  long sno; 


  char name[10]; 


  float score[3]; 


  }; 


  void fun(struct student a) 


  { struct student b; int i; 


  b = __1__; 


  b.sno = 10002; 


  strcpy(__2__, "LiSi"); 


  printf("\nThe data after modified :\n"); 


  printf("\nNo: %ld Name: %s\nScores: ",b.sno, b.name); 


  for (i=0; i<3; i++) printf("%6.2f ", b.__3__); 


  printf("\n"); 


  } 


  main() 


  { struct student s={10001,"ZhangSan", 95, 80, 88}; 


  int i; 


  printf("\n\nThe original data :\n"); 


  printf("\nNo: %ld Name: %s\nScores: ",s.sno, s.name); 


  for (i=0; i<3; i++) printf("%6.2f ", s.score[i]); 


  printf("\n"); 


  fun(s); 


  }


 解题思路: 


  本题是对结构体变量中的值进行修改。 


  第一处:要修改的结构体变量是由形参a来传递的,所以应填:a。 


  第二处:对结构体中的成员name进行替换,所以应填:b.name。 


  第三处:分别输出结构体中的成绩,所以应填:score[i]。 


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


  给定程序MODI1.C中函数fun的功能是:从s所指字符串中删除所有小写字母c。 


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


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


  给定源程序: 


  #include  


  void fun( char *s ) 


  { int i,j; 


  for(i=j=0; s[i]!=’\0’; i++) 


  if(s[i]!=’c’) 


  s[j]=s[i]; 


  s[i]=’\0’; 


  } 


  main() 


  { char s[80]; 


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


  printf("The original string: "); puts(s); 


  fun(s); 


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


  }  


 解题思路: 


  第一处: 新字符串的位置值是由变量j来控制的,但程序中字符赋值后没有对j进行增量的语句,所以应改为:s[j++]=s[i];。 


  第二处: 对新字符串添加字符串结束符,由于程序中使用变量j对新字符串来控制的,所以应改为:s[j]=0;。 


  假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字 符串中的前导*号全部移到字符串的尾部。函数fun中给出的语句仅供参考。 


  例如,字符串中的内容为:*******A*BC*DEF*G****,移动后,字符串中的内 


  容应当是:A*BC*DEF*G***********。在编写函数时, 不得使用C语言提供的字符串函数。 


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


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


  给定源程序: 


  #include  


  void fun( char *a ) 


  { 


  char *p,*q; 


  int n=0; 


  p=a; 


  while(*p==’*’) /* 统计串头’*’个数n */ 


  {n++; p++;} 


  q=a; 


  /* 向前复制字符串,请填写相应的语句完成其功能 */ 


  for(;n>0;n--) /* 在串尾补n个’*’ */ 


  *q++=’*’; 


  *q=’\0’; 


  } 


  main() 


  { char s[81],*p; int n=0; 


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


  fun( s ); 


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


  NONO(); 


  } 


 解题思路: 


  本题是考察字符串的移动。具体操作请看参考源程序。 


  参考答案: 


  void fun( char *a ) 


  { 


  char *p,*q; 


  int n=0; 


  p=a; 


  while(*p==’*’) /* 统计串头’*’个数n */ 


  {n++; p++;} 


  q=a; 


  /* 向前复制字符串,请填写相应的语句完成其功能 */ 


  while(*p) { 


  *q=*p; 


  p++;q++; 


  } 


  for(;n>0;n--) /* 在串尾补n个’*’ */ 


  *q++=’*’; 


  *q=’\0’; 


  } 


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

就业数据资源平台