C语言的学习要从基础开始,这里是100个经典的算法-C语言的学习要从基础开始,这里是100个经典的算法题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?__________________________________________________________________程序分析:兔子的规律为数列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;/*前两个月加起来赋值给第三个月*/}}上题还可用一维数组处理,youtry!题目:判断101-200之间有多少个素数,并输出所有素数。__________________________________________________________________程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。___________________________________________________________________程序源代码:#includemath.hmain(){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);}题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。__________________________________________________________________程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。___________________________________________________________________程序源代码:main(){inti,j,k,n;printf('waterflower'numberis:);for(n=100;n1000;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);}题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。__________________________________________________________________程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。(2)如果nk,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。___________________________________________________________________程序源代码:/*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);}题目:利用条件运算符的嵌套来完成此题:学习成绩=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。__________________________________________________________________程序分析:(ab)?a:b这是条件运算符的基本例子。___________________________________________________________________程序源代码:main(){intscore;chargrade;printf(pleaseinputascore\n);scanf(%d,&score);grade=score=90?'A'score=60?'B':'C');printf(%dbelongsto%c,score,grade);}题目:输入两个正整数m和n,求其最大公约数和最小公倍数。__________________________________________________________________程序分析:利用辗除法。___________________________________________________________________程序源代码: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);}题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。__________________________________________________________________程序分析:利用while语句,条件为输入的字符不为'\n'.___________________________________________________________________程序源代码:#includestdio.hmain(){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是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。__________________________________________________________________程序分析:关键是计算出每一项的值。___________________________________________________________________程序源代码: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);}题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。___________________________________________________________________程序源代码:main(){staticintk[10];inti,j,n,s;for(j=2;j1000;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次落地时,共经过多少米?第10次反弹多高?___________________________________________________________________程序源代码:main(){floatsn=100.0,hn=sn/2;intn;for(n=2;n=10;n++){sn=sn+2*hn;/*第n次落地时共经过的米数*/hn=hn/2;/*第n次反跳高度*/}printf(thetotalofroadis%f\n,sn);printf(thetenthis%fmeter\n,hn);}题目:一只猴子摘了N个桃子第一天吃了一半又多吃了一个,第二天又吃了余下的一半又多吃了一个,到第十天的时候发现还有一个.___________________________________________________________________程序源代码:/*猴子吃桃问题*/main(){inti,s,n=1;for(i=1;i10;i++){s=(n+1)*2n=s;}printf(第一天共摘了%d个桃\n,s);}迭代法求方程根___________________________________________________________________/*迭代法求一个数的平方根*/#defineEpsilon1.0E-6/*控制解的精度*/#includemath.hmain(){floata,x0,x1;printf(请输入要求的数:);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/*控制解的精度*/#includestdio.h#includemath.hmain(){floatnum,pre,this;do{scanf(%f,&num);/*输入要求平方根的数*/}while(num0);if(num==0)printf(therootis0);else{this=1;do{pre=this;this=(pre+num/pre)/2;}while(fabs(pre-this)Epsilon);