




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第四章(2)本章要點(diǎn)
關(guān)系表達(dá)式邏輯表達(dá)式選擇結(jié)構(gòu)程序設(shè)計(jì)主要內(nèi)容4.1選擇結(jié)構(gòu)和條件判斷4.2用if語句實(shí)現(xiàn)選擇結(jié)構(gòu)4.3關(guān)系運(yùn)算符和關(guān)系表達(dá)式4.4邏輯運(yùn)算符和邏輯表達(dá)式4.5條件運(yùn)算符和條件表達(dá)式4.6選擇結(jié)構(gòu)的嵌套4.7用switch語句實(shí)現(xiàn)多分支選擇結(jié)構(gòu)4.8選擇結(jié)構(gòu)程序綜合舉例4.5條件運(yùn)算符和條件表達(dá)式有一種if語句,當(dāng)被判別的表達(dá)式的值為“真”或“假”時(shí),都執(zhí)行一個(gè)賦值語句且向同一個(gè)變量賦值如:if(a>b)max=a;elsemax=b;max=(a>b)?a
:b;條件運(yùn)算符有一種if語句,當(dāng)被判別的表達(dá)式的值為“真”或“假”時(shí),都執(zhí)行一個(gè)賦值語句且向同一個(gè)變量賦值如:if(a>b)max=a;elsemax=b;max=(a>b)?a
:b;條件表達(dá)式條件表達(dá)式的一般形式為表達(dá)式1?表達(dá)式2:
表達(dá)式3條件運(yùn)算符的執(zhí)行順序:求解表達(dá)式1若為非0(真)則求解表達(dá)式2,此時(shí)表達(dá)式2的值就作為整個(gè)條件表達(dá)式的值若表達(dá)式1的值為0(假),則求解表達(dá)式3,表達(dá)式3的值就是整個(gè)條件表達(dá)式的值條件運(yùn)算符優(yōu)先于賦值運(yùn)算符條件運(yùn)算符的結(jié)合方向?yàn)椤白杂抑磷蟆币韵聻楹戏ǖ氖褂梅椒ǎ篴>b?(max=a):(max=b);a>b?printf(“%d”,a):printf(“%d”,b);
例4.4輸入一個(gè)字符,判別它是否大寫字母,如果是,將它轉(zhuǎn)換成小寫字母;如果不是,不轉(zhuǎn)換。然后輸出最后得到的字符。解題思路:用條件表達(dá)式來處理,當(dāng)字母是大寫時(shí),轉(zhuǎn)換成小寫字母,否則不轉(zhuǎn)換#include<stdio.h>intmain(){charch;
scanf("%c",&ch);
ch=(ch>='A'&&ch<='Z‘)?(ch+32):ch;
printf("%c\n",ch);return0;}4.6選擇結(jié)構(gòu)的嵌套在if語句中又包含一個(gè)或多個(gè)if語句稱為if語句的嵌套一般形式:if()if()語句1else語句2elseif()語句3else語句4內(nèi)嵌ifelse總是與它上面最近的未配對的if配對在if語句中又包含一個(gè)或多個(gè)if語句稱為if語句的嵌套if(){
if()語句1}
else語句2內(nèi)嵌if{}限定了內(nèi)嵌if范圍
例4.5有一函數(shù):
編一程序,輸入一個(gè)x值,要求輸出相應(yīng)的y值。解題思路:用if語句檢查x的值,根據(jù)x的值決定賦予y的值由于y的可能值不是兩個(gè)而是三個(gè),因此不可能只用一個(gè)簡單的(無內(nèi)嵌if)的if語句來實(shí)現(xiàn)解題思路:方法1(1)先后用3個(gè)獨(dú)立的if語句處理:輸入x若x<0,則y=-1若x=0,則y=0若x>0,則y=1輸出x和yscanf("%d",&x);if(x<0)y=-1;if(x==0)y=0;if(x>0)y=1;printf("x=%d,y=%d\n",x,y);解題思路:方法2(2)用一個(gè)嵌套的if語句處理:輸入x若x<0,則y=-1否則
若x=0,則y=0
否則y=1輸出x和yscanf("%d",&x);if(x<0)y=-1;elseif(x==0)y=0;elsey=1;printf("x=%d,y=%d\n",x,y);解題思路:方法2(2)用一個(gè)嵌套的if語句處理:輸入x若x<0,則y=-1否則
若x=0,則y=0
否則y=1輸出x和yscanf("%d",&x);if(x<0)y=-1;elseif(x==0)y=0;elsey=1;printf("x=%d,y=%d\n",x,y);scanf("%d",&x);if(x>=0)if(x>0)y=1;elsey=0;elsey=-1;printf("x=%d,y=%d\n",x,y);提倡內(nèi)嵌if放在else中4.7用switch語句實(shí)現(xiàn)多分支選擇結(jié)構(gòu)switch語句用來實(shí)現(xiàn)多分支選擇結(jié)構(gòu)學(xué)生成績分類85分以上為’A’等70~84分為’B’等60~69分為’C’等……人口統(tǒng)計(jì)分類
按年齡分為老、中、青、少、兒童
例4.6要求按照考試成績的等級輸出百分制分?jǐn)?shù)段,A等為85分以上,B等為70~84分,C等為60~69分,D等為60分以下。成績的等級由鍵盤輸入。解題思路:判斷出這是一個(gè)多分支選擇問題根據(jù)百分制分?jǐn)?shù)將學(xué)生成績分為4個(gè)等級如果用if語句,至少要用3層嵌套的if,進(jìn)行3次檢查判斷用switch語句進(jìn)行一次檢查即可得到結(jié)果#include<stdio.h>intmain(){chargrade;
scanf("%c",&grade);
printf("Yourscore:");switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}return0;}值為A#include<stdio.h>intmain(){chargrade;
scanf("%c",&grade);
printf("Yourscore:");switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}return0;}不能少#include<stdio.h>intmain(){chargrade;
scanf("%c",&grade);
printf("Yourscore:");switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}return0;}值為C#include<stdio.h>intmain(){chargrade;
scanf("%c",&grade);
printf("Yourscore:");switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}return0;}值為Fswitch語句的作用是根據(jù)表達(dá)式的值,使流程跳轉(zhuǎn)到不同的語句switch語句的一般形式:switch(表達(dá)式){case常量1:語句1case常量2:語句2
┇
┇
┇case常量n:語句ndefault:語句n+1}整數(shù)類型(包括字符型)switch(表達(dá)式){case常量1:語句1case常量2:語句2
┇
┇
┇case常量n:語句ndefault:語句n+1}不能相同scanf("%c",&grade);
printf("Yourscore:");switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}scanf("%c",&grade);
printf("Yourscore:");switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}scanf("%c",&grade);
printf("Yourscore:");switch(grade){case'A‘:case'B‘:case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}
例4.7編寫程序,用switch語句處理菜單命令。解題思路:在許多應(yīng)用程序中,用菜單對流程進(jìn)行控制,例如從鍵盤輸入一個(gè)’A’或’a’字符,就會執(zhí)行A操作,輸入一個(gè)’B’或’b’字符,就會執(zhí)行B操作,等等。#include<stdio.h>intmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;
ch=getchar();switch(ch){case'a':case‘A’:action1(a,b);break;
case'b':case‘B’:action2(a,b);break;
default:putchar(‘\a’);}return0;}輸入a或A調(diào)用action1函數(shù),執(zhí)行A操作voidaction1(intx,inty){
printf("x+y=%d\n",x+y);}#include<stdio.h>intmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;
ch=getchar();switch(ch){case'a':case‘A’:action1(a,b);break;
case'b':case‘B’:action2(a,b);break;
default:putchar(‘\a’);}return0;}輸入b或B調(diào)用action2函數(shù),執(zhí)行B操作voidaction2(intx,inty){
printf("x*y=%d\n",x*y);}#include<stdio.h>intmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;
ch=getchar();switch(ch){case'a':case‘A’:action1(a,b);break;
case'b':case‘B’:action2(a,b);break;
default:putchar(‘\a’);}return0;}輸入其他字符發(fā)出警告這是一個(gè)非常簡單的示意程序?qū)嶋H應(yīng)用中,所指定的操作可能比較復(fù)雜:A:輸入全班學(xué)生各門課的成績B:計(jì)算并輸出每個(gè)學(xué)生各門課的平均成績C:計(jì)算并輸出各門課的全班平均成績D:對全班學(xué)生的平均成績由高到低排序并輸出可以按以上思路編寫程序,把各action函數(shù)設(shè)計(jì)成不同的功能以實(shí)現(xiàn)各要求4.8選擇結(jié)構(gòu)程序綜合舉例例4.8寫一程序,判斷某一年是否閏年。解題思路:在前面已介紹過判別閏年的方法本例用不同的方法編寫程序用變量leap代表是否閏年的信息。若閏年,令leap=1;非閏年,leap=0。最后判斷l(xiāng)eap是否為1(真),若是,則輸出“閏年”信息參見教材圖4.13#include<stdio.h>intmain() {intyear,leap;
printf("enteryear:");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");return0;}標(biāo)志變量與if(leap!=0)含義相同#include<stdio.h>intmain() {intyear,leap;
printf("enteryear:");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");return0;}采取鋸齒形式#include<stdio.h>intmain() {intyear,leap;
printf("enteryear:");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");return0;}if(year%4!=0)leap=0;elseif(year%100!=0)leap=1;elseif(year%400!=0)leap=0;else
leap=1;#include<stdio.h>intmain() {intyear,leap;
printf("enteryear:");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");return0;}if((year%4==0&&year%100!=0)||(year%400==0))leap=1;elseleap=0;
例4.9求
方程的解。解題思路:處理以下各情況①
a=0,不是二次方程②
,有兩個(gè)相等實(shí)根
③
,有兩個(gè)不等實(shí)根。
④
,有兩個(gè)共軛復(fù)根。
應(yīng)當(dāng)以p+qi和p-qi的形式輸出復(fù)根
其中,p=-b/2a,q=()/2a參見教材圖4.14#include<stdio.h>#include<math.h>intmain(){doublea,b,c,disc,x1,x2,realpart,
imagpart;
scanf("%lf,%lf,%lf",&a,&b,&c);
printf("Theequation");if(fabs(a)<=1e-6)
printf("isnotaquadratic\n");實(shí)型不能用if(a==0)else{disc=b*b-4*a*c;if(fabs(disc)<=1e-6)
printf("hastwoequalroots:%8.4f\n",-b/(2*a));else先算disc,以減少重復(fù)計(jì)算不能用if(disc==0)if(disc>1e-6) {x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);
printf("hasdistinctrealroots:%8.4fand%8.4f\n",x1,x2); }else{realpart=-b/(2*a);
imagpart=sqrt(-disc)/(2*a);
printf("hascomplexroots:\n");
printf("%8.4f+%8.4fi\n“,realpart,imagpart);
printf("%8.4f-%8.4fi\n",
realpart,imagpart); }}return0;}{realpart=-b/(2*a);
imagpart=sqrt(-disc)/(2*a);
printf("hascomplexroots:\n");
printf("%8.4f+%8.4fi\n“,realpart,imagpart);
printf("%8.4f-%8.4fi\n",
realpart,imagpart); }}return0;}{realpart=-b/(2*a);
imagpart=sqrt(-disc)/(2*a);
printf("hascomplexroots:\n");
printf("%8.4f+%8.4fi\n“,realpart,imagpart);
printf("%8.4f-%8.4fi\n",
realpart,imagpart); }}return0;}
例4.10運(yùn)輸公司對用戶計(jì)算運(yùn)輸費(fèi)用。路程(skm)越遠(yuǎn),每噸·千米運(yùn)費(fèi)越低。標(biāo)準(zhǔn)如下:s<250沒有折扣250≤s<5002%折扣500≤s<10005%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s15%折扣解題思路:設(shè)每噸每千米貨物的基本運(yùn)費(fèi)為p,貨物重為w,距離為s,折扣為d總運(yùn)費(fèi)f的計(jì)算公式為f=p×w×s×(1-d)折扣的變化規(guī)律(參見教材圖4.15):折扣的“變化點(diǎn)”都是250的倍數(shù)在橫軸上加一種坐標(biāo)c,c的值為s/250c代表250的倍數(shù)當(dāng)c<1時(shí),表示s<250,無折扣1≤c<2時(shí),表示250≤s<500,折扣d=2%2≤c<4時(shí),d=5%;4≤c<8時(shí),d=8
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025店面租賃合同模板
- 2025賽事贊助合同模板
- 財(cái)務(wù)分析中的非財(cái)務(wù)指標(biāo)考題及答案
- 2025年工程法規(guī)考試沖刺試題及答案
- 合同法第三方協(xié)議書
- 勞動(dòng)安全合同協(xié)議書
- 合同之間轉(zhuǎn)讓協(xié)議書
- 2025年商業(yè)街區(qū)改造工程社會穩(wěn)定風(fēng)險(xiǎn)評估與社區(qū)歷史文化保護(hù)與傳承報(bào)告
- 合同返利補(bǔ)充協(xié)議書
- 取消承包合同協(xié)議書
- 鳳凰實(shí)驗(yàn)中學(xué)校服供應(yīng)商評價(jià)和退出機(jī)制
- 企業(yè)防范用工風(fēng)險(xiǎn)知識講座
- 急性缺血性腦卒中靜脈溶栓護(hù)理指南:常見問題與解答
- 水利水電重點(diǎn)復(fù)習(xí)知識點(diǎn)總結(jié)
- 完整版江蘇省政府采購專家?guī)烊霂炜荚囶}庫(1-4套卷)
- 高校考試制度的弊端與改革
- ERAS理念在婦科圍手術(shù)期中的應(yīng)用
- 《中心靜脈置管術(shù)》課件
- 高級教師職稱面試講課答辯題目及答案
- 牛安全生產(chǎn)技術(shù)-牛常見心血管系統(tǒng)疾病的防治
- 2023新能源風(fēng)電工程項(xiàng)目文檔全過程控制與檔案整理規(guī)定
評論
0/150
提交評論