第4章C語言順序和選擇結(jié)構(gòu)程序設(shè)計_第1頁
第4章C語言順序和選擇結(jié)構(gòu)程序設(shè)計_第2頁
第4章C語言順序和選擇結(jié)構(gòu)程序設(shè)計_第3頁
第4章C語言順序和選擇結(jié)構(gòu)程序設(shè)計_第4頁
第4章C語言順序和選擇結(jié)構(gòu)程序設(shè)計_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第4章順序和選擇結(jié)構(gòu)程序設(shè)計4.1C語句概述4.2算法基本知識4.3順序結(jié)構(gòu)程序設(shè)計4.4關(guān)系運算與邏輯運算4.5if語句4.6if語句的嵌套4.7條件運算符4.8switch語句4.9選擇結(jié)構(gòu)程序設(shè)計舉例本章小結(jié)2/4/202314.1C語句概述C語言是通過語句向計算機系統(tǒng)發(fā)出操作指令的。C語句可以分為以下5類:1.表達式語句即由一個表達式構(gòu)成的語句。在一個表達式后面加上分號就可以構(gòu)成一個表達式語句。A=3;任何表達式后都可以加分號成為語句:i++;x+y;將幾個表達式組合在一起,形成一條復(fù)合表達式語句: i=1,j=2,k=i+j;

2/4/202324.1C語句概述2.函數(shù)調(diào)用語句即由一次函數(shù)調(diào)用加上一個分號構(gòu)成的一個語句。printf("ThisisaCprogram.\n");

3.空語句即只有一個分號的語句。;什么作用?for(i=0;i<100;i++){

;

}2/4/202334.1C語句概述4.復(fù)合語句由一對大括號括起來若干條語句,在語法上可以將它們理解為一條復(fù)合語句。 { t=a;a=b;b=t; } 如果去掉大括號,則 t=a;a=b;b=t;為3條賦值語句。 如果將前2個分號改為逗號,則 t=a,a=b,b=t;為1條復(fù)合賦值語句。2/4/202344.1C語句概述5.流程控制語句。是C語言中規(guī)定的實現(xiàn)流程控制的語句。C語言中共有9種流程控制語句,它們是:if()~else~ (條件語句)for()~ (循環(huán)語句)while()~ (循環(huán)語句)do~while() (循環(huán)語句)continue (結(jié)束本次循環(huán))break (中止執(zhí)行switch或循環(huán)語句)switch (多分支選擇語句)goto (無條件轉(zhuǎn)向語句)return (從函數(shù)返回語句)2/4/202354.2算法基本知識算法是解決某一問題的方法和步驟。程序?qū)嶋H上就是用計算機語言描述的算法。一.算法的特性和要素1.算法的特性:有窮性可行性確定性輸入,一個算法可以有0個或多個輸入。輸出,一個算法必須產(chǎn)生一個或多個輸出。2/4/202364.2算法基本知識2.算法的要素:操作:即構(gòu)成算法的操作取自哪個操作集。計算機操作主要包括:算術(shù)運算、關(guān)系運算、邏輯運算、函數(shù)運算、位運算及I/O操作等。

控制結(jié)構(gòu):即如何控制算法中的各操作的執(zhí)行順序。2/4/202374.2算法基本知識二.算法的描述對于算法的描述有很多種方法,如自然語言、流程圖、計算機語言和偽代碼等,其中使用最廣泛的是流程圖。1.傳統(tǒng)的流程圖

起止框輸入輸出框判斷框處理框或流程線連接點注釋框2/4/20238例4.1設(shè)某公司員工工資的計算方法工資=基本工資+提成。其中:提成的計算方法為:當銷售額在5000元以下時,只發(fā)基本工資800元;當銷售額在5000元以上時,超出部分可按3%提成。分析:①銷售額5000元以下時,工資=800。②銷售額5000元以上時,工資=800+(銷售額-5000)*0.03。用自然語言描述算法為:①輸入銷售額m②若m<5000,則s=800,否則s=800+(m-5000)*0.03③輸出工資s2/4/20239傳統(tǒng)流程圖描述的算法2/4/2023104.2算法基本知識2.N-S流程圖

