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

 给定程序中,函数fun的功能是将参数给定的字符串、整数、浮点数写到文本 

  文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi和atof将 


  字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。 


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


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


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


  给定源程序: 


  #include <stdio.h> 


  #include <stdlib.h> 


  void fun(char *s, int a, double f) 


  { 


  __1__ fp; 


  char str[100], str1[100], str2[100]; 


  int a1; double f1; 


  fp = fopen("file1.txt", "w"); 


  fprintf(fp, "%s %d %f\n", s, a, f); 


  __2__ ; 


  fp = fopen("file1.txt", "r"); 


  fscanf(__3__,"%s%s%s", str, str1, str2); 


  fclose(fp); 


  a1 = atoi(str1); 


  f1 = atof(str2); 


  printf("\nThe result :\n\n%s %d %f\n", str, a1, f1); 


  } 


  main() 


  { char a[10]="Hello!"; int b=12345; 


  double c= 98.76; 


  fun(a,b,c); 


  } 


  解题思路: 


  本题是考察先把给定的数据写入到文本文件中,再从该文件读出并转换成相应的整数、浮点数显示在屏幕上。 


  第一处:定义文本文件类型变量,所以应填:FILE *。 


  第二处:关闭刚写入的文件,所以应填:fclose(fp)。 


  第三处:从文件中读出数据,所以应填:fp。 


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


  给定程序MODI1.C中函数fun的功能是: 对N名学生的学习成绩,按从高到低的顺序找出前m(m≤10)名学生来, 并将这些学生数据存放在一个动态分配的连续存储区中, 此存储区的首地址作为函数值返回。 


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


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


 给定源程序: 


  #include <stdio.h> 


  #include <alloc.h> 


  #include <string.h> 


  #define N 10 


  typedef struct ss 


  { char num[10]; 


  int s; 


  } STU; 


  STU *fun(STU a[], int m) 


  { STU b[N], *t; 


  int i,j,k; 


  t=(STU *)calloc(sizeof(STU),m) 


  for(i=0; i<N; i++) b[i]=a[i]; 


  for(k=0; k<m; k++) 


  { for(i=j=0; i<N; i++) 


  if(b[i].s > b[j].s) j=i; 


  t(k)=b(j); 


  b[j].s=0; 


  } 


  return t; 


  } 


  outresult(STU a[], FILE *pf) 


  { int i; 


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


  fprintf(pf,"No = %s Mark = %d\n", a[i].num,a[i].s); 


  fprintf(pf,"\n\n"); 


  } 


  main() 


  { STU a[N]={ {"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77}, 


  {"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71} }; 


  STU *pOrder; 


  int i, m; 


  printf("***** The Original data *****\n"); 


  outresult(a, stdout); 


  printf("\nGive the number of the students who have better score: "); 


  scanf("%d",&m); 


  while( m>10 ) 


  { printf("\nGive the number of the students who have better score: "); 


  scanf("%d",&m); 


  } 


  pOrder=fun(a,m); 


  printf("***** THE RESULT *****\n"); 


  printf("The top :\n"); 


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


  printf(" %s %d\n",pOrder[i].num , pOrder[i].s); 


  free(pOrder); 


  } 


  解题思路: 


  第一处: 语句最后缺少分号。 


  第二处: 应该使用方括号,而不是圆括号。 


  像此类,使用编译,即可发现。 


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


  请编写函数fun, 函数的功能是: 删去一维数组中所有相同的数, 使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。 


  例如, 一维数组中的数据是: 2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10。 


  删除后,数组中的内容应该是: 2 3 4 5 6 7 8 9 10。 


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


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


 给定源程序: 


  #include <stdio.h> 


  #define N 80 


  int fun(int a[], int n) 


  { 


  } 


  main() 


  { int a[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20; 


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


  for(i=0; i<n; i++)printf("%3d",a[i]); 


  n=fun(a,n); 


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


  for(i=0;i<n;i++)printf("%3d",a[i]); printf("\n\n"); 


  NONO(); 


  } 


  解题思路: 


  本题是删除已排序过数组中的相同数。 


  1. 取出数组中的第1个数存放在临时变量k中,再利用for循环来依次判断所有的数。 


  2. 如果取出的数和k相比,如果不相同,则仍存放在原数组中,其中存放的位置由j来控制, 接着把这个数重新存入k。如果相同,则取下一数。 


  参考答案: 


  int fun(int a[], int n) 


  { 


  int i, j = 1, k = a[0] ; 


  for(i = 1 ; i < n ; i++) 


  if(k != a[i]) { 


  a[j++]=a[i] ; 


  k = a[i] ; 


  } 


  a[j] = 0 ; 


  return j ; 


  } 

就业数据资源平台