版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第3章選擇結(jié)構(gòu)程序設(shè)計(jì)3.1引例3.2關(guān)系運(yùn)算符和關(guān)系表達(dá)式3.3邏輯運(yùn)算符和邏輯表達(dá)式3.4用if語句實(shí)現(xiàn)選擇結(jié)構(gòu)3.5條件運(yùn)算符和條件表達(dá)式3.6if語句的嵌套3.7實(shí)現(xiàn)多分支選擇的switch語句3.1引例【例3.1】根據(jù)輸入的學(xué)生成績,判斷該生成績是否合格。【問題分析】首先需要輸入學(xué)生成績,然后根據(jù)該學(xué)生成績進(jìn)行判斷,如果大于等于60分,就在屏幕輸出“合格”,否則,就輸出“不合格”。這是一個(gè)簡單的選擇結(jié)構(gòu)3.1引例【例3.1】根據(jù)輸入的學(xué)生成績,判斷該生成績是否合格。NYscore≥60輸出“不合格”輸出“合格”圖3-1條件判斷流程圖#include<stdio.h>intmain(void){ floatscore; printf("score=");scanf("%f",&score); if(score>=60) printf("合格!\n"); else printf("不合格!\n");return0;}3.2關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系運(yùn)算符:用來對兩個(gè)數(shù)值進(jìn)行比較的比較運(yùn)算符C語言提供6種關(guān)系運(yùn)算符:①<(小于)②<=(小于或等于)③>(大于)④>=(大于或等于)
⑤==(等于)⑥!=(不等于)優(yōu)先級相同(高)優(yōu)先級相同(低)3.2關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系、算術(shù)、賦值運(yùn)算符的優(yōu)先級算術(shù)運(yùn)算符(高)賦值運(yùn)算符(低)關(guān)系運(yùn)算符3.2關(guān)系運(yùn)算符和關(guān)系表達(dá)式c>a+b等效于c>(a+b)a>b==c等效于(a>b)==ca==b<c等效于a==(b<c)a=b>c等效于a=(b>c)3.2關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系表達(dá)式用關(guān)系運(yùn)算符將兩個(gè)數(shù)值或數(shù)值表達(dá)式連接起來的式子關(guān)系表達(dá)式的值是一個(gè)邏輯值,即“真”或“假”在C的邏輯運(yùn)算中,以“1”代表“真”,以“0”代表“假”3.2關(guān)系運(yùn)算符和關(guān)系表達(dá)式若a=3,b=2,c=1,則:關(guān)系表達(dá)式“a>b”的值為“真”,表示為1。關(guān)系表達(dá)式“(a>b)==c”的值為“假”,表示為0。關(guān)系表達(dá)式“b+c<a”的值為“假”,表示為0。注意比較兩個(gè)實(shí)數(shù)是否相等,不能直接用“==”來判斷。 因?yàn)榫葐栴},實(shí)數(shù)在計(jì)算機(jī)中實(shí)際表示時(shí)存在誤差。因此,相等的兩實(shí)數(shù),在計(jì)算機(jī)實(shí)際表示時(shí)可能不相等。判斷兩個(gè)實(shí)數(shù)a、b是否相等一般通過比較a、b之差的絕對值是否小于一個(gè)給定的精度來判斷,如表達(dá)式fabs(a-b)<1e-6
成立,說明如果a、b之差的絕對值小于,就認(rèn)為a、b相等。3.3邏輯運(yùn)算符和邏輯表達(dá)式在公交車上給老人和小孩讓座(1)年齡age>65(2)年齡age<12age>65||age<123.3邏輯運(yùn)算符和邏輯表達(dá)式參賽者年齡必須是6歲到12歲(1)年齡age>=6(2)年齡age<=12。age>=6&&age<=123.3邏輯運(yùn)算符和邏輯表達(dá)式3種邏輯運(yùn)算符:&&(邏輯與)||(邏輯或)!(邏輯非)&&和||是雙目(元)運(yùn)算符!是一目(元)運(yùn)算符邏輯表達(dá)式用邏輯運(yùn)算符將關(guān)系表達(dá)式或其他邏輯量連接起來的式子3.3邏輯運(yùn)算符和邏輯表達(dá)式ab!a!ba&&ba||b真真假假真真真假假真假真假真真假假真假假真真假假邏輯運(yùn)算的真值表3.3邏輯運(yùn)算符和邏輯表達(dá)式邏輯運(yùn)算符的優(yōu)先次序!→&&→||(!為三者中最高)與其他運(yùn)算符的優(yōu)先次序!(高)算術(shù)運(yùn)算符關(guān)系運(yùn)算符&&和||賦值運(yùn)算符(低)3.3邏輯運(yùn)算符和邏輯表達(dá)式邏輯表達(dá)式的值應(yīng)該是邏輯量“真”或“假”編譯系統(tǒng)在表示邏輯運(yùn)算結(jié)果時(shí)以數(shù)值1代表“真”,以0代表“假”但在判斷一個(gè)量是否為“真”時(shí)以0代表“假”,以非0代表“真”注意:將一個(gè)非零的數(shù)值認(rèn)作為“真”3.3邏輯運(yùn)算符和邏輯表達(dá)式(1)若a=4,則!a的值為0(2)若a=4,b=5,則a&&b的值為1(3)a和b值分別為4和5,則a||b的值為1(4)a和b值分別為4和5,則!a||b的值為1(5)4&&0||2的值為13.3邏輯運(yùn)算符和邏輯表達(dá)式修改后的邏輯運(yùn)算真值表ab!a!ba&&ba||b非0非00011非000101假非01001假011003.3邏輯運(yùn)算符和邏輯表達(dá)式inta=-3,b=8,c=0;求下列表達(dá)式的值!aa&&bc||(a<b)a||(b=c)c&&(b=a)3.3邏輯運(yùn)算符和邏輯表達(dá)式判別某一年是否閏年,用邏輯表達(dá)式表示閏年的條件是符合下面二者之一:①能被4整除,但不能被100整除,如2008②能被400整除,如2000(year%4==0&&year100!=0)||year%400==0如果表達(dá)式值為1,則閏年;否則為非閏年3.4用if語句實(shí)現(xiàn)選擇結(jié)構(gòu)
條件語句模塊A語句模塊B成立不成立圖3-3選擇結(jié)構(gòu)3.4用if語句實(shí)現(xiàn)選擇結(jié)構(gòu)
1.單分支if語句單分支if語句的一般形式如下:
if(<條件表達(dá)式>)語句【例3.2】編程,輸入一個(gè)字符,判別它是否為大寫字母,如果是,將它轉(zhuǎn)化成小寫字母;如果不是,不轉(zhuǎn)換。然后輸出最后得到的字符?!境绦蚍治觥窟@個(gè)問題的算法很簡單,先輸入一個(gè)字符,然后判斷該字符是否是大寫字母,如果是,就將該字符加上32,最后輸出該字符?!纠?.2】編程,輸入一個(gè)字符,判別它是否為大寫字母,如果是,將它轉(zhuǎn)化成小寫字母;如果不是,不轉(zhuǎn)換。然后輸出最后得到的字符。ch=ch+32YN圖3-4算法流程圖ch>='A'&&ch<='Z'?輸出ch輸入ch#include<stdio.h>intmain(void){ charch; printf("Inputaletter:\n"); scanf("%c",&ch); if(ch>='A'&&ch<='Z') ch=ch+32; printf("%c\n",ch); return0;}【例3.3】輸入3個(gè)數(shù)a,b,c,要求按由小到大的順序輸出?!窘忸}步驟】(1)輸入a,b,c(2)如果a>b,將a和b交換(交換后,a是a,b中的小者)(3)如果a>c,將a和c交換(交換后,a是a,c中的小者,因此,a是三者中最小者)(4)如果b>c,將b和c交換(交換后,b是b,c中的小者,也是三者中的次小者)(5)輸出a,b,c。#include<stdio.h>intmain(void){ 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\n",a,b,c);return0;}3.4用if語句實(shí)現(xiàn)選擇結(jié)構(gòu)2.雙分支if語句雙分支if語句的一般形式如下:
if(<條件表達(dá)式>) 語句1 else
語句2【例3.4】根據(jù)輸入x的值,按以下公式計(jì)算y的值?!窘忸}步驟】由鍵盤輸入數(shù)據(jù)x;進(jìn)行條件判斷,根據(jù)x的值計(jì)算y的值;輸出數(shù)據(jù)為y。#include<stdio.h>intmain(void){ intx,y; printf(“x=”);scanf(“%d”,&x); if(x>=0) y=1+x; else y=1-x; printf(“y=%d\n”,y);return0;}YNx≥0?y=1+xy=1-x圖3-5條件判斷流程圖【例3.5】根據(jù)用戶輸入三角形的三邊a,b,c,用海倫公式計(jì)算三角形的面積s,計(jì)算公式為:
其中【問題分析】輸入數(shù)據(jù)為三角形的三邊a,b,c,輸出數(shù)據(jù)為面積s,可用雙精度類型定義這些變量。在計(jì)算面積s之前,首先要判斷用戶輸入的a,b,c是否能構(gòu)成一個(gè)三角形(即兩邊之和要大于第三邊),如果能構(gòu)成三角形,計(jì)算面積s并輸出,否則,輸出不能構(gòu)成三角形的提示信息,程序可用雙分支if語句來實(shí)現(xiàn)判斷。圖3-6算法流程圖YN輸入a,b,c輸出“不能構(gòu)成三角形”計(jì)算面積s輸出面積s能構(gòu)成三角形?結(jié)束#include<stdio.h>#include<math.h>intmain(void){doublea,b,c,p,s;printf("請輸入三邊的邊長:\n");scanf("%lf%lf%lf",&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a){/*能構(gòu)成三角形*/ p=(a+b+c)/2; s=sqrt(p*(p-a)*(p-b)*(p-c)); printf("面積s為%lf\n",s);}else/*不能構(gòu)成三角形*/ printf("不能構(gòu)成三角形!\n");return0;}3.5條件運(yùn)算符和條件表達(dá)式有一種if語句,當(dāng)被判別的表達(dá)式的值為“真”或“假”時(shí),都執(zhí)行一個(gè)賦值語句且向同一個(gè)變量賦值如:if(a>b)max=a;elsemax=b;max=(a>b)?a
:b;條件運(yùn)算符3.5條件運(yùn)算符和條件表達(dá)式有一種if語句,當(dāng)被判別的表達(dá)式的值為“真”或“假”時(shí),都執(zhí)行一個(gè)賦值語句且向同一個(gè)變量賦值如:if(a>b)max=a;elsemax=b;max=(a>b)?a
:b;條件表達(dá)式3.5條件運(yùn)算符和條件表達(dá)式條件表達(dá)式的一般形式為表達(dá)式1?表達(dá)式2:
表達(dá)式33.5條件運(yùn)算符和條件表達(dá)式條件運(yùn)算符的執(zhí)行順序:求解表達(dá)式1若為非0(真)則求解表達(dá)式2,此時(shí)表達(dá)式2的值就作為整個(gè)條件表達(dá)式的值若表達(dá)式1的值為0(假),則求解表達(dá)式3,表達(dá)式3的值就是整個(gè)條件表達(dá)式的值3.5條件運(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);3.5條件運(yùn)算符和條件表達(dá)式條件運(yùn)算符優(yōu)先于賦值運(yùn)算符條件運(yùn)算符的結(jié)合方向?yàn)椤白杂抑磷蟆?x>y)?
printf("1"):(c==0)?printf("2"):printf("3")
3.5條件運(yùn)算符和條件表達(dá)式
【例3.6】(用條件運(yùn)算符改寫例3.4)程序根據(jù)輸入x的值,按以下公式計(jì)算y的值。
#include<stdio.h>intmain(void){intx,y;printf(“請輸入x的值\n”);scanf(“%d”,&x);y=x>=0?(1+x):(1-x);
printf(“y=%d\n”,y);return0;
} 3.6if語句的嵌套在if語句中又包含一個(gè)或多個(gè)if語句稱為if語句的嵌套一般形式:if()if()語句1else語句2elseif()語句3else語句4內(nèi)嵌ifelse總是與它上面最近的未配對的if配對3.6if語句的嵌套在if語句中又包含一個(gè)或多個(gè)if語句稱為if語句的嵌套if(){
if()語句1}
else語句2內(nèi)嵌if{}限定了內(nèi)嵌if范圍3.6if語句的嵌套【例3.7】編寫程序,根據(jù)用戶輸入x的值,求出相應(yīng)的y值,求值公式為: x(x<1)y=2x-1(1≤x<10)3x–11(x≥10)
3.6if語句的嵌套方法1:用單條件if語句對每一種情況分別進(jìn)行處理。(1)輸入x(2)若x<1,y=x(3)若1≤x<10,y=2x-1(4)若x≥10,y=3x–11(5)輸出y
#include<stdio.h>intmain(void){intx,y;printf(“請輸入x的值:\n”);scanf(“%d”,&x);
if(x<0) y=x;if(x>=0&&x<5) y=2*x-1;
if(x>=5) y=3*x-11;printf(“y=%d\n”,y);return0;}
3.6if語句的嵌套方法2:用嵌套的if語句進(jìn)行多條件處理。(1)輸入x(2)若x<1,y=x
否則 若x<10,y=2x-1
否則 y=3x–11(3)輸出y
if(x<1) y=x;
else
if(x<10)
y=2*x-1;
else y=3*x-11;
3.6if語句的嵌套方法3:使用嵌套的if語句還可以這樣進(jìn)行處理:(1)輸入x(2)若x≥1若x≥10,y=3x–11否則y=2x-1
否則y=x(3)輸出y
if(x>=1)
if(x>=10) y=3*x-11;
else y=2*x-1;else
y=x;
【例3.8】編程,輸入百分制成績,要求輸出等級,其對應(yīng)關(guān)系為:90~100分為A等,80~89分為B等,70~79分為C等,60~69分為D等,為60分以下為E等。#include<stdio.h>intmain(void){ floatscore; printf("請輸入百分制成績:\n"); scanf("%f",&score); if(score<0||score>100) printf("輸入成績錯(cuò)誤!\n"); else if(score>=90) printf("等級為A\n"); elseif(score>=80) printf("等級為B\n"); elseif(score>=70) printf("等級為C\n"); elseif(score>=60) printf("等級為D\n"); else printf("等級為E\n"); return0;}
if(score>=90) printf("等級為A\n");
elseif(score>=80) printf("等級為B\n");
elseif(score>=70) printf("等級為C\n");
elseif(score>=60) printf("等級為D\n");
else printf("等級為E\n");3.7實(shí)現(xiàn)多分支選擇的switch語句switch語句的一般形式如下:switch(<表達(dá)式>){ case常量1:語句序列1 case常量2:語句序列2 …… case常量n:語句序列n default:語句序列n+1}【例3.9】編程實(shí)現(xiàn)簡單的計(jì)算器功能,要求用戶按如下格式從鍵盤輸入算式: 操作數(shù)1運(yùn)算符op 操作數(shù)2計(jì)算并輸出表達(dá)式的值,其中算術(shù)運(yùn)算符包括:加減乘除。#include<stdio.h>#include<math.h>intmain(void){ floata,b; charop; printf("請輸入算式:"); scanf("%f%c%f",&a,&op,&b);
switch(op) //根據(jù)輸入的運(yùn)算符確定執(zhí)行的運(yùn)算
{
case'+': //加法運(yùn)算
printf("%f+%f=%f\n",a,b,a+b);
break;
case'-': //減法運(yùn)算
printf("%f-%f=%f\n",a,b,a-b);
break;
case'*': //乘法運(yùn)算
printf("%f*%f=%f\n",a,b,a*b);
break;
case'/': //除法運(yùn)算
if(fabs(b)<=1e-7) //檢驗(yàn)除數(shù)是否為0 printf("除數(shù)不能為0\n"); else printf("%f/%f=%f\n",a,b,a/b);
break;
default: //非法運(yùn)算符
printf("輸入錯(cuò)誤!");
break;
} return0;}
switch(op){
case‘+’:
printf("%f+%f=%f\n",a,b,a+b);
break;
case‘-’:
printf("%f-%f=%f\n",a,b,a-b);
break;
case'*': printf("%f*%f=%f\n",a,b,a*b);
break;
case'/':
if(fabs(b)<=1e-7) printf("除數(shù)不能為0\n");
else printf("%f/%f=%f\n",a,b,a/b);
break;
default: printf("輸入錯(cuò)誤!");
break;
【例3.10】用switch語句改寫例3.8程序,輸入百分制成績,要求輸出等級,其對應(yīng)關(guān)系為:90~100分為A等,80~89分為B等,70~
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 文化遺產(chǎn)保護(hù)與利用作業(yè)指導(dǎo)書
- 青蛙王子童話故事征文
- 農(nóng)業(yè)種植技術(shù)指導(dǎo)服務(wù)合同及風(fēng)險(xiǎn)免責(zé)協(xié)議
- 物流運(yùn)輸業(yè)貨物損壞丟失應(yīng)對與免責(zé)條款協(xié)議
- 人工智能智能金融風(fēng)控系統(tǒng)開發(fā)合同
- 2019屆江蘇專版高考政治一輪復(fù)習(xí)第九單元文化與生活引文類選擇題專練講義新人教版必修
- 企業(yè)認(rèn)證與資質(zhì)申請作業(yè)指導(dǎo)書
- 專注鑄夢青春砥礪前行
- 西游記中的成長主題征文啟示
- 移動(dòng)應(yīng)用開發(fā)流程與規(guī)范
- 2025版國家開放大學(xué)法律事務(wù)??啤睹穹▽W(xué)(2)》期末紙質(zhì)考試總題庫
- 紡織廠消防管道安裝協(xié)議
- 【MOOC】思辨式英文寫作-南開大學(xué) 中國大學(xué)慕課MOOC答案
- 生物人教版(2024版)生物七年級上冊復(fù)習(xí)材料
- 期末測試卷(試題)-2024-2025學(xué)年五年級上冊數(shù)學(xué)北師大版
- 企業(yè)地震應(yīng)急預(yù)案管理方案
- 國有企業(yè)品牌建設(shè)策略方案
- 房地產(chǎn)園林綠化行業(yè)研究報(bào)告:市場規(guī)模統(tǒng)計(jì)、供需態(tài)勢及發(fā)展前景預(yù)測報(bào)告(智研咨詢)
- 家政培訓(xùn)講師課件
- 2024春節(jié)前安全培訓(xùn)
- 物業(yè)管理基礎(chǔ)培訓(xùn)
評論
0/150
提交評論