一个关于数组中满足条件的元素选择、及再次排序得c语言函数。

来源:互联网 发布:ubuntu 终端 中文 编辑:程序博客网 时间:2024/06/05 15:45

已知数据文件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);}


原创粉丝点击