您好,歡迎進(jìn)入深圳市穎特新科技有限公司官方網(wǎng)站!
該章內(nèi)容:本章我們學(xué)習(xí)三大結(jié)構(gòu)之一:選擇結(jié)構(gòu),采用選擇結(jié)構(gòu)來解決問題稱為判斷問題,它的求解規(guī)則是在不同的條件下進(jìn)行不同的操作。選擇結(jié)構(gòu)比順序結(jié)構(gòu)要復(fù)雜一些。本章是考試的重點(diǎn)章節(jié)。
學(xué)習(xí)方法:先了解選擇結(jié)構(gòu)相關(guān)的基礎(chǔ)知識(shí),然后做選擇結(jié)構(gòu)簡單的習(xí)題,逐步加入復(fù)雜的語句。最終一定要學(xué)會(huì)如何寫簡單的選擇結(jié)構(gòu)的程序。
知識(shí)點(diǎn):語句和表達(dá)式之間的聯(lián)系;分號(hào)的使用;復(fù)合語句
重要程度:★★★★
1、C語言中的邏輯值
C語言中的邏輯值只有兩個(gè):“真”和“假”。用非零來代表“真”,用零來代表“假”。
C語言中只有一個(gè)數(shù)值表示假,就是0。其它的數(shù)據(jù)都是表示真,如:1.1,2.9,-2等等。
1、關(guān)系運(yùn)算符和關(guān)系表達(dá)式
所謂的關(guān)系運(yùn)算就是比較運(yùn)算,將兩個(gè)數(shù)進(jìn)行比較,判斷比較的結(jié)果是否符合條件。
1.1 C語言中的關(guān)系運(yùn)算符
C語言提供了6種關(guān)系運(yùn)算符,如表1所示。
表1 C語言中的6種關(guān)系運(yùn)算符及其優(yōu)先級(jí)
優(yōu)先級(jí) |
優(yōu)先級(jí)相同(高) |
優(yōu)先級(jí)相同(低) |
||||
關(guān)系運(yùn)算符 |
> (大于) |
>= (大于等于) |
< (小于) |
<= (小于等于) |
== (等于) |
!= (不等于) |
注意:
1)由兩個(gè)字符組成的運(yùn)算符之間不可以加空格,如<=就不能寫成:< =。
2)前四種關(guān)系運(yùn)算符(>、>=、<、<=)的優(yōu)先級(jí)相同,后兩種關(guān)系運(yùn)算符(==、!=)的優(yōu)先級(jí)相同,前四種關(guān)系運(yùn)算符的優(yōu)先級(jí)高于后兩種關(guān)系運(yùn)算符。
3)關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符。如“+”的優(yōu)先級(jí)高于“<”。
4)關(guān)系運(yùn)算符的優(yōu)先級(jí)高于賦值運(yùn)算符。如“=”的優(yōu)先級(jí)低于“==”。(注意“=” “==”的區(qū)別)。(考試的重點(diǎn))
5)關(guān)系運(yùn)算符都是雙目運(yùn)算符,自左至右的結(jié)合性。如4<5<2則等價(jià)于(4<5)<2(考試重點(diǎn))。
1.2 關(guān)系表達(dá)式
關(guān)系表達(dá)式:用關(guān)系運(yùn)算符將表達(dá)式連接起來的式子稱為關(guān)系表達(dá)式。
關(guān)系表達(dá)式的值:關(guān)系表達(dá)式的值若為真,則結(jié)果為1;若為假,則結(jié)果為0。(只有0和1兩種!。
如,3>2>1的值為1;若變量a中的值為10,變量b中的值為6,則關(guān)系表達(dá)式a>b的值為“真”,即為1。而關(guān)系表達(dá)式(a>5)<(b>10)的值為“假”,即為0。
1.1 C語言中的邏輯運(yùn)算符
C語言提供了3種邏輯運(yùn)算符,如表2所示。
表2 C語言中的3種邏輯運(yùn)算符及其優(yōu)先級(jí)
優(yōu)先級(jí) |
優(yōu)先級(jí)低 優(yōu)先級(jí)高 |
||
邏輯運(yùn)算符 |
|| (邏輯“或”) |
&&(邏輯“與”) |
! (邏輯“非”) |
注意:
(1)&&和||運(yùn)算符是雙目運(yùn)算符,如(a>b)&&(x<y)。!運(yùn)算符是單目運(yùn)算符,應(yīng)該出現(xiàn)在運(yùn)算對(duì)象的左邊,如!(a<b)。邏輯運(yùn)算符具有自左向右的結(jié)合性。
(2)在關(guān)系運(yùn)算符、算術(shù)運(yùn)算符、賦值運(yùn)算符、邏輯運(yùn)算符四者中,優(yōu)先級(jí)從高到低依次為:! (邏輯“非”)、算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、&&(邏輯“與”)、||(邏輯“或”)、賦值運(yùn)算符。
1.2 邏輯表達(dá)式和邏輯表達(dá)式的值
邏輯表達(dá)式:用邏輯運(yùn)算符將表達(dá)式連接起來的式子稱為邏輯表達(dá)式。
邏輯運(yùn)算的對(duì)象可以是C語言中任意合法的表達(dá)式。如,!(a<b),(a+b)&&(x=8),(a=b)||(c+2),'d'&&'c'等都是合法的表達(dá)式。
邏輯表達(dá)式的值:邏輯表達(dá)式的運(yùn)算規(guī)則如表3所示。邏輯表達(dá)式的值若為真,則結(jié)果為1;若為假,則結(jié)果為0。(表達(dá)式的值也只有0和1兩種。。。
表3 邏輯運(yùn)算的規(guī)則
A |
b |
!a |
!b |
a&&b |
a||b |
非0 非0 0 0 |
非0 0 非0 0 |
0 0 1 1 |
0 1 0 1 |
1 0 0 0 |
1 1 1 0 |
例1:設(shè)有定義:int a=5,b=6,c=7;則以下選項(xiàng)中值為0的表達(dá)式是
A)(!a==0)&& (a<b<c) B)(b<c)&&!c||1
C)a&&b D)(a+4)||( a+b)&&(c-a)
正確答案為A。
考試重點(diǎn)考察點(diǎn):
1、在C語言中,由&&或||組成的邏輯表達(dá)式,在特定的情況下會(huì)產(chǎn)生“短路”的現(xiàn)象。在邏輯表達(dá)式的求解中,并不是所有的運(yùn)算對(duì)象都被執(zhí)行,只是在必須執(zhí)行下一個(gè)邏輯運(yùn)算符才能求出表達(dá)式的解時(shí),才執(zhí)行該邏輯運(yùn)算符。(若“&&”的左邊的運(yùn)算對(duì)象的值為0,則不再對(duì)右邊的運(yùn)算對(duì)象進(jìn)行運(yùn)算,直接得出整個(gè)表達(dá)式的值為0;若“||”的左邊的運(yùn)算對(duì)象為1,則不再對(duì)右邊的運(yùn)算對(duì)象進(jìn)行運(yùn)算,直接得出整個(gè)表達(dá)式的值為1。)
(1)若執(zhí)行下列語句
a=0;b=1;
c=a++&&(b=6);
各變量的值為:a為1,b為1,c為0,由于(b=6)沒被執(zhí)行到,故b的值不變。
(2)執(zhí)行語句
a=1;b=1;c=0;
d=--a||b--||(c=b+3);
后,結(jié)果:a為0,b為0,c為0,d為1,表達(dá)式中的(c=b+3)沒有被執(zhí)行到,c值不變。
2、用C語言正確表示數(shù)學(xué)意義上的a<b<c,
正確的表示方法是 a<b&&b<c。因?yàn)閍<b<c在C語言執(zhí)行中,假定a=8,b=7,c=6,在數(shù)學(xué)中,a<b<c是不成立的。但是在C語言中,8<7<6會(huì)首先首先執(zhí)行8<7得到0,再接著算0<6,這樣就成合法了。所以一定注意C語言考試中這個(gè)a<b<c樣子的是考試陷阱。
知識(shí)點(diǎn):if語句的三種形式使用;if和else的搭配;嵌套的if語句的使用
重要程度:★★★★
1、if語句的三種形式
1.1 if語句
if只管后面一個(gè)分號(hào);要管多個(gè)用大括號(hào)把多個(gè)語句括起來。
程序1:
if(a<b)
{t=a; a=b; b=t;}
--------------------------
程序2:
if(a<b)
t=a; a=b; b=t;
程序1、2注意兩者的區(qū)別 。。
圖1 if語句的流程圖
1.2 if-else語句
它的一般格式如下:
if(表達(dá)式)
語句1;
else
語句2;
例如:對(duì)兩數(shù)大小的比較,輸出大數(shù)。用if-else語句實(shí)現(xiàn):
if(x>y)
printf(“%d”,x);
else
printf(“%d”,y);
圖2 if-else語句的流程圖
例1:若有以下程序
main( )
{
int a=5,b=4,c=6,t=0;
if(a<b) {t=a;a=b;b=t;}
if(a<c) t=a;a=c;c=t;
printf("%d %d %d\n",a,b,c);
}
執(zhí)行后輸出結(jié)果是
答案:645
分析:程序的第一行在定義a、b、c、t四個(gè)變量時(shí)初始化了值。接下來,第一個(gè)if語句的表達(dá)式為:a<b,a變量里存放的是整數(shù)5,b變量里存放的是整數(shù)4,可以判斷該表達(dá)式為“假”,那么程序應(yīng)該跳過if的子句。子句是一條復(fù)合語句則{t=a;a=b;b=t;}被跳過。第二個(gè)if語句的表達(dá)式為:a<c,因?yàn)樽兞縜的值為5,變量c的值為6,因此該表達(dá)式的值為“真”,執(zhí)行該if的語句“t=a;”,t的值被賦為5。該if語句執(zhí)行完成后,還有兩個(gè)其它的語句“a=c;c=t;”執(zhí)行后這兩條語句后,a的值被賦為6,c的值被賦為5。因此,最后輸出a、b、c變量的值應(yīng)該分別為6、4、5。若將if(a<b) {t=a;a=b;b=t;}改為if(a<b) t=a;a=b;b=t;,請(qǐng)讀者自行分析結(jié)果。
1.3 if-else-if 語句結(jié)構(gòu)
它的一般格式如下:(只有一個(gè)語句被執(zhí)行)
if(表達(dá)式1)
語句1;
else if(表達(dá)式2)
語句2 ;
else if(表達(dá)式3)
語句3 ;
……
else
語句n ;
圖2 if-else-if 語句的流程圖
例2:有如下程序
main( )
{ float x=2.0,y;
if(x<0.0) y=0.0;
else if(x<10.0) y=1.0/x;
else y=1.0;
printf("%f\n",y);
}
該程序的輸出結(jié)果是(。。
A) 0.000000 B) 0.250000 C) 0.500000 D) 1.000000
分析:首先x的初值為2.0。判斷x<0.0,其為假,則跳過語句“y=0.0;”,接著又判斷x<10.0,其為真,則執(zhí)行“y=1.0/x;”,然后將其輸出。因此答案選C。
注意:
(1)if后面圓括號(hào)中的表達(dá)式,可以是任意合法的C語言表達(dá)式,可以是任意類型的數(shù)據(jù)。
(2)if子句和else子句中如果只有一條語句,則該語句后的分號(hào)不能省。
2、if語句的嵌套(概念考得多)
if語句的嵌套:在if語句中又包含一個(gè)或多個(gè)if語句稱為if語句的嵌套。一般形式如下:
if(表達(dá)式1)
if(表達(dá)式2) 語句1;
else 語句2;
else
if(表達(dá)式3) 語句3;
else 語句4;
其執(zhí)行過程:若表達(dá)式1為“真”,則執(zhí)行其嵌套的if-else語句,否則,執(zhí)行else后的內(nèi)嵌if-else語句。其中if-else語句在語法上是一條語句。
特別注意:C語言的語法規(guī)定:else子句總是與前面最近的不帶else的if相結(jié)合,與書寫格式無關(guān)。
|
知識(shí)點(diǎn):條件運(yùn)算符號(hào)的使用(唯一的三目);條件表達(dá)式的運(yùn)算;
重要程度:★★★★(口訣是“真前假后”)
1、條件運(yùn)算符
條件運(yùn)算符由兩個(gè)運(yùn)算符組成:?:。條件運(yùn)算符要求有三個(gè)運(yùn)算對(duì)象,稱三目運(yùn)算符,它是C語言中唯一的一個(gè)三目運(yùn)算符。
2、條件表達(dá)式(“真前假后”口訣)
表達(dá)式1 ? 表達(dá)式2:表達(dá)式3
其執(zhí)行過程:先求解表達(dá)式1,若為非0(真)則求解表達(dá)式2,并將表達(dá)式2的值作為整個(gè)表達(dá)式的值。若表達(dá)式1的值為0(假),則求解表達(dá)式3,表達(dá)式3的值就是整個(gè)表達(dá)式的值。
例1:以下程序的輸出結(jié)果是(。。
main()
{
int a=5,b=4,c=6,d;
printf("%d\n",d=a>b?(a>c?a:c):(b));
}
A) 5 B)
4 C) 6 D)
不確定
分析:這是一個(gè)條件表達(dá)式的嵌套,先判斷a>b為“真”,則需要求解表達(dá)式a>c?a:c的值。因此又對(duì)a>c進(jìn)行判斷,其為“假”,那么c就是整個(gè)表達(dá)式的值。答案選C。
3、條件運(yùn)算符的優(yōu)先級(jí)
條件運(yùn)算符優(yōu)先于賦值運(yùn)算,但低于邏輯運(yùn)算,關(guān)系運(yùn)算符和算術(shù)運(yùn)算符。條件運(yùn)算符的結(jié)合方向?yàn)?ldquo;自右向左”。如有以下表達(dá)式:
a>b?a:c>d?c:d 等價(jià)于 a>b?a:(c>d?c:d)
如果a=1,b=2,c=3,d=4,則表達(dá)式的值等于4。
知識(shí)點(diǎn):switch語句的執(zhí)行方式;switch語句和 break的搭配;
重要程度:★★★★
1、switch語句
switch語句的一般形式如下:
switch(表達(dá)式)
{ case 常量表達(dá)式1:語句1;
case 常量表達(dá)式2:語句2;
……
case 常量表達(dá)式n:語句n;
default: 語句塊n+1;
}
其中語句1,語句2等等,可以是一條語句,也可以是若干語句。也可以是嵌套的switch語句。
注意:
(1)switch后圓括號(hào)中的表達(dá)式的值必須是實(shí)型或字符型,不能為實(shí)型。
(2)case后面是常量表達(dá)式,但常量表達(dá)式中不能有變量。
(3)default可以出現(xiàn)在語句體中的任何位置,但最多只能有一個(gè)。它通常出現(xiàn)在語句體的最后。
2、switch語句的執(zhí)行過程
首先求解switch后圓括號(hào)中表達(dá)式的值,然后匹配case標(biāo)號(hào),有匹配成功則執(zhí)行后面語句,只需要匹配一次成功,后面就不用再匹配了。(通過三個(gè)例子掌握switch的使用!)
例1:按照學(xué)生的考試成績,打印出相應(yīng)的等級(jí)。90分以上的輸出“A”等級(jí),80分以上的輸出“B”等級(jí),依此類推,60分以下輸出“E”等級(jí)。程序如下:
main( )
{ int score;
scanf("%d",& score); /* score中存放學(xué)生的成績 */
printf("score=%d: ",score);
switch(score/10)
{ case 10:printf("A\n");
case 9:printf("A\n");
case 8:printf("B\n");
case 7:printf("C\n");
case 6:printf("D\n");
default:printf("E\n");
}
}
輸入99分,可以知道case 9 是匹配成功的,所以就不用再匹配,直接執(zhí)行后面的case剩下的語句。直到遇到break結(jié)束。
現(xiàn)將上面程序修改如下:
main( )
{ int score;
scanf("%d",&score);
printf("score=%d: ",score);
switch(score/10)
{ case 10:printf("A\n");break;
case 9:printf("A\n"); break;
case 8:printf("B\n"); break;
case 7:printf("C\n"); break;
case 6:printf("D\n"); break;
default:printf("E\n"); break;
}
}
此時(shí)score變量取值為75時(shí),輸出結(jié)果為:score=75:C
現(xiàn)將上面程序修改如下:
main( )
{ int score;
scanf("%d",&score);
printf("score=%d: ",score);
switch(score/10)
{ case 10:printf("A\n");
case 9:printf("A\n");
case 8:printf("B\n");
case 7:printf("C\n"); break;
case 6:printf("D\n");
default:printf("E\n"); break;
}
}
此時(shí)score變量取值為95時(shí),輸出結(jié)果為:score=75:ABC.
考試核心:
1、 switch的概念題目非常重要,switch后圓括號(hào)中、case后的表達(dá)式的要求牢記。
2、 switch語句有break和沒有break之間的區(qū)別,注意,只要匹配成功一次,后面不需要繼續(xù)的匹配了,直接執(zhí)行匹配的語句直到遇到break語句。
3、 switch嵌套switch的題目是考試的重點(diǎn),請(qǐng)多次練習(xí)。
(1)以下程序運(yùn)行后的輸出結(jié)果是:2,1
main()
{
int x=1,y=0,a=0,b=0;
switch(x)
{
case 1: switch(y)
{case 0: a++; break;
case 1: b++; break;
}
case 2: a++;b++;break;
}
printf(”%d %d\n”,a,b);
}
(2)
有以下程序,程序運(yùn)行后的輸出結(jié)果是——A
A、1 B、2 C、3 D、4
main()
{
int a=15,b=21,m=0;
switch(a%3)
{
case 0: m++;break;
case 1: m++;
switch(b%2)
{default: m++;
case 0: m++; break;
}
}
printf(”%d\n”, m);
}
知識(shí)點(diǎn):goto是關(guān)鍵字;goto語句的含義;
重要程度:★
1、goto語句
goto語句的作用是,無條件的把程序的執(zhí)行轉(zhuǎn)向語句標(biāo)號(hào)所在的位置。濫用goto語句將使程序的流程毫無規(guī)律,可讀性差,對(duì)于初學(xué)者來說應(yīng)盡量不用。(記住這句話就可以了!)
掃碼關(guān)注我們
傳真:0755-82591176
郵箱:vicky@yingtexin.net
地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A08