第3章 選擇結構程序設計_第1頁
第3章 選擇結構程序設計_第2頁
第3章 選擇結構程序設計_第3頁
第3章 選擇結構程序設計_第4頁
第3章 選擇結構程序設計_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第3章選擇結構程序設計3.1引例3.2關系運算符和關系表達式3.3邏輯運算符和邏輯表達式3.4用if語句實現(xiàn)選擇結構3.5條件運算符和條件表達式3.6if語句的嵌套3.7實現(xiàn)多分支選擇的switch語句3.1引例【例3.1】根據(jù)輸入的學生成績,判斷該生成績是否合格?!締栴}分析】首先需要輸入學生成績,然后根據(jù)該學生成績進行判斷,如果大于等于60分,就在屏幕輸出“合格”,否則,就輸出“不合格”。這是一個簡單的選擇結構3.1引例【例3.1】根據(jù)輸入的學生成績,判斷該生成績是否合格。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關系運算符和關系表達式關系運算符:用來對兩個數(shù)值進行比較的比較運算符C語言提供6種關系運算符:①<(小于)②<=(小于或等于)③>(大于)④>=(大于或等于)

⑤==(等于)⑥!=(不等于)優(yōu)先級相同(高)優(yōu)先級相同(低)3.2關系運算符和關系表達式關系、算術、賦值運算符的優(yōu)先級算術運算符(高)賦值運算符(低)關系運算符3.2關系運算符和關系表達式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關系運算符和關系表達式關系表達式用關系運算符將兩個數(shù)值或數(shù)值表達式連接起來的式子關系表達式的值是一個邏輯值,即“真”或“假”在C的邏輯運算中,以“1”代表“真”,以“0”代表“假”3.2關系運算符和關系表達式若a=3,b=2,c=1,則:關系表達式“a>b”的值為“真”,表示為1。關系表達式“(a>b)==c”的值為“假”,表示為0。關系表達式“b+c<a”的值為“假”,表示為0。注意比較兩個實數(shù)是否相等,不能直接用“==”來判斷。 因為精度問題,實數(shù)在計算機中實際表示時存在誤差。因此,相等的兩實數(shù),在計算機實際表示時可能不相等。判斷兩個實數(shù)a、b是否相等一般通過比較a、b之差的絕對值是否小于一個給定的精度來判斷,如表達式fabs(a-b)<1e-6

成立,說明如果a、b之差的絕對值小于,就認為a、b相等。3.3邏輯運算符和邏輯表達式在公交車上給老人和小孩讓座(1)年齡age>65(2)年齡age<12age>65||age<123.3邏輯運算符和邏輯表達式參賽者年齡必須是6歲到12歲(1)年齡age>=6(2)年齡age<=12。age>=6&&age<=123.3邏輯運算符和邏輯表達式3種邏輯運算符:&&(邏輯與)||(邏輯或)!(邏輯非)&&和||是雙目(元)運算符!是一目(元)運算符邏輯表達式用邏輯運算符將關系表達式或其他邏輯量連接起來的式子3.3邏輯運算符和邏輯表達式ab!a!ba&&ba||b真真假假真真真假假真假真假真真假假真假假真真假假邏輯運算的真值表3.3邏輯運算符和邏輯表達式邏輯運算符的優(yōu)先次序!→&&→||(!為三者中最高)與其他運算符的優(yōu)先次序!(高)算術運算符關系運算符&&和||賦值運算符(低)3.3邏輯運算符和邏輯表達式邏輯表達式的值應該是邏輯量“真”或“假”編譯系統(tǒng)在表示邏輯運算結果時以數(shù)值1代表“真”,以0代表“假”但在判斷一個量是否為“真”時以0代表“假”,以非0代表“真”注意:將一個非零的數(shù)值認作為“真”3.3邏輯運算符和邏輯表達式(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邏輯運算符和邏輯表達式修改后的邏輯運算真值表ab!a!ba&&ba||b非0非00011非000101假非01001假011003.3邏輯運算符和邏輯表達式inta=-3,b=8,c=0;求下列表達式的值!aa&&bc||(a<b)a||(b=c)c&&(b=a)3.3邏輯運算符和邏輯表達式判別某一年是否閏年,用邏輯表達式表示閏年的條件是符合下面二者之一:①能被4整除,但不能被100整除,如2008②能被400整除,如2000(year%4==0&&year100!=0)||year%400==0如果表達式值為1,則閏年;否則為非閏年3.4用if語句實現(xiàn)選擇結構

條件語句模塊A語句模塊B成立不成立圖3-3選擇結構3.4用if語句實現(xiàn)選擇結構

1.單分支if語句單分支if語句的一般形式如下:

if(<條件表達式>)語句【例3.2】編程,輸入一個字符,判別它是否為大寫字母,如果是,將它轉化成小寫字母;如果不是,不轉換。然后輸出最后得到的字符?!境绦蚍治觥窟@個問題的算法很簡單,先輸入一個字符,然后判斷該字符是否是大寫字母,如果是,就將該字符加上32,最后輸出該字符。【例3.2】編程,輸入一個字符,判別它是否為大寫字母,如果是,將它轉化成小寫字母;如果不是,不轉換。然后輸出最后得到的字符。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個數(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語句實現(xiàn)選擇結構2.雙分支if語句雙分支if語句的一般形式如下:

if(<條件表達式>) 語句1 else

語句2【例3.4】根據(jù)輸入x的值,按以下公式計算y的值。【解題步驟】由鍵盤輸入數(shù)據(jù)x;進行條件判斷,根據(jù)x的值計算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,用海倫公式計算三角形的面積s,計算公式為:

其中【問題分析】輸入數(shù)據(jù)為三角形的三邊a,b,c,輸出數(shù)據(jù)為面積s,可用雙精度類型定義這些變量。在計算面積s之前,首先要判斷用戶輸入的a,b,c是否能構成一個三角形(即兩邊之和要大于第三邊),如果能構成三角形,計算面積s并輸出,否則,輸出不能構成三角形的提示信息,程序可用雙分支if語句來實現(xiàn)判斷。圖3-6算法流程圖YN輸入a,b,c輸出“不能構成三角形”計算面積s輸出面積s能構成三角形?結束#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){/*能構成三角形*/ p=(a+b+c)/2; s=sqrt(p*(p-a)*(p-b)*(p-c)); printf("面積s為%lf\n",s);}else/*不能構成三角形*/ printf("不能構成三角形!\n");return0;}3.5條件運算符和條件表達式有一種if語句,當被判別的表達式的值為“真”或“假”時,都執(zhí)行一個賦值語句且向同一個變量賦值如:if(a>b)max=a;elsemax=b;max=(a>b)?a

:b;條件運算符3.5條件運算符和條件表達式有一種if語句,當被判別的表達式的值為“真”或“假”時,都執(zhí)行一個賦值語句且向同一個變量賦值如:if(a>b)max=a;elsemax=b;max=(a>b)?a

:b;條件表達式3.5條件運算符和條件表達式條件表達式的一般形式為表達式1?表達式2:

表達式33.5條件運算符和條件表達式條件運算符的執(zhí)行順序:求解表達式1若為非0(真)則求解表達式2,此時表達式2的值就作為整個條件表達式的值若表達式1的值為0(假),則求解表達式3,表達式3的值就是整個條件表達式的值3.5條件運算符和條件表達式條件運算符優(yōu)先于賦值運算符條件運算符的結合方向為“自右至左”以下為合法的使用方法:a>b?(max=a):(max=b);a>b?printf(“%d”,a):printf(“%d”,b);3.5條件運算符和條件表達式條件運算符優(yōu)先于賦值運算符條件運算符的結合方向為“自右至左”(x>y)?

printf("1"):(c==0)?printf("2"):printf("3")

3.5條件運算符和條件表達式

【例3.6】(用條件運算符改寫例3.4)程序根據(jù)輸入x的值,按以下公式計算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語句中又包含一個或多個if語句稱為if語句的嵌套一般形式:if()if()語句1else語句2elseif()語句3else語句4內嵌ifelse總是與它上面最近的未配對的if配對3.6if語句的嵌套在if語句中又包含一個或多個if語句稱為if語句的嵌套if(){

if()語句1}

else語句2內嵌if{}限定了內嵌if范圍3.6if語句的嵌套【例3.7】編寫程序,根據(jù)用戶輸入x的值,求出相應的y值,求值公式為: x(x<1)y=2x-1(1≤x<10)3x–11(x≥10)

3.6if語句的嵌套方法1:用單條件if語句對每一種情況分別進行處理。(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語句進行多條件處理。(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語句還可以這樣進行處理:(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】編程,輸入百分制成績,要求輸出等級,其對應關系為: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("輸入成績錯誤!\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實現(xiàn)多分支選擇的switch語句switch語句的一般形式如下:switch(<表達式>){ case常量1:語句序列1 case常量2:語句序列2 …… case常量n:語句序列n default:語句序列n+1}【例3.9】編程實現(xiàn)簡單的計算器功能,要求用戶按如下格式從鍵盤輸入算式: 操作數(shù)1運算符op 操作數(shù)2計算并輸出表達式的值,其中算術運算符包括:加減乘除。#include<stdio.h>#include<math.h>intmain(void){ floata,b; charop; printf("請輸入算式:"); scanf("%f%c%f",&a,&op,&b);

switch(op) //根據(jù)輸入的運算符確定執(zhí)行的運算

{

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) //檢驗除數(shù)是否為0 printf("除數(shù)不能為0\n"); else printf("%f/%f=%f\n",a,b,a/b);

break;

default: //非法運算符

printf("輸入錯誤!");

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("輸入錯誤!");

break;

【例3.10】用switch語句改寫例3.8程序,輸入百分制成績,要求輸出等級,其對應關系為:90~100分為A等,80~89分為B等,70~

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論