第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(即不是回文數),函數結束。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |