C語言控制結構_第1頁
C語言控制結構_第2頁
C語言控制結構_第3頁
C語言控制結構_第4頁
C語言控制結構_第5頁
已閱讀5頁,還剩124頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、Chap3 控制結構控制結構1 1掌握選擇結構與循環結構控制語句的作用與使用規范掌握選擇結構與循環結構控制語句的作用與使用規范 2 2學習結構化程序設計中常用的基本算法學習結構化程序設計中常用的基本算法3 3進行算法設計訓練,能綜合控制結構語句解決一般問題進行算法設計訓練,能綜合控制結構語句解決一般問題 4 4能正確輸入輸出數據,并學習程序調試基本方法能正確輸入輸出數據,并學習程序調試基本方法Chap3 控制結構控制結構3.1 順序結構與基本輸入輸出順序結構與基本輸入輸出3.2 分支結構分支結構3.3 循環結構循環結構3.4 循環程序設計循環程序設計3.5 應用舉例應用舉例Chap3 控制結構

2、控制結構3.1.1 C語句概述 3.1.2 順序結構程序設計 3.1.3 字符輸入輸出 3.1.4 格式輸入輸出 Chap3 控制結構控制結構源程序的基本組成單位是語句,語句用于完成一定的操作任務。C語句有以下五類:1 1說明語句說明語句變量定義、變量說明、函數說明、結構說明等變量定義、變量說明、函數說明、結構說明等 int x,y=4; 定義整形變量x、y,并初始化變量yextern int x,y; 說明整形變量x、y是已被定義的全局變量int max(int ,int ); 聲明函數maxChap3 控制結構控制結構2. 2. 控制語句,完成程序流程控制控制語句,完成程序流程控制if(

3、)else 選擇結構語句選擇結構語句for() 循環語句循環語句switch多分支選擇結構語句多分支選擇結構語句return 從函數返回語句從函數返回語句Chap3 控制結構控制結構3. 3. 表達式語句:在表達式后面加分號構成。表達式語句:在表達式后面加分號構成。例:例:a = 3; /* 賦值語句賦值語句 */i+; /* 算術表達式語句算術表達式語句 */ 表達式能構成語句是C的特色。4. 4. 空語句:空語句:只有分號只有分號“;”組成的語句,什么也不執行,但占據了一組成的語句,什么也不執行,但占據了一個語句的位置,也起一條語句的作用。個語句的位置,也起一條語句的作用。 常用于需要一個

4、語句但不需要任何操作的情況常用于需要一個語句但不需要任何操作的情況。 Chap3 控制結構控制結構5 5復合語句(語句塊)復合語句(語句塊) 由大括號由大括號 括起來的語句序列,在語法上復合括起來的語句序列,在語法上復合語句被看作一條語句。語句被看作一條語句。例例: int x , y; z = x + y; t = z / 100; printf(%f,t);復合語句常用于任何需要一條語句的地方復合語句常用于任何需要一條語句的地方 。Chap3 控制結構控制結構例3- 1 鍵盤輸入一個三位數,輸出逆序后的數。#includevoid main( ) int x, y, a, b, c; pr

5、intf(Please input a num:); scanf(%d,&x); a=x/100; b=x/10%10; c=x%10; y=100*c+10*b+a; printf(x=%d, y=%dn,x,y); 順序結構,就是語句按照編寫的順序依次執行。Chap3 控制結構控制結構1C本身沒有輸入輸出語句,數據的I/O由函數實現。 2源程序的開頭使用如下語句: #include #include “stdio.h” Chap3 控制結構控制結構1. 字符輸出函數字符輸出函數putchar()int putchar(int c) 作用:向終端輸出一個字符。參數C可以int型與char型。

6、 Chap3 控制結構控制結構例:#include stdio.h void main() char a,b,c; a = B; b = O; c = Y; putchar(a); putchar(b); putchar(c); 程序輸出:BOY 注:若要輸出小寫的boy,程序怎樣修改?若沒有#include “stdio.h” 會怎樣?Chap3 控制結構控制結構函數參數可以是轉義字符例:putchar(n);輸出換行符putchar(101);輸出字符 Aputchar(); 輸出單引號 putchar(012); 輸出換行符putchar(015); 輸出回車.不換行,光標到本行首Cha

7、p3 控制結構控制結構形式:int getchar(void)作用:從stdin(鍵盤)輸入一個字符,同時有回顯。 函數無參數,返回接收到的輸入字符原型定義:stdio.h 常用用法:變量變量=getchar();Chap3 控制結構控制結構#include stdio.hvoid main() char c; c = getchar(); putchar(c);putchar(getchar();輸出(如在鍵盤上輸入“a”):aaChap3 控制結構控制結構1. 格式輸出函數格式輸出函數printf()作用:按指定的格式輸出指定數據一、 printf()的一般格式printf(格式控制,輸出

