问题 问答题

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


void main()

int b[20],num;
num=findValue(b);
writeData(num,b);

void writeData(int num,int b[])

FILE*OUt:
int i;
out=fopen(’OUT.DAT","w");
printf("num=%d\n",num);
fprintf(out,"num=%d\n",num);
for(i=0;i<num;i++)

printf("b[%d]=%d\n",i,b[i]);
fprintf(out,"b[%d]=%d\n",i,b[i]);

fclose(out);

答案

参考答案:int findValue(int outBuf[])
{
int i,d1,d2,d3,count=0;
for(i=10;i*i<1000;i++)
{
d1=i*i/100; /*求该平方数的百位数字*/
d2=i*i/10%10; /*求该平方数的十位数字*/
d3=i*i%10; /*求该平方数的个位数字*/
if(d1==d2 || d2==d3||d3==d1)
out,Buf[count++]=i*i;
}
return count;
}

解析: 本题主要考查数位分解及排序。基本思路是,由于最小的三位数100是10的平方,因此可以从10开始,判断每个数的平方值是否有两位数字相同,直到找到数的平方值大于999,这样可遍历100~999中所有的平方数,循环中将满足条件的数存入数组outBuf中,由于遍历是从小到大的,因此数组outBuf中的元素已经接升序排列。

选择题
单项选择题