一道三级的题目,我已经和零分战斗一宿了。
题干:已知数据文件in.dat中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:把一个四位数的千位数位置上的值减去百位数位置上的值再减去十位数位置上的值最后减去个位数位置上的值,如果得出的值大于等于零且原四位数是奇数,则统计出满足此条件的个数cnt,并把这些四位数按从小到大的顺序存入数组b中,最后调用写函数writeDat()把结果cnt以及数组b中符合条件的四位数输出到out.dat文件中。
注意:部分源程序存在test.c文件中。
程序中已定义数组:a[200],b[200],已定义变量:cnt
请勿改动数据文件in.dat中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。
代码:
程序代码:
#include <stdio.h> #define MAX 200 int a[MAX], b[MAX], cnt = 0; void writeDat(); void jsVal() { int i0=0,i1=0; int the4=0,the3=0,the2=0,the1=0; int x=0; for(i0=0;i0<200;i0++) { the4=a[i0]/1000; the3=(a[i0]-the4*1000)/100; the2=(a[i0]-the4*1000-the3*100)/10; the1=a[i0]-the4*1000-the3*100-the2*10; if((the4-the3-the2-the1)>=0 && (a[i0]%2)==1) { b[cnt++]=a[i0]; } } for(i0=0;i0<cnt;i0++) { for(i1=0;i1<cnt-1;i1++) { if(b[i1]>b[i1+1]) { x=b[i1];b[i1]=b[i1+1];b[i1+1]=x; } } } } void readDat() { 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(); } void 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); }
求正解,或者明确告诉我模拟软件有问题。
[ 本帖最后由 dreamofgod 于 2011-9-3 00:15 编辑 ]