C語(yǔ)言基本算法_第1頁(yè)
C語(yǔ)言基本算法_第2頁(yè)
C語(yǔ)言基本算法_第3頁(yè)
C語(yǔ)言基本算法_第4頁(yè)
C語(yǔ)言基本算法_第5頁(yè)
已閱讀5頁(yè),還剩42頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、c語(yǔ)言基本算法Prepared on 22 November 2020經(jīng)典C語(yǔ)言算法2009年08月17曰星期日16:51C語(yǔ)言的學(xué)習(xí)要從基礎(chǔ)開(kāi)始,這里是100個(gè)經(jīng)典的算法- 1C語(yǔ)言的學(xué)習(xí)要從基礎(chǔ)開(kāi)始,這里是100個(gè) 經(jīng)典的算法題目:古典問(wèn)題:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子長(zhǎng)到第三個(gè)月后每個(gè)月又生一對(duì)兔子,假如兔子都不死,問(wèn)每個(gè)月的兔子總數(shù)為多少程序分析:兔子的規(guī)律為數(shù)列14,2,3,5,843,21.程序源代碼:main()Iongfl,f2;inti;fl=f2=l;for(i=l;i=20;i+)printf(,%12ld%12ld,/flzf2);lf(l%

2、2=0)printf(wnH);/*控制輸出,每行四個(gè)*/fl=fl+f2;/*前兩個(gè)月加起來(lái)賦值給第三個(gè)月*/ f2=fl+/*前兩個(gè)月加起來(lái)賦值給第三個(gè)月*/上題還可用一維數(shù)組處理f youtry!題目:判斷101200之間有多少個(gè)素?cái)?shù),并輸岀所有素?cái)?shù)。程序分析:判斷素?cái)?shù)的方法:用一個(gè)數(shù)分別去除2到sqrt(這個(gè)數(shù)),如果能被整 除,則表明此數(shù)不是索數(shù),反之是素?cái)?shù)。程序源代碼:#includeHHmain()in tm/i/kzh=O,leap=l;prlntfW);for(m=101;m=200;m+)(k=sqrt(m+l);for(i=2;i=k;i+)leap=O;break; i

3、f(leap)prlntf(%-4dM/m);h+;if(h%10=0)printf(l,nH);leap=l;prlntf(nThetotalis%dM/h);題目:打印出所有的水仙花數(shù),所謂水仙花數(shù)是指一個(gè)三位數(shù),其各位 數(shù)字立方和等于該數(shù)本身。例如:153是一個(gè)水仙花數(shù),因?yàn)?53 = 1的三次方 + 5的三次方+ 3的三次方。程序分析:利用for循環(huán)控制100-999個(gè)數(shù),每個(gè)數(shù)分解出個(gè)位,十位,百位。main()intizjzkzn;printfCwaterflower程序分析:對(duì)n進(jìn)行分解質(zhì)因數(shù),應(yīng)先找到一個(gè)最小的質(zhì)數(shù)k,然后按下述步驟完成: 如果這個(gè)質(zhì)數(shù)恰等于n,則說(shuō)明分解質(zhì)因數(shù)

