C語(yǔ)言-選擇分支結(jié)構(gòu)程序設(shè)計(jì)課件_第1頁(yè)
C語(yǔ)言-選擇分支結(jié)構(gòu)程序設(shè)計(jì)課件_第2頁(yè)
C語(yǔ)言-選擇分支結(jié)構(gòu)程序設(shè)計(jì)課件_第3頁(yè)
C語(yǔ)言-選擇分支結(jié)構(gòu)程序設(shè)計(jì)課件_第4頁(yè)
C語(yǔ)言-選擇分支結(jié)構(gòu)程序設(shè)計(jì)課件_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

選擇結(jié)構(gòu)根據(jù)給定的條件是否滿足,決定從給定的條件選擇其一。分為:二路分支多路分支if…else…語(yǔ)句switch語(yǔ)句關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系運(yùn)算符>大于

>=大于等于<小于

<=小于等于==等于

!=不等于說(shuō)明:(1)六個(gè)關(guān)系運(yùn)算符都是雙目運(yùn)算符;(2)由一個(gè)關(guān)系運(yùn)算符連接兩個(gè)對(duì)象形成的表達(dá)式稱為關(guān)系表達(dá)式,這兩個(gè)運(yùn)算對(duì)象可以是算術(shù)表達(dá)式、字符表達(dá)式等。運(yùn)算對(duì)象為字符數(shù)據(jù)時(shí),比較按其ASCII碼進(jìn)行。例:inti=3,j=5;i*i+j*j>100;例:‘a(chǎn)’>‘b’(3)關(guān)系表達(dá)式的值可以作為整數(shù)值參與運(yùn)算(4)與數(shù)學(xué)表達(dá)式的區(qū)別(5)注意區(qū)分“=”與“==”的差別例:inta=3,b=2,c=1,f;f=a>b>c;例:3<x<100邏輯運(yùn)算符與邏輯表達(dá)式在C語(yǔ)言中有三個(gè)邏輯運(yùn)算符&&邏輯與||邏輯或!邏輯非兩個(gè)操作對(duì)象同時(shí)為真時(shí),表達(dá)式的值為真。兩個(gè)操作對(duì)象之一為真時(shí),表達(dá)式的值為真。當(dāng)操作對(duì)象的值為真,則表達(dá)式的值為假。說(shuō)明:(1)&&和||是雙目運(yùn)算符,!是單目運(yùn)算符(2)&&和||的運(yùn)算級(jí)別低于關(guān)系運(yùn)算符,!的運(yùn)算級(jí)別高于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符,

注意:

!的結(jié)合方向是從右向左。

&&和||的結(jié)合方向是從左向右,(3)不能確定的情況下,添加括號(hào)保證運(yùn)算次序。

盡量避免復(fù)雜煩瑣的邏輯表達(dá)式。例:a=10;b=20;c=30;a=(--b<=a)||(a+b!=c);a=?b=?a=1b=19(5)在邏輯表達(dá)式的求解中,并不是所有的邏輯運(yùn)算符都被執(zhí)行,只有在必須執(zhí)行下一個(gè)邏輯運(yùn)

算符才能求出表達(dá)式的解時(shí),才執(zhí)行該運(yùn)算符。例:intx=-1;

執(zhí)行了++x||++x||++x后,x的值是?

x=1(4)參加邏輯運(yùn)算的運(yùn)算對(duì)象可以是0(“假”)或

任何非0的數(shù)值(“真”);但運(yùn)算后的結(jié)果和關(guān)系運(yùn)算的結(jié)果一樣,只能是邏輯值0和1。1.簡(jiǎn)單的if語(yǔ)句形式:if(表達(dá)式)語(yǔ)句執(zhí)行過(guò)程:如果表達(dá)式值非0,執(zhí)行該語(yǔ)句,然后執(zhí)行if的下一個(gè)語(yǔ)句;否則直接執(zhí)行if的下一個(gè)語(yǔ)句。例:

main(){inta,b,max;printf(”\n請(qǐng)輸入兩個(gè)數(shù):”);scanf(”%d%d”,&a,&b);

max=a;if(max<b)max=b;printf(”max=%d”,max);}if語(yǔ)句例:輸入三個(gè)整數(shù)x、y、z,把這三個(gè)數(shù)由小到大輸出。輸出x,y,x的值交換x,zx>z交換x,yx>y輸入x,y,zYNYN交換y,zy>zYN#include<stdio.h>main(){intx,y,z,t;printf(“Pleaseinputthex,y,z:”);scanf(“%d%d%d”,&x,&y,&z);

