c語言第五次作業(yè)_第1頁(yè)
c語言第五次作業(yè)_第2頁(yè)
c語言第五次作業(yè)_第3頁(yè)
c語言第五次作業(yè)_第4頁(yè)
c語言第五次作業(yè)_第5頁(yè)
已閱讀5頁(yè),還剩26頁(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、第五次作業(yè):函數(shù)1. 自然數(shù)的計(jì)算編寫自己的兩個(gè)函數(shù),分別求出兩個(gè)整數(shù)的最大公約數(shù)和最小的公倍數(shù)。編寫一個(gè)程序,功能是能夠由鍵盤輸入兩個(gè)整數(shù),并能調(diào)用自己編寫的函數(shù),計(jì)算并輸出這兩個(gè)整數(shù)的最大公約數(shù)和最小公倍數(shù)。程序代碼:#includevoid main()intgreatest_common(intx,int y),lowest_common(intx,int y);inta,b,c,d;printf(please input two integer:);scanf(%d,%d,&a,&b);c=greatest_common(a,b);d=lowest_common(a,b);print

2、f(最大公約數(shù)為%d,最小公倍數(shù)為%dn,c,d);intgreatest_common(intx,int y)inti,min;if (xy)min=y;else min=x;for(i=min;i=1;i-)if (x%i=0)&(y%i=0)return(i);intlowest_common(intx,int y)inti,max;if (xy)max=x;elsemax=y;for (i=max;i+)if(i%x=0)&(i%y=0)return (i);2. 字符串連接請(qǐng)使用字符數(shù)組,編寫自己的字符串連接函數(shù)。編寫一個(gè)程序,功能是能夠由鍵盤輸入兩個(gè)字符串,并能調(diào)用自己編寫的字符串

3、連接函數(shù),輸出新的字符串。#include#includevoid main()char link(char a40,char b20);char str140=0,str220;printf(請(qǐng)輸入第一個(gè)字符串:);gets(str1);printf(請(qǐng)輸入第二個(gè)字符串:);gets(str2);printf(合并后的字符串為:n);link(str1,str2);puts(str1);char link(char a40,char b20)inti,j;i=strlen(a);for(j=0;bj!=0;j+)ai+j=bj;return(ai);3. 三角函數(shù)請(qǐng)使用臺(tái)勞級(jí)數(shù)編寫自己的常用

4、三角近似值計(jì)算函數(shù),用于自己程序的調(diào)用。臺(tái)勞級(jí)數(shù)為:舍去的值由自己定義一個(gè)最小值。請(qǐng)用自己的函數(shù)計(jì)算下面兩個(gè)表達(dá)式的值,并且與VC+提供的標(biāo)準(zhǔn)函數(shù)之間的誤差進(jìn)行比較。請(qǐng)輸入結(jié)果。l ,()l ,()#include#includevoid main()float s(float x),c(float x);float y1,y2,y3,y4,a=3.14159/3,b=3.14159/4;y1=sqrt(1-c(a)/2);y2=s(b)*(2*s(b)+c(b)-c(b)*c(b);printf(y1=%f,y2=%fn,y1,y2);y3=sqrt(1-cos(a)/2);y4=sin(b

5、)*(2*sin(b)+cos(b)-cos(b)*cos(b);printf(y1=%f,y2=%fn,y3,y4);float s(float x)int m=1,i=0;float a=0,b=1,t=0;while(m=11)t=1./b*pow(x,m)*pow(-1,i);i+;a=a+t;m+;b*=m;m+;b*=m;return(a);float c(float x)float a=0,b=1,t=0;int m=0,i=0;while(m=12)t=1./b*pow(x,m)*pow(-1,i);i+;a=a+t;m+;b*=m;m+;b*=m;return(a);4. 弦

6、截法解方程用弦截法求解方程f(x)=x3-5x2+16x-80=0的根。要求使用和編寫如下的函數(shù):l float f(float x)代表f(x)=x3-5x2+16x-80的值l float xpoint(float x1, float x2) 來求出(x1,f(x1)與 (x2,f(x2)的連線與x軸的交點(diǎn)x坐標(biāo);l float root(float x1, float x2)用于求出 (x1,x2)區(qū)間的近似根。要求使用的x1與x2的初始值分別為 -10.5 和 20#include#includefloat f(float x) /*定義f函數(shù),以實(shí)現(xiàn)f(x)=x3-5x2+16x-8

7、0 */float y; y=(x-5.0)*x+16.0)*x-80.0;return (y);float xpoint (float x1,float x2) /*定義xpoint函數(shù),求出弦與x軸交點(diǎn)*/float y; y=(x1*f(x2)-x2*f(x1)/(f(x2)-f(x1);return (y); float root(float x1,float x2) /* 定義root函數(shù),求近似根 */float x,y,y1; y1=f(x1);do x=xpoint(x1,x2);y=f(x);if (y*y10) /*f(x)與f(x1)同符號(hào) */y1=y;x1=x;els

8、e x2=x; while (fabs(y)=0.0002);return (x);void main() /*主函數(shù)*/float x1,x2,f1,f2,x;do printf(input x1,x2:n);scanf(%f,%f,&x1,&x2); f1=f(x1); f2=f(x2); while(f1*f2=0); x=root(x1,x2);printf(A root of equation is %8.4fn,x);5. 最長(zhǎng)單詞編寫一個(gè)自己的函數(shù),能夠?qū)⒁粋€(gè)字符串中最長(zhǎng)的單詞查找出來。編寫一個(gè)程序,功能是能夠由鍵盤輸入一行字符,并能調(diào)用自己編寫的最長(zhǎng)單詞查找函數(shù),輸出這個(gè)單詞。

9、#include#includechar longest(intn,charstr100)char a100100,b100=0;inti,j=0,k,max=0,m;int length;length=strlen(str);for(k=0,i=0,j=0;ilength;k+,i+)ajk=stri;if(stri=)if(maxk)max=k;for(m=0;mk;m+)bm=ajm;j+;k=-1;continue;return(bn);void main()charstr100,a100=0;inti;gets(str);for(i=0;ai!=;i+)ai=longest(i,st

10、r);puts(a);6. 勒讓德多項(xiàng)式用遞歸思想求n階勒讓德多項(xiàng)式的值,該多項(xiàng)式為:#includevoid main()int p(intn,int x);intn,x,y;printf(please input n,x:);scanf(%d,%d,&n,&x);if(n0)printf(error!please input n,x:);scanf(%d,%d,&n,&x);y=p(n,x);printf(y=%dn,y);int p(intn,int x)int y;if(n=0)y=1;else if(n=1)y=x;else y=(2*n-1)*x*p(n-1,x)-(n-1)*p(

11、n-2,x)/n;return(y);7. 角夫猜想日本數(shù)學(xué)家角夫提出了如下的猜想: 任意一個(gè)自然數(shù),比如奇數(shù),將其乘以3再加1;如果是偶數(shù)將其除以2;反復(fù)運(yùn)算。請(qǐng)大家編寫程序,看會(huì)出現(xiàn)什么結(jié)果?編寫程序功能要求能夠不停的輸入自然數(shù),遇到輸入自然數(shù)0時(shí),程序結(jié)束。如l 輸入: 請(qǐng)輸入自然數(shù)n:30l 輸出: 自然數(shù)n按照角夫猜想運(yùn)算規(guī)則變化的各次結(jié)果:15 46 23 70 35 106 53 160 80 40 20 10 5 16 8 。(直到結(jié)果收斂,不再變化)#includevoid main()intn,y,i,k;int f(int x);for(i=0;i+)printf(ple

12、ase input n=);scanf(%d,&n);if(n=0)break;while(n!=1)y=f(n);printf( %d ,y);n=y;printf(n);int f(int x)int y;if(x%2=0)y=x/2;else if(x%2!=0)y=3*x+1;return(y);8. 數(shù)學(xué)黑洞任意一個(gè)4位自然數(shù)(除4個(gè)數(shù)字完全一樣除外,例如4444、7777等),將組成該數(shù)的各位數(shù)字重新排列,形成一個(gè)最大數(shù)和一個(gè)最小數(shù),之后兩數(shù)相減,其差仍然為一個(gè)自然數(shù),重復(fù)上述運(yùn)算,你會(huì)發(fā)現(xiàn)一個(gè)神秘?cái)?shù)。編寫程序功能要求能夠不停的輸入自然數(shù),遇到輸入0時(shí),程序結(jié)束。如l 輸入: 請(qǐng)輸

13、入自然數(shù)n: 7754l 輸出: 自然數(shù)n按照以上運(yùn)算規(guī)則變化的各次規(guī)律:(7754,4577,3177) (7731,1377,6534)(6543,3456,3087) (8730,0378,8352) (8532,2358,6174)。(直到結(jié)果收斂,不再變化)#include#includevoid main()intn,m,i,arr3=0;void f(intx,intarr3);while(n!=0)printf(please input n=);scanf(%d,&n);while(m-n)!=0)m=n;f(n,arr);printf( (%d,%d,%d) ,arr0, a

14、rr1, arr2);n=arr2;printf(n);void f(intx,intarr3)int m=0,n=0,i,j,t;int a4;for(i=0;i=3;i+)ai=fmod(floor(x/pow(10,i),10);for(i=0;i=3;i+)for(j=0;j=3;j+)if(ajaj+1)t=aj;aj=aj+1;aj+1=t;for(i=0;i=3;i+)m+=ai*pow(10,3-i);n+=ai*pow(10,i);arr0=m;arr1=n;arr2=m-n;9. 設(shè)計(jì)遞歸程序任意給定輸入的一個(gè)小寫英文字符串a(chǎn)1a2a3an-1an(n5)輸出:字符串Ana

15、1An-1a2An-2a3A2an-1A1an,其中Ai為ai的大寫形式例如,輸入aybdx,則遞歸程序輸出XaDyBbYdAx#include#includevoid main()void f(char a20);char a20;printf(請(qǐng)輸入字符串:);gets(a);f(a);putchar(n);void f(char a20)char b20;int l,i;l=strlen(a);for (i=0;i=l-1;i+) bi=al-i-1-32;for (i=0;i=l-1;i+)printf(%c%c,bi,ai);10. 成績(jī)排名期中考試快要結(jié)束了,老師需要進(jìn)行年級(jí)成績(jī)排

16、名。排名的規(guī)則如下:l 以期中考試的平均成績(jī)?yōu)榕琶罁?jù)(滿分為100分);l 對(duì)學(xué)生A,如果一共有K個(gè)學(xué)生的平均成績(jī)比A的平均成績(jī)高,則學(xué)生A的年級(jí)排名為K+1;l 如果學(xué)生A和學(xué)生B的平均成績(jī)相同,則他們的排名相同。要求編寫幾個(gè)函數(shù),分別實(shí)現(xiàn)以下的功能:l 函數(shù)1:輸入N個(gè)同學(xué)的學(xué)號(hào)、姓名、平均成績(jī)l 函數(shù)2:按平均成績(jī)由大到小的順序進(jìn)行排序,學(xué)號(hào)、姓名也隨之調(diào)整,并請(qǐng)按照上述規(guī)則進(jìn)行排名l 函數(shù)3:輸入一個(gè)同學(xué)的學(xué)號(hào),能夠用折半查找法找出該同學(xué)的姓名、平均成績(jī)、排名等信息編寫一個(gè)程序來使用驗(yàn)證上述函數(shù)。l 輸入、輸出格式要求:(1) 第一行為一個(gè)整數(shù)N(1 N 200),表示學(xué)生的人數(shù)。隨

