C語言程序設計-基于計算思維的培養(yǎng) 課件 第4章 選擇結構_第1頁
C語言程序設計-基于計算思維的培養(yǎng) 課件 第4章 選擇結構_第2頁
C語言程序設計-基于計算思維的培養(yǎng) 課件 第4章 選擇結構_第3頁
C語言程序設計-基于計算思維的培養(yǎng) 課件 第4章 選擇結構_第4頁
C語言程序設計-基于計算思維的培養(yǎng) 課件 第4章 選擇結構_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第四章選擇結構目錄/Contents關系運算條件運算邏輯運算單分支控制的if語句雙分支控制的if-else語句多路選擇的switch語句switch語句中的break語句關系運算符關系運算符描述舉例值關系運算符<小于3<51(true)>大于2>11(true)<=小于等于7<=81(true)>=大于等于5>=60(false)等式運算符==相等3==40(false)!=不等2!=61(true)注意:應避免對實數(shù)作相等或不等的判斷如1.0/3.0*3.0==1.0結果為可改寫為:fabs(1.0/3.0*3.0-1.0)<1e-6例注意區(qū)分“=”與“==”,常把==誤寫為=inta;......if(a=1)printf(“aequaltob”);elseprintf(“anotequaltob”);1==a延伸:用b+c==a不用a==b+c關系運算符邏輯運算符描述舉例值邏輯運算符!邏輯非a=0,!a1(true)&&邏輯與a=1,b=1,a&&b1(true)||邏輯或a=0,b=0,a||b0(false)邏輯運算符聲明和初始化:intx=7,y=7;doublea=0.0,b=5.5;表達式等價表達式值!(x-y)+1(!(x-y))+12!x-y+1((!x)-y)+1-6!!(a+3.0)!(!(a+3.0))1!a*!!b(!a)*(!(!b))1邏輯非運算符舉例邏輯運算符aba&&ba||bFFFFFTFTTFFTTTTT聲明和初始化:inta=1,b=1,c=3;doublex=0.0,y=2.0;表達式等價表達式值a&&b&&c(a&&b)&&c1x||a&&b-3x||(a&&(b–3))1a<b&&x<y(a<b)&&(x<y)0a<b||x<y(a<b)||(x<y)1二元邏輯運算符的真值表二元邏輯運算符的優(yōu)先級和結合性舉例邏輯運算符判斷ch是大寫英文字母(ch>='A')&&(ch<='Z')判斷某一年year是否是閏年的條件是滿足下列二者之一能被4整除,但不能被100整除;能被400整除;

year%4==0&&year%100!=0||year%400==0優(yōu)先級:%

==(!=)

&&

||

((year%4==0)&&(year%100!=0))||(year%400==0)復合表達式【例3.1】(a>=1)&&(b++==5)

(0>=1)&&(b++==5)

0&&(b++==5)

0a0b5c15d17盡量使用最少的操作數(shù)來確定表達式的值,這就意味著表達式中的某些操作數(shù)可能不會被計算(短路)

復合表達式問題的提出需要判斷的問題很多,例如:◆判斷某年是否為閏年;◆對n個數(shù)進行由大到小排序;◆旅游行程安排;◆計算分段函數(shù)的值;◆根據(jù)一元二次方程的系數(shù),判斷方程的解、求根。分支判斷◆分支:根據(jù)某個條件做出不同選擇,決定下一步的操作。條件分支分支語句◆條件:邏輯表達式?!舴种дZ句:條件+語句組裝在一起,形成邏輯結構。單分支if語句格式:if(expression)statement執(zhí)行過程:條件成立時,執(zhí)行分支語句;否則,不執(zhí)行任何分支語句條件語句非0=0單分支控制語法:

if

(expression) statement;或

if

(expression){ statement1; statement2; }復合語句compoundstatement被當做一條語句看待表達式非0為真單分支控制語法:

if

(expression) statement;或

if