8、列表);例: int i = 3;double f = 4.56;printf(i = %d, f = %lfn, i,f); Chap3 控制結構控制結構1. 格式控制:控制按指定格式輸出后面的參數。以“”括起。格式控制組成:格式控制組成:普通字符普通字符(不含(不含%的字符),原樣輸出(可為轉義字符)的字符),原樣輸出(可為轉義字符)格式說明符格式說明符(%格式字符),控制輸出數據的格式。格式字符),控制輸出數據的格式。2. 輸出表列:需要輸出的數據,以,分隔。可為常、變量、表達式、函數,受格式控制中格式符的控制。也可以沒有輸出表列,如:l printf(“NametAddtTeln”);

9、Chap3 控制結構控制結構二、格式字符1. d格式符:按十進制有符號數格式輸出格式符:按十進制有符號數格式輸出d按int型數據實際長度輸出 %md 按m指定的寬度輸出(不足補空格,大于m位時按實際長度輸出),右對齊 %ld,%mld 輸出long int 型數據,m指定輸出寬度 %hd,%mhd輸出short int型數據%0md,%0mld,%0mhd 0(數字0)表示位數不足m時補0 %-md,%-mld 左對齊輸出,右邊補空格 注:%后面的m(位數控制)、0(位數不足補0)對于其他格式符也適用。 Chap3 控制結構控制結構例:(表示空格)int i = 123;long j = 12

10、3456;printf(%d%5d%05d,%ld%8ld%08ld,i,i,i,j,j,j);結果:12312300123, 12345612345600123456 強調:對long型數據要用%ld輸出,若用%d可能會發生錯誤。 同理,short int 數據要用%hdChap3 控制結構控制結構2. o(字母字母)格式符:格式符:按八進制無符號數的格式輸出。按八進制無符號數的格式輸出。符號位作為數一并輸出。 例:short int a=-1; printf(“a=%hd,%hon”,a,a);結果:a=-1,1777773、x格式符:按十六進制無符號數格式輸出格式符:按十六進制無符號數格

11、式輸出int型數型數。4、u格式符:以無符號十進制形式輸出整數格式符:以無符號十進制形式輸出整數對long int數據都需要附加l,對short int 需要附加h如 %lo , %10hx , %-10loChap3 控制結構控制結構5、c格式符:格式符:以字符形式輸出。例:char c=101;printf(%c,c);也可以使用:%mc、%-mc Chap3 控制結構控制結構6、s格式符:格式符:以字符串格式輸出。%s例:printf(%s,CHINA); %ms m指定寬度(不足時左補空格,大于時按實際寬度輸出),右對齊 %-ms 左對齊,不足m時右補空格 %m.ns 輸出占m列,取字

12、符串左端n個字符,左補空格 %-m.ns 同上,n個字符輸出,占m列,右補空格 Chap3 控制結構控制結構7、f格式符:格式符:按小數格式輸出實數。printf(%0.3f,123.45678); 顯示 123.457%f按小數格式輸出,整數部分全輸出,6位小數%m.nf輸出占m列(含小數點),其中n位小數(四舍五入)%-m.nf同上,左對齊%lf用于double型數據Chap3 控制結構控制結構%e 指數形式輸出實數,尾數保留6位小數 。 %m.ne n指保留尾數部分小數位數,右對齊 %-m.ne 左對齊 %ledouble a=-1.1e300;printf(a=%le,sizeof=%

13、dn,a,sizeof(a);輸出:a=-1.100000e+300,sizeof=8Chap3 控制結構控制結構一、一般格式作用:按規定格式輸入形式:int scanf(格式控制格式控制,地址列表,地址列表)原型定義:stdio.h將鍵盤輸入的數據按指定的格式接收、轉換后,送到相應的地址中。 Chap3 控制結構控制結構#include stdio.h void main() int a,b,c; scanf(%d%d%d,&a,&b,&c); printf(%d,%o,%xn,a,b,c); 運行時輸入:101112 程序輸出:10,13,cChap3 控制結構控制結構二、格式說明與pri

14、ntf()的格式控制類似格式字符說明d 用于輸入十進制數o用于輸入八進制數x用于輸入十六進制數c用于接收單個字符s接收字符串認為空格是結束符f用于輸入實數(小數或指數均可接收)e與f相同附加格式說明符l用于long(%ld)和double(%lf)型數據h用于短整型數據(%hd、%ho、%hx)域寬(一個正整數)指定輸入所占寬度*表示對應輸入量不賦給一個變量Chap3 控制結構控制結構1. 可以指定輸入數據的列數,系統自動按它截取所需數據。例:例:scanf(%2d%3d,&a,&b);輸入輸入 123456 系統自動將系統自動將12賦給賦給a,345賦給賦給b。2. *格式用于跳過一個數據域

15、scanf(%2d%*3d%2d,&a,&b);輸入:輸入:1234567 結果,結果,a=12,345被跳過,被跳過,b=67。*主要用于利用現有數據時,跳過某些數據項。主要用于利用現有數據時,跳過某些數據項。3. 輸入實數不能規定精度如:如:scanf(%7.2f,&a);Chap3 控制結構控制結構1、sacnf()中的變量必須使用地址。int a, b;scanf(“%d,%d”,a,b);錯誤 scanf(“%d,%d”,&a,&b);正確正確2、scanf()的“格式控制”中,可以使用普通字符,但在輸入時必須輸入這些字符,成為 數據輸入時的分隔符。例:例:scanf(%d,%d,&

16、a,&b);輸入:輸入: 3,4 (逗號與(逗號與%d,%d中的逗號對應)中的逗號對應)Chap3 控制結構控制結構例:scanf(%d%d,&a,&b);輸入:34 (兩個或以上空格)例:scanf(%d:%d:%d,&h, &m, &s);輸入: 12:23:36 (與格式控制中的冒號對應)例:scanf(a=%d,b=%d,c=%d,&a,&b,&c);輸入:a=12,b=24,c=36 (a=,b=,c=及逗號與格式控制相對應)Chap3 控制結構控制結構3、在用“%c”輸入時,空格、回車、TAB等均作為有效字符被接收。例:例:scanf(%c%c%c,&c1,&c2,&c3);輸入:

17、輸入:abc 結果:結果:ac1,c2,bc3 (其余被丟棄其余被丟棄)若輸入:若輸入:123ab結果:結果:1c1,2c2,3c3 Chap3 控制結構控制結構4、輸入數據時,遇以下情況結束一個數據的輸入:(不是結束該scanf函數)。 遇空格、遇空格、“回車回車”、“跳格跳格”鍵或用戶指定的分鍵或用戶指定的分隔符。隔符。 遇寬度結束。遇寬度結束。 遇非法輸入。遇非法輸入。Chap3 控制結構控制結構5、注意%c與%d混合使用時的問題。例:scanf(“%c%d%c”,&a,&b,&c);執行: a12c 結果:a=a,b=12,c=c a12c 結果:a=a,b=12,c= 6、數據類型與

18、格式符匹配使用%f %lf 用于實型%d %o %x 用于整型%c 用于字符型Chap3 控制結構控制結構1. scanf函數變量名前沒有&會怎樣?編譯器會報錯嗎?2. a=getchar() 與 scanf(%c,&a) 的異同3. 怎樣設計scanf使得輸入數據時減少出錯? Chap3 控制結構控制結構程序需要進行比較與邏輯判斷,根據判斷結果決定不同的操作。確定判斷的條件確定判斷的條件確定判斷結果為確定判斷結果為“真真”或或“假假”時執行的不同時執行的不同操作操作 Chap3 控制結構控制結構關系運算:也稱比較運算,比較兩個運算對象的大小。關系表達式:關系運算符連接的式子,關系表達式可能結

19、果有:“真”(true)和“假”(false)。例:a 3、a=3、a!=3Chap3 控制結構控制結構 小于優先級相同(高)大于=大于等于=等于優先級相同(低)!=不等于Chap3 控制結構控制結構中的邏輯值: (假)(真)關系表達式: 用關系運算符連接的表達式。關系表達式的值: 0、1 與int 型等效例:若a=3, b=2, c=1, 則: ab 真,表達式的值為1(ab) = = c真,表達式的值為1b+cb d的值等于1f = abc f的值等于0 注意:數學式abc應寫為ab&bcChap3 控制結構控制結構右結合雙目運算符右結合雙目運算符優先級優先級例:例:ca+b 等效于等效于

20、c(a+b) ab!=c 等效于等效于(ab)!=c a=bc 等效于等效于a=(bc 等效于等效于a=(bc) Chap3 控制結構控制結構1. 邏輯運算符及其優先次序 &邏輯與“雙目運算符”:要求兩個操作數,如:(ab) & (xy) |邏輯或!邏輯非單目運算符,要求一個操作數,如:!(ab) 優先級:優先級:! ! 高于高于 & & 高于高于 | | Chap3 控制結構控制結構1&1=11&0=00&1=00&0=01|1=11|0=10|1=10|0=0!1=0!0=1邏輯運算規則表邏輯運算規則表混合運算:混合運算:!a&b=c|x!a&b=c|x* *2y+3&c+2y+3&c+按

21、右圖優先級運算。按右圖優先級運算。Chap3 控制結構控制結構用邏輯運算符將關系表達式或邏輯量連接起來。在C中,參與邏輯運算的數據可為任意類型,非0即為真,0為假。例:a+b|c值為1 a&0值為0 53&2|83)&(b=a=b)&(b=31)后 a的值為1,b的值為0應用:常直接用邏輯表達式構造條件。例如閏年條件:(y % 4 = = 0 & y % 100 != 0 )|( y % 400 = = 0 )Chap3 控制結構控制結構條件條件語句塊語句塊1語句塊語句塊2exprstatement1statement2非非0=03.2.1 if語句1. if-else分支if if (表達式

22、)(表達式) 語句塊語句塊1 1;else else 語句塊語句塊2 2;Chap3 控制結構控制結構例3- 6 輸入一個字符,判斷它是否為英文小寫字母。#include void main() char c; printf(Please input a character:); c=getchar(); if(c=a&c=60) printf(Passedn);else printf(Failedn); printf(You must take this course againn); 變量變量score的值大于的值大于60時,程序將輸出:時,程序將輸出:PassedYou must tak

23、e this course againChap3 控制結構控制結構(3)ifelse語句執行完畢后執行ifelse的后續語句。系統將整個ifelse結構處理為一條語句單元。Chap3 控制結構控制結構if (表達式) 語句; exprstatement非非0=0條件條件語句語句1Chap3 控制結構控制結構#includevoid main() int a,b,c,t; scanf(%d%d%d,&a,&b,&c); if(ab) t=a;a=b;b=t; /*變量a與b互換,t為中間變量*/ if(ac) t=a;a=c;c=t; if(bc) t=b;b=c;c=t; printf(%d,

24、%d,%dn,a,b,c); Chap3 控制結構控制結構例3- 8 設計一個加法計算訓練程序,由機器隨機產生兩個整數,讓用戶計算兩數之和,若用戶計算正確則打印“Right”,否則打印“Wrong”。#includevoid main() int a,b,s; a=rand(); /*rand()是庫函數,隨機產生一個0-32767之間的數*/ b=rand(); printf(%d+%d=,a,b); scanf(%d,&s); /*用戶輸入結果*/ if(s=a+b) /*計算機判斷用戶結果是否正確*/ printf(Rightn); else printf(Wrongn); Chap3

25、控制結構控制結構多條語句為內嵌時忘記用多條語句為內嵌時忘記用 括起來。括起來。在在if(表達式表達式)之后多加一個分號。之后多加一個分號。比較運算符比較運算符“=”與賦值運算符與賦值運算符“=”混淆使用。最混淆使用。最常見的錯誤為:常見的錯誤為:if(if(x x=1=1) ) 誤寫為:誤寫為:if(if(x x=1=1) ) 無論x的原值是什么,賦值表達式x=1的值總為1,其作為條件時恒為真。Chap3 控制結構控制結構if (表達式1) 語句1;elseIf (表達式2) 語句2;elseIf (表達式3) 語句3elseif (表達式m) 語句melse 語句n條件條件語句語句1條件條件

26、2語句語句2語句語句3條件條件3Chap3 控制結構控制結構Chap3 控制結構控制結構應用多分支結構編寫此程序,根據用戶輸入的自變量x的值,計算y的值 。)60()6030()300()0(0)(32xxxxxxxxfyChap3 控制結構控制結構void main() float x; printf(please input x:); scanf(%f,&x); if(x0.0) printf(y=0n); else if(x=30) printf(y=%fn,x); else if(x=60) printf(y=%fn,x*x); else printf(y=%fn,x*x*x);Cha

27、p3 控制結構控制結構條件語句1語句2條件語句1條件語句1條件2語句2語句3條件3Chap3 控制結構控制結構條件語句1語句2條件語句1條件語句組語句組條件條件語句組語句組語句組語句組語句組語句組Chap3 控制結構控制結構if(條件表達式條件表達式1) if(條件表達式條件表達式2) 程序塊程序塊1; else 程序塊程序塊2;else if(條件表達式條件表達式3) 程序塊程序塊3; else 程序塊程序塊4;ifelse的內嵌程序塊中又包含一個或多個ifelse語句稱為if語句的嵌套,常用于實現多路選擇。 Chap3 控制結構控制結構嵌套嵌套if語句時,必須特別注意語句時,必須特別注意i

28、f與與else配對。配對。配對原則:從最內層開始,配對原則:從最內層開始,else總是與它上面最總是與它上面最接近的(未曾配對的)接近的(未曾配對的)if配對。配對。避免避免if與與else配對錯位的最佳辦法是加大括號,同配對錯位的最佳辦法是加大括號,同時,為了便于閱讀,使用適當的縮進,(只有大時,為了便于閱讀,使用適當的縮進,(只有大括號能保證括號能保證if和和else不錯位配對,縮進僅便于閱讀)不錯位配對,縮進僅便于閱讀)Chap3 控制結構控制結構例:例: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);修改:修改: if (a

29、=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);實現實現 if else 正確配對方法:加正確配對方法:加 Chap3 控制結構控制結構if (p1) if (p2) 語句A;else if (p3)語句B; else 語句C;語句D;比較差異:if (p1)if (p2) 語句A;else if (p3)語句B; else 語句C;語句D;Chap3 控制結構控制結構#include void main() int a,b,c,max; printf(please input three numbers:n); scanf(%d%d%d,&a

30、,&b,&c); max=a; if(cb) if(ca) max=c; else if(ba) max=b; printf(the max is %dn,max);max=a;if(cb) if(ca) max=c; else if(ba) max=b; printf(the max is %dn,max);運行時:運行時:please input three numbers:輸入:輸入:2 5 3輸出:輸出:the max is 2Chap3 控制結構控制結構(1)相配對的if與else書寫于同一列上, 內嵌語句縮格書寫,以表明層次結構。(2)if語句多重嵌套實現多路選擇時,應盡可能的在e

31、lse中分支,即在else中嵌套另一個if語句,而不要在if中嵌套。(3)具體實現時,每一個 if的條件為真時只有唯一的一種情況,而將剩余的各路選擇放在else中一次次細分。Chap3 控制結構控制結構在if語句中,在“表達式”為“真”和“假”時,都只執行一個賦值語句給同一個變量賦值,例如:if (ab) max = a;else max = b;可以用如下賦值語句來處理:max = (ab) ? a : b;條件運算符要求有三個操作對象,稱為“三目運算符”(它是C語言中唯一的一個三目運算符)。 Chap3 控制結構控制結構條件表達式的一般形式: 表達式1?表達式2:表達式3說明:1執行順序:

32、先求解表達式先求解表達式1的值,的值,若其為真,求解表達式若其為真,求解表達式2的值,做為整個條件表達式的的值,做為整個條件表達式的值;值;若表達式若表達式1為假,則求解表達式為假,則求解表達式3的值,的值, 且整個條件表達且整個條件表達式的值等于表達式式的值等于表達式3。max = (ab)?a:b 把條件表達式的值賦給max。 Chap3 控制結構控制結構2優先級:高于賦值運算符,低于算術運算符、關系運算符和邏輯運算。max = (ab)?a:b max = ab?a:bab?a:b+1 (ab)?a:(b+1)3結合性:右結合。ab?a:cd?c:d (ab)?a:(cd?c:d)4if

33、else與條件表達式的替代:if (ab) printf(%d,a);else printf(%d,b); 替代:printf(%d,ab?a:b); Chap3 控制結構控制結構5表達式1、表達式2、表達式3的類型可以不同。6可以嵌套。max=(ab?a:b)c? (ab?a:b):c例:P48 例3-13,大小寫轉換。(read)if(ch=a&ch=z&ch=z)?32:0Chap3 控制結構控制結構其一般形式:switch(表達式) case 常量表達式1:語句1;break; case 常量表達式2:語句2;break; case 常量表達式n:語句n;break; default:

34、語句n+1 不能省不能省各常量值必須不相等各常量值必須不相等breakbreak用于跳出用于跳出switchswitchChap3 控制結構控制結構grade=getchar();switch (grade) case A:printf(“90100n); case B:printf(7589n); case C:printf(6074n); case D:printf(60n); default: printf(errorn); 如果輸入A,回車,輸出?當當grade=Agrade=A時,程序從時,程序從printf(“90printf(“90100n)100n)開開始執行,因此輸出結果為:

35、始執行,因此輸出結果為: 90100 7589 6074 60n); break; 7、case后面必須是整形常量或字符型常量。后面必須是整形常量或字符型常量。 Chap3 控制結構控制結構#include void main() char c1,c2; printf(please input the score:); scanf(%c%c,&c1,&c2);Chap3 控制結構控制結構switch(c1)switch(c1) case 5: switch(c2) case 5: switch(c2) case +: printf(100n); break; case +: printf(10

36、0n); break; case n: printf(90n); break; case n: printf(90n); break; case -: printf(85n); break; case -: printf(85n); break; break; break; case 4: switch(c2) case 4: switch(c2) case +: printf(80n); break; case +: printf(80n); break; case n: printf(75n); break; case n: printf(75n); break; case -: prin

