第7題
下列程序的功能是:在三位整數(shù)(100至999)中尋找符合條件的整數(shù)并依次從小到大存入數(shù)組中;該整數(shù)既是完全平方數(shù),又有兩個數(shù)字相同,例如144、676等。
請編制函數(shù)jsValue()實(shí)現(xiàn)此功能,滿足該條件的整數(shù)的個數(shù)是通過所編制的函數(shù)返回。
最后調(diào)用函數(shù)writeDat()把結(jié)果輸出到文件out7.dat中。
請勿改動主函數(shù)main()和寫函數(shù)writeDat的內(nèi)容。
}
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之間的數(shù)m,它滿足m,m2和m3均為回文數(shù)。所謂回文數(shù)是指各位數(shù)字左右對稱的整數(shù),例如121,676,94249等。滿足上述條件的數(shù)如m=11,m2=121, m3=1331皆為回文數(shù)。請編制函數(shù)int jsValue(long m)實(shí)現(xiàn)此功能,如果是回文數(shù),則函數(shù)返回1,反之則返回0。最后把結(jié)果輸出到文件out8.dat中。
注意:部分源程序已給出。
請勿改動主函數(shù)main()的內(nèi)容。
#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;
}
【解析】
考點(diǎn):判斷回文數(shù)的算法。
本題的解題思路是:在11~999之間進(jìn)行逐個判斷看是否為回文數(shù),若是回文數(shù)則判斷其平方是否為回文數(shù),若也是回文數(shù)則判斷其立方是否為回文數(shù),若仍然是回文數(shù)則將原數(shù)返回。判斷是否為回文數(shù)的方法是:先將其轉(zhuǎn)化為字符型數(shù)據(jù),再將第一個字符與最后一個字符相比較,依此類推,一直執(zhí)行到中間兩個元素比較完成,若該字符串左右對稱則是回文數(shù)。
程序的流程是:首先打開out8.dat文件,然后通過for循環(huán)來調(diào)用jsValue()函數(shù),若m,m*m,m*m*m都是回文數(shù),即jsValue()函數(shù)返回值都為1時,就將m,m*m,m*m*m都寫入到out.dat文件中,最后關(guān)閉文件out8.dat。
在jsValue()函數(shù)中,首先函數(shù)接收一個長整型數(shù)據(jù)作為參數(shù),然后調(diào)用ltoa()函數(shù)。該庫函數(shù)的格式為:itoa(參數(shù)1,參數(shù)2,參數(shù)3),參數(shù)1為一個整型數(shù)據(jù);參數(shù)2為一個字符串的地址;參數(shù)3為一個整型常量,該函數(shù)的功能是,將第一個參數(shù)轉(zhuǎn)換成字符串,并且存入第二個參數(shù)所指的內(nèi)存單元中。然后通過strlen()函數(shù)得到數(shù)組xy的實(shí)際長度并將其賦給strl。下面的for循環(huán)的功能是:比較第一個字符與最后一個字符,如果不等則跳出循環(huán),若相等則繼續(xù)比較下一個字符,在比較的過程中每次i與strl分別向后和向前移動一位,比較一直進(jìn)行到中間元素被比較過后結(jié)束,或者有不相等的元素時結(jié)束。
if語句的功能是確定跳出for循環(huán)的原因。若為i>=half即比較完成,則返回1,證明該數(shù)字是回文數(shù),否則返回0(即不是回文數(shù)),函數(shù)結(jié)束。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |