第3章C程序的基本控制結構_第1頁
第3章C程序的基本控制結構_第2頁
第3章C程序的基本控制結構_第3頁
第3章C程序的基本控制結構_第4頁
第3章C程序的基本控制結構_第5頁
已閱讀5頁,還剩101頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、13.1 3.1 順序結構順序結構3.2 3.2 選擇結構選擇結構3.3 3.3 循環(huán)結構循環(huán)結構23.1.1 程序控制基本結構程序控制基本結構PAB真真假假 選選 擇擇 結結 構構 AB 順順 序序 結結 構構 PA假假真真 循循 環(huán)環(huán) 結結 構構 程序設計語言的三種基本控制結構: 順序、選擇、循環(huán)順序、選擇、循環(huán)。 3基本控制結構的特點:(1)整個結構只有一個入口和一個出口;(2)一個完整的結構可以嵌套在另外一個結構中,充當該結構的一個組成部分;(3)結構中的所有組成部分都應該能夠被執(zhí)行。4BA圖圖3.1 3.1 順序結構執(zhí)行流程順序結構執(zhí)行流程 順序結構是最基本的控制結構,是由一組順序執(zhí)

2、行的程序塊所組成。程序流程圖如下所示。3.1.2 順序結構順序結構5 順序結構是最基本的控制結構,是由一組順序執(zhí)行的程序塊所組成。而最簡單的程序塊又是有若干語句所構成。 3.1.3 C程序的語句程序的語句 C C語言的語句可分為以下四類:語言的語句可分為以下四類:(1)(1)簡單語句簡單語句(2)(2)空語句空語句(3)(3)復合語句復合語句(4)(4)流程控制語句流程控制語句61.1.表達式語句表達式語句: : 由一個表達式加上一個分號構成。由一個表達式加上一個分號構成。如:如:A+; A+; x=1; x=1; p+=q p+=q* *4+5; 4+5; y=42?6:1; y=42?6:

3、1; 2.2.函數(shù)調用語句函數(shù)調用語句: : 由函數(shù)調用表達式加分號構成。由函數(shù)調用表達式加分號構成。 如:如:printf(“%d”,a); printf(“%d”,a); scanf(“%f”,&b);scanf(“%f”,&b);73.3.空語句空語句 由一個分號表示,一般形式為:由一個分號表示,一般形式為: ; 空語句在語法上是一條語句,但執(zhí)行時不做空語句在語法上是一條語句,但執(zhí)行時不做任何操作。任何操作。 例如:例如: while(getchar()!=n) ; 8 語句1; 語句n; 4.4.復合語句復合語句 用一對花括號,把若干條語句括起來,就用一對花括號,把若干

4、條語句括起來,就形成了一條復合語句。形式如下:形成了一條復合語句。形式如下:復合語句多用于流程控制語句中。復合語句多用于流程控制語句中??梢允强梢允?簡單語句、空語簡單語句、空語句、復合語句、流程控句、復合語句、流程控制語句制語句9例如,分析以下程序的執(zhí)行結果。例如,分析以下程序的執(zhí)行結果。void main() int a,b,temp; scanf(%d%d,&a,&b); temp=a; a=b; b=temp; printf(%d,%d,a,b); 輸入:輸入:14 8 輸出:輸出:8,1410一格式輸出函數(shù)一格式輸出函數(shù) printf( ) 簡介簡介 printf(

5、)用來按指定的格式輸出數(shù)據(jù),是內存與顯示器用來按指定的格式輸出數(shù)據(jù),是內存與顯示器之間進行數(shù)據(jù)交換的主要手段。之間進行數(shù)據(jù)交換的主要手段。其一般調用格式為:其一般調用格式為: printf(“printf(“格式控制字符串格式控制字符串”,輸出項目清單,輸出項目清單););例如,例如,int i=97;printf(“i=%d,%cn”, i, i );常量、變量常量、變量或表達式或表達式11格式控制字符串格式控制字符串 包括三類符號包括三類符號:1.1.普通字符:輸出時按原樣輸出,用于提示信息的輸出。普通字符:輸出時按原樣輸出,用于提示信息的輸出。2.2.轉義字符:指明特定的操作。轉義字符:

6、指明特定的操作。(詳見課本(詳見課本P15 P15 轉義字符表)轉義字符表) 常用的有常用的有: : n、t、a、” 等等。等等。 3.3.格式轉換說明符:按規(guī)定的格式輸出數(shù)據(jù)。格式轉換說明符:按規(guī)定的格式輸出數(shù)據(jù)。(詳見課本(詳見課本P34P34) 常用的有常用的有: : %d、%o、%x、%f、%c、%s、%等等。等等。12格式轉換說明符格式轉換說明符功功 能能%d (或或i) 以帶符號的十進制形式輸出整數(shù)以帶符號的十進制形式輸出整數(shù)%u 以無符號的十進制形式輸出整數(shù)以無符號的十進制形式輸出整數(shù)%o 以八進制無符號形式輸出整數(shù)以八進制無符號形式輸出整數(shù)%x (或或X) 以十六進制無符號形式

7、輸出整數(shù)以十六進制無符號形式輸出整數(shù)%f 以小數(shù)形式輸出浮點數(shù),隱含輸出以小數(shù)形式輸出浮點數(shù),隱含輸出6位小數(shù)位小數(shù)%e(或或E) 以指數(shù)形式以指數(shù)形式 -m.ddddde+nn 輸出浮點數(shù)輸出浮點數(shù)%c 輸出一個字符輸出一個字符%s 輸出字符串輸出字符串% 輸出百分號(輸出百分號(%) 13例如,分析以下程序段的輸出結果。例如,分析以下程序段的輸出結果。int a=12,b=25;floatx=12.5;printf(“a=%d,b=%dnx=%fn”,a,b,x);printf(“Hello!”);輸出結果:輸出結果: a=12, b=25 x=12.500000 Hello!14格式轉換

8、說明符的修飾:格式轉換說明符的修飾:(1 1)% m .n type% m .n type其中:其中:m m 規(guī)定輸出字段的最小寬度;規(guī)定輸出字段的最小寬度;n n 規(guī)定輸出最小有效位數(shù)。規(guī)定輸出最小有效位數(shù)。例例1 1:printf(“%3d,%6d,%6.5dn”,1234,1234,1234);printf(“%3d,%6d,%6.5dn”,1234,1234,1234); 輸出結果為:輸出結果為:1234, 1234, 01234例例2:printf(“%10f,%10.2f,%.2fn”,123.456,123.456,123.4); 輸出結果為:輸出結果為:123.456000,

9、123.46,123.4015注意注意: :如果在如果在“%”%”和和 m.n m.n 之間加一個之間加一個 0 0,則在規(guī)定字段寬,則在規(guī)定字段寬度度 內左邊多余的空位以內左邊多余的空位以 0 0 來填充,而不是空格。來填充,而不是空格。例例3:3: printf(“%04d,%010.2f,%010.3en”,125,12.3,123.5); 輸出結果為:輸出結果為:0125, 0000012.30, 001.24e+02(2) % l|htype(2) % l|htype l- l-代表輸出長整型或雙精度型數(shù)據(jù)的值。代表輸出長整型或雙精度型數(shù)據(jù)的值。 h-h-代表輸出短整型數(shù)據(jù)的值。代表

10、輸出短整型數(shù)據(jù)的值。例如,例如,printf(“%d,8ldn”,7000,70000l);printf(“%15.8lfn”,12.34567889);16思考:思考:printf(“%d,%u,%o,%xn”,-1,-1,-1,-1); 的輸出結果?的輸出結果?輸出結果為:輸出結果為:-1,65535,177777,ffff-1,65535,177777,ffff-1-1在計算機內存中的存儲形式:在計算機內存中的存儲形式:1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1按二進制補碼形式按二進制補碼形式17二、字符輸出函數(shù)二、字符輸出函數(shù)使用格式:使用格式:putchar( c

11、 )函數(shù)功能:向標準輸出設備輸出一個字符,并返回輸出字符函數(shù)功能:向標準輸出設備輸出一個字符,并返回輸出字符 的的ASCIIASCII值。值。例如:例如: # include main( ) int i=97; int ch=a; putchar(i); putchar(n); putchar(ch);程序輸出結果:程序輸出結果:a aa a參數(shù)可以是參數(shù)可以是字符型常量字符型常量、變量變量或或0 0 255255的整型常量的整型常量、變量變量181 1. 格式輸入函數(shù)格式輸入函數(shù) scanf( ) scanf( ) 簡介簡介 用來按用戶指定格式接收輸入數(shù)據(jù),是內存與顯示器進行數(shù)據(jù)交換的主要手

12、段。其一般調用形式為: scanf(“scanf(“格式控制字符串格式控制字符串”,”,輸入變量地址清單);輸入變量地址清單);例如,例如,scanf(“%d%d%f”, &a, &b, &x); 關于關于scanf( )scanf( )函數(shù)的幾點說明:函數(shù)的幾點說明: (1) (1) 格式控制字符串通常只包含格式轉換說明符,格式控制字符串通常只包含格式轉換說明符, 其形式和含義與其形式和含義與printf( ) printf( ) 類似。類似。 (2) (2) 輸入數(shù)據(jù)時,可以用輸入數(shù)據(jù)時,可以用“空格空格”、“tab tab 鍵鍵”、“回車鍵回車鍵”作為數(shù)據(jù)項之間的

13、分隔符。作為數(shù)據(jù)項之間的分隔符。19(3) (3) 格式控制字符串中,如果有其他字符,則在輸入時格式控制字符串中,如果有其他字符,則在輸入時 必須原樣照著輸入。必須原樣照著輸入。 例如,例如,scanf(“%d,%d”,&a,&b);scanf(“%d,%d”,&a,&b); (4) (4) 格式轉換說明符與輸入項在個數(shù)、類型上必須對應格式轉換說明符與輸入項在個數(shù)、類型上必須對應 一致,否則將不能正確輸入。一致,否則將不能正確輸入。 例如,例如,scanf(“%d%d”,&a,&b);scanf(“%d%d”,&a,&b); 若從

14、鍵盤輸入:若從鍵盤輸入:12.678 2612.678 26 則則 b b 不能得到正確結果。不能得到正確結果。 輸入形式必須是:輸入形式必須是:123123,23423420 2. 2.字符輸入函數(shù):字符輸入函數(shù):使用格式:使用格式:getchar( void )函數(shù)功能:從輸入設備上接收一個字符,并返回該字符函數(shù)功能:從輸入設備上接收一個字符,并返回該字符 的的ASCIIASCII值。值。例如:例如: # include main( ) int ch; ch=getchar( ); putchar(ch);運行該程序時輸入:運行該程序時輸入: a a 回車回車則執(zhí)行程序后輸出:則執(zhí)行程序后

15、輸出: a a 213.1.6 3.1.6 順序結構程序舉例順序結構程序舉例 例例3.1 輸入圓的半徑,輸出圓的周長和面積。輸入圓的半徑,輸出圓的周長和面積。分析:分析: 1. .定義實型變量r、l、s用于存放半徑、周長、面積;2.調用輸入函數(shù),輸入r:3.分別利用周長公式和面積公式求出l、s;4.調用輸出函數(shù)輸出l、s。22程序如下:程序如下:#include main() float r,l,s; scanf(“ %f ”,&r); l = 2 * 3.14159 * r; s = 3.14159 *r * r; printf(“n l=%.4f”,l); printf(“n s=

16、%.4f”,s); 文件包含預處理命令文件包含預處理命令變量定義變量定義輸入數(shù)據(jù)輸入數(shù)據(jù)輸出數(shù)據(jù)輸出數(shù)據(jù)23編程練習:編程練習: 已知三角形的三邊長,求三角形的面積。已知三角形的三邊長,求三角形的面積。分析:分析:定義三個變量定義三個變量a,b,c表示三角形三邊長;表示三角形三邊長;應用海倫公式求面積:應用海倫公式求面積: L=(a+b+c)/2; S=sqrt(L*(L-a)*(L-b)*(L-c)(1) (3) 輸出計算結果。輸出計算結果。24分析:分析:1.定義三個字符變量ch1,ch2,ch3;2.調用字符輸入函數(shù),接收鍵盤輸入的三個字符;3.按相反的順序輸出三個字符。例例3.2 3.

17、2 輸入三個字符,將它們反序輸出。輸入三個字符,將它們反序輸出。例如,輸入例如,輸入 a b c, a b c, 輸出輸出c b ac b a25程序如下:程序如下:#include main() char ch1, ch2,ch3; ch1=getchar(); ch2=getchar(); ch3=getchar(); putchar(ch3); putchar(ch2); putchar(ch1); 26分析:分析: 1.輸入小寫字母并存入變量a; 2.轉換成大寫 a=a-32; 3.輸出結果 a。例例3.3 3.3 從鍵盤輸入一個小寫字母,用大寫形式從鍵盤輸入一個小寫字母,用大寫形式

18、輸出該字母。輸出該字母。27#include “stdio.h”void main() char a; 程序如下:程序如下: printf(“Input a lowercase letter:”); a = getchar(); a = a-32; printf(“%c n”,a);28作業(yè):作業(yè): 完成完成實訓指導書實訓指導書P26 實驗部分的實驗部分的 【練習【練習1】【練習【練習3】。293.2 3.2 選擇結構程序設計選擇結構程序設計3.2.1 3.2.1 關系運算符與關系表達式關系運算符與關系表達式3.2.2 3.2.2 邏輯運算符與邏輯表達式邏輯運算符與邏輯表達式3.2.3 if3

19、.2.3 if語句語句3.2.4 3.2.4 條件表達式條件表達式3.2.5 switch3.2.5 switch語句語句3.2.6 3.2.6 程序舉例程序舉例30教學目的和基本要求:教學目的和基本要求:要求學生掌握選擇結構程序設計,嵌套程序設計,學會運用if語句及switch語句。 教學重點:教學重點:if語句、嵌套程序。 31很多問題是順序結構解決不了的。例如:計算分段函數(shù):x在大于等于0和小于0兩種不同的情況時,函數(shù)將用不同的表達式來求y的值,這時就需要在計算y的值之前,先對x的值進行判斷,C語言中用選擇語句來實現(xiàn)這一判斷。算法N-S圖如右上圖所示。x0 x0Y YN Ny=3-xy=

20、3-xy=2xy=2xN-S圖32 1 1、6 6種關系運算符:種關系運算符: = = != = = != 2 2、關系表達式:用關系運算符將表達式連接起來的式子、關系表達式:用關系運算符將表達式連接起來的式子 優(yōu)先級:優(yōu)先級: 結合性:結合性:自左至右自左至右; 表達式的值:表達式的值: 若為真,則結果為若為真,則結果為1 1; 若為假,則結果為若為假,則結果為0 0。35 35 的值:的值:3+433+43* *4 4 的值:的值:3+(43)3+(43)* *4 4 的值:的值: 3.2.1 3.2.1 關系運算符和關系表達式關系運算符和關系表達式( (參見課本參見課本P44 4.1P4

21、4 4.1節(jié)節(jié)) )例如,求如下關系表達式的值:例如,求如下關系表達式的值:01333注意:注意: 不能用數(shù)學里習慣的關系運算符連用表示區(qū)間不能用數(shù)學里習慣的關系運算符連用表示區(qū)間關系!關系!例如例如:(1)(1)設設x=1; x=1; 表達式表達式 2x4 2x4 的值為:的值為: (2)(2)設設x=3x=3; 表達式表達式 2x4 2x & & | 結合性:結合性:自左至右自左至右; 表達式的值:表達式的值: 若為真,則結果為若為真,則結果為1 1; 若為假,則結果為若為假,則結果為0 0。 3.2.2 3.2.2 邏輯運算符和邏輯表達式邏輯運算符和邏輯表達式 ( (參見

22、課本參見課本P45 4.2P45 4.2節(jié)節(jié)) ) 1 1、3 3種邏輯運算符:種邏輯運算符: & & (與)(與) | | (或)(或) ! !(非)(非) 邏輯量可以是整型、實型、字符型和指針類型,邏輯量可以是整型、實型、字符型和指針類型,其中,其中,0 0,0.00.0,0,NULL0,NULL代表代表假假,其余邏輯量代表,其余邏輯量代表真真。35例:例: 已知,已知,int a=5; float b=3.5;判斷以下表達式的值:判斷以下表達式的值:(1) !a (2) a & b(3) a b (4) (a 0) 0110 要表示數(shù)學關系式:要表示數(shù)學關系式:2

23、x4 2x4 , 則正確的則正確的C C語言表達式語言表達式應寫為:應寫為: 2x & x 3 & 2 | 8 3 & 2 | 8 35 3) & 2) | & 2) | (8 8 (4 - !54 - !5) 上述表達式等價于:上述表達式等價于:37例如:例如: (1)a = 0; b = 1; (1)a = 0; b = 1; c = a+ & ( b = 3 ); c = a+ & ( b = 3 ); 執(zhí)行后執(zhí)行后: a: a為為 ,b,b為為 ,c,c為為 。 邏輯與優(yōu)化:邏輯與優(yōu)化: 在邏輯表達式的求解中,并不是所有的邏輯運算

24、符在邏輯表達式的求解中,并不是所有的邏輯運算符都被執(zhí)行,只是都被執(zhí)行,只是在必須執(zhí)行下一個邏輯運算符才能求出在必須執(zhí)行下一個邏輯運算符才能求出表達式的解時,表達式的解時,才執(zhí)行該運算符。才執(zhí)行該運算符。110(2)a = 1; b = 1; c=0;(2)a = 1; b = 1; c=0; d = -a d = -a b- b- (c = b+3 ); (c = b+3 ); 執(zhí)行后執(zhí)行后: a: a為為 ,b,b為為 ,c,c為為 ,d,d為為 。000138例如:例如: (1) n(1) n是小于是小于m m的偶數(shù):的偶數(shù): (2)year(2)year是閏年是閏年: : (能被(能被4

25、 4整除但不能被整除但不能被100100整除整除, ,或能被或能被400400整除)整除)邏輯表達式一般用于控制語句中的條件:邏輯表達式一般用于控制語句中的條件:n m & n % 2 = 0 year % 4 = 0 & year % 100 != 0 | year % 400 = 039C C語言中的選擇語句的實現(xiàn)有:語言中的選擇語句的實現(xiàn)有:(1) if(1) if語句語句(2) switch(2) switch語句語句(3) (3) 條件表達式條件表達式403.2.3 if3.2.3 if語句語句真真假假語句語句表達式表達式1.if1.if語句的單分支形式:語句的單分支

26、形式:說明:說明:1. 1. 條件表達式的值為條件表達式的值為1 1或或0 0,且必須用,且必須用( )( )括?。焕ㄗ。?2. 2. 若有多條語句(復合語句)時,須用若有多條語句(復合語句)時,須用 括住。括住。 3. (3. (條件表達式條件表達式) )后不要加分號;后不要加分號;if (條件表達式條件表達式) 語句;語句;if (條件表達式條件表達式) 語句;語句; 語句;語句; 41void main() int num; printf(“Please input a number:n”); scanf(“%d ”, &num); if (num y ) t = x; x =

27、y; y = t; printf(“x= %d,y=%d”, x,y ); 例例2 2:任意輸入兩個整數(shù)按由小到大的順序輸出。:任意輸入兩個整數(shù)按由小到大的順序輸出。分析:分析: (1) 輸入兩個數(shù)據(jù)輸入兩個數(shù)據(jù)x,y ; (2) 如果如果xy 則交換則交換x和和y的值的值 ; (3) 按按x在前在前y在后的順序,輸出在后的順序,輸出x 和和y 的值。的值。 432. if語句的雙分支形式:語句的雙分支形式:if (表達式表達式) 語句語句1else 語句語句2首先先判斷表達式的值首先先判斷表達式的值若為非若為非0則執(zhí)行語句則執(zhí)行語句1若為若為0則執(zhí)行語句則執(zhí)行語句2表達式表達式語句語句1真真

28、假假語句2語句語句2執(zhí)行過程:執(zhí)行過程:if語句的雙分支形式,在語法上語句的雙分支形式,在語法上視為一條語句。視為一條語句。44main() float x , y; scanf(“%f ”, &x); if ( x 0 ) y = 3 - x ; else y = 2 * x ; printf(“y= %.2fn”, y ); 例例3 3:計算分段函數(shù):計算分段函數(shù)45%提示:參見課本提示:參見課本P57P57【練一練】,體會判斷輸入字符類別。【練一練】,體會判斷輸入字符類別。463.3.多分支選擇語句一般形式:多分支選擇語句一般形式: ifif( (表達式表達式1)1)語句語句1

29、1;else ifelse if( (表達式表達式2)2)語句語句2 2; else ifelse if( (表達式表達式n)n)語句語句n n; elseelse語句語句n+1n+1 47語句的執(zhí)行流程:語句的執(zhí)行流程: 測試表達式測試表達式1 1測試表達式測試表達式3 3測試表達式測試表達式2 2測試表達式測試表達式n n語句語句1 1語句語句2 2語句語句3 3語句語句n n語句語句n+1n+1=0=0=0=0=0=0=0=000000000先判斷表達式先判斷表達式1的值的值非非0就執(zhí)行下面的語句就執(zhí)行下面的語句為為0就執(zhí)行下一個判斷就執(zhí)行下一個判斷一直這樣做下去一直這樣做下去直到得出最

30、后結果直到得出最后結果48例例4 4 輸入某學生的成績,經處理后給出成績的等級,等輸入某學生的成績,經處理后給出成績的等級,等級分類如下:級分類如下: 90分以上(包括分以上(包括90):):A 80至至90分(包括分(包括80):):B 70至至80分(包括分(包括70):):C 60至至70分(包括分(包括60):):D 60分以下:分以下: E分析:根據(jù)輸入的學生成績,要輸出對應的等級,可以分析:根據(jù)輸入的學生成績,要輸出對應的等級,可以使用多分支選擇結構語句使用多分支選擇結構語句if else if else實現(xiàn)。實現(xiàn)。 【源程序源程序】如下頁。49#includevoid main(

31、) int score; char grade; printf(nplease input a student score:); scanf(%d,&score); if (score=90) grade=A; else if (score=80) grade=B; else if (score=70) grade=C; else if (score=60) grade=D; else grade=E; printf(nthe students grade:%cn,grade);504. if 4. if 語句的嵌套語句的嵌套一般形式一般形式: :ifif( (表達式表達式1)1)if

