问题 问答题

下列程序的功能是:选出5000以下符合条件的自然数。条件是:千位数字与百位数字之和等于十位数字与个位数字之和,且千位数字与百位数字之和等于个位数字与千位数字之差的10倍。计算并输出这些4位自然数的个数cnt及这些数的和sum。请编写函数countValue0实现程序的要求,最后调用函数writeDAT()把结果cnt和sum输出到文件OUT67.DAT中。
注意:部分源程序已给出。
请勿改动主函数main()和写函数writeDAT()的内容。
试题程序:
#include<stdio. h>
int cnt, sum;
void countValue ( )

void main ( )

cnt=sum=0;
countValue ( );
printf ( "满足条件的自然数的个数=%d\n", cnt );
printf ( "满足条件的自然的值的和=%d\n", sum);
writeDAT ( );

writeDAT ( )

FILE *fp;
fp=fopen ( "OUT67. DAT", "w" );
fprintf (fp, "%d\n%d\n", cnt, sum);
fclose (fp);

答案

参考答案:

void countValue ()

{

int i, thou,hun, ten, data;

for (i=E000; i>=A000; i--)

{

thou=i/A000; /*求四位数的千位数字*/

hun=i%A000/A00;

ten=i%A00/lO; /*求四位数的十位数字* /

data= i % A0; /*求四位数的个位数字*/

if(thou+hun==ten+data && thou+hun== (data-thou)*A0)

{ /*千位数与百位数之和等于十位数与个位数这和,且千位数与百位数之和等于个位数与千位数之差的A0倍*/

cnt ++; /*则统计满足条件的数的个数*/

sum+= i; /*将满足条的件的数求和*/

}

}

}

解析:

本题考查的知识点如下:

(1)“%”与“/”的使用。

(2)判断结构中多个条件的布尔运算。

(3)循环结构的使用。

本题要求选出5000以下符合条件的4位数,所以选择范围是1000到5000。这里要借助运算符“%”与“/”将4位数各位上的数拆成独立的数字:将1个4位数整除1000则可得到其千位上的数字,除以1000取余再整除100则可得百位上的数字,除以100取余再整除10则可得十位上的数字,除以10取余则得个位上的数字。题中给出的两个条件都要满足,所以两条件之间用“与”运算。使用循环结构对1000到5000之间的数依次进行上述的处理。

单项选择题
选择题