C語言復習--第四章.3_第1頁
C語言復習--第四章.3_第2頁
C語言復習--第四章.3_第3頁
C語言復習--第四章.3_第4頁
C語言復習--第四章.3_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1 C語言程序設計語言程序設計 1 C C語言程序設計語言程序設計 第第4章循環(huán)結構程序設計章循環(huán)結構程序設計 1 - 2 C語言程序設計語言程序設計 2 【例題例題】輸入一個正整數輸入一個正整數n,把它分解成,把它分解成1及其質因子及其質因子 相乘的形式。相乘的形式。 如:如: 19=119 36=12233 1024=12222222222 分析:本題即找出所有能整除分析:本題即找出所有能整除n的數,可以嘗試分別用的數,可以嘗試分別用2到到n的整的整 數去除數去除n,如某時刻的值為,如某時刻的值為i,能除盡,能除盡n則取出此時的數則取出此時的數i,再把,再把n 除以除以i的商作為新的的商作

2、為新的n,但要注意下次嘗試的時候還應該用此時的,但要注意下次嘗試的時候還應該用此時的 i去除去除n(因為如(因為如2是是8的一個因子,同時也是的一個因子,同時也是8/2=4的一個因的一個因 子)。如子)。如n不能被不能被i整除則用整除則用i+1去除去除n看能否整除,如此反復直到看能否整除,如此反復直到 i的值為的值為n為止。為止。 1 - 3 C語言程序設計語言程序設計 3 程序如下:程序如下:main() long i, n; printf(Input n: ); scanf(%ld, printf(%ld=1,n); for(i=2;i=n;i+) /*/ /*/ getch(); if(

3、n%i=0) printf(*%ld,i); n/=i; i-; 1 - 4 C語言程序設計語言程序設計 4 【例例】古典問題:有一對兔子,從出生后第古典問題:有一對兔子,從出生后第3個月起每個月都生一對個月起每個月都生一對 兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不 死,問每個月的兔子總對數為多少?(死,問每個月的兔子總對數為多少?(40個月后)個月后) 分析:兔子對數的規(guī)律為數列分析:兔子對數的規(guī)律為數列1,1,2,3,5,8,13,21 ,即,即 從第三個數開始其值都為前兩個數之和。從第三個數開始其值都為前兩個數之

4、和。 main() long m1=1,m2=1;int i; for(i=0;i=b),令),令r為所得余數(為所得余數(0rb) 若若 r = 0,算法結束;,算法結束;b 即為答案。即為答案。 2. 互換:置互換:置 ab,br,并返回第一步。,并返回第一步。 1 - 6 C語言程序設計語言程序設計 6 main() int m=0,n=0,r,t,a,b; scanf(“%d%d”, a=m;b=n; /*/ /*/ /*實現大數在前小數在后實現大數在前小數在后*/ /*/ /*/ /*實現輾轉相除算法實現輾轉相除算法*/ if(ab) t=a;a=b;b=t; r=a%b; whil

5、e(r) a=b; b=r; r=a%b; printf(%d printf(%d getch(); 1 - 7 C語言程序設計語言程序設計 7 【例例】從鍵盤任意輸入一個正數從鍵盤任意輸入一個正數n,判斷其是不是素數,判斷其是不是素數 (因子只有(因子只有1及其本身,其值大于及其本身,其值大于1的自然數)。的自然數)。 #include main() int n,i,k; clrscr(); printf(Input n (n=2): ); scanf(%d, /*/ /*/ k=sqrt(n); for(i=2;i1) printf(%d is a prime number.,n); el

6、se printf(%d is not a prime number.,n); getch(); 1 - 8 C語言程序設計語言程序設計 8 continue語句語句 【例例】分析如下程序,給出程序執(zhí)行結果。分析如下程序,給出程序執(zhí)行結果。 main() int i; for(i=0;i10;i+) if(i%2=0) continue ; printf(%d ,i) ; getch(); 1 - 9 C語言程序設計語言程序設計 9 【例例】隨機輸入多個字符,直到輸入回車結束,統計鍵入空格隨機輸入多個字符,直到輸入回車結束,統計鍵入空格 字符的次數。字符的次數。 #include main()

7、 int count=0;char ch; printf(Input chars:); do/*/ /*/while(/*/ /*/); printf(The number of spaces is %d.n,count); getch(); ch=getchar(); if (ch!= )continue; count+; ch!=n 1 - 10 C語言程序設計語言程序設計 10 1、以下程序段運行后變量以下程序段運行后變量a的值為(的值為( )。)。 int i=1,a=0; for( ;i3;i+) continue; a+=i; A. 6B. 3C. 0D. 5 課堂小測試 1 -

8、11 C語言程序設計語言程序設計 11 2、以下程序段運行后變量、以下程序段運行后變量n的值為(的值為( )。)。 int i=1,n=1; for (;i3;i+) continue;n=n+i; A. 4B. 3C. 2D. 1 課堂小測試 1 - 12 C語言程序設計語言程序設計 12 3、以下程序的運行結果是(以下程序的運行結果是( )。)。 void main() int s = 0, i = 0; while(i 8) i+; if(i%2=0) continue; s+=i; printf(%dn,s); A. 36B. 7C. 16D. 12 課堂小測試 1 - 13 C語言程

9、序設計語言程序設計 13 4、以下程序的運行結果是(、以下程序的運行結果是( )。)。 void main( ) int sum = 0, item = 0; while(item 5) item+; if(item = 2) continue; sum += item; printf(%dn,sum); A. 10B. 13C. 15D. 1 課堂小測試 1 - 14 C語言程序設計語言程序設計 14 4.5循環(huán)結構的嵌套循環(huán)結構的嵌套 一個循環(huán)體內又包含另一個完整的循環(huán)結構稱為一個循環(huán)體內又包含另一個完整的循環(huán)結構稱為循循 環(huán)的嵌套環(huán)的嵌套。內嵌的循環(huán)中還可以嵌套循環(huán),這就是。內嵌的循環(huán)中

10、還可以嵌套循環(huán),這就是 多層循環(huán)。多層循環(huán)。 三種循環(huán)三種循環(huán)(while(while循環(huán)、循環(huán)、do-whiledo-while循環(huán)和循環(huán)和forfor循環(huán)循環(huán)) )可以互可以互 相嵌套。相嵌套。 正常情況下:應先執(zhí)行正常情況下:應先執(zhí)行內層內層的循環(huán)體操作,然后是的循環(huán)體操作,然后是 外層外層循環(huán)。例如:對于雙重循環(huán),內層循環(huán)被執(zhí)行循環(huán)。例如:對于雙重循環(huán),內層循環(huán)被執(zhí)行 的次數應為:內層次數的次數應為:內層次數外層次數。外層次數。 1 - 15 C語言程序設計語言程序設計 15 4.5循環(huán)結構的嵌套循環(huán)結構的嵌套 1: for( ; ; ) for( ; ; ) 2: for( ; ;

11、) while() 3: for( ; ; ) do while() 1 - 16 C語言程序設計語言程序設計 16 4.5循環(huán)結構的嵌套循環(huán)結構的嵌套 4: while() while() 5: while() for( ; ; ) 6: while() do while() 1 - 17 C語言程序設計語言程序設計 17 4.5循環(huán)結構的嵌套循環(huán)結構的嵌套 7: do do while() while() 8: do for( ; ; ) while() 9: do while() while() 1 - 18 C語言程序設計語言程序設計 18 4.5循環(huán)結構的嵌套循環(huán)結構的嵌套 求該程序

12、的運行結果求該程序的運行結果s是多少?循環(huán)多少次?是多少?循環(huán)多少次? main() int i,j,s=0; for(i=1;i=3;i+) for(j=1;j=2;j+) s=s+i+j; printf(“%d”,s); 1 - 19 C語言程序設計語言程序設計 19 【例例】編程實現在屏幕上輸出九九乘法口訣。編程實現在屏幕上輸出九九乘法口訣。 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5

13、*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 分析:分行與列考慮,可用分析:分行與列考慮,可用i控制行,控制行,j控制列,共控制列,共9行,且每行行,且每行 的等式的個數與所在行的序數相同,即第的等式的個數與所在行的序數相同,即第i行就有行就有i列個等式。列個等式。 1 - 20 C語言程

14、序設計語言程序設計 20 【例例】編程實現在屏幕上輸出九九乘法口訣。編程實現在屏幕上輸出九九乘法口訣。 main() int i,j; for(/*/ /*/) for( /*/ /*/ ) printf(%d*%d=%dt,j,i,i*j); printf(n); getch(); i=1; i=9;i+ j=1;j=i;j+ 1 - 21 C語言程序設計語言程序設計 21 【例例】輸出輸出1000內所有的素數,要求每行輸出內所有的素數,要求每行輸出15個數個數 main() int i,j,k,n=0; for(i=2;i=1000;i+) k=sqrt(i); for(j=2;j=k;j

15、+) if(/*/ /*/)break; if(/*/ /*/) printf(%5d,i); n+; if(/*/ /*/) printf(n); getch(); n%15=0 j=k+1 i%j=0 1 - 22 C語言程序設計語言程序設計 22 【例例4.16】打印出如下圖案(菱形)打印出如下圖案(菱形) main() int i,j; for(i=0;i=3;i+) for(/*/ /*/) printf( ); for(/*/ /*/) printf(*);printf(n); for(i=0;i=2;i+) for(/*/ /*/) printf( ); for(/*/ /*/)

16、 printf(*);printf(n); getch(); * * * * * * * j=0;j3-i;j+ j=0;j2*i+1;j+ j=0;ji+1;j+ j=0;j5-2*i;j+ 1 - 23 C語言程序設計語言程序設計 23 【例例4.23】求解百馬百擔問題:有求解百馬百擔問題:有100匹馬,馱匹馬,馱100擔貨,大馬擔貨,大馬 馱馱3擔,中馬馱擔,中馬馱2擔,兩匹小馬馱擔,兩匹小馬馱1擔,問大、中、小馬數可分別擔,問大、中、小馬數可分別 為多少?有多少種解決方案?為多少?有多少種解決方案? main() int large,middle,small; for(/*/ /*/)

17、 for(/*/ /*/) small=2*(100-3*large-2*middle); if( /*/ /*/) printf(large=%-2d middle=%-2d small=%-2dn,large,middle,small); getch(); large=0;large=33;large+ middle=0;middle=1;i-) for(j=i;j=3;j +) k += i * j ; printf(%dn, k); A. 19B. 29C. 6D. 25 課堂小測試 1 - 25 C語言程序設計語言程序設計 25 以下程序段運行后,循環(huán)體中的以下程序段運行后,循環(huán)體中

18、的“count+=2;”語句運語句運 行的次數為(行的次數為( )。)。 int i,j,count=0; for(i=1;i=4;i+) for(j=1;j=i;j+) count+=2; printf(%d ,count); A. 8次次B. 10次次C. 16次次D. 20次次 課堂小測試 1 - 26 C語言程序設計語言程序設計 26 下列程序段運行后下列程序段運行后m的值為(的值為( )。)。 int i,j,m=0; for (i=1;i=3;i+) for(j=2;j=4;j+) m=m+i+j; A .45 B.30 C.33 D.27 課堂小測試 1 - 27 C語言程序設計

19、語言程序設計 27 4.6goto語句語句 gotogoto語句是一種語句是一種跳轉語句跳轉語句,可以用于程序的任何地方。,可以用于程序的任何地方。 gotogoto語句的一般格式為:語句的一般格式為:goto goto 語句標號語句標號; ; 其中語句標號就是一個合法的其中語句標號就是一個合法的標識符標識符。能用。能用gotogoto語句的前提是在同語句的前提是在同 一個函數中某個語句前一個函數中某個語句前存在標號存在標號,語句標號的作用在于標識出其后,語句標號的作用在于標識出其后 語句的位置,語句標號的使用方法是在合法標識符后面加上一個語句的位置,語句標號的使用方法是在合法標識符后面加上一

20、個 冒號冒號“:”“:”。 如:如: label: label: i=j+2 ; i=j+2 ;中的中的label1label1就是一個語句標號。就是一個語句標號。 這時可用這時可用gotogoto語句來跳轉到語句來跳轉到labellabel處。方法如下:處。方法如下: goto label ;goto label ; 此時程序遇到此時程序遇到gotogoto語句之后會無條件的跳到語句之后會無條件的跳到labellabel所標識的語句所標識的語句 (i=j+2i=j+2)處開始執(zhí)行。)處開始執(zhí)行。 1 - 28 C語言程序設計語言程序設計 28 【例例】用用goto語句實現語句實現1+2+3+

21、100結果的輸出結果的輸出 main() int i=0,s=0; label: i+; s+=i; if(i100) goto label; printf(1+2+3+100=%d,s); getch(); 1 - 29 C語言程序設計語言程序設計 29 【例例】分析如下程序總結分析如下程序總結goto語句的作用。語句的作用。 main() int i=0,j; while(1) while(1)while(1)while(1) printf(test); goto label; label: printf(nexit); getch(); 1 - 30 C語言程序設計語言程序設計 30 【

22、例例4.20】有一分數序列:有一分數序列: 求出這個數列的前求出這個數列的前20項之和。項之和。 main() int i; float a=2.0,b=1.0,t,sum=0; for(/*/ /*/) /*/ /*/ printf(sum = %f,sum); getch(); sum+=a/b; t=a;a=a+b;b=t; i=0;i20;i+ 1 - 31 C語言程序設計語言程序設計 31 【例例4.21】求求e 的值。的值。 main() int i,j; double e=1.0,k=1; for(/*/ /*/) /*/ /*/ printf(e = %1.10f,e); ge

23、tch(); k*=i; e+=1.0/k; i=1;i=20;i+ 1 - 32 C語言程序設計語言程序設計 32 【例例4.22】輸出所有三位數的輸出所有三位數的 “水仙花數水仙花數”,所謂,所謂“水仙花數水仙花數” 是是 指其各個位上的數字立方和等于該數本身。例如:指其各個位上的數字立方和等于該數本身。例如:153是一個是一個 “水仙花數水仙花數”,因為,因為153=135333。 main() int i,x,y,z; for(i=100;i=999;i+) z=i%10; y=i/10%10; x=i/100; if(x*x*x+y*y*y+z*z*z=i) printf(%d ,i

24、); getch(); 1 - 33 C語言程序設計語言程序設計 33 (2)求出滿足以下條件的最大的求出滿足以下條件的最大的n。 12+22+32+n2100。(結果:。(結果:n=6) main() int n=0,s=0; while(/*/ /*/) /*/ /*/ n-; printf(n=%d,n); getch(); s=100 n+; s+=n*n; 1 - 34 C語言程序設計語言程序設計 34 (3)中國古代數學家張丘建提出的中國古代數學家張丘建提出的“百雞問題百雞問題”:一只公雞值五個:一只公雞值五個 錢,一只母雞值三個錢,三個小雞值一個錢?,F在有錢,一只母雞值三個錢,三

25、個小雞值一個錢?,F在有100個錢,要個錢,要 買買100只雞,是否可以?若可以,給出一個解,要求三種雞都有。只雞,是否可以?若可以,給出一個解,要求三種雞都有。 請寫出求解該問題的程序。請寫出求解該問題的程序。 main() int cock,hen,chicken; for(/*/ /*/) for(/*/ /*/) chicken =300-9*hen-15*cock; if(/*/ /*/) printf(cock=%d,hen=%d,chicken=%dn, cock,hen,chicken); getch(); cock=0;cock=20;cock+ hen=1;hen0 1 -

26、35 C語言程序設計語言程序設計 35 (5)整元換零錢問題。把整元換零錢問題。把1元兌換成元兌換成1分,分,2分,分,5分的硬分的硬 幣,共有多少種不同換法,請編寫求解此問題的程序幣,共有多少種不同換法,請編寫求解此問題的程序 main() int one,two,five; for(/*/ /*/) for(/*/ /*/) for(/*/ /*/) if(/*/ /*/) printf(one=%d,two=%d,five=%dn, one,two,five); getch(); one=0;one=100;one+ two=0;two=50;two+ five=0;five=20;fi

27、ve+ one+two*2+five*5=100 1 - 36 C語言程序設計語言程序設計 36 (7)求)求s=a+aa+aaa+aaaa+.+aa.a的值,其中的值,其中a是一個數是一個數 字,例如:字,例如:2+22+222+2222+22222(此時此時n=5)。n和和a的值由鍵的值由鍵 盤輸入,請編程實現以上求和。盤輸入,請編程實現以上求和。 main() int n,a,i;long s=0,k=0; printf(Input a:);scanf(%d, printf(Input n:);scanf(%d, for(i=1;i=n;i+) /*/ /*/ printf(%d+%d%

28、d+%d%d+.=%ld,a,a,a,a,a,s); getch(); k=10*k+a; s+=k; 1 - 37 C語言程序設計語言程序設計 37 (8)編程據如下算求出)編程據如下算求出M,N的值。的值。 M N N M 3 6 2 7 main() int m,n,k; for(/*/ /*/) for(/*/ /*/) if (/*/ /*/) printf(m=%d,n=%dn,m,n); getch(); m=1;m=9;m+ n=1;n=9;n+ (m*10+n) *(n*10+m) = 3627 1 - 38 C語言程序設計語言程序設計 38 以下程序的功能是以下程序的功能是 輸出如下圖形:輸出如下圖形: main() int i,j; clrscr(); for(i=1; i=5; i+) for(j=1;j i ; j+) printf( ); f

溫馨提示

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

評論

0/150

提交評論