当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
2015计算机等级考试四级试题精练(2)
发布时间:2010/9/24 10:51:16 来源:www.xue.net 编辑:城市总裁吧

  题目:

  已知数据文件IN.DAT中存有200个四位数, 并已调用读函数 readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:从数组a的头开始,依次取每20个数中的最大值组成一个数, 这样可以获得10个新数并存入数组b中,接着把数组b中的数按从小到大的顺序重新存入数组b中。最后main()函数调用写函 数writeDat()把结果b输出到OUT.DAT文件中。

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

  程序中已定义: a[200]、b[10]

  请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。

  初始化程序:

  #include

  #define MAX 200

  int a[MAX], b[10];

  void jsVal()

  {

  }

  void readDat()

  {

  int i ;

  FILE *fp ;

  fp = fopen(in.dat, r) ;

  for(i = 0 ; i < MAX ; i++) fscanf(fp, %d, &a[i]) ;

  fclose(fp) ;

  }

  void main()

  {

  int i ;

  readDat() ;

  jsVal() ;

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

  printf(b[%d]=%d\n, i, b[i]) ;

  writeDat() ;

  }

  writeDat()

  {

  FILE *fp ;

  int i ;

  fp = fopen(out.dat, w) ;

  for(i = 0 ; i < 10 ; i++) fprintf(fp, %d\n, b[i]) ;

  fclose(fp) ;

  }

  参考答案:

  #include

  #define MAX 200

  int a[MAX], b[10];

  void jsVal()

  {

  int i,j,k; /* j,k,i-循环变量 */

  int iMax;

  for(i=0;i<10;i++) /* 根据取数要求循环 */

  {

  iMax=0;

  for(j=i*20;j<(i+1)*20;j++) if(iMaxb[i]=iMax;

  for(j=0;j{

  if(b[j]>iMax) /* 在b中寻找dt的位置 */

  {

  for(k=i;k>j;k--) b[k]=b[k-1]; /* 顺序移动 */

  b[j]=iMax;

  break;

  }

  }

  }

  }

  void readDat()

  {

  int i ;

  FILE *fp ;

  fp = fopen(in.dat, r) ;

  for(i = 0 ; i < MAX ; i++) fscanf(fp, %d, &a[i]) ;

  fclose(fp) ;

  }

  void main()

  {

  int i ;

  readDat() ;

  jsVal() ;

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

  printf(b[%d]=%d\n, i, b[i]) ;

  writeDat() ;

  }

  writeDat()

  {

  FILE *fp ;

  int i ;

  fp = fopen(out.dat, w) ;

  for(i = 0 ; i < 10 ; i++) fprintf(fp, %d\n, b[i]) ;

  fclose(fp) ;

  }

  本题评析:

  本题,是一道考察循环和数组排序的题目,通过20个一个平均一般可以安排两层循环,结合本题获得10个最大值的要求,在外层安排0-9的循环。

  数组的排序一般可以使用冒泡和二分等算法排序,在本题目中,加入的因素是可以在获得数据后直接在数组中寻找到合适的位置,这样我们可以假设b已经是有序的数组,可以简化程序

广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved