第5章-選擇控制結構_第1頁
第5章-選擇控制結構_第2頁
第5章-選擇控制結構_第3頁
第5章-選擇控制結構_第4頁
第5章-選擇控制結構_第5頁
已閱讀5頁,還剩37頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第5章選擇控制結構5.1功能語句與順序結構程序設計5.2關系表達式和邏輯表達式5.3if語句5.4條件運算符與條件表達式5.5switch語句本章主要內容C程序的結構:C語句分為5類控制語句函數調用語句表達式語句空語句復合語句5.1功能語句與順序結構程序設計5.1.1C語句概述(一)控制語句完成一定的控制功能

1if()~else條件語句6break中止語句

2for()~循環語句7switch()多分支選擇語句3while()~循環語句8

return返回語句

4do~while();循環語句9

goto轉向語句

5continue結束本次循環語句(二)函數調用語句由一個函數調用加一個分號構成

getchar();例:

(三)表達式語句由一個表達式加一個分號構成

a=3;例:分號賦值表達式表達式語句+=(四)空語句只有一個分號的語句

(什么也不做)用來做流程的轉向點用來作為循環語句中的循環體;

(五)復合語句用一對{}括起來的語句

{ z=x+y; t=z/100; cout<<t; }注意:復合語句中最后一個語句中最后的分號不能忽略不寫。

例:一個良好的程序由三種基本結構組成

順序結構選擇結構循環結構

5.1.2順序結構程序設計在順序結構程序中,程序的執行是按照語句出現的先后次序順序執行的,并且每個語句都會被執行到,如圖5.1所示。

例5.1求3門課程的平均成績和總成績。

