1、三级数据库技术机试-158 及答案解析(总分:100.00,做题时间:90 分钟)1.已知 IN7.DAT中存有 200个 4位数,并已调用读函数 readDat()把这些数存入数组 a中,请编制一函数jsVal(),其功能是:依次从数组 a中取出一个数,如果该 4位数连续大于该 4位数以后的 5个数且该数是奇牧,则统计出满足此条件的数的个数 cnt,并把这些 4位数按从小到大的顺序存入数组 b中,最后调用写函牧 writeDat()把结果 cnt及数组 b中符合条件的 4位数输出到 OUT7.DAT文件中。注意:部分源程序已给出。程序中已定义数组:a200,b200,已定义变量:cnt。请勿
2、改动主函数 main()、读函数 readDat()和写函数 wfiteDat()的内容。试题程序:#includestdio.h#define MAX 200int aMAX,bMAX,cnt=0;void writeDat();void jsVal()void readDat()int i;FILE * fp;fp=fopen(“IN7.DAT“,“r“);for(i = 0; i MAX; i+) fscanf(fp,“d“, readDat();jsVal();printf(“满足条件的数=%d/n“, cnt);for(i=0; i cnt; i+ printf(“%d “, bi)
3、;printf(“/n“);writeDat()void writeDat )FILE * fp;int i;fp = fopen(“OUT7.DAT“, “w“);fprintf(fp, “%d/n“, cnt);for(i = 0; i cnt; i+) fprintf(fp, “%d/n“, bi);fclose(fp);(分数:100.00)_三级数据库技术机试-158 答案解析(总分:100.00,做题时间:90 分钟)1.已知 IN7.DAT中存有 200个 4位数,并已调用读函数 readDat()把这些数存入数组 a中,请编制一函数jsVal(),其功能是:依次从数组 a中取出
4、一个数,如果该 4位数连续大于该 4位数以后的 5个数且该数是奇牧,则统计出满足此条件的数的个数 cnt,并把这些 4位数按从小到大的顺序存入数组 b中,最后调用写函牧 writeDat()把结果 cnt及数组 b中符合条件的 4位数输出到 OUT7.DAT文件中。注意:部分源程序已给出。程序中已定义数组:a200,b200,已定义变量:cnt。请勿改动主函数 main()、读函数 readDat()和写函数 wfiteDat()的内容。试题程序:#includestdio.h#define MAX 200int aMAX,bMAX,cnt=0;void writeDat();void jsV
5、al()void readDat()int i;FILE * fp;fp=fopen(“IN7.DAT“,“r“);for(i = 0; i MAX; i+) fscanf(fp,“d“, readDat();jsVal();printf(“满足条件的数=%d/n“, cnt);for(i=0; i cnt; i+ printf(“%d “, bi);printf(“/n“);writeDat()void writeDat )FILE * fp;int i;fp = fopen(“OUT7.DAT“, “w“);fprintf(fp, “%d/n“, cnt);for(i = 0; i cnt
6、; i+) fprintf(fp, “%d/n“, bi);fclose(fp);(分数:100.00)_正确答案:(void jsVal()int i,j,flag=0;int k;for (i=0; iMAX-5; i+)for(j=i+1;j=i+5,j+) /*如果当前数比后面的 5个数都大,则给标志变量 flag赋值 1*/if (aiaj)flag=1;else flag=0;break; /*否则给标志变量 flag赋值 0并退出循环*/if (a i %2=0) /*如果该数是偶数,也给标志变量 flag赋值 0*/flag=0;if (flag=1) /*将满足条件的数存入数
7、组 b中,并统计满足条件的数的个数*/bcnt=ai ;cnt+;for (i=0; icnt-1; i+ ) /*利用选择法对 b数组中的元素进行从小到大的排序*/for (j =i+1; jcnt; j+)if (bibj)k=bi ;bi=bj;bj=k;)解析:解析根据题意可知,要编制函数的功能有两部分:一是找出满足条件的 4位数,二是对找出的数进行从小到大排序。首先利用一个 for循环来依次从数组中取得 4位数,接着用当前得到的 4位数与该数后面的 5个数依次进行比较,如果该数比后面的 5个数都大,则给标志变量 flag赋值 1,接着对 flag进行判断,如果不为 1,则该数肯定不符合条件,直接去取下一个数。若 flag值为 1,再来判断该数是否是奇数,如果该数又是奇数,则把该数加入到数组 b中。这样就可以依次取出符合条件的数。然后利用选择法对 b数组中的元素进行从小到大的排序。