17、后有N行,每行有兩個(gè)非負(fù)整數(shù)和字符串描述一個(gè)學(xué)生的信息,依次為學(xué)號(hào)、姓名和平均成績(jī)。(2) 隨機(jī)輸入一個(gè)同學(xué)的學(xué)號(hào),請(qǐng)輸出這個(gè)同學(xué)的姓名、平均成績(jī)、排名等信息。如果學(xué)號(hào)不存在,輸出錯(cuò)誤提示信息。(3) 輸入 學(xué)號(hào)0000000000 時(shí),程序退出。#includevoid input(int n,int number200,char name20010,int grade200)int i;for(i=0;in;i+)scanf(%d %s %d,&numberi,namei,&gradei);void rank(int n,int number200,char name20010,int g

18、rade200,int r200)int i,j,k,t;for(i=0;in;i+)k=i;for(j=i+1;j=n;j+)if(gradekgradej)k=j;if(k!=i)t=gradei;gradei=gradek;gradek=t;t=numberi;numberi=numberk;numberk=t;for(j=0;j20;j+)t=namekj;namekj=nameij;nameij=t;k=1;r0=1;for(i=1;in;i+)if(gradeigradei-1)k=i+1;ri=k;void find(int n,int number200,char name20

19、010,int grade200,int r200)int x,i,j,k,t;for(i=0;in;i+)/對(duì)學(xué)號(hào)排序k=i;for(j=i;jn;j+)if(numberknumberj) k=j;if(i!=k)t=numberk;numberk=numberi;numberi=t;t=gradek;gradek=gradei;gradei=t;t=rk;rk=ri;ri=t;for(j=0;j20;j+)t=namekj;namekj=nameij;nameij=t;printf(please input an student number:);/輸入學(xué)號(hào)scanf(%d,&x);wh

