2019-02-21計算機二級C語言程序設(shè)計之選擇結(jié)構(gòu)

參考資料:高教版《全國計算機等級考試二級教程——C語言程序設(shè)計》茬祷、《21天學通C語言》

關(guān)系運算和邏輯運算

C語言的邏輯值

在C語言中壁榕,用非0表示“真”间涵,用0表示“假”法竞。

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

所謂關(guān)系運算實際上是“比較運算”赋焕,即進行兩個數(shù)的比較参歹,判斷比較的結(jié)果是否符合指定的條件。

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

C語言提供了6種關(guān)系運算符隆判,它們分別是:

  1. <(小于)
  2. <=(小于或等于)
  3. > (大于)
  4. >=(大于或等于)
  5. ==(等于)
  6. !=(不等于)

注意:由兩個字符組成的運算符之間不能有空格犬庇。

關(guān)系運算符是雙目運算符,并且具有自左至右的結(jié)合性侨嘀。

關(guān)系表達式及關(guān)系表達式的值

由關(guān)系運算符構(gòu)成的表達式臭挽,稱為關(guān)系表達式。關(guān)系表達式的計算結(jié)果為“邏輯值”咬腕,只有兩種可能:真(1)或假(0)欢峰。

邏輯運算符和邏輯表達式

C語言的邏輯運算符

C語言提供了3種邏輯運算符,分別是:

  1. &&(與)
  2. ||(或)
  3. U枪病(非)

其中纽帖,&&和||為雙目運算符,煞赢!為單目運算符并且出現(xiàn)在對象的左邊抛计。

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

由邏輯運算符和運算對象組成的表達式稱為邏輯表達式。邏輯運算的對象可以是C語言中任意合法的表達式照筑。

如果表達式中使用了邏輯運算符吹截,那么該表達式的計算結(jié)果取決于其運算對象。邏輯表達式的運算結(jié)果或者為1(真)凝危,或者為0(假)波俄。

當a和b為任意合法表達式時,邏輯運算規(guī)則如下表:

表達式 計算結(jié)果
a&&b 當且僅當a與b都為真時蛾默,表達式為真(1)懦铺;否則表達式為假(0)。
a||b a和b有一個為真支鸡,表達式為真(1)冬念;a和b都為假趁窃,表達式為假(0)。
!a 如果a為真急前,表達式為真(0)醒陆;如果a為假,表達式為假(1)裆针。

if語句和用if語句構(gòu)成的選擇結(jié)構(gòu)

if語句

if語句的基本格式是刨摩,對表達式求職并根據(jù)求值結(jié)果命令程序執(zhí)行特定內(nèi)容。if語句的格式如下:

if (表達式)
    語句

如果表達式為真世吨,就執(zhí)行語句澡刹;如果表達式為假,則不執(zhí)行語句耘婚“战剑可以認為,是否執(zhí)行語句取決于表達式的結(jié)果边篮。

通過使用復合語句或塊己莺,if語句可以控制多條語句的執(zhí)行。

else子句

if語句可以包含else子句戈轿,方法如下:

if (表達式)
    語句1凌受;
else
    語句2;

如果表達式計算結(jié)果為真思杯,則執(zhí)行語句1胜蛉。如果表達式計算結(jié)果為假,控制將轉(zhuǎn)到else語句色乾,執(zhí)行語句2誊册。語句1和語句2都可以是復合語句或塊。

關(guān)于if語句的說明

  1. if后面圓括號中的表達式暖璧,可以是任意合法的C語言表達式(如:邏輯表達式案怯、關(guān)系表達式、算術(shù)表達式澎办、賦值表達式等)嘲碱,也可以是任意類型的數(shù)據(jù)(如:整型、實型局蚀、字符型麦锯、指針型等)。
  2. 無論是否有else子句琅绅,if子句中如果只有一條語句扶欣,則此語句后的分號不能省略。

嵌套的if語句

內(nèi)嵌的if語句既可以嵌套在if子句中,也可以嵌套在else子句中料祠。

在if子句中嵌套具有else子句的if語句

if (表達式1)
    if (表達式2)
        語句1
    else
        語句2
else
    語句3

當表達式1的值非0時骆捧,執(zhí)行內(nèi)嵌的if-else語句;當表達式1的值為0時术陶,執(zhí)行語句3凑懂。