if(x>y){t=x;x=y;y=t;}if(x>z){t=x;x=z;z=t;}if(y>z){t=y;y=z;z=t;}printf(“Smalltobig:%d%d%d\n”,x,y,z);}if語(yǔ)句2.if/else語(yǔ)句形式:if(表達(dá)式)語(yǔ)句1else語(yǔ)句2執(zhí)行流程:

如果表達(dá)式值非0,執(zhí)行語(yǔ)句1;否則,執(zhí)行語(yǔ)句2;無(wú)論執(zhí)行了哪一路分支之后,都執(zhí)行if的下一條語(yǔ)句。例

if(x>y)max=x;elsemax=y;printf(”max=%d”,max);例.判斷給定的某一年是否是閏年。分析:如果某年能被4整除而不能被100整除,或者能被400整除,那么該年就是閏年,否則就是平年。

if(year%4==0&&year%100!=0||year%400==0)#include<stdio.h>main(){intyear,leap=0;printf("\n請(qǐng)輸入年份(yyyy):");scanf("%d",&year);

/*判斷該年是否是閏年*/

if(year%4==0&&year%100!=0||year%400==0)

leap=1;

if(leap)

/*leap=1,即該年是閏年*/printf("%d年是閏年.\n",year);

else

/*leap=0,即該年是平年*/printf("%d年是平年.\n",year);}例.制作簡(jiǎn)單的猜數(shù)字游戲。程序運(yùn)行時(shí)自動(dòng)產(chǎn)生1~5之間的隨機(jī)數(shù),接著等待鍵盤(pán)輸入猜的數(shù)字。如果猜對(duì)了,顯示“猜對(duì)了”相關(guān)信息;否則,如果猜錯(cuò)了,則顯示“猜錯(cuò)了”相關(guān)信息。分析:如何產(chǎn)生1~5之間的隨機(jī)數(shù)?1)隨機(jī)數(shù)產(chǎn)生:C語(yǔ)言提供srand()函數(shù),配合rand()函數(shù)可產(chǎn)生介于0~32767之間的隨機(jī)數(shù)(函數(shù)均包含在stdlib.h中)。srand((unsigned)time(NULL));

/*以做隨機(jī)數(shù)產(chǎn)生器的種子,time()函數(shù)包含在time.h中

*/guess=rand();

/*以上面得到的種子產(chǎn)生0~32767的整數(shù)*/2)1~5之間的隨機(jī)數(shù):首先用rand()函數(shù)產(chǎn)生的隨機(jī)數(shù),然后對(duì)5求余(rand()%5),產(chǎn)生0~4之間的整數(shù),然后再加1,即rand()%5+1就產(chǎn)生1~5之間的整數(shù)。#include<stdio.h>#include<stdlib.h>#include<time.h>main(){intdata,guess;

srand((unsigned)time(NULL));data=rand()%5+1;printf("請(qǐng)輸入要猜的數(shù)字(限1-5):");scanf("%d",&guess);

if(guess==data)printf("猜對(duì)了!~_~,正確數(shù)字為%d!\n",data);

elseprintf("猜錯(cuò)了!0_0,正確數(shù)字為%d!\n",data);}

