程序控制結(jié)構(gòu)教材_第1頁
程序控制結(jié)構(gòu)教材_第2頁
程序控制結(jié)構(gòu)教材_第3頁
程序控制結(jié)構(gòu)教材_第4頁
程序控制結(jié)構(gòu)教材_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、C語言程序設(shè)計程序控制結(jié)構(gòu)程序控制結(jié)構(gòu)C語言的語句C語言中語句以語言中語句以分號分號“;”結(jié)束,語句分為:結(jié)束,語句分為:1.聲明語句:在程序編譯時處理,在程序運(yùn)行時不產(chǎn)聲明語句:在程序編譯時處理,在程序運(yùn)行時不產(chǎn)生相應(yīng)的操作。生相應(yīng)的操作。2.執(zhí)行語句:在程序運(yùn)行時向計算機(jī)系統(tǒng)發(fā)出操作命執(zhí)行語句:在程序運(yùn)行時向計算機(jī)系統(tǒng)發(fā)出操作命令,使計算機(jī)執(zhí)行特定的操作。令,使計算機(jī)執(zhí)行特定的操作。void main()void main() int i; / int i; /* *聲明語句聲明語句* */ / printf(%dn,(i=1,+i); / printf(%dn,(i=1,+i); /*

2、*執(zhí)行語句執(zhí)行語句* */ / C語言的執(zhí)行語句表達(dá)式語句:表達(dá)式加分號表達(dá)式語句:表達(dá)式加分號“;”空語句:僅一個分號空語句:僅一個分號“;”構(gòu)成的語句構(gòu)成的語句復(fù)合語句:用一對花括號復(fù)合語句:用一對花括號括起來的多條語句括起來的多條語句控制語句:控制語句:C語言提供語言提供9種控制語句,見種控制語句,見P62#include#includevoid main()void main() int i; int i; i = abs(-2); / i = abs(-2); /* *表達(dá)式語句(賦值語句)表達(dá)式語句(賦值語句) 空語句空語句* */ / printf(%dn,i); / print

3、f(%dn,i); /* *表達(dá)式語句(函數(shù)調(diào)用語句)表達(dá)式語句(函數(shù)調(diào)用語句)* */ / C語言的執(zhí)行語句#include#includevoid main()void main() int a,b; int a,b; printf(Please input a,b:n); printf(Please input a,b:n); scanf(%d,%d,&a,&b); scanf(%d,%d,&a,&b); if(ab) / if(ab) /* *控制語句(控制語句(ifif語句)語句)* */ / int t;t=a;a=b;b=t; / int t;t=

4、a;a=b;b=t; /* *復(fù)合語句復(fù)合語句* */ / printf(a=%d,b=%dn,a,b); printf(a=%d,b=%dn,a,b); getch(); getch(); 程序控制結(jié)構(gòu)程序的三種基本結(jié)構(gòu)程序的三種基本結(jié)構(gòu)順序結(jié)構(gòu):程序執(zhí)行按照代碼書寫順序執(zhí)行順序結(jié)構(gòu):程序執(zhí)行按照代碼書寫順序執(zhí)行 選擇結(jié)構(gòu):選擇結(jié)構(gòu):循環(huán)結(jié)構(gòu):循環(huán)結(jié)構(gòu):if 語句語句switch語句語句當(dāng)型循環(huán)結(jié)構(gòu)當(dāng)型循環(huán)結(jié)構(gòu)(for(for語句、語句、whilewhile語句語句) )直到型循環(huán)結(jié)構(gòu)(直到型循環(huán)結(jié)構(gòu)(do-whiledo-while語句)語句)順序結(jié)構(gòu)所謂順序結(jié)構(gòu)程序就是按代碼書寫順序,自

5、上所謂順序結(jié)構(gòu)程序就是按代碼書寫順序,自上而下執(zhí)行的語句構(gòu)成的程序段。而下執(zhí)行的語句構(gòu)成的程序段。一般順序結(jié)構(gòu)的流程圖為:一般順序結(jié)構(gòu)的流程圖為:動作動作1 1動作動作2 2動作動作3 3例:計算兩個鍵盤輸入的整數(shù)的平均值并輸出。例:計算兩個鍵盤輸入的整數(shù)的平均值并輸出。開始開始輸入兩個整數(shù)輸入兩個整數(shù)計算平均值計算平均值定義三個變量定義三個變量輸出平均值輸出平均值結(jié)束結(jié)束#include#includemain()main() int a,b; int a,b; float average; float average; printf(Please input a,b:n); printf(

6、Please input a,b:n); scanf(%d,%d,&a,&b); scanf(%d,%d,&a,&b); average=(a+b)/2.0; average=(a+b)/2.0; printf(average=%fn,average); printf(average=%fn,average); getch(); getch(); 選擇結(jié)構(gòu)C語言的選擇控制語句有兩條:語言的選擇控制語句有兩條:條件選擇語句:條件選擇語句:if語句語句開關(guān)分支語句:開關(guān)分支語句:switch語句語句一、一、if語句的三種形式語句的三種形式1、if(表達(dá)式)(表達(dá)式)

7、 語句語句表達(dá)式表達(dá)式真真( (非非0)0)語句序列語句序列假假(0)(0)例:輸入一個字母,以小寫形式輸出該字母。例:輸入一個字母,以小寫形式輸出該字母。#include#includemain()main() char c; char c; printf(Input a letter:); printf(Input a letter:); c=getchar(); c=getchar(); if(c=A & c=A & c=Z) c=c+32; c=c+32; printf(%cn,c); printf(%cn,c); getch(); getch(); 開始開始輸入一個字

8、母輸入一個字母定義一個字符變量定義一個字符變量輸出字母輸出字母結(jié)束結(jié)束大寫字母大寫字母?轉(zhuǎn)換為小寫字母轉(zhuǎn)換為小寫字母真真(非非0)假假(0)選擇結(jié)構(gòu)一、一、if語句的三種形式語句的三種形式2、 if(表達(dá)式)(表達(dá)式) 語句語句1 else 語句語句2 表達(dá)式表達(dá)式真真( (非非0)0)語句序列語句序列2 2假假(0)(0)語句序列語句序列1 1例:輸出實數(shù)例:輸出實數(shù)x,y中的較大者。中的較大者。#include#includemain()main() float x,y; float x,y; printf(Input x,y:); printf(Input x,y:); scanf(%f

9、,%f,&x,&y); scanf(%f,%f,&x,&y); if(xy) if(xy) printf(%fn,x); printf(%fn,x); else else printf(%fn,y); printf(%fn,y); getch(); getch(); 開始開始輸入兩個實數(shù)輸入兩個實數(shù)定義兩個實型變量定義兩個實型變量輸出輸出x結(jié)束結(jié)束xy?輸出輸出y真真(非非0)假假(0)選擇結(jié)構(gòu)一、一、if語句的三種形式語句的三種形式3、 if(表達(dá)式(表達(dá)式1) 語句語句1 else if(表達(dá)式(表達(dá)式2) 語句語句2 . . . . . . else if

10、(表達(dá)式(表達(dá)式n) 語句語句n else 語句語句n+1表達(dá)式表達(dá)式1 1真真( (非非0)0)語句序列語句序列n n假假(0)(0)語句序列語句序列1 1表達(dá)式表達(dá)式2 2語句序列語句序列2 2真真( (非非0)0)表達(dá)式表達(dá)式n n假假(0)(0)真真( (非非0)0)語句序列語句序列n+1n+1假假(0)(0)例:輸入百分制成績,要求輸出相應(yīng)的五級制成績。例:輸入百分制成績,要求輸出相應(yīng)的五級制成績。百分制成績與五級制成績之間的轉(zhuǎn)換標(biāo)準(zhǔn)為:百分制成績與五級制成績之間的轉(zhuǎn)換標(biāo)準(zhǔn)為:9090分以上為分以上為“A”A”;80898089分為分為“B”B”;70797079分為分為“C”C”;

11、60696069分為分為“D”D”;6060分以下為分以下為“E”E”。#include#includemain()main() int score; int score; printf(Please input the printf(Please input the score(0100):);score(0100):); scanf(%d,&score); scanf(%d,&score); if(score=90)if(score=90) printf(An); printf(An); else if(score=80)else if(score=80) printf(B

12、n); printf(Bn); else if(score=70) else if(score=70) printf(Cn); printf(Cn); else if(score=60) else if(score=60) printf(Dn); printf(Dn); else else printf(En); printf(En); getch(); getch(); 例:在一對例:在一對/*/之間補(bǔ)充程序,使對其輸入的一個月工資之間補(bǔ)充程序,使對其輸入的一個月工資數(shù)額,求應(yīng)交稅款。設(shè)應(yīng)交稅款的計算公式如下:數(shù)額,求應(yīng)交稅款。設(shè)應(yīng)交稅款的計算公式如下:如:如:輸入輸入:4500 :4500

13、 輸出:輸出:f(4500.00)=30.00f(4500.00)=30.00輸入輸入:6500 :6500 輸出:輸出:f(6500.00)=195.00f(6500.00)=195.00輸入輸入:9500 :9500 輸出:輸出:f(9500.00)=645.00f(9500.00)=645.00#include#includevoid main()void main() float x;double y; float x;double y; printf(Please input a number:n); printf(Please input a number:n); scanf(%f

14、,&x); scanf(%f,&x); / /* * */ / /* * */ / printf(f(%.2f)=%.2fn,x,y); printf(f(%.2f)=%.2fn,x,y); getch(); getch(); if(x=3500) y=0; else if(x=5000) y=(x-3500)*0.03; else if(x=8000) y=(x-3500)*0.1-105; else if(x=12500) y=(x-3500)*0.2-555; .125008000,555%203500;80005000,105%103500;50003500,%3350

15、0;3500,0 xxxxxxxxfif語句的嵌套ifif語句的嵌套:一個語句的嵌套:一個ifif語句的語句的ifif分支、分支、else ifelse if分支分支或或elseelse分支中又完整地包含了另一個分支中又完整地包含了另一個ifif語句語句。ifif(表達(dá)式(表達(dá)式1 1) ifif(表達(dá)式(表達(dá)式2 2) 語句語句1 1 else else 語句語句2 2elseelse if if(表達(dá)式(表達(dá)式3 3) 語句語句3 3 else else 語句語句4 4書寫代碼時書寫代碼時,寫出層次,寫出層次關(guān)系關(guān)系例:有如下一函數(shù),請判斷以下哪個程序是正確的?例:有如下一函數(shù),請判斷以下

16、哪個程序是正確的?0)(x 10)(x 0 0)(x 1-)(xf程序程序1 1:main()main() int x,y; int x,y; scanf(%d,&x); scanf(%d,&x); if (x0) y=-1; if (x=0) if (x=0) if(x0) y=1; if(x0) y=1; else y=0; else y=0; else y=-1; else y=-1; printf(x=%d,y=%d,x,y); printf(x=%d,y=%d,x,y); 例:有如下一函數(shù),請判斷以下哪個程序是正確的?例:有如下一函數(shù),請判斷以下哪個程序是正確的?0)

17、(x 10)(x 0 0)(x 1-)(xf程序程序3 3:main()main() int x,y; int x,y; scanf(%d,&x); scanf(%d,&x); y=-1; y=-1; if(x!=0) if(x!=0) if(x0) y=1; if(x0) y=1; else y=0; else y=0; printf(x=%d,y=%d,x,y); printf(x=%d,y=%d,x,y); y=-1;if(x!=0)if(x0) y=1;else y=0;例:有如下一函數(shù),請判斷以下哪個程序是正確的?例:有如下一函數(shù),請判斷以下哪個程序是正確的?0)(x

18、 10)(x 0 0)(x 1-)(xf程序程序4 4:main()main() int x,y; int x,y; scanf(%d,&x); scanf(%d,&x); y=0; y=0; if(x=0) if(x=0) if(x0) y=1; if(x0) y=1; else y=-1; else y=-1; printf(x=%d,y=%d,x,y); printf(x=%d,y=%d,x,y); y=0;if(x=0)if(x0) y=1;else y=-1;例:以下程序的輸出結(jié)果是?例:以下程序的輸出結(jié)果是?#include#includemain()main()

19、int a,b,c,x; int a,b,c,x; a=b=c=0;x=35; a=b=c=0;x=35; if(!a)x-; if(!a)x-; else if(b);if(c)x=3; else if(b);if(c)x=3; else x+=4; else x+=4; printf(x=%dn,x); printf(x=%dn,x); x=38x=38 int a=1; switch(a) case 1:a+=1;break; case 2:a+=2;break; default:a+=0; printf(%dn,a);選擇結(jié)構(gòu)二、二、switch語句語句switch switch 語句

20、的一般形式語句的一般形式: :switch(switch(表達(dá)式表達(dá)式) ) case case 常量表達(dá)式常量表達(dá)式1 1: :語句組語句組1 1;break;break; case case 常量表達(dá)式常量表達(dá)式2:2:語句組語句組2 2;break;break; case case 常量表達(dá)式常量表達(dá)式n n: :語句組語句組n n; break;break; default: default:語句組語句組n+1;n+1; 多分支選擇結(jié)構(gòu):根據(jù)一個表達(dá)式的不同取值來實現(xiàn)對分支多分支選擇結(jié)構(gòu):根據(jù)一個表達(dá)式的不同取值來實現(xiàn)對分支的選擇。的選擇。語句組語句組1 1breakbreak計算表達(dá)

21、式計算表達(dá)式= =常量常量1 1有有語句組語句組2 2= =常量常量2 2無無breakbreak無無有有語句組語句組n n= =常量常量n nbreakbreak有有無無語句組語句組n+1n+1= =其它其它#include#includemain( )main( ) char grade; char grade; grade=getchar(); grade=getchar(); grade=(grade=a&grade=a&grade=z)?grade-32:grade; switch(grade) switch(grade) case A:printf(90100n);

22、break; case A:printf(90100n);break; case B:printf(8089n);break; case B:printf(8089n);break; case C:printf(7079n);break; case C:printf(7079n);break; case D:printf(6069n);break; case D:printf(6069n);break; case E:printf(60n);break; case E:printf(60n);break; default:printf(Errorn); default:printf(Error

23、n); 每個分支的常量每個分支的常量的值必須互不相的值必須互不相同同各個分支允許內(nèi)各個分支允許內(nèi)嵌多個語句,而嵌多個語句,而且可以不用且可以不用括括起來起來最后一個分支可最后一個分支可以不加以不加break語語句句#include#includemain( )main( ) char grade; char grade; grade=getchar(); grade=getchar(); switch(grade) switch(grade) default:printf(Errorn);break; default:printf(Errorn);break; case A:case a:pr

24、intf(90100n);break; case A:case a:printf(90100n);break; case B:case b:printf(8089n);break; case B:case b:printf(8089n);break; case C:case c:printf(7079n);break; case C:case c:printf(7079n);break; case D:case d:printf(6069n);break; case D:case d:printf(6069n);break; case E:case e:printf(60n);break; c

25、ase E:case e:printf(60n);break; 無論無論default分支分支是否最后出現(xiàn),是否最后出現(xiàn),它都是作為最后它都是作為最后一個分支來考慮一個分支來考慮允許多個允許多個case共用一組執(zhí)行語共用一組執(zhí)行語句句例:以下程序的輸出結(jié)果是?例:以下程序的輸出結(jié)果是?main()main() int x=1,y=0,a=0,b=0; int x=1,y=0,a=0,b=0; switch(x) switch(x) case 1 : case 1 : switch(y) switch(y) case 0:a+;break; case 0:a+;break; case 1:b+;

26、break; case 1:b+;break; case 2:a+;b+;break; case 2:a+;b+;break; case 3:a+;b+; case 3:a+;b+; printf(a=%d,b=%dn,a,b); printf(a=%d,b=%dn,a,b); a=2,b=1break;break;a=1,b=0例例: :運(yùn)行以下程序段,結(jié)果為:(運(yùn)行以下程序段,結(jié)果為:( )int t=3;int t=3;switch(t)switch(t) case 1:printf(1);break; case 1:printf(1);break; case 2:printf(2);b

27、reak; case 2:printf(2);break; case 3:printf(3);break; case 3:printf(3);break; default: printf(Error!); default: printf(Error!); A A) 1 B1 B)2 C2 C) 3 D3 D) Error!Error!D Dint t=49int t=49;A A循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)的特點(diǎn)是在循環(huán)結(jié)構(gòu)的特點(diǎn)是在給定的條件給定的條件成立時,反復(fù)執(zhí)行成立時,反復(fù)執(zhí)行某程序段某程序段,直到條件不成立,直到條件不成立。循環(huán)條件:給定的條件循環(huán)條件:給定的條件循環(huán)體:反復(fù)執(zhí)行的程序段循環(huán)體:

28、反復(fù)執(zhí)行的程序段C語言的循環(huán)控制語句有三種:語言的循環(huán)控制語句有三種:while語句語句do-while語句語句for語句語句循環(huán)結(jié)構(gòu)(while)while(循環(huán)條件表達(dá)式循環(huán)條件表達(dá)式) 循環(huán)體循環(huán)體真真( (非非0)0)假假(0(0)表達(dá)式表達(dá)式循環(huán)體循環(huán)體main()main() int n=1,sum=0; int n=1,sum=0; while(n=100) while(n=100) sum+=n; sum+=n; +n; +n; printf(n=%d,sum=%dn,n,sum); printf(n=%d,sum=%dn,n,sum); 去掉花括號去掉花括號?while(n=

29、100);?循環(huán)結(jié)構(gòu)(do-while)do循環(huán)體循環(huán)體while(循環(huán)條件表達(dá)式循環(huán)條件表達(dá)式);真真( (非非0)0)假假(0(0)表達(dá)式表達(dá)式循環(huán)體循環(huán)體main()main() int n=1,sum=0; int n=1,sum=0; do do sum+=n+; sum+=n+; while(n=100) while(n=100); ; printf(n=%d,sum=%dn,n,sum); printf(n=%d,sum=%dn,n,sum); 勿忘分號勿忘分號“;”While與do-while的比較main()main() int sum=0,n; int sum=0,n; s

30、canf(%d,&n); scanf(%d,&n); while(n=10) while(n=10) sum+=n; sum+=n; n+; n+; printf(%dn,sum); printf(%dn,sum); main()main() int sum=0,n; int sum=0,n; scanf(%d,&n); scanf(%d,&n); do do sum+=n; sum+=n; n+; n+; while(n=10); while(n=10); printf(%dn,sum); printf(%dn,sum); 輸入輸入1時,結(jié)果相時,結(jié)果相同,都

31、是輸出同,都是輸出55輸入輸入11時,結(jié)果時,結(jié)果就不相同了,分就不相同了,分別輸出別輸出0和和11循環(huán)結(jié)構(gòu)(for)for(表達(dá)式表達(dá)式1;表達(dá)式表達(dá)式2;表達(dá)式表達(dá)式3) 循環(huán)體循環(huán)體main()main() int n,sum=0; int n,sum=0; for(n=1;n=100;n+) for(n=1;n=100;n+) sum+=n; sum+=n; printf(n=%d,sum=%dn,n,sum); printf(n=%d,sum=%dn,n,sum); 真真( (非非0)0)假假(0(0)表達(dá)式表達(dá)式2 2循環(huán)體循環(huán)體計算表達(dá)式計算表達(dá)式1 1計算表達(dá)式計算表達(dá)式3 3

32、表達(dá)式表達(dá)式1只執(zhí)行一只執(zhí)行一次,常用于對循次,常用于對循環(huán)變量賦初值環(huán)變量賦初值表達(dá)式表達(dá)式2:循環(huán)條:循環(huán)條件表達(dá)式件表達(dá)式表達(dá)式表達(dá)式3常用于循常用于循環(huán)變量的更新,環(huán)變量的更新,每次執(zhí)行完循環(huán)每次執(zhí)行完循環(huán)體后執(zhí)行一次體后執(zhí)行一次循環(huán)結(jié)構(gòu)(for結(jié)構(gòu)的變形)main()main() int n,sum; int n,sum; for(n=1,sum=0;n=100;sum+=n,n+); for(n=1,sum=0;n=100;sum+=n,n+); printf(n=%d,sum=%dn,n,sum); printf(n=%d,sum=%dn,n,sum); for(,;表達(dá)式表達(dá)式

33、2;,) 循環(huán)體循環(huán)體 /*表達(dá)式表達(dá)式1、3用逗號表達(dá)式用逗號表達(dá)式*/for(;表達(dá)式表達(dá)式2;表達(dá)式表達(dá)式3) 循環(huán)體循環(huán)體 /*表達(dá)式表達(dá)式1缺省缺省*/main()main() int n=1,sum=0; int n=1,sum=0; for(;n=100;n+) for(;n=100;n+) sum+=n; sum+=n; printf(n=%d,sum=%dn,n,sum); printf(n=%d,sum=%dn,n,sum); for(;表達(dá)式表達(dá)式2;) 循環(huán)體循環(huán)體 /*表達(dá)式表達(dá)式1、3缺省缺省*/main()main() int n=1,sum=0; int n=1

34、,sum=0; for(;n=100;) for(;n100)break; sum+=n+;if(n100)break; printf(n=%d,sum=%dn,n,sum); printf(n=%d,sum=%dn,n,sum); 其它程序流程控制(break)breakbreak語句語句: :在在switchswitch中退出中退出switchswitch結(jié)構(gòu);在結(jié)構(gòu);在循環(huán)循環(huán)中退出循環(huán)。中退出循環(huán)。 例:將數(shù)字例:將數(shù)字512表示成兩個數(shù)的和,這兩個數(shù)分別為表示成兩個數(shù)的和,這兩個數(shù)分別為15和和13的倍數(shù)。的倍數(shù)。main()main() int i; int i; for(i=1;

35、i+) for(i=1;i+) if(!(512-i if(!(512-i* *15)%13)break;15)%13)break; printf(%d+%d=512n,i printf(%d+%d=512n,i* *15,512-i15,512-i* *15);15); int i; int i; for(i=1;(512-ifor(i=1;(512-i* *15)%13;i+);15)%13;i+); printf(%d+%d=512n,i printf(%d+%d=512n,i* *15,512-i15,512-i* *15);15);其它程序流程控制(continue)continue

36、continue語句語句: :結(jié)束本次循環(huán),跳過循環(huán)體后面的語句,開始結(jié)束本次循環(huán),跳過循環(huán)體后面的語句,開始下一輪循環(huán)(循環(huán)的短路)。下一輪循環(huán)(循環(huán)的短路)。 例:輸出例:輸出100200之間所有能被之間所有能被7或或9整除的整數(shù)。整除的整數(shù)。main()main() int i,n=0; int i,n=0; for(i=100;i=200;i+) for(i=100;i=200;i+) if(i%7!=0)&(i%9!=0) continue; if(i%7!=0)&(i%9!=0) continue; printf(%5d,i); printf(%5d,i); n+;

37、if(n%5=0)printf(n); n+;if(n%5=0)printf(n); for(i=100;i=200;i+) for(i=100;i=200;i+) if(i%7=0)|(i%9=0) if(i%7=0)|(i%9=0) printf(%5d,i); printf(%5d,i); n+; n+; if(n%5=0)printf(n); if(n%5=0)printf(n); break語句與continue語句的比較void main()void main() int sum=0,item=0; int sum=0,item=0; while(item5) while(item

38、=6)break; if(sum=6)break; printf(%dn,sum); printf(%dn,sum); 輸出輸出6break結(jié)束整個循環(huán)結(jié)束整個循環(huán)void main()void main() int sum=0,item=0; int sum=0,item=0; while(item5) while(item5) item+; item+; if(item=2)continue; if(item=2)continue; sum+=item; sum+=item; printf(%dn,sum); printf(%dn,sum); 輸出輸出13continue結(jié)束本次結(jié)束本次循

39、環(huán)循環(huán)例:程序的輸出結(jié)果是?例:程序的輸出結(jié)果是?void main()void main() int i,a=0,b=0,c=0,d=0; int i,a=0,b=0,c=0,d=0; for(i=1;i=4;i+) for(i=1;i=4;i+) switch(i) switch(i) case 1:a=1;continue; case 1:a=1;continue; case 2:b=2; case 2:b=2; case 3:c=3;break; case 3:c=3;break; case 4:d=4; case 4:d=4; printf(%d%d%d%dn,a,b,c,d); p

40、rintf(%d%d%d%dn,a,b,c,d); 123012301230123012341234循環(huán)的嵌套循環(huán)嵌套:一個循環(huán)體中又包含循環(huán)結(jié)構(gòu)。循環(huán)嵌套:一個循環(huán)體中又包含循環(huán)結(jié)構(gòu)。最常見的循環(huán)嵌套為最常見的循環(huán)嵌套為for結(jié)構(gòu)嵌套結(jié)構(gòu)嵌套main()main() int i,j; int i,j; for (i=0;i2;i+) / for (i=0;i2;i+) /* *外循環(huán)外循環(huán)* */ / for(j=0;j2;j+) / for(j=0;j2;j+) /* *內(nèi)循環(huán)內(nèi)循環(huán)* */ / printf(i=%d,j=%dn,i,j); printf(i=%d,j=%dn,i,j);

41、 輸出結(jié)果:輸出結(jié)果:i=0,j=0i=0,j=0i=0,j=1i=0,j=1i=1,j=0i=1,j=0i=1,j=1i=1,j=1例:打印算術(shù)口訣表例:打印算術(shù)口訣表main()main() int i,j; int i,j; for(i=1;i=9;i+) for(i=1;i=9;i+) for(j=1;j=i;j+) for(j=1;j=i;j+) printf(%d printf(%d* *%d=%-3d,i,j,i%d=%-3d,i,j,i* *j);j); printf(n); printf(n); 1*1=12*1=2 2*2=43*1=3 3*2=6 3*3=94*1=4 4

42、*2=8 4*3=12 4*4=165*1=5 5*2=10 5*3=15 5*4=20 5*5=25例:以下程序是利用例:以下程序是利用窮舉法窮舉法打印出所有的打印出所有的“水仙花數(shù)水仙花數(shù)”。所謂。所謂“水仙花數(shù)水仙花數(shù)”是指一個三位數(shù),其各位數(shù)字的立方和等于該數(shù)是指一個三位數(shù),其各位數(shù)字的立方和等于該數(shù)本身。例如本身。例如153153是一個水仙花數(shù),因為是一個水仙花數(shù),因為153=1153=13 3+5+53 3+3+33 3. . main()main() int i,j,k,m1,m2; int i,j,k,m1,m2; for(i=1;i=9;i+) for(i=1;i=9;i+)

43、 for(j=0;j=9;j+) for(j=0;j=9;j+) for(k=0;k=9;k+) for(k=0;k=9;k+) m1=i m1=i* *100+j100+j* *10+k;10+k; m2=i m2=i* *i i* *i+ji+j* *j j* *j+kj+k* *k k* *k;k; if(m1=m2)printf(%4d,m1); if(m1=m2)printf(%4d,m1); 例:求解百馬百擔(dān)問題例:求解百馬百擔(dān)問題 : :有有100100匹馬,馱匹馬,馱100100擔(dān)貨,大馬馱擔(dān)貨,大馬馱3 3擔(dān)擔(dān),中馬馱,中馬馱2 2擔(dān),兩匹小馬馱擔(dān),兩匹小馬馱1 1擔(dān),問大、

44、中、小馬數(shù)可分別為多擔(dān),問大、中、小馬數(shù)可分別為多少?有多少種解決方案?少?有多少種解決方案? void main()void main() int x,y,z,n=0; int x,y,z,n=0; for(x=0;x=100;x+) for(x=0;x=100;x+) for(y=0;y=100;y+) for(y=0;y=100;y+) for(z=0;z=100;z+) for(z=0;z=100;z+) if(x+y+z=100 & 3 if(x+y+z=100 & 3* *x+2x+2* *y+z/2.0=100)y+z/2.0=100) n+; n+; print

45、f(%d:large:%d,middle:%d,small:%dn,n,x,y,z);printf(%d:large:%d,middle:%d,small:%dn,n,x,y,z); printf(nThere are %d solutions.n,n); printf(nThere are %d solutions.n,n); getch(); getch(); 匹匹,小馬匹,中馬設(shè)大馬zyx1002/23100zyxzyx例:程序的功能是求一堆零件的總數(shù)(例:程序的功能是求一堆零件的總數(shù)(100100到到200200之間)。如果之間)。如果分成分成4 4個零件一組的若干組,則多個零件一組的

46、若干組,則多2 2個零件;若分成個零件;若分成7 7個零件一個零件一組,則多組,則多3 3個零件;若分成個零件;若分成9 9個零件一組,則多個零件一組,則多5 5個零件。個零件。 #include#includevoid main()void main() int i; int i; for(i=100;i=200;i+) for(i=100;i=200;i+) if(i%4=2 & i%7=3 & i%9=5) if(i%4=2 & i%7=3 & i%9=5) printf(%dn,i); printf(%dn,i); getch(); getch(); 例

47、:程序的功能是求滿足等式例:程序的功能是求滿足等式xyz+yzz=520 xyz+yzz=520的的x,y,zx,y,z值(其中值(其中xyzxyz和和yzzyzz分別表示一個三位數(shù))。在一對分別表示一個三位數(shù))。在一對/ /* * */ /之間改錯。之間改錯。 void main()void main() int x,y,z,i,result=520; int x,y,z,i,result=520; for(x=1;x10;x+) for(x=1;x10;x+) for(y=1;y10;y+) for(y=1;y10;y+) / /* * */for(z=1;z10;z+)/for(z=1;

48、z10;z+)/* * */ / i=100 i=100* *x+10 x+10* *y+z+100y+z+100* *y+10y+10* *z+z;z+z; / /* * */if(i=result) /if(i=result) /* * */ / printf(x=%d,y=%d,x=%dn,x,y,z); printf(x=%d,y=%d,x=%dn,x,y,z); getch(); getch(); for(z=0;z10for(z=0;z10;z+);z+)i=resulti=result例:程序的功能是輸出用例:程序的功能是輸出用1 1元、元、2 2元和元和5 5元的紙幣組成元的紙

49、幣組成1010元錢的元錢的所有組合。在一對所有組合。在一對/ /* * */ /之間補(bǔ)充程序。之間補(bǔ)充程序。 void main()void main() int i,j,k; int i,j,k; int num=0; int num=0; printf( No. 1 yuan 2 yuan 5 yuann); printf( No. 1 yuan 2 yuan 5 yuann); for(k=0;k=2;k+) for(k=0;k=2;k+) for(j=0;j=5;j+) for(j=0;j=5;j+) for(i=0;/ for(i=0;/* * */ / /* * */;i+)/;i

50、+)if(/if(/* * */ / /* * */)/) num+; num+; printf(%9d%9d%9d%9dn,num,i,j,k); printf(%9d%9d%9d%9dn,num,i,j,k); i=10i=10k k* *5+j5+j* *2+i=2+i=1010例:在一對例:在一對/ /* * */ /之間補(bǔ)充程序,使其完成圓周率的計算。之間補(bǔ)充程序,使其完成圓周率的計算。22221.312116n#include#includevoid main()void main() int i=1,n;double pi=0.0; int i=1,n;double pi=0.0

51、; printf(Input an integer:); printf(Input an integer:); scanf(%d,&n); scanf(%d,&n); while(i=n) while(i=n) pi+=/ pi+=/* * */ / /* * */;/; i+; i+; pi=sqrt(pi pi=sqrt(pi* *6);6); printf(pi=%lfn,pi); printf(pi=%lfn,pi); 1.0/(i1.0/(i* *i)i)例:在一對例:在一對/ /* * */ /之間補(bǔ)充程序,使其完成圓周率的計算。之間補(bǔ)充程序,使其完成圓周率的計算。

52、#include#includevoid main()void main() long int s=1,n=1;double t=1.0,pi=0; long int s=1,n=1;double t=1.0,pi=0; do do pi+=t; pi+=t; s=-s; s=-s; n+=2; n+=2; t=/ t=/* * */ / /* * */;/; while(fabs(t)1e-6); while(fabs(t)1e-6); pi pi* *=4;=4; printf(pi=%10.6fn,pi); printf(pi=%10.6fn,pi); 1.01.0* *s/ns/n6-

53、10.71513114直到最后一項的值小于例:在一對例:在一對/ /* * */ /之間補(bǔ)充程序,使其完成以下多項式的計算。之間補(bǔ)充程序,使其完成以下多項式的計算。main()main() float sum,term,x; float sum,term,x; int n,k,sign; int n,k,sign; printf(Input x,n:n); printf(Input x,n:n); scanf(%f,%d,&x,&n); scanf(%f,%d,&x,&n); sum=x;term=x;sign=1; sum=x;term=x;sign=1; f

54、or(k=2;k=n;k+) for(k=2;k=n;k+) term term* *=/=/* * */ / /* * */;/; sign=-sign; sign=-sign; sum+=sign sum+=sign* *term;term; printf(sum=%fn,sum); printf(sum=%fn,sum); x x* *x/(2x/(2* *k-2)/(2k-2)/(2* *k-1)k-1)!12() 1(! 7! 5! 3! 1),(121753nxxxxxnxfnn例:在一對例:在一對/ /* * */ /之間補(bǔ)充程序,使其完成之間補(bǔ)充程序,使其完成n!n!的計算。的

55、計算。main()main() int i,n; int i,n; long s=1; long s=1; printf(Input n:); printf(Input n:); scanf(%d,&n); scanf(%d,&n); for(i=1;i=n;i+) for(i=1;i=n;i+) / /* * */ / /* * */;/; printf(%d!=%ldn,n,s); printf(%d!=%ldn,n,s); s s* *=i=i遞推公式初值 )2,3(i iS 1)(i 11 - iiS例:編程求例:編程求n! =1!+2!+3!+n!n! =1!+2!+

56、3!+n!的值。的值。main()main() int i,n; int i,n; long s,t; long s,t; printf(Input n:); printf(Input n:); scanf(%d,&n); scanf(%d,&n); for(i=1,t=1,s=0;i=n;i+) for(i=1,t=1,s=0;i=n;i+) / /* * */ / /* * */;/; s+=t; s+=t; printf(s=%ldn,s); printf(s=%ldn,s); 遞推公式初值 )2,3(i ! iS 1)(i 11 - iiSt t* *=i=i例:程序的

57、功能是求例:程序的功能是求1+12+123+1234+123451+12+123+1234+12345的值。在一對的值。在一對/ /* * */ /之間補(bǔ)充程序。之間補(bǔ)充程序。void main()void main() int i; int i; int t=0,s=0; int t=0,s=0; for(i=1;i=5;i+) for(i=1;i=5;i+) t=/ t=/* * */ / /* * */;/; s+=t; s+=t; printf(1+12+123+1234+12345=%dn,s); printf(1+12+123+1234+12345=%dn,s); t t* *10+i10+i例:編程輸出例:編程輸出FibonacciFibonacci(斐波拉契)數(shù)列的前(斐波拉契)數(shù)列的前2020項。項。main()main() int i,x1=1,x2=1; int i,x1=1,x2=1; for(i=1;

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論