目錄
一、引言
二、選擇結構
1,if語句
1.1,if...else...語句
1.2,多分支語句
1.3懸空else的問題
2,switch語句
2.1,switch
2.2,break
2.3,default
一、引言
? ? ? ?寫了幾個C語言代碼我發現C語言程序和我們做事一樣,按照順序做事,選擇做某事或者重復做某事。那我們繼續對C語言深入認知:
C語言是結構化的程序設計語言,這?的結構指的是順序結構、選擇結構、循環結構,C語言是能夠實 現這三種結構的,其實我們如果仔細分析,我們日常所見的事情都可以拆分為這三種結構或者這三種 結構的組合。
?順序結構:就如我們人做事一樣一樣的進行。
選擇結構:就是對多個分支選擇一個進行。用if、swich語句來實現。
循環語句:對同一件事反復進行。用for、while、do while語句來實現。
? ? ? ? 那接下來就讓我們了解這些結構:
二、選擇結構
*順序結構大家已經耳熟能詳了,C語言中也沒有對順序結構有特殊的語句所以不再做詳細敘述。
1,if語句
1.1,if...else...語句
if語句的語法表達式如下:
if (//表達式)
{//語句1
}
else//語句2
*若語句只為一句,大括號可以不加。
這個代碼執行的邏輯就是,表達式成立則執行語句1,反之則執行語句2。
那C語言怎么判斷表達式成立的呢?
在C語言中有一個特別的數0,0則代表假,非0則代表真。
舉一個例子方便大家理解:
輸出a和b中大的數字
if (a>b)
{printf("%d",a);
}
elseprintf("%d",b);
正如代碼上顯示的表達式為a>b,若成立則而1即為真,則打印a;若不成立則為0,即為假。則打印b,
1.2,多分支語句
? ? ?? 有細心的人就會發現只有if和else那只能分成兩種情況啊,那如果多種情況我們該如何編寫呢?其實大家不用擔心,C語言在設計的時候已經考慮到了這個問題,那就是在if..else...語句中,else可以與另外一個if語句連用,構成多重判斷。
舉個例子:
判斷整數的正負性
#include<srdio.h>int main()
{int num = 0;scanf("%d",&num);if(num > 0)printf("你輸入的數字為正數");else if(num < 0)printf("你輸入的數字為負數")elseprintf("你輸入的數字為0");return 0;
}
這個例子中就很好的利用到了else if,最后再加上一個else把沒有討論到的0也加上去。
*else if的使用其實就是構成了嵌套的if語句。
*if語句也可以在if語句中使用也屬于if語句的嵌套。
1.3懸空else的問題
? ? ? ?在寫代碼中常常會遇到else寫著寫著位置跑丟了,不知道跟誰匹配了。那接下來姜糖就跟大家聊一聊這個問題。
? ? ? ? 大家如果遇到有多個if和else,可以記住這樣的一條規則,else總是跟最接近的if匹配。那大家就來看看下面這個代碼:
#include <stdio.h>
int main()
{int a = 0;int b = 2;if(a == 1)if(b == 2)printf("hehe\n");elseprintf("haha\n");return 0;
}
?大家那想一想輸出結果是什么呢?
輸出結果為啥也沒有輸出,嘿嘿嘿,想到了嗎?
沒想到也沒有問題,接下來我們一起來分析一下:
? ? ? ?可能有些人會想else跟第一個if對齊的所以a=0不=1所以輸出haha。但我上面不是跟大家說過嗎,else總是跟最接近的if匹配所以else是和第二個if相匹配,而大家所認為的對齊和排版是不絕對這個的,大家可以試試你把代碼放一行也是可以運行的。排版只是方便程序員的理解。
比如我改一下這個代碼:
#include <stdio.h>
int main()
{int a = 0;int b = 2;if (a == 1)if (b == 2)printf("hehe\n");elseprintf("haha\n");return 0;
}
這樣子,大家是不是更好理解了。
? ? ? ? 或許有的人希望讓這個else與第一個if匹配那有什么辦法了。?豁,還真有辦法,數學中你想讓什么在一起計算加括號就行了,那我這邊也是不是可以加括號呢?是的,只不過加的是大括號。這樣我們就可以這樣修改這個代碼:
#include <stdio.h>
int main()
{int a = 0;int b = 2;if (a == 1){if (b == 2)printf("hehe\n");}else{printf("haha\n");}return 0;
}
只要帶上適當的大括號,代碼的邏輯就會更加的清晰,所以大家以后在寫代碼的時候要注意括號的使用,讓代碼的可讀性更高。
2,switch語句
2.1,switch
在C語言中的選擇結構中除了if語句外,C語言還提供了switch語句來實現分支結構。
switch 語句是?種特殊形式的if...else 結構,用于判斷條件有多個結果的情況。它把多重 的 else if 改成更易用、可讀性更好的形式。
代碼定義如下:
switch(條件語句)
{case 條件1: 語句1case 條件2: 語句2default: 語句3
}
?switch語言中是根據條件語句中不同的值,執行相對應的case分支。如果沒有對應的值則執行default分支。
注:
*switch中的條件語句必須是整形表達式
*case后的值,必須是整形常量表達式
那讓我來用switch來舉個例子:
輸入一個整數輸入?3之后的余數
#include <stdio.h>
int main()
{int n = 0;scanf("%d", &n);switch (n % 3){case 0:printf("整除,余數為0\n");break;case 1:printf("余數是1\n");break;case 2:printf("余數是2\n");break;}return 0;
}
以上的代碼有兩點值得我們注意:
1,case和后面的數字之間必須有空格。
2,每一個case語句中的代碼執行完之后,需加上break,才能跳出這個switch語句。
2.2,break
? ? ? ?細心的人已經發現了我在每一個case語句中的代碼執行完之后,加上了break,那如果不加會怎么樣呢?
#include <stdio.h>
int main()
{int n = 0;scanf("%d", &n);switch (n % 3){case 0:printf("整除,余數為0\n");case 1:printf("余數是1\n");case 2:printf("余數是2\n");}return 0;
}
我們發現10/3余數為1,結構程序還多打印了一行余數為2。
這是為什么呢?
原因是 switch 語句也是分?效果的,只有在 switch 語句中使? break 才能在跳出 switch 語 句,如果某?個 case 語句的后邊沒有 break 語句,代碼會繼續玩下執行,有可能執行其他 case 語句中的代碼,直到遇到 break 語句或者 switch 語句結束。就比如上面的代碼就執行了 case 2 中的語句。 所以在 switch 語句中 break 語句是非常重要的,能實現真正的分支效果。 當然, break 也不是每個 case 語句都得有,這就得根據實際情況來看了。
2.3,default
在選擇結構的多分支中我們常常不能把情況選完,但可以把他們全都歸為一類,所以就誕生了else,和default。他們的用法是相同的,只不過放在不同的語句中。
接下來我就舉一個例子讓大家更深刻的了解他們(用default):
#include<stdio.h>
int main()
{int day = 0;scanf("%d", &day);switch (day){case 1:case 2:case 3:case 4:case 5:printf("?作?\n");break;case 6:case 7:printf("休息?\n");break;default:printf("輸?錯誤\n");break;}}
在一個星期中只有七天,那輸入的超過7呢,那就提醒他輸入錯誤。
那default和case在switch語句中有順序要求嗎?答案是沒有的,只不過我們通常喜歡把default放在最后方便理解。