C語(yǔ)言程序設(shè)計(jì)(第三版)課件第4章選擇結(jié)構(gòu)程序設(shè)計(jì)_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第三版)課件第4章選擇結(jié)構(gòu)程序設(shè)計(jì)_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第三版)課件第4章選擇結(jié)構(gòu)程序設(shè)計(jì)_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第三版)課件第4章選擇結(jié)構(gòu)程序設(shè)計(jì)_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第三版)課件第4章選擇結(jié)構(gòu)程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第4章選擇結(jié)構(gòu)程序設(shè)計(jì)選擇結(jié)構(gòu)程序設(shè)計(jì)

王小姐9月份的業(yè)績(jī)不錯(cuò),根據(jù)合同,公司給她薪資為58000元,中華人民共和國(guó)個(gè)人所得稅法規(guī)定:從2011年9月1日起,中國(guó)內(nèi)地個(gè)稅免征額調(diào)至3500元。當(dāng)月的收入超過(guò)3500元按照以下表格提供的利率繳納個(gè)人收入所得稅,王小姐非常想知道她9月拿到自己手里的錢(qián)是多少?級(jí)數(shù)全月應(yīng)納稅所得額(含稅級(jí)距)稅率(%)1全月應(yīng)納稅所得額不超過(guò)1500元3%2全月應(yīng)納稅所得額超過(guò)1500元至4500元10%3全月應(yīng)納稅所得額超過(guò)4500元至9000元20%4全月應(yīng)納稅所得額超過(guò)9000元至35000元25%5全月應(yīng)納稅所得額超過(guò)35000元至55000元30%6全月應(yīng)納稅所得額超過(guò)55000元至80000元35%7全月應(yīng)納稅所得額超過(guò)80000元45%選擇結(jié)構(gòu)的作用是根據(jù)給定的條件來(lái)決定做什么的操作。if語(yǔ)句if-else語(yǔ)句if-elseif-else語(yǔ)句if-else語(yǔ)句【例1】利用if-else語(yǔ)句求兩個(gè)整數(shù)中較大者。if(表達(dá)式)

語(yǔ)句1else

語(yǔ)句2inta,b,max;scanf("%d,%d",&a,&b);if(a>b){max=a;}else{max=b;}if-else語(yǔ)句inta,b,c,max;scanf("%d,%d,%d",&a,&b,&c);if(a>b){max=a;}else{max=b;}【例2】求三個(gè)整數(shù)a,b,c中的最大數(shù)。if(max<c)max=c;elsemax=max;單if語(yǔ)句其一般形式為:

if(表達(dá)式)

語(yǔ)句

if(max<c){max=c;}if(max<c)max=c;else

max=max;單if語(yǔ)句【例3】利用單if語(yǔ)句求兩個(gè)整數(shù)中較大者。inta,b,max;scanf("%d,%d",&a,&b);max=a;

if(max<b){max=b;}其一般形式為:if(表達(dá)式1)

語(yǔ)句1elseif(表達(dá)式2)

語(yǔ)句2elseif(表達(dá)式3)

語(yǔ)句3……elseif(表達(dá)式n-1)

語(yǔ)句n-1else

語(yǔ)句n假真表達(dá)式n-1表達(dá)式1假真表達(dá)式2假真假真……語(yǔ)句1語(yǔ)句2語(yǔ)句3語(yǔ)句n-1語(yǔ)句n表達(dá)式3系統(tǒng)首先求解表達(dá)式1的值,當(dāng)其值為“真”(非0)時(shí),執(zhí)行語(yǔ)句1,然后跳出該選擇結(jié)構(gòu);否則求解表達(dá)式2的值,當(dāng)其值為“真”(非0)時(shí),則執(zhí)行語(yǔ)句2,然后跳出該選擇結(jié)構(gòu);否則再繼續(xù)求解表達(dá)式3,當(dāng)其值為“真”(非0)時(shí),執(zhí)行語(yǔ)句3,然后跳出該選擇結(jié)構(gòu);否則接著進(jìn)行判斷,依次類(lèi)推。如果經(jīng)過(guò)求解,所有的表達(dá)式都為“假”(0),就執(zhí)行最后一個(gè)else部分的語(yǔ)句n,從而結(jié)束整個(gè)if語(yǔ)句。if-elseif-else語(yǔ)句例4

給出百分制的成績(jī),要求輸出成績(jī)等級(jí)A、B、C、D、E。90分以上為A,80~89分為B,70~79分為C,60~69分為D,60分以下為E。

設(shè)成績(jī)?yōu)閟core,假設(shè)取值在0~100之間,沒(méi)有錯(cuò)誤的輸入,則有:0≤score<60 E60≤score≤69 D70≤score≤79 C80≤score≤89 B90≤score≤100Aintscore;scanf("%d",&score);if(score>=0&&score<60){printf("gradeisE\n");}elseif(score>=60&&score<=69){printf("gradeisD\n");}elseif(score>=70&&score<=79){printf("gradeisC\n");}elseif(score>=80&&score<=89){printf("gradeisB\n");}else{printf("gradeisA\n");}分析:

#include"stdio.h"voidmain(){intscore;scanf("%d",&score);if(score>=0&&score<60)printf("gradeisE\n");elseif(score>=60&&score<=69)printf("gradeisD\n");elseif(score>=70&&score<=79)printf("gradeisC\n");elseif(score>=80&&score<=89)printf("gradeisB\n");elseprintf("gradeisA\n");}#include"stdio.h"voidmain(){intscore;scanf("%d",&score);if(score>=0&score<60)printf("gradeisE\n");elseif(score<=69)printf("gradeisD\n");elseif(score<=79)printf("gradeisC\n");elseif(score<=89)printf("gradeisB\n");elseprintf("gradeisA\n");}#include"stdio.h"voidmain(){intscore;scanf("%d",&score);if(score>=0&&score<60)printf("gradeisE\n");elseif(score<=79)printf("gradeisC\n");elseif(score<=89)printf("gradeisB\n");elseif(score<=69)printf("gradeisD\n");elseprintf("gradeisA\n");}在使用if語(yǔ)句中還應(yīng)注意以下問(wèn)題:(1)if語(yǔ)句中的表達(dá)式通常是邏輯表達(dá)式或關(guān)系表達(dá)式,也可以是其他類(lèi)型的表達(dá)式,如賦值表達(dá)式等,甚至可以是一個(gè)變量。(2)在if語(yǔ)句中,表達(dá)式必須用括號(hào)括起來(lái),在語(yǔ)句之后必須加分號(hào)。(3)在if語(yǔ)句的三種形式中,所有的語(yǔ)句應(yīng)為單個(gè)語(yǔ)句,如果要想在滿足條件時(shí)執(zhí)行一組(多個(gè))語(yǔ)句,則必須把這一組語(yǔ)句用{}括起來(lái)組成一個(gè)復(fù)合語(yǔ)句,但要注意的是在{}之后不能再加分號(hào)。if(a=5)語(yǔ)句;if(b)語(yǔ)句;if(a=b)printf("%d",a);elseprintf("a=0");該語(yǔ)句的語(yǔ)義是:把b值賦予a,如為非0則輸出該值,否則輸出"a=0"字符串。這種用法在程序中是經(jīng)常出現(xiàn)的。if(a>b) {a++;b++;}else{a=0;b=10;}4.1.2if語(yǔ)句的嵌套在if語(yǔ)句中又包含一個(gè)或多個(gè)if語(yǔ)句稱(chēng)為if語(yǔ)句的嵌套。if語(yǔ)句可以內(nèi)嵌在if子句中,又可以內(nèi)嵌在else子句中。if()if()

內(nèi)嵌if

語(yǔ)句1else

語(yǔ)句2elseif()

內(nèi)嵌if

語(yǔ)句3else

語(yǔ)句4內(nèi)嵌if內(nèi)嵌if如果if與else的數(shù)目不一樣,為實(shí)現(xiàn)程序設(shè)計(jì)者的企圖,可以加花括號(hào)來(lái)確定配對(duì)關(guān)系。if(){if()語(yǔ)句1}(內(nèi)嵌if)else

語(yǔ)句2這時(shí){}限定了內(nèi)嵌if語(yǔ)句的范圍,因此else與第一個(gè)if配對(duì)。例5

猜數(shù)程序,和預(yù)定的數(shù)比較,并給出相應(yīng)的提示。

#include"stdio.h"voidmain(){intnumber=200;inti;scanf("%d",&i);if(i>number)printf("猜大了!");elseif(i<number)printf("猜小了!");elseprintf("猜對(duì)了!");}例6

求三個(gè)整數(shù)a,b,c中的最大數(shù)。