AB順序結(jié)構(gòu)條件成立不成立AB分支結(jié)構(gòu)當條件成立A當型循環(huán)結(jié)構(gòu)直到條件成立A直到型循環(huán)結(jié)構(gòu)2/4/202311例4.2計算所有業(yè)務(wù)員的平均工資。分析題意可知,計算平均工資的計算公式為:平均工資=工資總額/人數(shù)。用自然語言描述算法為:①變量賦初值sum=0,n=0。②輸入第1個業(yè)務(wù)員的工資x。③當x>=0時,執(zhí)行④,否則執(zhí)行⑧。④求工資的累加和sum=sum+x。⑤對業(yè)務(wù)員人數(shù)計數(shù)n=n+1。⑥輸入下一個業(yè)務(wù)員的工資x。⑦回去執(zhí)行③。⑧計算平均工資average=sum/n。⑨輸出平均工資average。2/4/202312用N-S流程圖描述的算法2/4/2023134.3順序結(jié)構(gòu)程序設(shè)計順序結(jié)構(gòu)是這三種結(jié)構(gòu)中最簡單的一種,通常的處理流程是先輸入?yún)?shù),然后完成相應(yīng)的計算和處理,最后輸出結(jié)果。例4.3:輸入攝氏溫度C的值,計算華氏溫度F的值。(計算公式為:F=9*C/5+32) main() { floatc,f; printf("Pleaseinputc:"); scanf("%f",&c); f=9*c/5+32; printf("f=%6.2f\n",f); }Pleaseinputc:32↙f=89.602/4/202314例4.4輸入一個無符號十進制整數(shù),輸出與它對應(yīng)的十六進制數(shù)。#include<stdio.h>main(){ unsignedintx; printf("Inputx:"); scanf("%u",&x); printf("%u=%xH\n",x,x);}Inputx:34↙34=22H2/4/2023154.4關(guān)系運算與邏輯運算一.關(guān)系運算1.關(guān)系運算符關(guān)系運算符用于兩個數(shù)據(jù)量之間的比較,C語言中關(guān)系運算符有以下6種: <、<=、>、>=、==、!=關(guān)系運算結(jié)果是一個邏輯值,只有“真”和“假”兩種情況。在C語言中規(guī)定:邏輯值“真”用1表示,邏輯“假”用“0”表示。5==3/*結(jié)果為0*/3>=0/*結(jié)果為1*/‘a(chǎn)’!=‘b’/*結(jié)果為1*/2/4/2023164.4關(guān)系運算與邏輯運算2.關(guān)系表達式用關(guān)系運算符將兩個表達式連接起來的式子,稱為關(guān)系表達式。A>3關(guān)系表達式關(guān)系運算符(a+b)>(b+c)(a=3)>(b=5)(a>b)>(b<c)2/4/2023174.4關(guān)系運算與邏輯運算3.關(guān)系運算符的優(yōu)先級C語言規(guī)定,6種關(guān)系運算符之間的優(yōu)先級順序為:(1)前四種關(guān)系運算符(<、<=、>、>=)的優(yōu)先級相同,后兩種關(guān)系運算符(==、!=)的優(yōu)先級相同。(2)前四種的優(yōu)先級高于后兩種。關(guān)系運算符與其它運算之間的優(yōu)先級順序: 算術(shù)運算符高 關(guān)系運算符 賦值運算符低2/4/2023184.4關(guān)系運算與邏輯運算4.關(guān)系運算符的結(jié)合方向6種關(guān)系運算符的結(jié)合方向都是從左到右。例如,若a=4,b=2,c=1,則:a>b>ca!=b==c2/4/202319<>關(guān)系運算幾點注意:例5>2>7>8在C中是允許的,值為0例inti=1,j=7,a;a=i+(j%4!=0);則a=2例‘a(chǎn)’>0結(jié)果為‘A’>100結(jié)果為10>結(jié)合方向自左至右用ASCII值比較2/4/2023204.4關(guān)系運算與邏輯運算二.邏輯運算1.邏輯運算符C語言中有三種邏輯運算符:&&邏輯與‖邏輯或!邏輯非參加邏輯運算的數(shù)據(jù)量可以是任何類型,但將它們看作是邏輯值,具體規(guī)定如下:非0 為真0 為假2/4/2023214.4關(guān)系運算與邏輯運算邏輯運算的結(jié)果也是一個邏輯值,規(guī)定:邏輯值“真” 用1表示邏輯“假” 用0表示邏輯運算的真值表ab!aa&&ba||b001101011100000101112/4/2023224.4關(guān)系運算與邏輯運算2.邏輯表達式用邏輯運算符連接的表達式稱為邏輯表達式。例如:!5‘a(chǎn)’&&‘c’3.邏輯運算符的優(yōu)先級C語言規(guī)定,邏輯運算符之間的優(yōu)先級從高到低的順序是:!(邏輯非)、&&(邏輯與)、||(邏輯或)2/4/2023234.4關(guān)系運算與邏輯運算3.邏輯運算符的優(yōu)先級C語言規(guī)定,邏輯運算符之間的優(yōu)先級從高到低的順序是:!(邏輯非)、&&(邏輯與)、||(邏輯或)運算符的優(yōu)先級: !(非) 高 算術(shù)運算符 關(guān)系運算符 &&和‖ 賦值運算符 低2/4/2023244.4關(guān)系運算與邏輯運算4.邏輯運算符的結(jié)合方向C語言規(guī)定,邏輯運算符的結(jié)合方向是: ! 結(jié)合方向為:從右到左 && 結(jié)合方向為:從左到右 || 結(jié)合方向為:從左到右例如,若a=4,b=2,c=1,則!!aa&&b&&ca<0||b<0||c<0a++&&b++?2/4/2023254.4關(guān)系運算與邏輯運算5.邏輯運算中的短路現(xiàn)象

