第3章 選擇結(jié)構(gòu)程序設(shè)計(jì)_第1頁
第3章 選擇結(jié)構(gòu)程序設(shè)計(jì)_第2頁
第3章 選擇結(jié)構(gòu)程序設(shè)計(jì)_第3頁
第3章 選擇結(jié)構(gòu)程序設(shè)計(jì)_第4頁
第3章 選擇結(jié)構(gòu)程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論