工學(xué)C語言第5章課件_第1頁(yè)
工學(xué)C語言第5章課件_第2頁(yè)
工學(xué)C語言第5章課件_第3頁(yè)
工學(xué)C語言第5章課件_第4頁(yè)
工學(xué)C語言第5章課件_第5頁(yè)
已閱讀5頁(yè),還剩81頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第五章選擇結(jié)構(gòu)程序設(shè)計(jì)制作人:張麗涓第五章制作人:張麗涓5.1關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系運(yùn)算符用來比較兩個(gè)數(shù)據(jù)的大小,運(yùn)算的結(jié)果為成立或不成立。如果成立,則結(jié)果為邏輯值“真”,用整數(shù)“1”表示;如果不成立,則結(jié)果為邏輯值“假”,用整數(shù)“0”表示。5.1關(guān)系運(yùn)算符和關(guān)系表達(dá)式運(yùn)算符名稱對(duì)象數(shù)運(yùn)算規(guī)則結(jié)合性<<=>>===!=小于小于或等于大于大于或等于等于不等于雙目滿足則為真結(jié)果為1不滿足為假結(jié)果為0自左向右優(yōu)先級(jí)一、關(guān)系運(yùn)算符及其優(yōu)先級(jí)<<=>>===!=優(yōu)先級(jí)相同(高)優(yōu)先級(jí)相同(低)算術(shù)運(yùn)算符優(yōu)于關(guān)系運(yùn)算符

優(yōu)于

賦值運(yùn)算符例:

c>a+b ——c>(a+b)a>b!=c ——(a>b)!=ca==b<c ——a==(b<c)a=b>c ——a=(b>c)如果a=1;b=2;c=3

求各表達(dá)式的值?運(yùn)算符名稱對(duì)象數(shù)運(yùn)算規(guī)則結(jié)合性<小于優(yōu)一、關(guān)系運(yùn)算符及其優(yōu)先例

若a=0;b=0.5;x=0.3;則a<=x<=b的值為:

5>2>7>8在C中是允許的,值為:例

inti=1,j=7,a;a=i+(j%4!=0);

則,a=例

‘a(chǎn)’>0結(jié)果為:

‘A’>100結(jié)果為:00210注意:避免對(duì)實(shí)數(shù)作相等或不等的判斷;注意區(qū)分“=”與“==”的不同.例 若a=0;b=0.5;x=0.3;例5>2>二、關(guān)系表達(dá)式關(guān)系表達(dá)式是由關(guān)系運(yùn)算符連接2個(gè)表達(dá)式構(gòu)成的。它的一般形式為:

表達(dá)式關(guān)系運(yùn)算符表達(dá)式 其中:表達(dá)式可以是算術(shù)表達(dá)式、關(guān)系表達(dá)式、邏輯表達(dá)式、賦值表達(dá)式。 例如:a=2,c=‘a(chǎn)’,f=3.0 a+2!=c-100 值為: (a>c)>=(f>4) 值為:11二、關(guān)系表達(dá)式115.2邏輯運(yùn)算符和邏輯表達(dá)式一、邏輯運(yùn)算符及其優(yōu)先級(jí)邏輯運(yùn)算符是用來對(duì)兩個(gè)關(guān)系式或邏輯量進(jìn)行邏輯運(yùn)算的,運(yùn)算結(jié)果為邏輯值“真(1)”或“假(0)”。在C語言中,邏輯量是用數(shù)值非0和0來表示邏輯真和假的。

邏輯運(yùn)算符運(yùn)算符名稱對(duì)象數(shù)結(jié)合性&&||邏輯與邏輯或雙目自左向右!邏輯非單目自右向左5.2邏輯運(yùn)算符和邏輯表達(dá)式一、邏輯運(yùn)算符及其優(yōu)先級(jí)運(yùn)算符邏輯運(yùn)算符運(yùn)算規(guī)則:aba&&ba||b!a假(0)假(0)真(1)真(1)假(0)真(1)假(0)真(1)假(0)假(0)假(0)真(1)假(0)真(1)真(1)真(1)真(1)真(1)假(0)假(0)

邏輯運(yùn)算符的優(yōu)先級(jí):

!

算術(shù)運(yùn)算符 關(guān)系運(yùn)算符

&& ||邏輯運(yùn)算符運(yùn)算規(guī)則:aba&&ba||b!a假(0)假(0)二、邏輯表達(dá)式邏輯表達(dá)式是由邏輯運(yùn)算符連接表達(dá)式構(gòu)成的。它的一般形式為:

表達(dá)式雙目邏輯運(yùn)算符表達(dá)式

單目邏輯運(yùn)算符表達(dá)式其中表達(dá)式可以是算術(shù)表達(dá)式、關(guān)系表達(dá)式、賦值表達(dá)式、逗號(hào)表達(dá)式等。邏輯表達(dá)式的運(yùn)算結(jié)果以數(shù)值“1”代表真,“0”代表假;在判斷一個(gè)數(shù)值時(shí),其值為“0”即為假,“非0”即為真。二、邏輯表達(dá)式例:a=2,c=‘a(chǎn)’,f=3.0,求邏輯表達(dá)式的值。

!(c-’a’) f/3&&a-c a<=c||f<=c !(1&&!a) (c>a)&&(f>4) !(1,2) !(c=‘A’) (1,2,3)&&(3,3,3)11110001例:a=2,c=‘a(chǎn)’,f=3.0,求邏輯表達(dá)式的值。111

三、邏輯運(yùn)算的短路特性 邏輯表達(dá)式求解時(shí),并非所有的邏輯運(yùn)算符都被執(zhí)行,只是在必須執(zhí)行下一個(gè)邏輯運(yùn)算符才能求出表達(dá)式的解時(shí),才執(zhí)行該運(yùn)算符。例

a&&b&&c——只在a為真時(shí),才判別b的值;

只在a、b都為真時(shí),才判別c的值例

a||b||c——只在a為假時(shí),才判別b的值;

只在a、b都為假時(shí),才判別c的值例

a=1;b=2;c=3;d=4;m=1;n=1;(m=a>b)&&(n=c>d)

問,m和n的運(yùn)算結(jié)果結(jié)果:m=0,n=1三、邏輯運(yùn)算的短路特性例a&&b&&c——只在a5.3if語句一、if語句的三種形式

形式一:

if(表達(dá)式)

語句;

if(表達(dá)式)語句;其中:表達(dá)式一般為關(guān)系表達(dá)式或邏輯表達(dá)式,也可以是其它的表達(dá)式。語句可以是單一語句或復(fù)合語句。exprstatement=1=0

例:if(x>y)printf(“%d”,x);5.3if語句一、if語句的三種形式exprstatem

形式二:

if(表達(dá)式)

語句1;

else

語句2;語句1和語句2可以是單一語句或復(fù)合語句。exprstatement1statement2=1=0

例:if(x>y) max=x; elsemax=y;形式二:exprstatement1statement

形式三:

if(表達(dá)式1)語句1; elseif(表達(dá)式2)語句2; elseif(表達(dá)式3)語句3;

…… elseif(表達(dá)式m)語句m; else語句n;expr1statemnt1=1=0expr2expr3statemntnstatemnt3statemnt2=1=1=0=0

例:if(score>=90)grade=‘A’;elseif(score

>=80)grade

=‘B’;elseif(score

>=70)grade

=‘C’;elseif(score

>=60)grade

=‘D’;elsegrade

=‘F’;形式三:expr1statemnt1=1=0expr2例: if(a==b&&x==y)printf(“a=b,x=y”);if(3)printf(“OK”);if(‘a(chǎn)’)printf(“%d”,’a’);說明:①if后面的表達(dá)式類型任意

②語句可以是復(fù)合語句

③if(x)if(x!=0)if(!x)if(x==0)例: if(a>b)

{t=a;a=b;b=t;}例: if(a==b&&x==y)printf(“[例]從鍵盤輸入兩個(gè)數(shù),求出絕對(duì)值較大者并顯示輸出。 #include<stdio.h>

#include<math.h> voidmain() {inta,b,max; printf(“Enter2numbers:”); scanf(“%d,%d”,&a,&b); if(abs(a)>abs(b)) max=a; else max=b; printf(“Max(absolute)=%d\n”,max);

}運(yùn)行結(jié)果:

Enter2numbers:-78,23<CR>

Max(absolute)=-78選擇結(jié)構(gòu)[例]從鍵盤輸入兩個(gè)數(shù),求出絕對(duì)值較大者并 #inclu[例]判斷輸入的字符是否是“Q”或“q”,若是,顯示Quit。

#include<stdio.h> voidmain() {charc; printf(“Enteracharacter:”); c=getchar(); if(c==‘Q’||c==‘q’)printf(“Quit!\n”);

}運(yùn)行結(jié)果:

Enteracharacter:Q<CR>

Quit![例]判斷輸入的字符是否是“Q”或“q”,若是,顯示Qui 1、將以下條件寫成邏輯表達(dá)式

m1-n1≤j≤m1+n1

②X<-5或X>5

③M和N之一為5,但不能同時(shí)為5

④-100<k<100,且K為偶數(shù)

2、寫程序,輸入兩個(gè)數(shù)并判斷兩數(shù)是否相等,輸出判斷結(jié)果。

3、編制一個(gè)數(shù)制轉(zhuǎn)換程序,要求能進(jìn)行如下的數(shù)制轉(zhuǎn)換:10進(jìn)制轉(zhuǎn)換為16進(jìn)制

16進(jìn)制轉(zhuǎn)換為10進(jìn)制

10進(jìn)制轉(zhuǎn)換為8進(jìn)制

8進(jìn)制轉(zhuǎn)換為10進(jìn)制課堂練習(xí) 1、將以下條件寫成邏輯表達(dá)式課堂練習(xí)2、

#include<stdio.h> voidmain() {inta,b; printf("Enterintegera:"); scanf("%d",&a); printf("Enterintegerb:"); scanf("%d",&b);

