版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第四章(2)本章要點
關(guān)系表達式邏輯表達式選擇結(jié)構(gòu)程序設(shè)計主要內(nèi)容4.1選擇結(jié)構(gòu)和條件判斷4.2用if語句實現(xiàn)選擇結(jié)構(gòu)4.3關(guān)系運算符和關(guān)系表達式4.4邏輯運算符和邏輯表達式4.5條件運算符和條件表達式4.6選擇結(jié)構(gòu)的嵌套4.7用switch語句實現(xiàn)多分支選擇結(jié)構(gòu)4.8選擇結(jié)構(gòu)程序綜合舉例4.5條件運算符和條件表達式有一種if語句,當(dāng)被判別的表達式的值為“真”或“假”時,都執(zhí)行一個賦值語句且向同一個變量賦值如:if(a>b)max=a;elsemax=b;max=(a>b)?a
:b;條件運算符有一種if語句,當(dāng)被判別的表達式的值為“真”或“假”時,都執(zhí)行一個賦值語句且向同一個變量賦值如:if(a>b)max=a;elsemax=b;max=(a>b)?a
:b;條件表達式條件表達式的一般形式為表達式1?表達式2:
表達式3條件運算符的執(zhí)行順序:求解表達式1若為非0(真)則求解表達式2,此時表達式2的值就作為整個條件表達式的值若表達式1的值為0(假),則求解表達式3,表達式3的值就是整個條件表達式的值條件運算符優(yōu)先于賦值運算符條件運算符的結(jié)合方向為“自右至左”以下為合法的使用方法:a>b?(max=a):(max=b);a>b?printf(“%d”,a):printf(“%d”,b);
例4.4輸入一個字符,判別它是否大寫字母,如果是,將它轉(zhuǎn)換成小寫字母;如果不是,不轉(zhuǎn)換。然后輸出最后得到的字符。解題思路:用條件表達式來處理,當(dāng)字母是大寫時,轉(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語句中又包含一個或多個if語句稱為if語句的嵌套一般形式:if()if()語句1else語句2elseif()語句3else語句4內(nèi)嵌ifelse總是與它上面最近的未配對的if配對在if語句中又包含一個或多個if語句稱為if語句的嵌套if(){
if()語句1}
else語句2內(nèi)嵌if{}限定了內(nèi)嵌if范圍
例4.5有一函數(shù):
編一程序,輸入一個x值,要求輸出相應(yīng)的y值。解題思路:用if語句檢查x的值,根據(jù)x的值決定賦予y的值由于y的可能值不是兩個而是三個,因此不可能只用一個簡單的(無內(nèi)嵌if)的if語句來實現(xiàn)解題思路:方法1(1)先后用3個獨立的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)用一個嵌套的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)用一個嵌套的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語句實現(xiàn)多分支選擇結(jié)構(gòu)switch語句用來實現(xiàn)多分支選擇結(jié)構(gòu)學(xué)生成績分類85分以上為’A’等70~84分為’B’等60~69分為’C’等……人口統(tǒng)計分類
按年齡分為老、中、青、少、兒童
例4.6要求按照考試成績的等級輸出百分制分?jǐn)?shù)段,A等為85分以上,B等為70~84分,C等為60~69分,D等為60分以下。成績的等級由鍵盤輸入。解題思路:判斷出這是一個多分支選擇問題根據(jù)百分制分?jǐn)?shù)將學(xué)生成績分為4個等級如果用if語句,至少要用3層嵌套的if,進行3次檢查判斷用switch語句進行一次檢查即可得到結(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ù)表達式的值,使流程跳轉(zhuǎn)到不同的語句switch語句的一般形式:switch(表達式){case常量1:語句1case常量2:語句2
┇
┇
┇case常量n:語句ndefault:語句n+1}整數(shù)類型(包括字符型)switch(表達式){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)用程序中,用菜單對流程進行控制,例如從鍵盤輸入一個’A’或’a’字符,就會執(zhí)行A操作,輸入一個’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ā)出警告這是一個非常簡單的示意程序?qū)嶋H應(yīng)用中,所指定的操作可能比較復(fù)雜:A:輸入全班學(xué)生各門課的成績B:計算并輸出每個學(xué)生各門課的平均成績C:計算并輸出各門課的全班平均成績D:對全班學(xué)生的平均成績由高到低排序并輸出可以按以上思路編寫程序,把各action函數(shù)設(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,不是二次方程②
,有兩個相等實根
③
,有兩個不等實根。
④
,有兩個共軛復(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");實型不能用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ù)計算不能用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運輸公司對用戶計算運輸費用。路程(skm)越遠,每噸·千米運費越低。標(biāo)準(zhǔn)如下:s<250沒有折扣250≤s<5002%折扣500≤s<10005%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s15%折扣解題思路:設(shè)每噸每千米貨物的基本運費為p,貨物重為w,距離為s,折扣為d總運費f的計算公式為f=p×w×s×(1-d)折扣的變化規(guī)律(參見教材圖4.15):折扣的“變化點”都是250的倍數(shù)在橫軸上加一種坐標(biāo)c,c的值為s/250c代表250的倍數(shù)當(dāng)c<1時,表示s<250,無折扣1≤c<2時,表示250≤s<500,折扣d=2%2≤c<4時,d=5%;4≤c<8時,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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 協(xié)議離婚的協(xié)議書范本10篇
- 2023安全生產(chǎn)責(zé)任協(xié)議書七篇
- 萬能模板賠償協(xié)議書范本10篇
- 機械基礎(chǔ) 課件 模塊六任務(wù)二 鏈傳動
- 中醫(yī)藥基礎(chǔ)專題知識宣教
- (立項備案申請模板)超薄金剛石項目可行性研究報告參考范文
- (安全生產(chǎn))選礦廠安全生產(chǎn)標(biāo)準(zhǔn)化自評報告
- (2024)酒文化創(chuàng)意產(chǎn)業(yè)園建設(shè)項目可行性研究報告(一)
- 清明節(jié)緬懷先烈主題班會71
- 2023年薄板木船項目籌資方案
- 【基于抖音短視頻的營銷策略分析文獻綜述2800字(論文)】
- 2021-2022學(xué)年度西城區(qū)五年級上冊英語期末考試試題
- 《組織行為學(xué)》(本)形考任務(wù)1-4
- 廣東省廣州市白云區(qū)2022-2023學(xué)年九年級上學(xué)期期末語文試題
- 劇本-進入黑夜的漫長旅程
- DB43-T 958.3-2023 實驗用小型豬 第3部分:配合飼料
- 化肥購銷合同范本正規(guī)范本(通用版)
- 健康管理專業(yè)職業(yè)生涯規(guī)劃書
- 外墻巖棉板施工方案
- 吊裝葫蘆施工方案
- 自動化設(shè)備調(diào)試規(guī)范
評論
0/150
提交評論