32、if( (表達式表達式2)2)語句語句1 1;elseelse語句語句2 2;elseelseifif( (表達式表達式3)3)語句語句3 3;elseelse語句語句4 4;用用if語句作為上一層語句作為上一層if語句的語句語句的語句1和語句和語句2的結構,稱為的結構,稱為if語句的嵌套語句的嵌套。51語句的執(zhí)行流程:語句的執(zhí)行流程:表達式表達式2表達式表達式1表達式表達式3語句語句1語句語句2語句語句3語句語句4非非000非非00非非052例例5 5 輸入三個整型數(shù),找出其中最大的和最小的數(shù)。輸入三個整型數(shù),找出其中最大的和最小的數(shù)。main( ) int a,b,c,max,min;sc

33、anf(%d,%d,%d,&a,&b,&c);max=min=a;if ( bmax ) max=b;else if ( bmax ) max=c;elseif ( cmin ) min=c;printf(max=%d,min=%dn,max,min); 53elseelse 總是與它前面離它最近總是與它前面離它最近的未配對的的未配對的ifif 匹配。匹配。例例 如如: : if(e1)if(e1) if(e2) if(e2)語句語句1;1; elseelse語句語句2;2;語句語句1 1非非0 0e1e1非非0 00 0e2e2語句語句2 20 0在使用在使用ifif

34、語句的嵌套應注意:語句的嵌套應注意:if()if()if()else.else.else.54編程題編程題: :(猜數(shù)游戲)猜數(shù)游戲) 按將要猜的數(shù)放在變量按將要猜的數(shù)放在變量 magic magic 中,程序運行時,提示游中,程序運行時,提示游戲者通過鍵盤輸入自己猜的數(shù)戲者通過鍵盤輸入自己猜的數(shù)guessguess。1.1.猜對了,屏幕顯示猜對了,屏幕顯示“ “ RightRight!”,否則不予顯示。,否則不予顯示。2.2.猜對了,屏幕顯示猜對了,屏幕顯示“ “ RightRight!”,否則顯示,否則顯示“ “ Wrong! ” Wrong! ” 。3.3.猜對了,屏幕顯示猜對了,屏幕顯

35、示“ “ RightRight!”,否則除了顯示,否則除了顯示 “ “WrongWrong!”外,還顯示猜大了或猜小了的信息,以幫助游戲者繼續(xù)往正外,還顯示猜大了或猜小了的信息,以幫助游戲者繼續(xù)往正確處猜。確處猜。練習題練習題55 求值規(guī)則:求值規(guī)則: (1)(1)先求解表達式先求解表達式1 1的值;的值; (2)(2)若為真若為真( (非非0),0),求解表達式求解表達式2 2,并把表達式,并把表達式2 2的值的值 作為整個條件表達式的值;作為整個條件表達式的值; (3)(3)若為假若為假(0),(0),求解表達式求解表達式3 3,并把表達式,并把表達式3 3的值作的值作 為整個條件表達式的

36、值。為整個條件表達式的值。 3.2.4 3.2.4 條件運算符條件運算符( (三元運算符三元運算符) ) ? :? : 形式為形式為: : ? ? :3如何用條件表達式表示如何用條件表達式表示: : if(ab) max=a;if(ab) max=a; else max=b; else max=b;max=( ab? a: b)max=( ab? a: b)56又如:又如: y = x10 ? x/10 : x0 ? x: -xy = x10 ? x/10 : x0 ? x: -x 當當x x的值為整型的的值為整型的1515時,表達式的結果為:時,表達式的結果為: 當當x x的值為整型的的值為

37、整型的5 5時,表達式的結果為:時,表達式的結果為:1 15 5例如例如: int max,: int max,a=5a=5,b=3;b=3; max=ab?a:b max=ab?a:b 求求maxmax的值的值maxmax的值為的值為5 5 優(yōu)先級:條件運算優(yōu)先級:條件運算 賦值運算賦值運算 結合性:自右至左;結合性:自右至左;573.2.5 Switch語句語句 在某些情況下,需要根據(jù)表達式的在某些情況下,需要根據(jù)表達式的不同值不同值來判斷執(zhí)行哪一分支。可利用來判斷執(zhí)行哪一分支。可利用switchswitch語句,可語句,可以更方便的完成。以更方便的完成。 58 switch switch

