问题 问答题

已知数据文件IN15.DAT中存有200个4位数,并已调用读函数readDat() 把这些数存入数组a中。请编制函数jsVal(),其功能是:依次从数组a中取出一个4位数,如果该4位数连续小于该4位数以后的5个数且该数是偶数,则统计出满足此条件的数的个数cnt,并把这些4位数按从小到大的顺序存入数组b中,最后调用写函数writeDat()把结果cnt及数组b中符合条件的4位数输出到OUT15.DAT文件中。注意:部分源程序已给出。程序中已定义数组:a[200],b[200],已定义变量:cnt。请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。试题程序:#include#define MAX 200int a[MAX], b[MAX], cnt = 0; void jsVal(){}void readDat(){int i;FILE *fp;fp = fopen("IN15.DAT", "r");for(i = 0; i < MAX; i++) fscanf(fp, "%d", &a[i]);fclose(fp);}main(){int i;readDat();jsVal();printf("满足条件的数=%d\n", cnt);for(i = 0; i < cnt; i++)printf("%d ", b[i]);printf("\n");writeDat();}writeDat(){FILE *fp;int i;fp = fopen("OUT15.DAT", "w");fprintf(fp, "%d\n", cnt);for(i = 0; i < cnt; i++)fprintf(fp, "%d\n", b[i]);fclose(fp);}

答案

参考答案:

void jsVal() { int i,j,flag=0; for (i=0;ib[j]) { flag=b[i]; b[i]=b[j]; b[j]=flag; } }

 

解析:

根据题意可知,要编制函数的功能有两部分:一是找出满足条件的4位数;二是对找出的数进行从小到大排序。首先利用一个for循环来依次从数组中取得4位数,接着用当前得到的4位数与该数后面的5个数(可以用循环次数来控制)依次进行比较,如果该数比它后面的5个数都小,则给标志变量flag赋值1。接着对flag进行判断,如果不为1,则该数肯定不符合条件,直接去取下一个数;若flag值为1,再来判断该数是否是偶数,如果恰好该数又是偶数,则把该数加入到数组b中。这样就可以依次取出符合条件的数,然后利用选择法对b数组中的元素进行从小到大的排序。

单项选择题
单项选择题