1、三级数据库技术机试-221 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制函数 int findValue(int outBuf),其功能是:在 3 位整数(100999)中寻找符合下面条件的整数,并依次从小到大存入数组 b 中;它既是完全平方数,又有两位数字相同,例如 144,676 等。满足该条件的整数的个数通过所编制的函数返回。最后调用函数 WriteData()把结果输出到文件 OUT.DAT 中。注意:部分源程序已给出。请勿改动主函数 main()和写函数 WriteData()的内容。试题程序:#includestdio
2、hvoid writeData(int,int b);int findValue(int outBuf)void main()int b20,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;inum;i+)printf(“b%d=%d/n“,i,bi);fprintf(out,“b%d=%d/n“,i,bi);fc
3、lose(out);(分数:100.00)_三级数据库技术机试-221 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制函数 int findValue(int outBuf),其功能是:在 3 位整数(100999)中寻找符合下面条件的整数,并依次从小到大存入数组 b 中;它既是完全平方数,又有两位数字相同,例如 144,676 等。满足该条件的整数的个数通过所编制的函数返回。最后调用函数 WriteData()把结果输出到文件 OUT.DAT 中。注意:部分源程序已给出。请勿改动主函数 main()和写函数 WriteData()的
4、内容。试题程序:#includestdio.hvoid writeData(int,int b);int findValue(int outBuf)void main()int b20,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;inum;i+)printf(“b%d=%d/n“,i,bi);fprintf(ou
5、t,“b%d=%d/n“,i,bi);fclose(out);(分数:100.00)_正确答案:(int findValue(int outBuf)int i,d1,d2,d3,count=0;for(i=10;i*i1000;i+)d1=i*i/100; /*求该平方数的百位数字*/d2=i*i/10%10; /*求该平方数的十位数字*/d3=i*i%10; /*求该平方数的个位数字*/if(d1=d2 | d2=d3|d3=d1)out,Bufcount+=i*i;return count;)解析:解析 本题主要考查数位分解及排序。基本思路是,由于最小的三位数 100 是 10 的平方,因此可以从 10 开始,判断每个数的平方值是否有两位数字相同,直到找到数的平方值大于 999,这样可遍历100999 中所有的平方数,循环中将满足条件的数存入数组 outBuf 中,由于遍历是从小到大的,因此数组 outBuf 中的元素已经接升序排列。