if(a==b) printf("a==b\n"); else printf("a!=b\n"); }運(yùn)行結(jié)果:

Enterintegera:12Enterintegerb:12

a==b運(yùn)行結(jié)果:

Enterintegera:12

Enterintegerb:9

a!=b2、運(yùn)行結(jié)果:運(yùn)行結(jié)果:

3、

#include<stdio.h> voidmain() { intch,a; printf(“\n1.DectoHex\n”);

printf(“2.HextoDec\n”);

printf(“3.DectoOct\n”);

printf(“4.OcttoDec\n”);

printf(“\nEnteryourchoice:”);

scanf(“%d”,&ch);

if(ch=1)

{printf(“\nEnteraninteger(Dec):”);

scanf(“%d”,&a);

printf(“Dec=%dHex=%x\n”,a,a);

}

if(ch=2)

┆3、#include<stdio.h> 【寫程序】提示輸入3個(gè)整數(shù),判斷最大者并輸出判斷結(jié)果。課堂練習(xí) 【寫程序】提示輸入3個(gè)整數(shù),判斷最大者并輸出判斷結(jié)果。課堂二、if語句的嵌套——if中又包含if。if(expr1)

if(expr2)statement1;

elsestatement2;else

if(expr3)statement3;

elsestatement4;內(nèi)嵌if內(nèi)嵌ifif(expr1)

if(expr2)statement1;

else

statement2;內(nèi)嵌ifif(expr1)

if(expr2)statement1;elsestatement2;

內(nèi)嵌ifif(expr1)statement1;else

if(expr3)statement3;

else

statement4;內(nèi)嵌if二、if語句的嵌套——if中又包含if。if(expr1)if~else配對(duì)原則:else總是和它上面離它最近的未配對(duì)的if配對(duì)if(……)if(……)if(……)else…...else…...else…...

當(dāng)缺少某個(gè)分支else時(shí),正確的配對(duì)方法:加{}例:

if(a==b)if(b==c)printf(“a==b==c”);

elseprintf(“a!=b”);修改:

if(a==b)

{if(b==c)printf(“a==b==c”);

}

elseprintf(“a!=b”);if~else配對(duì)原則:else總是和它上面離它最近的未配[例]y=

編程序,輸入一個(gè)x值,輸出y值。

voidmain()

{intx,y;

scanf(“%d”,&x);

if(x<0)y=-1;

else

if(x>0)y=1;

elsey=0;

printf(“x=%d,y=%d\n”,x,y);

}-1(x<0)0(x=0)1(x>0)運(yùn)行結(jié)果:

-5

x=-5,y=-1去掉else,分析運(yùn)行結(jié)果運(yùn)行結(jié)果:

-5

x=-5,y=0[例]-1(x<0)運(yùn)行結(jié)果:去掉else,分析運(yùn)行結(jié)課堂練習(xí) 1、對(duì)學(xué)生的成績(jī)進(jìn)行分級(jí):分?jǐn)?shù)>=80是優(yōu)良,分?jǐn)?shù)低于60為不及格,其它為及格。{intscore;printf(“Enteranum:\n”);scanf(“%d”,&score);if(score>=80)printf(“Good!\n”);elseif(score>=60)printf(“Passed!\n”);elseprintf(“Failed!\n”);}if(score<60)printf(“Failed!\n”);elseif(score>=60)printf(“Passed!\n”);elseprintf(“Good!\n”);if(score<60)printf(“Failed!\n”);elseif(score>=80)printf(“Good!\n”);elseprintf(“Passed!\n”);if(score>=60)if(score>=80) printf(“Good!\n”);elseprintf(“Passed!\n”);elseprintf(“Failed!\n”);if(score>=80)if(score>=60) printf(“Passed!\n”);elseprintf(“Good!\n”);elseprintf(“Failed!\n”);課堂練習(xí) 1、對(duì)學(xué)生的成績(jī)進(jìn)行分級(jí):分?jǐn)?shù)>=80是優(yōu)良,分?jǐn)?shù)課堂練習(xí) 2、編程:輸入一個(gè)數(shù),判斷該數(shù)是>0、<0,還是=0,輸出判斷結(jié)果。#include<stdrio.h>voidmain{intx;printf(“Inputyournumber:\n”);scanf(“%d”,&x);if(x>0)printf(“It’sapositive.\n”);elseif(x<0)printf(“It’sanegative.\n”);elseprintf(“It’sazore.\n”);}課堂練習(xí) 2、編程:輸入一個(gè)數(shù),判斷該數(shù)是>0、<0,還是=三、條件運(yùn)算符和條件表達(dá)式

if(a>b)max=a;if語句

elsemax=b;┊

max=(a>b)?a:b;

條件表達(dá)式語句

1.條件運(yùn)算符及其優(yōu)先級(jí)條件運(yùn)算符是三目運(yùn)算符,其三個(gè)運(yùn)算對(duì)象都是表達(dá)式。運(yùn)算符名稱對(duì)象數(shù)運(yùn)算規(guī)則結(jié)合性

