问答题
下列程序的功能是:在3位整数(100~999)中寻找符合下面条件的整数,并依次从小到大存入数组b中。它既是完全平方数,又有两位数字相同(例如,144,676等)。请编写函数int jsValue(int bb[])实现此功能,并返回满足该条件的整数的个数。最后调用函数writeDat(),把结果输出到文件OUT.DAT中。
请勿改动主函数main()和写函数writeDat()的内容。
[试题程序]
#include<stdio.h>
void writeDat();
int jsValue(int bb[])
{
}
void main()
{
int b[20], num;
mum=jsValue(b);
writeDat(mum, b);
}
void writeDat(int num, int b[])
{
FILE*out;
int i;
out=fopen("OUT.DAT", "w");
fprintf(out, "%d\n", num);
for(i=0; i<num; i++)
fprintf(out, "%d\n", b[i]);
fclose(out);
}
【正确答案】
【答案解析】int jsValue(int bb[])
{
int i, j; /*定义循环控制变量*/
int cnt=0; /*定义计数器变量*/
int a3, a2, a1; /*定义变量存储三位数每位的数字*/
for(i=100; i<=999; i++) /*在该范围中找符合条件的数*/
for(j=10; j<=sqrt(i); j++)
if(i==j*j) /*如果该数是完全平方数*/
{
a3=i/100; /*求该数的百位数字*/
a2=i%100/10; /*求该数的十位数字*/
a1=i%10; /*求该数的个位数字*/
if(a3==a2 || a3==a1 || a2==a1) /*有两位数字相同*/
{
bb[cnt]=i; /*则把该数存入数组bb中*/
cnt++;
} /*统计满足条件的数的个数*/
}
return cnt; /*返回满足该条件的整数的个数*/
}
[考点] 本题考查对一定范围内整数的筛选。考查的知识点主要包括:多位整数的分解算法,完全平方数判断方法,if判断语句和逻辑表达式。
此题属于数学类问题。分析题干,本题需注意2个关键点:关键点1判断该数是否是完全平方数;关键点2判断该数是否有两位数数字相同。
本题的解题思路为:通过循环控制,依次判断100至999数是否满足关键点1(是否为完全平方数)。如果是,则将该数分解出各位数数字,并判断是否有两位数数字相同,如果存在,则个数加1,并将该数存入数组中。