文件IN.DAT中存有200个4位整型数,函数readData()负责将IN.DAT中的数据读到数组inBuf[]中。请编制一函数findData(),该函数的功能是:依次从数组inBuf[]中取出一个4位数,如果4位数连续大于该4位数前的5个数且该数是奇数(该4位数以前不满5个数,则不统计),该数必须能被7整除,则按照从小到大的顺序存入outBuf[]中,并用count记录下符合条件的数据的个数。函数writeData()负责将outBuf[]中的数据输出到文件OUT.DAT中,并且在屏幕上输出。
注意:部分源程序已给出。
程序中已定义数组:inBuf[200],outBuf[200];已定义变量:count。
请勿改动主函数main()、读函数readData()和写函数writeData()的内容。
试题程序:
#include<stdio.h>
#define MAX 200
int inBuf[MAX],outBuf[MAX],count=0;
void findData()
void readData()
int i;
FILE*fp;
fp=fopen("IN.DAT","r");
for(i=0;i<MAX;i++)
fscanf(fp,"%d",&inBuf[i]);
felose(fp);
void writeData()
FILE*fp:
int i;
fp=fopen("OUT.DAT","w");
fprintf(fp,"%d\n",count);
for(i=0;i<count;i++)
fprintf(fp,"%d\n",outBuf[i]);
fclose(fp);
void main()
int i;
readData();
findData();
printf("the count of desired datas=%d\n",count);
for(i=0;i<count;i++)
printf("%d\n”,outBuf[i]);
printf("n");
writeData();
参考答案:void findData()
{
int i,j,temp,flag;
count=0;
for(i=5;i<MAX;i++)
/*选出是奇数且连续大于其前5项的数*/
if(inBuf[i]%2!=0&&inBuf[i]%7==0)
/*如果当前数是奇数且能被7整除*/
{
flag=0;
for(j=1;j<=5;j++)
if(inBuf[i]
if(flag==0)
{
outBuf[count]=inBuf[i];
/*将满足要求的数存入outBuf中*/
count++; /*将计数器加1*/
}
}
for(i=0;i<count-1;i++)
/*以下是对数据进行从小到大的排序*/
for(j=i+1;j<count;j++)
if(outBuf[i]>outBuf[j])
/*如果第i位比它后面的数大*/
{
/*则将两者进行交换,也即将更小的数放到第i位*/
temp=outBuf[i];
outBuf[i]=outBuf[j];
outBuf[j]=temp;
}
}
解析: 本题考查的主要是数据的奇偶性判断及数据的排序。基本思想是:①利用条件inBuf[i]%2!=0找出奇数。用该数与其前面的连续5个数进行比较,如果有一个数不符合要求(小于或等于后面的数),则可将该数排除,这样便可找出所有符合要求的项;②将当前数与其后的各个数相比较,如果当前数比其后的数大,则将两数据进行交换,从而使得前面的数小于后面的数.最终达到从小到大排序的目的。