?:

條件

三目對(duì)e1?e2:e3

e1為真,獲得e2

e1為假,獲得e3

自右向左三、條件運(yùn)算符和條件表達(dá)式運(yùn)算符名稱對(duì)象數(shù)運(yùn)算規(guī)則結(jié)合性

?

條件運(yùn)算符的優(yōu)先級(jí)如下:其它運(yùn)算符優(yōu)于

條件運(yùn)算符

優(yōu)于賦值運(yùn)算符優(yōu)于逗號(hào)運(yùn)算符 例:設(shè)a,b,c均為2,則

(a==b)?c=1:0 d=a+1==3?b=a+2:a+32.條件表達(dá)式條件表達(dá)式是由條件運(yùn)算符連接表達(dá)式構(gòu)成的。其一般形式為:

表達(dá)式1?表達(dá)式2:表達(dá)式3條件運(yùn)算符的優(yōu)先級(jí)如下:例:設(shè)a=2,c=‘a(chǎn)’,f=3.0,求下列條件表達(dá)式的值。

x=a>0?a:-ax=f>=2.0?a<=c:a>=cx=!(a!=0)?!a:!!ax=(f>0)?((a>0)?2:1):((a>0)?1:0)

x=(a>=0)?(a=1):(a=0)

x=(c==‘A’)?(0,1):(1,0)211210例:設(shè)a=2,c=‘a(chǎn)’,f=3.0,求下列條件表達(dá)式的值。5.4switch語句switch是C語言提供的一個(gè)多分支選擇語句。

switch語句比通過嵌套實(shí)現(xiàn)多分支選擇的if語句更直觀。

switch的一般格式如下:

switch(表達(dá)式){caseE1:

語句組1;break;caseE2:

語句組2;break;

…….caseEn:

語句組n;break;[default:

語句組;break;]}

5.4switch語句switch是C語言提供的一

switch語句的控制流程是:首先計(jì)算表達(dá)式的值,然后依次與每一個(gè)case中的常量值進(jìn)行比較,當(dāng)發(fā)現(xiàn)與某個(gè)值匹配,就執(zhí)行該case后面的語句,直到break為止。若表達(dá)式的值與所有case中的常量值都不匹配,則執(zhí)行default后面的語句。switch表達(dá)式語句組1語句組2語句組n語句組…...E1E2Endefaultcaseswitch語句的控制流程是:首先計(jì)算表達(dá)式的值,然說明:①E1,E2,…En是常量表達(dá)式,且值必須互不相同②case語句起標(biāo)號(hào)作用,必須用break跳出③case后可包含多個(gè)可執(zhí)行語句,且不必加{}④switch可嵌套⑤多個(gè)case可共用一組執(zhí)行語句例:switch(ch)

case‘A’:case‘B’:case‘C’:printf(“score>60\n”);break;

……..說明:例:switch(ch)例:

switch(score){case5:printf(“Verygood!”);case4:printf(“Good!”);case3:printf(“Pass!”);case2:printf(“Fail!”);default:printf(“dataerror!”);}score為5時(shí),輸出:

Verygood!Good!Pass!Fail!dataerror!例:switch(score)score為5時(shí),輸出:例:voidmain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){ case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf(“\na=%d,b=%d”,a,b);}運(yùn)行結(jié)果:a=2,b=1例:voidmain()運(yùn)行結(jié)果:a=2,b=1#include<stdio.h>main(){intc;printf("Entermornorhorother:");c=getchar();switch(c){case'm':printf("\nGoodmorning!\n");break;case'n':printf("\nGoodnight!\n");break;case'h':printf("\nHello!\n");break;default:printf("\n????????\n");break;}}例:根據(jù)輸入字母輸出字符串#include<stdio.h>例:根據(jù)輸入字母輸出字符[例]用switch語句實(shí)現(xiàn)菜單選擇數(shù)據(jù)轉(zhuǎn)換功能。#include<stdio.h>

main()

{intch,a;

printf(“\n1.DectoHex\n”);

printf(“2.HextoDec\n”);

printf(“3.DectoOct\n”);

printf(“4.OcttoDec\n”);

printf(“\nEnteryourchoice:”);

scanf(“%d”,&ch);

switch(ch)

{case1:printf(“\nEnteraninteger(Dec):”);

scanf(“%d”,&a);

printf(“Dec=%dHex=%x\n”,a,a);

break;

case2:┆[例]用switch語句實(shí)現(xiàn)菜單選擇數(shù)據(jù)轉(zhuǎn)換功能。[例]輸入一個(gè)字符,判斷其是否是A(Abort)或R(Retry)或F(Fail),并輸出相應(yīng)信息。

#include<stdio.h>voidmain(){charc;printf(“Abort,Retry,Fail?”);c=getchar();switch(c){case‘a(chǎn)’:case‘A’:printf(“Abort!\n”);

break;case‘r’:

case‘R’:printf(“Retry!\n”);

break;case‘f’:

case‘F’:printf(“Fail!\n”);

break;default:

printf(“Erroneouscharacter!\n”);

}

}

