西安交大C+程序設(shè)計(jì)第六章作業(yè)_第1頁(yè)
西安交大C+程序設(shè)計(jì)第六章作業(yè)_第2頁(yè)
西安交大C+程序設(shè)計(jì)第六章作業(yè)_第3頁(yè)
西安交大C+程序設(shè)計(jì)第六章作業(yè)_第4頁(yè)
西安交大C+程序設(shè)計(jì)第六章作業(yè)_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、西安交通大學(xué)實(shí)驗(yàn)報(bào)告課程計(jì)算機(jī)程序設(shè)計(jì)實(shí)驗(yàn)名稱指針與函數(shù)第1頁(yè)共25頁(yè)系別實(shí)驗(yàn)日期2014年4月18日專業(yè)班級(jí)組別實(shí)驗(yàn)報(bào)告日期2014年4月19日姓名學(xué)號(hào)_報(bào)告-退發(fā)(訂正、重做)同組人教師審批簽字一、實(shí)驗(yàn)?zāi)康膶W(xué)會(huì)使用遞歸函數(shù)和函數(shù)重載,進(jìn)一步熟練動(dòng)態(tài)分配等指針使用方法。二、實(shí)驗(yàn)內(nèi)容(一)第一題:1、(必做題)使用遞歸算法編寫如下程序:對(duì)于任意給定的實(shí)數(shù)X和整數(shù)k( k0),計(jì)算Xk。1. 源程序代碼:#in cludeusing namespacestd;double yunsuan(double x,int k);遞歸函數(shù)用于計(jì)算 xAkint mai n()double x;int k;

2、cout請(qǐng)輸入實(shí)數(shù)x:;cin x;cout請(qǐng)輸入正整數(shù)k:;cin k;while(k k;coutvv計(jì)算結(jié)果是:xA k= yu nsua n(x,k)e ndl;/輸出運(yùn)算結(jié)果 return 0;double yun sua n(double x,i nt k)if(k=1)/k=1時(shí)不再進(jìn)行循環(huán),輸出值為xreturn x;elsedouble s=x*yu nsua n(x,k-1);對(duì)于k大于1的情況,進(jìn)入下一循環(huán) return s;2. 實(shí)驗(yàn)結(jié)果:(1) 輸入X正實(shí)數(shù):(2) 輸入X正整數(shù):輸入x為負(fù)數(shù):(4)輸入k為負(fù)數(shù):3. 問題分析:該函數(shù)的循環(huán)方式是:xAk=x*xA(

3、k-1).設(shè)f(x,k)=xAk,那么就有f(x,k)=f(x,k-1)*x.而其結(jié)束遞歸的條件是k=1,此時(shí)有f(x,1)=x,由此給出初值。(二) 第二題: 使用遞歸算法編寫求斐波那契數(shù)列的第 n 項(xiàng)的函數(shù),并編出主函數(shù)進(jìn)行驗(yàn)證。1. 源程序代碼:#include using namespacestd;int fib( int n) /遞歸函數(shù),計(jì)算斐波那契數(shù)列的第n項(xiàng)if (n=0)對(duì)于n=0不再進(jìn)行遞歸,返回值0return 0;elseif (n=1)return 1; /對(duì)于n=1不再進(jìn)行遞歸,返回值1elseint s=fib(n-1)+fib(n-2);/將計(jì)算第n項(xiàng)歸為計(jì)算第

4、n-1和n-2項(xiàng)return s;int main()int n;coutvv請(qǐng)輸入要計(jì)算的項(xiàng)數(shù)(非負(fù)整數(shù)):;/提示輸入項(xiàng)數(shù),首項(xiàng)為第0項(xiàng) cinn;while (n0) / 對(duì)于不符合要求的輸入值重新輸入coutn;cout 計(jì)算結(jié)果是: fib n= fib(n)endl; / 輸出計(jì)算結(jié)果 return 0;2. 實(shí)驗(yàn)結(jié)果:(1) 輸入項(xiàng)數(shù)正確( 0 或正整數(shù)):(2) 輸入項(xiàng)數(shù)有誤(負(fù)數(shù)):3. 問題分析:該題的遞歸方式:第n項(xiàng)為之前兩項(xiàng)之和,即:fib(n)二fib(n-1)+fib(n-2),由此遞歸至fib(1)和fib(2)時(shí)結(jié)束遞歸,而fib(1)和fib(2)已知。(三)

5、 第三題:重載判斷兩個(gè)數(shù)值大小的函數(shù) max ,這些數(shù)值可能是整型數(shù)、 實(shí)型數(shù)和字符型,函數(shù)的返回值為兩個(gè)數(shù)值中的最大值。1. 源程序代碼:#includeusingnamespacestd;double zhua nhua nChar *c)/為了避免語句的重復(fù),將字符與數(shù)值轉(zhuǎn)換部分作為函數(shù)int i=0;double x=0;if(cO=-|cO=+)若首字符為或者則跳過i+;while(ci!= O&ci!= .)/對(duì)于整數(shù)部分逐位累加,直至遇到小數(shù)點(diǎn)或者數(shù)字結(jié)束 x=x*1O+(ci- O);i+;if(ci=.)/對(duì)于小數(shù)部分進(jìn)行累加double s;/s用來反映數(shù)字所在位置是小數(shù)點(diǎn)

6、后第幾位,就用該數(shù)乘以的負(fù)幾次方(s)i+;/從小數(shù)點(diǎn)后的一位開始循環(huán)for(s=O.1;ci!=O;i+)x=x+s*(ci- O); s=s/1O;if (c0=-)/若為負(fù)數(shù),則在上述計(jì)算基礎(chǔ)上乘以-1得到最終值 x=-x;return x;/返回x作為char c的對(duì)應(yīng)的數(shù)值int imax(i nt a,int b)對(duì)整型數(shù)進(jìn)行處理 if(a=b)return a;return b;double imax(double a,double b)/ 對(duì)實(shí)數(shù)進(jìn)行處理if(a=b)return a;return b;double imax( char *c, char *d)/ 對(duì)字符型進(jìn)行

7、處理double x=zhuanhuan(c);double y=zhuanhuan(d);return (x=y?x:y);int main()int n;coutvv請(qǐng)選擇您要輸入的數(shù)的類型,n如果是整型請(qǐng)輸入,實(shí)數(shù)型輸入,字符型輸入:ncinn;while (n!=1&n!=2&n!=3)coutvv輸入有誤!重新選擇:;cinn;int a2;double b2;char c12,d12;if(n=1)處理整型數(shù)cout請(qǐng)輸入兩個(gè)數(shù):;cina0a1;coutvv最大值為:b0b1;coutvv最大值為:c;coutvv請(qǐng)輸入第二個(gè)數(shù):;cind;coutvv最大值為:vvimax(c

8、,d);coutvvendl;return 0;2. 實(shí)驗(yàn)結(jié)果:(1)輸入整數(shù)型:2)輸入為實(shí)數(shù):3)輸入為字符:正數(shù):(帶正號(hào)):(不帶正號(hào)):整數(shù):負(fù)數(shù):3. 問題分析:該題的重點(diǎn)在于字符型的處理。在實(shí)驗(yàn)報(bào)告中,采取了兩個(gè)數(shù)字逐個(gè)分 開輸入的方法,因而主要只需要判斷開頭是否為負(fù)號(hào)、中間是否有小數(shù)點(diǎn)并區(qū) 別小數(shù)點(diǎn)前后處理方法的不同這幾個(gè)問題。如果能夠一次性輸入兩個(gè)數(shù)中間用 空格隔開的話,就需要判斷空格的位置,然后對(duì)空格之后的部分再進(jìn)行與前半 部分相同的判斷方法,顯得更加麻煩。對(duì)字符型的處理思路:首先判斷首字符是不是 “-”或者 “+,”如果是的話,先跳過從第二個(gè)字符開 始處理,在最終的結(jié)果中

