C語言第3章課件-_第1頁
C語言第3章課件-_第2頁
C語言第3章課件-_第3頁
C語言第3章課件-_第4頁
C語言第3章課件-_第5頁
已閱讀5頁,還剩113頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章分支結(jié)構(gòu)程序設(shè)計

3.1關(guān)系運算符和關(guān)系表達(dá)式3.2邏輯運算符和邏輯表達(dá)式3.3if語句3.4switch語句例題鏈接第3章分支結(jié)構(gòu)程序設(shè)計3.1關(guān)系運算符和關(guān)系表達(dá)式例題鏈接

例3.5例3.4例3.6例3.7例3.9例3.10例3.11例3.12例3.1例3.2例3.3例3.13例3.8例題鏈接例3.5例3.4例3.6例3.7例3.9例3.103.1關(guān)系運算符和關(guān)系表達(dá)式3.1.1關(guān)系運算符3.1.2關(guān)系表達(dá)式

P56返回所謂“關(guān)系運算”實際上是“比較運算”。將兩個值進(jìn)行比較,判斷其比較的結(jié)果是否符合給定的條件。

3.1關(guān)系運算符和關(guān)系表達(dá)式3.1.1關(guān)系運算符P563.1.1關(guān)系運算符共6種:

>、>=、<、<=、==、!=(不等于)關(guān)系運算符結(jié)合方向:自左至右

>、>=、<、<=的優(yōu)先級高于==、!=關(guān)系運算符隱含“是否”的含義例如:“x>0”隱含x的值是否大于0P563.1.1關(guān)系運算符共6種:P563.1.2關(guān)系表達(dá)式用關(guān)系運算符將兩個表達(dá)式(可以是算術(shù)表達(dá)式或關(guān)系表達(dá)式、邏輯表達(dá)式、賦值表達(dá)式、字符表達(dá)式)連接起來的式子,稱關(guān)系表達(dá)式。例如,下面都是合法的關(guān)系表達(dá)式:

a>b,a+b>b+c,(a=3)>(b=5),'a'<'b',(a>b)>(b<c)P563.1.2關(guān)系表達(dá)式用關(guān)系運算符將兩個表達(dá)式(可以是算術(shù)3.1.2關(guān)系表達(dá)式判斷結(jié)果只有兩種可能:“真”或“假”關(guān)系成立為“真”,不成立為“假”只能是0或1表達(dá)式的值1結(jié)果為“真”時0結(jié)果為“假”時P563.1.2關(guān)系表達(dá)式判斷結(jié)果只有兩種可能:“真”或“假”x=1;printf(“%d”,x>0);真輸出1【例3.1】假設(shè)a、b、x為整型變量,y為單 精度型變量,請觀察輸出結(jié)果。x=1;真輸出1【例3.1】假設(shè)a、b、x為整型變量,y為x=1;a=x==0;printf(“%d”,a);

假輸出0【例3.1】假設(shè)a、b、x為整型變量,y為單 精度型變量,請觀察輸出結(jié)果。x=1;假輸出0【例3.1】假設(shè)a、b、x為整型變量,yx=3;a=x>0;b=x<5;printf(“%d”,a==b);真a的值1真b的值1真輸出1【例3.1】假設(shè)a、b、x為整型變量,y為單 精度型變量,請觀察輸出結(jié)果。x=3;真a的值1真b的值1真輸出1【例3.1】假設(shè)x=-3;printf(“%d”,0<=x<=2);假0<=2輸出1注意:表達(dá)式0<=x<=2不能代表x的取值范圍0≤x≤2結(jié)合方向為自左至右【例3.1】假設(shè)a、b、x為整型變量,y為單 精度型變量,請觀察輸出結(jié)果。真x=-3;假0<=2輸出1注意:表達(dá)式0<=x<=2不y=45.3219;printf(“%d”,y==45.3219);

假輸出0注意:存放在內(nèi)存中的實型數(shù)總有誤差避免使用判斷“實型數(shù)”==“實型數(shù)”這樣的關(guān)系表達(dá)式?!纠?.1】假設(shè)a、b、x為整型變量,y為單 精度型變量,請觀察輸出結(jié)果。y=45.3219;假輸出0注意:存放在內(nèi)存中的實型數(shù)總3.2邏輯運算符和邏輯表達(dá)式3.2.1邏輯運算符3.2.2邏輯表達(dá)式P57返回3.2邏輯運算符和邏輯表達(dá)式3.2.1邏輯運算符P573.2.1邏輯運算符&&:邏輯與x>=0&&x<=2(雙目運算符,結(jié)合方向:自左至右)||:邏輯或x<-3||x>3(雙目運算符,結(jié)合方向:自左至右)!:邏輯非!(x>3)(一目運算符,結(jié)合方向:自右至左)優(yōu)先次序:?。?&--||P573.2.1邏輯運算符&&:邏輯與x>3.2.1邏輯運算符邏輯運算的真值表:P57a b!a !b a&&ba||b 真 真 假 假 真 真 真 假 假 真 假 真 假 真 真 假 假 真 假 假 真 真 假 假 3.2.1邏輯運算符邏輯運算的真值表:P57a3.2.2邏輯表達(dá)式用邏輯運算符將關(guān)系表達(dá)式或邏輯量連接起來的式子就是邏輯表達(dá)式。判斷結(jié)果只有兩種可能:“真”或“假”邏輯運算的結(jié)果為非零時:“真”邏輯運算的結(jié)果為零時:“假”表達(dá)式的值1結(jié)果為“真”時0結(jié)果為“假”時也只能是0或1P583.2.2邏輯表達(dá)式用邏輯運算符將關(guān)系表達(dá)式或邏輯量連接【例3.2】邏輯表達(dá)式的示例。x=1;printf("%d",x>=0&&x<=2);x=5;printf("%d",x>=0&&x<=2);printf("%d",x<-3||x>3);真真輸出1真假輸出0真輸出1假【例3.2】邏輯表達(dá)式的示例。x=1;x=5;真x=5;printf("%d",!x);printf("%d",3&&‘A’);printf("%d",(x=2)||0);printf("x=%d\n",x);x=0;printf("%d",x<-3||x>3);printf("%d",!x);輸出0輸出1輸出0輸出1輸出1輸出x=2x=5;x=0;輸出0輸出1輸出0輸出1邏輯運算的規(guī)則&&:兩個運算量都為非零,結(jié)果是真,值為1;否則,結(jié)果是假,值為0||:至少有一個運算量為非零,結(jié)果是真,值為1;否則,結(jié)果為假,值為0!:運算量為零,結(jié)果是真,值為1;否則,結(jié)果為假,值為0邏輯運算的規(guī)則&&:兩個運算量都為非零,結(jié)果是真,值為1;邏輯表達(dá)式的求解在邏輯表達(dá)式的求解中,并不是所有的邏輯運算符都被執(zhí)行,只是在必須執(zhí)行下一個邏輯運算符才能求出表達(dá)式的解時,才執(zhí)行該運算符。a&&b&&c只有a為真(非0)時,才需要判別b的值,只有a和b都為真的情況下才需要判別c的值。只要a為假,就不必判別b和c(此時整個表達(dá)式已確定為假)。如果a為真,b為假,不判別c。a||b||c只要a為真(非0),就不必判斷b和c;只有a為假,才判別b;a和b都為假才判別c。邏輯表達(dá)式的求解在邏輯表達(dá)式的求解中,并不是所有的邏輯運算符也就是說,對&&運算符來說,只有a≠0,才繼續(xù)進(jìn)行右面的運算。對運算符‖來說,只有a=0,才繼續(xù)進(jìn)行其右面的運算。因此,如果有下面的邏輯表達(dá)式:

(m=a>b)

&&

(n=c>d)當(dāng)a=1,b=2,c=3,d=4,m和n的原值為1時,由于“a>b”的值為0,因此m=0,而“n=c>d”不被執(zhí)行,因此n的值不是0而仍保持原值1。這點請大家注意。也就是說,對&&運算符來說,只有a≠0,才繼續(xù)進(jìn)行右面的運算【例3.3】編寫一個含有特殊邏輯表達(dá)式的程序?!纠?.3】編寫一個含有特殊邏輯表達(dá)式的程序。#include<stdio.h>main(){ inta=1,b=0; printf("%d",0&&(a=2)); printf("a=%d",a); printf("%d",5&&(a=2)); printf("a=%d",a); b=1; printf("%d",5||(b=2)); printf("b=%d",b); printf("%d",0||(b=2)); printf("b=%d\n",b);}a的值仍為1a的值為2b的值仍為1

b的值為2#include<stdio.h>a的值仍為1a的值為2運算的先后順序:!算術(shù)運算符關(guān)系運算符&&||賦值運算符先后運算的先后順序:!先后3.3if語句3.3.1if語句的一般形式3.3.2if語句的嵌套P59返回if語句是用來判定所給定的條件是否滿足,根據(jù)判定的結(jié)果(真或假)決定執(zhí)行給出的兩種操作之一。3.3if語句3.3.1if語句的一般形式P59返回i3.3.1if語句的一般形式if語句有兩種形式

1.不帶else的if語句

2.帶else的if語句P603.3.1if語句的一般形式if語句有兩種形式P601.不帶else的if語句【例3.4】老大和老二各拿了一包糖,現(xiàn)要保證老大手中的糖比老二的少。編寫程序?qū)崿F(xiàn)其功能。1.不帶else的if語句【例3.4】老大和老二各拿了一包#include<stdio.h>main(){ inta=0,b=0,t=0; printf("Inputa,b:");scanf("%d%d",&a,&b); if(a>b) { t=a; a=b; b=t;} printf("a=%d,b=%d\n",a,b);}25注意:縮進(jìn)格式關(guān)鍵字ifa=2,b=552a=2,b=5#include<stdio.h>不帶else的if語句形式if(表達(dá)式)

if子句任意合法表達(dá)式

語法上要求一條語句不帶else的if語句形式if(表達(dá)式)任意合法語法上要表達(dá)式if子句0非0執(zhí)行過程表達(dá)式if子句0非0執(zhí)行過程【例3.5】編寫輸出如下分段函數(shù)值的程 序,要求x的值從鍵盤輸入。

1(0<x≤1)x+1(x≤0)x(x>1)y=【例3.5】編寫輸出如下分段函數(shù)值的程 序#include<stdio.h>main(){floatx=0,y=0;scanf("%f",&x);if(x<=0)y=x+1;if(x>0&&x<=1)y=1;if(x>1)y=x;printf("x=%f,y=%f\n",x,y);}第1次運行:3x=3.000000,y=3.000000

if(x>1)y=x;第2次運行:-1x=0.500000,y=1.000000if(x<=0)y=x+1;第3次運行:0.5if(x>0&&x<=1)y=1;x=-1.000000,y=0.000000必須調(diào)試所有可能情況#include<stdio.h>第1次運行:3x【例3.6】輸入3個整數(shù),輸出其中最大數(shù)。輸入a、b、c的值max=amax=bmax<b?真假max<c?max=c真假輸出max的值【例3.6】輸入3個整數(shù),輸出其中最大數(shù)。輸入a、b、c的#include<stdio.h>main(){inta=0,b=0,c=0,max=0;printf("Inputa,b,c:");scanf("%d%d%d",&a,&b,&c);max=a;if(max<b)max=b;if(max<c)max=c;printf("%d,%d,%d,max=%d\n",a,b,c,max);}輸入357

輸出3,5,7,max=7還要試最大值在最前、中間的情況#include<stdio.h>輸入357輸討論題3.1在4個數(shù)中找最大數(shù)如何解決?在100個或更多的數(shù)中用同樣的方法找最大數(shù)方便嗎?討論題3.1在4個數(shù)中找最大數(shù)如何解決?在100個或更多的【例3.7】輸入3個不同的整數(shù)存放在

a、b、c中。從小到大排序。【例3.7】輸入3個不同的整數(shù)存放在

三個數(shù)排序過程7a6b5c675abc657abc{temp=a;a=b;b=temp;}

if(a>b){temp=b;b=c;c=temp;}

if(b>c)

冒泡{temp=a;a=b;b=temp;}if(a>b)

56冒泡冒泡法三個數(shù)排序過程7a6b5c675abc657abc{temp#include<stdio.h>main(){inta=0,b=0,c=0,temp=0;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("After:%d,%d,%d\n",a,b,c);}printf("Before:%d,%d,%d\n",a,b,c);建議加復(fù)合語句

{temp=a;a=b;b=temp;}#include<stdio.h>printf("Befo討論題3.2

在本題中將3個數(shù)改成4個數(shù),程序應(yīng)如何修改?若改成20(或更多)個數(shù),此方法方便嗎嗎?討論題3.2 在本題中將3個數(shù)改成4個數(shù),程序應(yīng)如何修改?2.帶else的if語句【例3.8】輸入一個整數(shù),如果是偶數(shù),則輸出Evennumber,如果是奇數(shù),則輸出Oddnumber。2.帶else的if語句【例3.8】輸入一個整數(shù),如果是偶#include<stdio.h>main(){inta=0;printf("Inputa:\n");scanf("%d",&a);if(a%2==0)printf("Evennumber\n");

else

printf("Oddnumber\n");}第1次運行16輸出Evennumber

第2次運行5輸出Oddnumber關(guān)鍵字#include<stdio.h>第1次運行16輸出帶else的if語句形式if(表達(dá)式)if子句elseelse子句必須與if配對使用語法上都要求一條語句語法上都要求一條語句帶else的if語句形式if(表達(dá)式)if子句必須與if執(zhí)行過程非0表達(dá)式if子句0else子句執(zhí)行過程非0表達(dá)式if子句0else子句3.3.2if語句的嵌套【例3.9】嵌套if語句的示例。P67在if語句中又包含一個或多個if語句稱為if語句的嵌套。3.3.2if語句的嵌套【例3.9】嵌套if語句的示例。inta=0,b=0;

a=b=3;if(a>5)if(a<10)a++;elsea--;if(b>5){if(b<10)b++;}elseb--;printf("a=%d,b=%d\n",a,b);內(nèi)嵌if語句構(gòu)成if子句是if(a>5)if(a>5)if(a>5)if(a>5)if子句是復(fù)合語句運行結(jié)果

a=3,b=2inta=0,b=0;內(nèi)嵌if語句構(gòu)成if子句是【例3.10】編寫求下面分段函數(shù)值的程序,其中x的值從鍵盤輸入。x3+5(當(dāng)0≤x<10時)x2+1(當(dāng)20≤x<30時)y=0(當(dāng)x<0時)2x2-x-6(當(dāng)10≤x<20時)x+3(當(dāng)x≥30時)【例3.10】編寫求下面分段函數(shù)值的程序,其中x的值從鍵盤輸scanf("%f",&x);

scanf("%f",&x);scanf("%f",&x);if(x<0)y=0;else

scanf("%f",&x);scanf("%f",&x);if(x<0)y=0;else if(x<10)y=x*x*x+5; else

scanf("%f",&x);scanf("%f",&x);if(x<0)y=0;else if(x<10)y=x*x*x+5; else if(x<20)y=2*x*x-x-6; else if(x<30)y=x*x+1; elsey=x+3;printf("x=%f,y=%f\n",x,y);被嵌套的if語句scanf("%f",&x);被嵌套的if語句簡化書寫格式(作用同上)if(x<0)y=0;elseif(x<10)y=x*x*x+5;elseif(x<20)y=2*x*x-x-6;elseif(x<30)y=x*x+1;elsey=x+3;只執(zhí)行其中一條測試時應(yīng)至少運行5次簡化書寫格式(作用同上)if(x<0)y=0;只執(zhí)行其中3.4switch語句解決多分支問題P69返回3.4switch語句解決多分支問題P69返回【例3.11】從鍵盤輸入一個整數(shù)輸入1時顯示A輸入2時顯示B輸入3時顯示C輸入其他數(shù)時顯示D

【例3.11】從鍵盤輸入一個整數(shù)scanf("%d",&a);switch(a){case1:printf(”A”);break;

case2:printf(”B”);break;

case3:printf(”C”);break;

default:printf(”D”);break;}關(guān)鍵字第一次運行輸入11輸出A退出switch語句體第二次運行輸入22輸出B退出switch語句體入口入口第三次運行輸入33入口輸出C退出switch語句體第四次運行輸入55入口輸出D退出switch語句體scanf("%d",&a);關(guān)鍵字第一次運行輸入11switch語句的一般形式switch(表達(dá)式){case常量表達(dá)式1:語句組1break;case常量表達(dá)式2:語句組2break;……case常量表達(dá)式n:語句組nbreak;default:語句組n+1break;}整型或字符型值不能相等switch語句常用于處理鍵盤命令switch語句的一般形式switch(表達(dá)式)執(zhí)行過程(以例3.11為例)a=?輸入a的值輸出A輸出B輸出C輸出D=1=2=3=其他執(zhí)行過程(以例3.11為例)a=?輸入a的值輸出A輸出B輸【例3.12】寫出下面程序段的運行結(jié)果。scanf("%d",&a);switch(a){case1:printf(”A”);case2:printf(”B”);case3:printf(”C”);break;default:printf(”D”);}輸入1輸出ABC退出switch語句體輸入2輸出BC退出switch語句體break作用【例3.12】寫出下面程序段的運行結(jié)果。scanf("%d【例3.13】輸入一個百分制成績,輸出成績等級A、B、C、D、E。90~100A80~89B70~79C60~69D0~59E否則顯示出錯信息【例3.13】輸入一個百分制成績,輸出成績等級A、B、C、Dscanf("%d",&score);if(score<0||score>100)printf("Error!\n");else{temp=score/10; switch(temp) {case10: case9:grade='A';break; case8:grade='B';break; case7:grade='C';break; case6:grade='D';break; default:grade='E';break; } printf("%d,%c\n",score,grade);}89,B89

85,B85

100,A100

可以空分?jǐn)?shù)段轉(zhuǎn)換成整數(shù)scanf("%d",&score);89,B8討論題3.3

如果將例3.13的功能改為:輸入的數(shù)據(jù)在85~100分為A,70~84分為B,55~69分為C,40~54分為D,0~39分為E,否則顯示出錯信息,那么應(yīng)將程序怎樣改寫?討論題3.3如果將例3.13的功能改為:輸入的數(shù)據(jù)在85~第3章分支結(jié)構(gòu)程序設(shè)計

3.1關(guān)系運算符和關(guān)系表達(dá)式3.2邏輯運算符和邏輯表達(dá)式3.3if語句3.4switch語句例題鏈接第3章分支結(jié)構(gòu)程序設(shè)計3.1關(guān)系運算符和關(guān)系表達(dá)式例題鏈接

例3.5例3.4例3.6例3.7例3.9例3.10例3.11例3.12例3.1例3.2例3.3例3.13例3.8例題鏈接例3.5例3.4例3.6例3.7例3.9例3.103.1關(guān)系運算符和關(guān)系表達(dá)式3.1.1關(guān)系運算符3.1.2關(guān)系表達(dá)式

P56返回所謂“關(guān)系運算”實際上是“比較運算”。將兩個值進(jìn)行比較,判斷其比較的結(jié)果是否符合給定的條件。

3.1關(guān)系運算符和關(guān)系表達(dá)式3.1.1關(guān)系運算符P563.1.1關(guān)系運算符共6種:

>、>=、<、<=、==、!=(不等于)關(guān)系運算符結(jié)合方向:自左至右

>、>=、<、<=的優(yōu)先級高于==、!=關(guān)系運算符隱含“是否”的含義例如:“x>0”隱含x的值是否大于0P563.1.1關(guān)系運算符共6種:P563.1.2關(guān)系表達(dá)式用關(guān)系運算符將兩個表達(dá)式(可以是算術(shù)表達(dá)式或關(guān)系表達(dá)式、邏輯表達(dá)式、賦值表達(dá)式、字符表達(dá)式)連接起來的式子,稱關(guān)系表達(dá)式。例如,下面都是合法的關(guān)系表達(dá)式:

a>b,a+b>b+c,(a=3)>(b=5),'a'<'b',(a>b)>(b<c)P563.1.2關(guān)系表達(dá)式用關(guān)系運算符將兩個表達(dá)式(可以是算術(shù)3.1.2關(guān)系表達(dá)式判斷結(jié)果只有兩種可能:“真”或“假”關(guān)系成立為“真”,不成立為“假”只能是0或1表達(dá)式的值1結(jié)果為“真”時0結(jié)果為“假”時P563.1.2關(guān)系表達(dá)式判斷結(jié)果只有兩種可能:“真”或“假”x=1;printf(“%d”,x>0);真輸出1【例3.1】假設(shè)a、b、x為整型變量,y為單 精度型變量,請觀察輸出結(jié)果。x=1;真輸出1【例3.1】假設(shè)a、b、x為整型變量,y為x=1;a=x==0;printf(“%d”,a);

假輸出0【例3.1】假設(shè)a、b、x為整型變量,y為單 精度型變量,請觀察輸出結(jié)果。x=1;假輸出0【例3.1】假設(shè)a、b、x為整型變量,yx=3;a=x>0;b=x<5;printf(“%d”,a==b);真a的值1真b的值1真輸出1【例3.1】假設(shè)a、b、x為整型變量,y為單 精度型變量,請觀察輸出結(jié)果。x=3;真a的值1真b的值1真輸出1【例3.1】假設(shè)x=-3;printf(“%d”,0<=x<=2);假0<=2輸出1注意:表達(dá)式0<=x<=2不能代表x的取值范圍0≤x≤2結(jié)合方向為自左至右【例3.1】假設(shè)a、b、x為整型變量,y為單 精度型變量,請觀察輸出結(jié)果。真x=-3;假0<=2輸出1注意:表達(dá)式0<=x<=2不y=45.3219;printf(“%d”,y==45.3219);

假輸出0注意:存放在內(nèi)存中的實型數(shù)總有誤差避免使用判斷“實型數(shù)”==“實型數(shù)”這樣的關(guān)系表達(dá)式?!纠?.1】假設(shè)a、b、x為整型變量,y為單 精度型變量,請觀察輸出結(jié)果。y=45.3219;假輸出0注意:存放在內(nèi)存中的實型數(shù)總3.2邏輯運算符和邏輯表達(dá)式3.2.1邏輯運算符3.2.2邏輯表達(dá)式P57返回3.2邏輯運算符和邏輯表達(dá)式3.2.1邏輯運算符P573.2.1邏輯運算符&&:邏輯與x>=0&&x<=2(雙目運算符,結(jié)合方向:自左至右)||:邏輯或x<-3||x>3(雙目運算符,結(jié)合方向:自左至右)!:邏輯非!(x>3)(一目運算符,結(jié)合方向:自右至左)優(yōu)先次序:?。?&--||P573.2.1邏輯運算符&&:邏輯與x>3.2.1邏輯運算符邏輯運算的真值表:P57a b!a !b a&&ba||b 真 真 假 假 真 真 真 假 假 真 假 真 假 真 真 假 假 真 假 假 真 真 假 假 3.2.1邏輯運算符邏輯運算的真值表:P57a3.2.2邏輯表達(dá)式用邏輯運算符將關(guān)系表達(dá)式或邏輯量連接起來的式子就是邏輯表達(dá)式。判斷結(jié)果只有兩種可能:“真”或“假”邏輯運算的結(jié)果為非零時:“真”邏輯運算的結(jié)果為零時:“假”表達(dá)式的值1結(jié)果為“真”時0結(jié)果為“假”時也只能是0或1P583.2.2邏輯表達(dá)式用邏輯運算符將關(guān)系表達(dá)式或邏輯量連接【例3.2】邏輯表達(dá)式的示例。x=1;printf("%d",x>=0&&x<=2);x=5;printf("%d",x>=0&&x<=2);printf("%d",x<-3||x>3);真真輸出1真假輸出0真輸出1假【例3.2】邏輯表達(dá)式的示例。x=1;x=5;真x=5;printf("%d",!x);printf("%d",3&&‘A’);printf("%d",(x=2)||0);printf("x=%d\n",x);x=0;printf("%d",x<-3||x>3);printf("%d",!x);輸出0輸出1輸出0輸出1輸出1輸出x=2x=5;x=0;輸出0輸出1輸出0輸出1邏輯運算的規(guī)則&&:兩個運算量都為非零,結(jié)果是真,值為1;否則,結(jié)果是假,值為0||:至少有一個運算量為非零,結(jié)果是真,值為1;否則,結(jié)果為假,值為0!:運算量為零,結(jié)果是真,值為1;否則,結(jié)果為假,值為0邏輯運算的規(guī)則&&:兩個運算量都為非零,結(jié)果是真,值為1;邏輯表達(dá)式的求解在邏輯表達(dá)式的求解中,并不是所有的邏輯運算符都被執(zhí)行,只是在必須執(zhí)行下一個邏輯運算符才能求出表達(dá)式的解時,才執(zhí)行該運算符。a&&b&&c只有a為真(非0)時,才需要判別b的值,只有a和b都為真的情況下才需要判別c的值。只要a為假,就不必判別b和c(此時整個表達(dá)式已確定為假)。如果a為真,b為假,不判別c。a||b||c只要a為真(非0),就不必判斷b和c;只有a為假,才判別b;a和b都為假才判別c。邏輯表達(dá)式的求解在邏輯表達(dá)式的求解中,并不是所有的邏輯運算符也就是說,對&&運算符來說,只有a≠0,才繼續(xù)進(jìn)行右面的運算。對運算符‖來說,只有a=0,才繼續(xù)進(jìn)行其右面的運算。因此,如果有下面的邏輯表達(dá)式:

(m=a>b)

&&

(n=c>d)當(dāng)a=1,b=2,c=3,d=4,m和n的原值為1時,由于“a>b”的值為0,因此m=0,而“n=c>d”不被執(zhí)行,因此n的值不是0而仍保持原值1。這點請大家注意。也就是說,對&&運算符來說,只有a≠0,才繼續(xù)進(jìn)行右面的運算【例3.3】編寫一個含有特殊邏輯表達(dá)式的程序?!纠?.3】編寫一個含有特殊邏輯表達(dá)式的程序。#include<stdio.h>main(){ inta=1,b=0; printf("%d",0&&(a=2)); printf("a=%d",a); printf("%d",5&&(a=2)); printf("a=%d",a); b=1; printf("%d",5||(b=2)); printf("b=%d",b); printf("%d",0||(b=2)); printf("b=%d\n",b);}a的值仍為1a的值為2b的值仍為1

b的值為2#include<stdio.h>a的值仍為1a的值為2運算的先后順序:!算術(shù)運算符關(guān)系運算符&&||賦值運算符先后運算的先后順序:!先后3.3if語句3.3.1if語句的一般形式3.3.2if語句的嵌套P59返回if語句是用來判定所給定的條件是否滿足,根據(jù)判定的結(jié)果(真或假)決定執(zhí)行給出的兩種操作之一。3.3if語句3.3.1if語句的一般形式P59返回i3.3.1if語句的一般形式if語句有兩種形式

1.不帶else的if語句

2.帶else的if語句P603.3.1if語句的一般形式if語句有兩種形式P601.不帶else的if語句【例3.4】老大和老二各拿了一包糖,現(xiàn)要保證老大手中的糖比老二的少。編寫程序?qū)崿F(xiàn)其功能。1.不帶else的if語句【例3.4】老大和老二各拿了一包#include<stdio.h>main(){ inta=0,b=0,t=0; printf("Inputa,b:");scanf("%d%d",&a,&b); if(a>b) { t=a; a=b; b=t;} printf("a=%d,b=%d\n",a,b);}25注意:縮進(jìn)格式關(guān)鍵字ifa=2,b=552a=2,b=5#include<stdio.h>不帶else的if語句形式if(表達(dá)式)

if子句任意合法表達(dá)式

語法上要求一條語句不帶else的if語句形式if(表達(dá)式)任意合法語法上要表達(dá)式if子句0非0執(zhí)行過程表達(dá)式if子句0非0執(zhí)行過程【例3.5】編寫輸出如下分段函數(shù)值的程 序,要求x的值從鍵盤輸入。

1(0<x≤1)x+1(x≤0)x(x>1)y=【例3.5】編寫輸出如下分段函數(shù)值的程 序#include<stdio.h>main(){floatx=0,y=0;scanf("%f",&x);if(x<=0)y=x+1;if(x>0&&x<=1)y=1;if(x>1)y=x;printf("x=%f,y=%f\n",x,y);}第1次運行:3x=3.000000,y=3.000000

if(x>1)y=x;第2次運行:-1x=0.500000,y=1.000000if(x<=0)y=x+1;第3次運行:0.5if(x>0&&x<=1)y=1;x=-1.000000,y=0.000000必須調(diào)試所有可能情況#include<stdio.h>第1次運行:3x【例3.6】輸入3個整數(shù),輸出其中最大數(shù)。輸入a、b、c的值max=amax=bmax<b?真假max<c?max=c真假輸出max的值【例3.6】輸入3個整數(shù),輸出其中最大數(shù)。輸入a、b、c的#include<stdio.h>main(){inta=0,b=0,c=0,max=0;printf("Inputa,b,c:");scanf("%d%d%d",&a,&b,&c);max=a;if(max<b)max=b;if(max<c)max=c;printf("%d,%d,%d,max=%d\n",a,b,c,max);}輸入357

