/* 已知数据文件IN.DAT中存有200个四位数, 并已调用读函数readDat()把这些数存入数组a中, 请考生编制一函数jsVal(),其功能是:如果四位 数个位上的数字均是0或2或4或6或8,则统计出满足 此条件的个数cnt,并把这些四位数按从大到小的顺 序存入数组b中。最后main( )函数调用写函数writeDat() 把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。 */ /* 随机产生200个四位数,并写入到文件(in.dat)中 */ void WriteRandom(char* pFileName) { if ( !pFileName ) return; //生成200个随机数 int i = 0; FILE* file = fopen(pFileName, "w"); if ( !file ) return; srand(time(NULL)); for ( ;i < 200;++i ) { int num = rand()%100 * 100 + rand()%100; if ( IsFourFigure(num) ) { printf("%d/n", num); fprintf(file, "%d/n", num); } } fclose(file); } /* 判断随机数是否为四位 */ int IsFourFigure(int num) { int i = 0; do { num = num / 10; ++i; }while( num ); if ( 4 == i ) { return 1; } return 0; } // /* 功能:读取数据并存储 */ void ReadDataAndStor(int* nNum, char* pFileName) { if ( !nNum ) return; FILE* fRead = fopen(pFileName, "r"); if ( !fRead ) return; int i = 0; while ( 1 ) { if ( feof( fRead ) ) return; fscanf(fRead, "%d", &nNum[i]); ++i; } fclose(fRead); } /* 功能:将个位上的数字为0、2、4、6、8的数按从大到小的顺序存储到数组中 */ void GetDataByCondition(char* pFileName, char* pWriteFileName) { int* nA = (int*)malloc(sizeof(int)* 200); memset(nA, 0, sizeof(int)* 200); int* nB = (int*)malloc(sizeof(int)* 200); memset(nB, 0, sizeof(int)* 200); ReadDataAndStor(nA, pFileName);//设置数据 int i = 0; int nIndex = 0; for ( ;i < 200;++i ) { if ( 0 == nA[i] % 10 || 2 == nA[i] % 10 || 4 == nA[i] % 10 || 6 == nA[i] % 10 || 8 == nA[i] % 10 ) { nB[i] = nA[i]; ++nIndex; } } /*排序*/ SortNum(nB, nIndex); /*写入文件*/ WriteDataByCondition(nIndex, nB, pWriteFileName); } /* 功能:将符合条件的数字总数和数字写到文件中 */ void WriteDataByCondition(int nCnt, int* nNum, char* pWriteFileName) { if ( !nNum ) return; FILE* file = fopen(pWriteFileName, "w"); if ( !file ) return; int n = 0; for ( ;n < nCnt;++n ) { fprintf(file, "%d/n", nNum[n]); } fclose(file); } /* 功能:排序法 */ void SortNum(int* pNum, int nLength) { if ( !pNum ) return; int i = 0; int j = 0; /*交换排序*/ for ( ;i < nLength;++i ) { int nChangEx = 0; for ( j = i;j < nLength;++j ) { if ( pNum[j] > pNum[i] ) { int nTemp = pNum[j]; pNum[j] = pNum[i]; pNum[i] = nTemp; ++nChangEx; } } if ( !nChangEx ) { break; } } }