background image

int i ;
FILE *fp ;
fp = fopen("in.dat", "r") ;
for(i = 0 ; i < MAX ; i++) fscanf(fp, "%d", &a[i]) ;
fclose(fp) ;
}
void 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("out.dat", "w") ;
fprintf(fp, "%d\n", cnt) ;
for(i = 0 ; i < cnt ; i++) fprintf(fp, "%d\n", b[i]) ;
fclose(fp) ;
}
*********************************************************************
******

☆题目 53

(整数各位数字运算题)

已知数据文件 in.dat 中存有 300 个四位数,并已调用读函数 ReadDat()把

这些数存入数组 a 中,请编制一函数

jsValue()

,其功能是:

求出千位数上的

数减百位数上的数减十位数上的数减个位数上的数大于零的个数 cnt,再把所有满

足此条件的四位数依次存入数组 b 中,然后对数组 b 的四位数按从小到大的顺序进
行排序,

最后调用写函数 writeDat()把结果输出到 out.dat 文件。

    例如:9123,9-1-2-3>0,则该数满足条件存入数组 b 中,且个数
cnt=cnt+1。
            9812,9-8-1-2>0,则该数不满足条件忽略。
    部分源程序存在文件 prog1.c 中。
    程序中已定义数组:a[300],b[300],已定义变量:cnt
   请勿改动主函数 main()、读函数 ReadDat()和写函数 writeDat()的内容。
#include <stdio.h>
int a[300],b[300],cnt=0;

jsValue()
{ int i,j,qw,bw,sw,gw;
for(i=0;i<300;i++)
     { qw=a[i]/1000; bw=a[i]/100%10; 
       sw=a[i]%100/10; gw=a[i]%10;
       if((qw-bw-sw-gw)>0) b[cnt++]=a[i];
    }
for(i=0;i<cnt-1;i++)