4-2 關(guān)系運(yùn)算符+邏輯運(yùn)算符+條件運(yùn)算符_第1頁(yè)
4-2 關(guān)系運(yùn)算符+邏輯運(yùn)算符+條件運(yùn)算符_第2頁(yè)
4-2 關(guān)系運(yùn)算符+邏輯運(yùn)算符+條件運(yùn)算符_第3頁(yè)
4-2 關(guān)系運(yùn)算符+邏輯運(yùn)算符+條件運(yùn)算符_第4頁(yè)
4-2 關(guān)系運(yùn)算符+邏輯運(yùn)算符+條件運(yùn)算符_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第4章項(xiàng)目二中的選擇執(zhí)行設(shè)計(jì)4.1任務(wù)分析4.2關(guān)系運(yùn)算符、邏輯運(yùn)算符、條件運(yùn)算符4.3使用if-else實(shí)現(xiàn)分支結(jié)構(gòu)4.4使用switch語(yǔ)句實(shí)現(xiàn)分支結(jié)構(gòu)4.5分支結(jié)構(gòu)程序設(shè)計(jì)示例21:031【例4.1】輸入三角形的三條邊,判斷是否能構(gòu)成三角形,若能則計(jì)算并輸出三角形的面積,否則給出出錯(cuò)提示。4.1引例#include<stdio.h>#include<math.h>intmain(){inta,b,c; floatarea; doubles; printf("請(qǐng)輸入三角形的三條邊長(zhǎng):");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;}

運(yùn)行結(jié)果:請(qǐng)輸入三角形的三條邊長(zhǎng):3,4,5三角形的面積是:6.000000【例4.2】編寫程序,輸入x的值,按以下分段函數(shù)計(jì)算并輸出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;}

運(yùn)行結(jié)果1:輸入x的值:22,0.500000運(yùn)行結(jié)果2:輸入x的值:00,0.0000004.2.1關(guān)系運(yùn)算符和關(guān)系表達(dá)式1.關(guān)系運(yùn)算符用于判斷兩個(gè)操作數(shù)的大小關(guān)系

4.2關(guān)系運(yùn)算符、邏輯運(yùn)算符、條件運(yùn)算符注意:關(guān)系運(yùn)算符中,>、<、>=、<=的優(yōu)先級(jí)相同,==、!=的優(yōu)先級(jí)相同,前者的優(yōu)先級(jí)高于后者,即“>=”的優(yōu)先級(jí)高于“==”。關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符,但是高于賦值運(yùn)算符。關(guān)系運(yùn)算符都是雙目運(yùn)算符,其結(jié)合方向是左結(jié)合。2.關(guān)系表達(dá)式用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來(lái)的式子稱為關(guān)系表達(dá)式。一般形式為:

表達(dá)式1關(guān)系運(yù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é)果是一個(gè)邏輯值“真”或“假”,由于C語(yǔ)言中沒(méi)有邏輯類型的數(shù)據(jù),因此用“1”表示“真”,“0”表示“假”。注意:在關(guān)系表達(dá)式中需注意區(qū)分“=”和“==”。對(duì)實(shí)數(shù)進(jìn)行相等判斷可能得不到正確的結(jié)果,例如“1.0/3*3.0==1.0”的結(jié)果為0。關(guān)系表達(dá)式中可以出現(xiàn)賦值運(yùn)算符,如“a>(b=0)”,但是不能寫成“a>b=0”的形式?!纠?.3】關(guān)系運(yù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;}運(yùn)行結(jié)果:1,0,1,1,0,0x小于10且x大于44<x<10則當(dāng)x=2時(shí),判斷此表達(dá)式的結(jié)果。當(dāng)x=2時(shí),4<x<10的結(jié)果為1,顯然是錯(cuò)誤的。此時(shí)需要用到邏輯運(yùn)算符將若干個(gè)關(guān)系表達(dá)式連接起來(lái)才能正確描述上述關(guān)系。4.2.2邏輯運(yùn)算符和邏輯表達(dá)式1.邏輯運(yùn)算符