37、tf(70n); break; case -: printf(70n); break; break; break; case 3: printf(60n); break; case 3: printf(60n); break; case 2: case 2: case 1: printf case 1: printf(60n); break;(60n); break; Chap3 控制結構控制結構在一個算法中,某些步驟需要反復多次地執行時,需要設計一個循環。循環是在給定循環條件為真時由計算機重復執行一組循環體語句的控制結構 。循環結構是結構化程序三種基本結構之一。構建循環讓計算機反復執行一組操

38、作語句,從而完成大量類同的計算。 Chap3 控制結構控制結構根據開始循環的初始條件和結束循環的條件不同,C語言中用如下語句實現循環1、用、用while語句。語句。2、用、用do-while語句。語句。3、用、用for語句。語句。 Chap3 控制結構控制結構一般形式:while(表達式表達式) 循環體語句;循環體語句;作用:實現“當型”循環。當“表達式”為非0(真)時,執行“循環體語句”,其后回到循環開始while處再次判斷表達式真假,直至表達式為假,結束循環,執行while后續。特點:循環體只能是一條語句。若有多條語句,使用循環體只能是一條語句。若有多條語句,使用 使之成使之成為復合語句。

39、為復合語句。表達式一般是關系或邏輯表達式。當然,在表達式一般是關系或邏輯表達式。當然,在C中也可以為中也可以為任意類型表達式。任意類型表達式。Chap3 控制結構控制結構表達式循環體假真當表達式的值為真循環體Chap3 控制結構控制結構例例3-16 求求 void main()int i,n,sum=0; i = 1; printf(“please input:”); scanf(“%d”,&n); while (i 0); printf(“s=%dn”,s);nii1Chap3 控制結構控制結構#include#includevoid main() int y,i; double x,z;

40、printf(Please input x and y:); scanf(%lf%d,&x,&y); z=1;i=1; do z*=x; i+; while(i=fabs(y);if(y0) z=1/z; printf(result=%lfn,z); 循環條件一開始為假,循環執行一次循環條件一開始為假,循環執行一次。Chap3 控制結構控制結構while和和do-while是可以互換的。是可以互換的。在一般情況下,用在一般情況下,用while和和do-while語句解決同語句解決同一問題時,若二者的循環體部分是一樣的,它們一問題時,若二者的循環體部分是一樣的,它們的結果也一樣。的結果也一樣。但

41、當循環條件一開始就為但當循環條件一開始就為“假假”時,兩種循環的時,兩種循環的結果不同。這是因為此時結果不同。這是因為此時while循環的循環不被循環的循環不被執行,而執行,而do-while循環的循環體被執行一次。循環的循環體被執行一次。Chap3 控制結構控制結構#include#includevoid main() int y,i; double x,z; printf(Please input x and y:); scanf(%lf%d,&x,&y); z=1;i=1; if(y!=0) do z*=x; i+; while(i=fabs(y);if(y0) z=1/z;printf

42、(result=%lfn,z);Chap3 控制結構控制結構for(表達式(表達式1;表達式;表達式2;表達式;表達式3) 循環體語句;循環體語句; 執行過程:(1)求表達式)求表達式1;(2)求表達式)求表達式2,若為,若為“真真”,執行,執行“循環語句循環語句”;若為假,;若為假,轉第(轉第(5)步。)步。(3)求表達式)求表達式3。(4)轉第()轉第(2)步。)步。(5)執行)執行for語句下面的語句。語句下面的語句。 Chap3 控制結構控制結構計算表達式1循環體計算表達式3表達式2真假循環體當表達式2為真計算表達式1的值計算表達式3的值Chap3 控制結構控制結構#includevo

43、id main() int i,sum; for(i=1,sum=0;i=100;i+) sum+=i; printf(sum=%dn,sum);Chap3 控制結構控制結構for語句中:“表達式表達式1”循環變量初始化循環變量初始化“表達式表達式2”判別循環條件判別循環條件“表達式表達式3”循環控制變量更新循環控制變量更新例:for(sum=0,i=1;i=100;i+) sum = sum + i;這里,循環條件由變量i設定,變量i稱為“循環變量”。 Chap3 控制結構控制結構(1) 表達式1和表達式3經常是逗號表達式,可以分別或同時省略。for語句省略“表達式1”。“表達式1”的作用是

44、設定循環初始條件,“表達式1”省略后,應在for語句前面設置循環初始條件。例:i=1;for(;i=100;i+) sum = sum + i;/* 注意,“表達式1”后面的分號不能省略 */Chap3 控制結構控制結構for語句省略“表達式3”。表達式3用于修改控制循環條件(修正循環變量的值),若省略,應在循環體語句中增加修改循環變量值的語句,以保證循環能正常結束。例:for (sum=0,i=1;i=100;) sum = sum + i;i+; Chap3 控制結構控制結構同時省略“表達式1”和“表達式3”,只有“表達式2”。例:i=1;sum=0;for(;i=100;) sum+=i

