版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第4章項目二中的選擇執(zhí)行設(shè)計4.1任務(wù)分析4.2關(guān)系運算符、邏輯運算符、條件運算符4.3使用if-else實現(xiàn)分支結(jié)構(gòu)4.4使用switch語句實現(xiàn)分支結(jié)構(gòu)4.5分支結(jié)構(gòu)程序設(shè)計示例21:031【例4.1】輸入三角形的三條邊,判斷是否能構(gòu)成三角形,若能則計算并輸出三角形的面積,否則給出出錯提示。4.1引例#include<stdio.h>#include<math.h>intmain(){inta,b,c; floatarea; doubles; printf("請輸入三角形的三條邊長:");scanf("%d,%d,%d",&a,&b,&c); s=(a+b+c)/2.0;if(a+b<=c||b+c<=a||a+c<=b) printf("不構(gòu)成三角形\n"); else{area=sqrt(s*(s-a)*(s-b)*(s-c)); printf("三角形的面積是:%f\n",area); }return0;}
運行結(jié)果:請輸入三角形的三條邊長:3,4,5三角形的面積是:6.000000【例4.2】編寫程序,輸入x的值,按以下分段函數(shù)計算并輸出y的值.#include<stdio.h>intmain(){intx;floaty;printf("輸入x的值:");scanf("%d",&x); if(x!=0) y=1.0/x;else y=0;printf("%d,%f",x,y);return0;}
運行結(jié)果1:輸入x的值:22,0.500000運行結(jié)果2:輸入x的值:00,0.0000004.2.1關(guān)系運算符和關(guān)系表達(dá)式1.關(guān)系運算符用于判斷兩個操作數(shù)的大小關(guān)系
4.2關(guān)系運算符、邏輯運算符、條件運算符注意:關(guān)系運算符中,>、<、>=、<=的優(yōu)先級相同,==、!=的優(yōu)先級相同,前者的優(yōu)先級高于后者,即“>=”的優(yōu)先級高于“==”。關(guān)系運算符的優(yōu)先級低于算術(shù)運算符,但是高于賦值運算符。關(guān)系運算符都是雙目運算符,其結(jié)合方向是左結(jié)合。2.關(guān)系表達(dá)式用關(guān)系運算符將兩個表達(dá)式連接起來的式子稱為關(guān)系表達(dá)式。一般形式為:
表達(dá)式1關(guān)系運算符表達(dá)式2例如:“a+b>=c-d”
關(guān)系表達(dá)式中允許出現(xiàn)嵌套的情況,例如:“a>(b>c)”、“a!=(c==d)”等。關(guān)系表達(dá)式主要用于分支結(jié)構(gòu)中的條件判斷。關(guān)系表達(dá)式的結(jié)果是一個邏輯值“真”或“假”,由于C語言中沒有邏輯類型的數(shù)據(jù),因此用“1”表示“真”,“0”表示“假”。注意:在關(guān)系表達(dá)式中需注意區(qū)分“=”和“==”。對實數(shù)進行相等判斷可能得不到正確的結(jié)果,例如“1.0/3*3.0==1.0”的結(jié)果為0。關(guān)系表達(dá)式中可以出現(xiàn)賦值運算符,如“a>(b=0)”,但是不能寫成“a>b=0”的形式?!纠?.3】關(guān)系運算示例。#include<stdio.h>intmain(){ charc='m'; inti=10,j=20,k=30; floatx=13e+5,y=10.85;
printf("%d,%d,",'a'+5<c,-i-2*j>=k+1); printf("%d,%d,",1<j<5,x-5.25<=x+y); printf("%d,%d\n",i+j+k==-2*j,k==j==i+5); return0;}運行結(jié)果:1,0,1,1,0,0x小于10且x大于44<x<10則當(dāng)x=2時,判斷此表達(dá)式的結(jié)果。當(dāng)x=2時,4<x<10的結(jié)果為1,顯然是錯誤的。此時需要用到邏輯運算符將若干個關(guān)系表達(dá)式連接起來才能正確描述上述關(guān)系。4.2.2邏輯運算符和邏輯表達(dá)式1.邏輯運算符
如果寫成:邏輯運算符有邏輯非(?。?、邏輯與(&&)和邏輯或(||)三種xy!xx&&yx||y001000非0101非00001非0非00112.邏輯表達(dá)式用邏輯運算符將兩個表達(dá)式連接起來的式子稱為邏輯表達(dá)式,其中的表達(dá)式可以又是邏輯表達(dá)式,一般形式為:
表達(dá)式1邏輯運算符表達(dá)式2
或
邏輯運算符表達(dá)式1如:“(a&&b)||c”。邏輯表達(dá)式的結(jié)果也是一個邏輯值“真”或“假”,即為“1”或“0”。參與邏輯運算的數(shù)據(jù)可以是1和0,也可以是非零值和0,還可以是任何類型的數(shù)據(jù),但最終都是以非0和0來判斷他們是“真”或“假”。在邏輯表達(dá)式中也可以使用賦值運算符,如“a&&(b=0)”,但是不能寫成“a&&b=0”的形式。短路:C語言規(guī)定,只對決定整個表達(dá)式值所需的最少數(shù)目的子表達(dá)式進行運算。即在由若干個子表達(dá)式組成的邏輯表達(dá)式中,從左向右計算,當(dāng)計算出一個子表達(dá)式的值就確定了整個邏輯表達(dá)式的值時,此后就不再計算右邊剩下的子表達(dá)式的值,這種情況稱為“短路”。說明:①對于&&運算,若“&&”左邊的表達(dá)式的值為假,則可以得出整個表達(dá)式的值為假,那么“&&”右邊的表達(dá)式將不再進行計算;只有當(dāng)“&&”左邊的表達(dá)式值為真時才計算右邊表達(dá)式的值。②對于||運算,若“||”左邊的表達(dá)式的值為真,則可以得出整個表達(dá)式的值為真,那么“||”右邊的表達(dá)式將不再進行計算;只有當(dāng)“||”左邊的表達(dá)式值為假時才計算右邊表達(dá)式的值?!纠?.5】邏輯運算示例。#include<stdio.h>intmain(){ inta=3,b=3,c=2,d; printf("%d,",!a&&!b&&c); printf("%d,",!a||!b||c); printf("%d\n",a>=b&&b>c); d=c--||(b=6)&&a++; printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d); return0;}運行結(jié)果:0,1,1a=3,b=3,c=1,d=11.條件運算符條件運算符由兩個符號“?”和“:”組成,用于條件求值。是一個三目運算符,需要三個操作數(shù)。條件運算符的優(yōu)先級低于邏輯運算符、高于賦值運算符,它是右結(jié)合的。4.2.3條件運算符和條件表達(dá)式2.條件表達(dá)式由條件運算符將3個表達(dá)式連接起來的式子稱為條件表達(dá)式,其一般形式為:表達(dá)式1?表達(dá)式2:表達(dá)式3條件表達(dá)式的執(zhí)行順序:
若表達(dá)式1的值為“真”,則條件表達(dá)式的值為表達(dá)式2,否則,條件表達(dá)式的值為表達(dá)式3條件表達(dá)式中表達(dá)式1的類型可以與表達(dá)式2和表達(dá)式3不同,表達(dá)式2和表達(dá)式3的類型也可以不同。條件表達(dá)式中表達(dá)式2和表達(dá)式3不僅可以是數(shù)值表達(dá)式,還可以是賦值表達(dá)式或函數(shù)表達(dá)式,如“a>b?b=3:(c=4)”,但是不能寫成“a>b?b=3:c=4”的形式。關(guān)于條件表達(dá)式的說明:條件表達(dá)式相當(dāng)于一個雙分支的if語句,當(dāng)if語句中只給同一個變量賦值時,可以使用條件表達(dá)式代替if語句。if(a>0) y=a;
else y=-a;條件表達(dá)式允許嵌套,例如“a>3?b:c>2?1:0”,相當(dāng)于“a>3?b:(c>2?1:0)”。y=(a>0)?a:(-a);【例4.6】用條件表達(dá)式求兩個數(shù)中的較大數(shù)。#include<stdio.h>intmain(){ intx,y; printf("請輸入兩個整數(shù):"); scanf("%d,%d",&x,&y); printf("兩個整數(shù)中的最大數(shù)為:%d\n",x>y?x:y); return0;}運行結(jié)果:請輸入兩個整數(shù):3,7兩個整數(shù)中的最大數(shù)為:74.3使用if-else實現(xiàn)分支結(jié)構(gòu)4.3.1if-else語句一般形式:
if(表達(dá)式)
語句1;
else
語句2;1.雙分支if語句【例4.7】使用雙分支if語句求兩個數(shù)中較大的數(shù)。#include<stdio.h>intmain(){inta,b;printf("請輸入兩個整數(shù):");scanf("%d%d",&a,&b); if(a>b) printf("兩個整數(shù)中的最大數(shù)為:%d\n",a);else printf("兩個整數(shù)中的最大數(shù)為:%d\n",b);return0;}運行結(jié)果1:請輸入兩個整數(shù):1815兩個整數(shù)中的最大數(shù)為:18運行結(jié)果2:請輸入兩個整數(shù):1518兩個整數(shù)中的最大數(shù)為:18【例4.8】編寫一個程序,根據(jù)鍵盤輸入的x的值,計算y的值。#include<stdio.h>#include<math.h> intmain(){doublex,y; printf("輸入x的值:"); scanf("%lf",&x); if(x<=1) y=exp(x); else y=pow(x,2)-1; printf("f(%f)=%.2f\n",x,y); return0;}運行結(jié)果1:輸入x的值:0.5f(0.500000)=1.65運行結(jié)果2:輸入x的值:2f(2.000000)=3.00一般形式:
if(表達(dá)式)
語句;2.單分支if語句【例4.9】編寫程序任意輸入一個實數(shù),輸出其絕對值。#include<stdio.h>intmain(){ floatx; scanf("%f",&x); if(x<0) x=-x; printf("%f",x); return0;}【例4.10】若有如下分段函數(shù),根據(jù)x的值,求出y的值。#include<stdio.h>intmain(){ intx,y; printf("x="); scanf("%d",&x); if(x) y=1; else y=-1; printf("y=%d",y); return0;}運行結(jié)果1:x=2y=1運行結(jié)果2:x=0y=-1【例4.11】輸入3個實數(shù),要求按從小到大的順序輸出。#include<stdio.h>intmain(){ 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); return0;}4.3.2if語句的嵌套一個if語句中又包含一個或多個if語句的現(xiàn)象稱為if語句的嵌套。
if語句的基本形式:
if(表達(dá)式)
語句1;
else
語句2;if(表達(dá)式1) if(表達(dá)式2)
語句1;
else
語句2;else if(表達(dá)式3)
語句3;
else
語句4;語句1嵌套的if語句語句2嵌套的if語句表達(dá)式1表達(dá)式3語句4真假表達(dá)式2語句3語句1語句2真真假假圖4.3if語句嵌套結(jié)構(gòu)流程圖在if語句嵌套的結(jié)構(gòu)中一定要注意else與if之間的對應(yīng)關(guān)系。例如:
if(表達(dá)式1)
if(表達(dá)式2)
語句1;
else
語句2;應(yīng)該理解為?
if(表達(dá)式1)
if(表達(dá)式2)
語句1;
else
語句2;還是應(yīng)理解為?
if(表達(dá)式1)
if(表達(dá)式2)
語句1;
else
語句2;為了避免這種二義性,在C語言中規(guī)定的對應(yīng)原則是:e1se總是與它前面最近的一個未匹配的if相匹配。因此對上述例子應(yīng)按后一種情況理解?!纠?.12】輸入3個任意整數(shù),找出其中的最大值。
#include<stdio.h>intmain(){inta,b,c,max; scanf("%d%d%d",&a,&b,&c); if(a>b) if(a>c) max=a; else max=c;
elseif(b>c) max=b; else max=c;printf("max=%d\n",max);return0;}【例4.13】編寫程序,輸入一個x的值,按以下函數(shù)計算并輸出y的值。#include<stdio.h>intmain(){ intx,y; scanf("%d",&x); if(x>0) y=1; else if(x==0) y=0; else y=-1; printf("y=%d\n",y); return0;}假假真真x>0x=0y=1y=0y=-1圖4.4例4.13執(zhí)行流程運行結(jié)果1:6y=1運行結(jié)果2:-3y=-1運行結(jié)果3:0y=04.3.3多分支if語句一般形式如下:if(表達(dá)式1)
語句1;elseif(表達(dá)式2)
語句2;…elseif(表達(dá)式n-1)
語句n-1;else
語句n;假表達(dá)式1表達(dá)式2語句1語句2語句n-1語句n真表達(dá)式n-1假真假假……圖4.5多分支結(jié)構(gòu)流程圖【例4.14】編寫程序,輸入x的值,按以下分段函數(shù)計算并輸出y的值。#include<stdio.h>#include<math.h>intmain(){floatx,y;printf("輸入x的值:");scanf("%f",&x);if(x<2) y=2*x;elseif(x<=10) y=7-3*x;else y=1-cos(x);
printf("y=%0.6f\n",y);return0;}
【例4.15】編寫程序由鍵盤輸入一個字符,若該字符為小寫字母,則將其轉(zhuǎn)換為大寫字母;若該字符為大寫字母,則將其轉(zhuǎn)換為小寫字母;否則將其轉(zhuǎn)換為ASCII碼表中該字符的下一個字符。#include<stdio.h>intmain(){charc1,c2; /*定義兩個字符變量*/printf("Pleaseenteracharacter:");c1=getchar(); /*鍵盤輸入一個字符賦給變量c1*/if(c1>='a'&&c1<='z')c2=c1-32; /*轉(zhuǎn)換成大寫*/elseif(c1>='A'&&c1<='Z')c2=c1+32; elsec2=c1+1;putchar(c2); return0;}運行結(jié)果:請輸入一個字符:Aa請輸入一個字符:eEswitch語句的一般形式如下:switch(表達(dá)式){
case常量表達(dá)式1:語句1;break;
case常量表達(dá)式2:語句2;break;
…
case常量表達(dá)式n:語句n;break;
default:語句n+1;break;}關(guān)于switch語句的幾點說明。(1)switch后的表達(dá)式可以是任何表達(dá)式,其值必須為整型,或字符型,或枚舉型。(2)每個case后面的常量表達(dá)式的值必須互不相同,否則就會出現(xiàn)互相矛盾的現(xiàn)象。(3)各個case和default的出現(xiàn)次序不影響執(zhí)行結(jié)果。(4)可以讓多個case共用一組執(zhí)行語句。
(5)switch語句允許嵌套使用。4.4使用switch語句實現(xiàn)分支結(jié)構(gòu)表達(dá)式的值=常量表達(dá)式2的值表達(dá)式語句1語句2語句n語句n+1表達(dá)式的值=常量表達(dá)式1的值表達(dá)式的值=常量表達(dá)式n的值其他breakbreakbreakbreak圖3.4switch多分支結(jié)構(gòu)執(zhí)行流程圖1.在switch語句格式中的每個語句后面都使用break語句【例4.16】編寫程序,輸入一個月份值,輸出該月份是第幾季度。#include<stdio.h>intmain(){ intmonth; printf("Entermonth:"); scanf("%d",&month); switch((month-1)/3) {case0: printf("%dmonthisfirstquarter."); break; case1: printf("%dmonthissecondquarter."); break; case2:printf("%dmonthisthirdquarter.");break;case3:printf("%dmonthisfourthquarter.");break;default:printf("Entererror.");break;}return0;}運行結(jié)果:輸入月份:55月是第2季度2.在switch語句格式中的部分語句后面使用break語句【例4.17】本程序的功能是:根據(jù)鍵盤輸入的年、月,輸出該年、該月的天數(shù)。#include<stdio.h>intmain(){ intyear,month,days;
printf("請輸入年,月:"); scanf("%d,%d",&year,&month); switch(month) { case1: case3: case5: case7: case8: case10: case12: days=31; break; case4:
case6: case9: case11: days=30; break; case2: if(year%400==0||year%4==0&&year%100!=0) days=29; else days=28; break;}
printf("%d年%d月的天數(shù)是%d天\n",year,month,days);return0;}運行結(jié)果:請輸入年,月:2016,22016年2月的天數(shù)是29天【例4.18】使用switch語句編寫例4.14的程序。#include<stdio.h>#include<math.h>intmain(){ intexpression;floatx,y; printf("輸入x的值:"); scanf("%f",&x); expression=(int)(1*(x<2)+2*(x>=2&&x<=10)+3*(x>10)); switch(expression) {
case1: y=2*x; break; case2: y=7-3*x;break; case3: y=1-cos(x);break; } printf("y=%0.5f\n",y); return0;}說明:(1)變量expression用于存放構(gòu)造表達(dá)式的值。(2)根據(jù)邏輯表達(dá)式的運算特點,構(gòu)造出“(1*(x<2)+2*(x>=2&&x<=10)+3*(x>10))”表達(dá)式。當(dāng)x<2時,表達(dá)式的值為1;當(dāng)2≤x≤10時,表達(dá)式的值為2;當(dāng)x>10時,表達(dá)式的值為3。3.在switch語句格式中不使用break語句switch語句中不使用break語句時,程序在執(zhí)行相應(yīng)語句后,不會跳出正在執(zhí)行的switch語句,而會繼續(xù)執(zhí)行其后的所有語句。請讀者刪除例4.16中的所有switch語句,然后執(zhí)行程序,分析其結(jié)果。4.5分支結(jié)構(gòu)程序設(shè)計舉例【例4.19】編寫程序,輸入x,計算并輸出下列分段函數(shù)f(x)的值(保留2位小數(shù)),要求調(diào)用sqrt()函數(shù)求平方根,調(diào)用pow()函數(shù)求冪。
#include<stdio.h>#include<math.h> intmain(){floatx,y; scanf("%f",&x); if(x>=0)y=sqrt(x); elsey=pow(x,5)+2*x+1/x;printf("x=%.2f,y=%.2f\n",x,y);
return0;}【例4.20】編寫程序,判斷輸入的年份是否為閏年。要求分別使用if語句的標(biāo)準(zhǔn)格式、嵌套格式及多分支格式實現(xiàn)。1.標(biāo)準(zhǔn)格式實現(xiàn)#include<stdio.h>intmain(){ intyear,leap;
printf("輸入年份:");
scanf("%d",&year); if((year%4==0&&year%100!=0)||(year%400==0)) leap=1; else leap=0;if(leap)printf("%d是閏年\n",year);else
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新目標(biāo)英語8年級下冊Unit1-Unit2詞匯素材內(nèi)嵌課文單詞表聽力錄音
- 超市直播培訓(xùn)課件
- 七年級語文下冊第二單元整合-殷殷之情系華夏寸寸丹心許家國 課件
- 2025-2030細(xì)胞治療產(chǎn)業(yè)化瓶頸突破路徑分析
- 2025-2030細(xì)胞培養(yǎng)肉產(chǎn)業(yè)化技術(shù)突破與消費者接受度調(diào)查報告
- 2025-2030線上線下融合場景中免漆門體驗營銷模式創(chuàng)新報告
- 2025-2030紙張印刷市場現(xiàn)狀供需調(diào)研品質(zhì)提升投資機會風(fēng)險分析報告
- 2025-2030約翰內(nèi)斯堡礦業(yè)開發(fā)行業(yè)市場現(xiàn)狀分析及投資開發(fā)規(guī)劃與未來趨勢建議
- 2025-2030纖維增強復(fù)合材料制造工藝智能化改造減排路徑研究報告
- 2025-2030突尼斯紡織產(chǎn)業(yè)集群供應(yīng)鏈重構(gòu)與可持續(xù)生產(chǎn)規(guī)劃分析研究報告
- GB/T 4447-2025船舶與海洋技術(shù)海船起錨機和起錨絞盤
- 高空作業(yè)后安全檢查措施
- 學(xué)生學(xué)業(yè)成就預(yù)測模型-全面剖析
- 2025山東中考英語短文語法填空試題匯編(含答案詳解)
- 江蘇省南京市2024-2025學(xué)年高一上學(xué)期1月期末學(xué)情調(diào)研測試生物試題(解析版)
- 設(shè)立有限責(zé)任公司合同范本
- 工作簡歷模板
- 四川省內(nèi)江市2023-2024學(xué)年九年級上學(xué)期數(shù)學(xué)期末考試試卷
- 消化性出血護理查房
- 專利管理工作流程
- 2024年廣東省佛山市南海區(qū)道路建設(shè)管理處招聘公益一類事業(yè)編制人員3人歷年管理單位遴選500模擬題附帶答案詳解
評論
0/150
提交評論