4、的過(guò)程已經(jīng)結(jié)束,打印出即可。 如果nok但n能彼k整除,則應(yīng)打印出k的值,并用n除以k的商/(乍為新的正整數(shù)你6重復(fù)執(zhí)行第一步。(3) 如果n不能被k整除,則用k+1作為k的值,重復(fù)執(zhí)行第一步。 numberis:”);for(n=100;n1000;n+)i=n/100;/*分解出百位*/j=n/10%10;/*分解出十位*/k=n%10;/*分解出個(gè)位*/if(i*100+j*10+k=i*i*l+j*j*J+k*k*k)printfC%5d 蔦 n);printfCrT);題目:將一個(gè)正整數(shù)分解質(zhì)因數(shù)。例如:輸入90,打印岀90=2*3*3*5。程序源代碼:/*zhe ngintisdi

5、videdyinshu*/main()intnzi;printf(H npleasei nputa nu mber: n“);scanf(l,%d,/&n);prlntf(,%d=wFn);for(i=2;i=90分的同學(xué)用A表示,60-89分之間的用B表示,60分以下的用C表示。程序分析:(ab)a:b這是條件運(yùn)算符的基本例子。程序源代碼:main() intscore;chargrade;prin tf(Hpleasei nputascoren”);scanf(,%d,/&score);grade=score=90*A,score=60,B,:C,);prin tf(H%dbelongst

6、o%c,/scorezgrade);題目:輸入兩個(gè)正整數(shù)m和n,求其最大公約數(shù)和最小公倍數(shù)c程序分析:利用輾除法:程序源代碼:main()intazbznuml/num2/temp;printf(Hpleasei nputtw on umbers:nH);scanf(”ct%cr;&numl,&num2);if(numl temp=numl;numl=n um2;nu m2=temp;a=numl;b=nu m2;while(b!=O)/*利用輾除法,直到b為0為止*/temp=a%b;a=b;b=temp;printf(Hgongyueshu:%dn,/a);printf(l,gongbei

7、shu:%dnl,znuml*num2/a);題目:輸入一行字符,分別統(tǒng)計(jì)出其中英文字母、空格、數(shù)字和其它字符的個(gè)數(shù)程序分析:利用while語(yǔ)句,條件為輸入的字符不為、n程序源代碼:#includeHHmain()(chare;In tletters=0/space=0/digit=0/others=0; printf(Hpleasei nputsomecharactersrT);while(c=getchar()! =,n,)if(c=,a,&c=lA,&c=,0,&c=,9,)digit+ + ;elseothers+;printf(Hallinall:char=%dspace=%ddig

8、it=%dothers=%dn 舄 letters,space,digit,others);題目:求s=a+aa+aaa+aaaa+aa.a的值,其中a是;一個(gè)數(shù)字。例如2+22+222+2222+22222(此時(shí)共有5個(gè)數(shù)相加),幾個(gè)數(shù)相加有鍵盤(pán)控制程序分析:關(guān)鍵是計(jì)算出每一項(xiàng)的值, inta,n,coun t=l;longi ntsn=O,tn=O; printf(Hpleasei nputaa ndnn”); scanfC%d,%d”,&a,&n); printf(Ha=%dz n=%dn”an); while(co un t=n) tn=tn+a;sn=s n+tn;a=a*10;+c

9、o unt;printf(l,a+aa+.=%ldn,/sn);題目:一個(gè)數(shù)如果恰好等于它的因子之和,這個(gè)數(shù)就稱為完數(shù)蔦例如6=1+ 2+ 3編程找岀1000以內(nèi)的所有完數(shù)。staticintk 10;intizj,nzs;for(j=2;j1000;j+)n=-l;S=j;for(i=l;i if(j%i)=0) n+;s=s-i;k n =i;if(s=0)printf(”disawanshu 蔦j);for(i=0;i printf(%d幾k);printf(”dn蔦k n);題目:一球從100米高度自由落下,每次落地后反跳回原高度的一半;再落下, 求它在第10次落地時(shí),共經(jīng)過(guò)多少米第1

10、0次反彈多高程序源代碼:main()floatsn=zhn=sn/2;intn;for(n=2; nv = 10;n+)sn=sn+2*hn;/*第n次落地時(shí)共經(jīng)過(guò)的米數(shù)*/hn=hn/2;/*第n次反跳高度*/printf(,thetotalofroadis%fn,/sn);pnntf(Hthetenthis%fmetern,/hn);題目:一只猴子摘了 N個(gè)桃子第一天吃了一半又多吃了一個(gè),第二天又吃了余下的 一半又多吃了一個(gè),到第十天的時(shí)候發(fā)現(xiàn)還有一個(gè)./*猴子吃桃問(wèn)題*/main()intizs,n=l;for(i=l;i10;i+)s=( n+l)*2n=s;prlntf(M 第一天共

11、摘 了01 個(gè)桃 n-s);迭代法求方程根/*迭代法求一個(gè)數(shù)的平方根*/#*控制解的精度*/#includemain()floata,xOzxl;printf(請(qǐng)輸入要求的數(shù):“);scanf(H%fHz&a);x0=a/2;xl=(x0+a/x0)/2;while(fabs(xl-xO)=Epsilon)xO=xl;xl=(x0+a/x0)/2;prlntfC*%f 的平方根:%nM,xl);/*上題的另一種算法=7#*控制解的精度*/# includeo#includemain()floatnum,pre,this;doscanf(%f,&num);/*輸入要求平方根的數(shù)*/while(n

12、umEpsilon);/*用解的精度,控制循環(huán)次數(shù)*/prlntf(,therootis%f,this);用牛頓迭代法求方程2*x*x*x-4*x*x+3*x-6的根/*牛頓迭代法水/#*控制解的精度*/#includemain()floatxl,xO=;xl=x0-(2*x0*x0 *x04*x0*x0 + 3*x06)/(6*x0*x08*x0+3);while(fabs(xl-xO=Epsilon) xO=xl;xl=x0-(2*x0*x0*x0-4*x0*x0+3*x0-6)/(6*x0*x0-8*x0+3); printfC方程的根為 %fn%xl);用二分法求上題/*二分法*/#*

