tft每日頭條

 > 生活

 > 學習c語言有什麼常見的問題

學習c語言有什麼常見的問題

生活 更新时间:2024-07-19 19:18:46

上一篇講運算符中,學習了關系運算符和邏輯運算符,其中都有談及程序語言中非常重要的結構之一,判斷結構。本篇文章就來講一講判斷結構。

學習c語言有什麼常見的問題(從零開始學習C語言判斷結構)1

計算機語言的運行是按照順序結構執行的,也就是一條路走到黑。就好比一些遊戲,它是有一條主線的,但是結局是多樣性的,有HE(Happy Ending,完美結局),也有BE(Bad Ending,悲劇結局)。

至于走向是HE,還是BE,取決于你在遊戲中的行為。而這些行為就是判斷條件,如果符合條件,那麼就執行HE,否則就執行BE。

由此可知,判斷結構需要具備兩個内容:判斷條件和判斷結果。

那麼程序結構有哪些類型?

三元運算符

首先,先說一個之前學過的一個運算符,三元運算符。它也是屬于一種判斷結構。

和其他判斷結構不同的是,它隻能表示兩種結果,要麼是,要麼不是。

來回憶一下三元運算符的格式:

int a = 3 > 4 ? 1 : 0;

3 > 4 是判斷條件;1 或者 0 是判斷結果。

三元運算符的結果除了冒号前後的兩個數據,就不會有第三種結果了,這就存在了局限性。如果我有多個條件,不同的條件所執行的結果也不同,顯然三元運算符是不能滿足的。

比如還是去網吧的例子,首先得年滿十八歲,且錢帶足了,才能進去玩耍;如果滿十八歲,但是錢不夠,會被提醒帶夠錢,然後請出去;如果錢帶夠了,沒滿十八歲,會被提醒未成年禁止進入,然後請出去。

而三元運算符隻有一個條件,兩個結果,顯然是無法完成這樣的案例。那麼,我們就需要知道另外的判斷結構,if-else 結構和 switch 結構。

if-else 結構

在我當前的認知裡面,if-else 結構是使用最多的循環結構。(很大的原因,是因為我先學了Python,而Python裡面是沒有switch結構的。)

在 if-else 結構中,最少都有兩種結果。其中 if 是表示如果的意思,else 是表示否則的意思。

再說一個可能會讓大家産生誤解的話:在 if-else 結構中,if 是可以單獨出現的,else 是可有可無的,但是必須要和 if 配對。

先來看一個有 if 和 else 的結構:

if(1 > 3){ printf("1比3大"); } else{ printf("3比1大"); }

其中 if 後面是要跟上條件的,而 else 後面是不用跟條件的。如果 if 後面的條件不滿足,那麼自動會找配對的 else,然後執行裡面的命令。如果沒有 else,那就直接跳過,運行下面的代碼。

那麼問題來了,if 和 else 各自執行出一個結果,那麼如果 if 獨立出來,不就隻有一個結果。作者你是怎麼敢說至少兩個結果呢?

不!if 單獨出現,雖然隻有一個條件,執行的部分也隻有一個,但是它的結果是兩個的。一個是滿足條件,執行出的有結果;另一種是不滿足條件,不執行出的沒有結果。有和沒有,就是兩種結果。

到這裡,我們就知道了無論是隻有一個 if,還是 if-else 成對出現,結果都會是兩個。但現在,我想要三個結果,應該怎麼做呢?

if-else 之間還有一個判斷方式,叫做否則如果,寫作 else if。這個判斷方式在 if-else 結構中也不是必須的,除非你有很多條件需要判斷,否則隻有一個判斷條件,就用不到 else if。

寫一個去網吧的例子。

int age = 21; double money = 35.00; if(age >= 18 && money >= 50.00){ printf("歡迎光臨!"); } else if(age < 18){ printf("小朋友,長大後才能進網吧!"); } else if(money < 50.00){ printf("不好意思,您的餘額已經不足!"); }

if 判斷後面的條件實際上是有 2 個,一個是判斷年齡,另一個判斷金錢。通過邏輯運算符,将兩個條件合并成一個布爾表達式。

