




版權(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 頁 共 18 頁系 別_ _ 實(shí) 驗(yàn) 日 期 2014 年 3月 28日專業(yè)班級(jí)_ _組別_ 實(shí) 驗(yàn) 報(bào) 告 日 期 2014 年 3 月 29日姓 名_ _學(xué)號(hào)_ _ 報(bào) 告 退 發(fā) ( 訂正 、 重做 )同 組 人_ 教 師 審 批 簽 字 一、實(shí)驗(yàn)?zāi)康恼莆蘸瘮?shù)的概念,使用函數(shù)的優(yōu)越性,定義函數(shù)的方法以及調(diào)用函數(shù)的方法。二、實(shí)驗(yàn)內(nèi)容 (一)第一題:編寫字符串反轉(zhuǎn)函數(shù)mystrrev(),該函數(shù)的功能是將指定字符串中的字符順序顛倒排列。然后再編寫主函數(shù)驗(yàn)證之。1.源程序代碼: #include#includeusing nam
2、espace std;void mystrrev(char string);/自定義函數(shù),反轉(zhuǎn)字符串int main()cout請(qǐng)輸入字符串(不多于個(gè)字符):endl;char in81;cin.get(in,81);/輸入字符串,允許輸入空格mystrrev(in);/對(duì)字符串“in”執(zhí)行反轉(zhuǎn)函數(shù)coutendl;return 0;void mystrrev(char string)int m=strlen(string);int mid;for(int i=0;im/2;i+)/將字符串的前一半字符與后一半字符對(duì)應(yīng)交換,因而只執(zhí)行m/2mid=stringi;stringi=stringm
3、-i-1;stringm-i-1=mid;stringm=0;/字符串結(jié)束cout反轉(zhuǎn)結(jié)果為:nstring;2.實(shí)驗(yàn)結(jié)果:由于函數(shù)中有“for(int i=0;im/2;i+)”的語句,為避免該循環(huán)條件不準(zhǔn)確,對(duì)奇數(shù)和偶數(shù)個(gè)的字符均進(jìn)行了檢測(cè),并有對(duì)含空格和符號(hào)的字符串的檢測(cè):(1)奇數(shù):(2)偶數(shù):(3)含空格字符串:3.問題分析:(1)起初沒有用“.get”,不夠全面;(2)如果一直執(zhí)行到i=m的話,就等于反轉(zhuǎn)兩次又回到了原來的字符串順序,因而要考慮只執(zhí)行一半,而由于字符串長(zhǎng)度有奇偶的問題,所以容易錯(cuò)誤;(3)第一次編寫時(shí),沒有寫stringm=0;這使得輸出結(jié)果混亂。(二)第二題:編寫
4、一組求數(shù)組中最大元素和最小元素的函數(shù)。其函數(shù)原型為:int imax(int array,int count); int imin(int array,int count); 1.源程序代碼:#includeusing namespace std;int imax(int array,int count);/求整型數(shù)組的最大元素int imin(int array,int count);/求整型數(shù)組的最小元素int main()int num40,n;coutn;cout請(qǐng)輸入每個(gè)整數(shù):n;int i;for(i=0;inumi;cout最大值為:imax(num,n)endl;cout最小值
5、為:imin(num,n)endl;return 0;int imax(int array,int count)int m=array0;/將最大值的初始值定義為array0for(int i=1;im)m=arrayi;return m;/返回最大值int imin(int array,int count)int l=array0;for(int i=1;icount;i+)if(arrayil)l=arrayi;return l;2.實(shí)驗(yàn)結(jié)果:3.問題分析:(1)起初誤將:cout最大值為:imax(num,n)endl;cout最小值為:imin(num,n)m)if(arrayi ar
6、rayi-1)if(arrayi arrayi-1)導(dǎo)致輸出不正確。(3)雖然理論上應(yīng)該加上判斷輸入的數(shù)字是否為整數(shù)的程序,但考慮到這個(gè)不是重點(diǎn),只是徒勞的增加麻煩,因而就沒有加。(三)第三題:編寫函數(shù)isprime(int a)用來判斷變量a是否為素?cái)?shù),若是素?cái)?shù),函數(shù)返回1,否則返回0。調(diào)用該函數(shù)找出任意給定的n個(gè)整數(shù)中的素?cái)?shù)。1.源程序代碼:#includeusing namespace std;int isprime(int a);int main()coutn;cout請(qǐng)輸入要判斷的各個(gè)數(shù):n;int a50;int i;for(i=0;iai;cout其中的素?cái)?shù)為:n;for(i=0
7、;in;i+)if(isprime(ai)!=0)/若經(jīng)自定義函數(shù)判斷是素?cái)?shù),輸出該數(shù)coutai1&m!=0;i-)/循環(huán)判斷直至能夠整除或者對(duì)全部正整數(shù)判斷完畢m=a%i;return(m!=0?1:0);/若為素?cái)?shù)輸出是,若不是輸出非2.實(shí)驗(yàn)結(jié)果:3.問題分析:(1)對(duì)于“if(isprime(ai)!=0)”,起初寫為“if(isprime(ai)=1)”,沒有認(rèn)識(shí)到只有零和非零的區(qū)別,導(dǎo)致程序始終判斷得到錯(cuò)誤結(jié)果;(2)對(duì)“int m=a-1,i”:原來寫作“int m=a,i;”,這樣的時(shí)候會(huì)將1也作為素?cái)?shù)輸出。為了避免如此,故將m的初始值設(shè)為a-1,這樣的話,輸入1時(shí)m=0,正好
8、能夠使1不經(jīng)過循環(huán)而判斷為合數(shù),同時(shí),輸入2及以上的數(shù)字時(shí),由于初始值m0,也不會(huì)被影響。(四)第四題:(必做題)(注意必須用自定義函數(shù),并和系統(tǒng)庫(kù)函數(shù)asin()進(jìn)行比較測(cè)試檢驗(yàn))1.源程序代碼:/用自定義函數(shù)求arcsin(x),并和系統(tǒng)庫(kù)函數(shù)asin()進(jìn)行比較測(cè)試檢驗(yàn)#include#includeusing namespace std;double jc(int n);/階乘函數(shù)double cf(double x,int n);/乘方函數(shù)double myasin(double x,double last);/開方的函數(shù)int main()double x,u;coutx;whil
9、e(x=1)coutx;coutu;cout自定義函數(shù)計(jì)算結(jié)果是: myasin(x,u)endl;cout庫(kù)函數(shù)執(zhí)行計(jì)算結(jié)果是:asin(x);coutendl;return 0;double jc(int n)int S=1,m=1;while(m=n)S=S*m;m=m+1;return S;/返回S值作為階乘的結(jié)果double cf(double x,int n)double v=1;int m=1;dov=v*x;m=m+1;while(m=n);return v;/返回v為x的n次方double myasin(double x,double last)double sum;int
10、n=1;double in;sum=x;in=jc(2*n)*cf(x,2*n+1)/(cf(2,2*n)*jc(n)*jc(n)*(2*n+1);sum=sum+in;n+;while(in=-last);/未達(dá)到精度時(shí)循環(huán)return sum;2.實(shí)驗(yàn)結(jié)果:(1)特別檢測(cè)了輸入的自變量不符合范圍要求的情況的鑒別:(2)正常運(yùn)行:3.問題分析:(1)題目中用到了三個(gè)自定義函數(shù),分別的作用是:乘方、階乘和求反正弦函數(shù)的自定義函數(shù)主體,前兩個(gè)函數(shù)的出現(xiàn)主要是為了簡(jiǎn)化運(yùn)算過程。由于不知道標(biāo)準(zhǔn)的乘方、階乘庫(kù)函數(shù),所以就自定義了。(2)不足:精確性不太好,如輸入0.5時(shí)差距較大,但一直找不到問題所在。
11、(3)說明:在此題中將精度設(shè)置成了可調(diào)整的,而在下題中則設(shè)置為不可調(diào)整。貌似應(yīng)該都設(shè)為不可調(diào)整的,但個(gè)人覺得可調(diào)整的雖然麻煩且不一定精確,但也人性化。五、第五題:(必做題)編寫計(jì)算平方根函數(shù),并和庫(kù)函數(shù)進(jìn)行比較測(cè)試檢驗(yàn)。提示:采用牛頓迭代法,計(jì)算精度10-7。函數(shù)原型:doublen mysqrt ( double x )#include#includeusing namespace std;double mysqrt(double x);int main()double x;coutx;cout自定義函數(shù)計(jì)算結(jié)果是:mysqrt(x)endl;cout庫(kù)函數(shù)計(jì)算結(jié)果是:sqrt(x)0.00
12、0000001|f_-f0.000000001);/未達(dá)到精度時(shí)循環(huán)return f;/返回最終結(jié)果到mysqrt2.實(shí)驗(yàn)結(jié)果:(1)結(jié)果為整數(shù)的:(2)結(jié)果為非整數(shù)的:很準(zhǔn)確! 六、第六題:編寫函數(shù)判定一個(gè)正整數(shù)是否是遞增數(shù),即該數(shù)各位數(shù)字從左至右遞增排列,例如:1122334、123456、5599、22222222等都是遞增數(shù)。例如:32768、43987、123498都不是遞增數(shù)。顯示輸出0至9999999之間所有遞增數(shù)。1源程序代碼:#includeusing namespace std;int my(int n);/自定義函數(shù),判斷是不是遞增數(shù)的主體函數(shù)int ws(int n);
13、/自定義函數(shù),求n的位數(shù)的函數(shù),使用到自定義函數(shù)my中int main()int n=9999999,m;cout0到之間的遞增數(shù)有:n;for(m=0;m=n;m+)if(my(m)!=0)coutm、;return 0;int my(int n)int gwsz10;int i,k=1;int m=ws(n);for(i=0;im;i+)gwszi=(n/k)%10;/至此,已得到各位數(shù)k=k*10;int u;for(i=0,u=0;i=gwszi+1)u+;return (u=m-1?1:0);/通過u的最終大小來判斷是否遞增,只有都是遞增才能使得u=m-1int ws(int n)/
14、判斷位數(shù),輸出的ws(n)為位數(shù)int i;for(i=0;n=1;i+)n=n/10;return i;2實(shí)驗(yàn)結(jié)果:3.問題分析:(1)一,要設(shè)計(jì)一個(gè)識(shí)別是否為遞增數(shù)的函數(shù),這個(gè)函數(shù)作為分離出主函數(shù)的函數(shù);二,在輸出0到999999之間遞增數(shù)時(shí),主函數(shù)中用到循環(huán)體,從0逐一循環(huán)到9999999每次都用函數(shù)進(jìn)行判斷是否遞增;三,在分離出的函數(shù)中,返回值應(yīng)該為是或否,1或0,然后在主函數(shù)中判斷是否輸出;或者不返回,直接輸出也可以。四,需要有一個(gè)識(shí)別整數(shù)位數(shù)的系統(tǒng)以及一個(gè)分離各個(gè)位上的數(shù)字的程序。(2)對(duì)于:if(gwszi=gwszi+1)u+;return (u=m-1?1:0);只有在該m位
15、數(shù)的每?jī)蓚€(gè)相鄰位數(shù)字均為遞增的時(shí)候,才能使得u每次都增加1,從而最終得到u=m-1;只要有一個(gè)地方不滿足,就可以說明不是遞增的。故可以用該條件判斷是否遞增。(七)第七題:(選作題)假設(shè)有如下一元多項(xiàng)式: anXn+an-1Xn-1+.+a1X1+a0編寫程序求該多項(xiàng)式的值和多項(xiàng)式導(dǎo)數(shù)的值,這兩個(gè)結(jié)果值的計(jì)算都必須采用函數(shù)求得,具體函數(shù)原型如下: double dxs(double a,double x,int n) double dxsds(double a,double x,int n)形式參數(shù)a用來存放多項(xiàng)式n+1個(gè)系數(shù),x為多項(xiàng)式的變量,n為次方數(shù)。(提示:先輸入某個(gè)多項(xiàng)式系數(shù),然后輸出
16、該多項(xiàng)式及其導(dǎo)數(shù)多項(xiàng)式,再輸入某個(gè)x的值,再輸出多項(xiàng)式和導(dǎo)數(shù)的計(jì)算結(jié)果值)1.源程序代碼:#includeusing namespace std;double dxs(double a,double x,int n);double dxsds(double a,double x,int n);double cf(double x,int n);int main()int n;coutn;cout請(qǐng)按照從低次到高次的順序依次輸入系數(shù):n;int i=0;double a30;/在假設(shè)最高項(xiàng)次數(shù)不超過的前提下docoutaiai;i+;while(i=n);cout0;i-)/輸出多項(xiàng)式表達(dá)式coutai*xi+;couta0endl;cout1;i-)/輸出多項(xiàng)式導(dǎo)函數(shù)表達(dá)式coutai*i*xi-1+;couta1endl;int x;coutx;cout在自變量x=x下,該多項(xiàng)式的值為: dxs(a,x,n)endl;cout其導(dǎo)數(shù)值為:dxsds(a,x,n)=0;i-)s=s+ai*cf(x,i);return s;double dxsds(doub
溫馨提示
- 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. 人人文庫(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 排放應(yīng)急響應(yīng)補(bǔ)充協(xié)議
- 《暗黑系童話》課件
- 《GBT43706-2024資產(chǎn)管理戰(zhàn)略資產(chǎn)管理計(jì)劃(SAMP)實(shí)施指南》(2025版)深度解析
- 電氣檢修班組安全培訓(xùn)
- 《復(fù)合性骨折護(hù)理與康復(fù)》課件
- 高分獲取2025年建造師試題及答案
- 《員工激勵(lì)機(jī)制》課件
- 科技館安全培訓(xùn)
- 企業(yè)全面風(fēng)險(xiǎn)管理體系構(gòu)建
- 生產(chǎn)消防安全知識(shí)培訓(xùn)大綱
- 【MOOC】創(chuàng)業(yè)基礎(chǔ)-暨南大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 中建專項(xiàng)施工電梯專項(xiàng)施工方案
- 全國(guó)各省市一覽表
- 餐飲的勞務(wù)合同(2篇)
- 山東省濰坊市2023-2024學(xué)年高二下學(xué)期期末考試 歷史 含解析
- 2024-2025學(xué)年中職歷史世界歷史高教版(2023)教學(xué)設(shè)計(jì)合集
- 阿里云:云上數(shù)字政府之:政務(wù)云統(tǒng)籌運(yùn)營(yíng)建設(shè)指南
- 鴿巢問題-公開課教案教學(xué)設(shè)計(jì)課件案例試卷題
- 《磷污染的物化處理》筆記
- 2024年新人教版七年級(jí)數(shù)學(xué)下冊(cè)期末考試數(shù)學(xué)試卷-含答案
- 防暑應(yīng)急救援演練腳本
評(píng)論
0/150
提交評(píng)論