38、 語句的一般格式為:語句的一般格式為: switchswitch(表達式)(表達式) case case 常量表達式常量表達式1 1:語句:語句1 1; case case 常量表達式常量表達式2 2:語句:語句2 2; case case 常量表達式常量表達式3 3:語句:語句3 3; case case 常量表達式常量表達式n n:語句:語句n n; default: default: 語句語句n+1n+1; 1. switch 1. switch 語句語句 不含變量的不含變量的常量表達式,且常量表達式,且值值必須互不相同必須互不相同casecase和常量和常量表達式之間用表達式之間用空格

39、空格隔開隔開語句標號語句標號當省略當省略default時,如果匹配時,如果匹配不成功,就直接退出不成功,就直接退出switch。59switch switch 語句的執(zhí)行過程:語句的執(zhí)行過程:(1)先計算表達式的值,(2)然后將此值依次與各個case中的常量表達式進行匹配。(3)如果遇到與該值相等的常量表達式,就執(zhí)行該case標號后的語句,直到整個switch語句結束;(4)如果沒有與該值相等的常量表達式,并且存在default,就執(zhí)行default中的語句;如果不包含default,又沒有成功匹配,就什么也不執(zhí)行,直接跳出switch。60程序如下:程序如下:例例1 1從鍵盤輸入不同字母,顯

40、示不同國家的名字。從鍵盤輸入不同字母,顯示不同國家的名字。#include stdio.hmain() char ch; ch=getchar(); switch(ch) case a: printf(American); case b: printf(Britainn); case c: printf(Chinan); default: printf(Japann); 61 為了實現(xiàn)多分支,在執(zhí)行了滿足條件的語句后,使流程跳出為了實現(xiàn)多分支,在執(zhí)行了滿足條件的語句后,使流程跳出switchswitch分支結構,而不繼續(xù)執(zhí)行其后續(xù)的分支結構,而不繼續(xù)執(zhí)行其后續(xù)的casecase語句,語句,只要

41、在每個只要在每個 case case 語句后語句后面增加面增加 break break 語句語句即可。即可。#include stdio.hmain() char ch; ch=getchar(); switch(ch) case a:printf(American); break; case b:printf(Britainn); break; case c:printf(Chinan); break; default: printf(Japann); 上例可改寫如下:上例可改寫如下:62如:如: case a: case A: printf(“American”); break; case

42、 b: case B: printf(“Britainn”); break;.注意:注意:(1 1)在增加了)在增加了breakbreak語句后,語句后,casecase語句出現(xiàn)的次序并不影響語句出現(xiàn)的次序并不影響 執(zhí)行結果。執(zhí)行結果。(2 2)多個)多個casecase可共用一組執(zhí)行語句。可共用一組執(zhí)行語句。63 例例2 2:根據(jù)前例,用:根據(jù)前例,用switch switch 語句編程實現(xiàn)根據(jù)輸入的學生語句編程實現(xiàn)根據(jù)輸入的學生的成績判斷等級。的成績判斷等級。分析:分析: 設設score為整型數(shù),利用兩個整數(shù)相除,結果為整型數(shù),利用兩個整數(shù)相除,結果自動取整的特性,自動取整的特性,scor

43、e和和 score /10 有如下對應有如下對應關系:關系: score score/10 90以上以上 10, 9 7089 7 , 8 6069 6 60以下以下 5,4,3,2,1,0 因此因此,可以用可以用score /10的值來確定分支。的值來確定分支。64#include main( ) int score; scanf(%d ,&score); switch (score /10) case 10: case 9: printf(%d: An, score);break; case 8: case 7: printf(%d: Bn, score);break; case

44、6: printf(%d: Cn, score);break; default: printf(%d: Dn, score); 程序如下:程序如下:65練習:讀程序寫結果。練習:讀程序寫結果。#includemain( ) char i; scanf(“%c”,&i); switch(i) case a: i+; printf(“%c”,i);break; case b: i+; printf(“%c”,i); default: i=i+2;printf(“%c”,i); 1. 1. 輸入:輸入:a a輸出:輸出:b b2. 2. 輸入:輸入:b b輸出:輸出:cece3. 3. 輸入

45、:輸入:c c輸出:輸出:e e66練習題:用練習題:用swichswich語句編程模擬計算器程序。用戶輸入運算語句編程模擬計算器程序。用戶輸入運算數(shù)和四則運算符,輸出計算結果。數(shù)和四則運算符,輸出計算結果。 例如,輸入:例如,輸入:+ 4 5 + 4 5 輸出:輸出:4 + 5 = 94 + 5 = 9分析:分析: 根據(jù)輸入的運算符不同來進行不同的運算,是一個典根據(jù)輸入的運算符不同來進行不同的運算,是一個典型的多分支選擇結構。型的多分支選擇結構。 可用可用switchswitch語句用于判斷運算符,并執(zhí)行相應的語句,語句用于判斷運算符,并執(zhí)行相應的語句,最后輸出運算結果。當輸入運算符不是最后

46、輸出運算結果。當輸入運算符不是 + +、- -、* *、/ /時,給時,給出錯誤提示。出錯誤提示。 67參考程序如下:參考程序如下:#includemain()int f1,f2,result;char ch;scanf(%c%d%d,&ch,&f1,&f2);printf(The equation is:%d%c%dn,f1,ch,f2);switch(ch)case +:result=f1+f2;break;case -:result=f1-f2;break;case *:result=f1*f2;break;case /:result=f1/f2;break;de

47、fault:result=-9999;if(result!=-9999)printf(%d%c%d=%dn,f1,ch,f2,result);elseprintf(Input error!n);68例例4.8 4.8 求方程求方程axax2 2+bx+c = 0 +bx+c = 0 的實數(shù)解。的實數(shù)解。 分析:根據(jù)分析:根據(jù)3 3個系數(shù)的不同情況,方程的根有如下幾種情況。個系數(shù)的不同情況,方程的根有如下幾種情況。(1 1) a = 0a = 0, 不是二次方程;不是二次方程;(2 2) b b2 2-4ac = 0-4ac = 0, 有兩個相等的實根;有兩個相等的實根;(3 3) b b2 2

48、-4ac 0-4ac 0, 有兩個不等的實根,求有兩個不等的實根,求x1x1和和x2x2;(4 4) b b2 2-4ac 0-4ac 0, 沒有實數(shù)解。沒有實數(shù)解。69程序如下:程序如下:#include main() float a,b,c,x1,x2,disc; printf(input a,b,c:); scanf(%f%f%f,&a,&b,&c); disc=b*b-4*a*c; if(fabs(a)1e-6) printf(The equation is not a quadratic.n); else if(disc0) printf(The equati

49、on has not real root.n); else if(fabs(disc)1e-6) printf(The equation has two equal roots:%8.4fn,-b/(2*a); else x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); printf(The equation has distinct real roots:%8.4f,%8.4f,x1,x2); 本節(jié)結束本節(jié)結束!70上節(jié)內容回顧:上節(jié)內容回顧:結構化程序設計的三種基本結構:結構化程序設計的三種基本結構:PAB真真假假 選選 擇擇 結結 構構

50、AB 順順 序序 結結 構構 PA假假真真 循循 環(huán)環(huán) 結結 構構 71l whilewhile語句語句l do-whiledo-while語句語句l forfor語句語句條件循環(huán)條件循環(huán)計數(shù)循環(huán)計數(shù)循環(huán)72v一般格式一般格式:while (表達式表達式) 循環(huán)體語句;循環(huán)體語句;v執(zhí)行流程執(zhí)行流程:表達式表達式 循環(huán)體循環(huán)體假假真真while73例例 分析以下程序的執(zhí)行結果。分析以下程序的執(zhí)行結果。/*5-1.c*/#include main() int i=1; while(i=5) printf(%d ,i); i+; i=5printf(“%d”,i);真真i=1 開開 始始 程序輸出

51、結果:程序輸出結果: 1 2345i+;i=2i=3i=4i=5i=61=52=53=54=55=56=5假假 結結 束束 74例例 分析以下程序的執(zhí)行結果。分析以下程序的執(zhí)行結果。 循環(huán)結構程序的組成:循環(huán)結構程序的組成:/*5-1.c*/#include main() int i=1; while(i=5) printf(%d ,i); i+; 循環(huán)控制循環(huán)控制條件條件循環(huán)變量循環(huán)變量增值增值循環(huán)變量循環(huán)變量賦初值賦初值思考思考1 1:循環(huán)構成的各個部分的位置是否是固定的?:循環(huán)構成的各個部分的位置是否是固定的?75/*5-1.c*/#include main() int i=1; whi

52、le(i=5) printf(%d ,i); i+; 思考思考2 2:打印打印1-1001-100之間的所有整數(shù)?之間的所有整數(shù)? 奇數(shù)?奇數(shù)? 偶數(shù)?偶數(shù)?i=100i=2i+=2例例 分析以下程序的執(zhí)行結果。分析以下程序的執(zhí)行結果。 循環(huán)結構程序的組成:循環(huán)結構程序的組成:76問題分析:問題分析:1+2+3+4+1001+2+3+4+100121003sum = 0 + 1sum = 1 + 2sum = 3 + 3sum = + 100sum = +n n可寫出循環(huán)體語句為:可寫出循環(huán)體語句為:sum=sum+i;printf(“%d”, 1+2+3+100);i:i:循環(huán)控制變量循環(huán)控

53、制變量 sum:sum:累加和變量累加和變量 問題變?yōu)閱栴}變?yōu)橛幸?guī)律重復執(zhí)行有規(guī)律重復執(zhí)行累加求和累加求和的過程的過程前一步前一步累加累加求和的結果求和的結果 該步該步累加累加求和的結果求和的結果例例 用用whilewhile循環(huán)求循環(huán)求 1001nn77通過以上分析,程序即可編寫出來。通過以上分析,程序即可編寫出來。思考思考3 3:如何編程實現(xiàn):如何編程實現(xiàn) 求求 n n 的階乘的階乘 ?/*5-2.c*/#include main() int i=1,sum=0; while(i=100) sum=sum+i; i+; printf(“sum=%d n”, sum);78例:分析如下循環(huán)語

54、句的執(zhí)行結果例:分析如下循環(huán)語句的執(zhí)行結果: :i=1;while (i=100) putchar(*);i+; 這個循環(huán)永遠不會結束這個循環(huán)永遠不會結束,因為循環(huán)控制變量因為循環(huán)控制變量i沒有沒有在循環(huán)體內被改變,在循環(huán)體內被改變,i+; 不屬于循環(huán)體。不屬于循環(huán)體。 循環(huán)語句中一定要注循環(huán)語句中一定要注意表達式的值是否能在意表達式的值是否能在循環(huán)執(zhí)行過程中被改變,循環(huán)執(zhí)行過程中被改變,以免造成死循環(huán)。以免造成死循環(huán)。79do循環(huán)體語句;循環(huán)體語句;while (表達式表達式); 1.1.一般形式一般形式:表達式表達式 循環(huán)體循環(huán)體假假真真do注意:注意:分號不能丟分號不能丟1.1.執(zhí)行循環(huán)