在邏輯表達式的求解過程中,并不一定需要求解該邏輯表達式中的所有表達式。若a=4,b=2,c=1,則(1)a<0&&b>0

(2)a++<0&&b++>0(3)a>0||b>0(4)a++>0||++b>02/4/202326<>邏輯運算中的注意點:短路特性:邏輯表達式求解時,并非所有的邏輯運算符都被執(zhí)行,只是在必須執(zhí)行下一個邏輯運算符才能求出表達式的解時,才執(zhí)行該運算符。

若a=1;b=2;c=3;d=4;m=1;n=1;則(m=a>b)&&(n=c>d)

a&&b&&c//只在a為真時,才判別b的值;只在a、b都為真時,才判別c的值

a||b||c

//只在a為假時,才判別b的值;只在a、b都為假時,才判別c的值//結(jié)果m=0,n=12/4/202327下面的輸出是什么?#includeintmain(){ inti=6; if(((++i<7)&&(i++/6))||(++i<=9)); printf("%d\n",i); return0;}2/4/2023284.4關(guān)系運算與邏輯運算三.程序中對條件的描述程序設(shè)計時,若要進行條件判斷,應(yīng)該用正確的邏輯表達式或條件表達式來描述。①x≦10或x=100②0≦x≦10且x≠5→

x<=10||x==100↘x>=0&&x<=10&&x!=5→

0<=x<=10&&x!=5?×2/4/202329<>復(fù)雜邏輯條件的表述