45、; i+; i=1;sum=0;for(;i=100;) sum+=i+;Chap3 控制結構控制結構(2) 表達式2是循環條件。如果省略“表達式2(循環條件)”,則不判別循環條件,認為循環循環條件始終為“真”,循環將無終止地進行下去。for(i=1,sum=0; ;i+) sum+=i;相當于:for(i=1,sum=0; 1 ; i+) sum+=i;(3)循環體只能是一條語句,循環體只能是一條語句,若包含多條語句,應用 括起來。Chap3 控制結構控制結構(4 4)forfor語句的其他變形語句的其他變形例1: for(sum=0,i=1;i100) break; (5)5)各表達式可為

46、逗號表達式各表達式可為逗號表達式 for(i=0,j=100; i=j; i+,j-) k = i + j; Chap3 控制結構控制結構用for語句計算x的y次方,y為整數。x與y的值都由鍵盤輸入。 void main() int y,i; double x,z; printf(Please input x and y:); scanf(%lf%d,&x,&y); for(z=1,i=1;i=fabs(y);i+) z*=x; if(y0) z=1/z; printf(result=%lfn,z); Chap3 控制結構控制結構例3- 20 歌手大獎賽,有裁判12人。編寫計算歌手得分程序,鍵

47、盤輸入12個成績,輸出最高分、最低分與最終得分。#define N 12void main() int i; float score,max,min,sum,aver; scanf(%f,&score); max=min=sum=score; for(i=1;imax) max=score; if(scoremin) min=score; sum+=score; aver=(sum-max-min)/(N-2); printf(max=%6.2f,min=%6.2f,average=%6.2fn,max,min,aver); Chap3 控制結構控制結構循環嵌套:循環嵌套:一個循環(稱為“外循

48、環”)的循環體內包含另一個循環(稱為“內循環”)。內循環中還可以包含循環,形成多層循環。(循環嵌套的層數理論上無限制)。三種循環(while、do-while、for)可以互相嵌套。多重循環的使用與單一循環完全相同,但應特別注意內、外層循環條件的變化。內、外層循環變量賦初值的位置、變量名的使用等。注意:外循環必須完整地包含內循環。do while( ) for( ; ; ) do while( ); while( );Chap3 控制結構控制結構void main()long s=0,k; int i,n,j; scanf(“%d”,&n); for(i=1;i=n;i+) k=1; for(

49、j=1;j=i;j+)k*=j; s+=k; printf(“s=%ldn”,s); void main()long s=0,k; int i,n,j; k=1; scanf(“%d”,&n); for(i=1;i=n;i+) for(j=1;j=i;j+)k*=j; s+=k; printf(“s=%ldn”,s); 求求1! + 1!*2! + + 1!*2!*n! Chap3 控制結構控制結構void main()void main()long s=0,k;long s=0,k; int i,n int i,n; ; scanf(“%d”,&n scanf(“%d”,&n);); for

50、(i=1,k=1;i=n;i for(i=1,k=1;i=n;i+)+)kk* *=i;=i; s+=k; s+=k; printf(“s=%ldn”,sprintf(“s=%ldn”,s);); Chap3 控制結構控制結構例3- 21 打印九九乘法表。例3- 22 編程輸出如下圖形: 1 222 33333 4444444 555555555Chap3 控制結構控制結構1. break語句語句 在while、for、do-while或switch結構中使用,可使程序立即退出該結構,轉而執行該結構后的第一條語句。注:break只可跳出所在的一重循環。在多重循環中使用,只能跳出其所在的內層循環

51、。Chap3 控制結構控制結構A;While(p1) B; for(C;p2;D) E; if(p3) break; F; G;H;Chap3 控制結構控制結構#includevoid main() int i,sum; for(sum=0,i=1;i+) sum+=i; if(sum1000) break; printf(n=%dn,i-1); #includevoid main() int sum=1,i; for(i=1;sum1000;i+) sum+=i; printf(i=%dn,i-2); Chap3 控制結構控制結構作用:提前結束本次循環體的執行,回到循環的起始處,接著進行下一

52、次循環條件的判別。說明:1.對于對于while,continue是回到是回到while處再次判斷處再次判斷條件,根據條件決定是否進行下一次循環;條件,根據條件決定是否進行下一次循環;2.對對do-while,回到,回到do處,重新執行循環體語句,處,重新執行循環體語句,并不判別循環條件。并不判別循環條件。3.對對for,來到表達式,來到表達式3處,執行表達式處,執行表達式3后再判斷后再判斷表達式表達式2。Chap3 控制結構控制結構While(p1) A; if(p2) continue; doif(p3) continue;B; while(p4); for(C;p5;D) if(p6) c

