第7題
下列程序的功能是:在三位整數(shù)(100至999)中尋找符合條件的整數(shù)并依次從小到大存入數(shù)組中;該整數(shù)既是完全平方數(shù),又有兩個(gè)數(shù)字相同,例如144、676等。
請(qǐng)編制函數(shù)jsValue()實(shí)現(xiàn)此功能,滿足該條件的整數(shù)的個(gè)數(shù)是通過所編制的函數(shù)返回。
最后調(diào)用函數(shù)writeDat()把結(jié)果輸出到文件out7.dat中。
請(qǐng)勿改動(dòng)主函數(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
第7題
下列程序的功能是:在三位整數(shù)(100至999)中尋找符合條件的整數(shù)并依次從小到大存入數(shù)組中;該整數(shù)既是完全平方數(shù),又有兩個(gè)數(shù)字相同,例如144、676等。
請(qǐng)編制函數(shù)jsValue()實(shí)現(xiàn)此功能,滿足該條件的整數(shù)的個(gè)數(shù)是通過所編制的函數(shù)返回。
最后調(diào)用函數(shù)writeDat()把結(jié)果輸出到文件out7.dat中。
請(qǐng)勿改動(dòng)主函數(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<num;i++)
{printf("%d\n",b[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=data-ten*10;
if(hun==ten||hun==data||ten==data)
{bb[k]=i;k++;}
}
j++;
}
}
return k;
}
【解析】
考點(diǎn):(1)在給定范圍內(nèi)按指定條件進(jìn)行查找和篩選;
(2)對(duì)篩選后的結(jié)果進(jìn)行排序處理。
本題的解題思路是:逐個(gè)判斷100~999中的數(shù)字是否為完全平方數(shù),若是完全平方數(shù)則將其各個(gè)位上的數(shù)字分離出來進(jìn)行比較篩選,若有兩個(gè)數(shù)字相同則將其存入數(shù)組bb中。判斷是否為完全平方數(shù),可以通過檢索比其自身小的數(shù)的平方值,若有相等的,則是完全平方數(shù),否則不是完全平方數(shù)。篩選數(shù)據(jù)可以通過一個(gè)if語句來實(shí)現(xiàn)。通過此算法處理后,不用再對(duì)數(shù)組bb進(jìn)行排序,數(shù)組bb中的元素已經(jīng)按升序排序。讀者可以分析其中的道理。
程序的流程是:首先調(diào)用jsValue()函數(shù),并將數(shù)組b作為參數(shù)傳遞給jsValue()函數(shù),然后調(diào)用writeDat()函數(shù)將處理的結(jié)果寫入文件out7.dat中。
在jsValue()函數(shù)中,首先通過參數(shù)接收數(shù)組b的首地址,用于以后存放處理好的數(shù)據(jù)。題目要求查找100~999之間的數(shù)據(jù),故程序執(zhí)行for循環(huán)(i=1000時(shí)循環(huán)結(jié)束),賦j的初值為10,當(dāng)j*j<=i,即i有可能是一個(gè)完全平方數(shù)時(shí),while循環(huán)的條件成立,當(dāng)j*j>i時(shí)while循環(huán)結(jié)束,即i不可能是一個(gè)完全平方數(shù)。
內(nèi)嵌if語句的功能是進(jìn)一步判斷i是否為一個(gè)完全平方數(shù),當(dāng)if語句條件成立時(shí),以下四條語句的功能是將數(shù)據(jù)i分解,i/100得到百位上的數(shù)字,i-hun*100得到十位和個(gè)位上的數(shù)字,data/10得到十位上的數(shù)字,data-ten*10得到個(gè)位上的數(shù)字,接下來if語句的功能是對(duì)分離后的數(shù)字進(jìn)行判斷,如果百位與十位相等或者百位與個(gè)位相等,或者十位與個(gè)位相等時(shí),即有任意兩位數(shù)字相等,就把當(dāng)前數(shù)字i存入到數(shù)組bb中,并且k加1,while循環(huán)結(jié)束,j加1進(jìn)入下一次for循環(huán)。for循環(huán)結(jié)束后,將k返回。函數(shù)結(jié)束。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |