下列程序的功能是:计算出自然数SIX和NINE,它们满足的条件是SIX+SIX+SIX=NINE+NINE的个数cnt,以及满足此条件的所有SIX与NINE的和sum。请编写函数countValue()实现程序要求,最后调用函数writeDAT()把结果cnt和sum输出到文件OUT82.DAT中。其中的S、I、X、N、E各代表一个十进制数字。
注意:部分源程序已给出。
请勿改动主函数main()和写函数writeDAT()的内容。
试题程序:
#include <stdio.h>
int cnt,sum;
void writeDAT();
void countValue()
void main()
cnt=sum=0;
countValue();
printf("满足条件的个数=% d\n",cnt);
printf("满足条件所有的SIX与NINE的和=% d\n",sum);
writeDAT();
void writeDAT()
FILE * fp;
fP=fopen("OUT82.DAT","w");
fprintf(fp,"% d\n% d\n",cnt,sum);
fclose(fp);
参考答案:void countValue()
{
int i,j; /*定义变量分别存储SIX(i)和NINE(j)*/
int a2,b4,b3,b2; /*计算满足条件的数*/
for(i=100,j=1000;i<=999&&j<=9999;i=i+2) /*当i为3位偶数,并且j没有增加到5位数时,循环继续*/
{
j=3*i/2; /*计算满足条件的4位数*/
a2=i%100/10;
b4=j/1000;
b3=j%1000/100;
b2=j%100/10;
if(j>=1000 && j<=9999 && a2==b3 && b4==b2)
/*如果满足条件SIX+SIX+SIX=NINE+NINE*/
{ /*即一个3位数乘以3再除以2余数为0,且所得的数为4位数*/
cnt + +; /*统计满足条件的数的个数*/
sum+=i+j; /*求满足此条件的所有SIX与NINE的和*/
printf("SIX=% d,NINE=% d\n",i,j);
}
}
}
解析: 根据题意,要求的是满足3位数乘以3等于4位数乘以2的数的个数。我们可以使用循环结构对所有的3位数进行判断,若某个3位数乘以3整除以2所得的数是4位整数,且该3位数的十位数值等于该4位数的百位数值,该4位数的千位数值等于其十位数值,则这个3位数是满足条件的数。当判断的数不再是3位数或者处理后所得的数大于9999,则退出循环。在循环内部用计数器统计满足条件的数的个数及它们的和值。