就业数据资源平台
当前位置:首页 > C语言程序设计
2013年计算机二级C语言上机习题2

  填空题
  程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。函数fun的功能是将形参a所指结构体变量中的数据赋给函数中的结构体变量b,并修改b中的学号和姓名,最后输出修改后的数据。例如:a所指变量中的学号、姓名、和三门课的成绩依次是:10001、"ZhangSan"、95、80、88,则修改后输出b中的数据应为:10002、"LiSi"、95、80、88。请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
  注意:源程序存放在考生文件夹下的BLANK1.C中。
  不得增行或删行,也不得更改程序的结构!
  给定源程序:
  #include <stdio.h>
  #include <string.h>
  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 <stdio.h>
  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 <stdio.h>
  void fun( char *a ) http://ks.examda.com
  {
  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';
  }

就业数据资源平台