運(yùn)行結(jié)果: Abort,Retry,Fail?r<CR>

Retry!

運(yùn)行結(jié)果: Abort,Retry,Fail?e<CR>

Erroneouscharacter![例]輸入一個(gè)字符,判斷其是否是A(Abort)或R(Ret5.5程序舉例[例]寫程序,判某一年是否是閏年。year%4?year%100?year%400?leap=1?leap=0leap=1leap=1leap=0noleapyearleapyearNN=0NYYYY5.5程序舉例[例]寫程序,判某一年是否是閏年。year%[例]

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

當(dāng)輸入的不是四則運(yùn)算符或除數(shù)為0時(shí),提示出錯(cuò)信息.

[例]#include<stdio.h>

voidmain()

{floata,b;charc;

printf(“Inputexpression:a+(-,*,/)b\n”);

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;#include<stdio.h>

voidmain()case‘/’:if(b==0)printf(“datadividedbyzero\n”);elseprintf(“=%f\n”,a/b); break;default:printf(“inputerror\n”);}}case‘/’:

編寫程序,用戶分別輸入年、月,輸出該月的天數(shù)。

課堂練習(xí) 編寫程序,用戶分別輸入年、月,輸出該月的天數(shù)。

課堂練習(xí)#include<stdio.h>

main()