#include"stdio.h"voidmain(){inta,b,c,max;printf("a,b,c=");scanf("%d,%d,%d",&a,&b,&c);max=a;if(b>c){if(b>a)max=b;}elseif(c>a)max=c;printf("max=%d\n",max);}通過(guò)這個(gè)例子可以認(rèn)識(shí)到:(1)不平衡的if-else結(jié)構(gòu)會(huì)增加閱讀和理解程序的困難。(2)正確的縮進(jìn)格式(即鋸齒形書(shū)寫(xiě)格式)可以幫助人們理解程序,但錯(cuò)誤的縮進(jìn)格式反而會(huì)使人迷惑。(3)不要太相信自己的判斷,要嚴(yán)格按語(yǔ)法關(guān)系檢查程序。在不易弄清的地方可以加花括號(hào)來(lái)保證自己構(gòu)思的邏輯關(guān)系的正確性。#include"stdio.h"voidmain(){inta,b,c,max;printf("請(qǐng)輸入a,b,c的值\n");scanf("%d,%d,%d",&a,&b,&c);if(a>b&&b>c)max=a;elseif(b>c&&b>a)max=b;elsemax=c;printf("max=%d\n",max);}4.2switch語(yǔ)句一般形式為:switch(表達(dá)式){case常量表達(dá)式1:語(yǔ)句1;case常量表達(dá)式2:語(yǔ)句2;……case常量表達(dá)式n:語(yǔ)句n;[default:語(yǔ)句n+1;]}執(zhí)行時(shí),系統(tǒng)首先求解表達(dá)式的值,然后依次與各個(gè)case后面給出的常量表達(dá)式的值相比較,當(dāng)表達(dá)式的值與某個(gè)case后的常量表達(dá)式的值相等時(shí),就從此處開(kāi)始執(zhí)行該case后面的語(yǔ)句,而不再進(jìn)行判斷。如果所有的case后面的常量表達(dá)式的值都和表達(dá)式的值不匹配,系統(tǒng)就執(zhí)行default后面的語(yǔ)句,如果程序省略了default語(yǔ)句,那么將不作任何處理,接著執(zhí)行該選擇結(jié)構(gòu)下面的語(yǔ)句。例7

輸入一個(gè)星期數(shù)字,輸出其對(duì)應(yīng)的英文單詞。

#include"stdio.h"voidmain(){inta;printf("請(qǐng)輸入一個(gè)星期數(shù)字(1~7):");scanf("%d",&a);switch(a){ case1:printf("Monday\n"); case2:printf("Tuesday\n"); case3:printf("Wednesday\n"); case4:printf("Thursday\n"); case5:printf("Friday\n"); case6:printf("Saturday\n"); case7:printf("Sunday\n"); default:printf("Error!\n");}}結(jié)果:當(dāng)輸入3之后,卻執(zhí)行了case3以及以后的所有語(yǔ)句,輸出了Wednesday及以后的所有單詞。

switch(a){case1:printf("Monday\n");break;case2:printf("Tuesday\n");break;case3:printf("Wednesday\n");break;case4:printf("Thursday\n");break;case5:printf("Friday\n");break;case6:printf("Saturday\n");break;case7:printf("Sunday\n");break;default:printf("Error!\n");}在switch語(yǔ)句中,“case常量表達(dá)式”只相當(dāng)于一個(gè)語(yǔ)句標(biāo)號(hào),當(dāng)表達(dá)式的值和某標(biāo)號(hào)相等則轉(zhuǎn)向該標(biāo)號(hào)執(zhí)行,但不能在執(zhí)行完該標(biāo)號(hào)的語(yǔ)句后自動(dòng)跳出整個(gè)switch語(yǔ)句,所以出現(xiàn)了繼續(xù)執(zhí)行所有后面case語(yǔ)句的情況。在使用switch語(yǔ)句時(shí)還應(yīng)注意以下幾點(diǎn):<表達(dá)式>可以是任何類(lèi)型,經(jīng)常采用整型或字符型表達(dá)式。case后面必須是常量表達(dá)式,不能包含變量,且各常量表達(dá)式的值不能相同,否則會(huì)出現(xiàn)互相矛盾的現(xiàn)象。因?yàn)閏ase后面的常量表達(dá)式實(shí)際上起語(yǔ)句標(biāo)號(hào)的作用,而程序中不應(yīng)該同時(shí)出現(xiàn)相同標(biāo)號(hào)的語(yǔ)句。在case后,允許有多個(gè)語(yǔ)句,可以不用{}括起來(lái)。各case和default子句的先后順序可以變動(dòng),而不會(huì)影響程序執(zhí)行結(jié)果。多個(gè)case可以共用同一組執(zhí)行語(yǔ)句,此時(shí)只有在包含語(yǔ)句的case中有break語(yǔ)句,而其他case中則不包含break語(yǔ)句。(6)switch語(yǔ)句也可以內(nèi)嵌在某個(gè)case語(yǔ)句中使用,還可以和if語(yǔ)句或if語(yǔ)句的嵌套形式互相嵌套使用。例8

