第7题
下列程序的功能是:在三位整数(100至999)中寻找符合条件的整数并依次从小到大存入数组中;该整数既是完全平方数,又有两个数字相同,例如144、676等。
请编制函数jsValue()实现此功能,满足该条件的整数的个数是通过所编制的函数返回。
最后调用函数writeDat()把结果输出到文件out7.dat中。
请勿改动主函数main()和写函数writeDat的内容。
}
main()
{
int b[20],num;
num=jsValue(b);
writeDat(num,b);
clrscr();
}
writeDat(int num,int b[])
{
FILE *out;
int i;
out=fopen("out7.dat","w");
printf("%d\n",num);
fprintf(out,"%d\n",num);
for(i=0;i
fprintf(out,"%d\n",b[i]);}
fclose(out);
}
【答案】
jsValue(int bb[])
{
int i,j,k=0;
int hun,ten,data;
for(i=100;i<=999;i++)
{
j=10;
while(j*j<=i)
{
if(i==j*j)
{
hun=i/100;data=i-hun*100;
ten=data/10;data=da
第8题
下列程序的功能是:寻找并输出11至999之间的数m,它满足m,m2和m3均为回文数。所谓回文数是指各位数字左右对称的整数,例如121,676,94249等。满足上述条件的数如m=11,m2=121, m3=1331皆为回文数。请编制函数int jsValue(long m)实现此功能,如果是回文数,则函数返回1,反之则返回0。最后把结果输出到文件out8.dat中。
注意:部分源程序已给出。
请勿改动主函数main()的内容。
#include<stdio.h>
int jsValue(long n)
{
}
main()
{
long m;
FILE *out;
out=fopen("out8.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);
system("pause");
}
【答案】
int jsValue(long n)
{
int i,strl,half;
char xy[20];
ltoa(n,xy,10);
strl=strlen(xy);
half=strl/2;
for(i=0;i<half;i++)
if(xy[i]!=xy[--strl])break;
if(i>=half)return 1;
else return 0;
}
【解析】
考点:判断回文数的算法。
本题的解题思路是:在11~999之间进行逐个判断看是否为回文数,若是回文数则判断其平方是否为回文数,若也是回文数则判断其立方是否为回文数,若仍然是回文数则将原数返回。判断是否为回文数的方法是:先将其转化为字符型数据,再将第一个字符与最后一个字符相比较,依此类推,一直执行到中间两个元素比较完成,若该字符串左右对称则是回文数。
程序的流程是:首先打开out8.dat文件,然后通过for循环来调用jsValue()函数,若m,m*m,m*m*m都是回文数,即jsValue()函数返回值都为1时,就将m,m*m,m*m*m都写入到out.dat文件中,最后关闭文件out8.dat。
在jsValue()函数中,首先函数接收一个长整型数据作为参数,然后调用ltoa()函数。该库函数的格式为:itoa(参数1,参数2,参数3),参数1为一个整型数据;参数2为一个字符串的地址;参数3为一个整型常量,该函数的功能是,将第一个参数转换成字符串,并且存入第二个参数所指的内存单元中。然后通过strlen()函数得到数组xy的实际长度并将其赋给strl。下面的for循环的功能是:比较第一个字符与最后一个字符,如果不等则跳出循环,若相等则继续比较下一个字符,在比较的过程中每次i与strl分别向后和向前移动一位,比较一直进行到中间元素被比较过后结束,或者有不相等的元素时结束。
if语句的功能是确定跳出for循环的原因。若为i>=half即比较完成,则返回1,证明该数字是回文数,否则返回0(即不是回文数),函数结束。
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |