經(jīng)典c程序100例==11--20【程序11】題目:古典問(wèn)題:有一對兔子,從出生后第3個(gè)月起每個(gè)月都生一對兔子,小兔子長(cháng)到第三個(gè)月 后每個(gè)月又生一對兔子,假如兔子都不死,問(wèn)每個(gè)月的兔子總數為多少?1.程序分析: 兔子的規律為數列1,1,2,3,5,8,13,21....2.程序源代碼:main(){long f1,f2;int i;f1=f2=1;for(i=1;i<=20;i++) { printf("%12ld %12ld",f1,f2); if(i%2==0) printf("\n");/*控制輸出,每行四個(gè)*/ f1=f1+f2; /*前兩個(gè)月加起來(lái)賦值給第三個(gè)月*/ f2=f1+f2; /*前兩個(gè)月加起來(lái)賦值給第三個(gè)月*/ }}==============================================================【程序12】題目:判斷101-200之間有多少個(gè)素數,并輸出所有素數。1.程序分析:判斷素數的方法:用一個(gè)數分別去除2到sqrt(這個(gè)數),如果能被整除, 則表明此數不是素數,反之是素數。 2.程序源代碼:#include "math.h"main(){ int m,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("\nThe total is %d",h);}==============================================================【程序13】題目:打印出所有的“水仙花數”,所謂“水仙花數”是指一個(gè)三位數,其各位數字立方和等于該數 本身。例如:153是一個(gè)“水仙花數”,因為153=1的三次方+5的三次方+3的三次方。1.程序分析:利用for循環(huán)控制100-999個(gè)數,每個(gè)數分解出個(gè)位,十位,百位。2.程序源代碼:main(){int i,j,k,n;printf("‘water flower‘number is:"); for(n=100;n<1000;n++) { i=n/100;/*分解出百位*/ j=n/10%10;/*分解出十位*/ k=n%10;/*分解出個(gè)位*/ if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) { printf("%-5d",n); } }printf("\n");}==============================================================【程序14】題目:將一個(gè)正整數分解質(zhì)因數。例如:輸入90,打印出90=2*3*3*5。程序分析:對n進(jìn)行分解質(zhì)因數,應先找到一個(gè)最小的質(zhì)數k,然后按下述步驟完成:(1)如果這個(gè)質(zhì)數恰等于n,則說(shuō)明分解質(zhì)因數的過(guò)程已經(jīng)結束,打印出即可。(2)如果n<>k,但n能被k整除,則應打印出k的值,并用n除以k的商,作為新的正整數你n, 重復執行第一步。(3)如果n不能被k整除,則用k+1作為k的值,重復執行第一步。2.程序源代碼:/* zheng int is divided yinshu*/main(){int n,i;printf("\nplease input a number:\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; } else break; }}printf("%d",n);}==============================================================【程序15】題目:利用條件運算符的嵌套來(lái)完成此題:學(xué)習成績(jì)>=90分的同學(xué)用A表示,60-89分之間的用B表示, 60分以下的用C表示。1.程序分析:(a>b)?a:b這是條件運算符的基本例子。2.程序源代碼:main(){ int score; char grade; printf("please input a score\n"); scanf("%d",&score); grade=score>=90?‘A‘:(score>=60?‘B‘:‘C‘); printf("%d belongs to %c",score,grade);}==============================================================【程序16】題目:輸入兩個(gè)正整數m和n,求其最大公約數和最小公倍數。1.程序分析:利用輾除法。2.程序源代碼:main(){ int a,b,num1,num2,temp; printf("please input two numbers:\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);}==============================================================【程序17】題目:輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個(gè)數。1.程序分析:利用while語(yǔ)句,條件為輸入的字符不為‘\n‘. 2.程序源代碼:#include "stdio.h"main(){char c; int letters=0,space=0,digit=0,others=0; printf("please input some characters\n"); while((c=getchar())!=‘\n‘) { if(c>=‘a(chǎn)‘&&c<=‘z‘||c>=‘A‘&&c<=‘Z‘) letters++; else if(c==‘ ‘) space++; else if(c>=‘0‘&&c<=‘9‘) digit++; else others++;}printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,space,digit,others);}==============================================================【程序18】題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個(gè)數字。例如2+22+222+2222+22222(此時(shí) 共有5個(gè)數相加),幾個(gè)數相加有鍵盤(pán)控制。1.程序分析:關(guān)鍵是計算出每一項的值。2.程序源代碼:main(){ int a,n,count=1; long int sn=0,tn=0; printf("please input a and n\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);}==============================================================【程序19】題目:一個(gè)數如果恰好等于它的因子之和,這個(gè)數就稱(chēng)為“完數”。例如6=1+2+3.編程 找出1000以?xún)鹊乃型陻怠?. 程序分析:請參照程序<--上頁(yè)程序14.2.程序源代碼:main(){static int k[10];int i,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("%d is a wanshu",j); for(i=0;i printf("%d,",k[i]); printf("%d\n",k[n]); }}}==============================================================【程序20】題目:一球從100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地時(shí),共經(jīng)過(guò)多少米?第10次反彈多高?1.程序分析:見(jiàn)下面注釋2.程序源代碼:main(){float sn=100.0,hn=sn/2;int n;for(n=2;n<=10;n++) { sn=sn+2*hn;/*第n次落地時(shí)共經(jīng)過(guò)的米數*/ hn=hn/2; /*第n次反跳高度*/ }printf("the total of road is %f\n",sn);printf("the tenth is %f meter\n",hn);}
聯(lián)系客服