




版權(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頁系另U實(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. 源程序代碼:#inelude <iostream>#inelude <cstring>using n amespaee std;void
2、mystrrev( char string);/自定義函數(shù),反轉(zhuǎn)字符串int main()coutvv "請(qǐng)輸入字符串(不多于個(gè)字符):"vvendl;char in 81;cin.get(in,81);/輸入字符串,允許輸入空格mystrrev(in); /對(duì)字符串in "執(zhí)行反轉(zhuǎn)函數(shù) coutvve ndl;return 0;void mystrrev( char string)int m=strlen(string);int mid;m/2for (int i=0;i<m/2;i+)/將字符串的前一半字符與后一半字符對(duì)應(yīng)交換,因而只執(zhí)行mid=stri
3、 ngi;stri ngi=stri ngm-i-1;stri ngm-i-1=mid;stringm='0' ; / 字符串結(jié)束cout« "反轉(zhuǎn)結(jié)果為:n" vvstring;2.實(shí)驗(yàn)結(jié)果:由于函數(shù)中有“ for (int i=0;i<m/2;i+)”的語句,為避免該循環(huán)條件不準(zhǔn)確,對(duì)奇數(shù)和偶數(shù)個(gè)的字符均進(jìn)行了檢測(cè),并有對(duì)含空格和符號(hào)的字符串的檢測(cè):(1) 奇數(shù):血 C:v/indow?5yFtem32cmd.ewe請(qǐng)輸入字符串(不寥于20個(gè)孚符abcde反轉(zhuǎn)結(jié)果為:請(qǐng)按任意鍵g蜒 . 4m(2) 偶數(shù):陲 C:v/indow55yrte
4、m32cmd.exe請(qǐng)輸入字符串(不夢(mèng)于個(gè)孚符 abcdef反轉(zhuǎn)結(jié)果為: fedcba請(qǐng)按任意犍纟蠻.半:4|f_(3) 含空格字符串:3問題分析:(1) 起初沒有用“ .get ”,不夠全面;(2) 如果一直執(zhí)行到i=m的話,就等于反轉(zhuǎn)兩次又回到了原來的字 符串順序,因而要考慮只執(zhí)行一半,而由于字符串長(zhǎng)度有奇偶的問題, 所以容易錯(cuò)誤;(3) 第一次編寫時(shí),沒有寫stringm= '0'這使得輸出結(jié)果混亂。(二) 第二題:編寫一組求數(shù)組中最大元素和最小元素的函數(shù)。其函 數(shù)原型為:int imax(i nt array,i nt coun t);int imin (i nt ar
5、ray,i nt coun t);1. 源程序代碼:#include <iostream>using n amespace std;int imax( int array , int count); / 求整型數(shù)組的最大元素 int imin( int array , int count); / 求整型數(shù)組的最小元素 int main()int num40,n;cout<< " 請(qǐng)輸入您要輸入的整數(shù)個(gè)數(shù),不超過個(gè): " ; cin>>n;cout<< " 請(qǐng)輸入每個(gè)整數(shù): n" ;int i;for (i=
6、0;i<n;i+) / 循環(huán)輸入?yún)⑴c判斷的整數(shù) cin>>numi;cout<< " 最大值為: " <<imax(num,n)<<endl;cout<< " 最小值為: " <<imin(num,n)<<endl; return 0;int imax( int array , int count)的大小int m=array 0; / 將最大值的初始值定義為 array0 for (int i=1;i<count;i+)/ 循環(huán)比較 mWarrayiif (
7、array i>m) m=array i;return m; / 返回最大值int imin( int array , int count)int l= array 0;for (int i=1;i<count;i+)if (array i<l) l= array i;return l;2. 實(shí)驗(yàn)結(jié)果:型 C:wi nd ovm syrtem3 2c m d. exe請(qǐng)輸入每個(gè)整數(shù);y1 2 3 43 3467 27544 265 5465 265 -2656 -66 26626 547557 -2453最大值為;547657最小值為:-2656請(qǐng)按任意鍵繼續(xù)半:3問題分析:
8、(1) 起初誤將:cout« "最大值為:"vvimax(num,n)v<endl;cout« "最小值為: "v<imin(num,n)v<endl;寫成imin、imax,不能執(zhí)行。(2) 誤將:if (array i>m)if (array i<l)寫為:if (array i> array i-1)if (array i< array i-1)導(dǎo)致輸出不正確。(3) 雖然理論上應(yīng)該加上判斷輸入的數(shù)字是否為整數(shù)的程序,但考 慮到這個(gè)不是重點(diǎn),只是徒勞的增加麻煩,因而就沒有加。(三) 第三
9、題:編寫函數(shù)isprime(int a)用來判斷變量a是否為素?cái)?shù), 若是素?cái)?shù),函數(shù)返回1,否則返回0。調(diào)用該函數(shù)找出任意給定的 n 個(gè)整數(shù)中的素?cái)?shù)。1. 源程序代碼:#include <iostream> using n amespace std; int isprime( int a);int main()COUtvv "請(qǐng)輸入要進(jìn)行判斷的數(shù)字的個(gè)數(shù):”;int n;cin»n;COUtvv"請(qǐng)輸入要判斷的各個(gè)數(shù):n"int a50;int i;for (i=0;i<n;i+)cin> >ai;coutvv "其
10、中的素?cái)?shù)為:n"for (i=0;i<n;i+)if (isprime(ai)!=O) /若經(jīng)自定義函數(shù)判斷是素?cái)?shù),輸岀該數(shù) cout<<aivv ""int isprime( int a)int m=a-1,i;/定義初始值 m=a-1實(shí)現(xiàn)對(duì)的排除for (i=a-1;i>1 &&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 (i
11、sprime(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正好能夠使1不經(jīng)過循環(huán)而判斷為合數(shù),同時(shí),輸入2及以上 的數(shù)字時(shí),由于初始值m>0,也不會(huì)被影響。(四) 第四題:( 必做題) (注意必須用自定義函數(shù),并和系統(tǒng)庫函 數(shù) asin() 進(jìn)行比較測(cè)試檢驗(yàn))1. 源程序代碼:/ 用自定義函數(shù)求 arcsin(x) ,并和系統(tǒng)庫函數(shù) asin() 進(jìn)行比較測(cè)試檢驗(yàn)#includ
12、e <iostream>#include <cmath>using 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;cout<< " 請(qǐng)輸入需要計(jì)算的自變量 x: " ;cin>>x;while (x<=-1|x>=1)cout<< " 您輸入的自變量不在范圍內(nèi),
13、請(qǐng)輸入(-1,1 )之間的 x:" ;cin>>x;cout<< " 請(qǐng)輸入在自定義函數(shù)下的精度 u: " ;cin>>u;cout<< " 自定義函數(shù)計(jì)算結(jié)果是: " <<myasin(x,u)<<endl;cout<< " 庫函數(shù)執(zhí)行計(jì)算結(jié)果是: " <<asin(x);cout<<endl;return 0;double jc( int n)int S=1,m=1;while (m<=n)S=S*m; m=
14、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; II返回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)I(cf(2,2*n)*jc(n)*jc(n)*(2*n+1); sum=sum+in;n+; while (in<=last&&in&
15、gt;=-last); II 未達(dá)到精度時(shí)循環(huán) return sum;2. 實(shí)驗(yàn)結(jié)果:1)特別檢測(cè)了輸入的自變量不符合范圍要求的情況的鑒別:EQ C:vri nd ow? systsm3d. swe請(qǐng)輸入需要計(jì)算的自變量礙3您輸入的自變量不在范圍內(nèi),請(qǐng)輸入之間的垃:0.5 請(qǐng)輸入在自定義函數(shù)下的精度u: 6 0000001§定義函數(shù)計(jì)算結(jié)果杲:0. 520833 庫函數(shù)執(zhí)行計(jì)算結(jié)果是:0. 523599 請(qǐng)按任意鍵繼續(xù) (2)正常運(yùn)行:血 C:v/indow55yrtem32cmd.exe請(qǐng)輸丸需要計(jì)第的自變量d©請(qǐng)輸入左自宗攵函豹下的請(qǐng)度U: 0. 0000001 自定義
16、函數(shù)計(jì)算結(jié)果是:0. 201333 庫函數(shù)執(zhí)行計(jì)算結(jié)果是;0. 201358 請(qǐng)按任意鍵g嵯 -.3問題分析:(1)題目中用到了三個(gè)自定義函數(shù),分別的作用是:乘方、階乘和 求反正弦函數(shù)的自定義函數(shù)主體,前兩個(gè)函數(shù)的出現(xiàn)主要是為了簡(jiǎn)化 運(yùn)算過程。由于不知道標(biāo)準(zhǔn)的乘方、階乘庫函數(shù),所以就自定義了。(2) 不足:精確性不太好,如輸入 0.5時(shí)差距較大,但一直找不到 問題所在。(3) 說明:在此題中將精度設(shè)置成了可調(diào)整的,而在下題中則設(shè)置 為不可調(diào)整。貌似應(yīng)該都設(shè)為不可調(diào)整的,但個(gè)人覺得可調(diào)整的雖然 麻煩且不一定精確,但也人性化 五、第五題:(必做題)編寫計(jì)算平方根函數(shù),并和庫函數(shù)進(jìn)行比較 測(cè)試檢驗(yàn)。
17、提示:采用牛頓迭代法,計(jì)算精度10-7。函數(shù)原型:doublen mysqrt ( double x )#inelude <iostream>#inelude <cmath>using n amespace std;double mysqrt( double x);int main()double x;cout<< "請(qǐng)輸入自變量x:"cin»x;cout<< "自定義函數(shù)計(jì)算結(jié)果是:"<<mysqrt(x)<<endl;cout<< "庫函數(shù)計(jì)算結(jié)果
18、是:"v<sqrt(x)v<endl;return 0;double mysqrt( double x)double f=1,f_;dof_=f;f=(f+x/f)/2;while (f-f_>0.000000001|f_-f>0.000000001);/ 未達(dá)到精度時(shí)循環(huán)return f; /返回最終結(jié)果到 mysqrt2.實(shí)驗(yàn)結(jié)果:(1)結(jié)果為整數(shù)的:血 Civ/indow?5yrtem32cmd.eKe請(qǐng)輸入自變量瓦訂自定義函數(shù)計(jì)算結(jié)果杲,1庫函數(shù)計(jì)算結(jié)果是 1請(qǐng)按任意鍵繼續(xù)* 1|£_(2)結(jié)果為非整數(shù)的:請(qǐng)輸入自變量A自定義函數(shù)計(jì)算結(jié)果杲,
19、3. 37298庫函數(shù)計(jì)算結(jié)果是3. S729E請(qǐng)按任意鍵継續(xù) +4Iff血 C:wi nd osystsm3 2c m d, exe很準(zhǔn)確! ! !六、第六題:編寫函數(shù)判定一個(gè)正整數(shù)是否是遞增數(shù),即該數(shù)各位數(shù)字從左至右遞增排列,例如:1122334 123456、5599、22222222等都是遞增數(shù)。例如:32768、43987、123498都不是遞增數(shù)。顯示輸出0至9999999之間所有遞增數(shù)。1.源程序代碼:#inelude <iostream>using n amespace std;int my( int n); /自定義函數(shù),判斷是不是遞增數(shù)的主體函數(shù)int ws(
20、int n); /自定義函數(shù),求n的位數(shù)的函數(shù),使用到自定義函數(shù)my中int main()int n=9999999,m;cout<< "0到之間的遞增數(shù)有:n"for (m=0;m<=n;m+)if (my(m)!=0)coutvvmvv"、"return 0;int my( int n)int gwsz10;int i,k=1;int m=ws(n);for (i=0;i<m;i+)gwszi=(n/k)%10;/至此,已得到各位數(shù)k=k*10;int u;for (i=0,u=0;i<m-1;i+)/對(duì)各個(gè)位數(shù)比較,看
21、是不是遞增,如是返回,否則返回if (gwszi>=gwszi+1)u+;u=m-1return (u=m-1?1:0);/通過u的最終大小來判斷是否遞增,只有都是遞增才能使得int ws( int n) /判斷位數(shù),輸岀的 ws(n)為位數(shù)int i;for (i=0;n>=1;i+)n=n/10;return i;2.實(shí)驗(yàn)結(jié)果:血 C:wi nd owf sy2c m d. ewe14455、14456.14457.14 亠T、14478.14479x14488>14489x14499x1455514560.L45 餉、L45 門、14578.14579“14582.14
22、QJ14678.14679.14G88.14689>1469914777一14885.14895.14999.15555.1555乩1555叭15J15578,15579.15588.15589.15599、1566615688 s15689.1569 J15777.15778x15盯隊(duì)15 "叭It 陲 C:wi nd ows system3 2c m d. exe 回、257789.257799.257888.257889.257899.25 >< 266566266667.26666Ex266669n266677.26、266778.266779.266783
23、.266789.266799.26、267779.267788.267789.267799.267888>26< 268999.269999x277777>277778x277779.27、277999.278888>278889>278899>278999>271J、299999.” 1Iff3問題分析:(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,然后
24、在主函數(shù)中判斷是否輸出;或者不返回,直接輸出也可以。四,需要有一個(gè)識(shí)別整數(shù)位數(shù)的系統(tǒng)以及一個(gè)分離各個(gè)位上的數(shù)字的 程序。(2)對(duì)于:if (gwszi>=gwszi+1)u+;return (u=m-1?1:0);只有在該 m 位數(shù)的每?jī)蓚€(gè)相鄰位數(shù)字均為遞增的時(shí)候, 才能使得 u 每次都增加 1,從而最終得到 u=m-1 ;只要有一個(gè)地方不滿足,就 可以說明不是遞增的。故可以用該條件判斷是否遞增。(七)第七題: (選作題)假設(shè)有如下一元多項(xiàng)式:a nX +an-1 X +a 1X+a0編寫程序求該多項(xiàng)式的值和多項(xiàng)式導(dǎo)數(shù)的值, 這兩個(gè)結(jié)果值的計(jì)算都 必須采用函數(shù)求得,具體函數(shù)原型如下:do
25、uble 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ù),然后輸出該多項(xiàng)式及其導(dǎo) 數(shù)多項(xiàng)式,再輸入某個(gè) x 的值,再輸出多項(xiàng)式和導(dǎo)數(shù)的計(jì)算結(jié)果值) 1.源程序代碼:#include <iostream>using namespace std;double dxs( double a, double x, int n);double dxsds( double a, double x, i
26、nt n);double cf( double x, int n);int main()int n;cout<< " 請(qǐng)輸入多項(xiàng)式最高次項(xiàng)的次數(shù) n:"cin>>n;cout<< " 請(qǐng)按照從低次到高次的順序依次輸入系數(shù):n" ;int i=0;double a30; / 在假設(shè)最高項(xiàng)次數(shù)不超過的前提下docout<< "a" <<i<< "=" ; cin>>ai;i+; while (i<=n);cout<<
27、" 該多項(xiàng)式的表達(dá)式為: n" ;for (i=n;i>0;i-)/ 輸出多項(xiàng)式表達(dá)式cout<vaivv "*xA" vvivv "+" cout<<a0<<endl;cout<< "多項(xiàng)式的導(dǎo)函數(shù)的表達(dá)式為: n" ;for (i=n;i>1;i-)/ 輸出多項(xiàng)式導(dǎo)函數(shù)表達(dá)式cout<<ai*i<< "*xA" <<i-1<< "+" ;cout<<a1<<endl;int x;cout<< "請(qǐng)輸入自變量 x:"cin>>x;coutvv "在自變量 x="vvxvv"下,該多項(xiàng)式的值為:“ vvdxs(a,x,n)vvendl;cout<< " 其導(dǎo)數(shù)值為: " <<dxsds(a,x,n)<<endl;return 0;double dxs( double a, double x, int
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度宅基地房屋贈(zèng)與受贈(zèng)方后續(xù)使用協(xié)議
- 2025年度海景房房屋買賣協(xié)議書
- 二零二五年度學(xué)校食堂炊事員崗位聘用及食品安全責(zé)任保險(xiǎn)服務(wù)合同
- 2025年度能源行業(yè)人員派遣勞務(wù)合同
- 二零二五年度文化活動(dòng)免責(zé)的舉辦協(xié)議
- 二零二五年度餐廳租賃服務(wù)及品牌合作協(xié)議
- 二零二五年度企業(yè)資產(chǎn)質(zhì)押貸款合同
- 臨時(shí)工用工合同-2025年度制造業(yè)合作協(xié)議
- 2025年度旅游意外傷害保險(xiǎn)責(zé)任免除合同
- 二零二五年度勞動(dòng)合同解除協(xié)議書-員工合同續(xù)簽協(xié)商解除
- 中國(guó)文化概況chapter-1
- 大學(xué)生職業(yè)素養(yǎng)訓(xùn)練(第六版)課件全套 宋賢鈞 第1-14單元 選擇職業(yè)目標(biāo)- 堅(jiān)守安全底線
- 期中測(cè)試卷(1~4單元)(試題)2024-2025學(xué)年四年級(jí)上冊(cè)數(shù)學(xué)北師大版
- 2024年鐵路安檢員理論題庫多選題
- 2024-2025學(xué)年初中勞動(dòng)七年級(jí)下冊(cè)人教版教學(xué)設(shè)計(jì)合集
- 煤礦煤炭銷售管理制度
- 《語文綜合實(shí)踐:重溫革命歷史 賡續(xù)紅色血脈》教案- 2023-2024學(xué)年高教版(2023)中職語文基礎(chǔ)模塊下冊(cè)
- 2024年公開招聘事業(yè)單位工作人員報(bào)名登記表
- 植樹節(jié)英文主題課件
- 微觀經(jīng)濟(jì)學(xué):緒論
- 2024年全國(guó)高考數(shù)學(xué)試題及解析答案(新課標(biāo)Ⅱ卷)
評(píng)論
0/150
提交評(píng)論