问题 问答题

下列程序的功能是:在3位整数(100~999)中寻找符合下面条件的整数,并依次从小到大存人数组b中:它既是完全平方数,又有两位数字相同,例如144,676等。
请编制函数int jsValue(int bb[])实现此功能,满足该条件的整数的个数通过所编制的函数返回。
最后调用函数writeDat()把结果输出到文件OUT88.DAT中。
注意:部分源程序已给出。
请勿改动主函数main()和写函数writeDat()的内容。
试题程序:
#include <stdio.h>
void writeDat();
int jsValue(int bb[])


void main()

int b[20],num;
num=jsValue(b);
writeDat(num,b);

void writeDat(int num,int b[])

FILE * out;
int i;
out=fopen("OUT88.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; /*定义变量存储3位数每位的数字*/
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; /*返回满足该条件的整数的个数*/
}

解析: 解答本题,首先应该考虑用一个for循环来依次取得100~999之间的各个数,接着我们再利用一个循环用10以上的两位数逐个去拆被判断的数,如果被判断的数恰好可以被完全拆分,则该数是一个完全平方数,接着就开始依次求得被判断的数的百位、十位、个位上的数值,看是否有两位数字相同。把满足条件的数存入数组bb中,并用计数器变量cnt来统计满足条件的数的个数。最后将cnt作为函数值返回。

判断题
多项选择题