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

  填空题
  给定程序的功能是:调用函数fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回值为1,失败时返回值为0。在复制的过程中,把复制的内容输出到终端屏幕。主函数中源文件名放在变量sfname中,目标文件名放 在变量tfname中。
  请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
  注意:源程序存放在考生文件夹下的BLANK1.C中。
  不得增行或删行,也不得更改程序的结构!
  给定源程序:
  #include <stdio.h>
  #include <stdlib.h>
  int fun(char *source, char *target)
  { FILE *fs,*ft; char ch;
  if((fs=fopen(source, ___1___))==NULL)
  return 0;
  if((ft=fopen(target, "w"))==NULL)
  return 0;
  printf("\nThe data in file :\n");
  ch=fgetc(fs);
  while(!feof(___2___))
  { putchar( ch );
  fputc(ch,___3___);
  ch=fgetc(fs);
  }
  fclose(fs); fclose(ft);
  printf("\n\n");
  return 1;
  }
  main()
  { char sfname[20] ="myfile1",tfname[20]="myfile2";
  FILE *myf; int i; char c;
  myf=fopen(sfname,"w");
  printf("\nThe original data :\n");
  for(i=1; i<30; i++){ c='A'+rand()%25;fprintf(myf,"%c",c); printf("%c",c); }
  fclose(myf);printf("\n\n");
  if (fun(sfname, tfname)) printf("Succeed!");
  else printf("Fail!");
  }
  解题思路:
  本题要求是把一个文件中的内容复制到另一个文件中。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。
  第一处:要求打开一个读方式的源文件,因此可以填上"r"或"r+"。打开读文件操作的流是fs。
  第二处:用while循环来判断源文件是否已读到文件结束符,int feof(FILE *stream),因此,此处只能填写fs。
  第三处:把已经读取的字符写入目标文件中,打开写文件操作的流是ft,因此,此处只能填写ft。


  改错题
  给定程序MODI1.C中函数fun的功能是:将长整型数中每一位上为偶数的数依 次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。 例如,当s中的数为:87653142时,t中的数为:8642。
  请改正程序中的错误,使它能得出正确的结果。
  注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
  给定源程序:
  #include <stdio.h>
  void fun (long s, long *t)
  { int d;
  long sl=1;
  *t = 0;
  while ( s > 0)
  { d = s%10;
  if (d%2=0)
  { *t=d* sl+ *t;
  sl *= 10;
  }
  s \= 10;
  }
  }
  main()
  { long s, t;
  printf("\nPlease enter s:"); scanf("%ld", &s);
  fun(s, &t);
  printf("The result is: %ld\n", t);
  }
  解题思路:
  第一处:判断相等的条件是==。
  第二处:整除的符号是/。

  编程题
  函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的十位和千位上, b数的十位和个位数依次放在c数的百位和个位上。
  例如,当a=45,b=12时,调用该函数后,c=5142。
  注意: 部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。
  请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
  给定源程序:
  #include <stdio.h>
  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: %ld\n", c);
  NONO();
  }
  解题思路:
  本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。
  取a十位数字的方法:a/10
  取a个位数字的方法:a%10
  参考答案:
  void fun(int a, int b, long *c)
  {
  *c=(a%10)*1000+(b/10)*100+(a/10)*10+(b%10);
  }

就业数据资源平台