计算机三级信息管理技术上机考试试题二(附答案)
来源:优易学  2010-1-20 17:20:20   【优易学:中国教育考试门户网】   资料下载   IT书店

已知数据文件IN.dat中存有200个四位数,并已调用读函数RData()把这些数存入数组a中,请编写函数evenVal(),其功能是:依次从数组a中取出一个四位数,如果该四位数连续大于该四位数以前的5个数且该数是偶数(该四位数以前不满5个数,则不统计),则统计出满足此条件的个数count并把这些四位数按从大到小的顺序存入数组b中。最后调用写函数WData(),把结果count以及数组b中符合条件的四位数输出到OUT.dat文件中。

注意:部分源程序已经给出。程序中已定义数组a[200]b[200],已定义变量count。请勿改动数据文件IN.dat中的任何数据及主函数main()、读函数RData()和写函数WData()的内容。

#include <stdio.h>

#define  MAX 200

int  a[MAX], b[MAX], count = 0;

void evenVal()

{

 

}

void RData()

{    int  i;

      FILE  *fp;

      fp = fopen("IN.dat", "r");

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

                fscanf(fp, "%d,", &a[i]);

      fclose(fp);

}

void WData()

{    FILE  *fp;

      int  i;

      fp = fopen("OUT.dat", "w");

      fprintf(fp, "%d\n", count);

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

                fprintf(fp, "%d\n", b[i]);

      fclose(fp);

}

void main()

{    int  i;

      RData();

      evenVal();

      printf("满足条件的数=%d\n", count);

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

                printf("%d ", b[i]);

      printf("\n");

      WData();

}

 

试题答案及详解

【审题分析】分析题目可知,本题只要实现evenVal()函数的功能即可。evenVal()要实现的功能是:依次从数组a中取出一个四位数,如果该四位数连续大于该四位数以前的五个数且该数是偶数(该四位数以前不满五个数,则不统计),则统计出满足此条件的个数count并把这些四位数按从大到小的顺序存入数组b中。因此解答本题的关键在于比较几个四位数的大小。

【解题思路】对数组a中的数据从第六个到最后一个进行逐个扫描判断其前面连续5个数是否都小于此数,如果这个条件成立,则设标志变量flag的值为1,否则设置标志变量flag的值为0,并退出循环,进入下一轮循环。当标志变量flag的值为1,并且这个数对2的余数为0时,这个数即是符合题目条件的数,将其输入到数组b中,同时计数变量count1。最后利用两重循环语句对数组b进行从大到小的排序。

【参考答案】

void evenVal()

{   int  i, j, flag = 0;

     for (i=5; i<MAX; i++)

     {     for (j=i-5; j<i; j++)

                   if (a[i] > a[j])

                   {     flag = 1;

                   }

                   else

                   {     flag = 0;

                          break;

                   }

            if (flag==1 && a[i]%2==0)

            {     b[count] = a[i];

                   count++;

            }

     }

     for (i=0; i<count-1; i++)

            for (j=i+1; j<count; j++)

                   if (b[i] < b[j])

                   {     flag = b[i];

                          b[i] = b[j];

                          b[j] = flag;

                   }

}

【易错分析】因为一个四位数要大于其前面连续五个数,所以对数组a中的数据扫描应该从第六个数开始。为了记录数据a[i]前面连续5个数都小于此数,采用标志变量flag进行标记。

【考点链接】C语言for循环语句、数组排序算法。

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训