13、控制解的精度*/# includeomain()folatxl,x2,xOzflzf2zfO;x0=(xl+x2)/2;/*求中點(diǎn)的函數(shù)值*/f0=2*x0*x0*x0-4*x0*x0+3*x0-6;whlle(fabs(fO)=Epsilon)if(f0*fl0)x2=x0;f2=2*x2*x2 *x2-4*x2*x2+3*x26;if(f0*f20)xl=xO;fl=2*xl*xl*xl-4*xl*xl+3*xl-6;x0 = (xl+x2)/2;f0=2*x0*x0*x0-4*x0*x0+3*x0-6;print用二分法求得方程的根:%fnHzxO);題目:打印岀如下圖案(菱形)*程序分

14、析:先把圖形分成兩部分來(lái)看待,前四行一個(gè)規(guī)律,后三行一個(gè)規(guī)律,利 用雙重for循環(huán),第一層控制行,第二層控制列。程序源代碼:main() inti jk;for(i=0;i=3;i+) for(j=0;j=2-i;j+)printf(,H,);for(k=0;k=2*i;k+)prints*);printfCAn程序分析:同29例);for(i=0;i=2;i+)for(j=0;j=i;j+)printf(,M);for(k=0;k=4-2*i;k+)printf(,*H);printf(,nH);題目:一個(gè)5位數(shù),判斷它是不是回文數(shù)。即12321是回文數(shù),個(gè)位與萬(wàn)位相同, 十位與千位相同。程

15、序源代碼:main()longgezshizqia n,wan,x;scanf(”lcT;&x);wan=x/10000;qian=x%10000/1000;shi=x%100/10;ge=x%10;if(ge=wan &shi=qian)/未個(gè)位等于萬(wàn)位并且十位等于千位*/prin tf(Hthis nu mberisahuiwe nnM);elseprintf(Hthis nu mberis no tahuiwe nn ”);題目:情輸入星期幾的第一個(gè)字母來(lái)判斷一下是星期幾,如果第一個(gè)字母一樣, 則繼續(xù)判斷第二個(gè)字母。程序分析:用情況語(yǔ)句比較好,如果第一個(gè)字母一樣,則判斷用情況語(yǔ)句或if語(yǔ)

16、 句判斷第二個(gè)字母。程序源代碼:#includevoidmain()charletter;prin tf(Hpleasei nputthefirstletterofsomeday n”); while(letter=getch()!=Y,)/*當(dāng)所按字母為 Y 時(shí)才結(jié)束*/switch(letter)(cases1: prin tf(” pleasei nputsec on dlettern”);lf(letter=getch()=al)pri n tf ( sat u rda y n);elseif(letter=getch()=u,)printf(Hsundayn);elsepri ntf

17、(”dataerrorn“);break;caseF1: prlntf(wfridaynH); break;caseM:printf(”mondayn”);break;caseT:pri ntf(”pleasei nputsec on dletternM);lf(letter=getch()=,u,)printf(ntuesdaynM);elseif(letter=getch()=,h,)pri ntf (M th u rsd a y n);elseprin tf(dataerrornw);break;caseW:printfCwednesdayn”);break;default: pri n