{intyear,month,day;printf(“inputyear”);

scanf(“%d”,&year);

printf(“inputmonth”);scanf(“%d”,&month);

switch(month)

{case1:

case3:case5:#include<stdio.h>

main()

{incase7:

case8:case10:case12:day=31;break;case4:

case6:case9:case11:day=30;break;

case2: if((year%4==0&&year%100!=0) ||(year%400==0))day=29; elseday=28;}printf(“%dyear%dmonth=%day\n”, year,month,day);}case7:

case8:第五章選擇結(jié)構(gòu)程序設(shè)計(jì)制作人:張麗涓第五章制作人:張麗涓5.1關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系運(yùn)算符用來比較兩個(gè)數(shù)據(jù)的大小,運(yùn)算的結(jié)果為成立或不成立。如果成立,則結(jié)果為邏輯值“真”,用整數(shù)“1”表示;如果不成立,則結(jié)果為邏輯值“假”,用整數(shù)“0”表示。5.1關(guān)系運(yùn)算符和關(guān)系表達(dá)式運(yùn)算符名稱對(duì)象數(shù)運(yùn)算規(guī)則結(jié)合性<<=>>===!=小于小于或等于大于大于或等于等于不等于雙目滿足則為真結(jié)果為1不滿足為假結(jié)果為0自左向右優(yōu)先級(jí)一、關(guān)系運(yùn)算符及其優(yōu)先級(jí)<<=>>===!=優(yōu)先級(jí)相同(高)優(yōu)先級(jí)相同(低)算術(shù)運(yùn)算符優(yōu)于關(guān)系運(yùn)算符

優(yōu)于

賦值運(yùn)算符例:

c>a+b ——c>(a+b)a>b!=c ——(a>b)!=ca==b<c ——a==(b<c)a=b>c ——a=(b>c)如果a=1;b=2;c=3

求各表達(dá)式的值?運(yùn)算符名稱對(duì)象數(shù)運(yùn)算規(guī)則結(jié)合性<小于優(yōu)一、關(guān)系運(yùn)算符及其優(yōu)先例

若a=0;b=0.5;x=0.3;則a<=x<=b的值為:

5>2>7>8在C中是允許的,值為:例

inti=1,j=7,a;a=i+(j%4!=0);

則,a=例

‘a(chǎn)’>0結(jié)果為:

‘A’>100結(jié)果為:00210注意:避免對(duì)實(shí)數(shù)作相等或不等的判斷;注意區(qū)分“=”與“==”的不同.例 若a=0;b=0.5;x=0.3;例5>2>二、關(guān)系表達(dá)式關(guān)系表達(dá)式是由關(guān)系運(yùn)算符連接2個(gè)表達(dá)式構(gòu)成的。它的一般形式為:

表達(dá)式關(guān)系運(yùn)算符表達(dá)式 其中:表達(dá)式可以是算術(shù)表達(dá)式、關(guān)系表達(dá)式、邏輯表達(dá)式、賦值表達(dá)式。 例如:a=2,c=‘a(chǎn)’,f=3.0 a+2!=c-100 值為: (a>c)>=(f>4) 值為:11二、關(guān)系表達(dá)式115.2邏輯運(yùn)算符和邏輯表達(dá)式一、邏輯運(yùn)算符及其優(yōu)先級(jí)邏輯運(yùn)算符是用來對(duì)兩個(gè)關(guān)系式或邏輯量進(jìn)行邏輯運(yùn)算的,運(yùn)算結(jié)果為邏輯值“真(1)”或“假(0)”。在C語言中,邏輯量是用數(shù)值非0和0來表示邏輯真和假的。

邏輯運(yùn)算符運(yùn)算符名稱對(duì)象數(shù)結(jié)合性&&||邏輯與邏輯或雙目自左向右!邏輯非單目自右向左5.2邏輯運(yùn)算符和邏輯表達(dá)式一、邏輯運(yùn)算符及其優(yōu)先級(jí)運(yùn)算符邏輯運(yùn)算符運(yùn)算規(guī)則:aba&&ba||b!a假(0)假(0)真(1)真(1)假(0)真(1)假(0)真(1)假(0)假(0)假(0)真(1)假(0)真(1)真(1)真(1)真(1)真(1)假(0)假(0)

邏輯運(yùn)算符的優(yōu)先級(jí):

!

算術(shù)運(yùn)算符 關(guān)系運(yùn)算符

&& ||邏輯運(yùn)算符運(yùn)算規(guī)則:aba&&ba||b!a假(0)假(0)二、邏輯表達(dá)式邏輯表達(dá)式是由邏輯運(yùn)算符連接表達(dá)式構(gòu)成的。它的一般形式為:

表達(dá)式雙目邏輯運(yùn)算符表達(dá)式

單目邏輯運(yùn)算符表達(dá)式其中表達(dá)式可以是算術(shù)表達(dá)式、關(guān)系表達(dá)式、賦值表達(dá)式、逗號(hào)表達(dá)式等。邏輯表達(dá)式的運(yùn)算結(jié)果以數(shù)值“1”代表真,“0”代表假;在判斷一個(gè)數(shù)值時(shí),其值為“0”即為假,“非0”即為真。二、邏輯表達(dá)式例:a=2,c=‘a(chǎn)’,f=3.0,求邏輯表達(dá)式的值。

!(c-’a’) f/3&&a-c a<=c||f<=c !(1&&!a) (c>a)&&(f>4) !(1,2) !(c=‘A’) (1,2,3)&&(3,3,3)11110001例:a=2,c=‘a(chǎn)’,f=3.0,求邏輯表達(dá)式的值。111

三、邏輯運(yùn)算的短路特性 邏輯表達(dá)式求解時(shí),并非所有的邏輯運(yùn)算符都被執(zhí)行,只是在必須執(zhí)行下一個(gè)邏輯運(yùn)算符才能求出表達(dá)式的解時(shí),才執(zhí)行該運(yùn)算符。例

a&&b&&c——只在a為真時(shí),才判別b的值;

只在a、b都為真時(shí),才判別c的值例

a||b||c——只在a為假時(shí),才判別b的值;

只在a、b都為假時(shí),才判別c的值例

a=1;b=2;c=3;d=4;m=1;n=1;(m=a>b)&&(n=c>d)

問,m和n的運(yùn)算結(jié)果結(jié)果:m=0,n=1三、邏輯運(yùn)算的短路特性例a&&b&&c——只在a5.3if語句一、if語句的三種形式

形式一:

if(表達(dá)式)

語句;

if(表達(dá)式)語句;其中:表達(dá)式一般為關(guān)系表達(dá)式或邏輯表達(dá)式,也可以是其它的表達(dá)式。語句可以是單一語句或復(fù)合語句。exprstatement=1=0

例:if(x>y)printf(“%d”,x);5.3if語句一、if語句的三種形式exprstatem

形式二:

if(表達(dá)式)

語句1;

else

語句2;語句1和語句2可以是單一語句或復(fù)合語句。exprstatement1statement2=1=0

例:if(x>y) max=x; elsemax=y;形式二:exprstatement1statement

形式三:

if(表達(dá)式1)語句1; elseif(表達(dá)式2)語句2; elseif(表達(dá)式3)語句3;

…… elseif(表達(dá)式m)語句m; else語句n;expr1statemnt1=1=0expr2expr3statemntnstatemnt3statemnt2=1=1=0=0

例:if(score>=90)grade=‘A’;elseif(score

>=80)grade

=‘B’;elseif(score

>=70)grade

=‘C’;elseif(score

>=60)grade

=‘D’;elsegrade

=‘F’;形式三:expr1statemnt1=1=0expr2例: if(a==b&&x==y)printf(“a=b,x=y”);if(3)printf(“OK”);if(‘a(chǎn)’)printf(“%d”,’a’);說明:①if后面的表達(dá)式類型任意

②語句可以是復(fù)合語句

③if(x)if(x!=0)if(!x)if(x==0)例: if(a>b)

{t=a;a=b;b=t;}例: if(a==b&&x==y)printf(“[例]從鍵盤輸入兩個(gè)數(shù),求出絕對(duì)值較大者并顯示輸出。 #include<stdio.h>

#include<math.h> voidmain() {inta,b,max; printf(“Enter2numbers:”); scanf(“%d,%d”,&a,&b); if(abs(a)>abs(b)) max=a; else max=b; printf(“Max(absolute)=%d\n”,max);

}運(yùn)行結(jié)果:

Enter2numbers:-78,23<CR>

Max(absolute)=-78選擇結(jié)構(gòu)[例]從鍵盤輸入兩個(gè)數(shù),求出絕對(duì)值較大者并 #inclu[例]判斷輸入的字符是否是“Q”或“q”,若是,顯示Quit。

#include<stdio.h> voidmain() {charc; printf(“Enteracharacter:”); c=getchar(); if(c==‘Q’||c==‘q’)printf(“Quit!\n”);

}運(yùn)行結(jié)果:

