- C/C++實踐進階之道:寫給程序員看的編程書
- 陳黎娟
- 1303字
- 2020-06-29 11:37:41
4-3 選擇結構
選擇結構主要是由if和switch來控制的,單純的if為單項選擇結構,switch為多項選擇結構。當if與else搭配使用時,也可以實現多項選擇的效果。
4-3-1 if語句
if語句是判斷語句,用于判斷某個條件是否成立,然后根據條件的值有選擇地執行相應的語句。
1.if語句基本形式
if語句的語法格式如下。
if(條件表達式)
語句
或:
if(條件表達式)
{語句序列;}
參數說明如下:
● 條件表達式應該使用括號括起來。
● 如果條件表達式進行一次測試,且測試為真,則執行后面的語句。
● 當語句序列只包含一條語句時,該語句序列的花括號可以省略。
【示例4-2】if語句的基本用法(輸入數值,如果大于0,輸出“正數”)。

分析:當用戶輸入的數值大于0時,程序將輸出“正數”到屏幕上;如果輸入的數值不大于0(即等于或者小于0)時,則不進行任何處理。
2.if-else if形式
if-else if是多分支的選擇結構,if和else結合使用時的語法格式如下。

如果“條件表達式1”的判斷結果為真,則執行語句序列1;如果“條件表達式1”的判斷結果為假,繼續往下執行“條件表達式2”,如果為真,則執行語句序列2;如果為假,則繼續往下執行,依此類推。if-else語句流程圖如圖4-3所示。

圖4-3 if-else語句流程圖
【示例4-3】利用if-else語句對數值進行正負的判斷。
代碼如下。

分析:運行結果將隨著輸入的數值不同而不同。當輸入的數值為正數時,程序的輸出結果為“正數”;當輸入的數值為負數或0時,程序的輸出結果為“非正數”。
4-3-2 switch語句
switch語句是多分支的選擇語句,它和嵌套的if語句的功能類似,但是用switch語句更加直觀。
switch語句的語法格式如下:

參數說明如下。
● default語句是默認的。
● switch后面括號中的表達式只能是整型、字符型或枚舉型表達式。
● 在各個分支中加break語句可以起到退出switch語句的作用,否則將會遍歷每一個分支。
● case語句起標號的作用。標號不能重名。
● 可以讓多個case語句共用一組語句序列。
● 各個case(包括default)語句的出現次序可以是任意的。
● 每個case語句中不必用花括號({}),而整體的switch結構一定要寫一對{}。
● switch結構也可以嵌套。
switch語句流程圖如圖4-4所示。

圖4-4 switch語句流程圖
【示例4-4】利用switch判斷用戶輸入的日期是星期幾。
代碼如下:

程序的運行結果如下。

分析:這個例子中很明顯,程序不符合最原始的設計要求,原因是什么呢?這是switch語句的一個特點。在switch語句中,“case常量表達式”相當于一個語句標號,表達式的值和某標號相等則轉向該標號,在執行完該標號的語句后不會跳出整個switch語句,而是會繼續執行后面的case語句。為避免這種情況,C++繼承了C語言中的break語句,專用于跳出switch語句。將以上的程序稍加修改即可。
【示例4-5】判斷輸入的日期是星期幾(使用break語句)
代碼如下。

程序的運行結果如下。
Wednesday
分析:上面的程序中,當每個case語句后加上break后,程序的結果就達到了要求。在switch的使用中,一定需要注意與break的搭配使用。
switch語句和if語句都允許程序從選項中進行選擇。相比之下,if else更為通用。if else可以處理取值范圍。
【示例4-6】利用if語句根據成績范圍給出等級。
代碼如下:

然而,switch不能處理取值范圍,switch只能對確定的值進行條件測試。switch語句中的每一個case標簽都是單獨的值。而且這個值必須是整數或者char,因此switch無法處理浮點測試。另外case標簽值必須是常量。如果是多個整數或者char的分支,使用switch比較簡明和優雅。
- Getting Started with Citrix XenApp? 7.6
- Java入門經典(第6版)
- CentOS 7 Server Deployment Cookbook
- Interactive Applications Using Matplotlib
- JavaScript動態網頁開發詳解
- 新一代SDN:VMware NSX 網絡原理與實踐
- Java高并發核心編程(卷1):NIO、Netty、Redis、ZooKeeper
- 智能手機APP UI設計與應用任務教程
- C專家編程
- 后臺開發:核心技術與應用實踐
- Visual Basic 程序設計實踐教程
- 程序員的英語
- 現代JavaScript編程:經典范例與實踐技巧
- Learning QGIS(Second Edition)
- 前端Serverless:面向全棧的無服務器架構實戰