53、ontinue else break; E;Chap3 控制結構控制結構void main() int n; for (n=100; n=200; n+) if (n%3 = 0) continue;printf(%5d,n); void main() int n; for (n=100; n=60)。輸入時以負數作為輸入的結束。)。輸入時以負數作為輸入的結束。 void main() int s=1; while(s=0) scanf(%d,&s); if(s60)continue; printf(%d ,s); printf(n);Chap3 控制結構控制結構1. 注意各自的功能while

54、 (表達式1) while (表達式1) if (表達式2) if (表達式2) break; continue; break語句跳出循環 continue語句結束本次循環體的執行,進入下一次循環 2. 都不能單獨使用。 break只能用于循環與switch控制結構中,continue只能用于循環控制結構中。Chap3 控制結構控制結構一般形式:goto 語句標號功能:無條件轉向功能:無條件轉向“語句標號語句標號”處執行。處執行。語句標號為一個標識符,放在語句前面,用語句標號為一個標識符,放在語句前面,用:與與語句分隔。語句分隔。goto語句引起一個無條件的轉移,會破壞其他控制結構,不符合結構

55、化程序設計原則,破壞了程序結構的清晰,因此,一般應避免使用goto語句語句。 Chap3 控制結構控制結構#include void main() int i,s=0; scanf(%d,&i); if(i100) printf(Error); goto end; start: /* 語句標號 */ if(i=100) s+=i+; goto start; printf(s=%d,s); end: printf(n); /* 帶語句標號的語句 */Chap3 控制結構控制結構3.4.1 循環設計循環設計循環是在循環條件為真時反復執行的一組計算機指令,是計算機解題的一個重要結構。循環控制有兩種基

56、本方法:計數法和標志法。1. 計數器控制的循環事先準確地知道循環次數,因此設計一個循環控制變量,由變量值來控制循環次數。每循環一次,循環變量的值會遞增(增值通常為1或-1),當其值達到終值時結束循環。Chap3 控制結構控制結構2. 標志控制的循環事先不知道準確的循環次數,由某一目標值標記循環的結束。C語言程序所需的任何控制形式可以用下面三種控制結構完成:順序結構、if結構、while結構。 Chap3 控制結構控制結構程序設計的首要工作是算法設計,離開了算法也就沒有了程序。算法,是指完成某一項工作而采取的方法和步驟,具體到程序設計,是對解題過程的準確而完整的描述,并用一種程序設計語言的來實現

57、。循環主要用來解決程序設計中兩類基本的算法:窮舉和迭代。 Chap3 控制結構控制結構窮舉的基本思想是對問題的所有可能狀態一一測試,直到找到解或將全部可能狀態都測試過為止。窮舉是一種重復型算法,其核心是設計循環,在循環體中依次測試。例例0:最大公因數:最大公因數例例1:百錢百雞:百錢百雞例例2:最值問題。輸入十個數,輸出其中最大、平均值。:最值問題。輸入十個數,輸出其中最大、平均值。例例3:素數問題。判斷:素數問題。判斷x是不是素數。是不是素數。例例3-30例例4:輸出:輸出100-1000之間所有素數,每行輸出之間所有素數,每行輸出5個。個。例例5:韓信點兵:韓信點兵Chap3 控制結構控制

58、結構Chap3 控制結構控制結構韓信有一隊兵,他想知道有多少人,便讓士兵排隊報數。按1-5報數最后一人報1;按1-6報數末一人報5;按1-7報數最后一人報4;按1-11報數最末一人報10。韓信有多少兵?思考:設士兵數為x,滿足以下關系式:x%5=1 & x%6=5 & x%7=4 & x%11=10用窮舉法對x從1開始測試,直到找到滿足關系式的xChap3 控制結構控制結構按照特定規律和方法,不斷用新值取代變量的舊值,或由舊值遞推出變量新值,直至問題解決為止,這種解決問題的方法為迭代。迭代的關鍵因素是:迭代初值、迭代公式和迭代次數(精度要求)。例例0:最大公因數:最大公因數例例1:輸出:輸出Fibonacci數列前數列前20項。項。例例2:牛頓迭代法解方程:牛頓迭代法解方程2x3-4x2+3x-6=0在在1.5附近附近的根的根迭代公式:迭代公式: xk+1=xk-f(x)/f(x) Chap3 控制結構控制結構x0X0,f(x0)xx=x-f(x0)/f(x0)f(x)牛頓迭代法牛頓迭代法x0Chap3 控制結

溫馨提示

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

評論

0/150

提交評論