C语言三级机试题,高手请帮忙分析

来源:百度知道 编辑:UC知道 时间:2024/09/22 00:52:33
下面程序的功能是:在三位整数(100至999)中寻找符合下面条件的整数,并依次从小到大存入数组中;它既是完全平方数,又有两位数字相同,例如144、676等。请编制函数实现此功能,满足该条件的整数的个数通过所编制的函数返回,最后调用函数writeDat()把结果输出到文件OUT51.DAT中。
注意:部分源程序已给出。请勿改动主函数main()和写函数writeDat()的内容。
【试题程序】
#include <stdio.h>
int jsvalue(int bb[])
{

}
main()
{
int b[20],num;
num=jsvalue(b);
writeDat(num,b);
}
writeDat(int num,int b[])
{
FILE *out;
int i;
out=fopen("OUT51.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,cnt=0;
{for (i=10;i<32;i++)
if (i*i/100==i*i%100/10||i*i%10==i*i/100||i*i%100/10==i*i%10)
{cnt++;bb[cnt]=i*i;}}
return cnt;
}

正确答案:
int jsvalue(int bb[])
{
int i,j,k=0;
int hun,ten,data;
for(i=100;i<=999;i++)<

你做的
{cnt++;bb[cnt]=i*i;}}
cnt开始是0,然后第一个数就先++了,也就是填到了bb[1]里面了。外面打印时从bb[0]开始打,是个未初始化的值。
应该改为
{bb[cnt]=i*i;cnt++;}}
更简洁些:
{bb[cnt++]=i*i;}}