c語言選擇結(jié)構(gòu)講解_第1頁
c語言選擇結(jié)構(gòu)講解_第2頁
c語言選擇結(jié)構(gòu)講解_第3頁
c語言選擇結(jié)構(gòu)講解_第4頁
c語言選擇結(jié)構(gòu)講解_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

選擇結(jié)構(gòu)程序設(shè)計1一、什么叫“選擇”二、在C中選擇結(jié)構(gòu)的表現(xiàn)形式三、“關(guān)系運算”與“邏輯運算”四、選擇結(jié)構(gòu)的使用實例五、總結(jié)、疑問、常見錯誤主要內(nèi)容2從小學(xué)時代:語文課的造句練習:

如果……就……英語學(xué)習中單詞:

if……then……一、什么叫“選擇”3生活中的“選擇”體育課排隊中位置的選擇

第一次排隊來了新人的排隊大學(xué)的選擇:

高考分數(shù)、學(xué)校知名度、興趣、就業(yè)前景、……風險:招生數(shù)量、競爭人數(shù)、……4生活中的“選擇”道路上的選擇

道口分類:三岔口、十字路口、五道口、N道口選擇的依據(jù)?目的地、道路、暢通性……5講座選擇結(jié)構(gòu)程序設(shè)計生活中的“選擇”領(lǐng)導(dǎo)要求:明天上午10點鐘到北京清華大學(xué)參加會議,后天回校參加選舉會。你怎么辦?交通工具的選擇:飛機、火車、汽車……6講座選擇結(jié)構(gòu)程序設(shè)計總結(jié):依據(jù)某些條件實現(xiàn)(達到)某個目標的情況處理稱為選擇。因此首先必須知道“條件”,然后是使用適當?shù)奶幚矸绞健_x擇的必要條件:“條件”7講座選擇結(jié)構(gòu)程序設(shè)計在C中選擇結(jié)構(gòu)的表現(xiàn)形式,一般稱為if語句switch語句可以從不同的角度去觀察分析這兩個語句。二、在C中“選擇結(jié)構(gòu)”的表現(xiàn)形式8講座選擇結(jié)構(gòu)程序設(shè)計1從詞義看:if語句switch語句9選擇結(jié)構(gòu)單分支雙分支if(表達式)語句多分支if(表達式)語句1else語句2if(表達式1)語句1elseif(表達式2)語句2……else語句nif語句的嵌套switch語句講座選擇結(jié)構(gòu)程序設(shè)計2從分支看分為三種分支10if(表達式)語句switch(表達式){case:……..}講座選擇結(jié)構(gòu)程序設(shè)計3從一般形式的角度分兩種基本結(jié)構(gòu):選擇標識符(表達式)語句你注意到與前面第一部分的介紹有什么不同嗎?(表達式)11講座選擇結(jié)構(gòu)程序設(shè)計關(guān)于表達式的定義表達式由運算符、常量及變量構(gòu)成。C語言的表達式基本遵循一般代數(shù)規(guī)則。雖然進一步細分,又分為算術(shù)表達式、關(guān)系表達式、賦值表達式,……有幾點卻是與C語言緊密相關(guān)的需要注意。1.類型轉(zhuǎn)換2.復(fù)合運算的使用12講座選擇結(jié)構(gòu)程序設(shè)計根據(jù)給定的條件判斷決定要執(zhí)行的操作。單選擇語句格式:if(表達式){語句;}例:if(a>b)x=a;

語句零條件非零if語句的使用。13舉例講座選擇結(jié)構(gòu)程序設(shè)計#include<stdio.h>voidmain(){floata,b,t=0;scanf(“%f,%f”,&a,&b);if(a>b){t=a;a=b;b=t;}printf(“%5.2f,%5.2f\n”,a,b);}3,4

……if(a>b)t=a;a=b;b=t;……3.00,4.00當某些語句作為一個整體出現(xiàn)的時候,必須是復(fù)合語句的形式。14講座選擇結(jié)構(gòu)程序設(shè)計if語句中對于表達式的要求1.對表達式的類型沒有任何要求2.使用的是表達式的結(jié)果值3.這個結(jié)果值若非0,則都作為“真”處理。4.針對上一條,對float類型的結(jié)果要格外注意。

15講座選擇結(jié)構(gòu)程序設(shè)計switch語句的使用。格式:switch(表達式) {case常量表達式1:語句序列1; case常量表達式2:語句序列2;……case常量表達式n:語句序列n; [default:語句序列n+1;]

}16講座選擇結(jié)構(gòu)程序設(shè)計switch語句中注意的問題1.規(guī)則上對表達式的類型沒有任何要求,但實際使用中一般采用結(jié)果為整形或字符型的表達式,或者是與常量表達式類型一致的表達式.2.使用的是表達式的結(jié)果值與常量表達式“等于”的比較結(jié)果。3.要注意case的執(zhí)行順序的影響。17講座選擇結(jié)構(gòu)程序設(shè)計在班級排隊中排隊的依據(jù)是“相互之間身高”的差異;在三角形構(gòu)成判定定理中要求“任意兩邊之和大于第三邊”;……因此兩個對象(量)之間不僅可以實施算術(shù)運算,還存在一定的“關(guān)系”。小學(xué)時就知道:a<b是否成立要看具體值。在C語言中稱之為關(guān)系運算。三、“關(guān)系運算”與“邏輯運算”18運算定義、運算符號、運算對象講座選擇結(jié)構(gòu)程序設(shè)計這些運算相互之間的優(yōu)先級與其它運算組合時的優(yōu)先級運算結(jié)果值、如何使用這個結(jié)果關(guān)心什么?19關(guān)系運算符<<=>>===!=(6種)講座選擇結(jié)構(gòu)程序設(shè)計優(yōu)先級賦值<關(guān)系(后2<前4)<算術(shù)關(guān)系表達式用關(guān)系運算符將兩個表達式連接起來的式子.算術(shù)、關(guān)系、邏輯、賦值、字符。值(結(jié)果)真(1)假(0)舉例已知:(a=3、b=2、c=1、d=0)0a==b>cd==a>b+c15>3?d=a>b+c?關(guān)系運算符和關(guān)系表達式20講座選擇結(jié)構(gòu)程序設(shè)計關(guān)系運算是表述對象之間的關(guān)系是否成立,在給出具體值必然有一個確定的、唯一的結(jié)果:要么成立、要么不成立。上升到理論高度,將這了結(jié)果稱為邏輯值:“真”、“假”??匆幌略炀漕}:如果a來了并且b也來了,才能打開門。如果a來了或者b也來了,都能打開門。以上兩個問題引入了一個新的運算:邏輯運算。21邏輯運算符!(邏輯非)&&(邏輯與)||(邏輯或)運算規(guī)則優(yōu)先次序賦值<||<&&<關(guān)系<算術(shù)<!講座選擇結(jié)構(gòu)程序設(shè)計(1)!:取邏輯值的相反值。(2)&&:參加運算的兩個邏輯值都為真時,結(jié)果為真(1)。(3)||:參加運算的兩個邏輯值都為假時,結(jié)果為假(0)。邏輯表達式用邏輯運算符將關(guān)系表達式和邏輯量連接起來的式子。舉例已知:(a=1b=0)1a||b&&0!a&&(5>3)||b0邏輯運算符和邏輯表達式22講座選擇結(jié)構(gòu)程序設(shè)計舉例5>3&&8<4-!00(5>3)&&(8<(4-!0))4&&5>3||21邏輯運算符兩側(cè)的運算對象不但可以是0和1,也可以是0或非0的整數(shù),也可是任何類型的數(shù)據(jù)。系統(tǒng)判定標準:0為假;非0為真。23講座選擇結(jié)構(gòu)程序設(shè)計解決實際問題的步驟1.分析已知條件、解決分步2.根據(jù)問題決定使用什么結(jié)構(gòu)、語句3.編寫源程序(代碼)4.調(diào)試:排出語法錯誤,用已知初始數(shù)據(jù)和結(jié)果排出語義錯誤。5.實際使用:用真實數(shù)據(jù)運行程序。四、選擇結(jié)構(gòu)的應(yīng)用實例24思考按照從小到大的順序輸出數(shù)據(jù)講座選擇結(jié)構(gòu)程序設(shè)計#include<stdio.h>voidmain(){floata,b,t=0;scanf(“%f%f”,&a,&b);if(a>b){t=a;a=b;b=t;}printf(“%5.2f,%5.2f\n”,a,b);}針對要求選擇單分支結(jié)構(gòu)即可。單分支要求編成采用固定輸出模式是,已經(jīng)符合如何處理,不符合時如何處理。25要求講座選擇結(jié)構(gòu)程序設(shè)計#include<stdio.h>voidmain(){floata,b,c,p,s;scanf(“%f,%f,%f”,&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a)

{

p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));printf(“s=%7.2f\n”,s);

}elseprintf(“Notatriangle!\n”);}如何判斷是三角形的三邊?如何求三角形的面積。輸入a,b,c是三角形嗎?YNp(a+b+c)/2ssqrt(p*(p-a)*(p-b)*(p-c))輸出s輸出“非三角形!”3,4,5s=6.003,4,8Notatriangle!雙分支分析輸入三角形的三邊,求三角形的面積。26格式舉例講座選擇結(jié)構(gòu)程序設(shè)計if(cost>3000)cash=500;elseif(cost>2000)cash=300;elseif(cost>1500)cash=200;elseif(cost>1000)cash=100;elsecash=0;if(表達式1)語句1elseif(表達式2)語句2……else語句n語句本身含分號多分支(一)27if語句的嵌套講座選擇結(jié)構(gòu)程序設(shè)計在if語句中又包含一個或多個if語句。被嵌套的條件語句和嵌套進去的條件語句既可是單分支,也可是雙分支。if(表達式1)

if(表達式2)語句1

