1、三级信息管理技术机试-240 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.下列程序的功能是:寻找并输出 11999 之间的数 m,它满足 m、m 2和 m3均为回文数。所谓回文数是指其各位数字左右对称的整数,例如 121、676、94249 等。满足上述条件的数如 m=11、m 2=121、m 3=1331 皆为回文数。请编制函数 int jsValue(long n)实现此功能,如果是回文数,则函数返回 1,反之则返回0。最后把结果输出到文件 out93.dat 中。注意:部分源程序已给出。请勿改动主函数 main()的内容。试题程序
2、:#include stdio.h#include string.h#include stdlib.hint jsValue(long n)void main()long m;FILE * out;out=fopen(“out93.dat“,“w“);for(m=11;m1000;m + +)if(jsValue(m) & jsValue(m*m) & jsValue(m*m*m)printf(“m=% 41d,m*m=% 61dm*m*m=% 81d/n“,m,m*m,m*m*m);fprintf(out,“m=% 41d,m*m=% 61d,m*m*m=% 81d/n“,m,m*m,m*m
3、*m);fclose(out);(分数:100.00)_三级信息管理技术机试-240 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.下列程序的功能是:寻找并输出 11999 之间的数 m,它满足 m、m 2和 m3均为回文数。所谓回文数是指其各位数字左右对称的整数,例如 121、676、94249 等。满足上述条件的数如 m=11、m 2=121、m 3=1331 皆为回文数。请编制函数 int jsValue(long n)实现此功能,如果是回文数,则函数返回 1,反之则返回0。最后把结果输出到文件 out93.dat 中。注意:部分源程
4、序已给出。请勿改动主函数 main()的内容。试题程序:#include stdio.h#include string.h#include stdlib.hint jsValue(long n)void main()long m;FILE * out;out=fopen(“out93.dat“,“w“);for(m=11;m1000;m + +)if(jsValue(m) & jsValue(m*m) & jsValue(m*m*m)printf(“m=% 41d,m*m=% 61dm*m*m=% 81d/n“,m,m*m,m*m*m);fprintf(out,“m=% 41d,m*m=% 6
5、1d,m*m*m=% 81d/n“,m,m*m,m*m*m);fclose(out);(分数:100.00)_正确答案:(int jsValue(long n)int i; /*定义循环控制变量*/int str,half; /*存储字符串的长度*/char ch20; /*字符数组,存储每个数的字符串形式*/ltoa(n,ch,10);/*将长整数 n 转换成与其等价的字符串存入 xy 指向的字符串中,输出串为十进制*/str=strlen(ch); /*求字符串的长度*/half=str/2;for(i=0;ihalf;i + +)if(chi!=ch- - str) /*判断字符串是否左
6、右对称*/break; /*不对称则跳出循环,判断下一个数*/if(i=half) /*如果字符串是回文数*/return 1; /*则返回 1*/elsereturn 0; /*否则返回 0*/)解析:解析 本题主要考查的是如何将整型变量转换成字符串及如何判断字符串是否对称。回文数是指其各位数字左右均对称的整数,因为给出的数的位数不确定,所以不采用将各位上的数字转变成单独的数再比较的方法。这里使用函数 char * ltoa(long num,char * str,int radix),其功能是将长整数 num 转换成与其等价的字符串存入 str 指向的字符串中,输出串的进制由 radix 决定。将整数转变成字符串后,判断字符串是否左右对称。求得字符串长度后设置两个变量,一个从字符串的开头开始向后移动,另一个从字符串的倒数第一个元素开始向前移动,直到移至数组的中间元素。若两者所决定的数组元素均相等,则字符串左右对称。