问答题
下列程序的功能是:计算出自然数SIX和NINE,它们满足的条件是SIX+SIX+SIX=NINE+NINE的个数cnt,以及满足此条件的所有SIX与NINE的和sum。请编写函数countValue()实现程序功能,最后调用函数writetDAT(),把结果cnt和sum输出到文件OUT.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("OUT.DAT", "w");
fprintf(fp, "%d\n%d\n", cnt, sum);
fclose(fp);
}
【正确答案】
【答案解析】void countValue()
{
int i, j;
int s2;
int n2, n3, n4;
for(i=100; i<1000; i++)
{
for(j=1000; j<10000; j++)
{
if(i*3==j*2)
{
s2=i%100/10;
n4=j/1000;
n3=j%1000/100;
n2=j%100/10;
if(s2==n3&&n2==n4)
{
cnt++;
sum+=i+j;
}
}
}
}
}
[考点] 本题主要考查的知识点包括:C语言循环结构,if判断语句和逻辑表达式,以及分解多位整数的算术运算。
分析题干,本题除给出条件"SIX+SIX+SIX=NINE+NINE"之外,还可得出2个隐含的条件:条件1:SIX和NINE分别是3位和4位的正整数;条件2:SIX的十位数字等于NINE的百位数字,NINE的千位数字和十位数字相等。
本题解题思路:通过嵌套的循环结构可以遍历到所有的3位和4位数,对于每一个3位数及4位数的组合进行题设条件(SIX+SIX+SIX=NINE+NINE)的判断,满足条件的对其分解得到各数位的数字,再进一步判断各位数字是否满足本题隐含的条件(条件1及条件2),如果满足则个数加1,并将该3位数及4位数添加到和值中。