本系列資料由"韜略宏智" 授權發布,任何網站不得轉載,否則追究法律責任。
第5題:
編寫函數jsValue(),它的功能是:求Fibonacci數列中大于t的最小一個數,結果由函數返回。其中Fibonacci數列F(n)的定義為:
F(0)=0,F(1)=1
F(n)=F(n-1)+F(n-2)
最后調用函數writeDat()讀取50個數據t,分別得出結果且把結果輸出到文件out5.dat中。
第6題:
請編寫函數countValue(),它的功能是:求n以內(不包括n)同時能被3與7整除的所有自然數之和的平方根s,并作為函數值返回,最后結果s輸出到文件out6.dat中。
例如若n為1000時,函數值應為:s=153.909064。
部分程序已經給出。
請勿改動主函數main()和輸入輸出數據函數progReadWrite()的內容。
#include <conio.h>
#include <math.h>
#include <stdio.h>
double countValue(int n)
{
}
main()
{
clrscr();
printf("the root during the total of the numbers=%f\n",countValue(1000));
progReadWrite();
}
progReadWrite()
{
FILE *fp,*wf;
int i,n;
float s;
fp=fopen("in6.dat","r");
if(fp==NULL)
{
printf("the datafile in6.dat is not exist!");
return;
}
wf=fopen("out6.dat","w");
for(i=0;i<10;i++)
{
fscanf(fp,"%d\n",&n);
s=countValue(n);
fprintf(wf,"%f\n",s);
}
fclose(fp);
fclose(wf);
}
【答案】
double countValue(int n)
{
double xy=0.0;
int i;
for(i=1;i<n;i++)
if(i%3==0&&i%7==0)
xy+=i;
xy=sqrt((double)xy);
return xy;
}
【解析】
考點:(1)按條件查找數字;
(2)對查找結果進行再加工。
本題的解題思路是:先對1到n之間的所有數字進行篩選,若能被3和7整除,則將其累加到一個臨時變量中,再通過sqrt()函數求出其平方根。判斷是否能整除,可以通過判斷該數字模3和模7結果來實現,若為0則能整除。為了保證結果的精確度,在調用sqrt()函數的時候,需要將sqrt()函數的參數強制轉換成雙精度類型。此部分考生應該仔細分析。
程序的流程是:首先調用countValue()函數,并傳遞給countValue()函數一個參數,然后由progReadWrite()函數將結果寫回文件out6.dat中。
在countValue()函數中,首先要求傳遞一個整型變量作為參數,其作用是在該參數范圍以內進行查找符合條件的整數,然后通過一個for循環,依次取出比n小的各個自然數進行判斷,for循環的結束條件是i=n,即所有的數字都查找完成后結束,if語句的功能是判斷數字是否能被3和7整除,如果if語句的條件成立,則將該數累加到臨時變量xy中,最后通過求平方根函數sqrt()求得xy的平方根,并存入到xy中。在求平方根時,為保證精度,先將xy強制轉化成雙精度實型數據,注意強制類型轉換的括號不可以省略。最后將xy返回,函數結束。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |