政史地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頁,還剩61頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第4章選擇結(jié)構(gòu)程序設(shè)計

浙江傳媒學(xué)院電子信息系C

程序設(shè)計1第4章選擇結(jié)構(gòu)程序設(shè)計浙江傳媒學(xué)院電子信息系C程本章主要內(nèi)容表達式關(guān)系表達式邏輯表達式條件表達式語句if語句多分支語句(switch)2本章主要內(nèi)容表達式24.1關(guān)系運算符和關(guān)系表達式比較兩個量(x,y)之間的關(guān)系x<yx<=yx==yx>yx>=yx!=y比較的結(jié)果:

3>1假

1>3

intx=2,y=6;x=(y>3)x=(x>y)10x=1x=034.1關(guān)系運算符和關(guān)系表達式比較兩個量(x,y)之間關(guān)系表達式3<x<5x=1時x=4時(3<x)<5恒為14關(guān)系表達式3<x<544.2邏輯運算符和邏輯表達式3<x<5

035 xx>3并且

x<5

3<x&&x<5

邏輯表達式用邏輯運算符將關(guān)系表達式或邏輯量連接起來54.2邏輯運算符和邏輯表達式3<x<5邏輯表達式邏輯運算符

X&&YX||YX Y X Y

!X X與或非6邏輯運算符與或非6邏輯與

&&

邏輯或||邏輯非!(x>1)&&(y>1)(x>1)||(y>1)(x>1) !(x>1)即x<=1邏輯運算符7邏輯與&&邏輯或||邏輯表達式對于X&&Y,X和Y可以是:關(guān)系表達式或邏輯量x<=5&&x>=33&&5(x+y)&&7X,Y可以是任意表達式判斷邏輯量的真假非0表示真0表示假邏輯運算的結(jié)果1表示真0表示假8邏輯表達式對于X&&Y,X和Y可以是:X,Y可以是任4.3if語句4.3.1if語句的三種形式語句一般格式1.if(表達式)

語句功能:計算表達式的值,如果是一個非0值(即邏輯真),就執(zhí)行內(nèi)嵌語句,否則(即邏輯假)跳過內(nèi)嵌語句,順序執(zhí)行后續(xù)語句。內(nèi)嵌語句,可為:賦值語句函數(shù)調(diào)用語句控制語句復(fù)合語句空語句可為算術(shù)、關(guān)系、邏輯、賦值等表達式94.3if語句4.3.1if語句的三種形式功能:內(nèi)嵌語句if語句的算法:例如:⑴if(x>0)m++;⑵if(a>b){c=a;a=b;b=c;}

表達式非0

TF

語句N-S結(jié)構(gòu)圖語句流程圖NY表達式非0?10if語句的算法:例如:表達式非0N-S結(jié)構(gòu)圖語2.

if(表達式)

語句1

else語句2語句一般格式if(表達式)

語句1

else語句2

功能:計算表達式的值,如果它的值是一個非0值(邏輯真),就執(zhí)行內(nèi)嵌語句1,之后跳過內(nèi)嵌語句2,執(zhí)行后續(xù)語句;否則跳過內(nèi)嵌語句1,執(zhí)行內(nèi)嵌語句2,之后執(zhí)行后續(xù)語句。

112.if(表達式)語句1else語句2語句語句的算法:例如:⑴if(x>0)m++;elsem--;⑵if(ch>='a'&&ch<='z')

{ch=ch-32;

printf("%c\n",ch);}elseprintf("%c\n",ch);

表達式非0

TF

語句1語句2N-S結(jié)構(gòu)圖語句1

語句2流程圖NY表達式非0?12語句的算法:例如:表達式非0N-S結(jié)構(gòu)圖語句1多重分支語句語句一般格式if(表達式1)

語句1

elseif(表達式2)

語句2

……elseif(表達式m)

語句m

else語句

n功能:依次計算并判斷表達式i,為非0時執(zhí)行后面的語句,都為0時,執(zhí)行語句n無論執(zhí)行完那個語句分支,都轉(zhuǎn)到后續(xù)語句13多重分支語句語句一般格式13多重分支語句的算法流程圖表達式2?表達式1?語句n語句1

語句2

語句m…YNYNNY表達式m?14多重分支語句的算法流程圖表達式2?表達式1?語句n語句1多重分支語句的算法N-S結(jié)構(gòu)圖表達式1?

TF

表達式2?語句1TF

語句2…

表達式m?TF

語句m語句n例如:if(a<0)x=-1;elseif(a==0)x=0;elsex=1;15多重分支語句的算法N-S結(jié)構(gòu)圖表達式1?4.3.2if語句的嵌套如果if的內(nèi)嵌語句中又使用了一個if語句,則構(gòu)成if語句的嵌套。

【例】比較兩個整數(shù)的關(guān)系。#include<stdio.h>main(){intx,y;printf("EnterintegerXandY:");scanf("%d%d",&x,&y);

if(x!=y)

if(x>y)printf("X>Y\n");

elseprintf("X<Y\n");

elseprintf("X=Y\n");}應(yīng)該正確判斷:if的內(nèi)嵌語句if和else的配對運行jc4_a提倡縮格書寫有利于閱讀程序164.3.2if語句的嵌套如果if的內(nèi)嵌語句中又使用了一個

if語句嵌套的形式簡單if語句的嵌套形式if(表達式)if語句雙重(或多重)分支if語句的嵌套形式if(表達式)if語句else

if語句可以是各種形式的if語句可以是各種形式的if語句如果是簡單if語句,必須用“{}”括起17if語句嵌套的形式簡單if語句的嵌套形式可以是各種形式的例如:⑴if(c<=100)

if(c>=50)printf("50<=c<=100\n");⑵if(c<=100)if(c>=50)printf("50<=c<=100\n");elseprintf("c<50\n");else

if(c<=150)printf("100<c<=150\n");elseprintf("c>150\n");⑶if(c<=100)if(c>=50)printf("50<=c<=100\n");elseprintf("c<50\n")與哪個if配對?18例如:⑴if(c<=100)與哪個if配對?18再例如:if(a>b) if(a>c) if(a>d)m=1;elsem=2;elsem=3; 問題:哪一個else和哪一個if相匹配?規(guī)則:在嵌套的if~else語句中,else總是與上面的離它最近的尚未配對的if

配對。19再例如:if(a>b) 問題:哪一個else程序:main(){intx;scanf("%d",&x);

if(x%2!=0)

{printf("%disanodd\n",x);

if(x%5==0)printf("%disthetimesof5\n",x);

}

elseprintf("%disaneven\n",x);}運行jc4_4思考:如果沒有,算法和輸出如何?20程序:main()運行jc4_4思考:如果沒有,算法和輸出學(xué)習(xí)if語句的難點if~else語句的配對正確用表達式描述條件例如:當(dāng)x大于5小于10時令x自增if(5<x<10)x++;正確判斷內(nèi)嵌語句例如:if(x<y)x=x+3;y=y-2;elsex=x-3;y=y+2;if(x>5&&x<10)x++;{}{}21學(xué)習(xí)if語句的難點if~else語句的配對正確判斷內(nèi)嵌語熟悉常用的if表達式形式例如有定義:inta,b=0;a等于什么值時,執(zhí)行b=2;語句?if(a==0)b=2;if(a==1)b=2;if(a!=0)b=2;if(a=1)b=2;if(a=0)b=2;if(a)b=2;if(!a)b=2;等價于等價于22熟悉常用的if表達式形式例如有定義:inta,b=0;等4.4條件運算符exp1?exp2:exp3非00exp1y=(x>0)?x+2:x*x;intn;(n>0)?2.9:1n=10n=-102.91.0x+2x>0y=

x2x<=0if(x>0)y=x+2;elsey=x*x;234.4條件運算符exp1?exp2:exp3非04.5switch語句switch語句的一般形式

switch(表達式){case常量表達式1:語句序列1case常量表達式2:語句序列2

……case常量表達式n:語句序列ndefault:語句序列n+1

}功能:計算表達式的值,與常量表達式的值比較,等于第i個值時,順序執(zhí)行語句序列i、i+1、…、n+1若與所有常量表達式值都不相等,執(zhí)行語句序列n+1。

244.5switch語句switch語句的一般形式24switch語句的算法描述N-S結(jié)構(gòu)圖計算表達式常量表達式1語句序列1常量表達式2語句序列2…………常量表達式n語句序列ndefault語句序列n+1例如:switch(a){case5:printf("&");case2:printf("#");default:printf("$");}當(dāng)a等于5,輸出:&#$當(dāng)a等于2,輸出:#$當(dāng)a是其他值,輸出:$25switch語句的算法描述N-S結(jié)構(gòu)圖計算常量表達式1語句序說明:“case常量表達式i:”等價于語句標號,計算出的表達式值等于哪個語句標號,就從哪個位置開始順序向下執(zhí)行語句序列?!嗾Z句位置影響運行結(jié)果例如:switch(a){case2:printf("#");default:printf("$");case5:printf("&");}switch與break語句結(jié)合才能實現(xiàn)程序的分支break;break;break;26說明:“case常量表達式i:”等價于語句標號,計算出的表4.6程序舉例【例4.1】輸入年份,判別該年是否為閏年。思路:年份year為閏年的條件為①

能夠被4整除,但不能被100整除的年份;②

能夠被400整除的年份。只要滿足任意一個就可以確定它是閏年。例如:1996年、2000年是閏年1998年、1900年不是閏年設(shè)定標志變量leap,只要符合其中一個條件的就是閏年,令leap=1;否則令leap=0

274.6程序舉例【例4.1】輸入年份,判別該年是否為閏年。算法:定義變量year、leap

輸入年份year

能被4整除且不能被100整除?

TF

能被400整除?

leap=1

TFleap=1leap=0leap=1?TF

是閏年不是閏年year%400==0year%4==0&&year%100!=028算法:定義變量year、leapyear%400==0yea程序:main(){intyear,leap;scanf("%d",&year);if(year%4==0&&year%100!=0)leap=1;elseif(year%400==0)leap=1;elseleap=0;if(leap==1)printf("%disaleapyear\n",year);elseprintf("%disnotaleapyear\n",year);}運行jc4_b29程序:main()運行jc4_b29【例4.2】求一元二次方程ax2+bx+c=0的根。

思路:一元二次方程的根取決于系數(shù)a,b,c求根公式:

判別式d=b2-4ac

當(dāng)

d=0時,方程有兩個相等的實根:x1=x2=-b/(2*a)當(dāng)d>0時,方程有兩個不相等的實根:x1=(-b+sqrt(d))/(2*a)x2=(-b-sqrt(d))/(2*a)

當(dāng)d<0時,方程有兩個虛根:x1=jp+ipix2=jp-ipi實部

jp=-b/(2*a)

虛部

ip=sqrt(-d)/(2*a)4.6程序舉例30【例4.2】求一元二次方程ax2+bx+c=0的根。思路:算法:定義變量a、b、c、d、x1、x2、jp、ip輸入系數(shù)a、b、ca==0TF

計算d=b*b-4*a*c

不是二d==0

次方程TFd>0

計算重根TF

輸出重根計算實根計算虛根輸出實根輸出虛根31算法:定義變量a、b、c、d、x1、x2、jp、ip3程序:#include"math.h"main(){floata,b,c,d,x1,x2,lp,ip;

scanf("%f%f%f",&a,&b,&c);

printf("theequation");

if(fabs(a)<1e-6)printf("isnotquadratic");

else

{d=b*b-4*a*c;

if(fabs(d)<=1e-6)

/*相等的實根*/

{printf("hastwoequalroots:\n");

printf("x1=x2=%8.4f\n",-b/(2*a));

}32程序:#include"math.h"32程序(續(xù)):

elseif(d>1e-6)

/*不相等的實根*/

{x1=(-b+sqrt(d))/(2*a);

x2=(-b-sqrt(d))/(2*a);

printf("hastworealroots:\n");

printf("x1=%8.4f,x2=%8.4f\n",x1,x2);

}

else

/*虛根*/

{

lp=-b/(2*a);ip=sqrt(-d)/(2*a);

printf("hastwocomplexroots:\n");

printf("x1=%8.4f+%8.4fi\n",lp,ip);

printf("x2=%8.4f-%8.4fi\n",lp,ip);

}

}

}運行jc4_633程序(續(xù)):elseif(d>1e-6)第4章選擇結(jié)構(gòu)程序設(shè)計

浙江傳媒學(xué)院電子信息系C

程序設(shè)計34第4章選擇結(jié)構(gòu)程序設(shè)計浙江傳媒學(xué)院電子信息系C程本章主要內(nèi)容表達式關(guān)系表達式邏輯表達式條件表達式語句if語句多分支語句(switch)35本章主要內(nèi)容表達式24.1關(guān)系運算符和關(guān)系表達式比較兩個量(x,y)之間的關(guān)系x<yx<=yx==yx>yx>=yx!=y比較的結(jié)果:

3>1假

1>3

intx=2,y=6;x=(y>3)x=(x>y)10x=1x=0364.1關(guān)系運算符和關(guān)系表達式比較兩個量(x,y)之間關(guān)系表達式3<x<5x=1時x=4時(3<x)<5恒為137關(guān)系表達式3<x<544.2邏輯運算符和邏輯表達式3<x<5

035 xx>3并且

x<5

3<x&&x<5

邏輯表達式用邏輯運算符將關(guān)系表達式或邏輯量連接起來384.2邏輯運算符和邏輯表達式3<x<5邏輯表達式邏輯運算符

X&&YX||YX Y X Y

!X X與或非39邏輯運算符與或非6邏輯與

&&

邏輯或||邏輯非!(x>1)&&(y>1)(x>1)||(y>1)(x>1) !(x>1)即x<=1邏輯運算符40邏輯與&&邏輯或||邏輯表達式對于X&&Y,X和Y可以是:關(guān)系表達式或邏輯量x<=5&&x>=33&&5(x+y)&&7X,Y可以是任意表達式判斷邏輯量的真假非0表示真0表示假邏輯運算的結(jié)果1表示真0表示假41邏輯表達式對于X&&Y,X和Y可以是:X,Y可以是任4.3if語句4.3.1if語句的三種形式語句一般格式1.if(表達式)

語句功能:計算表達式的值,如果是一個非0值(即邏輯真),就執(zhí)行內(nèi)嵌語句,否則(即邏輯假)跳過內(nèi)嵌語句,順序執(zhí)行后續(xù)語句。內(nèi)嵌語句,可為:賦值語句函數(shù)調(diào)用語句控制語句復(fù)合語句空語句可為算術(shù)、關(guān)系、邏輯、賦值等表達式424.3if語句4.3.1if語句的三種形式功能:內(nèi)嵌語句if語句的算法:例如:⑴if(x>0)m++;⑵if(a>b){c=a;a=b;b=c;}

表達式非0

TF

語句N-S結(jié)構(gòu)圖語句流程圖NY表達式非0?43if語句的算法:例如:表達式非0N-S結(jié)構(gòu)圖語2.

if(表達式)

語句1

else語句2語句一般格式if(表達式)

語句1

else語句2

功能:計算表達式的值,如果它的值是一個非0值(邏輯真),就執(zhí)行內(nèi)嵌語句1,之后跳過內(nèi)嵌語句2,執(zhí)行后續(xù)語句;否則跳過內(nèi)嵌語句1,執(zhí)行內(nèi)嵌語句2,之后執(zhí)行后續(xù)語句。

442.if(表達式)語句1else語句2語句語句的算法:例如:⑴if(x>0)m++;elsem--;⑵if(ch>='a'&&ch<='z')

{ch=ch-32;

printf("%c\n",ch);}elseprintf("%c\n",ch);

表達式非0

TF

語句1語句2N-S結(jié)構(gòu)圖語句1

語句2流程圖NY表達式非0?45語句的算法:例如:表達式非0N-S結(jié)構(gòu)圖語句1多重分支語句語句一般格式if(表達式1)

語句1

elseif(表達式2)

語句2

……elseif(表達式m)

語句m

else語句

n功能:依次計算并判斷表達式i,為非0時執(zhí)行后面的語句,都為0時,執(zhí)行語句n無論執(zhí)行完那個語句分支,都轉(zhuǎn)到后續(xù)語句46多重分支語句語句一般格式13多重分支語句的算法流程圖表達式2?表達式1?語句n語句1

語句2

語句m…YNYNNY表達式m?47多重分支語句的算法流程圖表達式2?表達式1?語句n語句1多重分支語句的算法N-S結(jié)構(gòu)圖表達式1?

TF

表達式2?語句1TF

語句2…

表達式m?TF

語句m語句n例如:if(a<0)x=-1;elseif(a==0)x=0;elsex=1;48多重分支語句的算法N-S結(jié)構(gòu)圖表達式1?4.3.2if語句的嵌套如果if的內(nèi)嵌語句中又使用了一個if語句,則構(gòu)成if語句的嵌套。

【例】比較兩個整數(shù)的關(guān)系。#include<stdio.h>main(){intx,y;printf("EnterintegerXandY:");scanf("%d%d",&x,&y);

if(x!=y)

if(x>y)printf("X>Y\n");

elseprintf("X<Y\n");

elseprintf("X=Y\n");}應(yīng)該正確判斷:if的內(nèi)嵌語句if和else的配對運行jc4_a提倡縮格書寫有利于閱讀程序494.3.2if語句的嵌套如果if的內(nèi)嵌語句中又使用了一個

if語句嵌套的形式簡單if語句的嵌套形式if(表達式)if語句雙重(或多重)分支if語句的嵌套形式if(表達式)if語句else

if語句可以是各種形式的if語句可以是各種形式的if語句如果是簡單if語句,必須用“{}”括起50if語句嵌套的形式簡單if語句的嵌套形式可以是各種形式的例如:⑴if(c<=100)

if(c>=50)printf("50<=c<=100\n");⑵if(c<=100)if(c>=50)printf("50<=c<=100\n");elseprintf("c<50\n");else

