版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第4章選擇結(jié)構(gòu)程序設(shè)計(jì)
C
語言程序設(shè)計(jì)2023/1/112本章主要內(nèi)容4.1關(guān)系運(yùn)算符和關(guān)系表達(dá)式4.2邏輯運(yùn)算符和邏輯表達(dá)式4.3if語句4.1.1if語句的一般形式4.1.2if語句的嵌套4.4switch語句4.2.1switch語句的一般形式4.2.2break語句4.5選擇結(jié)構(gòu)程序設(shè)計(jì)舉例2023/1/1134.1關(guān)系運(yùn)算符和關(guān)系表達(dá)式一、關(guān)系運(yùn)算符及其優(yōu)先順序1.關(guān)系運(yùn)算符:<、<=、>、>=、==、!=、
優(yōu)先順序相同(低)優(yōu)先順序相同(高)關(guān)系運(yùn)算符的優(yōu)先級高于賦值運(yùn)算符,但低于算術(shù)運(yùn)算符2.優(yōu)先順序例如:c>a+b等價于c>(a+b)a>b=c等價于(a>b)=c錯誤表達(dá)式2023/1/114二、關(guān)系表達(dá)式
用關(guān)系運(yùn)算符將兩個表達(dá)式連接起來的式子稱為關(guān)系表達(dá)式
關(guān)系表達(dá)式的值是一個邏輯值,即“真”或“假”,用“1”或“0”表示例如:當(dāng)a=1,b=2,c=3時,
a>b值為0,若有d=a>b,則d的值為0
b<c值為1,若有d=b<c,則d的值為12023/1/1154.2邏輯運(yùn)算符和邏輯表達(dá)式一、邏輯運(yùn)算符及其優(yōu)先順序1.邏輯運(yùn)算符:邏輯非:“!”邏輯與:“&&”邏輯或:“||”2.優(yōu)先順序:參見P365附錄C()!算術(shù)關(guān)系位邏輯條件賦值
高低高低2023/1/1163.邏輯運(yùn)算的真值表2023/1/117二、邏輯表達(dá)式1.用邏輯運(yùn)算符將關(guān)系表達(dá)式或邏輯量連接起來的式子,稱為邏輯表達(dá)式。2.邏輯表達(dá)式的運(yùn)算結(jié)果
用“1”代表“真”、“0”代表“假”2023/1/118簡單分支語句語句一般格式if(表達(dá)式)
語句功能:計(jì)算表達(dá)式的值,如果是一個非0值(即邏輯真),就執(zhí)行內(nèi)嵌語句,否則(即邏輯假)跳過內(nèi)嵌語句,順序執(zhí)行后續(xù)語句。內(nèi)嵌語句,可為:賦值語句函數(shù)調(diào)用語句控制語句復(fù)合語句空語句可為算術(shù)、關(guān)系、邏輯、賦值等表達(dá)式4.3if語句2023/1/119簡單分支語句的算法:例如:⑴if(x>0)m++;⑵if(a>b){c=a;a=b;b=c;}
表達(dá)式非0
TF
語句N-S結(jié)構(gòu)圖語句流程圖NY表達(dá)式非0?2023/1/1110雙重分支語句語句一般格式if(表達(dá)式)
語句1
else
語句2功能:計(jì)算表達(dá)式的值,如果它的值是一個非0值(邏輯真),就執(zhí)行內(nèi)嵌語句1,之后跳過內(nèi)嵌語句2,執(zhí)行后續(xù)語句;否則跳過內(nèi)嵌語句1,執(zhí)行內(nèi)嵌語句2,之后執(zhí)行后續(xù)語句。
2023/1/1111雙重分支語句的算法:例如:⑴if(x>0)m++;elsem--;⑵if(ch>='a'&&ch<='z')
{ch=ch-32;
printf("%c\n",ch);}elseprintf("%c\n",ch);
表達(dá)式非0
TF
語句1語句2N-S結(jié)構(gòu)圖語句1
語句2流程圖NY表達(dá)式非0?2023/1/1112多重分支語句語句一般格式if(表達(dá)式1)
語句1
elseif(表達(dá)式2)
語句2
……
elseif(表達(dá)式m)
語句m
else語句
n語句n+1功能:依次計(jì)算并判斷表達(dá)式i,為非0時執(zhí)行它后面的語句,都為0時,執(zhí)行語句n無論執(zhí)行完那個語句分支,都轉(zhuǎn)到后續(xù)語句n+12023/1/1113多重分支語句的算法流程圖表達(dá)式2?表達(dá)式1?語句n語句1
語句2
語句m…YNYNNY表達(dá)式m?語句n+12023/1/1114多重分支語句的算法N-S結(jié)構(gòu)圖表達(dá)式1?
TF
表達(dá)式2?語句1TF
語句2…
表達(dá)式m?TF
語句m語句n例如:if(a<0)x=-1;elseif(a==0)x=0;elsex=1;2023/1/1115if語句的簡單應(yīng)用【例4.1】輸入一個字符,如果是大寫字母,則將其轉(zhuǎn)換為小寫字母輸出,否則直接輸出。輸入:用getchar或scanf函數(shù)ch是否為大寫字母:ch>='A'&&ch<='Z'(或ch>=65&&ch<=90)大寫字母轉(zhuǎn)換為小寫字母:ch=ch+32輸出:用putchar或printf函數(shù)思路:2023/1/1116程序:#include"stdio.h"voidmain(){charch;ch=getchar();if(ch>='A'&&ch<='Z')ch=ch+32;printf("%c\n",ch);}程序運(yùn)行情況如下:Gg
可使用條件表達(dá)式代替putchar(ch>='A'&&ch<='Z'?ch+32:ch);putchar('\n');條件運(yùn)算符和條件表達(dá)式有一種if語句,當(dāng)被判別的表達(dá)式的值為“真”或“假”時,都執(zhí)行一個賦值語句且向同一個變量賦值如:if(a>b)max=a;elsemax=b;max=(a>b)?a
:b;條件運(yùn)算符max=(a>b)?a
:b;條件表達(dá)式條件運(yùn)算符和條件表達(dá)式有一種if語句,當(dāng)被判別的表達(dá)式的值為“真”或“假”時,都執(zhí)行一個賦值語句且向同一個變量賦值如:if(a>b)max=a;elsemax=b;條件表達(dá)式的一般形式為表達(dá)式1?表達(dá)式2:
表達(dá)式3條件運(yùn)算符和條件表達(dá)式條件運(yùn)算符的執(zhí)行順序:求解表達(dá)式1;若為非0(真)則求解表達(dá)式2,此時表達(dá)式2的值就作為整個條件表達(dá)式的值;若表達(dá)式1的值為0(假),則求解表達(dá)式3,表達(dá)式3的值就是整個條件表達(dá)式的值;條件運(yùn)算符和條件表達(dá)式條件運(yùn)算符優(yōu)先于賦值運(yùn)算符條件運(yùn)算符的結(jié)合方向?yàn)椤白杂抑磷蟆币韵聻楹戏ǖ氖褂梅椒ǎ篴>b?(max=a):(max=b);a>b?printf(“%d”,a):printf(“%d”,b);條件運(yùn)算符和條件表達(dá)式
例4.1輸入一個字符,判別它是否大寫字母,如果是,將它轉(zhuǎn)換成小寫字母;如果不是,不轉(zhuǎn)換。然后輸出最后得到的字符。(用條件表達(dá)式)條件運(yùn)算符和條件表達(dá)式#include<stdio.h>intmain(){charch;scanf("%c",&ch);ch=(ch>='A'&&ch<='Z‘)?(ch+32):ch;printf("%c\n",ch);return0;}條件運(yùn)算符和條件表達(dá)式2023/1/11244.3.2if語句的嵌套如果if的內(nèi)嵌語句中又使用了一個if語句,則構(gòu)成if語句的嵌套。
【例4.2】比較兩個整數(shù)的關(guān)系。#include<stdio.h>voidmain(){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的配對提倡鋸齒形縮格書寫有利于閱讀程序2023/1/1125
if語句嵌套的形式簡單if語句的嵌套形式if(表達(dá)式)if語句雙重(或多重)分支if語句的嵌套形式if(表達(dá)式)if語句else
if語句可以是各種形式的if語句可以是各種形式的if語句如果是簡單if語句,必須用“{}”括起2023/1/1126例如:⑴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配對?2023/1/1127再例如:if(a>b) if(a>c) if(a>d)m=1;elsem=2;elsem=3; 問題:哪一個else和哪一個if相匹配?規(guī)則:在嵌套的if~else語句中,else總是與上面的離它最近的尚未配對的if
配對。2023/1/1128舉例【例4.3】輸入一個數(shù),判斷它是奇數(shù)還是偶數(shù),如果是奇數(shù)則進(jìn)一步判斷它是否為5的倍數(shù)。
定義變量x輸入x的值
x是奇數(shù)
TF
輸出“odd”x是5的倍數(shù)輸出“even”TF是5的倍數(shù)2023/1/1129程序:#include<stdio.h>voidmain(){intx;scanf("%d",&x);
if(x%2!=0)
{printf("%disanodd\n",x);
if(x%5==0)printf("%disthetimesof5\n",x);
}
else
printf("%disaneven\n",x);}思考:如果沒有,算法和輸出如何?(假定輸入x=15或11)2023/1/1130學(xué)習(xí)if語句的難點(diǎn)if~else語句的配對正確用表達(dá)式描述條件例如:當(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++;{}{}2023/1/1131熟悉常用的if表達(dá)式形式例如有定義:inta=3,b=0;下面哪個表達(dá)式執(zhí)行語句“b=2;”?1:if(a==0)b=2;2:if(a==1)b=2;3:if(a!=0)b=2;4:if(a=1)b=2;5:if(a=0)b=2;6:if(a)b=2;7:if(!a)b=2;等價于等價于2023/1/11324.4switch語句switch語句的一般形式
switch(表達(dá)式){case常量表達(dá)式1:語句序列1case常量表達(dá)式2:語句序列2
……case常量表達(dá)式n:語句序列ndefault:語句序列n+1
}功能:計(jì)算表達(dá)式的值,與常量表達(dá)式的值比較,等于第i個值時,順序執(zhí)行語句序列i、i+1、…、n+1若與所有常量表達(dá)式值都不相等,執(zhí)行語句序列n+1。
2023/1/1133switch語句的算法描述N-S結(jié)構(gòu)圖計(jì)算表達(dá)式常量表達(dá)式1語句序列1常量表達(dá)式2語句序列2
……
……常量表達(dá)式n語句序列ndefault語句序列n+1例如:switch(a){case5:printf("&");case2:printf("#");default:printf("$");}當(dāng)a等于5,輸出:$當(dāng)a等于2,輸出:#$當(dāng)a是其他值,輸出:$2023/1/1134說明:“case常量表達(dá)式i:”等價于語句標(biāo)號,計(jì)算出的表達(dá)式值等于哪個語句標(biāo)號,就從哪個位置開始順序向下執(zhí)行語句序列?!嗾Z句位置影響運(yùn)行結(jié)果例如:switch(a){case2:printf("#");default:printf("$");case5:printf("&");}switch與break語句結(jié)合才能實(shí)現(xiàn)程序的分支break;break;break;2023/1/1135switch語句的簡單應(yīng)用【例4.4】已知x=100,y=15,要求輸入一個算術(shù)運(yùn)算符(+、-、*或/),并對x和y進(jìn)行指定的算術(shù)運(yùn)算。
思路:設(shè)x和y為float型變量并賦初值;輸入的運(yùn)算符op為char型變量;根據(jù)op的值(為'+'、'-'、'*'、'/')進(jìn)行x和y的相加、相減、相乘、相除運(yùn)算(選擇分支);還要考慮到輸入字符不是+、-、*或/時的情況。2023/1/1136程序:#include"stdio.h"#include"math.h"voidmain(){floatx=100,y=15,z;charop;op=getchar();switch(op){case'+':z=x+y;break;case'-':z=x-y;break;case'*':z=x*y;break;case'/':z=x/y;break;default:z=0;}if((fabs(z))>1e-6)printf("%f%c%f=%f\n",x,op,y,z);elseprintf("%cisnotanoperator\n",op);}實(shí)型數(shù)通常不使用z==0或z!=0的比較可用fabs(z)>ε
代替2023/1/1137注意:switch語句的書寫格式:語句體本身必須用花括號括起;case和default后面如果有多條語句,可以不必使用花括號;case和常量表達(dá)式之間必須有空格;default可以寫在語句體的任何位置,也可以省略不寫;break語句可以改變case的語句標(biāo)號作用,終止后續(xù)case語句序列的執(zhí)行。
switch語句和break語句結(jié)合,可以實(shí)現(xiàn)程序的選擇控制(break語句還可以在循環(huán)語句中使用);
允許switch嵌套使用,但同一個switch語句中,任意兩個case的常量表達(dá)式值不能相同。
2023/1/11384.4選擇結(jié)構(gòu)程序設(shè)計(jì)舉例【例4.5】求一元二次方程ax2+bx+c=0的根。
思路:一元二次方程的根取決于系數(shù)a,b,c求根公式:
判別式d=b2-4ac
當(dāng)
d=0時,方程有兩個相等的實(shí)根:x1=x2=-b/(2*a)當(dāng)d>0時,方程有兩個不相等的實(shí)根:x1=(-b+sqrt(d))/(2*a)x2=(-b-sqrt(d))/(2*a)
當(dāng)d<0時,方程有兩個虛根:x1=jp+ipix2=jp-ipi實(shí)部
jp=-b/(2*a)
虛部
ip=sqrt(-d)/(2*a)2023/1/1139算法:定義變量a、b、c、d、x1、x2、jp、ip輸入系數(shù)a、b、ca==0TF
計(jì)算d=b*b-4*a*c
不是二d==0
次方程TFd>0
計(jì)算重根TF
輸出重根計(jì)算實(shí)根計(jì)算虛根輸出實(shí)根輸出虛根2023/1/1140程序:#include“stdio.h"#include"math.h"voidmain(){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)
/*相等的實(shí)根*/
{printf("hastwoequalroots:\n");
printf("x1=x2=%8.4f\n",-b/(2*a));
}2023/1/1141程序(續(xù)):
elseif(d>1e-6)
/*不相等的實(shí)根*/
{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);
}
}
}2023/1/1142舉例(續(xù)):【例4.6】輸入年份,判別該年是否為閏年。思路:年份year為閏年的條件為:①
能夠被4整除,但不能被100整除的年份;②
能夠被400整除的年份。只要滿足任意一個就可以確定它是閏年。例如:1996年、2000年是閏年1998年、1900年不是閏年設(shè)定標(biāo)志變量leap,只要符合其中一個條件的就是閏年,令leap=1;否則令leap=0
2023/1/1143算法:定義變量year、leap
輸入年份year
能被4整除且不能被100整除?
TF
能被400整除?
leap=1
TFleap=1leap=0leap=1?TF
是閏年不是閏年year%400==0year%4==0&&year%100!=02023/1/1144程序:#include"stdio.h"voidmain(){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);}
例4.7要求按照考試成績的等級輸出百分制分?jǐn)?shù)段,A等為85分以上,B等為70~84分,C等為60~69分,D等為60分以下。成績的等級由鍵盤輸入。解題思路:判斷出這是一個多分支選擇問題根據(jù)百分制分?jǐn)?shù)將學(xué)生成績分為4個等級如果用if語句,至少要用3層嵌套的if,進(jìn)行3次檢查判斷用switch語句進(jìn)行一次檢查即可得到結(jié)果#include<stdio.h>intmain(){chargrade;scanf("%c",&grade);printf("Yourscore:");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("enterdataerror!\n");}return0;}值為A#include<stdio.h>intmain(){chargrade;scanf("%c",&grade);printf("Yourscore:");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("enterdataerror!\n");}return0;}不能少#include<stdio.h>intmain(){chargrade;scanf("%c",&grade);printf("Yourscore:");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("enterdataerror!\n");}return0;}值為C#include<stdio.h>intmain(){chargrade;scanf("%c",&grade);printf("Yourscore:");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("
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 事業(yè)單位c類考試試題及答案
- 山東消防競賽試題及答案
- 企業(yè)經(jīng)濟(jì)統(tǒng)計(jì)試題及答案
- 湖北省黃石市2025年元月初中畢業(yè)科目調(diào)研考試地理試卷(含答案)
- 能源專業(yè)介紹
- 2026年大學(xué)大二(康復(fù)治療學(xué))康復(fù)應(yīng)用綜合測試試題及答案
- 2026年大學(xué)大二(機(jī)械設(shè)計(jì)制造及其自動化)機(jī)械創(chuàng)新設(shè)計(jì)綜合測試題及答案
- 幼兒游戲觀察題庫及答案
- 2026年人教版物理九年級上冊期中質(zhì)量檢測卷(附答案解析)
- 2026年魯教版生物八年級上冊期中質(zhì)量檢測卷(附答案解析)
- 工會委員會候選人推選實(shí)施方案
- 藥品生產(chǎn)成本核算流程
- 商業(yè)保理擔(dān)保合同范本
- 《文創(chuàng)產(chǎn)品設(shè)計(jì)》 課件 宗誠 第1-3章 根于文化-關(guān)于文創(chuàng)產(chǎn)品- 奇思妙想-文化元素與創(chuàng)業(yè)思維
- 重大版小學(xué)英語六年級上冊期末試卷(含答案含聽力原文無聽力音頻)
- 《藥品包裝用卡紙折疊紙盒》(T-CNPPA 2005-2018)
- 2025年碲化鎘薄膜太陽能電池市場規(guī)模分析
- 內(nèi)蒙古呼和浩特市重點(diǎn)名校2025屆物理高三上期末統(tǒng)考試題含解析
- 籃球館硅PU施工合同
- GB/T 16288-2024塑料制品的標(biāo)志
- 卡西歐圖形計(jì)算器fx-9860GII SD軟件說明書
評論
0/150
提交評論