一个关于数组中满足条件的元素选择、及再次排序得c语言函数。
已知数据文件IN27.DAT中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中,请编制一个函数jsVal(),其功能是:把千位数字和十位数字重新组合成一个新的十位数ab(新十位数的十位数字是原4位数的千位数字,新十位数的个位数字是原4位数的十位数字),以及把个位数字和百位数字组成另一个新的十位数cd(新十位数的十位数字是原4位数的个位数字,新十位数的个位数字是原4位数的百位数字),如果新组成的两个十位数ab>cd,ab必须是偶数且能被5整除,cd必须是奇数,同时两个新数均不为0,则将满足此条件的4位数按从大到小的顺序存入数组b中,并要计算满足上述条件的4位数的个数cnt,最后,调用写函数writeDat()把结果cnt及数组b中符合条件的4位数输出到OUT27.DAT文件中。
#include <stdio.h>#define MAX 200int a[MAX],b[MAX],cnt=0;void jsVal(){int i,j,qian,bai,shi,ge,temp,kk;for(i=0;i<200;i++)//查找满足的数据{qian=a[i]/1000;bai=(a[i]/100)%10;shi=(a[i]/10)%10;ge =a[i]%10;if(((10*qian+shi)>(10*ge+bai))&&(bai%2==1))if((shi==0)&&((10*qian+shi + 10*ge+bai)!=0)){b[cnt++]=a[i];}}for(j=1;j<cnt;j++)//排序{kk=j;while((b[j]>b[j-1])&&(j!=0)){temp=b[j];b[j]=b[j-1];b[j-1]=temp;j--;}j=kk;}}void readDat(){ int i; FILE *fp; fp=fopen("IN27.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\n",b[i]); printf("\n"); writeDat();}writeDat(){ FILE *fp; int i; fp=fopen("OUT27.DAT","w"); fprintf(fp,"%d\n",cnt); for(i=0;i<cnt;i++) fprintf(fp, "%d\n",b[i]); fclose(fp);}