intmain(){intintro,math,algebra; //定義變量

intsum,ave; //定義變量

printf("請輸入3門課的成績:\n”);//顯示提示信息

scanf(“%d%d%d”,&intro,&math,&algebra);

sum=intro+math+algebra; //計算總成績

ave=sum/3; //計算平均成績

printf("總成績=%d\n”,sum); //輸出總成績

printf("平均成績=%d\n“); //輸出平均成績

return0;}

5.2關系表達式和邏輯表達式

1.關系運算符及其優先次序<(小于)<=(小于或等于)>(大于)>=(大于或等于)==(等于)!=(不等于)優先級相同(高)優先級相同(低)說明:關系運算符的優先級低于算術運算符關系運算符的優先級高于賦值運算符2.關系表達式用關系運算符將兩個表達式(可以是算術表達式或關系表達式,邏輯表達式,賦值表達式,字符表達式)接起來的式子,稱關系表達式例:a>b,a+b>b+c,(a=3)>(b=5),’a’<‘b’,(a>b)>(b<c)關系表達式的值是一個邏輯值,即“真”或“假”。例:關系表達式”a>b”的值為“真”,表達式的值為1。注意:數學上的0<x<10的合法的c表達式寫法。

&&(邏輯與)相當于其他語言中的AND||(邏輯或)相當于其他語言中的OR!(邏輯非)相當于其他語言中的NOT例:a&&b若a,b為真,則a&&b為真。

a||b若a,b之一為真,則a||b為真。!a若a為真,則!a為假。優先次序:!(非)->&&()->||()邏輯運算符中的“&&”和“||”低于關系運算符,“!”高于算術運算符3.邏輯運算符及其優先次序4.邏輯表達式用邏輯運算符將關系表達式或邏輯量連接起來的式子就是邏輯表達式邏輯表達式的值應該是一個邏輯量“真”或“假”。例:設a=4,b=5:!a的值為0a&&b的值為1a||b的值為1!a||b的值為14&&0||2的值為1任何非零的數值被認作“真”例:5>3&&8<4-!0

自左向右運算

1&&0邏輯值為08<3邏輯值為04-1值為3!0邏輯值為15>3邏輯值為1表達式值為0在邏輯表達式的求解中,并不是所有的邏輯運算符都要被執行。(1)a&&b&&c只有a為真時,才需要判斷b的值,只有a和b都為真時,才需要判斷c的值。(2)a||b||c只要a為真,就不必判斷b和c的值,只有a為假,才判斷b。a和b都為假才判斷c

設a=1,b=2,c=3,d=4,m=1,n=1;

例:(m=a>b)&&(n=c>d)

用邏輯表達式來表示閏年的條件能被4整除,但不能被100整除。能被4整除,又能被400整除?答

(year%4==0&&year%100!=0)||year%400==0案

值為真(1)是閏年,否則為非閏年。5.3選擇結構1用if語句實現選擇結構

5.3.1if語句的3種形式if語句的三種基本形式(1)if(表達式)語句例:

if(x>y)cout<<x;表達式語句真(非0)假(0)(2)if(表達式)語句1else語句2例:

if(x>y)cout<<x;elsecout<<y;

條件

語句1

語句2YN(3)if(表達式1)語句1elseif(表達式2)語句2elseif(表達式3)語句3

……elseif(表達式m)語句melse語句n例:

if(number>500)cost=0.15;elseif(number>300)cost=0.10;elseif(number>100)cost=0.075;elseif(number>50)cost=0.05;elsecost=0;說明:(1).3種形式的if語句中在if后面都有表達式,一般為邏輯表達式或關系表達式。(2).if語句中有內嵌語句,每個內嵌語句必須以分號結束。(3).else語句不能作為語句單獨使用,它是if語句的一部分,必須與if配對使用。(4).在if和else后面可以只含有一個內嵌的操作語句,也可以由多個操作語句,此時用花括號將幾個語句括起來成為一個復合語句。例5.2輸入兩個實數,按代數值由小到大的順序輸出這兩個數。#include<stdio.h>

voidmain()

{floata,b,t;

scanf(“%f%f”,&a,&b);

if(a>b)

{t=a;

a=b;

b=t;}

printf(“%f,%f”,a,b);}

yna>bt=aa=bb=tifa>b將a和b對換ifa>c將a和c對換ifb>c將b和c對換a>ba>cb>ca和b交換a和c交換c和b交換yyynn例5.3輸入三個數a,b,c,要求按由小到大的順序輸出。

#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(“%f,%f,%f”,a,b,c);}2if語句的嵌套在if語句中又包含一個或多個if語句稱為if語句的嵌套。形式:if()

if()語句1 else語句2else

if()語句3 else語句4匹配規則:else總是與它上面的,最近的,統一復合語句中的,未配對的if語句配對。例:if()

if()語句1else

if()語句2else語句3例:if() {if()語句1}else if()語句2else語句3當if和else數目不同時,可以加花括號來確定配對關系。

-1

(x<0)

例5.4有一個函數y=0(x=0),編一程序,輸入一個x值,輸出y值。1(x>0)算法1:算法1:

輸入x輸入x

若x<0,則y=-1若x<0,則y=-1

若x=0,則y=0否則: 若x>0,則y=1若x=0,則y=0

輸出y若x>0,則y=1

輸出y

#include<stdio.h>voidmain(){intx,y;scanf(“%d”,&x);{

程序段}printf(“x=%d,y=%d“,x,y);}上例中的程序段有四個,請判斷哪個是正確的?程序1:程序2:

if(x<0)if(x>=0)y=-1;if(x>0)y=1;elseelsey=0;if(x==0)y=0;elsey=-1;elsey=1;程序3:程序4:

y=-1;y=0;if(x!=0)if(x>=0)if(x>0)y=1;if(x>0)y=1;elsey=0;elsey=-1;3條件運算符和條件表達式(特殊運算符)條件表達式格式:表達式1?表達式2∶表達式3

執行過程:使用場合:若在if語句中,當被判別的表達式的值為“真”或“假”時,都執行一個賦值語句且向同一個變量賦值時,可以用一個條件運算符來處理。

例:

if(a>b)max=a;

elsemax=b;

max=(a>b)?a∶b;說明:(1).條件運算符的執行過程:(2).條件運算符優先級高于賦值運算符,低于關系運算符和算術運算符。(3).條件運算符的結合方向為“自右至左”。(4).“表達式2”和“表達式3”不僅可以是數值表達式,還可以是賦值表達式或函數表達式。(5).條件表達式中,表達式1的類型可以與表達式2和表達式3的類型不同。

#include<stdio.h>

voidmain()

{charch;

scanf(“%c”,&ch);

ch=(ch>='A'&&ch<='Z')?(ch+32):ch;

printf(“%c”,ch);

}

例5.5輸入一個字符,判別它是否大寫字母,如果是,將它轉換成小寫字母;如果不是,不轉換。然后輸出最后得到的字符。

4.switch選擇結構switch語句的格式:switch

(表達式){case常量表達式1:語句1

case常量表達式2:語句2

…case常量表達式n:語句n

default:語句n+1}例:要求按照考試成績的等級輸出百分制分數段,用switch語句實現:

switch(grade){case‘A’:cout<<”85~100”<<endl;

case

‘B’:cout<<”70~84”<<endl;

case

‘C’:cout<<”60~69”<<endl;

case

‘D’:cout<<”<60”<<endl;

default:cout<<“Error!”<<endl;}說明:(1)switch后面括弧內的“表達式”,可以為任何類型。(2)當表達式的值與某一個case后面的常量表達式的值相等時,就執行此case后面的語句,若所有的case中的常量表達式的值都沒有與表達式的值匹配的,就執行default后面的語句。(3)每一個case的常量表達式的值必須互不相同,否則就會出現互相矛盾的現象(對表達式的同一個值,有兩種或多種執行方案)。(4)各個case和default的出現次序不影響執行結果。例如,可以先出現“default:…”,再出現“case′D′:…”,然后是“case′A′:…”。(5)執行完一個case后面的語句后,流程控制轉移到下一個case繼續執行。應該在執行一個case分支后,可以用一個break語句來終止switch語句的執行。(6)多個可以共用一組執行語句。例5.6運輸公司對用戶計算運費。路程(s)越遠,每公里運費越低。標準如下:

溫馨提示

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

評論

0/150

提交評論