1、三级网络技术机试-122 及答案解析(总分:100.00,做题时间:90 分钟)1.下列程序的功能是:在 3位整数(100 至 999)中寻找符合下面条件的整数,并依次从小到大存入数组 b中:它既是完全平方数,又有两位数字相同,例如 144,676 等。请编制函数 int jsValue(int bb)实现此功能,满足该条件的整数的个数通过所编制的函数返回。最后调用函数 wfiteDat()把结果输出到文件 OUTl2.DAT中。注意:部分源程序已给出。请勿改动主函数 main()和写函数 wnteDat()的内容。试题程序:#includestdio.hint jsValue(int bb
2、main ( )int b20, num;num= jsValue(b);writeDat (num, b);writeDat(int num, int b)FILE *out;int i;out = fopen(“OUT12.DAT“, “w“);fprintf(out, “%d/n“, num);for(i = 0; i num; i+)fprintf(out, “%d/n“, bi);fclose (out);(分数:100.00)_三级网络技术机试-122 答案解析(总分:100.00,做题时间:90 分钟)1.下列程序的功能是:在 3位整数(100 至 999)中寻找符合下面条件的整
3、数,并依次从小到大存入数组 b中:它既是完全平方数,又有两位数字相同,例如 144,676 等。请编制函数 int jsValue(int bb)实现此功能,满足该条件的整数的个数通过所编制的函数返回。最后调用函数 wfiteDat()把结果输出到文件 OUTl2.DAT中。注意:部分源程序已给出。请勿改动主函数 main()和写函数 wnteDat()的内容。试题程序:#includestdio.hint jsValue(int bb main ( )int b20, num;num= jsValue(b);writeDat (num, b);writeDat(int num, int b)
4、FILE *out;int i;out = fopen(“OUT12.DAT“, “w“);fprintf(out, “%d/n“, num);for(i = 0; i num; i+)fprintf(out, “%d/n“, bi);fclose (out);(分数:100.00)_正确答案:(int isValue(int bb)int i,j,k=0;int hun,ten,data;for(i=100;i=999;i+)j=10;while(i*j=i)if(i=i*j) /*如果该数是完全平方数*/hun=i/100; /*求该数的百位数字*/data=i-hun*100; /*得到
5、后两位数*/ten=data110; /*求该数的十位数字*/data=data-ten*10; /*求该数的个位数字*/if(hun=ten | hun=data | ten=data)/*有两位数字相同*/bbk=i; /*则把该数存入数组 bb中*/k+; /*统计满足条件的数的个数*/j+;return k; /*返回满足该条件的整数的个数*/)解析:解析 解答本题,首先应该考虑用一个 for循环来依次取得 100到 999之间的各个数,并对当前所取得的数进行两个条件判断:一是判断该数是否是完全平方数:二是判断该数是否有两位数字相同。如果以上两个条件同时满足,则把该数存放到 b数组中,
6、尽管题目要求所存的数必须从小到大,但我们取数的过程本身就是从小到大取得,因此,排序工作是没有必要做的,按照取数的顺序,把满足条件的数值存放到数组 b中就可以了。判断某个数是否是完全平方数的方法是看该数是否可以拆成完全相同的两个数的积(当然要拆成的两个数一定是两位数),因此,我们再利用一个循环用 10以上的两位数逐个去拆被判断的数,如果被判断的数恰好可以被完全拆分,则第一个条件成立,接着就开始依次取得被判断的数的百位、十位、个位上的数字值,看是否有两位数字相同。取得每一位上的数字值可以用“hun=i/100;data=i-hun*100: ten=data/10;data=data-ten*10:”几条语句来实现,hun 变量得到的是百位上的数字,ten 变量得到的是十位上的数字, data 变量得到的是个位上的数字。