




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、西安交通大學實驗報告課程_計算機程序設計_實驗名稱_函數_第 1 頁 共 18 頁系 別_ _ 實 驗 日 期 2014 年 3月 28日專業班級_ _組別_ 實 驗 報 告 日 期 2014 年 3 月 29日姓 名_ _學號_ _ 報 告 退 發 ( 訂正 、 重做 )同 組 人_ 教 師 審 批 簽 字 一、實驗目的掌握函數的概念,使用函數的優越性,定義函數的方法以及調用函數的方法。二、實驗內容 (一)第一題:編寫字符串反轉函數mystrrev(),該函數的功能是將指定字符串中的字符順序顛倒排列。然后再編寫主函數驗證之。1.源程序代碼: #include<iostream>#
2、include<cstring>using namespace std;void mystrrev(char string);/自定義函數,反轉字符串int main()cout<<"請輸入字符串(不多于個字符):"<<endl;char in81;cin.get(in,81);/輸入字符串,允許輸入空格mystrrev(in);/對字符串“in”執行反轉函數cout<<endl;return 0;void mystrrev(char string)int m=strlen(string);int mid;for(int i=
3、0;i<m/2;i+)/將字符串的前一半字符與后一半字符對應交換,因而只執行m/2mid=stringi;stringi=stringm-i-1;stringm-i-1=mid;stringm='0'/字符串結束cout<<"反轉結果為:n"<<string;2.實驗結果:由于函數中有“for(int i=0;i<m/2;i+)”的語句,為避免該循環條件不準確,對奇數和偶數個的字符均進行了檢測,并有對含空格和符號的字符串的檢測:(1)奇數:(2)偶數:(3)含空格字符串:3.問題分析:(1)起初沒有用“.get”,不夠全面
4、;(2)如果一直執行到i=m的話,就等于反轉兩次又回到了原來的字符串順序,因而要考慮只執行一半,而由于字符串長度有奇偶的問題,所以容易錯誤;(3)第一次編寫時,沒有寫stringm='0'這使得輸出結果混亂。(二)第二題:編寫一組求數組中最大元素和最小元素的函數。其函數原型為:int imax(int array,int count); int imin(int array,int count); 1.源程序代碼:#include<iostream>using namespace std;int imax(int array,int count);/求整型數組的最大
5、元素int imin(int array,int count);/求整型數組的最小元素int main()int num40,n;cout<<"請輸入您要輸入的整數個數,不超過個:"cin>>n;cout<<"請輸入每個整數:n"int i;for(i=0;i<n;i+)/循環輸入參與判斷的整數cin>>numi;cout<<"最大值為:"<<imax(num,n)<<endl;cout<<"最小值為:"<&
6、lt;imin(num,n)<<endl;return 0;int imax(int array,int count)int m=array0;/將最大值的初始值定義為array0for(int i=1;i<count;i+)/循環比較m與arrayi的大小if(arrayi>m)m=arrayi;return m;/返回最大值int imin(int array,int count)int l=array0;for(int i=1;i<count;i+)if(arrayi<l)l=arrayi;return l;2.實驗結果:3.問題分析:(1)起初誤將:
7、cout<<"最大值為:"<<imax(num,n)<<endl;cout<<"最小值為:"<<imin(num,n)<<endl;寫成imin、imax,不能執行。(2)誤將:if(arrayi>m)if(arrayi<l)寫為:if(arrayi> arrayi-1)if(arrayi< arrayi-1)導致輸出不正確。(3)雖然理論上應該加上判斷輸入的數字是否為整數的程序,但考慮到這個不是重點,只是徒勞的增加麻煩,因而就沒有加。(三)第三題:編寫函數i
8、sprime(int a)用來判斷變量a是否為素數,若是素數,函數返回1,否則返回0。調用該函數找出任意給定的n個整數中的素數。1.源程序代碼:#include<iostream>using namespace std;int isprime(int a);int main()cout<<"請輸入要進行判斷的數字的個數:"int n;cin>>n;cout<<"請輸入要判斷的各個數:n"int a50;int i;for(i=0;i<n;i+)cin>>ai;cout<<&qu
9、ot;其中的素數為:n"for(i=0;i<n;i+)if(isprime(ai)!=0)/若經自定義函數判斷是素數,輸出該數cout<<ai<<" "int isprime(int a)int m=a-1,i;/定義初始值m=a-1實現對的排除for(i=a-1;i>1&&m!=0;i-)/循環判斷直至能夠整除或者對全部正整數判斷完畢m=a%i;return(m!=0?1:0);/若為素數輸出是,若不是輸出非2.實驗結果:3.問題分析:(1)對于“if(isprime(ai)!=0)”,起初寫為“if(ispr
10、ime(ai)=1)”,沒有認識到只有零和非零的區別,導致程序始終判斷得到錯誤結果;(2)對“int m=a-1,i”:原來寫作“int m=a,i;”,這樣的時候會將1也作為素數輸出。為了避免如此,故將m的初始值設為a-1,這樣的話,輸入1時m=0,正好能夠使1不經過循環而判斷為合數,同時,輸入2及以上的數字時,由于初始值m>0,也不會被影響。(四)第四題:(必做題)(注意必須用自定義函數,并和系統庫函數asin()進行比較測試檢驗)1.源程序代碼:/用自定義函數求arcsin(x),并和系統庫函數asin()進行比較測試檢驗#include<iostream>#inclu
11、de<cmath>using namespace std;double jc(int n);/階乘函數double cf(double x,int n);/乘方函數double myasin(double x,double last);/開方的函數int main()double x,u;cout<<"請輸入需要計算的自變量x: "cin>>x;while(x<=-1|x>=1)cout<<"您輸入的自變量不在范圍內,請輸入(-1,1)之間的x:"cin>>x;cout<<
12、;"請輸入在自定義函數下的精度u: "cin>>u;cout<<"自定義函數計算結果是: "<<myasin(x,u)<<endl;cout<<"庫函數執行計算結果是:"<<asin(x);cout<<endl;return 0;double jc(int n)int S=1,m=1;while(m<=n)S=S*m;m=m+1;return S;/返回S值作為階乘的結果double cf(double x,int n)double v=1;in
13、t 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 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&&in>=-last);/未達到精度時循環return sum;2.實驗結果:(1)特別檢測了輸入的自變量不符合范圍要求的情況的鑒別:(2)正常運行:3.問題
14、分析:(1)題目中用到了三個自定義函數,分別的作用是:乘方、階乘和求反正弦函數的自定義函數主體,前兩個函數的出現主要是為了簡化運算過程。由于不知道標準的乘方、階乘庫函數,所以就自定義了。(2)不足:精確性不太好,如輸入0.5時差距較大,但一直找不到問題所在。(3)說明:在此題中將精度設置成了可調整的,而在下題中則設置為不可調整。貌似應該都設為不可調整的,但個人覺得可調整的雖然麻煩且不一定精確,但也人性化。五、第五題:(必做題)編寫計算平方根函數,并和庫函數進行比較測試檢驗。提示:采用牛頓迭代法,計算精度10-7。函數原型:doublen mysqrt ( double x )#in
15、clude<iostream>#include<cmath>using namespace std;double mysqrt(double x);int main()double x;cout<<"請輸入自變量x:"cin>>x;cout<<"自定義函數計算結果是:"<<mysqrt(x)<<endl;cout<<"庫函數計算結果是:"<<sqrt(x)<<endl;return 0;double mysqrt(d
16、ouble x)double f=1,f_;dof_=f;f=(f+x/f)/2;while(f-f_>0.000000001|f_-f>0.000000001);/未達到精度時循環return f;/返回最終結果到mysqrt2.實驗結果:(1)結果為整數的:(2)結果為非整數的:很準確! 六、第六題:編寫函數判定一個正整數是否是遞增數,即該數各位數字從左至右遞增排列,例如:1122334、123456、5599、22222222等都是遞增數。例如:32768、43987、123498都不是遞增數。顯示輸出0至9999999之間所有遞增數。1源程序代碼:#include<i
17、ostream>using namespace std;int my(int n);/自定義函數,判斷是不是遞增數的主體函數int ws(int n);/自定義函數,求n的位數的函數,使用到自定義函數my中int main()int n=9999999,m;cout<<"0到之間的遞增數有:n"for(m=0;m<=n;m+)if(my(m)!=0)cout<<m<<"、"return 0;int my(int n)int gwsz10;int i,k=1;int m=ws(n);for(i=0;i<
18、m;i+)gwszi=(n/k)%10;/至此,已得到各位數k=k*10;int u;for(i=0,u=0;i<m-1;i+)/對各個位數比較,看是不是遞增,如是返回,否則返回if(gwszi>=gwszi+1)u+;return (u=m-1?1:0);/通過u的最終大小來判斷是否遞增,只有都是遞增才能使得u=m-1int ws(int n)/判斷位數,輸出的ws(n)為位數int i;for(i=0;n>=1;i+)n=n/10;return i;2實驗結果:3.問題分析:(1)一,要設計一個識別是否為遞增數的函數,這個函數作為分離出主函數的函數;二,在輸出0到9999
19、99之間遞增數時,主函數中用到循環體,從0逐一循環到9999999每次都用函數進行判斷是否遞增;三,在分離出的函數中,返回值應該為是或否,1或0,然后在主函數中判斷是否輸出;或者不返回,直接輸出也可以。四,需要有一個識別整數位數的系統以及一個分離各個位上的數字的程序。(2)對于:if(gwszi>=gwszi+1)u+;return (u=m-1?1:0);只有在該m位數的每兩個相鄰位數字均為遞增的時候,才能使得u每次都增加1,從而最終得到u=m-1;只要有一個地方不滿足,就可以說明不是遞增的。故可以用該條件判斷是否遞增。(七)第七題:(選作題)假設有如下一元多項式:
20、0; anXn+an-1Xn-1+.+a1X1+a0編寫程序求該多項式的值和多項式導數的值,這兩個結果值的計算都必須采用函數求得,具體函數原型如下: double dxs(double a,double x,int n) double dxsds(double a,double x,int n)形式參數a用來存放多項式n+1個系數,x為多項式的變量,n為次方數。(提示:先輸入某個多項式系數,然后輸出該多項式及其導數多項式,再輸入某個x的值,
21、再輸出多項式和導數的計算結果值)1.源程序代碼:#include<iostream>using 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;cout<<"請輸入多項式最高次項的次數n:"cin>>n;cout<<"請按照從低次到高次的順序依次輸入系數:n"int i=0;double a30;/
22、在假設最高項次數不超過的前提下docout<<"a"<<i<<"="cin>>ai;i+;while(i<=n);cout<<"該多項式的表達式為:n"for(i=n;i>0;i-)/輸出多項式表達式cout<<ai<<"*x"<<i<<"+"cout<<a0<<endl;cout<<"多項式的導函數的表達式為:n"for(i=n;i>1;i-)/輸出多項式導函數表達式cout<<ai*i<<"*x"&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學徒合同協議書百度庫
- 經濟學微觀試題及答案
- 合同權益轉讓協議書
- 釘釘項目管理試題及答案
- 出售合同協議書
- 貨源合同協議書
- 校車轉讓合同協議書范本
- 租憑農田合同協議書
- 租地合同協議書廣告
- 代理協議書和合同
- 跨學科實踐;自行車-2024-2025學年教科版物理八年級下冊教學同步課件
- 輔助運輸管理規定
- 康復治療士測試題及答案
- 漢語言文學自考命題形式試題及答案
- 中國創新藥械多元支付白皮書2025
- 2025-2030中國光芯片行業市場發展現狀及競爭格局研究報告
- 《工業機器人仿真技術應用》課件-項目四 工業機器人涂膠工作站的仿真應用
- 2016賦安消防JB-QBH-FS5101W 火災報警控制器
- 2025-2030年中國泵閥產業運行狀況及發展前景分析報告
- 中醫養生學沐浴養生講解
- CNAS-GL040-2019 儀器驗證實施指南
評論
0/150
提交評論