Enteracharacter:Q<CR>

Quit![例]判斷輸入的字符是否是“Q”或“q”,若是,顯示Qui 1、將以下條件寫成邏輯表達(dá)式

m1-n1≤j≤m1+n1

②X<-5或X>5

③M和N之一為5,但不能同時(shí)為5

④-100<k<100,且K為偶數(shù)

2、寫程序,輸入兩個(gè)數(shù)并判斷兩數(shù)是否相等,輸出判斷結(jié)果。

3、編制一個(gè)數(shù)制轉(zhuǎn)換程序,要求能進(jìn)行如下的數(shù)制轉(zhuǎn)換:10進(jìn)制轉(zhuǎn)換為16進(jìn)制

16進(jìn)制轉(zhuǎn)換為10進(jìn)制

10進(jìn)制轉(zhuǎn)換為8進(jìn)制

8進(jìn)制轉(zhuǎn)換為10進(jìn)制課堂練習(xí) 1、將以下條件寫成邏輯表達(dá)式課堂練習(xí)2、

#include<stdio.h> voidmain() {inta,b; printf("Enterintegera:"); scanf("%d",&a); printf("Enterintegerb:"); scanf("%d",&b);

if(a==b) printf("a==b\n"); else printf("a!=b\n"); }運(yùn)行結(jié)果:

Enterintegera:12Enterintegerb:12

a==b運(yùn)行結(jié)果:

Enterintegera:12

Enterintegerb:9

a!=b2、運(yùn)行結(jié)果:運(yùn)行結(jié)果:

3、

#include<stdio.h> voidmain() { intch,a; printf(“\n1.DectoHex\n”);

printf(“2.HextoDec\n”);

printf(“3.DectoOct\n”);

printf(“4.OcttoDec\n”);

printf(“\nEnteryourchoice:”);

scanf(“%d”,&ch);

if(ch=1)

{printf(“\nEnteraninteger(Dec):”);

scanf(“%d”,&a);

printf(“Dec=%dHex=%x\n”,a,a);

}

if(ch=2)

┆3、#include<stdio.h> 【寫程序】提示輸入3個(gè)整數(shù),判斷最大者并輸出判斷結(jié)果。課堂練習(xí) 【寫程序】提示輸入3個(gè)整數(shù),判斷最大者并輸出判斷結(jié)果。課堂二、if語句的嵌套——if中又包含if。if(expr1)

if(expr2)statement1;

elsestatement2;else

if(expr3)statement3;

elsestatement4;內(nèi)嵌if內(nèi)嵌ifif(expr1)

if(expr2)statement1;

else

statement2;內(nèi)嵌ifif(expr1)

if(expr2)statement1;elsestatement2;

內(nèi)嵌ifif(expr1)statement1;else

if(expr3)statement3;

else

statement4;內(nèi)嵌if二、if語句的嵌套——if中又包含if。if(expr1)if~else配對(duì)原則:else總是和它上面離它最近的未配對(duì)的if配對(duì)if(……)if(……)if(……)else…...else…...else…...

當(dāng)缺少某個(gè)分支else時(shí),正確的配對(duì)方法:加{}例:

if(a==b)if(b==c)printf(“a==b==c”);

elseprintf(“a!=b”);修改:

if(a==b)

{if(b==c)printf(“a==b==c”);

}

elseprintf(“a!=b”);if~else配對(duì)原則:else總是和它上面離它最近的未配[例]y=

編程序,輸入一個(gè)x值,輸出y值。

voidmain()

{intx,y;

scanf(“%d”,&x);

if(x<0)y=-1;

else

if(x>0)y=1;

elsey=0;

printf(“x=%d,y=%d\n”,x,y);

}-1(x<0)0(x=0)1(x>0)運(yùn)行結(jié)果:

-5

x=-5,y=-1去掉else,分析運(yùn)行結(jié)果運(yùn)行結(jié)果:

-5

x=-5,y=0[例]-1(x<0)運(yùn)行結(jié)果:去掉else,分析運(yùn)行結(jié)課堂練習(xí) 1、對(duì)學(xué)生的成績(jī)進(jìn)行分級(jí):分?jǐn)?shù)>=80是優(yōu)良,分?jǐn)?shù)低于60為不及格,其它為及格。{intscore;printf(“Enteranum:\n”);scanf(“%d”,&score);if(score>=80)printf(“Good!\n”);elseif(score>=60)printf(“Passed!\n”);elseprintf(“Failed!\n”);}if(score<60)printf(“Failed!\n”);elseif(score>=60)printf(“Passed!\n”);elseprintf(“Good!\n”);if(score<60)printf(“Failed!\n”);elseif(score>=80)printf(“Good!\n”);elseprintf(“Passed!\n”);if(score>=60)if(score>=80) printf(“Good!\n”);elseprintf(“Passed!\n”);elseprintf(“Failed!\n”);if(score>=80)if(score>=60) printf(“Passed!\n”);elseprintf(“Good!\n”);elseprintf(“Failed!\n”);課堂練習(xí) 1、對(duì)學(xué)生的成績(jī)進(jìn)行分級(jí):分?jǐn)?shù)>=80是優(yōu)良,分?jǐn)?shù)課堂練習(xí) 2、編程:輸入一個(gè)數(shù),判斷該數(shù)是>0、<0,還是=0,輸出判斷結(jié)果。#include<stdrio.h>voidmain{intx;printf(“Inputyournumber:\n”);scanf(“%d”,&x);if(x>0)printf(“It’sapositive.\n”);elseif(x<0)printf(“It’sanegative.\n”);elseprintf(“It’sazore.\n”);}課堂練習(xí) 2、編程:輸入一個(gè)數(shù),判斷該數(shù)是>0、<0,還是=三、條件運(yùn)算符和條件表達(dá)式

if(a>b)max=a;if語句

elsemax=b;┊

max=(a>b)?a:b;

條件表達(dá)式語句

1.條件運(yùn)算符及其優(yōu)先級(jí)條件運(yùn)算符是三目運(yùn)算符,其三個(gè)運(yùn)算對(duì)象都是表達(dá)式。運(yùn)算符名稱對(duì)象數(shù)運(yùn)算規(guī)則結(jié)合性

?:

條件

三目對(duì)e1?e2:e3

e1為真,獲得e2

e1為假,獲得e3

自右向左三、條件運(yùn)算符和條件表達(dá)式運(yùn)算符名稱對(duì)象數(shù)運(yùn)算規(guī)則結(jié)合性

?

條件運(yùn)算符的優(yōu)先級(jí)如下:其它運(yùn)算符優(yōu)于

條件運(yùn)算符

優(yōu)于賦值運(yùn)算符優(yōu)于逗號(hào)運(yùn)算符 例:設(shè)a,b,c均為2,則

(a==b)?c=1:0 d=a+1==3?b=a+2:a+32.條件表達(dá)式條件表達(dá)式是由條件運(yùn)算符連接表達(dá)式構(gòu)成的。其一般形式為:

表達(dá)式1?表達(dá)式2:表達(dá)式3條件運(yùn)算符的優(yōu)先級(jí)如下:例:設(shè)a=2,c=‘a(chǎn)’,f=3.0,求下列條件表達(dá)式的值。

x=a>0?a:-ax=f>=2.0?a<=c:a>=cx=!(a!=0)?!a:!!ax=(f>0)?((a>0)?2:1):((a>0)?1:0)

x=(a>=0)?(a=1):(a=0)

x=(c==‘A’)?(0,1):(1,0)211210例:設(shè)a=2,c=‘a(chǎn)’,f=3.0,求下列條件表達(dá)式的值。5.4switch語句switch是C語言提供的一個(gè)多分支選擇語句。

switch語句比通過嵌套實(shí)現(xiàn)多分支選擇的if語句更直觀。

switch的一般格式如下:

switch(表達(dá)式){caseE1:

語句組1;break;caseE2:

語句組2;break;

…….caseEn:

語句組n;break;[default:

語句組;break;]}

5.4switch語句switch是C語言提供的一

switch語句的控制流程是:首先計(jì)算表達(dá)式的值,然后依次與每一個(gè)case中的常量值進(jìn)行比較,當(dāng)發(fā)現(xiàn)與某個(gè)值匹配,就執(zhí)行該case后面的語句,直到break為止。若表達(dá)式的值與所有case中的常量值都不匹配,則執(zhí)行default后面的語句。switch表達(dá)式語句組1語句組2語句組n語句組…...E1E2Endefaultcaseswitch語句的控制流程是:首先計(jì)算表達(dá)式的值,然說明:①E1,E2,…En是常量表達(dá)式,且值必須互不相同②case語句起標(biāo)號(hào)作用,必須用break跳出③case后可包含多個(gè)可執(zhí)行語句,且不必加{}④switch可嵌套⑤多個(gè)case可共用一組執(zhí)行語句例:switch(ch)

case‘A’:case‘B’:case‘C’:printf(“score>60\n”);break;

……..說明:例:switch(ch)例:

switch(score){case5:printf(“Verygood!”);case4:printf(“Good!”);case3:printf(“Pass!”);case2:printf(“Fail!”);default:printf(“dataerror!”);}score為5時(shí),輸出:

Verygood!Good!Pass!Fail!dataerror!例:switch(score)score為5時(shí),輸出:例:voidmain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){ case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf(“\na=%d,b=%d”,a,b);}運(yùn)行結(jié)果:a=2,b=1例:voidmain()運(yùn)行結(jié)果:a=2,b=1#include<stdio.h>main(){intc;printf("Entermornorhorother:");c=getchar();switch(c){case'm':printf("\nGoodmorning!\n");break;case'n':printf("\nGoodnight!\n");break;case'h':

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論