③判斷某一年year是否為閏年判別閏年的條件(intyear):能被4整除:year%4==0能被4整除但不能被100整除:(year%4==0)&&(year%100!=0)能被400整除:year%400==0綜合起來:((year%4==0)&&(year%100!=0))||year%400==0此表達式為真時是閏年優(yōu)化語句:(year%4==0&&year%100!=0)||year%400==02/4/202330④判斷某職工是否能夠退休條件為:男職工年齡在60歲以上或女職工年齡在55歲以上。age>=60&&sex==’m’||age>=55&&sex==’w’2/4/2023314.5if語句一.if語句的基本形式if語句的基本形式是: if(表達式) 語句1; else 語句2;該語句執(zhí)行過程為:若表達式的值為“真”時,則執(zhí)行語句1;否則,執(zhí)行語句2。2/4/2023324.5if語句一.if語句的基本形式說明:表達式部分用來描述判斷的條件,語法上可以是任意類型的表達式,結(jié)果為“0”,則表示“假”,結(jié)果為“非0”,則表示“真”。表達式部分最常用的形式是一個邏輯表達式或條件表達式。語句1和語句2部分都只能是一條語句,這條語句可以是一個復(fù)合語句,或是空語句。為了養(yǎng)成良好的編程習(xí)慣,一般采用縮進對齊的格式書寫,即將語句1和語句2縮進對齊,將關(guān)鍵字if和else對齊。P67例4.52/4/2023334.5if語句二.缺省else結(jié)構(gòu)的if語句在基本的if語句結(jié)構(gòu)中,若在條件不成立時什么也不用做,可以使用C語言中缺省else結(jié)構(gòu)的if語句 if(表達式)語句;缺省else結(jié)構(gòu)的if語句的執(zhí)行過程為:若表達式的值為“真”時,則執(zhí)行語句;否則,執(zhí)行下一條語句。2/4/202334<>If語句的三種形式形式一:格式:if(表達式)語句執(zhí)行過程:表達式語句非0=0main(){intx,y;x=20;y=10;if(x>y)printf(“%d”,x);}沒有“;”2/4/202335<>形式二:格式:if(表達式)

語句1else

語句2執(zhí)行過程:表達式語句1語句2非0=0main(){intx,y;x=20;y=10;if(x>y)printf(“%d”,x);

elseprintf(“%d”,y);}2/4/202336<>形式三:格式:if(表達式1) 語句1 elseif(表達式2)語句2 elseif(表達式3)語句3 …… elseif(表達式m)語句m else語句n執(zhí)行過程:表達式1語句1非0=0表達式2表達式3語句n語句3語句2非0非0=0=0例:if(number>500)cost=0.15;

elseif(number>300)cost=0.1;elseif(number>100)cost=0.075;elseif(number>50)cost=0.05;elsecost=0;

必須有“;”2/4/202337<>幾點說明:if后面的表達式類型任意if后面的語句可以是復(fù)合語句,必須要加{}if(a==b&&x==y)printf(“a=b,x=y”);if(3)printf(“OK”);if(‘a(chǎn)’)printf(“%d”,a);考慮下面程序的輸出結(jié)果:main(){intx,y;scanf(“%d,%d”,&x,&y);if(x>y)x=y;y=x;elsex++;y++;printf(“%d,%d\n”,x,y);}CompileError!{}后沒有“;”2/4/202338<>#include<stdio.h>voidmain(){inta,b;printf("Enterintegera:");scanf("%d",&a);printf("Enterintegerb:");scanf("%d",&b);if(a==b)printf("a==b\n");elseprintf("a!=b\n");}例:輸入兩個數(shù)并判斷兩數(shù)是否相等運行:Enterintegera:12

Enterintegerb:12a==b運行:Enterintegera:12

Enterintegerb:9a!=b;會怎么樣?2/4/202339

inta=1;if(a=0)

printf("OK");

inta=0;if(a=1)

printf("OK");找別扭

inta=1;if(a==0)

printf("OK");

inta=0;if(a==1)

printf("OK");if(!a)if(a)2/4/202340==和=

inta;a=0;a==1;

一定要分清==和=

下面用法能起點小作用:

inta=0;if(0==a)

printf("OK");

inta;a==0;a=1;

inta=0;if(0=a)

printf("OK");編譯出錯2/4/202341<>#include<stdio.h>voidmain(){charc;printf("Enteracharacter:");c=getchar();if(c<32)printf("Thecharacterisacontrolcharacter\n");elseif(c>='0'&&c<='9')printf("Thecharacterisadigit\n");elseif(c>='A'&&c<='Z')printf("Thecharacterisacapitalletter\n");elseif(c>='a'&&c<='z')printf("Thecharacterisalowerletter\n");elseprintf("Thecharacterisothercharacter\n");}例:判斷輸入字符種類運行:Enteracharacter:Thecharacterisacontrolcharacter運行:Enteracharacter:8Thecharacterisadigit運行:Enteracharacter:DThecharacterisacapitalletter運行:Enteracharacter:hThecharacterisalowerletter運行:Enteracharacter:F1Thecharacterisothercharacter2/4/202342<>#include<stdio.h>voidmain(){floata,b,t;scanf("%f,%f",&a,&b);if(a>b){t=a;a=b;b=t;}printf("%5.2f,%5.2f",a,b);}例:輸入兩個實數(shù),按由小到大的次序輸出兩數(shù)輸入:3.6,-3.2輸出:-3.20,3.60

2/4/202343<>#include<stdio.h>voidmain(){floata,b,c,t;scanf("%f,%f,%f",&a,&b,&c);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf(“%5.2f,%5.2f,%5.2f”,a,b,c);}例:輸入三個數(shù),按由小到大的次序輸出輸入:3,7,1輸出:1.00,3.00,7.00

2/4/2023444.6if語句的嵌套一個if語句中又包含一個或多個if語句的現(xiàn)象稱為if語句的嵌套。if語句的基本形式的“語句1”部分或“語句2”都可以嵌套另一個if語句,在缺省else結(jié)構(gòu)的if語句中的“語句”部分也可以嵌套另一個if語句。在if語句嵌套的結(jié)構(gòu)中一定要注意else與if之間的對應(yīng)關(guān)系。在C語言中規(guī)定的對應(yīng)原則是:else總是與它前面最近的一個未匹配的if相匹配。2/4/202345<>If語句的嵌套If語句中又包含一個或多個if語句稱為if語句的嵌套。實際上只要將前述if語句的形式1和2中的內(nèi)嵌語句用一個if語句代替,即成為if語句的嵌套。嵌套的if語句還可以嵌套另一個if語句,形成多重嵌套。一般形式:if(條件1)if(條件2)語句1else語句2elseif(條件3)語句3else語句4內(nèi)嵌if內(nèi)嵌if2/4/202346<>if嵌套的幾種變形if(條件1)語句1elseif(條件2)語句2else語句3內(nèi)嵌ifif(條件1)if(條件2)語句1else語句2else語句3內(nèi)嵌ifif(條件1)if(條件2)語句1elseif(條件3)語句2else語句3內(nèi)嵌ifif(條件1)

{if(條件2)語句1}elseif(條件3)語句2else語句3內(nèi)嵌if內(nèi)嵌if注意:else總是與前面最近的if配對。內(nèi)嵌if內(nèi)嵌if是這樣嗎?必要時用{}限定內(nèi)嵌if范圍2/4/202347<>例:輸入兩個數(shù)并判斷其大小關(guān)系#include<stdio.h>voidmain(){intx,y;printf("Enterintegerx,y:");scanf("%d,%d",&x,&y);if(x!=y)if(x>y)printf("X>Y\n");elseprintf("X<Y\n");elseprintf("X==Y\n");}Enterintegerx,y:12,23X<YEnterintegerx,y:12,6X>YEnterintegerx,y:12,12X==Y2/4/202348<>if~else

配對原則:缺省{}時,else總是和它上面離它最近的未配對的if配對。if(……)if(……)if(……)else…...else…...else…...例考慮下面程序的輸出結(jié)果main(){intx=100,a=10,b=20;intv1=5,v2=0;if(a<b)if(b!=15)if(!v1)x=1;elseif(v2)x=10;x=-1;printf(“%d”,x);}結(jié)果:-12/4/202349例4.11輸入3個任意整數(shù).找出最大值#include<stdio.h>main(){inta,b,c,max; scanf("%d%d%d“,&a,&b,&c); if(a>b) if(a>c) max=a; else max=c; else if(b>c) max=b; else max=c; printf("max=%d\n",max);}對嗎?2/4/202350<>

程序1:main(){intx,y;scanf(“%d”,&x);if(x<0)y=-1;elseif(x==0)y=0;elsey=1;printf(“x=%d,y=%d\n”,x,y);}

程序2:main(){intx,y;scanf(“%d”,&x);if(x>=0);if(x>0)y=1;elsey=0;elsey=-1printf(“x=%d,y=%d\n”,x,y);}

程序3:main(){intx,y;scanf(“%d”,&x);y=-1;if(x!=0)if(x>0)y=1;elsey=0;printf(“x=%d,y=%d\n”,x,y);}輸入:-2得到:x=-2,y=0

程序3改:main(){intx,y;scanf(“%d”,&x);y=-1;if(x!=0)

{if(x>0)y=1;}elsey=0;printf(“x=%d,y=%d\n”,x,y);}例4.12:有一函數(shù) -1 (x<0)y= 0 (x=0) 1 (x>0) 編一程序,輸入一個x值,輸出y值。請考慮:y=1或y=0時,if語句應(yīng)該如何寫?{}什么情況下可以不要?2/4/202351<>if語句中,當表達式為“真”和“假”時,都只執(zhí)行一個賦值語句給同一個變量賦值時,可以用條件運算符處理。if(a>b)max=a;elsemax=b;max=(a>b)?a:b;表達式1?表達式2:表達式3表達式1表達式2值表達式3值非0=0條件運算符是C語言中唯一的三目運算符4.7條件運算符2/4/202352<>條件運算符練習(xí)例求a+|b|printf(“a+|b|=%d\n”,b>0?a+b:a-b);例(a==b)?’Y’:’N’(x%2==1)?1:0(x>=0)?x:-x(c>=‘a(chǎn)’&&c<=‘z’)?c-’a’+’A’:c條件運算符幾點說明:條件運算符可嵌套優(yōu)先級:13結(jié)合方向:自右向左表達式1?表達式2:表達式3類型可以不同,表達式值取表達式2和表達式3中較高的類型x?‘a(chǎn)’:‘b’//x=0,表達式值為‘b’;x≠0,表達式值為‘a(chǎn)’x>y?1:1.5//x>y,值為1.0;x<y,值為1.5max=(a>b)?a:b;//max=a>b?a:b;嵌套:x>0?1:(x<0?-1:0)a>b?a:c>d?c:da>b?a:(c>d?c:d)2/4/202353<>例:輸入一個字母,大寫轉(zhuǎn)小寫,然后輸出字母#include<stdio.h>voidmain(){charch;scanf("%c",&ch);ch=(ch>=‘A’&&ch<=‘Z’)?(ch+32):ch;printf(“%c“,ch);}輸入:A輸出:a2/4/2023544.8switch語句switch語句也可以實現(xiàn)多分支的選擇。switch語句的一般形式如下: switch(表達式) { case常量表達式1:語句1; case常量表達式2:語句2; ┋ case常量表達式n:語句n; default:語句n+1;}2/4/202355<>switch語句(多分支選擇語句)一般形式:switch(表達式e){caseC1:

語句1;

break;caseC2:

語句2;

break;…….caseCn:

語句n;

break;[default:語句n+1;

break;]}switch表達式語句組1語句組2語句組n語句組…...C1C2Cndefaultcase執(zhí)行過程需要跳出switch語句時使用2/4/2023564.8switch語句switch語句的執(zhí)行過程為:首先計算switch后面括號內(nèi)的表達式,然后從上到下按順序與各個case后面的常量表達式的值進行比較,若與某一個常量表達式的值相匹配,就選擇這個標號作為入口,開始向下執(zhí)行,以后不再作條件匹配的判斷。若不能與所有的常量表達式匹配,則選擇default這個標號開始向下執(zhí)行。2/4/202357<>switch幾點說明C1,C2,…Cn是常量表達式,且值必須互不相同常量表達式起語句標號作用,必須用break跳出case后可包含多個可執(zhí)行語句,且不必加{}switch可嵌套多個case可共用一組執(zhí)行語句#include<stdio.h>main(){chargrade;grade=getchar();switch(grade){case‘A’:printf(“85~100\n”);case‘B’:printf(“70~84\n”);case‘C’:printf(“60~69\n”);case‘D’:printf(“<60\n”);default:printf(“Error\n”);}}A85~10070~8460~69<60Error缺少break;#include<stdio.h>main(){chargrade;grade=getchar();switch(grade){case‘A’:printf(“85~100\n”);break;case‘B’:printf(“70~84\n”);break;case‘C’:printf(“60~69\n”);break;case‘D’:printf(“<60\n”);break;default:printf(“Error\n”);}}A85~100如:……case‘A’:case‘B’:case‘C’:printf(“score>60\n”);break;……..2/4/202358<>#include<stdio.h>voidmain(){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);}a=2,b=1例

switch嵌套2/4/202359<>例

根據(jù)輸入的字母輸出相應(yīng)的字符串#include<stdio.h>voidmain(){intc;printf("Entermornorhorother:");c=getchar();switch(c){case'm':printf("Goodmorning!\n");break;case'n':printf("Goodnight!\n");break;case'h':printf("Hello!\n");break;default:printf("????????\n");}}mGoodmorning!2/4/202360<>例

根據(jù)輸入的字母輸出相應(yīng)的字符串#include<stdio.h>voidmain(){intc;printf("Entermornorhorother:");c=getchar();if(c=='m‘)printf("Goodmorning!\n");elseif(c=='n‘)printf("Goodnight!\n");elseif(c=='h‘)printf("Hello!\n");elseprintf("????????\n");}mGoodmorning!2/4/202361#include<stdio.h>main(){inta;printf("inputintegernumber:");scanf("%d",&a);switch(a){ case1:printf("Monday\n"); case2:printf("Tuesday\n"); case3:printf("Wednesday\n"); case4:printf("Thursday\n"); case5:printf("Friday\n"); case6:printf("Saturday\n"); case7:printf("Sunday\n"); default:printf("error\n");}}2/4/202362#include<stdio.h>main(){inta;printf("inputintegernumber:");scanf("%d",&a);switch(a){case1:printf("Monday\n");break;case2:printf("Tuesday\n");break;case3:printf("Wednesday\n");break;case4:printf("Thursday\n");break;case5:printf("Friday\n");break;case6:printf("Saturday\n");break;case7:printf("Sunday\n");break;default:printf("error\n");}}2/4/202363使用switch語句時注意以下幾點:在case后的各常量表達式的值不能相同,否則會出現(xiàn)錯誤。在case后,允許有多個語句,可以不用{}括起來。各case和default子句的先后順序可以變動,而不會影響程序執(zhí)行結(jié)果。default子句可以省略不用。2/4/202364switch和else-if的比較

else-if比switch的條件控制更強大一些

else-if可以依照各種邏輯運算的結(jié)果進行流程控制

switch只能進行==判斷,并且只能是整數(shù)判斷

switch比else-if更清晰

兩者都要盡量避免用得過多、過長,尤其不要嵌套得太多

–它們大大增加程序的分支,使邏輯關(guān)系顯得混亂,不易維護,易出錯2/4/202365<>程序舉例例

判斷某一年是否閏年#include<stdio.h>①voidmain(){intyear,leap;scanf(“Enteryear:%d”,&year);if(year%4==0)

{if(year%100==0)

{if(year%400==0)leap=1;elseleap=0;}elseleap=1;}elseleap=0;if(leap)printf(“%dis”,year);elseprintf(“%disnot”,year);printf(“aleapyear.\n”);}{}能省略嗎?#include<stdio.h>②voidmain(){intyear,leap;scanf(“Enteryear:%d”,&year);if(year%4!=0)leap=0;elseif(year%100!=0)leap=1;elseif(year%400!=0)leap=0;elseleap=1;if(leap)printf(“%dis”,year);elseprintf(“%disnot”,year);printf(“aleapyear.\n”);}③使用邏輯表達式#include<stdio.h>voidmain(){intyear,leap;scanf(“Enteryear:%d”,&year);if((year%4==0&&year%100!=0)||(year%400==0))leap=1;elseleap=0;if(leap)printf(“%dis”,year);elseprintf(“%disnot”,year);printf(“aleapyear.\n”);}2/4/2023664.9選擇結(jié)構(gòu)程序設(shè)計舉例例4.17:輸入三角形的三個邊長,求三角形的面積。設(shè)三角形的3條邊長分別為a、b、c,3條邊長能夠構(gòu)成三角形的條件為:任意兩條邊的邊長之和大于第3條邊的邊長,即:a+b>c&&a+c>b&&b+c>a根據(jù)3條邊的邊長計算三角形面積的公式為:area=其中,s=(a+b+c)/2。2/4/202367#include<math.h>#i

溫馨提示

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

評論

0/150

提交評論