已知数据文件IN.dat中存有200个四位数,并已调用读函数Rdata()把这些数存入数组a中,请编写函数diffCal(),其功能是:把一个四位数的个位数字上的值减去千位数字上的值,再减去百位数字上的值,最后减去十位数字上的值,如果得出的值大于等于0且原

admin2010-09-05  25

问题 已知数据文件IN.dat中存有200个四位数,并已调用读函数Rdata()把这些数存入数组a中,请编写函数diffCal(),其功能是:把一个四位数的个位数字上的值减去千位数字上的值,再减去百位数字上的值,最后减去十位数字上的值,如果得出的值大于等于0且原四位数是偶数,则统计出满足此条件的数的个数count,并把这些四位数按从小到大的顺序存入数组b中。最后调用写函数Wdata(),把结果count以及数组b中符合条件的四位数输出到OUT.dat文件中。
   注意:部分源程序已经给出。程序中已定义数组a[200]、b[200],已定义变量count。请勿改动数据文件IN.dat中的任何数据、主函数main()、读函数Rdata()和写函数Wdata()的内容。
#include <stdio.h>
#define  MAX 200
int  a[MAX], b[MAX], count = 0;
void diffCal()
{

}
void Rdata ()
{   int  i;
   FILE  *fp;
   fp = fopen("IN. dat",  "r");
   for (i=0; i<MAX; i++)
      fscanf(fp, "%d,", &a);
   fclose (fp);
}
void Wdata ()
{   FILE  *fp;
   int  i;
   fp = fopen("OUT. dat",  "w");
   fprintf(fp,  "%d\n",  count);
   for (i=0; i<count; i++)
      fprintf(fp, "%d\n", b);
   fclose (fp);
}
void main ()
{   int  i;
   Rdata ();
   diffCal();
   printf("满足条件的数=%d\n", count);
   for (i=0; i<count; i++)
      printf("%d ", b);
   printf ("\n");
   Wdata ();
}

选项

答案void diffCal() { int i, thou, hun, ten, data, j; for (i=0; i<MAX; i++) { thou = a[i]/1000; hun = a[i]%1000/100; ten = a[i]%100/10; data = a[i]%10; if (data-thou-hun-ten>=0 && a[i]%2!=1) { b[count] = a[i]; count++; } } for (i=0; i<count-1; i++) for (j=i+1; j<count; j++) if (b[i] >b[j]) { data = b[i]; b[i] = b[j]; b[j] = data; } }

解析
转载请注明原文地址:https://kaotiyun.com/show/cuvZ777K
0

最新回复(0)