C語言之選擇分支語句詳解
1.if-else語句
1.1 例子與總結(jié)
例子:
①只有一個(gè)if
if (1 == a)
{
printf("yes\n");
}
②if-else語句
if (1 == a)
{
printf("yes\n");
}
else
{
printfr("no\n");
}
③if-else if-else if-else語句
printf("今天星期幾?\n");
int a = 0;
scanf("%d", &a);
if (1 == a)
{
printf("Monday\n");
}
else if (2 == a)
{
printf("Tuesday\n");
}
else if (3 == a)
{
printf("Wednesday\n");
}
else
{
printf("Other Day\n");
}
總結(jié):
if-else語句有三種形式。
①只有一個(gè)if,沒有對應(yīng)的else。(適用于只有一個(gè)判斷的語句)
初學(xué)者在學(xué)習(xí)if-else語句的時(shí)候,可以只用這個(gè)if解決大部分選擇分支語句題目。
如:寫一個(gè)程序,90-100為A,80-90為B,70-80為C,其他為D
#include <stdio.h>
int main()
{
float grade = 0;
scanf("%f", &grade);
if ( (grade >= 90) && (grade <= 100) )
{
printf("A\n");
}
if ( (grade >= 80) && (grade < 90) )
{
printf("B\n");
}
if ( (grade >= 70) && (grade < 80) )
{
printf("C\n");
}
if (grade < 70)
{
printf("D\n");
}
return 0;
}
反思:初學(xué)者寫這種題目的時(shí)候,剛開始建議先采用這種形式,等熟悉了可以用②和③。其實(shí)這種寫代碼的方式就和枚舉差不多。
②一個(gè)if,一個(gè)與之對應(yīng)的else。(適用于A或B的情況)
eg:根據(jù)硬幣的正反面,決定是否聽課。正面假定為1,即聽課。反面假定為0,即逃課。
#include <stdio.h>
int main()
{
int a = 1;
scanf("%d", &a);
if (1 == a)//1即為正面
{
printf("聽課\n");
}
else//只有正面與非正面(即反面)
{
printf("聽課\n");
}
return 0;
}
③if-n個(gè)else if-最后else(適用于至少三種情況的例子)
eg:以①中成績輸出為例子。
#include <stdio.h>
int main()
{
float grade = 0;
scanf("%f", &grade);
if ( (grade >= 90) && (grade <= 100) )
{
printf("A\n");
}
else if ( (grade >= 80) && (grade < 90) )
{
printf("B\n");
}
else if ( (grade >= 70) && (grade < 80) )
{
printf("C\n");
}
else
{
printf("D\n");
}
return 0;
}
1.2 if與else的配對問題
eg:
float grade = 0;
scanf("%f", &grade);
if ( (grade >= 90) && (grade <= 100) )
{
printf("A\n");
}
if (0 == grade)
printf("鴨蛋\n");
else
{
printf("正分\n");
}
親愛的讀者,請你判斷一下else與哪個(gè)if配對?
else配對規(guī)則是與最近的還未配對的if配對。
因此,例子中,if (0 == grade)和上面的if均沒有配對,else與最近的if (0 == grade)配對。
總結(jié):else與離它最近的還未配對的if配對,if同理。
1.3 if-else代碼編寫建議
①無論if-else后面執(zhí)行的語句是一個(gè)語句或者是一個(gè)語句塊,都建議打上大括號。
eg:
if ( (grade >= 90) && (grade <= 100) )
{
printf("A\n");
}
if (0 == grade)
{
printf("鴨蛋\n");
}
else
{
printf("正分\n");
}
②if中的括號表示判斷條件,如果出現(xiàn)數(shù)字,特別是等于0一類的,建議數(shù)字放左邊。
不太建議把數(shù)字放右邊,因?yàn)榉抛筮叴a很容易發(fā)現(xiàn)問題
if (0 == grade)
如果不小心寫成0 = grade,編譯器會報(bào)錯。
③出現(xiàn)多個(gè)if-else,甚至是if-else嵌套代碼,建議代碼最好有縮進(jìn)。因?yàn)槿绻e例,這個(gè)代碼寫起來較為麻煩,后期作者刷題將會補(bǔ)上。
1.4 其他需要注意的問題
①if括號內(nèi)的條件問題
這里需要注意,if-else內(nèi)的條件只有0與1,非0就是1.
eg:
if (i = -1)
if (i)//i=-1
if (0)
if (-1)
第一行是把-1賦值給i,非0,直接執(zhí)行if。
第二行為i,具體需要判斷i的大小,正如其下的兩行,第三行為0不執(zhí)行if,第四行為-1為真執(zhí)行if。
②if-else的相關(guān)語句都可以進(jìn)行嵌套。
③if-else if-else的知識點(diǎn)。
eg:
#include <stdio.h>
int main()
{
float grade = 0;
scanf("%f", &grade);
if ( (grade >= 90) && (grade <= 100) )
{
printf("A\n");
}
else if ( (grade >= 80) )
{
printf("B\n");
}
else if ( (grade >= 70) )
{
printf("C\n");
}
else
{
printf("D\n");
}
return 0;
}
else if中的條件其實(shí)是默認(rèn)是非上一行的if范圍或者if-else范圍的。
如例子中的代碼的第一個(gè)else if默認(rèn)grade < 90,第二個(gè)else if默認(rèn)grade < 80.
2. switch (case)語句
2.1例子和總結(jié)
這里,我依舊用成績和對應(yīng)等級寫了一個(gè)代碼。
#include <stdio.h>
int main()
{
float grade;
printf("Input integer number:");
scanf("%f", &grade);
int shiwei = (int) (grade / 10);
switch (shiwei)
{
case 10:
case 9:
printf("A\n");
break;
case 8:
printf("B\n");
break;
case 7:
printf("C\n");
break;
default:
printf("D\n");
break;
}
return 0;
}
分析:我注意到不同等級對應(yīng)的分?jǐn)?shù)對十位數(shù)是不一樣的,同時(shí)符合switch(整型表達(dá)式)和case 整型常量表達(dá)式的條件。
總結(jié):
switch (整型表達(dá)式/整型變量)
{
? ?case 常量整數(shù)/整型常量表達(dá)式:
? ?語句;/語句塊;
? break;
......
}
②switch語句執(zhí)行步驟及各個(gè)操作符表達(dá)含義
swich-選擇表達(dá)式的關(guān)鍵字
case:各種情況分支,同時(shí)也是語句執(zhí)行的起點(diǎn)
語句塊:執(zhí)行語句
break:跳出switch語句。
default:除case以外的情況均默認(rèn)為default,其他情況從這里開始。
eg:以2.1中的代碼作為例子進(jìn)行講解
一、假設(shè)grade為100,則shiwei=10,進(jìn)入switch語句,以case 10為起點(diǎn),開始執(zhí)行語句。case 10后面不是break也沒有語句塊,繼續(xù)執(zhí)行case 9,再執(zhí)行打印A的操作,接下來碰到break跳出switch語句。
二、假設(shè)輸入的位101,shiwei=11,不是case的情況,進(jìn)入default,打印D,再碰到break跳出。
2.2 switch語句其他知識點(diǎn)
①switch支持嵌套
②switch中的case和default無所謂順序。
③switch中括號為整型(無所謂常量變量),case必須為整型常量,如case 9+1也是可以的。
到此這篇關(guān)于C語言之選擇分支語句詳解的文章就介紹到這了,更多相關(guān)C語言選擇分支語句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++基于easyx圖形庫實(shí)現(xiàn)打磚塊游戲
這篇文章主要為大家詳細(xì)介紹了C++基于easyx圖形庫實(shí)現(xiàn)打磚塊游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
C語言中的strdup()函數(shù)和其與strcpy()函數(shù)的區(qū)別
這篇文章主要介紹了C語言中的strdup()函數(shù)和其與strcpy()函數(shù)的區(qū)別,同樣用于拷貝字符串的兩個(gè)函數(shù)的異同值得注意,需要的朋友可以參考下2015-08-08
C++11?nullptr實(shí)現(xiàn)初始化空指針
避免產(chǎn)生“野指針”最有效的方法,就是在定義指針的同時(shí)完成初始化操作,本文主要介紹了C++11?nullptr初始化空指針,感興趣的可以了解一下2022-01-01
C語言數(shù)據(jù)結(jié)構(gòu)之雙鏈表&循環(huán)鏈表&靜態(tài)鏈表詳解
這篇文章主要為大家詳細(xì)介紹了C語言數(shù)據(jù)結(jié)構(gòu)中雙鏈表&循環(huán)鏈表&靜態(tài)鏈表的原理與使用,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-09-09