18、tf (” dataerrorn”);題目:Pressanykeytochangecolo匚 hurryup!程序源代碼:#includevoidmain(void)intcolor;for(color=0;color8;color+)textbackground(color);/*設(shè)置文本的背崇顏色*/ cprln tf(,Thlsiscolor%drn,color);cpri ntf(”ressa ny keytoc ontinu ern”);getch();/*輸入字符看不見(jiàn)*/題目:學(xué)習(xí)gotoxy()與clrscr()a數(shù)程序源代碼:#includevoidmain(void)clr

19、scr();/* 清屏函數(shù)*/textbackground(2);gotoxy(l,5);/* 定位函數(shù)*/cprin tf(,Outputatrow5colum nlnM);textbackground(3);gotoxy(20,10);cprintf(”0utputatrowl0column20n”);題目:練習(xí)函數(shù)調(diào)用程序源代碼:#in cludeovoidhello_world(void) printf(MHello/world!nM);voidthree_hellos(void)in tcou nter;for(cou nter=l;co un ter=3;co un ter+ +

20、) hello_world();/* 調(diào)用此函數(shù)*/voidmain(void)three.hellos();/* 調(diào)用此函數(shù)*/題目:文本威色設(shè)蛋程序源代碼: #include voidmain(void)intcolor;for(color=l;color16;color+) textcolor(color);/* 設(shè)匿文本顏色*/ cprin tf(l,Thisiscolor%drn,color); textcolor(128+15);cprintf(,ThisisblinkingrnM);題目:求100之內(nèi)的素?cái)?shù)程序源代碼: #include include #defineN101 m

21、ain()IntIJJine.a N; for(i=2;iN;i+)a=i; for(i=2;isqrt(N);i+) for(j=i+l;jN;j+) if(a!= 0&a j !=0) if(a j %a=0)a j =0;printf(S);for(i=2zli ne=0;iN;i+)if(a!=0)(printfCSda);lin e+;if(line= = 10)prlntf(HnM);line=0;題目:對(duì)10個(gè)數(shù)進(jìn)行排序程序分析:可以利用選擇法,即從后9個(gè)比較過(guò)程中,選擇一個(gè)最小的與第一個(gè) 元素交換,下次類(lèi)推,即用第二個(gè)元素與后8個(gè)進(jìn)行比較,并進(jìn)行交換。程序源代碼:#define