輸出3,5,7,max=7還要試最大值在最前、中間的情況#include<stdio.h>輸入357輸討論題3.1在4個數(shù)中找最大數(shù)如何解決?在100個或更多的數(shù)中用同樣的方法找最大數(shù)方便嗎?討論題3.1在4個數(shù)中找最大數(shù)如何解決?在100個或更多的【例3.7】輸入3個不同的整數(shù)存放在

a、b、c中。從小到大排序。【例3.7】輸入3個不同的整數(shù)存放在

三個數(shù)排序過程7a6b5c675abc657abc{temp=a;a=b;b=temp;}

if(a>b){temp=b;b=c;c=temp;}

if(b>c)

冒泡{temp=a;a=b;b=temp;}if(a>b)

56冒泡冒泡法三個數(shù)排序過程7a6b5c675abc657abc{temp#include<stdio.h>main(){inta=0,b=0,c=0,temp=0;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("After:%d,%d,%d\n",a,b,c);}printf("Before:%d,%d,%d\n",a,b,c);建議加復(fù)合語句

{temp=a;a=b;b=temp;}#include<stdio.h>printf("Befo討論題3.2

在本題中將3個數(shù)改成4個數(shù),程序應(yīng)如何修改?若改成20(或更多)個數(shù),此方法方便嗎嗎?討論題3.2 在本題中將3個數(shù)改成4個數(shù),程序應(yīng)如何修改?2.帶else的if語句【例3.8】輸入一個整數(shù),如果是偶數(shù),則輸出Evennumber,如果是奇數(shù),則輸出Oddnumber。2.帶else的if語句【例3.8】輸入一個整數(shù),如果是偶#include<stdio.h>main(){inta=0;printf("Inputa:\n");scanf("%d",&a);if(a%2==0)printf("Evennumber\n");

else

printf("Oddnumber\n");}第1次運行16輸出Evennumber

第2次運行5輸出Oddnumber關(guān)鍵字#include<stdio.h>第1次運行16輸出帶else的if語句形式if(表達(dá)式)if子句elseelse子句必須與if配對使用語法上都要求一條語句語法上都要求一條語句帶else的if語句形式if(表達(dá)式)if子句必須與if執(zhí)行過程非0表達(dá)式if子句0else子句執(zhí)行過程非0表達(dá)式if子句0else子句3.3.2if語句的嵌套【例3.9】嵌套if語句的示例。P67在if語句中又包含一個或多個if語句稱為if語句的嵌套。3.3.2if語句的嵌套【例3.9】嵌套if語句的示例。inta=0,b=0;

a=b=3;if(a>5)if(a<10)a++;elsea--;if(b>5){if(b<10)b++;}elseb--;printf("a=%d,b=%d\n",a,b);內(nèi)嵌if語句構(gòu)成if子句是if(a>5)if(a>5)if(a>5)if(a>5)if子句是復(fù)合語句運行結(jié)果

a=3,b=2inta=0,b=0;內(nèi)嵌if語句構(gòu)成if子句是【例3.10】編寫求下面分段函數(shù)值的程序,其中x的值從鍵盤輸入。x3+5(當(dāng)0≤x<10時)x2+1(當(dāng)20≤x<30時)y=0(當(dāng)x<0時)2x2-x-6(當(dāng)10≤x<20時)x+3(當(dāng)x≥30時)【例3.10】編寫求下面分段函數(shù)值的程序,其中x的值從鍵盤輸scanf("%f",&x);

scanf("%f",&x);scanf("%f",&x);if(x<0)y=0;else

scanf("%f",&x);scanf("%f",&x);if(x<0)y=0;else if(x<10)y=x*x*x+5; else

scanf("%f",&x);scanf("%f",&x);if(x<0)y=0;else if(x<10)y=x*x*x+5; else if(x<20)y=2*x*x-x-6; else if(x<30)y=x*x+1; elsey=x+3;printf("x=%f,y=%f\n",x,y);被嵌套的if語句scanf("%f",&x);被嵌套的if語句簡化書寫格式(作用同上)if(x<0)y=0;elseif(x<10)y=x*x*x+5;elseif(x<20)y=2*x*x-x-6;elseif(x<30)y=x*x+1;elsey=x+3;只執(zhí)行其中一條測試時應(yīng)至少運行5次簡化書寫格式(作用同上)if(x<0)y=0;只執(zhí)行其中3.4switch語句解決多分支問題P69返回3.4switch語句解決多分支問題P69返回【例3.11】從鍵

溫馨提示

  • 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

提交評論