55、體語句執(zhí)行循環(huán)體語句3.3.表達式的值為非零,返回第表達式的值為非零,返回第1 1步步4.4.表達式的值為零,結束循環(huán)表達式的值為零,結束循環(huán)2.2.計算表達式計算表達式2.2.執(zhí)行流程執(zhí)行流程:80例例 用用do-whiledo-while循環(huán)求循環(huán)求 1001nn#include main() int i=1,sum=0; do sum=sum+i; i+; while(i=100); printf(“sum=%d n”, sum);由于由于do-while語句至語句至少要被執(zhí)行一次,特少要被執(zhí)行一次,特別要注意別要注意i和和sum的取值的取值問題!問題!813. While3. Whil

56、e與與do-whiledo-while語句的區(qū)別:語句的區(qū)別: (1 1)while while 循環(huán)是先判斷后執(zhí)行,而循環(huán)是先判斷后執(zhí)行,而do-whiledo-while循環(huán)是先執(zhí)行后循環(huán)是先執(zhí)行后判斷,即先執(zhí)行循環(huán)體,再計算測試表達式的值。判斷,即先執(zhí)行循環(huán)體,再計算測試表達式的值。 例如:例如:int x=-1;int x=-1;while(!x)while(!x) x=x x=x* *x;x;printf(“ %dn”, printf(“ %dn”, x);x);int x=-1;int x=-1;do do x=x x=x* *x;x;while(!x);while(!x);pri

57、ntf(“ %dn”, x);printf(“ %dn”, x); (2 2)在)在while while 循環(huán)中,循環(huán)中,while(while(測試表達式測試表達式) )后面不帶后面不帶“;”; 而在而在do-whiledo-while循環(huán)中,循環(huán)中,while(while(測試表達式測試表達式) )后面必須帶后面必須帶“;”,它表示該語句的語法結束。它表示該語句的語法結束。823.3.3 for3.3.3 for語句語句 for(for(表達式表達式1;1;表達式表達式2;2;表達式表達式3) 3) 循環(huán)體語句循環(huán)體語句一般形式:一般形式:循環(huán)變量循環(huán)變量初始化初始化循環(huán)控制循環(huán)控制條件

58、條件修改循環(huán)修改循環(huán)變量變量83for for 語句執(zhí)行流程圖:語句執(zhí)行流程圖:計算表達式計算表達式2 2計算表達式計算表達式1 1計算表達式計算表達式3 3執(zhí)行循環(huán)體執(zhí)行循環(huán)體非非0 00 0forfor(表達式(表達式1 1;表達式;表達式2 2;表達式;表達式3 3) 循環(huán)體語句循環(huán)體語句84例例: 求求 1+2 +99+100#includemain( ) int i,s=0; for(i=1;i=99;i+) s=s+i; printf(“s=%d”,s); 程序如下:程序如下:i=1i=100s=s+ii+假真注意:注意:for 語句用于實現(xiàn)當型循環(huán)結構,它是先判斷后執(zhí)行。語句用于

59、實現(xiàn)當型循環(huán)結構,它是先判斷后執(zhí)行。因此,有可能循環(huán)體執(zhí)行因此,有可能循環(huán)體執(zhí)行0 0次。次。85從上面的程序我們看到,從上面的程序我們看到,for語句中:語句中:表達式表達式1:通常是給循環(huán)變量賦初值通常是給循環(huán)變量賦初值表達式表達式2:循環(huán)是否繼續(xù)執(zhí)行的判別表達式,這個表達循環(huán)是否繼續(xù)執(zhí)行的判別表達式,這個表達式通常與某一個(或多個)變量的值有關,隨著這個式通常與某一個(或多個)變量的值有關,隨著這個(些)變量的值的改變,表達式的結果發(fā)生變化,這(些)變量的值的改變,表達式的結果發(fā)生變化,這個(些)變量被稱為循環(huán)因變量。個(些)變量被稱為循環(huán)因變量。表達式表達式3:通常用于改變循環(huán)因變量的

60、值。通常用于改變循環(huán)因變量的值。 1. 1.表達式的省略:表達式的省略:forfor語句的變形:語句的變形:86(1)(1)省略表達式省略表達式1 1:#includemain( ) int i=1,s=0; for(;i=99;i+) s=s+i; printf(“s=%d”,s); (2)(2)省略表達式省略表達式3 3:#includemain( ) int i,s=0; for(i=1;i=99;) s=s+i;i+; printf(“s=%d”,s); (3)(3)同時省略表達式同時省略表達式1 1、3 3#includemain( ) int i=1,s=0; for(;i=99;) s=s+i;i+; printf(“s=%d”,s); 表達式表達式2也可以省略也可以省略但在循環(huán)體中要借助但在循環(huán)體中要借助Break 語句來實現(xiàn)循語句來實現(xiàn)循環(huán)的結束。環(huán)的結束。注意:注意:表達表達式省略,式省略,分分號不能省號不能省。872. 2. 循環(huán)體可以是空語句循環(huán)體可以是空語句例如:例如:main( )

溫馨提示

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

評論

0/150

提交評論