9、再乘以 -1 即可;然后對(duì)于接下來的整數(shù)部分進(jìn)行累 加,直到遇見小數(shù)點(diǎn),若沒有小數(shù)點(diǎn)則一直執(zhí)行到字符結(jié)束;如果有小數(shù)點(diǎn)的 話,對(duì)于小數(shù)點(diǎn)后的部分再進(jìn)行累加得到結(jié)果。四、第四題: 編寫一個(gè)函數(shù),用于去掉字符串前面的空格,其原型為char *myltrim(char *string);其中參數(shù) string 為字符串,返回值為指向 string 的指針。1. 源程序代碼:#includeusing namespacestd;char *myltrim( char *string)int i=0,j=0;while (*(string+i)= )i+;do*(string+j)=*(string+i

10、);i+;j+; while (*(string+i-1)!= 0);return string;int main()char string41;coutvv請(qǐng)輸入字符串:;cin.get(string,40);cout去掉開頭的空格之后為:nmyltrim(string)endl; return 0;2. 實(shí)驗(yàn)結(jié)果:為驗(yàn)證處理空格時(shí)僅是將開頭處理而不處理中間空格:(1) 中間無空格:(2) 中間有空格:3. 問題分析 :曾經(jīng)出現(xiàn)的問題:起初運(yùn)行時(shí)發(fā)現(xiàn),即使沒有判斷開頭空格的程序,輸出結(jié)果 也是沒有空格的,后來檢查發(fā)現(xiàn)是輸入語句沒有寫為 cin.get 導(dǎo)致空格不被錄 入。五、第五題:用牛頓迭

