版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
選擇結(jié)構(gòu)(分支結(jié)構(gòu))的處理過(guò)程為:先判斷一個(gè)條件,然后根據(jù)條件是否成立,執(zhí)行不同的代碼。第3章
選擇結(jié)構(gòu)程序設(shè)計(jì)C語(yǔ)言提供了作為判斷條件的關(guān)系表達(dá)式和邏輯表達(dá)式,還有實(shí)現(xiàn)分支結(jié)構(gòu)的if語(yǔ)句和switch語(yǔ)句。3.1關(guān)系運(yùn)算符和關(guān)系表達(dá)式3.2邏輯運(yùn)算符和邏輯表達(dá)式3.3if語(yǔ)句3.4switch語(yǔ)句3.5條件運(yùn)算符和條件表達(dá)式第3章選擇結(jié)構(gòu)程序設(shè)計(jì)3.6程序舉例3.1關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系運(yùn)算符:比較兩個(gè)量的運(yùn)算符關(guān)系表達(dá)式:用關(guān)系運(yùn)算符將運(yùn)算對(duì)象 連接起來(lái)的式子在C語(yǔ)言中,關(guān)系運(yùn)算符有六種3.1.1關(guān)系運(yùn)算符優(yōu)先級(jí)相同
(高)①<
(小于)②<=(小于或等于)③>
(大于)④>=(大于或等于)⑤==(等于)⑥!=(不等于)優(yōu)先級(jí)相同
(低)運(yùn)算符優(yōu)先級(jí)的高低次序3.1.1關(guān)系運(yùn)算符結(jié)合性為自左至右關(guān)系表達(dá)式是用關(guān)系運(yùn)算符將運(yùn)算對(duì)象連接起來(lái)的式子。
運(yùn)算對(duì)象可以是常量、變量或表達(dá)式。3.1.2關(guān)系表達(dá)式例如:
3>7a<=ba%2==0a+b>=c-d關(guān)系表達(dá)式求解的結(jié)果:成立或不成立,即“真(true)”或“假(flase)”。
在C語(yǔ)言中,用“1”代表“真”,用“0”代表“假”。3.1.2關(guān)系表達(dá)式例如:
inta=7,b=4,c=1,d;a%2==0a%2==0的值為0a%b<a/ba%b<a/b的值為03.1.2關(guān)系表達(dá)式例如:
inta=7,b=4,c=1,d;d=a>bd=a>b的值為1(d=a)>b(d=a)>b的值為1d=a>b>cd=a>b>c的值為0注意:在C語(yǔ)言中要判斷a大于b且b大于c時(shí),寫(xiě)成邏輯表達(dá)式a>b&&b>c,其中&&是邏輯與運(yùn)算符。3.2.1邏輯運(yùn)算符
在C語(yǔ)言中,邏輯運(yùn)算符有三種
3.2邏輯運(yùn)算符和邏輯表達(dá)式運(yùn)算符優(yōu)先級(jí)的高低次序3.1.1邏輯運(yùn)算符結(jié)合性為自右至左結(jié)合性為自左至右邏輯表達(dá)式:用邏輯運(yùn)算符將關(guān)系表達(dá)式或邏輯量連接起來(lái)的式子。
邏輯表達(dá)式的值是一個(gè)邏輯值,即“真”或“假”。
C語(yǔ)言中,以1表示“真”,以0表示“假”。3.2.2邏輯表達(dá)式邏輯運(yùn)算的真值表3.2.2邏輯表達(dá)式
運(yùn)算對(duì)象,可以是任意類(lèi)型的數(shù)據(jù),以非0表示真,以0表示假
運(yùn)算結(jié)果,以1表示“真”,以0表示“假”邏輯量的真假判定──0和非0C語(yǔ)言用整數(shù)“1”表示“邏輯真”、用“0”表示“邏輯假”。但在判斷一個(gè)數(shù)據(jù)的“真”或“假”時(shí),卻以0和非0為根據(jù):如果為0,則判定為“邏輯假”;如果為非0,則判定為“邏輯真”。例如,假設(shè)num=12,則:!num的值,num>=1&&num<=31的值,num||num>31的值。011
注意!3.2.2邏輯表達(dá)式對(duì)于&&,如果其左側(cè)表達(dá)式的值為假,則右側(cè)表達(dá)式不進(jìn)行求解(即不執(zhí)行)。
對(duì)于||,如果其左側(cè)表達(dá)式的值為真,則右側(cè)表達(dá)式不進(jìn)行求解。例如,假設(shè)n1、n2、n3、n4、x、y的值分別為1、2、3、4、1、1,則求解表達(dá)式“(x=n1>n2)&&(y=n3>n4)”后,x的值變?yōu)椋鴜的值等于!01C99所增加的一種數(shù)據(jù)類(lèi)型類(lèi)型標(biāo)識(shí)符:_Boolstdbool.h頭文件中,把bool定義為該類(lèi)型的別名
#definebool
_Bool同時(shí)定義:#definetrue
1
#definefalse
0
【注】在不支持c99標(biāo)準(zhǔn)的編譯器上(如VC++6.0)不能使用。#include<stdio.h>intmain(){
_Boolb; b=2000; printf("%d\n",b); return0;}1#include<stdio.h>#include<stdbool.h>intmain(){
boolb; b=2000; if(b==true)printf("%d\n",b); return0;}3.3.1if語(yǔ)句的形式3.3if語(yǔ)句C語(yǔ)言中的if語(yǔ)句有三種基本形式。1.單分支if語(yǔ)句一般形式: if(表達(dá)式)
語(yǔ)句例如: if(x>y) printf("%d",x);表達(dá)式語(yǔ)句假真【例3-1】求x的絕對(duì)值。3.3.1if語(yǔ)句的形式思路:先求解表達(dá)式x<0的值,判斷x是否為負(fù)數(shù),如果結(jié)果為真,則執(zhí)行內(nèi)嵌的語(yǔ)句x=-x;,否則不執(zhí)行該語(yǔ)句。掌握if語(yǔ)句的一般形式與求解過(guò)程。3.3.1if語(yǔ)句的形式【例3-1】求x的絕對(duì)值。#include<stdio.h>
intmain()
{ intx; scanf("%d",&x); if(x<0) x=-x;//if的內(nèi)嵌語(yǔ)句 printf("|x|=%d\n",x); return0;}
運(yùn)行一次,輸入:-10運(yùn)行結(jié)果:|x|=10再運(yùn)行一次,輸入:-10運(yùn)行結(jié)果:|x|=10【例3-2】輸入兩個(gè)整數(shù),按由小到大的順序輸出這兩個(gè)數(shù)。3.3.1if語(yǔ)句的形式本題要點(diǎn): 1.交換變量?jī)?nèi)容的方法 2.復(fù)合語(yǔ)句使用3.3.1if語(yǔ)句的形式【例3-2】輸入兩個(gè)整數(shù),按由小到大的順序輸出這兩個(gè)數(shù)。#include<stdio.h>
intmain()
{ intx,y,t; scanf("%d,%d",&x,&y); if(x>y) {t=x;x=y;y=t;}//復(fù)合語(yǔ)句 printf("%d,%d\n",x,y); return0;}
運(yùn)行一次,輸入:10,5運(yùn)行結(jié)果:5,10思考:
去掉{},程序結(jié)果?xyt87878voidmain(){inta,b,c,temp;printf("Pleaseinputthreenumbers:");scanf("%d,%d,%d",&a,&b,&c);if(a>b){temp=a;a=b;b=temp;}if(b>c){temp=b;b=c;c=temp;}if(a>b){temp=a;a=b;b=temp;}printf("%d,%d,%d\n",a,b,c);} 輸入任意三個(gè)數(shù)a、b、c,按從小到大的順序排序輸出。2.雙分支if語(yǔ)句3.3.1if語(yǔ)句的形式一般形式: if(表達(dá)式)
語(yǔ)句1 else
語(yǔ)句2例如: if(x>0) printf("%d",x); else printf("%d",-x);表達(dá)式語(yǔ)句1語(yǔ)句2真假【例3-3】求兩個(gè)數(shù)中較大者。3.3.1if語(yǔ)句的形式
使用雙分支if語(yǔ)句實(shí)現(xiàn)。3.3.1if語(yǔ)句的形式【例3-3】求兩個(gè)數(shù)中較大者。#include<stdio.h>
intmain()
{ intx,y,max; scanf("%d,%d",&x,&y); if(x>y) max=x;//if的內(nèi)嵌語(yǔ)句 else max=y;//else的內(nèi)嵌語(yǔ)句 printf("max=%d\n",max); return0;}
運(yùn)行一次,輸入:5,10運(yùn)行結(jié)果:Max=10
注意!3.2.2邏輯表達(dá)式
else不能作為語(yǔ)句單獨(dú)使用,它必須是if語(yǔ)句的一部分,與if配對(duì)使用。例如: if(x>y) {x=y;y++;} else {y=x;x--;}如果寫(xiě)成: if(x>y) x=y;y++; else {y=x;x--;}語(yǔ)法錯(cuò)誤3.多分支if語(yǔ)句3.3.1if語(yǔ)句的形式多分支if語(yǔ)句可以看成雙分支if語(yǔ)句的擴(kuò)展形式,即在雙分支if語(yǔ)句中,else的內(nèi)嵌語(yǔ)句是另一個(gè)雙分支的if語(yǔ)句。一般形式: if(表達(dá)式1)語(yǔ)句1 elseif(表達(dá)式2)語(yǔ)句2 elseif(表達(dá)式3)語(yǔ)句3 …… else語(yǔ)句n多分支if語(yǔ)句的執(zhí)行過(guò)程:3.3.1if語(yǔ)句的形式如果表達(dá)式1的值為真,則執(zhí)行語(yǔ)句1,否則判斷表達(dá)式2。如果表達(dá)式2的值為真,則執(zhí)行語(yǔ)句2,否則判斷表達(dá)式3,依次類(lèi)推。如果所有表達(dá)式的值都為假,則執(zhí)行語(yǔ)句n?!纠?-4】輸入一個(gè)百分制的分?jǐn)?shù),輸出相應(yīng)的等級(jí)。3.3.1if語(yǔ)句的形式要求如下:
成績(jī)>=90,輸出A 89>=成績(jī)>=80,輸出B 79>=成績(jī)>=70,輸出C 69>=成績(jī)>=60,輸出D
成績(jī)<60,輸出E本題要求使用多分枝if語(yǔ)句實(shí)現(xiàn)。3.3.1if語(yǔ)句的形式【例3-4】輸入一個(gè)百分制的分?jǐn)?shù),輸出相應(yīng)的等級(jí)。#include<stdio.h>
intmain()
{ intscore; scanf("%d",&score); if(score>=90)printf("scoregradeisA\n");elseif(score>=80)printf("scoregradeisB\n");elseif(score>=70)printf("scoregradeisC\n");elseif(score>=60)printf("scoregradeisD\n");elseprintf("scoregradeisE\n");return0;}
運(yùn)行一次,輸入:85運(yùn)行結(jié)果:scoregradeisB再運(yùn)行一次,輸入:55運(yùn)行結(jié)果:scoregradeisE在if語(yǔ)句中,if和else的內(nèi)嵌語(yǔ)句可以是任何語(yǔ)句,如果又是if語(yǔ)句,則稱(chēng)為if語(yǔ)句的嵌套。3.3.2if語(yǔ)句的嵌套3.3.2if語(yǔ)句的嵌套例如:if(a>b) if(b>c) printf("%disbiggest\n",a);elseprintf("%disnotbiggest\n",a);以上代碼中else與哪個(gè)if配對(duì)?3.3.2if語(yǔ)句的嵌套C語(yǔ)言規(guī)定:else總是與它上面最近的未曾配對(duì)的if配對(duì)。即:if(a>b) if(b>c) printf("%disbiggest\n",a); else printf("%disnotbiggest\n",a);else與這個(gè)if配對(duì)if(a>b){ if(b>c) printf("%disbiggest\n",a);} else printf("%disnotbiggest\n",a);else與這個(gè)if配對(duì)3.3.2if語(yǔ)句的嵌套【例3-5】求三個(gè)數(shù)中最大者。本題使用嵌套if語(yǔ)句實(shí)現(xiàn)。3.3.1if語(yǔ)句的嵌套【例3-5】求三個(gè)數(shù)中最大者。#include<stdio.h>
intmain()
{ intx=4,y=5,z=2,max; max=x; if(z>y) {if(z>x) max=z; } else if(y>x) max=y; printf("max=%d",max); return0;}運(yùn)行結(jié)果:max=5或者寫(xiě)為:……if(num1>num2)
max=num1;
else
max=num2;if(num3>max)
max=num3;……或者max=num1;if(num2>max)max=num2;3.4switch語(yǔ)句switch語(yǔ)句是專(zhuān)門(mén)用于處理多分支結(jié)構(gòu)的條件選擇語(yǔ)句,又稱(chēng)開(kāi)關(guān)語(yǔ)句。一般形式為: switch(表達(dá)式) { case常量表達(dá)式1:語(yǔ)句1;[break;] case常量表達(dá)式2:語(yǔ)句2;[break;] ……. case常量表達(dá)式n:語(yǔ)句n;[break;] [default:語(yǔ)句n+1;[break;]] }3.4switch語(yǔ)句switch語(yǔ)句的執(zhí)行過(guò)程:1)求解switch后面括號(hào)中表達(dá)式的值。2)用此值依次與各個(gè)case后面的常量表達(dá)式的值進(jìn)行比較。3)匹配,則執(zhí)行此case后面的語(yǔ)句。4)若括號(hào)中表達(dá)式的值與所有case后面的常量表達(dá)式都不相等,則執(zhí)行default后面的語(yǔ)句。5)語(yǔ)句執(zhí)行后若遇到break語(yǔ)句或switch的結(jié)束符“}”就終止switch語(yǔ)句。6)否則就繼續(xù)執(zhí)行下一個(gè)case后面的語(yǔ)句,依次類(lèi)推。3.4switch語(yǔ)句例如:執(zhí)行以下程序代碼intno;scanf("%d",&no);switch(no){case1:printf("first\n");break;case2:printf("second\n");case3:printf("third\n");}運(yùn)行一次:輸入:1運(yùn)行結(jié)果:first再運(yùn)行一次:輸入:2運(yùn)行結(jié)果:secondthird3.4switch語(yǔ)句說(shuō)明:(1)case和常量表達(dá)式之間要有空格,常量表達(dá)式只起語(yǔ)句標(biāo)號(hào)作用,跳出switch必須用break語(yǔ)句。如果每個(gè)case和default后面都有break語(yǔ)句,則它們出現(xiàn)的次序不影響執(zhí)行結(jié)果。例如:switch(no){ default:printf("last\n");break; case2:printf("second\n");break; case1:printf("first\n");break; case3:printf("third\n");break;}3.4switch語(yǔ)句說(shuō)明:(2)case后面常量表達(dá)式的值必須互不相同。(3)多個(gè)case可共用一組執(zhí)行語(yǔ)句,case后可包含多個(gè)可執(zhí)行語(yǔ)句,且不必加“{}”,進(jìn)入某個(gè)case后,會(huì)順序執(zhí)行本case后面的所有語(yǔ)句。(4)default部分可以省略。如果省略,當(dāng)switch后面括號(hào)中表達(dá)式的值與所有case后面的常量表達(dá)式的值都不相等時(shí),則不執(zhí)行任何一個(gè)分支直接退出switch語(yǔ)句。(5)switch語(yǔ)句可以嵌套。3.4switch語(yǔ)句【例3-6】將例3-4進(jìn)行修改,用switch語(yǔ)句實(shí)現(xiàn)。輸入一個(gè)百分制的分?jǐn)?shù),輸出相應(yīng)的等級(jí)。
比較switch語(yǔ)句與嵌套if語(yǔ)句的差異。3.4switch語(yǔ)句【例3-6】將例3-4進(jìn)行修改,用switch語(yǔ)句實(shí)現(xiàn)。#include<stdio.h>
intmain()
{ intscore; scanf("%d",&score); switch(score/10) {case10: case9:printf("scoregradeisA\n");break; case8:printf("scoregradeisB\n");break; case7:printf("scoregradeisC\n");break; case6:printf("scoregradeisD\n");break; default:printf("scoregradeisE\n");break;} return0;}case10和case9共用一組語(yǔ)句3.4switch語(yǔ)句【例3-7】嵌套的switch語(yǔ)句
閱讀程序,分析結(jié)果。3.4switch語(yǔ)句【例3-7】嵌套的switch語(yǔ)句。#include<stdio.h>
intmain()
{intx=1,y=0,a=0,b=0;switch(x){case1: switch(y) {case0:a++;break; case1:b++;break;} case2:a++;b++;break; case3:a++;b++;} printf("\na=%d,b=%d",a,b); return0;}運(yùn)行結(jié)果:a=2,b=1//break語(yǔ)句終止switch(y)//break語(yǔ)句終止switch(y)//break語(yǔ)句終止switch(x)3.5條件運(yùn)算符和條件表達(dá)式條件運(yùn)算符,是C語(yǔ)言中唯一的一個(gè)三元運(yùn)算符。條件表達(dá)式,由條件運(yùn)算符連接的式子。一般形式為:表達(dá)式1?表達(dá)式2:表達(dá)式3例如:x>y?x:y3.5條件運(yùn)算符和條件表達(dá)式說(shuō)明(1)條件表達(dá)式的值求解過(guò)程為:先求解表達(dá)式1,如果表達(dá)式1的值為真(非0),則將表達(dá)式2的值作為整個(gè)條件表達(dá)式的值,否則將表達(dá)式3的值作為整個(gè)條件表達(dá)式的值。例如:max=x>y?x:y;//將x和y中較大者賦給maxy=x>0?x:-x;//將x的絕對(duì)值賦給ya>b?(max=a):(max=b);a>b?printf(“%d”,a):printf(“%d”,b);3.5條件運(yùn)算符和條件表達(dá)式說(shuō)明(2)條件運(yùn)算符的優(yōu)先級(jí)高于賦值運(yùn)算符和逗號(hào)運(yùn)算符,低于其它運(yùn)算符。例如:
a%3?a+2:a-2等價(jià)于(a%3)?(a+2):(a-2)a>5&&a<10?a++:a--等價(jià)于(a>5&&a<10)?(a++):(a--)b=a+3>7?10:20等價(jià)于b=((a+3)>7?10:20)3.5條件運(yùn)算符和條件表達(dá)式說(shuō)明(3)條件運(yùn)算符的結(jié)合方向?yàn)樽杂抑磷?。條件表達(dá)式可以嵌套,當(dāng)一個(gè)條件表達(dá)式中出現(xiàn)多個(gè)條件運(yùn)算符時(shí),應(yīng)該將位于最右邊的問(wèn)號(hào)與離它最近的冒號(hào)配對(duì),并按這一原則正確區(qū)分各條件運(yùn)算符的運(yùn)算對(duì)象。例如:a>b?10:b>c?20:30等價(jià)于a>b?10:(b>c?20:30)3.6程序舉例1.從鍵盤(pán)輸入一個(gè)字符,判斷該字符是否為大寫(xiě)字母,如果是轉(zhuǎn)換為小寫(xiě)字母輸出,如果不是,原樣輸出。
本題要點(diǎn): 1.ASCII碼應(yīng)用 2.判斷某個(gè)字符是否為大寫(xiě)字母的方法。3.6程序舉例#include<stdio.h>
intmain()
{ charch; printf("Inputacharacter:"); scanf("%c",&ch); ch=(ch>='A'&&ch<='Z')?(ch+32):ch; printf("ch=%c\n",ch); return0;}運(yùn)行一次,輸入:A運(yùn)行結(jié)果:a2.編寫(xiě)程序,用switch語(yǔ)句處理菜單命令。解題思路:在許多應(yīng)用程序中,用菜單對(duì)流程進(jìn)行控制,例如從鍵盤(pán)輸入一個(gè)’A’或’a’字符,就會(huì)執(zhí)行A操作,輸入一個(gè)’B’或’b’字符,就會(huì)執(zhí)行B操作,等等。#include<stdio.h>intmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;ch=getchar();switch(ch){case'a':case‘A’:action1(a,b);break;
case'b':case‘
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 關(guān)于2025年度地鐵線(xiàn)路運(yùn)營(yíng)的承包合同2篇
- 二零二五年度工業(yè)自動(dòng)化設(shè)備買(mǎi)賣(mài)與現(xiàn)場(chǎng)安裝合同4篇
- 二零二五版全新技術(shù)開(kāi)發(fā)合同標(biāo)的及研發(fā)內(nèi)容和驗(yàn)收標(biāo)準(zhǔn)3篇
- 2025年度商業(yè)地產(chǎn)項(xiàng)目場(chǎng)地租賃與商業(yè)租賃管理合同4篇
- 2025年鋁單板加工技術(shù)改造項(xiàng)目合同范本4篇
- 2024美發(fā)店市場(chǎng)營(yíng)銷(xiāo)策劃與品牌推廣合同3篇
- 二零二五年新型欄桿研發(fā)、生產(chǎn)安裝與推廣應(yīng)用合同3篇
- 2025年度能源交易平臺(tái)煤炭銷(xiāo)售居間合同范本4篇
- 2025年度茶葉電商合作推廣合同范本4篇
- 智能照明系統(tǒng)開(kāi)發(fā)與推廣合同
- 銷(xiāo)售禮盒營(yíng)銷(xiāo)方案
- 領(lǐng)導(dǎo)溝通的藝術(shù)
- 發(fā)生用藥錯(cuò)誤應(yīng)急預(yù)案
- 南潯至臨安公路(南潯至練市段)公路工程環(huán)境影響報(bào)告
- 綠色貸款培訓(xùn)課件
- 大學(xué)生預(yù)征對(duì)象登記表(樣表)
- 主管部門(mén)審核意見(jiàn)三篇
- 初中數(shù)學(xué)校本教材(完整版)
- 父母教育方式對(duì)幼兒社會(huì)性發(fā)展影響的研究
- 新課標(biāo)人教版數(shù)學(xué)三年級(jí)上冊(cè)第八單元《分?jǐn)?shù)的初步認(rèn)識(shí)》教材解讀
- (人教版2019)數(shù)學(xué)必修第一冊(cè) 第三章 函數(shù)的概念與性質(zhì) 復(fù)習(xí)課件
評(píng)論
0/150
提交評(píng)論