在if子句中嵌套不含else子句的if語句

if (表達式1)
{
    if (表達式2)
        語句1
}
else
    語句2

注意:在if子句中的一對花括號不可缺少。因為C語言的語法規(guī)定:else子句總是與前面最近的不帶else子句的if相結(jié)合梧宫,與書寫格式無關(guān)。

在else子句中嵌套if語句

語句形式1:內(nèi)嵌的if語句帶有else子句:

if (表達式1)
    語句1
else if (表達式2)
    語句2
else
    語句3

語句形式2:內(nèi)嵌的if語句不帶else子句:

if (表達式1)
    語句1
else if (表達式2)
    語句2

條件表達式構(gòu)成的選擇結(jié)構(gòu)

條件運算符

條件運算符由兩個運算符組成摆碉,它們是"?"和“:”塘匣。條件運算符是C語言唯一的三元運算符,這意味著需要3個運算對象巷帝。

由條件運算符構(gòu)成的條件表達式

條件表達式的形式如下:

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

條件表達式的運算功能

當表達式1的值為非0時,求出表達式2的值楞泼,此時表達式2的值就是整個條件表達式的值驰徊。

當表達式1的值為0時,則求表達式3的值堕阔,這時表達式3的值為整個條件表達式的值棍厂。

switch語句以及用switch語句和break語句構(gòu)成的選擇結(jié)構(gòu)

switch語句

switch語句形式如下:

switch (表達式)
{
    case 常量表達式1:
        語句1
    case 常量表達式2:
        語句2
    …
    case 常量表達式n:
        語句n
    default:
        語句n+1
}

說明:

  1. switch是C語言的關(guān)鍵字,switch后用花括號括起來的部分稱為switch語句體超陆。
  2. 緊跟在switch后一對圓括號中的表達式可以是整型表達式及字符型表達式等牺弹。
  3. case也是關(guān)鍵字,與其后面的常量表達式合稱case語句標號时呀。常量表達式的類型必須與switch后圓括號中的表達式類型相同张漂,各case語句標號的值應(yīng)該互不相同。
  4. default也是關(guān)鍵字谨娜,起標號的作用航攒,代表所有case標號之外的那些標號。default標號可以出現(xiàn)在語句體中任何標號位置上趴梢。在switch語句體中也可以沒有default標號漠畜。
  5. case語句標號后的語句1,語句2等垢油,可以是一條語句盆驹,也可以是若干條語句。
  6. 必要時滩愁,case語句標號后的語句可以省略不寫躯喇。
  7. 在關(guān)鍵字case和常量表達式之間一定要有空格。

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

switch語句對表達式求值,并與每個case標簽后的常量表達式作比較廉丽,會出現(xiàn)下面的情況之一:

  • 如果找到與表達式匹配的常量表達式倦微,程序?qū)⑻D(zhuǎn)執(zhí)行case標簽后面的語句。
  • 如果沒有匹配的常量表達式正压,程序?qū)⑻D(zhuǎn)執(zhí)行default標簽(可選)后面的語句欣福。
  • 如果沒有匹配的常量表達式,也沒有default標簽焦履,程序?qū)⑻^switch語句體拓劝,去執(zhí)行switch語句之后的語句。

程序舉例:

#include <stdio.h>

int main ( void )
{
int reply;
puts ("Enter a number between 1 and 5:");
scanf ("%d", &reply);
switch (reply)
{
    case 0:
        break;
    case 1:
        puts("You entered 1.");
    case 2:
        puts("You entered 2.");
    case 3:
        puts("You entered 3.");
    case 4:
        puts("You entered 4.");
    case 5:
        puts("You entered 5.");
    default:
        puts("Out of range, try again.");
}
return 0;
}

假設(shè)輸入2嘉裤,那么輸出為:

Enter a number between 1 and 5:
2
You entered 2.
You entered 3.
You entered 4.
You entered 5.
Out of range, try again.

看上去雖然switch語句找到了第一個匹配的常量表達式郑临,然后卻執(zhí)行了后面的所有語句(并非只執(zhí)行匹配的語句)。情況確實如此屑宠,事實上厢洞,switch語句執(zhí)行了下面要講的goto語句來匹配常量表達式。為確保只執(zhí)行與匹配常量表達式相關(guān)的語句典奉,還需要包含break語句躺翻。

在switch語句體中使用break語句

berak為C語言關(guān)鍵字,berak語句又稱間斷語句卫玖」悖可以將break語句放在case標號之后的任何位置,通常是case之后的語句最后加上break語句骇笔。每當執(zhí)行到break語句時省店,立即跳出switch語句體。

利用break語句修改上面的程序:

#include <stdio.h>

int main ( void )
{
    int reply;
    puts ("Enter a number between 1 and 5:");
    scanf ("%d", &reply);
    switch (reply)
    {
        case 1:
        {
            puts("You entered 1.");
            break;
        }
        case 2:
        {
            puts("You entered 2.");
            break;
        }
        case 3:
        {
            puts("You entered 3.");
            break;
        }
        case 4:
        {
            puts("You entered 4.");
            break;
        }
        case 5:
        {
            puts("You entered 5.");
            break;
        }
        default:
        {
            puts("Out of range, try again.");
            break;
        }
    }
    return 0;
}

假設(shè)輸入2笨触,那么輸出為:

Enter a number between 1 and 5:
2
You entered 2.

語句標號和goto語句

語句標號

在C語言中懦傍,語句標號不必特意加以定義,標號可以是任意合法的標識符芦劣,當在標識符后面加一個冒號粗俱,如:flag1:、stop0:虚吟,該標識符就成了一個語句標號寸认。

注意:在C語言中,語句標號必須是標識符串慰,因此不能簡單地使用10:偏塞、15:等形式。標號可以和變量同名邦鲫。

在C語言中灸叼,可以在任何語句前加上語句標號神汹。例如:

stop: printf("End\n");

goto語句

goto語句稱為無條件轉(zhuǎn)向語句。程序執(zhí)行至goto語句時古今,將立即跳轉(zhuǎn)至goto語句指定的位置繼續(xù)執(zhí)行邻耕。

與if語句不同的是氨淌,該語句是無條件的,因為無論情況如何琼腔,程序執(zhí)行到goto語句都會進行跳轉(zhuǎn)富弦。

goto語句的一般形式如下:

goto 語句標號;

注意:該語句標號必須與goto語句在同一個函數(shù)內(nèi)盗蟆。

運算符優(yōu)先級歸納

注:表中同一行的運算符優(yōu)先級相同虫埂。

優(yōu)先級 運算符
1 ( )(函數(shù)運算符) [ ](數(shù)組運算符) ->
2 ! ~ ++ -- *(間接運算符) &(取址運算符) sizeof +(一元) -(一元)
3 *(乘法) / %
4 +(二元) -(二元)
5 >> <<
6 < <= > >=
7 == !=
8 &(按位與)
9 ^
10 \
11 &&
12 \
13 贷盲?:
14 = += -= *= /= &= ^= |= <<= >>=
15 ,
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市拟逮,隨后出現(xiàn)的幾起案子呈队,更是在濱河造成了極大的恐慌,老刑警劉巖唱歧,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異粒竖,居然都是意外死亡颅崩,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門蕊苗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沿后,“玉大人,你說我怎么就攤上這事朽砰〖夤觯” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵瞧柔,是天一觀的道長漆弄。 經(jīng)常有香客問我,道長造锅,這世上最難降的妖魔是什么撼唾? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮哥蔚,結(jié)果婚禮上倒谷,老公的妹妹穿的比我還像新娘。我一直安慰自己糙箍,他們只是感情好渤愁,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著深夯,像睡著了一般抖格。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天他挎,我揣著相機與錄音筝尾,去河邊找鬼。 笑死办桨,一個胖子當著我的面吹牛筹淫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播呢撞,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼殊霞!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起绷蹲,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎祝钢,沒想到半個月后比规,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拦英,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年灾常,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铃拇。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖锚贱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拧廊,我是刑警寧澤监徘,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站吧碾,受9級特大地震影響凰盔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜倦春,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一户敬、第九天 我趴在偏房一處隱蔽的房頂上張望落剪。 院中可真熱鬧,春花似錦尿庐、人聲如沸忠怖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凡泣。三九已至,卻和暖如春皮假,著一層夾襖步出監(jiān)牢的瞬間鞋拟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工惹资, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留贺纲,地道東北人。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓褪测,卻偏偏與公主長得像猴誊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子侮措,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容