11、代法求任意一元方程: anXn+an-1Xn-1+a1X1+a0=0的根。提示:迭代公式: Xn+1 = Xn + f(Xn) / f(Xn)結(jié)束迭代過程的條件為(|f(Xn+1)|v B與(|Xn+1 - Xn| Q同時(shí)成立,其中e為預(yù)先給定的精度要求。1. 源程序代碼:#includeusing namespacestd;double cf(double x,int k)乘方函數(shù),輸出結(jié)果為x的k次方 double s=1;whi le (k0)s=s*x;k-;return s;double f(int n,double *a,double x)計(jì)算函數(shù)值 f(x)的函數(shù)double s

12、um=0;for(int i=0;in;i+)sum=sum+(*(a+i)*cf(x,i);return sum;double f_(int n ,double *a, double x)/ 求導(dǎo) f_(x)函數(shù)double sum=0;for(int i=1;i=u|f( n,a,x)v=-u|x-m=u|x-mn;double *a=new doublen+1;申請(qǐng)數(shù)組空間 coutvv請(qǐng)從低到高輸入系數(shù):;for(i=0;i*(a+i);double x=0;coutvv計(jì)算結(jié)果為:result( n+1,a,x)e ndl;delete a ;/釋放數(shù)組空間return 0;2. 實(shí)

13、驗(yàn)結(jié)果:3. 問題分析:思路分析: 程序中用到的多個(gè)函數(shù):乘方函數(shù)、計(jì)算 f(x)、f_(x) 的函數(shù)、自定 義的求根的主體的函數(shù)、主函數(shù)。乘方函數(shù)用于計(jì)算 f(x)、f_(x),f(x) 、f_(x) 函數(shù)的使用簡(jiǎn)化求根的函數(shù)。六、第六題: 將數(shù)字、小數(shù)點(diǎn)、正負(fù)號(hào)組成的字符串轉(zhuǎn)換成相應(yīng)的實(shí)數(shù),例如: -3.14159變成-3.14159。函數(shù)原型如下: double myatof(char *num) ;要求 編寫主函數(shù)加以測(cè)試。1. 源程序代碼:#include double myatof( char *num); using namespacestd; int main() char n

14、um20;coutvv請(qǐng)輸入數(shù)值:;cinnum;coutvv轉(zhuǎn)換結(jié)果為:myatof( num )e ndl;cout檢驗(yàn):myatof(num)+1= myatof(num)+1endl; return 0;double myatof(char *a)int i=0; double x=0;if(*(a+0)=-|*(a+0)=+)若首字符為或 +則跳過i+;while(*(a+i)!= 0&*(a+i)!= .)/對(duì)于整數(shù)部分逐位累加,直至遇到小數(shù)點(diǎn)或者數(shù)字結(jié)束 x=x*10+(*(a+i)- 0);i+;if(ai=.)對(duì)于小數(shù)部分進(jìn)行累加double s;/s用來反映數(shù)字所在位置是小

15、數(shù)點(diǎn)后第幾位,就用該數(shù)乘以的負(fù)幾次方(s)i+;/從小數(shù)點(diǎn)后的一位開始循環(huán) for(s=0.1 ;ai!= 0 ;i+)x=x+s*(ai- 0);s=s/10; if(a0=-)/若為負(fù)數(shù),則在上述計(jì)算基礎(chǔ)上乘以-1得到最終值 x=-x;return x;/返回x作為char c的對(duì)應(yīng)的數(shù)值2. 實(shí)驗(yàn)結(jié)果:對(duì)整數(shù)、負(fù)數(shù)、小數(shù)等均進(jìn)行檢測(cè):(1)小數(shù)、負(fù)數(shù):2)整數(shù):正):負(fù)):3)0:3. 問題分析:此題與第二題處理字符類似,需要處理開頭正負(fù)號(hào)、小數(shù)點(diǎn)(七)第七題:在字符串T中查找子串S,若找到,返回子串的個(gè)數(shù),若找不到返回 0。要求編寫主函數(shù)加以測(cè)試。1. 源程序代碼:#includeus

16、ing namespacestd;int find( char *a,char *b)int i,s=0,x=strlen(a),y=strlen(b);for(i=0;i=x-y;i+)if (b0=ai) /找到首字符相同的位置int j=0;while(bj=ai+j&i+jb;coutvv字符串 n “Vvav ”n中子串 “Vvbv ”的個(gè)數(shù)為:find(a,b)#includevcmathusingnamespacestd;int main()int n;coutvv請(qǐng)輸入整數(shù):;cinn;if (n0) couterror!;/對(duì)于輸入小于,輸出“ error ”elsecout

17、vv轉(zhuǎn)換結(jié)果是:n;if(n=0)對(duì)于輸入,輸出zero cout=1;m+) /求得所輸入數(shù)n的位數(shù)mx=x/10;int a=m/3,b=m%3;int *num=newint3*(a+1);int j;for(j=0,x=n;j=0;i-) /由高位到低位,每三位一循環(huán)if(nu m3*i+20) 3i+2 位 cout*(u+num3*i+2-1) hundred ;if(num3*i+1=1) 3i+1 位為時(shí),根據(jù) i位輸出 ten、eleven cout*(q+num3*i) ;else/若i+1位不是,可能是到或 if(num3*i+1!=0) /對(duì)于到則輸出,則跳過 cout*(v+num3*i+1-2) ;if(num3*i!=0) cout*(u+num3*i-1)0&i=3&(num3*i+1!=0|num3*i+2!=0|num3*i!=0) 不全為時(shí),輸出對(duì)應(yīng)的單位cout*(w+i-1) ;coutendl; return 0;2. 實(shí)驗(yàn)結(jié)果:(1) 一位數(shù):(2) 兩位數(shù):(3) 帶正號(hào):國(guó)9 C:svindow55ystem3-2cmd .exe卜口 II 回請(qǐng)輸入整數(shù)=+256A n轉(zhuǎn)換結(jié)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論