新聞中心
- if語(yǔ)句
- 條件運(yùn)算符? ? ?? :
- switch語(yǔ)句
- 單分支:if(表達(dá)式)語(yǔ)句
- 雙分支:if(表達(dá)式) 語(yǔ)句1? ?else 語(yǔ)句2
- 多分支(?if else嵌套語(yǔ)句?,階梯式的if-else-if語(yǔ)句)
- 若表達(dá)式值為True(或非0),則執(zhí)行表達(dá)式后面的語(yǔ)句,執(zhí)行完該語(yǔ)句后繼續(xù)執(zhí)行if語(yǔ)句后的語(yǔ)句。
- 若表達(dá)式值為0,則不執(zhí)行表達(dá)式后面的語(yǔ)句而直接執(zhí)行if 語(yǔ)句后的語(yǔ)句。
if語(yǔ)句中的表達(dá)式可以是關(guān)系表達(dá)式、邏輯表達(dá)式,甚至還可以是數(shù)值表達(dá)式。在C語(yǔ)言中,表達(dá)式的值為非0時(shí),系統(tǒng)均按真值處理。
“表達(dá)式”后面的語(yǔ)句可以是復(fù)合語(yǔ)句。復(fù)合語(yǔ)句是指用一對(duì)花括號(hào)}包含起來(lái)的若干條語(yǔ)句。被當(dāng)作一條
語(yǔ)句來(lái)處理。
ps:復(fù)合語(yǔ)句
1. 在程序中應(yīng)把復(fù)合語(yǔ)句看成是單條語(yǔ)句,而不是多條語(yǔ)句;
2.復(fù)合語(yǔ)句內(nèi)的各條語(yǔ)句必須是以“;”結(jié)尾,最后一條語(yǔ)句的結(jié)尾也必須有分號(hào)“;”
3.復(fù)合語(yǔ)句還可以包含復(fù)合語(yǔ)句,即復(fù)合語(yǔ)句允許嵌套,但必須保證嵌套是完整的,不允許交叉嵌套。
例1:輸入任意三個(gè)整數(shù)a、b、c,求三個(gè)數(shù)中的大值。
思路:擂臺(tái)法
首先取一個(gè)數(shù)預(yù)置為max(大值),然后再用max依次與其余的數(shù)逐個(gè)比較,如果發(fā)現(xiàn)有比max大的,就用它給max重新賦值,比較完所有的數(shù)后,max中的數(shù)就是大值。
代碼如下:
#include
void main()
{
int a,b,c,max;
printf("請(qǐng)輸入三個(gè)整數(shù)a,b,c:");
scanf("%d%d%d",&a,&b,&c);
max=a;
if(max max=b;
if(max
printf("%d",max);
}
例2:輸入3個(gè)數(shù)a,b,c,要求按由小到大的順序輸出這3個(gè)數(shù)。
分析:對(duì)于3個(gè)數(shù),有6種可能:
a
若a>b,則交換a,b,此時(shí)a是兩者中較小的。
若a>c,則交換a,c,此時(shí)a是兩者中較小的。
經(jīng)過以上兩步,得出a中存放的是三者中最小的。
- 若b>c,則交換b,c,此時(shí)b是兩者中較小的。
經(jīng)過這一步得出b是三者中,次小的。
綜合以上三步,得出結(jié)果a
代碼如下:
#include
關(guān)于“單分支if語(yǔ)句”的常見錯(cuò)誤:
void main()
{
int a,b,c,t;
printf("請(qǐng)輸入三個(gè)整數(shù)a,b,c:");
scanf("%d%d%d",&a,&b,&c);
if(a>b)
{t=a;a=b;b=t;}
if(a>c)
{t=a;a=c;c=t;}
if(b>c)
{t=b;b=c;c=t;}
printf("%d%2d%2d",a,b,c);
}錯(cuò)誤1:關(guān)于分號(hào)的錯(cuò)誤
剛接觸if語(yǔ)句,不少初學(xué)者會(huì)在“if(表達(dá)式)”后面加分號(hào),由于一個(gè)單獨(dú)的分號(hào)屬于一條空語(yǔ)句,會(huì)被if結(jié)合,造成本來(lái)應(yīng)屬于if的語(yǔ)句體不能被if結(jié)合。
錯(cuò)誤2:關(guān)于復(fù)合語(yǔ)句的錯(cuò)誤
當(dāng)if的語(yǔ)句體有多條語(yǔ)句時(shí),沒有用花括號(hào)括起來(lái),引起邏輯錯(cuò)誤。
2.雙分支結(jié)構(gòu):if .....…elseif(表達(dá)式)
<語(yǔ)句塊1>
else
<語(yǔ)句塊2>else語(yǔ)句本身不能單獨(dú)存在,必須與if配對(duì)使用。
- 如果表達(dá)式為真,執(zhí)行 if 后面的語(yǔ)句塊1;
- 如果表達(dá)式為假,則執(zhí)行else 后面的語(yǔ)句塊2。
if...else結(jié)構(gòu)中的語(yǔ)句塊1與語(yǔ)句塊2都可以是復(fù)合語(yǔ)句。
在if...else結(jié)構(gòu)中,語(yǔ)句塊1與語(yǔ)句塊2都可以是空語(yǔ)句。
應(yīng)用樣例:例1:判斷給出的一個(gè)三位整數(shù)是不是“回?cái)?shù)”。
回?cái)?shù):所謂“回?cái)?shù)”是指一個(gè)數(shù)正著讀和反著讀都一樣。例如,121是回?cái)?shù),123則不是。
思路:我們當(dāng)然可以定義一個(gè)變量來(lái)存放倒過來(lái)的數(shù),但由于題目只要求是三位數(shù),那么只需個(gè)位和百位相同。
代碼如下:
#include
關(guān)于“雙分支if語(yǔ)句”的常見錯(cuò)誤:
#include
void main()
{
int a;
printf("請(qǐng)輸入一個(gè)三位數(shù):");
scanf("%d",&a);
if(a/100==a%10)
printf("是回?cái)?shù)");
else
printf("不是回?cái)?shù)");
}錯(cuò)誤1:關(guān)于分號(hào)的錯(cuò)誤
else不能單獨(dú)出現(xiàn)? ? ? ? ? ? ? ? ? ? ? ? ?max=b,一定執(zhí)行
錯(cuò)誤2:關(guān)于花括號(hào)的錯(cuò)誤
else不能單獨(dú)出現(xiàn)? ? ? ? ? ? ? ? ? ? ? ?printf語(yǔ)句一定執(zhí)行
錯(cuò)誤3:關(guān)于表達(dá)式的錯(cuò)誤
else本身就是條件,后面不再有表達(dá)式
3.嵌套if語(yǔ)句嵌套 if 語(yǔ)句就是將整個(gè) if 塊插入另一個(gè)if塊(else塊)中。
- else總是與它前面最近的未配對(duì)的if配對(duì)使用。
- 可通過增加花括號(hào){}來(lái)確定配對(duì)關(guān)系。
例:以下這個(gè)else部分屬于哪個(gè)if。
if(x>0)
if (y>1)? ? ?
z=1;
else
?z=2;初學(xué)時(shí)容易將與else對(duì)齊的if默認(rèn)為是一對(duì),而事實(shí)else必須和前面最近的未配對(duì)的if配對(duì)。
應(yīng)用樣例:例1:求一元二次方程ax*2+bx+c=0的根。
思路:
(1)a等于0,方程只有一個(gè)實(shí)根
(2)a不等于0,又分為3種情況:
(1)判別式b*2-4ac等于0,方程有兩個(gè)相等的實(shí)根;
(2)判別式b*2-4ac大于0,方程有兩個(gè)不等的實(shí)根;
(3)判別式b*2-4ac小于0,方程無(wú)實(shí)根:
代碼如下:
#include
4.多分支if語(yǔ)句
#include
void main()
{
int a,b,c,x1,x2;
printf("請(qǐng)輸入此一元二次方程:");
scanf("%dx*2+%dx+%d",&a,&b,&c);
if(a==0)
printf("有一個(gè)實(shí)根,且為%d",-c/b);
else
{
x1=(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(-b-sqrt(b*b-4*a*c))/(2*a);
if(b*b-4*a*c==0)
printf("有兩個(gè)相等的實(shí)根x1=x2=%d",x1);
else
{
if(b*b-4*a*c>0)
printf("有兩個(gè)不相等的實(shí)根x1=%d,x2=%d",x1,x2);
else
printf("無(wú)實(shí)根");
}
}
}多分支if語(yǔ)句是嵌套if語(yǔ)句的另一種形式,這種形式也稱為階梯式 if-else-if 。
if(表達(dá)式1)
? 語(yǔ)句組1;
else if(表達(dá)式2)
? 語(yǔ)句組2;
else if(表達(dá)式3)
? 語(yǔ)句組3;
… …
else
? 語(yǔ)句組n;流程圖:
應(yīng)用樣例:
例1:通過輸入年級(jí),得出你所處學(xué)段。
1~6年級(jí)? ? ?小學(xué)
7~9年級(jí)? ? ?初中
10~12年級(jí)? 高中
13~16年級(jí)? ? 大學(xué)
代碼如下:
#include
二.條件表達(dá)式
#include
void main()
{
int a;
printf("請(qǐng)輸入你的年級(jí)::");
scanf("%d",&a);
if(1<=a&&a<=6)
printf("小學(xué)");
else if(7<=a&&a<=9)
printf("初中");
else if(10<=a&&a<=12)
printf("高中");
else if(13<=a&&a<=16)
printf("大學(xué)");
}主要解決兩個(gè)分支為同一個(gè)變量賦值的問題,可使程序簡(jiǎn)潔。
條件表達(dá)式的一般形式為:表達(dá)式1?表達(dá)式2:表達(dá)式3
- 先求出表達(dá)式1的值,若非0(真),則求出表達(dá)式2的值就是整個(gè)條件表達(dá)式的值。
- 否則,求出表達(dá)式3的值就是整個(gè)條件表達(dá)式的值。
流程圖:
樣例:
二者等價(jià),且更加簡(jiǎn)潔。
ps:
三.switch語(yǔ)句
- 條件運(yùn)算符優(yōu)先級(jí)僅高于逗號(hào)運(yùn)算符和賦值運(yùn)算符。
- 條件運(yùn)算符的優(yōu)先級(jí)比關(guān)系運(yùn)算符與算術(shù)運(yùn)算符都要低。
- 條件運(yùn)算符的結(jié)合方向?yàn)椤皬挠业阶蟆薄?/li>
switch-case語(yǔ)句是多路判斷語(yǔ)句,計(jì)算條件表達(dá)式并對(duì)照多個(gè)常數(shù)值進(jìn)行檢查。
用法:
- 各個(gè)case 和default出現(xiàn)的次序不影響執(zhí)行結(jié)果。
- 每個(gè)case語(yǔ)句后一般情況下應(yīng)有一個(gè)break語(yǔ)句,用于退出swith結(jié)構(gòu)。
- case后面的語(yǔ)句中如果沒有break語(yǔ)句,則執(zhí)行完本case后的語(yǔ)句會(huì)接著執(zhí)行下面的case 。
- 多個(gè)case可共用一組語(yǔ)句。
- 每?jī)蓚€(gè) case 標(biāo)簽之間的語(yǔ)句數(shù)不限,允許有多個(gè)語(yǔ)句,可以不用{ }括起來(lái)。
通常情況下,每個(gè)case子句后都會(huì)有一個(gè)break語(yǔ)句;如果case子句中沒有break語(yǔ)句,則會(huì)在執(zhí)行完匹配的case子句后,繼續(xù)向下執(zhí)行后面的case子句,直至switch語(yǔ)句結(jié)束。
例如輸入的m為1,在此程序中,它在執(zhí)行完case 1后會(huì)繼續(xù)執(zhí)行case 2,case 3,直到遇到break,才會(huì)終止。
應(yīng)用樣例:例1:要求用戶輸入一個(gè)小寫字母并檢查它是否為元音字母。
代碼如下:
#include
四.多重if語(yǔ)句和switch 語(yǔ)句的比較
#include
void main()
{
char a;
printf("請(qǐng)輸入一個(gè)小寫字母:");
scanf("%c",&a);
switch(a)
{
case 'a': printf("是元音字母");break;
case 'o': printf("是元音字母");break;
case 'e': printf("是元音字母");break;
case 'i': printf("是元音字母");break;
case 'u': printf("是元音字母");break;
default:? printf("不是元音字母");
}
}
- 多重if語(yǔ)句和switch語(yǔ)句都可以用來(lái)實(shí)現(xiàn)多路分支。
- switch語(yǔ)句一般只能實(shí)現(xiàn)等值的比較,多重if語(yǔ)句可以處理范圍,某些范圍問題也可以通過將范圍通過某些方法轉(zhuǎn)化為確定值從而通過switch來(lái)實(shí)現(xiàn),而有些問題只能使用多重if語(yǔ)句來(lái)實(shí)現(xiàn),例如要判斷一個(gè)值是否處在某個(gè)區(qū)間的情況。
例1:要求按照百分制考試分?jǐn)?shù)輸出等級(jí)。分段原則如下:
90~100 為A級(jí)
80~89 為B級(jí)
70~79 為C級(jí)
60~69 為D級(jí)
其它為E級(jí)
1.用多分支if語(yǔ)句實(shí)現(xiàn)
利用多分支if的特點(diǎn),只要判斷出一個(gè)真值就不再執(zhí)行下面的判斷。那么其范圍的右端,由上一個(gè)判斷已經(jīng)確定,完全可以不寫。
代碼如下:
#include
void main()
{
int a;
printf("請(qǐng)輸入你的分?jǐn)?shù)a:");
scanf("%d",&a);
if(a<0||a>100)
printf("輸入分?jǐn)?shù)錯(cuò)誤");
else if(a>=90)
printf("A");
else if(a>=80)
printf("B");
else if(a>=70)
printf("C");
else if(a>=60)
printf("D");
else
printf("E");
}當(dāng)然對(duì)于此題而言,就算在每個(gè)括號(hào)內(nèi)加上每個(gè)的范圍區(qū)間,也不能說是多此一舉。這樣寫倒還可以顯得跟加直觀一些。
代碼如下:
#include
void main()
{
int a;
printf("請(qǐng)輸入你的分?jǐn)?shù)a:");
scanf("%d",&a);
if(a>=90&&a<=100)
printf("A");
else if(a>=80&&a<90)
printf("B");
else if(a>=70&&a<80)
printf("C");
else if(a>=60&&a<70)
printf("D");
else
printf("E");
}像此種范圍左右都確定的寫法,將else if改為if,就變成多個(gè)單分支語(yǔ)句。由于篇幅不再贅述,可以自行復(fù)制后修改。會(huì)發(fā)現(xiàn)一樣可以實(shí)現(xiàn)程序運(yùn)行。其二者的區(qū)別在于,對(duì)于多分支if一旦判斷出一個(gè)真值,以下分支將不再判斷。而這種多個(gè)單分支if,互不影響,你出真值跟下一個(gè)無(wú)關(guān),故每個(gè)都會(huì)進(jìn)行判斷。
2.用switch-case語(yǔ)句實(shí)現(xiàn)
case后面只能帶一個(gè)常數(shù),似乎不能直接實(shí)現(xiàn),所以需要我們進(jìn)行轉(zhuǎn)換一下:
分析這些分?jǐn)?shù)段可發(fā)現(xiàn),分?jǐn)?shù)段的變化點(diǎn)都是10的整數(shù)倍,如果將分?jǐn)?shù)整除10,則可以轉(zhuǎn)化為整數(shù)。
為使用switch語(yǔ)句,必須將分?jǐn)?shù)段與等級(jí)的關(guān)系,轉(zhuǎn)換成某些整數(shù)與等級(jí)的關(guān)系。
代碼如下:#include
void main()
{
int a,b;
printf("請(qǐng)輸入你的分?jǐn)?shù)a:");
scanf("%d",&a);
b=a/10;
switch(b)
{
case 10:?
case 9:?? printf("A");break;
case 8:?? printf("B");break;
case 7:?? printf("C");break;
case 6:?? printf("D");break;
default:? printf("E");break;
}
}你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)站題目:C語(yǔ)言之選擇語(yǔ)句-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)路徑:http://www.dlmjj.cn/article/ppgjh.html