(expression){ statement1; statement2; }不要忘記大括號!!不要忘記圓括號!!單分支控制單分支控制#include<stdio.h>intmain(){ intx,y; scanf("%d",&x); y=x; if(x<0) y=-x; printf("x=%d,|x|=%d\n",x,y); return0;}【例4.1】

從鍵盤輸入任意一個整數(shù),求其絕對值。【例題4.2】輸入兩個整數(shù)a、b,使a總是保存較大的數(shù)。if(a<b){t=a;a=b;b=t;}a<b?交換a,b的值非0=0#include<stdio.h>intmain(){inta,b,t;printf(“pleaseinputtwonumbers:\n”);scanf(“%d%d”,&a,&b);if(a<b){t=a;a=b;b=t;}printf(“%d\t%d”,a,b);return0;}單分支控制典型錯誤1:分支語句的復合語句沒有{}#include<stdio.h>intmain(){inta,b,t;printf(“pleaseinputtwonumbers:\n”);scanf(“%d%d”,&a,&b);if(a<b)t=a;a=b;b=t;printf(“%d\t%d”,a,b);return0;}典型錯誤2:條件表達式后多加分號#include<stdio.h>intmain(){inta,b,t;printf(“pleaseinputtwonumbers:\n”);scanf(“%d%d”,&a,&b);if(a<b);{t=a;a=b;b=t;}printf(“%d\t%d”,a,b);return0;}典型錯誤3:使用賦值運算符表示相等關系◆判斷變量a的值是否等于10:if(a=10)…◆正確的書寫方式:if(a==10)…◆原因:誤用賦值運算符表示相等關系;◆技巧:if(10==a)…◆報錯:誤寫成if(10=a)…條件語句1語句2非0=0if…else語句格式:if(expression)statement1elsestatement2執(zhí)行過程:如果條件成立,執(zhí)行語句1;否則,執(zhí)行語句2。然后,共同轉(zhuǎn)向下一條語句繼續(xù)執(zhí)行。雙分支選擇控制語句雙分支選擇控制【例4.3】

編寫程序,從鍵盤輸入一個整數(shù),判斷它是偶數(shù)還是奇數(shù)。NoYesInputaOutputevena%2==0?StartEndOutputodd#include<stdio.h>intmain(){inta;printf("pleaseinputanumber:");scanf("%d",&a);if(a%2==0)printf("%disanevennumber.",a);elseprintf("%disanoddnumber.",a);return0;}條件運算符和條件表達式#include<stdio.h>main(){inta,b,max;

printf("Inputa,b:");scanf("%d,%d",&a,&b);

if(a>b) max=a;

else max=b;printf("max=%d",max);}}

max=a>b?a:b;表達式1?表達式2:表達式3【例4.4】比較兩個整數(shù)的最大數(shù)。if語句的嵌套if語句嵌套形式1:if(表達式1) if(表達式2)語句1 else 語句2else

語句3if語句嵌套形式2if(表達式1) {if(表達式2)語句1}else語句2if語句的嵌套if語句嵌套形式3if(表達式1)

語句1else if(表達式2)

語句2 else

語句3if語句的嵌套C語言規(guī)定,else與離它最近的if,即第二個if結合。例如:if(y!=0) if(x!=0) result=x/y; else printf("Error:yisequalto0.\n");這個例子中,else與離它最近的if,即內(nèi)層的if結合。如果要讓else與外層的if結合,則應把內(nèi)層的if語句用花括號括起來:if(y!=0){ if(x!=0) result=x/y;}else printf("Error:yisequalto0.\n");if語句的嵌套注意,要辨別if語句的嵌套層次,一種方法是把每個else同與它結合的if對齊排列,另一種方法是直接加花括號。if(a>b){ if(a>c) max=a; else max=c;}else{ if(b>c) max=b; else max=c;}if語句的嵌套多分支控制的級聯(lián)式語句級聯(lián)式if語句的一般格式為:if(表達式1)

語句1elseif(表達式2)

語句2…elseif(表達式n-1)

語句n-1else

語句n多分支控制的級聯(lián)式語句【例4.5】

編寫程序,計算證券公司對證券用戶買賣股票時收取的傭金。傭金根據(jù)股票交易額采用某種變化的比例進行計算。表4-6給出了證券交易傭金,最低傭金為39元。股票交易額范圍傭金低于2500元30元+1.7%2500~6250元56元+0.66%6250~20000元76元+0.34%20000~50000元100元+0.22%50000~500000元155元+0.11%超過500000元255元+0.09%表4-6證券交易傭金多分支控制的級聯(lián)式語句/*采用級聯(lián)式if語句計算證券交易傭金*/#include<stdio.h>intmain(){ floatexpenses,value; scanf("%f",&value); if(value<2500.00) expenses=30.00+0.017*value; elseif(value<6250.00) expenses=56.00+0.0066*value; elseif(value<20000.00) expenses=76.00+0.0034*value; elseif(value<50000.00) expenses=100.00+0.0022*value; elseif(value<500000.00) expenses=155.00+0.0011*value; else expenses=255.00+0.0009*value; if(expenses<39.00) expenses=39.00; printf("expenses:¥%.2f",expenses); return0;}switch(表達式){caseE1:

語句組1;break;caseE2:

語句組2;break;…….caseEn:

語句組n;break;[default:

語句組;break;]}switch表達式語句組1語句組2語句組n語句組…...E1E2Endefaultcase

多分支開關語句多分支開關語句switch(表達式){

case

value1:

statement1; break;

case

value2:

statement2; break;

……

default

:

statementX; break;}不要忘記大括號!!不要忘記冒號!!不要忘記空格!!

必須是int或char!類型多分支開關語句例如

switch(grade){ case1: printf(“A\n"); break; case2: printf(“B\n"); break; case3: printf(“C\n"); break; default: printf(“Invalidgrade\n"); break; } printf("End");假設grade=1,so……thisstepwillbeexecuted.Later……caseisterminatedhere.Jumpto…A_AEnd_多分支開關語句

switch(grade){ case1: printf(“A\n"); break; case2: printf(“B\n"); break; case3: printf(“C\n"); break; default: printf(“Invalidgrade\n"); break; } printf("End");…thisstepwillbeexecuted.Later…C_CEnd_假設grade=3,so……caseisterminatedhere.Jumpto…多分支開關語句

switch(grade){ case1: printf(“A\n"); break; case2: printf(“B\n"); break; case3: printf(“C\n"); break; default: printf(“Invalidgrade\n"); break;}printf("End");Now…whatwillhappenifthisbreakistakenoutfromtheprogram?多分支開關語句

switch(grade){ case1: printf(“A\n"); break; case2: printf(“B\n");

case3: printf(“C\n"); break; default: printf(“Invalidgrade\n"); break; } printf("End");Nomore!多分支開關語句

switch(grade){ case1: printf(“A\n"); break; case2: printf(“B\n");

case3: printf(“C\n"); break; default: printf(“Invalidgrade\n"); break; } printf("End");…thisstepwillbeexecuted.Later…B_C_假設grade=2,so……caseisterminatedhere.Jumpto…End_…executioncontinues.Thus,thisstepisexecuted.So…多分支開關語句

switch(grade){ case1: printf(“A\n"); break; case2: printf(“B\n");

case3: printf(“C\n"); break; default: printf(“Invalidgrade\n"); break;} printf("End");Now…whatwillhappenifthesebreaksaretakenoutfromtheprogram?And…ifgrade=1?And…ifgrade=34?最好不省略!【例4.6】

判斷任意日期是該年的第幾天。#include<stdio.h>intmain(){ intyear,month,day,total; printf("請輸入年,月,日數(shù)據(jù):\n"); scanf("%d,%d,%d",&year,&month,&day); switch(month) { case1:total=day;break; case2:total=day+31;break; case3:total=day+31+28;break; case4:total=day+31+28+31;break; case5:total=day+31+28+31+30;break;

多分支開關語句 case6:total=day+31+28+31+30+31;break;

溫馨提示

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

最新文檔

評論

0/150

提交評論