如果寫成:邏輯運(yùn)算符有邏輯非(?。⑦壿嬇c(&&)和邏輯或(||)三種xy!xx&&yx||y001000非0101非00001非0非00112.邏輯表達(dá)式用邏輯運(yùn)算符將兩個(gè)表達(dá)式連接起來(lái)的式子稱為邏輯表達(dá)式,其中的表達(dá)式可以又是邏輯表達(dá)式,一般形式為:

表達(dá)式1邏輯運(yùn)算符表達(dá)式2

邏輯運(yùn)算符表達(dá)式1如:“(a&&b)||c”。邏輯表達(dá)式的結(jié)果也是一個(gè)邏輯值“真”或“假”,即為“1”或“0”。參與邏輯運(yùn)算的數(shù)據(jù)可以是1和0,也可以是非零值和0,還可以是任何類型的數(shù)據(jù),但最終都是以非0和0來(lái)判斷他們是“真”或“假”。在邏輯表達(dá)式中也可以使用賦值運(yùn)算符,如“a&&(b=0)”,但是不能寫成“a&&b=0”的形式。短路:C語(yǔ)言規(guī)定,只對(duì)決定整個(gè)表達(dá)式值所需的最少數(shù)目的子表達(dá)式進(jìn)行運(yùn)算。即在由若干個(gè)子表達(dá)式組成的邏輯表達(dá)式中,從左向右計(jì)算,當(dāng)計(jì)算出一個(gè)子表達(dá)式的值就確定了整個(gè)邏輯表達(dá)式的值時(shí),此后就不再計(jì)算右邊剩下的子表達(dá)式的值,這種情況稱為“短路”。說(shuō)明:①對(duì)于&&運(yùn)算,若“&&”左邊的表達(dá)式的值為假,則可以得出整個(gè)表達(dá)式的值為假,那么“&&”右邊的表達(dá)式將不再進(jìn)行計(jì)算;只有當(dāng)“&&”左邊的表達(dá)式值為真時(shí)才計(jì)算右邊表達(dá)式的值。②對(duì)于||運(yùn)算,若“||”左邊的表達(dá)式的值為真,則可以得出整個(gè)表達(dá)式的值為真,那么“||”右邊的表達(dá)式將不再進(jìn)行計(jì)算;只有當(dāng)“||”左邊的表達(dá)式值為假時(shí)才計(jì)算右邊表達(dá)式的值?!纠?.5】邏輯運(yùn)算示例。#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;}運(yùn)行結(jié)果:0,1,1a=3,b=3,c=1,d=11.條件運(yùn)算符條件運(yùn)算符由兩個(gè)符號(hào)“?”和“:”組成,用于條件求值。是一個(gè)三目運(yùn)算符,需要三個(gè)操作數(shù)。條件運(yùn)算符的優(yōu)先級(jí)低于邏輯運(yùn)算符、高于賦值運(yùn)算符,它是右結(jié)合的。4.2.3條件運(yùn)算符和條件表達(dá)式2.條件表達(dá)式由條件運(yùn)算符將3個(gè)表達(dá)式連接起來(lái)的式子稱為條件表達(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á)式的說(shuō)明:條件表達(dá)式相當(dāng)于一個(gè)雙分支的if語(yǔ)句,當(dāng)if語(yǔ)句中只給同一個(gè)變量賦值時(shí),可以使用條件表達(dá)式代替if語(yǔ)句。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á)式求兩個(gè)數(shù)中的較大數(shù)。#include<stdio.h>intmain(){ intx,y; printf("請(qǐng)輸入兩個(gè)整數(shù):"); scanf("%d,%d",&x,&y); printf("兩個(gè)整數(shù)中的最大數(shù)為:%d\n",x>y?x:y); return0;}運(yùn)行結(jié)果:請(qǐng)輸入兩個(gè)整數(shù):3,7兩個(gè)整數(shù)中的最大數(shù)為:74.3使用if-else實(shí)現(xiàn)分支結(jié)構(gòu)4.3.1if-else語(yǔ)句一般形式:

if(表達(dá)式)

語(yǔ)句1;

else

語(yǔ)句2;1.雙分支if語(yǔ)句【例4.7】使用雙分支if語(yǔ)句求兩個(gè)數(shù)中較大的數(shù)。#include<stdio.h>intmain(){inta,b;printf("請(qǐng)輸入兩個(gè)整數(shù):");scanf("%d%d",&a,&b); if(a>b) printf("兩個(gè)整數(shù)中的最大數(shù)為:%d\n",a);else printf("兩個(gè)整數(shù)中的最大數(shù)為:%d\n",b);return0;}運(yùn)行結(jié)果1:請(qǐng)輸入兩個(gè)整數(shù):1815兩個(gè)整數(shù)中的最大數(shù)為:18運(yùn)行結(jié)果2:請(qǐng)輸入兩個(gè)整數(shù):1518兩個(gè)整數(shù)中的最大數(shù)為:18【例4.8】編寫一個(gè)程序,根據(jù)鍵盤輸入的x的值,計(jì)算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;}運(yùn)行結(jié)果1:輸入x的值:0.5f(0.500000)=1.65運(yùn)行結(jié)果2:輸入x的值:2f(2.000000)=3.00一般形式:

if(表達(dá)式)

語(yǔ)句;2.單分支if語(yǔ)句【例4.9】編寫程序任意輸入一個(gè)實(shí)數(shù),輸出其絕對(duì)值。#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;}運(yùn)行結(jié)果1:x=2y=1運(yùn)行結(jié)果2:x=0y=-1【例4.11】輸入3個(gè)實(shí)數(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語(yǔ)句的嵌套一個(gè)if語(yǔ)句中又包含一個(gè)或多個(gè)if語(yǔ)句的現(xiàn)象稱為if語(yǔ)句的嵌套。

if語(yǔ)句的基本形式:

if(表達(dá)式)

語(yǔ)句1;

else

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

語(yǔ)句1;

else

語(yǔ)句2;else if(表達(dá)式3)

語(yǔ)句3;

else

語(yǔ)句4;語(yǔ)句1嵌套的if語(yǔ)句語(yǔ)句2嵌套的if語(yǔ)句表達(dá)式1表達(dá)式3語(yǔ)句4真假表達(dá)式2語(yǔ)句3語(yǔ)句1語(yǔ)句2真真假假圖4.3if語(yǔ)句嵌套結(jié)構(gòu)流程圖在if語(yǔ)句嵌套的結(jié)構(gòu)中一定要注意else與if之間的對(duì)應(yīng)關(guān)系。例如:

if(表達(dá)式1)

if(表達(dá)式2)

語(yǔ)句1;

else

語(yǔ)句2;應(yīng)該理解為?

if(表達(dá)式1)

if(表達(dá)式2)

語(yǔ)句1;

else

語(yǔ)句2;還是應(yīng)理解為?

if(表達(dá)式1)

if(表達(dá)式2)

語(yǔ)句1;

else

語(yǔ)句2;為了避免這種二義性,在C語(yǔ)言中規(guī)定的對(duì)應(yīng)原則是:e1se總是與它前面最近的一個(gè)未匹配的if相匹配。因此對(duì)上述例子應(yīng)按后一種情況理解。【例4.12】輸入3個(gè)任意整數(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】編寫程序,輸入一個(gè)x的值,按以下函數(shù)計(jì)算并輸出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í)行流程運(yùn)行結(jié)果1:6y=1運(yùn)行結(jié)果2:-3y=-1運(yùn)行結(jié)果3:0y=04.3.3多分支if語(yǔ)句一般形式如下:if(表達(dá)式1)

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

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

語(yǔ)句n-1;else

語(yǔ)句n;假表達(dá)式1表達(dá)式2語(yǔ)句1語(yǔ)句2語(yǔ)句n-1語(yǔ)句n真表達(dá)式n-1假真假假……圖4.5多分支結(jié)構(gòu)流程圖【例4.14】編寫程序,輸入x的值,按以下分段函數(shù)計(jì)算并輸出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】編寫程序由鍵盤輸入一個(gè)字符,若該字符為小寫字母,則將其轉(zhuǎn)換為大寫字母;若該字符為大寫字母,則將其轉(zhuǎn)換為小寫字母;否則將其轉(zhuǎn)換為ASCII碼表中該字符的下一個(gè)字符。#include<stdio.h>intmain(){charc1,c2; /*定義兩個(gè)字符變量*/printf("Pleaseenteracharacter:");c1=getchar(); /*鍵盤輸入一個(gè)字符賦給變量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;}運(yùn)行結(jié)果:請(qǐng)輸入一個(gè)字符:Aa請(qǐng)輸入一個(gè)字符:eEswitch語(yǔ)句的一般形式如下:switch(表達(dá)式){

case常量表達(dá)式1:語(yǔ)句1;break;

case常量表達(dá)式2:語(yǔ)句2;break;

case常量表達(dá)式n:語(yǔ)句n;break;

default:語(yǔ)句n+1;break;}關(guān)于switch語(yǔ)句的幾點(diǎn)說(shuō)明。(1)switch后的表達(dá)式可以是任何表達(dá)式,其值必須為整型,或字符型,或枚舉型。(2)每個(gè)case后面的常量表達(dá)式的值必須互不相同,否則就會(huì)出現(xiàn)互相矛盾的現(xiàn)象。(3)各個(gè)case和default的出現(xiàn)次序不影響執(zhí)行結(jié)果。(4)可以讓多個(gè)case共用一組執(zhí)行語(yǔ)句。

