




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第五章
本章要點
關系表達式邏輯表達式選擇結構程序設計
主要內容5.1關系運算符和關系表達式5.2邏輯運算符和邏輯表達式5.3if語句5.4switch語句5.5程序舉例
§5.1關系運算符和關系表達式(一).關系運算符及其優先次序<(小于)<=(小于或等于)>(大于)>=(大于或等于)==(等于)!=(不等于)優先級相同(高)優先級相同(低)說明:關系運算符的優先級低于算術運算符關系運算符的優先級高于賦值運算符
§5.1關系運算符和關系表達式(續)(二).關系表達式用關系運算符將兩個表達式(可以是算術表達式或關系表達式,邏輯表達式,賦值表達式,字符表達式)接起來的式子,稱關系表達式例:a>b,a+b>b+c,(a=3)>(b=5),’a’<‘b’,(a>b)>(b<c)關系表達式的值是一個邏輯值,即“真”或“假”。例:關系表達式”a>b”的值為“真”,表達式的值為1。C語言中沒有專用的邏輯值,1代表真,0代表假
§5.2邏輯運算符和邏輯表達式(一).邏輯運算符及其優先次序&&(邏輯與)相當于其他語言中的AND||(邏輯或)相當于其他語言中的OR!(邏輯非)相當于其他語言中的NOT例:a&&b
若a,b為真,則a&&b為真。
a||b
若a,b之一為真,則a||b為真。!a若a為真,則!a為假。優先次序:!(非)->&&()->||()邏輯運算符中的“&&”和“||”低于關系運算符,“!”高于算術運算符
§5.2邏輯運算符和邏輯表達式(續)(二)邏輯表達式用邏輯運算符將關系表達式或邏輯量連接起來的式子就是邏輯表達式邏輯表達式的值應該是一個邏輯量“真”或“假”。例:設a=4,b=5:!a的值為0a&&b的值為1a||b的值為1!a||b的值為14&&0||2的值為1任何非零的數值被認作“真”§5.2邏輯運算符和邏輯表達式(續)例:5>3&&8<4-!0
自左向右運算
1&&0邏輯值為08<3邏輯值為04-1值為3!0邏輯值為15>3邏輯值為1表達式值為0§5.2邏輯運算符和邏輯表達式(續)在邏輯表達式的求解中,并不是所有的邏輯運算符都要被執行。(1)a&&b&&c只有a為真時,才需要判斷b的值,只有a和b都為真時,才需要判斷c的值。(2)a||b||c只要a為真,就不必判斷b和c的值,只有a為假,才判斷b。a和b都為假才判斷c例:(m=a>b)&&(n=c>d)當a=1,b=2,c=3,d=4,m和n的原值為1時,由于“a>b”的值為0,因此m=0,而“n=c>d”不被執行,因此n的值不是0而仍保持原值1。§5.2邏輯運算符和邏輯表達式(續)用邏輯表達式來表示閏年的條件能被4整除,但不能被100整除。能被4整除,又能被400整除?答
(year%4==0&&year%100!=0)||year%400==0案
值為真(1)是閏年,否則為非閏年。§5.3if語句一.If語句的三種基本形式(1)if(表達式)語句
ch=getchar();
if(ch>=‘a’&&ch<=‘z’)
ch=ch-’a’+’A’;
putchar();表達式語句真(非0)假(0)ch=getchar();if(ch>=‘a’&&ch<=‘z’){ch=ch-’a’+’A’;
putchar();}§5.3if語句(續)(2)if(表達式)語句1else語句2例:if(x>y)
printf(“%d”,x);else
printf(“%d”,y);
條件
語句1
語句2非00§5.3if語句(續)(3)if(表達式1)語句1elseif(表達式2)語句2elseif(表達式3)語句3……elseif(表達式m)語句melse語句n§5.3if語句(續)例:
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;§5.3if語句(續)說明:(1).3種形式的if語句中在if后面都有表達式,一般為邏輯表達式或關系表達式。(2).第二,第三種形式的if語句中,在每個
else前面有一個分號,整個語句結束處有一個分號。(3).在if和else后面可以只含有一個內嵌的操作語句,也可以有多個操作語句,此時用花括號將幾個語句括起來成為一個復合語句。§5.3if語句(續)例5.1輸入兩個實數,按代數值由小到大的順序輸出這兩個數。
#include<stdio.h>
voidmain()
{floata,b,t;
scanf(“%f,%f”,&a,&b);
if(a>b)
{t=a;
a=b;
b=t;}
printf(“%5.2f,%5.2f\n”,a,b);}
yna>bT=aA=bB=t§5.3if語句(續)例5.2輸入三個數a,b,c,要求按由小到大的順序輸出。Ifa>b將a和b對換Ifa>c將a和c對換Ifb>c將b和c對換a>ba>cb>ca和b交換a和c交換c和b交換yyynn§5.3if語句(續)
#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("%5.2f,%5.2f,%5.2f\n",a,b,c);
}§5.3if語句(續)二.If語句的嵌套在if語句中又包含一個或多個if語句稱為if語句的嵌套。形式:If()
if()語句1 else語句2Else
if()語句3 else語句4內嵌if§5.3if語句(續)匹配規則:Else總是與它上面的,最近的,同一復合語句中的,未配對的if語句配對。例:If()
if()語句1else
if()語句2else語句3例:If() {if()語句1}else
if()語句2else語句3當if和else數目不同時,可以加花括號來確定配對關系。§5.3if語句(續)
-1(x<0)例5.3有一個函數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
?íì§5.3if語句(續)
#include<stdio.h>voidmain(){
int
x,y;
scanf(“%d”,&x);{
程序段}
printf(“x=%d,y=%d\n”,x,y);}§5.3if語句(續)上例中的程序段有四個,請判斷哪個是正確的?程序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;正確正確
-1(x<0)y=0(x=0)1(x>0)?íì§5.3if語句(續)三.條件運算符格式:表達式1?表達式2∶表達式3功能:判斷表達式1的值,如果成立就執行表達式2,否則就執行表達式3使用場合:若在if語句中,當被判別的表達式的值為“真”或“假”時,都執行一個賦值語句且向同一個變量賦值時,可以用一個條件運算符來處理。
§5.3if語句(續)例:
if(a>b)max=a;elsemax=b;當a>b時將a的值賦給max,當a≤b時將b的值賦給max,可以看到無論a>b是否滿足,都是向同一個變量賦值。可以用下面的條件運算符來處理:max=(a>b)?a∶b;§5.3if語句(續)說明:(1).條件運算符的執行順序:先求解表達式1,若為非0(真)則求解表達式2,此時表達式2的值就作為整個條件表達式的值。若表達式1的值為0(假),則求解表達式3,表達式3的值就是整個條件表達式的值。
(2).條件運算符優先級高于賦值運算符,低于關系運算符和算術運算符。
(3).條件運算符的結合方向為“自右至左”。
(4).“表達式2”和“表達式3”不僅可以是數值表達式,還可以是賦值表達式或函數表達式。(5).條件表達式中,表達式1的類型可以與表達式2和表達式3的類型不同。
§5.3if語句(續)例5.4輸入一個字符,判別它是否大寫字母,如果是,將它轉換成小寫字母;如果不是,不轉換。然后輸出最后得到的字符。
#include<stdio.h>
voidmain()
{charch;
scanf("%c",&ch);
ch=(ch>='A'&&ch<='Z')?(ch+32):ch;
printf("%c\n",ch);
}
如果字符變量ch的值為大寫字母,則條件表達式的值為(ch+32),即相應的小寫字母。如果ch的值不是大寫字母,則條件表達式的值為ch,即不進行轉換。
§5.4switch語句switch語句的格式:switch(表達式){case常量表達式1:語句1case常量表達式2:語句2…
case常量表達式n:語句ndefault:語句n+1}§5.4switch語句(續)例:要求按照考試成績的等級輸出百分制分數段,用switch語句實現:
switch(grade){case′A′∶printf(″85~100\n″);case′B′∶printf(″70~84\n″);case′C′∶printf(″60~69\n″);case′D′∶printf(″<60\n″);default∶printf(″error\n″);}§5.4switch語句(續)說明:switch后面括弧內的“表達式”,ANSI標準允許它為任何類型。(2)當表達式的值與某一個case后面的常量表達式的值相等時,就執行此case后面的語句,若所有的case中的常量表達式的值都沒有與表達式的值匹配的,就執行default后面的語句。(3)每一個case的常量表達式的值必須互不相同,否則就會出現互相矛盾的現象(對表達式的同一個值,有兩種或多種執行方案)。§5.4switch語句(續)(4)各個case和default的出現次序不影響執行結果。例如,可以先出現“default:…”,再出現“case′D′:…”,然后是“case′A′:…”。(5)執行完一個case后面的語句后,流程控制轉移到下一個case繼續執行。“case常量表達式”只是起語句標號作用,并不是在該處進行條件判斷。在執行switch語句時,根據switch后面表達式的值找到匹配的入口標號,就從此標號開始執行下去,不再進行判斷。應該在執行一個case分支后,可以用一個break語句來終止switch語句的執行。
(6)多個case可以共用一組執行語句。
§5.5程序舉例例5.5
寫程序,判斷某一年是否閏年。
§5.5程序舉例(續)#include<stdio.h>
voidmain()
{intyear,leap;
scanf("%d",&year);
if(year%4==0)
{if(year%100==0)
{if(year%400==0)leap=1;
elseleap=0;}
elseleap=1;}
elseleap=0;
if(leap)printf("%dis",year);
elseprintf("%disnot",year);
printf("aleapyear.\n");}if(year%4!=0)leap=0;elseif(year%100!=0)leap=1;elseif(year%400!=0)leap=0;elseleap=1;運行情況:
1989↙
1989isnotaleapyear.
2000↙
2000isaleapyear.§5.5程序舉例(續)例5.7
運輸公司對
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 計算機一級 Photoshop云服務應用試題及答案
- 2025年MySQL考試設計思考的試題及答案
- 邏輯思維與財務分析中的關鍵因素試題及答案
- 鍋爐壓力容器壓力管道焊工《焊接材料》知識競賽試題與答案
- 讀者與文本之間的動態關系試題及答案
- 數據庫編碼實踐試題及答案
- 財務成本管理對企業價值的提升試題及答案
- 計算機基礎知識考點試題及答案清單
- 2025年兒童攀登梯項目市場調查研究報告
- 2025年財務成本管理重要資料下載及試題及答案
- 河南省確山縣三里河治理工程
- 水利工程合同工程完工驗收工程建設管理工作報告
- photoshop實訓指導書
- 多級泵檢修及維護(1)
- 涵洞孔徑計算
- 測量未知電阻的方法
- 中國民主同盟入盟申請表
- SAP項目用戶操作手冊CO月結
- 觀感質量檢查表
- 企業信息登記表
- 孫志剛事件1doc
評論
0/150
提交評論