&&,與運算符,兩個條件同時滿足時,該表達式的結果為真(true),就執行下面的内容。反之為假(false),跳過 if 包含的代碼塊(跟在條件後面的 {...} 裡面的内容)。

switch 結構

先來看一下 switch 結構語法:

switch(expression){ case constant1: statements1; break; case constant2: statements2; break; default: statements; }

認識一下語法中的每個單詞表示的含義:

1、switch:開關。即這個循環結構的開關,表示準備開始循環。

2、expression:表達式。這裡可以是一個變量、但類型必須是整形、枚舉類型或者class類型,其中class中必須要有單獨的一個函數将其轉換為整型或者枚舉類型。(目前就先記着,類型可以是short、int、long的整數,以及 char 的字母。)

3、case:案例。相當于 if 和 else if。

4、contant:常數。該部分内容是判斷的值,且必須和 expression 的類型必須是一緻的。如果是整型,這個值就是1、2、3;如果是字符型,這個值就是a、b、c。這個值相當于是條件。

5、statements:語句。這裡是指滿足 case 後面的值和 expression 傳遞進來的值是一緻的,則要運行的内容。

6、break:終止。代碼塊中碰到 break 關鍵字則結束運行,剩餘的内容就不再運行了。

7、default:默認。和 else 的作用是一樣的,如果以上 case 後面的值都不滿足,則執行這一塊下面的代碼語句。理論上,default 放在哪裡都是可以的,但是需要注意的是,如果放在 case 上面,一定要加上 break 關鍵字。一般建議是放在代碼的最後。

來看一個 switch 結構的簡單案例:

int a; scanf("%d", &a); switch(a){ case 0: printf("第一關"); case 1: printf("第二關"); break; default: printf("結束遊戲!"); }

當輸入 0 給 a,這段代碼的運行結果是:第一關第二關。

這個結果顯然不是想要的。之所會出現這種情況,就因為少了一個 break。switch 不會像 if-else 結構一樣,滿足哪個條件,就執行哪部分内容,執行完就直接跳出。

switch 代碼塊的内容都是一個整體,如果沒有 break 關鍵字,就會發生穿透,也就是代碼會按順序執行下來。直到碰到了 break,或者全部運行完,才會跳出判斷。

嵌套循環

嵌套就是套娃行為,嵌套循環就是判斷裡面還有判斷。

例如:去網吧首先要對年齡進行判斷,符合規定才能允許進去。進去後還要根據你繳交的錢,判斷你是開的豪華包廂,可以玩高配電腦;還是在氛圍賊好的大堂,玩普通配置的電腦。

用 if-else 嵌套結構實現:

int age; double money; if(age >= 18){ if(money > 500.00){ print("貴賓一位,豪華包廂安排起來!"); } else{ printf("顧客一名,随便找個機子玩玩!"); } } else{ printf("小朋友,長大後才能進來的!"); }

switch 結構一般是對幾個常量進行判斷的。就比如我們去ATM取錢,在登錄後會讓我們選擇查詢餘額、存取款、轉賬交易等行為。我們會根據系統給出的提示按下相應的數字進入界面操作。

比如存取款是按下 2 進入相應界面,之後又有幾個選擇,按 1 選擇存錢,按 2 選擇取錢,按 0 退出。

用 switch 嵌套結構實現:

int a; int b; switch(a){ case 1: printf("查詢餘額"); break case 2: printf("存取款"); switch(b){ case 0: printf("退出"); break; case 1: printf("存錢"); break; case 2: printf("取錢"); break; } break; case 3: printf("轉賬交易"); break; }

一般情況下,建議盡可能少使用嵌套循環,迫不得已要使用嵌套,三次就差不多了。如果嵌套了太多,會導緻代碼的可讀性急劇下降,且後期的維護就變得非常困難。

最後

關于判斷結構的介紹和使用就到這裡結束了,下一篇文章我們講另外一個重要的結構——循環結構。對文中有疑問或者出現錯誤的地方,歡迎大家在評論區指正。

如果您覺得文章還不錯的話,點贊、分享支持一下呗!

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved