早教吧 育儿知识 作业答案 考试题库 百科 知识分享
早教吧考试题库频道 --> 计算机类考试 -->计算机三级 -->

下列程序的功能是:寻找并输出11至999之间的数m,满足m、m2和m3均为回文数。所谓回文数是指各位数字

题目

下列程序的功能是:寻找并输出11至999之间的数m,满足m、m2和m3均为回文数。所谓回文数是指各位数字左右对称的整数,例如121、676、94249等。满足上述条件的数,如m=11、m2=121、m3=1331,皆为回文数。请编制函数int svalue(long m)来实现此功能。如果是回文数,函数返回1,反之则返回0。最后,把结果输出到文件out.dat中。部分源程序已给出。请勿改动主函数main()的内容。#include <stdio.h>#include <stdlib.h>#include <string.h>int jsValue(long n){ }main(){ long m; FILE *out; out = fopen("out.dat", "w"); for (m=11; m<1000; m++) if (jsValue(m) && jsValue(m*m) && jsValue(m*m*m)) { printf("m=%4ld,m*m=%6ld,m*m*m=%8ld \n", m, m*m, m*m*m); fprintf(out,"m=%4ld,m*m=%6ld,m*m*m=%8ld \n", m, m*m, m*m*m); } fclose(out);}

参考答案
正确答案:参考试题解析
【解析及答案】
本题属于按条件查找类型的题目,考核的知识点为判断回文数的算法。
本题的解题思路为:在11~999之间逐个进行判断,看当前数字是否为回文数。若是回文数,则判断其平方是否为回文数;若其平方也是回文数,则判断其立方是否为回文数;若其立方仍然是回文数,则将原数返回。判断回文数的方法是:先将数字转换为字符型数据,再将其第一个字符与最后一个字符相比较,以此类推,一直执行到中间两个数字比较完成为止;若该字符串左右对称,则该数是回文数。程序的流程是:首先打开文件out.dat,然后通过for循环来调用函数jsValue() ,若mm2m3都是回文数,即函数jsValue() 的返回值都为1时,就将mm2m3写入到文件out.dat中,最后关闭文件out.dat。
在函数jsValue() 中,首先,函数接收到一个长整型数据作为参数,然后调用函数itoa()。该库函数的格式为itoa(参数1, 参数2, 参数3)。参数1为一个整型数据,参数2为一个字符串的地址,参数3为一个整型常量。该函数的功能是:将第一个参数转换为字符串并存入第二个参数值所对应的内存单元中,然后通过函数strlen() 得到数组xy的实际长度并将其赋予strl。下面的for循环的功能是比较第一个字符与最后一个字符,如果不等,则跳出循环;如果相等,则继续比较下一个字符。在比较的过程中,每次istrl分别向后和向前移动1位,比较一直进行到中间元素被比较后或者有不相等的元素时结束。if语句的功能是确定跳出for循环的原因,若ihalf,则比较完成,返回1,证明该数字为回文数;否则返回0(即不是回文数),函数结束。
int jsvalue(long n) /*标准答案*/
{int I,strl,half;
char xy[20];
ltoa(n,xy,10);
strl=strlen(xy);
half=strl/2;
for(I=0;Iif(xy[I]!=xy[--strl]) break;
if(I>=half) return 1;
else return 0;
}