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

下載本文檔

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

文檔簡介

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

>=大于等于<小于

<=小于等于==等于

!=不等于說明:(1)六個關(guān)系運(yùn)算符都是雙目運(yùn)算符;(2)由一個關(guān)系運(yùn)算符連接兩個對象形成的表達(dá)式稱為關(guān)系表達(dá)式,這兩個運(yùn)算對象可以是算術(shù)表達(dá)式、字符表達(dá)式等。運(yùn)算對象為字符數(shù)據(jù)時,比較按其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ùn)算符&&邏輯與||邏輯或!邏輯非兩個操作對象同時為真時,表達(dá)式的值為真。兩個操作對象之一為真時,表達(dá)式的值為真。當(dāng)操作對象的值為真,則表達(dá)式的值為假。說明:(1)&&和||是雙目運(yùn)算符,!是單目運(yùn)算符(2)&&和||的運(yùn)算級別低于關(guān)系運(yùn)算符,!的運(yùn)算級別高于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符,

注意:

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

&&和||的結(jié)合方向是從左向右,(3)不能確定的情況下,添加括號保證運(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í)行下一個邏輯運(yùn)

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

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

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

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

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

max=a;if(max<b)max=b;printf(”max=%d”,max);}if語句例:輸入三個整數(shù)x、y、z,把這三個數(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語句2.if/else語句形式:if(表達(dá)式)語句1else語句2執(zhí)行流程:

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

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請輸入年份(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);}例.制作簡單的猜數(shù)字游戲。程序運(yùn)行時自動產(chǎn)生1~5之間的隨機(jī)數(shù),接著等待鍵盤輸入猜的數(shù)字。如果猜對了,顯示“猜對了”相關(guān)信息;否則,如果猜錯了,則顯示“猜錯了”相關(guān)信息。分析:如何產(chǎn)生1~5之間的隨機(jī)數(shù)?1)隨機(jī)數(shù)產(chǎn)生:C語言提供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ù),然后對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("請輸入要猜的數(shù)字(限1-5):");scanf("%d",&guess);

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

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

例:一個5位數(shù),判斷它是不是回文數(shù),即12321是回文數(shù),個位與萬位相同,十位與千位相同。分析:分解出每一位數(shù)(萬位、千位、十位和個位),然后判斷。輸出不是回文輸出是回文ge=x%10shi=x%100/10qian=x%10000/1000輸入的數(shù)字不是5位數(shù)wan=x/10000輸入長整數(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)語句1

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

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

elseif(表達(dá)式m)語句melse語句n...例:有一個函數(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碼來判別類型。

例.編寫程序,要求判別鍵盤輸入字符的類別。#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");}說明:(1)三種形式的if語句中都出現(xiàn)的“表達(dá)式”,不僅只限于邏輯和關(guān)系表達(dá)式,還可以是任何類型的;(2)if語句中,判斷條件表達(dá)式必須用()括起來,

條件后面不加分號,但語句之后有分號;(4)if和else后的語句可以只有一條,也可以使用{}包括的幾條語句構(gòu)成的復(fù)合語句。(3)else不是語句,不能單獨(dú)使用,與if配對使用;(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語句的嵌套在if語句中:

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

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

else語句2else

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

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

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

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

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

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

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

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

if語句的選擇體亦繼續(xù)向內(nèi)縮進(jìn);4、若選擇體內(nèi)的語句多于1條,則必須使用{}括起來;5、原則上,選擇體內(nèi)只有一條語句時,可以不使用{}括起來,但如果該語句分成多行編寫時,則使用{}具有更強(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語句用來實現(xiàn)多路分支形式:switch(表達(dá)式){

case

常量1:語句序列1;

break;

case

常量2:語句序列2;

break;

case

常量n:語句序列n;

break;

default:

語句序列n+1;}執(zhí)行過程:首先計算表達(dá)式的值,若該值與某個case后面的常量相等,則執(zhí)行其后的語句序列,遇到break語句時,跳出switch語句;如果表達(dá)式的值與所有常量都不相等,若存在default則執(zhí)行其后的語句序列,否則什么也不做。說明:switch語句中的表達(dá)式可以為任何類型,一般為整型或字符型,相應(yīng)地常量的類型應(yīng)與其相同;2.同一switch語句的各case常量值,必須互不相同;3.case常量相當(dāng)于語句標(biāo)號;執(zhí)行switch語句時,找到與表達(dá)式值相等的某case常量,從此標(biāo)號開始執(zhí)行下去,對以后的標(biāo)號不再比較,直到“}”為止;一般應(yīng)該在每個case后的語句序列跟一個break語句以便跳出switch正確實現(xiàn)多分支,可認(rèn)為break語句是case中的一部分。4.各個case后面的default語句出現(xiàn)的次序不影響結(jié)果;5.多個case可以共用一組執(zhí)行語句.例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時,不是二次方程。否則:1)當(dāng)b2-4ac=0時,方程有兩個相等的實根。2)當(dāng)b2-4ac>0時,方程有兩個不相等的實根。3)當(dāng)b2-4ac<0時,方程有兩個共軛的復(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請輸入方程的三個系數(shù):(a=,b=,c=)\n");

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

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

printf("該方程沒有實根。\n");

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

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

printf("該方程有兩個相等的實根: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("該方程有兩個不相等的實根:\nx1=%8.4f,x2=%8.4f\n",x1,x2);

}

else

{

realpart=-b/(2*a);

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

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

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

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

}}例.一個超市商品信息管理系統(tǒng),試編寫主程序部分實現(xià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)計\n\n");printf("6.商品銷售排行\(zhòng)n\n");printf("0.退出系統(tǒng)\n\n");printf("請選擇(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)計模塊*/

case6:

sort_message();break;

/*排序模塊*/

case0:break;

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

例.請輸入星期幾的第一個字母來判斷是星期幾,如果第一

溫馨提示

  • 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

提交評論