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

 给定程序的功能是调用fun函数建立班级通讯录。通讯录中记录每位学生的编号、姓名和电话号码。班级的人数和学生的信息从键盘读入,每个人的信息作为一个数据块写到名为myfile5.dat的二进制文件中。 

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


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


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


  给定源程序: 


  #include  


  #include  


  #define N 5 


  typedef struct 


  { int num; 


  char name[10]; 


  char tel[10]; 


  }STYPE; 


  void check(); 


  int fun(___1___ *std) 


  { 


  ___2___ *fp; int i; 


  if((fp=fopen("myfile5.dat","wb"))==NULL) 


  return(0); 


  printf("\nOutput data to file !\n"); 


  for(i=0; i  fwrite(&std[i], sizeof(STYPE), 1, ___3___); 


  fclose(fp); 


  return (1); 


  } 


  main() 


  { STYPE s[10]={ {1,"aaaaa","111111"},{1,"bbbbb","222222"},{1,"ccccc","333333"}, 


  {1,"ddddd","444444"},{1,"eeeee","555555"}}; 


  int k; 


  k=fun(s); 


  if (k==1) 


  { printf("Succeed!"); check(); } 


  else 


  printf("Fail!"); 


  } 


  void check() 


  { FILE *fp; int i; 


  STYPE s[10]; 


  if((fp=fopen("myfile5.dat","rb"))==NULL) 


  { printf("Fail !!\n"); exit(0); } 


  printf("\nRead file and output to screen :\n"); 


  printf("\n num name tel\n"); 


  for(i=0; i  { fread(&s[i],sizeof(STYPE),1, fp); 


  printf("m %s %s\n",s[i].num,s[i].name,s[i].tel); 


  } 


  fclose(fp); 


  }


 解题思路: 


  本题是要求把指定的学生记录输出到指定的文件中。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。 


  第一处:结构定义自变量,因此应填写STYPE。 


  第二处:在所填行的下面一行,使用fopen来创建一个二进制文件,但文件流的变量名fp已经给出,这样,此处只能填写FILE。 


  每三处:fwrite是把变量中的内容写入指定文件中,再根据fwrite参数的使用要求,所以只能填写文件流变量fp。 


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


  给定程序MODI1.C中函数fun的功能是:先将在字符串s中的字符按正序存放到t串中,然后把s中的字符按逆序连接到t串的后面。 


  例如:当s中的字符串为:"ABCDE"时,则t中的字符串应为:"ABCDEEDCBA"。 


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


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


  给定源程序: 


  #include  


  #include  


  void fun (char *s, char *t) 


  { int i, sl; 


  sl = strlen(s); 


  for( i=0; i<=s1; i ++) 


  t[i] = s[i]; 


  for (i=0; i   t[sl+i] = s[sl-i-1]; 


  t[sl] = ’\0’; 


  } 


  main() 


  { char s[100], t[100]; 


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


  fun(s, t); 


  printf("The result is: %s\n", t); 


  }


 解题思路: 


  第一处:变量sl错写成了s1。 


  第二处:新串t的字符串结束位置不正确,应该是两倍的sl距离。 


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


  函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上, b数的十位和个位数依次放在c数的百位和个位上。 


  例如,当a=45,b=12时,调用该函数后,c=4152。 


  注意: 部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。 


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


  给定源程序: 


  #include  


  void fun(int a, int b, long *c) 


  { 


  } 


  main() 


  { int a,b; long c; 


  printf("Input a, b:"); scanf("%d,%d", &a, &b); 


  fun(a, b, &c); 


  printf("The result is: %d\n", c); 


  NONO(); 


  } 


  解题思路: 


  本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。 


  取a十位数字的方法:a/10 


  取a个位数字的方法:a 


  参考答案: 


  void fun(int a, int b, long *c) 


  { 


  *c=(a/10)*1000+(b/10)*100+(a)*10+(b); 


  } 


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

就业数据资源平台