例:一個(gè)5位數(shù),判斷它是不是回文數(shù),即12321是回文數(shù),個(gè)位與萬(wàn)位相同,十位與千位相同。分析:分解出每一位數(shù)(萬(wàn)位、千位、十位和個(gè)位),然后判斷。輸出不是回文輸出是回文ge=x%10shi=x%100/10qian=x%10000/1000輸入的數(shù)字不是5位數(shù)wan=x/10000輸入長(zhǎng)整數(shù)wan>0&&wan<10wan==ge&&qian==shiYNYNmain(){longx;intge,shi,qian,wan;printf("pleaseinputthe5bitsnumber:\n");scanf("%ld",&x);wan=x/10000;

if(wan>0&&wan<10){qian=x%10000/1000;shi=x%100/10;ge=x%10;

if(ge==wan&&shi==qian)

printf("Itispalindromicnumber

!\n");

elseprintf("Itisnotpalindromicnumber

!\n");}

else printf(“Thenumberisnot5bits!\n");}3.if(表達(dá)式1)語(yǔ)句1

elseif(表達(dá)式2)語(yǔ)句2

elseif(表達(dá)式3)語(yǔ)句3

elseif(表達(dá)式m)語(yǔ)句melse語(yǔ)句n...例:有一個(gè)函數(shù)如下:x(x<1)y=2x+1(1≤x<10)5x-17(x≥10)編程序,輸入x值,輸出y值main(){floatx,y;printf("Inputx:");scanf("%f",&x);

if(x<1)y=x;

elseif(x<10)y=2*x+1;

elsey=5*x-17;printf("y=%f\n",y);}分析:根據(jù)輸入字符的ASCII碼來(lái)判別類(lèi)型。

例.編寫(xiě)程序,要求判別鍵盤(pán)輸入字符的類(lèi)別。#include"stdio.h"main(){charc;printf("\nPleaseinputacharacter

:\n");c=getchar();

if(c<32)

printf("Itisacontrolcharacter

!\n");

elseif(c>=’0’&&c<=’9’)

printf("Itisadigit!\n");

elseif(c>=’A’&&c<=’Z’)printf("Itisacapitalletter!\n");

elseif(c>=’a’&&c<=’z’)

printf("Itisalowerletter!\n");

elseprintf("Itisothercharacter!\n");}說(shuō)明:(1)三種形式的if語(yǔ)句中都出現(xiàn)的“表達(dá)式”,不僅只限于邏輯和關(guān)系表達(dá)式,還可以是任何類(lèi)型的;(2)if語(yǔ)句中,判斷條件表達(dá)式必須用()括起來(lái),

條件后面不加分號(hào),但語(yǔ)句之后有分號(hào);(4)if和else后的語(yǔ)句可以只有一條,也可以使用{}包括的幾條語(yǔ)句構(gòu)成的復(fù)合語(yǔ)句。(3)else不是語(yǔ)句,不能單獨(dú)使用,與if配對(duì)使用;(5)if(x)if(x!=0)(6)if(!x)if(x==0)例考慮下面程序的輸出結(jié)果#include<stdio.h>main(){intx,y,t;scanf(“%d%d”,&x,&y);if(x>y)t=y;y=x;x=t;elsex++;y++;printf(“%d,%d\n”,x,y);}Compile

Error!if語(yǔ)句的嵌套在if語(yǔ)句中:

if(表達(dá)式)語(yǔ)句1else語(yǔ)句2語(yǔ)句1和語(yǔ)句2都可以是另外一條if語(yǔ)句if(表達(dá)式1)

if(表達(dá)式2)語(yǔ)句1

else語(yǔ)句2else

if(表達(dá)式3)語(yǔ)句3

else語(yǔ)句4if(表達(dá)式1)語(yǔ)句1else

if(表達(dá)式2)語(yǔ)句2

else語(yǔ)句3if(表達(dá)式1)

if(表達(dá)式2)語(yǔ)句1

else語(yǔ)句2else語(yǔ)句3說(shuō)明:(1)else總是與最近的if匹配;(2)else不能單獨(dú)出現(xiàn),總是與if配對(duì)使用。例:main(){intx=2,y=-1,z=2;

if(x<y)if(y<0)z=0;elsez+=1;printf(“z=%d\n”,z);}

z=2編寫(xiě)原則:1、順序執(zhí)行的語(yǔ)句對(duì)齊;2、選擇體向內(nèi)縮進(jìn)3~4字符;3、若選擇體內(nèi)嵌套if語(yǔ)句,則該

if語(yǔ)句的選擇體亦繼續(xù)向內(nèi)縮進(jìn);4、若選擇體內(nèi)的語(yǔ)句多于1條,則必須使用{}括起來(lái);5、原則上,選擇體內(nèi)只有一條語(yǔ)句時(shí),可以不使用{}括起來(lái),但如果該語(yǔ)句分成多行編寫(xiě)時(shí),則使用{}具有更強(qiáng)的可讀性。main(){……;if(a<b){……;if(c<d){ ……;}}else{……;}}條件運(yùn)算符與條件表達(dá)式格式:表達(dá)式1?表達(dá)式2:表達(dá)式3意義:如果表達(dá)式1非0,此表達(dá)式取表達(dá)式2的值如果表達(dá)式1為0,此表達(dá)式取表達(dá)式3的值。例1:intm1=5,m2=3;m1>m2?(m1=1):(m2=-1)m1=?m2=?m1=1m2=3intx=1,y=2,z;z=x>y?++x:y++;x=?y=?z=?x=1y=3z=2例2:switch語(yǔ)句用來(lái)實(shí)現(xiàn)多路分支形式:switch(表達(dá)式){

case

常量1:語(yǔ)句序列1;

break;

case

常量2:語(yǔ)句序列2;

break;

case

常量n:語(yǔ)句序列n;

break;

default:

語(yǔ)句序列n+1;}執(zhí)行過(guò)程:首先計(jì)算表達(dá)式的值,若該值與某個(gè)case后面的常量相等,則執(zhí)行其后的語(yǔ)句序列,遇到break語(yǔ)句時(shí),跳出switch語(yǔ)句;如果表達(dá)式的值與所有常量都不相等,若存在default則執(zhí)行其后的語(yǔ)句序列,否則什么也不做。說(shuō)明:switch語(yǔ)句中的表達(dá)式可以為任何類(lèi)型,一般為整型或字符型,相應(yīng)地常量的類(lèi)型應(yīng)與其相同;2.同一switch語(yǔ)句的各case常量值,必須互不相同;3.case常量相當(dāng)于語(yǔ)句標(biāo)號(hào);執(zhí)行switch語(yǔ)句時(shí),找到與表達(dá)式值相等的某case常量,從此標(biāo)號(hào)開(kāi)始執(zhí)行下去,對(duì)以后的標(biāo)號(hào)不再比較,直到“}”為止;一般應(yīng)該在每個(gè)case后的語(yǔ)句序列跟一個(gè)break語(yǔ)句以便跳出switch正確實(shí)現(xiàn)多分支,可認(rèn)為break語(yǔ)句是case中的一部分。4.各個(gè)case后面的default語(yǔ)句出現(xiàn)的次序不影響結(jié)果;5.多個(gè)case可以共用一組執(zhí)行語(yǔ)句.例main(){inti=10;switch(i){case9:i+=1;case10:i+=1;case11:i+=1;default:i+=1;}printf(“i=%d”,i);}i=13例main(){inta=1,b=0;switch(a){case1:switch(b){case0:printf(“**0**”);break;case1:printf(“**1**”);break;}case2:printf(“**2**”);break;}}**0****2**分析:求解此方程的解,應(yīng)該考慮到各種可能的情況:當(dāng)a=0時(shí),不是二次方程。否則:1)當(dāng)b2-4ac=0時(shí),方程有兩個(gè)相等的實(shí)根。2)當(dāng)b2-4ac>0時(shí),方程有兩個(gè)不相等的實(shí)根。3)當(dāng)b2-4ac<0時(shí),方程有兩個(gè)共軛的復(fù)根。選擇分支結(jié)構(gòu)程序舉例例.求ax2+bx+c=0方程的解。#include<stdio.h>#include<math.h>main(){

floata,b,c,disc,x1,x2,realpart,imagpart;

printf("\n請(qǐng)輸入方程的三個(gè)系數(shù):(a=,b=,c=)\n");

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

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

printf("該方程沒(méi)有實(shí)根。\n");

elsedisc=b*b-4*a*c;

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

printf("該方程有兩個(gè)相等的實(shí)根:x1=x2=%8.4f\n",-b/(2*a));

elseif(disc>1e-6)

{

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

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

printf("該方程有兩個(gè)不相等的實(shí)根:\nx1=%8.4f,x2=%8.4f\n",x1,x2);

}

else

{

realpart=-b/(2*a);

imagpart=sqrt(-disc)/(2*a);

printf("該方程有兩個(gè)復(fù)根:\n");

printf("x1=%8.4f+%8.4fi\n",realpart,imagpart);

printf("x2=%8.4f-%8.4fi\n",realpart,imagpart);

}}例.一個(gè)超市商品信息管理系統(tǒng),試編寫(xiě)主程序部分實(shí)現(xiàn)簡(jiǎn)單的菜單選擇功能。#include”stdio.h”main(){intchoice;printf("\n\n\n********超市管理系統(tǒng)********\n\n");printf("1.錄入商品信息\n\n");printf("2.打印商品信息\n\n");printf("3.更新商品信息\n\n");printf("4.商品信息查詢\n\n");printf("5.商品信息統(tǒng)計(jì)\n\n");printf("6.商品銷(xiāo)售排行\(zhòng)n\n");printf("0.退出系統(tǒng)\n\n");printf("請(qǐng)選擇(0-6):");scanf("%d",&choice);

switch(choice){case1:

input_message();break;

/*錄入模塊*/

case2:

output_message();break;

/*輸出模塊*/

case3:

renew_message();break;

/*更新模塊*/

case4:

inquire_message();break;

/*查詢模塊*/

case5:

count_message();break;

/*統(tǒng)計(jì)模塊*/

case6:

sort_message();break;

/*排序模塊*/

case0:break;

/*退出系統(tǒng)*/}}

例.請(qǐng)輸入星期幾的第一個(gè)字母來(lái)判斷是星期幾,如果第一

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論