22、N10main() intiN;/*inputdata*/prin tf(Mpleasei nputte nnu m: rT);for(i=0;iN;i+)printf(Ha (%d =,J);scanf(%d 蔦 &a); printf(HnH);for(i=0;iN;i+)printf(”5cT,a);printf(,n,);/*sorttennum*/for(i=0;iN-l;i+)min=i;for(j=i+l;ja jj )min=j; tem=a;a=a min;a min =tem;/*outputdata*/ printf(HAftersortednH);for(l=0;iN;

23、i+) printf(”5dja);題目:求一個(gè)3*3矩陣對(duì)角線元素之和程序分析:利用雙重for循環(huán)控制輸入二維數(shù)組,再將a累加后輸岀0程序源代碼:main()floata 33 fsum=O;intizj;prin tf(Hpleasei nputrectangleeleme nt: nJ;for(l=0;i3;i+)for(J=0;j3;j+)scanf(H%rz&a (j);for(i=0;i3;i+)sum=sum+a;printf(Hduijiaoxianheis%,/sum);題目:有一個(gè)已經(jīng)排好序的數(shù)組?,F(xiàn)輸入一個(gè)數(shù),要求按原來(lái)的規(guī)律將它插入數(shù)組中。程序分析:首先判斷此數(shù)是否大于

24、最后一個(gè)數(shù),然后再考慮插入中間的數(shù)的情況,插入后此元素之后的數(shù),依次后移一個(gè)位普。程序源代碼:main() inta 11 =1,4,6,943,16,19,2830,100; inttemplztemp2z nu mbere nd.ij;printf(Honginalarrayis:n);for(i=0;iend)a 10 =number;else for(i=0;i nu mber)(templ=a;a=nu mber;for(j=l+l;jll;j+)(temp2=a j;a j =templ;templ=temp2;break;for(i=0;i程序分析:用第一個(gè)與最后一個(gè)交換。#d

25、efineN5 main()inta N =9,6,5,4,1兒temp;printf(H noriginalarray: n”); for(i=0;iN;i+) printf(H%4d,/a);for(i=0;iN/2;i+)temp=a;a=a N-i-1;a N-i=temp;printf(”n sortedarray: n”);for(i=0;iN;i+)printf(H%4d,za);題目:學(xué)習(xí)static定義靜態(tài)變呈的用法程序源代碼: include varfunc() in tvar=O;statici ntstatlc_var=O;printf(M40:varequal%dnl

26、,/var);printf(l,40:staticvarequal%dn,/static_var); printf(l,nH);var+;statlc_var+;voidmain()(inti;for(i=0;i3;i+)varfu nc();題目:學(xué)習(xí)使用auto定義變屋的用法程序源代碼:#includeMMmain()inti,n um;num=2;for(i=0;i3;i+)printf(,40:Thenumequal%dn,rnum);autoi ntnum=l;printf(H40:Theinternalblocknumequal%dn,/num); num+;c語(yǔ)言的學(xué)基礎(chǔ),100

27、個(gè)經(jīng)典的算法- 2程序源代碼:#include,H,main()inti,num;num=2;for(i=0;iM); scanfC%cf;&num);pnntf(l,40:Thesquareforthisnumberis%dn,/SQ(num); if(n um = 50) agai n=TRUE;elseagai n=FALSE;題目:宏#define命令練習(xí)(2)程序源代碼:include#defineexchange(azb)V*宏定義中允許包含兩道衣裳命令的情形,此時(shí)必須在嵌右邊加上*/intt;t=a;a=b;b=t; voidmai n(void)5-rxHlo;irnyH20;

28、pz.nrf(-XH*d;yH*drrx、y); exchange(xy); prinrf(XH*d;yH*dvrx、y); 闊nB- M#def5e5$ 第出(3)#defineLAGV井definesMAA #defmeEQ= =#5c_ud* voidmain() inrHlo;5-UH20;if(iLAGj)pz.nrf(-49*d-argerthangdrr jj); e-seif(iEQj)Pz.nt:f(n49gdequa_to drcLj)j e-seif(isMAj) prinrf(,49gdsma=erthangdnc、j);else printf(M40:Nosuchva

29、lue.nH);題目:#if#ifdef和#ifndef的綜合應(yīng)用。程序源代碼:#includeMM#defineMAX# defineMAXIMUM(x/y)(xy)x:y#defineMINIMUM(xzy)(xy)y:xvoidmain()in ta=10rb=20;#ifdefMAXprintf(,40:Thelargeroneis%dn,/MAXIMUM(a/b);# elseprintf(,40:Theloweroneis%dnHzMINIMUM(azb);#endif#lfndefMINprintf(,40:Theloweroneis%dn,/MINIMUM(azb);#else

30、printf(,40:Thelargeroneis%dn,/MAXIMUM(a/b);#endif#undefMAX #ifdefMAXprintf(l,40:Thelargeroneis%dnM,MAXIMUM(a/b);#elseprintf(,40:Theloweroneis%dnHzMINIMUM(a/b);#endif#defineMIN#ifndefMINprintf(,40:Theloweroneis%dnH/MINIMUM(a/b);# elseprintf(,40:Thelargeroneis%dnHzMAXIMUM(a/b);#endif題目:#include的應(yīng)用練習(xí)程序源代碼:文件如下:#defineLAG#defineSMA4;C=(0VV4);d=b &c;printf(H%on%on,/azd); 題目:學(xué)習(xí)使用按位取反程序分析:0=1;1=0;程序源代碼:# include main()intazb;a=234;b=a;printf(,40:Thea,slcomplement(decimal)is%dn,/b);prlntf(,40:Thea,slcomplemen

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論