问答题 下列程序的功能是:选出5000以下符合条件的自然数。条件是:千位数字与百位数字之和等于十位数字与个位数字之和,且千位数字与百位数字之和等于个位数字与千位数字之差的10倍。计算并输出这些四位自然数的个数cnt以及这些数的和sum。请编写函数countValue()实现程序的要求,最后调用函数writeDat(),把结果cnt和sum输出到OUT.DAT文件中。 注意:部分源程序已经给出。 请勿改动主函数main()和输出数据函数writeDat()的内容。 #include <stdio.h> int cnt,sum; void countValue() { } void writeDat() { FIIE *fp; fp=fopen("OUT.DAT","w"); fprintf(fp,"%d/n%d/n",cnt,sum); fclose(fp); } void main() { cnt=sum=0; countValue(); printf("满足条件的自然数的个数=%d/n",cnt); printf("满足条件的自然数的个数之和=%d/n",sum); writeDat(); }
【正确答案】void countValue() { int i,thou,hun,ten,data; for (i=5000;i>=1000;i--) { /*循环递减遍历5000~1000之间的数*/ thou=i/1000; /*取当前数的干位数字*/ hun=i%1000/100; /*取当前数的百位数字*/ ten=i%100/10; /*取当前数的十位数字*/ data=i%10; /*取当前数的个位数字*/ if (thou+hun==ten+data && thou+hun==(data-thou)*10) { /*如果千位加百位等于十位加个位且千位加百位等于个位减千位乘10*/ cnt++; /*计数值cnt加1*/ sum +=i; /*将i累加到sum中*/ sum += } } }
【答案解析】