輸入任一平年的月份,輸出該月份對(duì)應(yīng)的天數(shù)。

分析:設(shè)月份為month,天數(shù)為day,則有:month=1,3,5,7,8,10,12 day=31month=4,6,9,11 day=30month=2 day=28#include"stdio.h"voidmain(){intmonth,day;printf("請(qǐng)輸入月份(1-12):");scanf("%d",&month);switch(month){case4:case6:case9:case11:day=30;break;case2:day=28;break;default:day=31;}printf("day=%d",day);}if-elseif-else語(yǔ)句與switch語(yǔ)句是多分支選擇的兩種形式。它們的應(yīng)用環(huán)境不同:if-elseif-else語(yǔ)句用于對(duì)多條件并列測(cè)試,從中取一的情形;switch語(yǔ)句用于單條件測(cè)試,從其多種結(jié)果中取一的情形。4.3程序舉例例4.8輸入三個(gè)整數(shù),輸出最大數(shù)和最小數(shù)。

#include"stdio.h"voidmain(){inta,b,c,max,min;printf("請(qǐng)輸入a,b,c的值\n");scanf("%d,%d,%d",&a,&b,&c);if(a>b){max=a;min=b;}else{max=b;min=a;}if(max<c)max=c;elseif(min>c)min=c;printf("max=%d\nmin=%d",max,min);}首先比較a,b的大小,把大數(shù)裝入max,小數(shù)裝入min中。然后再與c比較,若max小于c,則把c賦予max;如果c小于min,則把c賦予min。因此max總是最大數(shù),而min總是最小數(shù)。最后輸出max和min的值即可。例9

計(jì)算器程序。用戶輸入運(yùn)算數(shù)和四則運(yùn)算符,輸出計(jì)算結(jié)果。

#include"stdio.h"voidmain(){floata,b;charc;printf("請(qǐng)輸入運(yùn)算數(shù)和四則運(yùn)算符如a+(-,*,/)b:");scanf("%f%c%f",&a,&c,&b);switch(c){case'+':printf("%f\n",a+b);break;case'-':printf("%f\n",a-b);break;case'*':printf("%f\n",a*b);break;case'/':printf("%f\n",a/b);break;default:printf("Inputerror!\n");}}例10求一元二次方程ax+bx+c=0的根。

結(jié)束單根x=-c/b無(wú)解兩虛根兩實(shí)根真假假假真真b=0b2-4ac<0a=0開(kāi)始輸入a,b,c#include"stdio.h"#include"math.h"voidmain(){floata,b,c,disc,x1,x2,realpart,imagpart;printf("請(qǐng)輸入a,b,c的值\n");scanf("%f,%f,%f",&a,&b,&c);if(fabs(a)<=1e-6&&fabs(b)<=1e-6)printf("方程無(wú)解!\n");elseif(fabs(a)<=1e-6&&fabs(b)>1e-6)printf("方程有單根是%8.4f\n",-c/b);else{disc=b*b-4*a*c;if(fabs(disc)<=1e-6||disc>1e-6){x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf("方程有兩個(gè)實(shí)根!\n");printf("x1=%8.4f\n",x1);printf("x2=%8.4f\n",x2);}else{realpart=-b/(2*a);imagpart=sqrt(-disc)/(2*a);printf("方程有兩個(gè)虛根!\n");printf("x1=%8.4f+%8.4fi\n",realpart,imagpart);printf("x2=%8.4f-%8.4fi\n",realpart,imagpart);}}}2例11

已知某公司員工的底薪為500元,該員工在某月所接工程項(xiàng)目的利潤(rùn)profit與個(gè)人提成的關(guān)系如下(計(jì)量單位:元):利潤(rùn)profit<1000,沒(méi)有提成;利潤(rùn)在1000≤profit<2000時(shí),提成是所有利潤(rùn)的10%;當(dāng)利潤(rùn)在2000≤profit<5000之間時(shí),提成是所有利潤(rùn)的15%;當(dāng)利潤(rùn)在5000≤profit<10000之間時(shí),提成是所有利潤(rùn)的20%;當(dāng)profit≥10000時(shí),提成是所有利潤(rùn)的25%。

運(yùn)行結(jié)果為Inputprofit:3000salary=950.00設(shè):該員工某月的薪水為salary,利潤(rùn)為profit,提成為d(deduct的縮寫(xiě)),則員工改越總的薪水計(jì)算公式為

salary=500+profit*d;

#include<stdio.h>voidmain(){in

溫馨提示

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

評(píng)論

0/150

提交評(píng)論