日本高清不卡中文字幕-一起草草视频在线观看-亚洲精品一区二区三区色-国产亚洲精品免费视频

您好,歡迎進(jìn)入深圳市穎特新科技有限公司官方網(wǎng)站!

您現(xiàn)在的位置:首頁 新聞資訊 >> 新聞?lì)^條 >> C語言之選擇結(jié)構(gòu)
新聞資訊
NEWS INFORMATION

C語言之選擇結(jié)構(gòu)

發(fā)布時(shí)間:2019-05-22

該章內(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)的程序。

第一節(jié) 關(guān)系運(yùn)算符、關(guān)系表達(dá)式

知識(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。(只有01兩種!。

如,3>2>1的值為1;若變量a中的值為10,變量b中的值為6,則關(guān)系表達(dá)式a>b的值為“真”,即為1。而關(guān)系表達(dá)式(a>5)<(b>10)的值為“假”,即為0。

 

第二節(jié)、邏輯運(yùn)算符和邏輯表達(dá)式

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樣子的是考試陷阱。

第三節(jié)  if語句

知識(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子句總是與前面最近的不帶elseif相結(jié)合,與書寫格式無關(guān)。

 
 

如下面語句:

if(表達(dá)式1)

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

else        語句2;

實(shí)質(zhì)上等價(jià)于:

if(表達(dá)式1)

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

else        語句2;

 

 

 

 

 

 

 

 

 

 

 

 

 

第四節(jié)  條件運(yùn)算符與條件表達(dá)式

知識(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。

       

第四節(jié) switch語句及其構(gòu)成的選擇結(jié)構(gòu)

知識(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);

}

 

第五節(jié)  goto語句

知識(shí)點(diǎn):goto是關(guān)鍵字;goto語句的含義;

重要程度:

1、goto語句

goto語句的作用是,無條件的把程序的執(zhí)行轉(zhuǎn)向語句標(biāo)號(hào)所在的位置。濫用goto語句將使程序的流程毫無規(guī)律,可讀性差,對(duì)于初學(xué)者來說應(yīng)盡量不用。(記住這句話就可以了!)

goto語句也稱為無條件轉(zhuǎn)移語句,其一般格式如下: goto 語句標(biāo)號(hào); 其中語句標(biāo)號(hào)是按標(biāo)識(shí)符規(guī)定書寫的符號(hào), 放在某一語句行的前面,標(biāo)號(hào)后加冒號(hào)(:)。語句標(biāo)號(hào)起標(biāo)識(shí)語句的作用,與goto 語句配合使用。
如: label: i++;
loop: while(x<7);
C語言不限制程序中使用標(biāo)號(hào)的次數(shù),但各標(biāo)號(hào)不得重名。goto語句的語義是改變程序流向, 轉(zhuǎn)去執(zhí)行語句標(biāo)號(hào)所標(biāo)識(shí)的語句。
goto語句通常與條件語句配合使用?捎脕韺(shí)現(xiàn)條件轉(zhuǎn)移, 構(gòu)成循環(huán),跳出循環(huán)體等功能。
但是,在結(jié)構(gòu)化程序設(shè)計(jì)中一般不主張使用goto語句, 以免造成程序流程的混亂,使理解和調(diào)試程序都產(chǎn)生困難。
.可以考慮使用goto的情形
1.從多重循環(huán)中直接跳出
很多人建議廢除C++/C的goto語句,以絕后患。但實(shí)事求是地說,錯(cuò)誤是程序員自己造成的,不是goto的過錯(cuò)。goto 語句至少有一處可顯神通,它能從多重循環(huán)體中一下子跳到外面,用不著寫很多次的break語句。例如:
for(......){
for(....){
for(.....){
// 如何沖出重重包圍?
}
}
}
break;只能跳出單層的循環(huán),return將整個(gè)函數(shù)都返回了,沒法再繼續(xù)了,顯然也不行,所以我們想到了goto。如果是在陷入了很深層次的循環(huán)里想要跳出最外層的循環(huán),用 goto 直接跳出卻比用 break 一個(gè)循環(huán)一個(gè)循環(huán)地跳出要好得多。有人甚至形象比喻說:“就像樓房著火了,來不及從樓梯一級(jí)一級(jí)往下走,可從窗口跳出火坑。” 其實(shí),你可以將 break 和 continue 理解成弱化了的 goto 語句。
2. 出錯(cuò)時(shí)清除資源
如果一個(gè)函數(shù)有多個(gè)出口,則在每個(gè)出口處,會(huì)產(chǎn)生巨大的退出代碼,如下例一,每個(gè)函數(shù)只能有一個(gè)出口,所有的資源釋放必須放在出口統(tǒng)一解決,那全部使用大括號(hào),十幾個(gè),幾十個(gè)if判斷條件下來,你數(shù)數(shù)你的大括號(hào)有多深?這種代碼可讀性不好,一旦寫錯(cuò)了,難于尋找錯(cuò)誤。所有這些問題,一個(gè)goto就解決了。
當(dāng)程序要分配和清除資源時(shí)(像內(nèi)存、或處理字形、窗口、打印機(jī)),這種情形下用goto通常是為了復(fù)制代碼或清除資源。若遇到這種情況,程序員就要掂量是 goto 的缺點(diǎn)令人討厭呢?還是復(fù)制代碼那令人頭痛的維護(hù)更討厭呢?最后還是認(rèn)為 goto 的缺點(diǎn)更可忍受。

 

聯(lián)系方式0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A08

吉木萨尔县| 吴忠市| 曲松县| 平原县| 沅江市| 建湖县| 唐山市| 楚雄市| 晴隆县| 邓州市| 山西省| 南岸区| 北辰区| 鱼台县| 萨迦县| 文水县| 兴业县| 锡林浩特市| 合川市| 太白县| 台北县| 锡林郭勒盟| 永丰县| 深圳市| 贺州市| 思茅市| 陆良县| 罗田县| 固始县| 南靖县| 邳州市| 台安县| 蓝田县| 聂拉木县| 错那县| 琼海市| 盖州市| 甘谷县| 无棣县| 固阳县| 岳池县|