68精品久久久久久欧美,最近中文字幕完整在线看一,久久亚洲男人天堂,最近中文字幕完整视频高清1

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

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

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

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

該章內(nèi)容:本章我們學習三大結(jié)構(gòu)之一:選擇結(jié)構(gòu),采用選擇結(jié)構(gòu)來解決問題稱為判斷問題,它的求解規(guī)則是在不同的條件下進行不同的操作。選擇結(jié)構(gòu)比順序結(jié)構(gòu)要復雜一些。本章是考試的重點章節(jié)。

學習方法:先了解選擇結(jié)構(gòu)相關(guān)的基礎(chǔ)知識,然后做選擇結(jié)構(gòu)簡單的習題,逐步加入復雜的語句。最終一定要學會如何寫簡單的選擇結(jié)構(gòu)的程序。

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

知識點:語句和表達式之間的聯(lián)系;分號的使用;復合語句

重要程度:★★★★

1、C語言中的邏輯值

C語言中的邏輯值只有兩個:“真”和“假”。用非零來代表“真”,用零來代表“假”。

C語言中只有一個數(shù)值表示假,就是0。其它的數(shù)據(jù)都是表示真,如:1.1,2.9,-2等等。

 

1、關(guān)系運算符和關(guān)系表達式

所謂的關(guān)系運算就是比較運算,將兩個數(shù)進行比較,判斷比較的結(jié)果是否符合條件。

 

1.1 C語言中的關(guān)系運算符

C語言提供了6種關(guān)系運算符,如表1所示。

表1  C語言中的6種關(guān)系運算符及其優(yōu)先級

優(yōu)先級

優(yōu)先級相同(高)

優(yōu)先級相同(低)

關(guān)系運算符

>

(大于)

>=

(大于等于)

<

(小于)

<=

(小于等于)

==

(等于)

!=

(不等于)

             

注意:

1)由兩個字符組成的運算符之間不可以加空格,如<=就不能寫成:< =。

2)前四種關(guān)系運算符(>、>=、<、<=)的優(yōu)先級相同,后兩種關(guān)系運算符(==、!=)的優(yōu)先級相同,前四種關(guān)系運算符的優(yōu)先級高于后兩種關(guān)系運算符。

3)關(guān)系運算符的優(yōu)先級低于算術(shù)運算符。如“+”的優(yōu)先級高于“<”。

4)關(guān)系運算符的優(yōu)先級高于賦值運算符。如“=”的優(yōu)先級低于“==”。(注意“=” “==”的區(qū)別)。(考試的重點

5)關(guān)系運算符都是雙目運算符,自左至右的結(jié)合性。如4<5<2則等價于(4<5)<2(考試重點)。

 

1.2 關(guān)系表達式

關(guān)系表達式:用關(guān)系運算符將表達式連接起來的式子稱為關(guān)系表達式。

關(guān)系表達式的值:關(guān)系表達式的值若為真,則結(jié)果為1;若為假,則結(jié)果為0。(只有01兩種。。

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

 

第二節(jié)、邏輯運算符和邏輯表達式

1.1 C語言中的邏輯運算符

C語言提供了3種邏輯運算符,如表2所示。

表2  C語言中的3種邏輯運算符及其優(yōu)先級

優(yōu)先級

  優(yōu)先級低                    優(yōu)先級高

邏輯運算符

|| (邏輯“或”)

&&(邏輯“與”)

! (邏輯“非”)

 

注意:

(1)&&和||運算符是雙目運算符,如(a>b)&&(x<y)。!運算符是單目運算符,應該出現(xiàn)在運算對象的左邊,如!(a<b)。邏輯運算符具有自左向右的結(jié)合性。

(2)在關(guān)系運算符、算術(shù)運算符、賦值運算符、邏輯運算符四者中,優(yōu)先級從高到低依次為:! (邏輯“非”)、算術(shù)運算符、關(guān)系運算符、&&(邏輯“與”)、||(邏輯“或”)、賦值運算符。

 

1.2 邏輯表達式和邏輯表達式的值

邏輯表達式:用邏輯運算符將表達式連接起來的式子稱為邏輯表達式。

邏輯運算的對象可以是C語言中任意合法的表達式。如,!(a<b),(a+b)&&(x=8),(a=b)||(c+2),'d'&&'c'等都是合法的表達式。

邏輯表達式的值:邏輯表達式的運算規(guī)則如表3所示。邏輯表達式的值若為真,則結(jié)果為1;若為假,則結(jié)果為0。(表達式的值也只有0和1兩種。。。

表3  邏輯運算的規(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;則以下選項中值為0的表達式是

A)(!a==0)&&  (a<b<c)                B)(b<c)&&!c||1

C)a&&b                                 D)(a+4)||( a+b)&&(c-a)

正確答案為A。

考試重點考察點

1、在C語言中,由&&||組成的邏輯表達式,在特定的情況下會產(chǎn)生“短路”的現(xiàn)象。在邏輯表達式的求解中,并不是所有的運算對象都被執(zhí)行,只是在必須執(zhí)行下一個邏輯運算符才能求出表達式的解時,才執(zhí)行該邏輯運算符。(若“&&”的左邊的運算對象的值為0,則不再對右邊的運算對象進行運算,直接得出整個表達式的值為0;若“||”的左邊的運算對象為1,則不再對右邊的運算對象進行運算,直接得出整個表達式的值為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,表達式中的(c=b+3)沒有被執(zhí)行到,c值不變。

2、用C語言正確表示數(shù)學意義上的a<b<c,

正確的表示方法是 a<b&&b<c。因為a<b<c在C語言執(zhí)行中,假定a=8,b=7,c=6,在數(shù)學中,a<b<c是不成立的。但是在C語言中,8<7<6會首先首先執(zhí)行8<7得到0,再接著算0<6,這樣就成合法了。所以一定注意C語言考試中這個a<b<c樣子的是考試陷阱。

第三節(jié)  if語句

知識點:if語句的三種形式使用;if和else的搭配;嵌套的if語句的使用

重要程度:★★★★

1、if語句的三種形式

1.1 if語句

  if只管后面一個分號;要管多個用大括號把多個語句括起來。

                               

      程序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(表達式)

             語句1;

          else

             語句2;

例如:對兩數(shù)大小的比較,輸出大數(shù)。用if-else語句實現(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四個變量時初始化了值。接下來,第一個if語句的表達式為:a<b,a變量里存放的是整數(shù)5,b變量里存放的是整數(shù)4,可以判斷該表達式為“假”,那么程序應該跳過if的子句。子句是一條復合語句則{t=a;a=b;b=t;}被跳過。第二個if語句的表達式為:a<c,因為變量a的值為5,變量c的值為6,因此該表達式的值為“真”,執(zhí)行該if的語句“t=a;”,t的值被賦為5。該if語句執(zhí)行完成后,還有兩個其它的語句“a=c;c=t;”執(zhí)行后這兩條語句后,a的值被賦為6,c的值被賦為5。因此,最后輸出a、b、c變量的值應該分別為6、4、5。若將if(a<b) {t=a;a=b;b=t;}改為if(a<b) t=a;a=b;b=t;,請讀者自行分析結(jié)果。

 

1.3 if-else-if 語句結(jié)構(gòu)

它的一般格式如下:(只有一個語句被執(zhí)行)

if(表達式1)

語句1;

else if(表達式2)

語句2 ;

else if(表達式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后面圓括號中的表達式,可以是任意合法的C語言表達式,可以是任意類型的數(shù)據(jù)。

(2)if子句和else子句中如果只有一條語句,則該語句后的分號不能省。

 

2、if語句的嵌套(概念考得多)

if語句的嵌套:在if語句中又包含一個或多個if語句稱為if語句的嵌套。一般形式如下:

if(表達式1)

if(表達式2)  語句1;

else        語句2;

else

if(表達式3)  語句3;

else         語句4;

其執(zhí)行過程:若表達式1為“真”,則執(zhí)行其嵌套的if-else語句,否則,執(zhí)行else后的內(nèi)嵌if-else語句。其中if-else語句在語法上是一條語句。

特別注意:C語言的語法規(guī)定:else子句總是與前面最近的不帶elseif相結(jié)合,與書寫格式無關(guān)。

 
 

如下面語句:

if(表達式1)

if(表達式2)  語句1;

else        語句2;

實質(zhì)上等價于:

if(表達式1)

if(表達式2)  語句1;

else        語句2;

 

 

 

 

 

 

 

 

 

 

 

 

 

第四節(jié)  條件運算符與條件表達式

知識點:條件運算符號的使用(唯一的三目);條件表達式的運算;

重要程度:★★★★(口訣是“真前假后”

1、條件運算符

條件運算符由兩個運算符組成:。條件運算符要求有三個運算對象,稱三目運算符,它是C語言中唯一的一個三目運算符。

 

 

2、條件表達式(“真前假后”口訣)

表達式1 ? 表達式2:表達式3

其執(zhí)行過程:先求解表達式1,若為非0(真)則求解表達式2,并將表達式2的值作為整個表達式的值。若表達式1的值為0(假),則求解表達式3,表達式3的值就是整個表達式的值。

 

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) 不確定

分析:這是一個條件表達式的嵌套,先判斷a>b為“真”,則需要求解表達式a>c?a:c的值。因此又對a>c進行判斷,其為“假”,那么c就是整個表達式的值。答案選C。

 

3、條件運算符的優(yōu)先級

條件運算符優(yōu)先于賦值運算,但低于邏輯運算,關(guān)系運算符和算術(shù)運算符。條件運算符的結(jié)合方向為“自右向左”。如有以下表達式:

a>b?a:c>d?c:d               等價于            a>b?a:(c>d?c:d)

如果a=1,b=2,c=3,d=4,則表達式的值等于4。

       

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

知識點:switch語句的執(zhí)行方式;switch語句和 break的搭配;

重要程度:★★★★

1、switch語句

switch語句的一般形式如下:

switch(表達式)

{     case  常量表達式1:語句1;

case  常量表達式2:語句2;

       ……

case  常量表達式n:語句n;

default: 語句塊n+1;

}

其中語句1,語句2等等,可以是一條語句,也可以是若干語句。也可以是嵌套的switch語句。

注意:

(1)switch后圓括號中的表達式的值必須是實型或字符型,不能為實型。

(2)case后面是常量表達式,但常量表達式中不能有變量。

(3)default可以出現(xiàn)在語句體中的任何位置,但最多只能有一個。它通常出現(xiàn)在語句體的最后。

 

2、switch語句的執(zhí)行過程

首先求解switch后圓括號中表達式的值,然后匹配case標號,有匹配成功則執(zhí)行后面語句,只需要匹配一次成功,后面就不用再匹配了。(通過三個例子掌握switch的使用!)

1按照學生的考試成績,打印出相應的等級。90分以上的輸出“A”等級,80分以上的輸出“B”等級,依此類推,60分以下輸出“E”等級。程序如下:

main( )

{     int score;

scanf("%d",& score);   /* 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");

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;

}

}

此時score變量取值為75時,輸出結(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;

}

}

此時score變量取值為95時,輸出結(jié)果為:score=75:ABC.

 

考試核心:

1、 switch的概念題目非常重要,switch后圓括號中、case后的表達式的要求牢記。

2、 switch語句有break和沒有break之間的區(qū)別,注意,只要匹配成功一次,后面不需要繼續(xù)的匹配了,直接執(zhí)行匹配的語句直到遇到break語句。

3、 switch嵌套switch的題目是考試的重點,請多次練習。

(1)以下程序運行后的輸出結(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)

有以下程序,程序運行后的輸出結(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語句

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

重要程度:

1、goto語句

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

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

 

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

傳真:0755-82591176

郵箱:vicky@yingtexin.net

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

罗田县| 汉沽区| 古田县| 普安县| 长武县| 灵台县| 策勒县| 紫阳县| 兴文县| 黑水县| 栾川县| 全南县| 大田县| 香格里拉县| 陆河县| 化德县| 天峨县| 达拉特旗| 温泉县| 扶余县| 普格县| 道真| 上虞市| 清苑县| 绩溪县| 汝南县| 黑水县| 尼玛县| 浮山县| 西平县| 中方县| 宜兰县| 塔城市| 师宗县| 榕江县| 达孜县| 盐亭县| 秭归县| 建昌县| 山阴县| 司法|