[else語句2][else

if(表達式3)語句3

[else語句4]]注意if與else的配對原則:else總是與它上面的最近的未配對的if配對。分析方法1、主句是單分支還是雙分支的。2、嵌套進來的子句是雙分支還是單分支的,嵌套在if后面還是else后面。多分支(二)28開關(guān)語句講座選擇結(jié)構(gòu)程序設(shè)計switch(表達式){case常量表達式1:語句1case常量表達式2:語句2case常量表達式3:語句3……case常量表達式n:語句ndefault:語句n+1}當分支較多時,使用嵌套的if語句層數(shù)多,程序冗長而且可讀性降低。此時可以考慮使用switch語句(開關(guān)語句)來處理多分支。多分支(三)29舉例#include<stdio.h>voidmain(){chargrade;printf(“請輸入考試等級A~D:”);scanf(“%c”,&grade);switch(grade){case‘A’:printf(“80~100\n”);case‘B’:printf(“70~79\n”);case‘C’:printf(“60~69\n”);case‘D’:printf(“<60\n”);default:printf(“error\n”);}}B70~7960~69<60Error根據(jù)輸入的考試成績等級打印出百分制分數(shù)段。A:80~100B:70~79C:60~69D:<60說明:應(yīng)在每一個printf后加break語句講座選擇結(jié)構(gòu)程序設(shè)計30完善后#include<stdio.h>voidmain(){chargrade;printf(“請輸入考試等級A~D:”);scanf(“%c”,&grade)switch(grade){case‘A’:printf(“80~100\n”);break;case‘B’:printf(“70~79\n”);break;case‘C’:printf(“60~69\n”);break;case‘D’:printf(“<60\n”);break;default:printf(“error\n”);}}B70~79最后一行的break可以省略。講座選擇結(jié)構(gòu)程序設(shè)計31問題#include<stdio.h>voidmain(){intscore;printf(“請輸入考試成績0~100:”);scanf(“%c”,&score);switch(score){case80~100:printf(“A\n”);break;case70~79:printf(“B\n”);break;case60~69:printf(“C\n”);break;case<60:printf(“D\n”);break;default:printf(“請輸入0~100之間的整數(shù)\n”);}}根據(jù)輸入的考試成績(百分制整數(shù))打印出等級水平。(使用switch語句實現(xiàn))A:80~100B:70~79C:60~69D:<60思考:本程序有問題么?理想中講座選擇結(jié)構(gòu)程序設(shè)計思考使用什么結(jié)構(gòu)來解決問題?32#include<stdio.h>voidmain(){intscore,p;printf(“請輸入考試成績0~100:”);scanf(“%c”,&score);p=score/10;switch(p){case0:printf(“D\n”);break;case1:printf(“D\n”);break;case2:printf(“D\n”);break;case3:printf(“D\n”);break;case4:printf(“D\n”);break;case5:printf(“D\n”);break;case6:printf(“C\n”);break;case7:printf(“B\n”);break;case8:printf(“A\n”);break;case9:printf(“A\n”);break;case10:printf(“A\n”);break;default:printf(“請輸入0~100之間的整數(shù)\n”);}}改進程序111種情況思考:不同case值時執(zhí)行相同的操作,是否可以合并?講座選擇結(jié)構(gòu)程序設(shè)計33#include<stdio.h>voidmain(){intscore,p;printf(“請輸入考試成績0~100:”);scanf(“%c”,&score);p=score/10;switch(p){

case0:case1:case2:case3:case4:case5:printf(“D\n”);break;case6:printf(“C\n”);break;case7:printf(“B\n”);break;

case8:case9:case10:printf(“A\n”);break;default:printf(“請輸入0~100之間的整數(shù)\n”);}}改進程序2注意:多個case共用一組執(zhí)行語句時,共用的執(zhí)行語句寫在最后一個case的后面。講座選擇結(jié)構(gòu)程序設(shè)計34問題輸入一年號,判斷這一年是否為閏年.講座選擇結(jié)構(gòu)程序設(shè)計真year被400整除year被4整除真假leap=0leap=1year被100整除真leap=1leap=0Leap真假輸出“閏年”輸出“非閏年”假假分析當給出數(shù)學(xué)表達式后,如何轉(zhuǎn)化為程序.參考N-S圖是結(jié)構(gòu)化程序設(shè)計中常用的方法,35參考程序講座選擇結(jié)構(gòu)程序設(shè)計#include<stdio.h>voidmain(){intyear,leap;scanf("%d",&year);if(year%4==0){if(year%100==0){if(year%400==0)leap=1;

elseleap=0;}

elseleap=1;}elseleap=0;if(leap)printf("%dis",year);elseprintf("%disnot",year);printf("aleapyear\n",year);}運行情況如下:輸入:1800輸出:1800isnotaleapyear輸入:2000輸出:2000isaleapyear輸入:1996輸出:1996isaleapyear條件可否合并寫成一行呢?36改進程序講座章選擇結(jié)構(gòu)程序設(shè)計#include<stdio.h>voidmain(){intyear,leap;scanf("%d",&year);

if((year%4==0&&year%100!=0)||(year%400==0))leap=1;elseleap=0;

if(leap)printf("%dis",year);elseprintf("%disnot",year);printf("aleapyear\n",year)

溫馨提示

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

評論

0/150

提交評論