if(c<=150)printf("100<c<=150\n");elseprintf("c>150\n");⑶if(c<=100)if(c>=50)printf("50<=c<=100\n");elseprintf("c<50\n")與哪個if配對?51例如:⑴if(c<=100)與哪個if配對?18再例如:if(a>b) if(a>c) if(a>d)m=1;elsem=2;elsem=3; 問題:哪一個else和哪一個if相匹配?規(guī)則:在嵌套的if~else語句中,else總是與上面的離它最近的尚未配對的if

配對。52再例如:if(a>b) 問題:哪一個else程序:main(){intx;scanf("%d",&x);

if(x%2!=0)

{printf("%disanodd\n",x);

if(x%5==0)printf("%disthetimesof5\n",x);

}

elseprintf("%disaneven\n",x);}運行jc4_4思考:如果沒有,算法和輸出如何?53程序:main()運行jc4_4思考:如果沒有,算法和輸出學(xué)習(xí)if語句的難點if~else語句的配對正確用表達式描述條件例如:當(dāng)x大于5小于10時令x自增if(5<x<10)x++;正確判斷內(nèi)嵌語句例如:if(x<y)x=x+3;y=y-2;elsex=x-3;y=y+2;if(x>5&&x<10)x++;{}{}54學(xué)習(xí)if語句的難點if~else語句的配對正確判斷內(nèi)嵌語熟悉常用的if表達式形式例如有定義:inta,b=0;a等于什么值時,執(zhí)行b=2;語句?if(a==0)b=2;if(a==1)b=2;if(a!=0)b=2;if(a=1)b=2;if(a=0)b=2;if(a)b=2;if(!a)b=2;等價于等價于55熟悉常用的if表達式形式例如有定義:inta,b=0;等4.4條件運算符exp1?exp2:exp3非00exp1y=(x>0)?x+2:x*x;intn;(n>0)?2.9:1n=10n=-102.91.0x+2x>0y=

x2x<=0if(x>0)y=x+2;elsey=x*x;564.4條件運算符exp1?exp2:exp3非04.5switch語句switch語句的一般形式

switch(表達式){case常量表達式1:語句序列1case常量表達式2:語句序列2

……case常量表達式n:語句序列ndefault:語句序列n+1

}功能:計算表達式的值,與常量表達式的值比較,等于第i個值時,順序執(zhí)行語句序列i、i+1、…、n+1若與所有常量表達式值都不相等,執(zhí)行語句序列n+1。

574.5switch語句switch語句的一般形式24switch語句的算法描述N-S結(jié)構(gòu)圖計算表達式常量表達式1語句序列1常量表達式2語句序列2…………常量表達式n語句序列ndefault語句序列n+1例如:switch(a){case5:printf("&");case2:printf("#");default:printf("$");}當(dāng)a等于5,輸出:&#$當(dāng)a等于2,輸出:#$當(dāng)a是其他值,輸出:$58switch語句的算法描述N-S結(jié)構(gòu)圖計算常量表達式1語句序說明:“case常量表達式i:”等價于語句標號,計算出的表達式值等于哪個語句標號,就從哪個位置開始順序向下執(zhí)行語句序列?!嗾Z句位置影響運行結(jié)果例如:switch(a){case2:printf("#");default:printf("$");case5:printf("&");}switch與break語句結(jié)合才能實現(xiàn)程序的分支break;break;break;59說明:“case常量表達式i:”等價于語句標號,計算出的表4.6程序舉例【例4.1】輸入年份,判別該年是否為閏年。思路:年份year為閏年的條件為①

能夠被4整除,但不能被100整除的年份;②

能夠被400整除的年份。只要滿足任意一個就可以確定它是閏年。例如:1996年、2000年是閏年1998年、1900年不是閏年設(shè)定標志變量leap,只要符合其中一個條件的就是閏年,令leap=1;否則令leap=0

604.6程序舉例【例4.1】輸入年份,判別該年是否為閏年。算法:定義變量year、leap

輸入年份year

能被4整除且不能被100整除?

TF

能被400整除?

leap=1

TFleap=1leap=0leap=1?TF

是閏年不是閏年year%400==0year%4==0&&year%100!=061算法:定義變量year、leapyear%400==0yea程序:main(){intyear,leap;scanf("%d",&year);if(year%4==0&&year%100!=0)leap=1;elseif(year%400==0)leap=1;elseleap=0;if(leap==1)printf("%disaleapyear\n",year);elseprintf("%disnotaleapyear\n",year);}運行jc4_b62程序:main()運行jc4_b29【例4.2】求一元二次方程ax2+bx+c=0的根。

思路:一元二次方程的根取決于系數(shù)a,b,c求根公式:

判別式d=b2-4ac

當(dāng)

d=0時,

溫馨提示

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

評論

0/150

提交評論