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

下載本文檔

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

文檔簡介

.經(jīng)典C語言算法2009年08月17日星期日16:51C語言的學(xué)習(xí)要從基礎(chǔ)開始,這里是100個經(jīng)典的算法-1C語言的學(xué)習(xí)要從基礎(chǔ)開始,這里是100個經(jīng)典的算法題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數(shù)為多少?__________________________________________________________________程序分析:兔子的規(guī)律為數(shù)列1,1,2,3,5,8,13,21....___________________________________________________________________程序源代碼:main(){longf1,f2;inti;f1=f2=1;for(i=1;i<=20;i++){printf("%12ld%12ld",f1,f2);if(i%2==0)printf("\n");/*控制輸出,每行四個*/f1=f1+f2;/*前兩個月加起來賦值給第三個月*/f2=f1+f2;/*前兩個月加起來賦值給第三個月*/}}上題還可用一維數(shù)組辦理,youtry!題目:判斷101-200之間有多少個素數(shù),并輸出所有素數(shù)。__________________________________________________________________..程序分析:判斷素數(shù)的方法:用一個數(shù)分別去除2到sqrt(這個數(shù)),假如能被整除,則表示此數(shù)不是素數(shù),反之是素數(shù)。___________________________________________________________________程序源代碼:#include"math.h"main(){intm,i,k,h=0,leap=1;printf("\n");for(m=101;m<=200;m++){k=sqrt(m+1);for(i=2;i<=k;i++)if(m%i==0){leap=0;break;}if(leap){printf("%-4d",m);h++;if(h%10==0)printf("\n");}leap=1;}printf("\nThetotalis%d",h);}題目:打印出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個三位數(shù),其各位數(shù)字立方和等于該數(shù)自己。比方:153是一個“水仙花數(shù)”,因為153=1的三次方+5的三次方+3的三次方。__________________________________________________________________程序分析:利用for循環(huán)控制100-999個數(shù),每個數(shù)分解出個位,十位,百位。___________________________________________________________________..程序源代碼:main(){inti,j,k,n;printf("'waterflower'numberis:");for(n=100;n<1000;n++){i=n/100;/*分解出百位*/j=n/10%10;/*分解出十位*/k=n%10;/*分解出個位*/if(i*100+j*10+k==i*i*i+j*j*j+k*k*k){printf("%-5d",n);}}printf("\n");}題目:將一個正整數(shù)分解質(zhì)因數(shù)。比方:輸入90,打印出90=2*3*3*5。__________________________________________________________________程序分析:對n進行分解質(zhì)因數(shù),應(yīng)先找到一個最小的質(zhì)數(shù)k,此后按下述步驟完成:假如這個質(zhì)數(shù)恰等于n,則說明分解質(zhì)因數(shù)的過程已經(jīng)結(jié)束,打印出即可。假如n<>k,但n能被k整除,則應(yīng)打印出k的值,并用n除以k的商,作為新的正整數(shù)你n,重復(fù)履行第一步。假如n不可以被k整除,則用k+1作為k的值,重復(fù)履行第一步。___________________________________________________________________程序源代碼:/*zhengintisdividedyinshu*/main(){intn,i;printf("\npleaseinputanumber:\n");scanf("%d",&n);printf("%d=",n);for(i=2;i<=n;i++){..while(n!=i){if(n%i==0){printf("%d*",i);n=n/i;}elsebreak;}}printf("%d",n);}題目:利用條件運算符的嵌套來達成本題:學(xué)習(xí)成績>=90分的同學(xué)用A表示,60-89分之間的用B表示,60分以下的用C表示。__________________________________________________________________程序分析:(a>b)?a:b這是條件運算符的基本例子。___________________________________________________________________程序源代碼:main(){intscore;chargrade;printf("pleaseinputascore\n");scanf("%d",&score);grade=score>=90?'A'score>=60?'B':'C');printf("%dbelongsto%c",score,grade);}題目:輸入兩個正整數(shù)m和n,求其最大合約數(shù)和最小公倍數(shù)。__________________________________________________________________..程序分析:利用輾除法。___________________________________________________________________程序源代碼:main(){inta,b,num1,num2,temp;printf("pleaseinputtwonumbers:\n");scanf("%d,%d",&num1,&num2);if(num1{temp=num1;num1=num2;num2=temp;}a=num1;b=num2;while(b!=0)/*利用輾除法,直到b為0為止*/{temp=a%b;a=b;b=temp;}printf("gongyueshu:%d\n",a);printf("gongbeishu:%d\n",num1*num2/a);}題目:輸入一行字符,分別統(tǒng)計出其中英文字母、空格、數(shù)字和其余字符的個數(shù)。__________________________________________________________________程序分析:利用while語句,條件為輸入的字符不為'\n'.___________________________________________________________________程序源代碼:#include"stdio.h"main()..{charc;intletters=0,space=0,digit=0,others=0;printf("pleaseinputsomecharacters\n");while((c=getchar())!='\n'){if(c>='a'&&c<='z'||c>='A'&&c<='Z')letters++;elseif(c=='')space++;elseif(c>='0'&&c<='9')digit++;elseothers++;}printf("allinall:char=%dspace=%ddigit=%dothers=%d\n",letters,space,digit,others);}題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數(shù)字。比方2+22+222+2222+22222(此時共有5個數(shù)相加),幾個數(shù)相加有鍵盤控制。__________________________________________________________________程序分析:要點是計算出每一項的值。___________________________________________________________________程序源代碼:main(){inta,n,count=1;longintsn=0,tn=0;printf("pleaseinputaandn\n");scanf("%d,%d",&a,&n);printf("a=%d,n=%d\n",a,n);while(count<=n){tn=tn+a;..sn=sn+tn;a=a*10;++count;}printf("a+aa+...=%ld\n",sn);}題目:一個數(shù)假如恰巧等于它的因子之和,這個數(shù)就稱為“完數(shù)”。比方6=1+2+3.編程找出1000之內(nèi)的所有完數(shù)。___________________________________________________________________程序源代碼:main(){staticintk[10];inti,j,n,s;for(j=2;j<1000;j++){n=-1;s=j;for(i=1;i{if((j%i)==0){n++;s=s-i;k[n]=i;}}if(s==0){printf("%disawanshu",j);for(i=0;iprintf("%d,",k);printf("%d\n",k[n]);}}}題目:一球從100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地時,共經(jīng)過多少米?第10次反彈多高?..___________________________________________________________________程序源代碼:main(){floatsn=100.0,hn=sn/2;intn;for(n=2;n<=10;n++){sn=sn+2*hn;/*第n次落地時共經(jīng)過的米數(shù)*/hn=hn/2;/*第n次反跳高度*/}printf("thetotalofroadis%f\n",sn);printf("thetenthis%fmeter\n",hn);}題目:一只猴子摘了N個桃子第一天吃了一半又多吃了一個,次日又吃了余下的一半又多吃了一個,到第十天的時候發(fā)現(xiàn)還有一個.___________________________________________________________________程序源代碼:/*猴子吃桃問題*/main(){inti,s,n=1;for(i=1;i<10;i++){s=(n+1)*2n=s;}printf("第一天共摘了%d個桃\n",s);}迭代法求方程根___________________________________________________________________/*迭代法求一個數(shù)的平方根*/..#defineEpsilon1.0E-6/*控制解的精度*/#include<math.h>main(){floata,x0,x1;printf("請輸入要求的數(shù):");scanf("%f",&a);x0=a/2;x1=(x0+a/x0)/2;while(fabs(x1-x0)>=Epsilon){x0=x1;x1=(x0+a/x0)/2;}printf("%f的平方根:%f.5\n",x1);}/*上題的另一種算法*/#defineEpsilon1.0E-6/*控制解的精度*/#include<stdio.h>#include<math.h>main(){floatnum,pre,this;do{scanf("%f",&num);/*輸入要求平方根的數(shù)*/}while(num<0);if(num==0)printf("therootis0");else{this=1;do{pre=this;this=(pre+num/pre)/2;}while(fabs(pre-this)>Epsilon);/*用解的精度,控制循環(huán)次數(shù)*/}printf("therootis%f",this);}用牛頓迭代法求方程2*x*x*x-4*x*x+3*x-6的根../*牛頓迭代法*/#defineEpsilon1.0E-6/*控制解的精度*/#include<math.h>main(){floatx1,x0=1.5;x1=x0-(2*x0*x0*x0-4*x0*x0+3*x0-6)/(6*x0*x0-8*x0+3);while(fabs(x1-x0>=Epsilon){x0=x1;x1=x0-(2*x0*x0*x0-4*x0*x0+3*x0-6)/(6*x0*x0-8*x0+3);}printf("方程的根為%f\n",x1);}用二分法求上題/*二分法*/#defineEpsilon1.0E-5/*控制解的精度*/#include<math.h>main(){folatx1,x2,x0,f1,f2,f0;x0=(x1+x2)/2;f0=2*x0*x0*x0-4*x0*x0+3*x0-6;/*求中點的函數(shù)值*/while(fabs(f0)>=Epsilon){if(f0*f1<0){x2=x0;f2=2*x2*x2*x2-4*x2*x2+3*x2-6;}if(f0*f2<0){x1=x0;f1=2*x1*x1*x1-4*x1*x1+3*x1-6;}x0=(x1+x2)/2;f0=2*x0*x0*x0-4*x0*x0+3*x0-6;}printf("用二分法求得方程的根:%f\n",x0);}..題目:打印出以以下圖案(菱形)****___________________________________________________________________程序分析:先把圖形分紅兩部分來對待,前四行一個規(guī)律,后三行一個規(guī)律,利用雙重for循環(huán),第一層控制行,第二層控制列。___________________________________________________________________程序源代碼:main(){inti,j,k;for(i=0;i<=3;i++){for(j=0;j<=2-i;j++)printf("");for(k=0;k<=2*i;k++)printf("*");printf("\n");}for(i=0;i<=2;i++){for(j=0;j<=i;j++)printf("");for(k=0;k<=4-2*i;k++)printf("*");printf("\n");}}題目:一個5位數(shù),判斷它能否是回文數(shù)。即12321是回文數(shù),個位與萬位相同,..十位與千位相同。___________________________________________________________________程序分析:同29例___________________________________________________________________程序源代碼:main(){longge,shi,qian,wan,x;scanf("%ld",&x);wan=x/10000;qian=x%10000/1000;shi=x%100/10;ge=x%10;if(ge==wan&&shi==qian)/*個位等于萬位并且十位等于千位*/printf("thisnumberisahuiwen\n");elseprintf("thisnumberisnotahuiwen\n");}題目:請輸入星期幾的第一個字母來判斷一下是星期幾,假如第一個字母相同,則連續(xù)判斷第二個字母。___________________________________________________________________程序分析:用狀況語句比較好,假如第一個字母相同,則判斷用狀況語句或if語句判斷第二個字母。___________________________________________________________________程序源代碼:#include<stdio.h>voidmain(){charletter;printf("pleaseinputthefirstletterofsomeday\n");..while((letter=getch())!='Y')/*當(dāng)所按字母為Y時才結(jié)束*/{switch(letter){case'S':printf("pleaseinputsecondletter\n");if((letter=getch())=='a')printf("saturday\n");elseif((letter=getch())=='u')printf("sunday\n");elseprintf("dataerror\n");break;case'F':printf("friday\n");break;case'M':printf("monday\n");break;case'T':printf("pleaseinputsecondletter\n");if((letter=getch())=='u')printf("tuesday\n");elseif((letter=getch())=='h')printf("thursday\n");elseprintf("dataerror\n");break;case'W':printf("wednesday\n");break;default:printf("dataerror\n");}}}題目:Pressanykeytochangecolor,doyouwanttotryit.Pleasehurryup!___________________________________________________________________程序源代碼:#include<conio.h>voidmain(void){intcolor;for(color=0;color<8;color++){textbackground(color);/*設(shè)置文本的背景顏色*/cprintf("Thisiscolor%d\r\n",color);cprintf("ressanykeytocontinue\r\n");getch();/*輸入字符看不見*/}..}題目:學(xué)習(xí)gotoxy()與clrscr()函數(shù)___________________________________________________________________程序源代碼:#include<conio.h>voidmain(void){clrscr();/*清屏函數(shù)*/textbackground(2);gotoxy(1,5);/*定位函數(shù)*/cprintf("Outputatrow5column1\n");textbackground(3);gotoxy(20,10);cprintf("Outputatrow10column20\n");}題目:練習(xí)函數(shù)調(diào)用___________________________________________________________________程序源代碼:#include<stdio.h>voidhello_world(void){printf("Hello,world!\n");}voidthree_hellos(void){intcounter;for(counter=1;counter<=3;counter++)hello_world();/*調(diào)用此函數(shù)*/}voidmain(void){three_hellos();/*調(diào)用此函數(shù)*/}題目:文本顏色設(shè)置..___________________________________________________________________程序源代碼:#include<conio.h>voidmain(void){intcolor;for(color=1;color<16;color++){textcolor(color);/*設(shè)置文本顏色*/cprintf("Thisiscolor%d\r\n",color);}textcolor(128+15);cprintf("Thisisblinking\r\n");}題目:求100之內(nèi)的素數(shù)___________________________________________________________________程序源代碼:#include<stdio.h>#include"math.h"#defineN101main(){inti,j,line,a[N];for(i=2;i<N;i++)a=i;for(i=2;i<sqrt(N);i++)for(j=i+1;j<N;j++){if(a!=0&&a[j]!=0)if(a[j]%a==0)[j]=0;}printf("\n");for(i=2,line=0;i<N;i++){if(a!=0){printf("%5d",a);line++;}if(line==10)..{printf("\n");line=0;}}}題目:對10個數(shù)進行排序___________________________________________________________________程序分析:可以利用選擇法,即從后9個比較過程中,選擇一個最小的與第一個元素互換,下次類推,即用第二個元素與后8個進行比較,并進行互換。程序源代碼:#defineN10main(){inti,j,min,tem,a[N];/*inputdata*/printf("pleaseinputtennum:\n");for(i=0;i<N;i++){printf("a[%d]=",i);scanf("%d",&a);}printf("\n");for(i=0;i<N;i++)printf("%5d",a);printf("\n");/*sorttennum*/for(i=0;i<N-1;i++){min=i;for(j=i+1;j<N;j++)if(a[min]>a[j])min=j;tem=a;a=a[min];a[min]=tem;}/*outputdata*/printf("Aftersorted\n");for(i=0;i<N;i++)printf("%5d",a);}..題目:求一個3*3矩陣對角線元素之和___________________________________________________________________程序分析:利用雙重for循環(huán)控制輸入二維數(shù)組,再將a累加后輸出。___________________________________________________________________程序源代碼:main(){floata[3][3],sum=0;inti,j;printf("pleaseinputrectangleelement:\n");for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%f",&a[j]);for(i=0;i<3;i++)sum=sum+a;printf("duijiaoxianheis%6.2f",sum);}題目:有一個已經(jīng)排好序的數(shù)組?,F(xiàn)輸入一個數(shù),要求按原來的規(guī)律將它插入數(shù)組中。___________________________________________________________________程序分析:第一判斷此數(shù)能否大于最后一個數(shù),此后再考慮插入中間的數(shù)的狀況,插入后此元素今后的數(shù),依次后移一個地點。___________________________________________________________________程序源代碼:main(){inta[11]={1,4,6,9,13,16,19,28,40,100};inttemp1,temp2,number,end,i,j;..printf("originalarrayis:\n");for(i=0;i<10;i++)printf("%5d",a);printf("\n");printf("insertanewnumber:");scanf("%d",&number);end=a[9];if(number>end)a[10]=number;else{for(i=0;i<10;i++){if(a>number){temp1=a;a=number;for(j=i+1;j<11;j++){temp2=a[j];[j]=temp1;temp1=temp2;}break;}}}for(i=0;i<11;i++)printf("%6d",a);}題目:將一個數(shù)組逆序輸出。___________________________________________________________________程序分析:用第一個與最后一個互換。___________________________________________________________________程序源代碼:#defineN5main(){inta[N]={9,6,5,4,1},i,temp;printf("\noriginalarray:\n");for(i=0;i<N;i++)..printf("%4d",a);for(i=0;i<N/2;i++){temp=a;a=a[N-i-1];a[N-i-1]=temp;}printf("\nsortedarray:\n");for(i=0;i<N;i++)printf("%4d",a);}題目:學(xué)習(xí)static定義靜態(tài)變量的用法___________________________________________________________________程序源代碼:#include"stdio.h"varfunc(){intvar=0;staticintstatic_var=0;printf("\40:varequal%d\n",var);printf("\40:staticvarequal%d\n",static_var);printf("\n");var++;static_var++;}voidmain(){inti;for(i=0;i<3;i++)varfunc();}題目:學(xué)習(xí)使用auto定義變量的用法___________________________________________________________________程序源代碼:#include"stdio.h"main(){inti,num;num=2;for(i=0;i<3;i++)..{printf("\40:Thenumequal%d\n",num);num++;{autointnum=1;printf("\40:Theinternalblocknumequal%d\n",num);num++;}}}C語言的學(xué)基礎(chǔ),100個經(jīng)典的算法-2程序源代碼:#include"stdio.h"main(){inti,num;num=2;for(i=0;i<3;i++){printf("\40:Thenumequal%d\n",num);num++;{staticintnum=1;printf("\40:Theinternalblocknumequal%d\n",num);num++;}}}題目:學(xué)習(xí)使用external的用法。___________________________________________________________________程序源代碼:#include"stdio.h"inta,b,c;voidadd(){inta;a=3;c=a+b;}voidmain()..{a=b=4;add();printf("Thevalueofcisequalto%d\n",c);}題目:學(xué)習(xí)使用register定義變量的方法。___________________________________________________________________程序源代碼:voidmain(){registerinti;inttmp=0;for(i=1;i<=100;i++)tmp+=i;printf("Thesumis%d\n",tmp);}題目:宏#define命令練習(xí)(1)___________________________________________________________________程序源代碼:#include"stdio.h"#defineTRUE1#defineFALSE0#defineSQ(x)(x)*(x)voidmain(){intnum;intagain=1;printf("\40:Programwillstopifinputvaluelessthan50.\n");while(again){printf("\40leaseinputnumber==>");scanf("%d",&num);printf("\40:Thesquareforthisnumberis%d\n",SQ(num));if(num>=50)again=TRUE;elseagain=FALSE;}..}題目:宏#define命令練習(xí)(2)___________________________________________________________________程序源代碼:#include"stdio.h"#defineexchange(a,b){\/*宏定義中贊同包含兩道衣裳命令的狀況,此時必定在最右邊加上"\"*/intt;\t=a;\a=b;\b=t;\}voidmain(void){intx=10;inty=20;printf("x=%d;y=%d\n",x,y);exchange(x,y);printf("x=%d;y=%d\n",x,y);}題目:宏#define命令練習(xí)(3)___________________________________________________________________程序源代碼:#defineLAG>#defineSMA<#defineEQ==#include"stdio.h"voidmain(){inti=10;intj=20;if(iLAGj)printf("\40:%dlargerthan%d\n",i,j);elseif(iEQj)printf("\40:%dequalto%d\n",i,j);elseif(iSMAj)printf("\40:%dsmallerthan%d\n",i,j);else..printf("\40:Nosuchvalue.\n");}題目:#if#ifdef和#ifndef的綜合應(yīng)用。___________________________________________________________________程序源代碼:#include"stdio.h"#defineMAX#defineMAXIMUM(x,y)(x>y)?x:y#defineMINIMUM(x,y)(x>y)?y:xvoidmain(){inta=10,b=20;#ifdefMAXprintf("\40:Thelargeroneis%d\n",MAXIMUM(a,b));#elseprintf("\40:Theloweroneis%d\n",MINIMUM(a,b));#endif#ifndefMINprintf("\40:Theloweroneis%d\n",MINIMUM(a,b));#elseprintf("\40:Thelargeroneis%d\n",MAXIMUM(a,b));#endif#undefMAX#ifdefMAXprintf("\40:Thelargeroneis%d\n",MAXIMUM(a,b));#elseprintf("\40:Theloweroneis%d\n",MINIMUM(a,b));#endif#defineMIN#ifndefMINprintf("\40:Theloweroneis%d\n",MINIMUM(a,b));#elseprintf("\40:Thelargeroneis%d\n",MAXIMUM(a,b));#endif}題目:#include的應(yīng)用練習(xí)___________________________________________________________________程序源代碼:..test.h文件以下:#defineLAG>#defineSMA<#defineEQ==#include"test.h"/*一個新文件50.c,包含test.h*/#include"stdio.h"voidmain(){inti=10;intj=20;if(iLAGj)printf("\40:%dlargerthan%d\n",i,j);elseif(iEQj)printf("\40:%dequalto%d\n",i,j);elseif(iSMAj)printf("\40:%dsmallerthan%d\n",i,j);elseprintf("\40:Nosuchvalue.\n");}題目:學(xué)習(xí)使用按位與&。___________________________________________________________________程序分析:0&0=0;0&1=0;1&0=0;1&1=1___________________________________________________________________程序源代碼:#include"stdio.h"main(){inta,b;a=077;b=a&3;printf("\40:Thea&b(decimal)is%d\n",b);b&=7;printf("\40:Thea&b(decimal)is%d\n",b);}題目:學(xué)習(xí)使用按位或|。..___________________________________________________________________程序分析:0|0=0;0|1=1;1|0=1;1|1=1___________________________________________________________________程序源代碼:#include"stdio.h"main(){inta,b;a=077;b=a|3;printf("\40:Thea&b(decimal)is%d\n",b);b|=7;printf("\40:Thea&b(decimal)is%d\n",b);}題目:學(xué)習(xí)使用按位異或^。___________________________________________________________________程序分析:0^0=0;0^1=1;1^0=1;1^1=0___________________________________________________________________程序源代碼:#include"stdio.h"main(){inta,b;a=077;b=a^3;printf("\40:Thea&b(decimal)is%d\n",b);b^=7;printf("\40:Thea&b(decimal)is%d\n",b);}題目:取一個整數(shù)a從右端開始的4~7位。..___________________________________________________________________程序分析:可以這樣考慮:先使a右移4位。設(shè)置一個低4位全為1,其余全為0的數(shù)??捎脋(~0<<4)將上面二者進行&運算。___________________________________________________________________程序源代碼:main(){unsigneda,b,c,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論