20、ile(x!=0)t=n;i=0; j=n-1; while(inumberk) j=k-1; else i=k+1;if(tn)printf(name:%s grade:%d rank:%dn,namek,gradek,rk);else/沒有找到printf(Erorr!This number doesnt exist.n); printf(Please input again:); scanf(%d,&x);void main()char name20010;int n,i,number200,grade200,r200;printf(please input the number of

21、the students:);scanf(%d,&n);printf(please input the information of the students:n);input(n,number,name,grade);rank(n,number,name,grade,r);find(n,number,name,grade,r);11. 日歷計(jì)算請(qǐng)使用已學(xué)的知識(shí)來編寫一個(gè)自己的日歷計(jì)算程序。功能要求任意輸入一個(gè)日期(年、月、日),請(qǐng)輸出該日期為該年度的第幾天、第幾周、星期幾。請(qǐng)不要使用VC 環(huán)境提供的日期計(jì)算函數(shù)。已知公元1年1月1日為星期一。#includeint monthday12=31

22、,28,31,30,31,30,31,31,30,31,30,31;void time(int a,int b,int c,int d3)int date=0,week,week1=0,week2=0,weekday=0;int i,year,totalday1=0,totalday2;/計(jì)算第幾天if (b=1)date=c;else if (b=2)for (i=0;i2)&(a%4=0)&(a%100!=0)|(a%400=0)date+;/計(jì)算到上一年末有多少天for(year=1;yeara;year+)totalday1=totalday1+365;if(year%4=0)&(ye

23、ar%100!=0)|(year%400=0)totalday1+;week1=totalday1/7;/計(jì)算從1年1月1日至今多少天totalday2=totalday1+date;week2=totalday2/7;/計(jì)算第幾周,星期幾week=date/7;if(week=0)week+;else if(week!=0&(totalday1%7!=0&date%7=0)|date%7!=0)week+;if(totalday2%7=0)weekday=7;else if(totalday2%7!=0)weekday=totalday2%7;d0=date;d1=week;d2=weekd

24、ay;void main()int i,year,month,day,d3;for(i=0;i=5;i+)printf(please input the date:n);scanf(%d,%d,%d,&year,&month,&day);time(year,month,day,d);printf(第%d天,第%d周,星期%dn,d0,d1,d2);(以下為選作題,請(qǐng)用遞歸思想嘗試編寫程序)12. 分書問題有編號(hào)分別為1,2,3,4,5的五本書,準(zhǔn)備分給A,B,C,D,E五個(gè)人,每個(gè)人閱讀興趣用一個(gè)二維數(shù)組加以描述:希望你寫一個(gè)程序,輸出所有分書方案,讓人人皆大歡喜。假定5個(gè)人對(duì)5本書的閱讀興趣如下表:書0書1書2書3書4人A00110人B11001人C0110

溫馨提示

  • 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)論