(5)switch語(yǔ)句允許嵌套使用。4.4使用switch語(yǔ)句實(shí)現(xiàn)分支結(jié)構(gòu)表達(dá)式的值=常量表達(dá)式2的值表達(dá)式語(yǔ)句1語(yǔ)句2語(yǔ)句n語(yǔ)句n+1表達(dá)式的值=常量表達(dá)式1的值表達(dá)式的值=常量表達(dá)式n的值其他breakbreakbreakbreak圖3.4switch多分支結(jié)構(gòu)執(zhí)行流程圖1.在switch語(yǔ)句格式中的每個(gè)語(yǔ)句后面都使用break語(yǔ)句【例4.16】編寫程序,輸入一個(gè)月份值,輸出該月份是第幾季度。#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;}運(yùn)行結(jié)果:輸入月份:55月是第2季度2.在switch語(yǔ)句格式中的部分語(yǔ)句后面使用break語(yǔ)句【例4.17】本程序的功能是:根據(jù)鍵盤輸入的年、月,輸出該年、該月的天數(shù)。#include<stdio.h>intmain(){ intyear,month,days;

printf("請(qǐng)輸入年,月:"); 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;}運(yùn)行結(jié)果:請(qǐng)輸入年,月:2016,22016年2月的天數(shù)是29天【例4.18】使用switch語(yǔ)句編寫例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;}說(shuō)明:(1)變量expression用于存放構(gòu)造表達(dá)式的值。(2)根據(jù)邏輯表達(dá)式的運(yùn)算特點(diǎn),構(gòu)造出“(1*(x<2)+2*(x>=2&&x<=10)+3*(x>10))”表達(dá)式。當(dāng)x<2時(shí),表達(dá)式的值為1;當(dāng)2≤x≤10時(shí),表達(dá)式的值為2;當(dāng)x>10時(shí),表達(dá)式的值為3。3.在switch語(yǔ)句格式中不使用break語(yǔ)句switch語(yǔ)句中不使用break語(yǔ)句時(shí),程序在執(zhí)行相應(yīng)語(yǔ)句后,不會(huì)跳出正在執(zhí)行的switch語(yǔ)句,而會(huì)繼續(xù)執(zhí)行其后的所有語(yǔ)句。請(qǐng)讀者刪除例4.16中的所有switch語(yǔ)句,然后執(zhí)行程序,分析其結(jié)果。4.5分支結(jié)構(gòu)程序設(shè)計(jì)舉例【例4.19】編寫程序,輸入x,計(jì)算并輸出下列分段函數(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語(yǔ)句的標(biāo)準(zhǔn)格式、嵌套格式及多分支格式實(shí)現(xiàn)。1.標(biāo)準(zhǔn)格式實(shí)現(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. 本站所有資源如無(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)論