




已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)3 函數(shù)與程序結(jié)構(gòu)實(shí)驗(yàn)3.1 實(shí)驗(yàn)?zāi)康模?)熟悉和掌握函數(shù)的定義、聲明;函數(shù)調(diào)用與參數(shù)傳遞方法;以及函數(shù)返回值類型的定義和返回值使用。(2)熟悉和掌握不同存儲(chǔ)類型變量的使用。(3)熟悉多文件編譯技術(shù)。3.2 實(shí)驗(yàn)內(nèi)容及要求3.2.1源程序改錯(cuò)下面是計(jì)算s=1!+2!+3!+n!的源程序,在這個(gè)源程序中存在若干語法和邏輯錯(cuò)誤。要求在計(jì)算機(jī)上對(duì)這個(gè)例子程序進(jìn)行調(diào)試修改,使之能夠正確完成指定任務(wù)。1 #include2 int main(void)3 4 int k;5 for(k=1;k6;k+)6 printf(k=%dtthe sum is %ldn,k,sum_fac(k);7 8 return 0;9 long sum_fac(int n)10 11 long s=0;12 int i;13 long fac;14 for(i=1;i=n;i+)15 fac*=i;16 s+=fac;17 return s;18 解答:(1)錯(cuò)誤修改1) 未聲明函數(shù)sum_fac(int n)的情況下,就調(diào)用函數(shù)。2) 第8行中,return 0;語句應(yīng)放在主函數(shù)中。3) 第15,16行,應(yīng)該被括號(hào)括起來,否則程序意義不是計(jì)算階乘的和。 (2)修改錯(cuò)誤后的程序?yàn)?#includelong sum_fac(int n);int main(void) int k; long sum_fac(int n); for(k=1;k6;k+) printf(k=%dtthe sum is %ldn,k,sum_fac(k); return 0;long sum_fac(int n) long s=0; int i; long fac=1; for(i=1;i=n;i+) fac*=i; s+=fac; return s;(3)運(yùn)行結(jié)果 圖1 3.2.1程序運(yùn)行截圖3.2.2源程序修改替換(1)修改第1題中sum_fac函數(shù),使其計(jì)算量最小。解答:1)將long設(shè)為靜態(tài)局部變量,當(dāng)退出函數(shù)時(shí),long的值被保存在內(nèi)存中,再次調(diào)用函數(shù)時(shí),不用再對(duì)long初始化,靜態(tài)局部變量的值具有記憶性。替換后的程序如下所示:#includelong sum_fac(int n);int main(void) int k; for(k=1;k6;k+) printf(k=%dtthe sum is %ldn,k,sum_fac(k); return 0;long sum_fac(int n) static long s=0; int i; long fac=1; for(i=1;i=n;i+) fac*=i; s+=fac; return s;2)運(yùn)行截圖及說明 圖2 3.2.2(1)程序運(yùn)行截圖(2)修改第1題中sum_fac函數(shù),計(jì)算。解答:1)第1題計(jì)算的是階乘的和,而現(xiàn)在需要計(jì)算階乘的倒數(shù)的和。只需將s+=fac替換為s+=1.0/fac即可。替換后的程序如下所示:#includeint main(void) int k; double sum_fac(int n); for(k=1;k6;k+) printf(k=%dtthe sum is %lfn,k,sum_fac(k); return 0; double sum_fac(int n) double s=0; int i; long fac=1; for(i=1;i=n;i+) fac*=i; s+=1.0/fac; return s;2)運(yùn)行截圖及說明圖3 3.2.2(2)程序運(yùn)行截圖3.2.3跟蹤調(diào)試計(jì)算fabonacci數(shù)列前n項(xiàng)和的程序如下:其中,long sum=0,*p=∑聲明p為長(zhǎng)整型指針并用&sum取出sum的地址對(duì)p初始化。*p表示引用p所指的變量(*p即sum)。 #include;int main(void)long fabonacci(int n); int i,k; long sum=0,*p=∑ scanf(%d,&k); for(i=1;i=k;i+) sum+=fabonacci(i); printf(i=%dtthe sum is %ldn,i,*p);return0;long fabonacci(int n) if(n=1 | n=2) return 1; else return fabonacci(n-1)+fabonacci(n-2);單步執(zhí)行程序,觀察p,i,sum,n值。(1)剛執(zhí)行完scanf(%d,&k);語句,p,i值是多少?p=(long int)0x28ff00 i=60(2)從fabonacci函數(shù)返回后光條停留在哪個(gè)語句上? 光條停留在語句printf(i=%dtthe sum is %ldn,i,*p);(3)進(jìn)入fabonacci函數(shù),watch窗口顯示的是什么? 輸入k=6時(shí),i與sum的值的變化。 (4)當(dāng)i=3,從調(diào)用fabonacci函數(shù)到返回,n值如何變化? 3.2.4程序設(shè)計(jì)(1)編程讓用戶輸入兩個(gè)整數(shù),計(jì)算兩個(gè)數(shù)的最大公約數(shù)并且輸出之(要求用遞歸函數(shù)實(shí)現(xiàn)求最大公約數(shù))。同時(shí)以單步方式執(zhí)行該程序,觀察遞歸過程。解答:1) 解題思路1. 輸入兩個(gè)整數(shù)x,y。2. 判斷x與y的大小,若xy,將x與y對(duì)換。3. 如果x%y=0,輸出y。4. 否則,yueshu(y,x%y)。2) 程序清單。int main()int x,y;printf(請(qǐng)輸入兩個(gè)不為0的整數(shù):);scanf(%d%d,&x,&y);printf(這兩個(gè)整數(shù)的最大公約數(shù)是%d,yueshu(x,y);return 0; int yueshu(int x,int y)int z;if(xy)z=x;x=y;y=z;if(x%y=0)return y;elsereturn yueshu(y,x%y);3) 測(cè)試。測(cè)試用例輸入的兩個(gè)整數(shù) 應(yīng)輸出的理論結(jié)果用例1 24 78 6用例2 98 28 14 圖4 3.2.4(1)用例1程序運(yùn)行截圖 圖5 3.2.4(1)用例2程序運(yùn)行截圖(2) 編程驗(yàn)證歌德巴赫猜想:一個(gè)大于等于4的偶數(shù)都是兩個(gè)素?cái)?shù)之和。解答:1)解題思路1. 先輸入一個(gè)大于等于4的偶數(shù)z, n的起始值為0。2. 將z分為相等兩部分,x1為z/2+n,另一部分為z-x1。3. 先判斷x1是不是質(zhì)數(shù),如果不是,則n+1,直到n=z/2。4. 如果x1是質(zhì)數(shù),再判斷x2是不是質(zhì)數(shù)。5. 如果是質(zhì)數(shù),輸出x1,x2。6. n+1, 直到n=z/2?;氐降?步。2)程序清單:#include int main()int x1,x2,z,n,i,k;printf(請(qǐng)輸入一個(gè)大于等于4的偶數(shù):);scanf(%d,&z); for(n=0;nz/2;n+)x1=z/2+n; for(i=2;iz/2;i+) if(x1%i=0)break; if(i=z/2) x2=z-x1; for(k=2;k=4 is the sum of two primes.10=3+712=5+720=3+17解答:1) 解題思路:1 輸入符號(hào)常量BEGIN和END。2 定義偶數(shù)z為BEGIN+j,j的初始值為0。3 判斷j是否小于END-BEGIN。4 若小于END-BEGIN,將z分為相等兩部分,x1為z/2+n,另一部分為z-x1,n的初始值為0。5 先判斷x1是不是質(zhì)數(shù),如果不是,則n+1,直到n=z/2。6 如果x1是質(zhì)數(shù),再判斷x2是不是質(zhì)數(shù)。7 如果是質(zhì)數(shù),輸出x1,x2。8 j=j+2,回到第3步。 2)程序清單:#includeint main() int x1,x2,z,n,i,k,j; int BEGIN,END; scanf(%d%d,&BEGIN,&END); printf(GOLDBACHS CONJECTURE:n); printf(Every even number n=4 is the sum of two primes.n); for(z=BEGIN;z=END;z=z+2) for(n=1;nz/2;n+) x1=z/2+n; for(i=2;iz/2;i+) if(x1%i=0)break; if(i=z/2) x2=z-x1; for(k=2;kx2;k+) if(x2%k=0)break; if(k=x2) printf(%d=%d+%dn,z,x2,x1); 3)測(cè)試。 圖11 3.2.4(3)用例1程序運(yùn)行截圖 圖12 3.2.4(3)用例2程序運(yùn)行截圖3.2.5選做題假設(shè)一個(gè)C程序由file1.c、file2.c兩個(gè)源文件和一個(gè)file.h頭文件組成,file1.c、file2.c和file.h的內(nèi)容分別如下,試編輯該多文件C程序,并編譯和鏈接。然后運(yùn)行生成的可執(zhí)行文件。源文件file1.c的內(nèi)容為:#include file.hint x,y; /* 外部變量的定義性說明 */char ch; /* 外部變量的定義性說明 */int main(void) x=10; y=20; ch=getchar(); printf(in file1 x=%d,y=%d,ch is %cn,x,y,ch);func1();return 0;源文件file2.c的內(nèi)容為:#include file.hvoid func1(void) x+; y+; ch+; printf(in file2 x=%d,y=%d,ch is %cn,x,y,ch);頭文件file.h的內(nèi)容為:#include extern int x,y; /* 外部變量的引用性說明 */extern char ch; /* 外部變量的引用性說明 */void func1(void); /* func1函數(shù)原型 */解答:1) 程序清單:源文件file1.c的內(nèi)容為:#include file.hint x,y; char ch; int main(void) x=10; y=20; ch=getchar(); printf(in file1 x=%d,y=%d,ch is %cn,x,y,ch);func1();return 0;源文件file2.c的內(nèi)容為:#include file.hvoid func1(void) x+; y+; ch+; printf(in file2 x=%d,y=%d,ch is %cn,x,y,ch);頭文件file.h的內(nèi)容為:#include extern int x,y; extern char ch;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 國(guó)際技術(shù)服務(wù)合同
- 委托施工建設(shè)協(xié)議
- 壓縮機(jī)冷凍油更換合同范本
- 分期車抵押合同范本
- 宅基地合伙建房協(xié)議書范文模板
- 鹵菜擺攤轉(zhuǎn)讓合同范本
- 汽車售后合作合同范本
- 出租土地違約合同范本
- 企業(yè)售房合同范本
- 中租租船合同范本
- 【正版授權(quán)】 IEC 62317-9:2006+AMD1:2007 CSV EN Ferrite cores - Dimensions - Part 9: Planar cores
- 《阿Q正傳》(課件)2023-2024高二語文選擇性必修下冊(cè)
- 東營(yíng)銀行2023年度招聘160名高校畢業(yè)生筆試上岸歷年典型考題與考點(diǎn)剖析附帶答案詳解
- 2024屆遼寧省沈陽市名校中考化學(xué)模擬試題含解析
- 2024年湖南民族職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫及答案解析
- (2024年)電工安全培訓(xùn)(新編)課件
- 國(guó)際貿(mào)易理論與實(shí)務(wù)(陳巖 第四版) 課件全套 第0-16章 緒論、國(guó)際貿(mào)易理論、國(guó)際貿(mào)易政策-國(guó)際貿(mào)易方式
- 品質(zhì)人員培訓(xùn)資料
- 小學(xué)語文中高年級(jí)單元整體教學(xué)設(shè)計(jì)的實(shí)踐研究(結(jié)題報(bào)告)
- 浙江金融職業(yè)學(xué)院?jiǎn)握小堵殬I(yè)技能測(cè)試》參考試題庫(含答案)
- 版國(guó)際《壓力性損傷的預(yù)防與治療:臨床實(shí)踐指南》解讀
評(píng)論
0/150
提交評(píng)論