秘?小明博客主頁(yè):?? 敲鍵盤的小明 秘?
?關(guān)注小明了解更多知識(shí)??
前言
提示:本篇文章為C語(yǔ)言選擇語(yǔ)句的個(gè)人總結(jié),內(nèi)容如若有誤,請(qǐng)及時(shí)聯(lián)系我更正。
- 轉(zhuǎn)載請(qǐng)注明原創(chuàng),謝謝。
提示:以下是本篇文章正文內(nèi)容:
一、什么是選擇語(yǔ)句?
??假設(shè)你在水果攤購(gòu)買一斤的水果,攤主會(huì)根據(jù)你購(gòu)買的水果種類來(lái)計(jì)算價(jià)格。
行情:
?蘋果??
7
7
7元
/
/
/斤,葡萄??
8
8
8元
/
/
/斤,
?香蕉??
5
5
5元
/
/
/斤,草莓??
20
20
20元
/
/
/斤
在這個(gè)場(chǎng)景中,選擇語(yǔ)句就像攤主,根據(jù)你購(gòu)買的水果種類(不同的條件)來(lái)計(jì)算不同的價(jià)格(執(zhí)行不同的操作)。
二、if語(yǔ)句
注:C語(yǔ)言中:0表示假,非0表示真
1. 語(yǔ)句格式
??單分支
if(表達(dá)式)
{
語(yǔ)句;
}
過(guò)程: 先計(jì)算“條件”表達(dá)式的值,如果該值不等于 0 0 0 ,表達(dá)式值為真,執(zhí)行“語(yǔ)句”,否則表達(dá)式值為假,不執(zhí)行“語(yǔ)句”。
??雙分支
if(表達(dá)式)
{
語(yǔ)句1;
}
else
{
語(yǔ)句2;
}
過(guò)程: 先計(jì)算“條件”表達(dá)式的值,如果該值不等于 0 0 0 ,表達(dá)式為真,否則表達(dá)式為假:
??表達(dá)式為真時(shí),執(zhí)行“語(yǔ)句1”,表達(dá)式為假時(shí),執(zhí)行“語(yǔ)句2”。
??多分支
if(表達(dá)式1)
{
語(yǔ)句1;
}
else if(表達(dá)式2)
{
語(yǔ)句2;
}
else
{
語(yǔ)句3;
}
過(guò)程:
- 先計(jì)算表達(dá)式1的值,如果為真,則執(zhí)行“語(yǔ)句1”。
- 如果表達(dá)式1為假,則不執(zhí)行“語(yǔ)句1”,開始計(jì)算表達(dá)式2的值,如果為真,則執(zhí)行“語(yǔ)句2”。
- 如果表達(dá)式2也為假,則執(zhí)行“語(yǔ)句3”。
2. if語(yǔ)句的使用方法
??單分支
#include<stdio.h>
int main()
{
int m = 2;
if(m < 5)
{
printf("小于5\n");
}
return 0;
}
運(yùn)行結(jié)果:
過(guò)程: 我們將 2 2 2 賦值給 m m m ,在執(zhí)行選擇語(yǔ)句時(shí), 2 2 2 確實(shí)是小于 5 5 5 ,則用于判斷的表達(dá)式為真,則執(zhí)行了輸出語(yǔ)句printf在屏幕上打印了: 小于 5 5 5 。
??雙分支
#include<stdio.h>
int main()
{
int m = 6;
//int m = 4;
if (m < 5)
{
printf("小于5\n");
}
else
{
printf("大于5\n");
}
return 0;
}
運(yùn)行結(jié)果:
過(guò)程:
情況1: 同單分支一樣,小于 5 5 5 的情況就是在屏幕上打印 小于 5 5 5 。
情況2: 將 6 6 6 賦值給 m m m 時(shí),在執(zhí)行選擇語(yǔ)句時(shí), 6 6 6 是大于 5 5 5 的,用于判斷的表達(dá)式 ( 6 < 5 ) (6<5) (6<5) 為假,則不執(zhí)行 i f if if 中的語(yǔ)句,轉(zhuǎn)去執(zhí)行 e l s e else else 中的語(yǔ)句,在屏幕上打印了: 大于 5 5 5 。
??多分支
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >0)
{
if (age >= 18 && age <= 35)
{
printf("青年!\n");
}
else if (age < 18)
{
printf("未成年!\n");
}
else if (age > 35 && age <= 55)
{
printf("中年!\n");
}
else
{
printf("老年!\n");
}
}
else
{
printf("輸入年齡有誤!??!\n");
}
return 0;
}
運(yùn)行結(jié)果:
表達(dá)式不成立是不會(huì)進(jìn)入該 i f if if 語(yǔ)句中的!
過(guò)程:
表達(dá)式1: 輸入的值如果大于 0 0 0 ,則表達(dá)式1成立。
表達(dá)式2: 輸入的值如果大于 18 18 18 并且小于 35 35 35 則表達(dá)式2成立,在屏幕上打印 青年!
表達(dá)式3: 輸入的值如果小于 18 18 18 則表達(dá)式3成立,在屏幕上打印 未成年!
表達(dá)式4: 輸入的值如果大于 35 35 35 且小于 55 55 55 則表達(dá)式4成立,在屏幕上打印 中年! ,如果表達(dá)式2、3、4 都不成立說(shuō)明我們輸入的年齡大于 55 55 55 的,則在屏幕上打印 老年!如果輸入的值為負(fù)數(shù),則表達(dá)式1不成立,直接跳到最后一個(gè) e l s e else else 語(yǔ)句,在屏幕上打印輸入年齡有誤!。(畢竟年齡是不能為負(fù)數(shù)滴??,當(dāng)然也可以再加個(gè)判斷將年齡限制在百歲左右,不然輸入幾千歲幾萬(wàn)歲不就妥妥的老妖怪了嘛??????)
3. 懸空的else
了解了以上的知識(shí)后,如果遇到一些特殊的選擇語(yǔ)句,又會(huì)有什么變化嘞?
讓我們看一下這段代碼:【猜一下會(huì)在屏幕上打印什么?】
#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;
}
如果老夫所料不錯(cuò),施主的答案是 haha ,那么施主所想是否正確捏?
運(yùn)行結(jié)果:
是不是有點(diǎn)小意外?為什么會(huì)這樣呢?
C語(yǔ)言中, e l s e else else 與離它 最近的 i f if if 相匹配。
并且上面的代碼寫的不是很規(guī)范,那讓我們將代碼優(yōu)化一下:
#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;
}
改成這樣是不是就一目了然了,當(dāng)我們優(yōu)化以后可以看到在第一句判斷時(shí)就已經(jīng)不成立了,所以是不會(huì)進(jìn)入選擇語(yǔ)句內(nèi),直接到該語(yǔ)句的末尾。
總結(jié): i f if if 語(yǔ)句可以單獨(dú)使用,而 e l s e else else 必須和 i f if if 配對(duì)使用,并且 e l s e else else 是和它上面最近的未曾匹配的 i f if if 進(jìn)行配對(duì)。
4. 嵌套的if語(yǔ)句
i f if if 語(yǔ)句是可以嵌套使用的,那么該怎樣嵌套捏?
if(表達(dá)式1)
{
if(表達(dá)式2)
{
語(yǔ)句1;
}
else
{
語(yǔ)句2;
}
}
else
{
if(表達(dá)式3)
{
語(yǔ)句3;
}
else
{
語(yǔ)句4;
}
}
這種嵌套的 i f if if 語(yǔ)句運(yùn)行流程是:
??先判斷表達(dá)式1是否成立,如果 成立 ,則開始判斷表達(dá)式2,表達(dá)式2成立則執(zhí)行 語(yǔ)句1 ,表達(dá)式2不成立則執(zhí)行 語(yǔ)句2 ;
??如果表達(dá)式1 不成立 ,則開始判斷表達(dá)式3,成立則執(zhí)行 語(yǔ)句3 ,不成立則執(zhí)行 語(yǔ)句4 。
5. 例題
?練習(xí)一:
判斷一個(gè)數(shù)是奇數(shù)還是偶數(shù)
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
if (n % 2 == 1)
{
printf("%d是奇數(shù)!\n", n);
}
else
{
printf("%d是偶數(shù)!\n", n);
}
return 0;
}
?練習(xí)二:
判斷某一年是否為閏年
??閏年是指該年份能被 4 整除,且不能被 100 整除;或者能被 400 整除,那么該年份是閏年
#include <stdio.h>
int main()
{
int year = 0;
scanf("%d", &year);
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
printf("%d是閏年\n",year);
}
else
{
printf("%d不是閏年\n", year);
}
return 0;
}
?練習(xí)三:
判斷一個(gè)數(shù)的值的范圍
#include <stdio.h>
int main()
{
int num = 0;
printf("請(qǐng)輸入一個(gè)整數(shù):");
scanf("%d", &num);
if (num < 0)
{
printf("輸入的整數(shù)是負(fù)數(shù)。\n");
}
else if (num == 0)
{
printf("輸入的整數(shù)是 0。\n");
}
else if (num < 10)
{
printf("輸入的整數(shù)是小于 10 的整數(shù)。\n");
}
else if (num < 20)
{
printf("輸入的整數(shù)是大于等于 10 且小于 20 的整數(shù)。\n");
}
else
{
printf("輸入的整數(shù)是大于 20 的整數(shù)。\n");
}
return 0;
}
?練習(xí)四:
比較兩個(gè)數(shù)哪一個(gè)更大
#include <stdio.h>
int main()
{
int a, b;
printf("請(qǐng)輸入兩個(gè)數(shù):");
scanf("%d %d", &a, &b);
if (a != b)
{
if (a > b)
{
printf("%d > %d\n", a, b);
}
else
{
printf("%d < %d\n", a, b);
}
}
else
{
printf("%d = %d\n", a, b);
}
return 0;
}
三、switch語(yǔ)句
s w i t c h switch switch 也是一種分支結(jié)構(gòu),常常用于多分支的情況!若果 i f if if e l s e else else … i f if if e l s e else else…過(guò)多時(shí),可以選擇用 s w i t c h switch switch 語(yǔ)句。
1. 語(yǔ)句格式
switch(表達(dá)式)
{
case 常量表達(dá)式1: 語(yǔ)句1; break;
case 常量表達(dá)式2: 語(yǔ)句2; break;
······
case 常量表達(dá)式n: 語(yǔ)句n; break;
default: 語(yǔ)句 n+1;
}
- s w i t c h switch switch 表達(dá)式的值是 c a s e case case 后面的常量表達(dá)式的可能取值。
- s w i t c h switch switch 后面的表達(dá)式值的類型一般為 整型 或者 字符型 。
- c a s e case case 子句后的常量表達(dá)式必須為簡(jiǎn)單的 整型 或者 字符型常量 。
- 當(dāng)執(zhí)行完一個(gè)分支的執(zhí)行語(yǔ)句后,如果沒(méi)有遇到 b r e a k break break ,程序?qū)o(wú)條件的繼續(xù)執(zhí)行后面的所有分支語(yǔ)句,直到遇到 b r e a k break break 后,則退出 所在的 s w i t c h switch switch 語(yǔ)句。
- s w i t c h switch switch 語(yǔ)句也是可以 嵌套 使用的。
2. switch語(yǔ)句使用方法
由上面的第 4 4 4 點(diǎn)我們可以看到在沒(méi)有遇到 b r e a k break break 之前,程序會(huì)無(wú)條件繼續(xù)執(zhí)行,直到遇到 b r e a k break break 才會(huì)結(jié)束,那么我們用代碼來(lái)深刻體驗(yàn)一下:
#include <stdio.h>
int main()
{
int num = 2;
switch (num)
{
case 1:
printf("num 的值是 1\n");
printf("繼續(xù)執(zhí)行下面的 case 2 的代碼\n");
case 2:
printf("num 的值是 2\n");
printf("繼續(xù)執(zhí)行下面的 case 3 的代碼\n");
case 3:
printf("num 的值是 3\n");
printf("繼續(xù)執(zhí)行下面的 case 4的代碼\n");
case 4:
printf("num 的值是 4\n");
printf("繼續(xù)執(zhí)行下面的 case 5 的代碼\n");
case 5:
printf("num 的值是 5\n");
printf("繼續(xù)執(zhí)行下面的 case 6 的代碼\n");
break;
case 6:
printf("num 的值是 6\n");
default:
printf("未匹配到任何 case\n");
}
return 0;
}
運(yùn)行結(jié)果:
可以看出,當(dāng) n u m = 2 num=2 num=2 時(shí), s w i t c h switch switch 選擇語(yǔ)句會(huì)從 c a s e case case 2 2 2 執(zhí)行,但是在 c a s e case case 2 2 2 結(jié)束后并沒(méi)有遇到 b r e a k break break,所以將繼續(xù)執(zhí)行接下來(lái)的語(yǔ)句,直到在 c a s e case case 5 5 5 結(jié)束時(shí)遇到了 b r e a k break break,則跳出了所在的 s w i t c h switch switch 語(yǔ)句,而不再繼續(xù) c a s e case case 6 6 6 的語(yǔ)句。
3. break的妙用
在 C 語(yǔ)言中, s w i t c h switch switch 語(yǔ)句中的 b r e a k break break 作用是跳出 s w i t c h switch switch 語(yǔ)句,如果沒(méi)有遇到 b r e a k break break 語(yǔ)句,程序會(huì)繼續(xù)執(zhí)行下一個(gè) c a s e case case 標(biāo)簽后的語(yǔ)句。如果所有 c a s e case case 標(biāo)簽都沒(méi)有匹配到 b r e a k break break ,程序會(huì)執(zhí)行 d e f a u l t default default 標(biāo)簽后的語(yǔ)句。
所以加了 b r e a k break break 的 s w i t c h switch switch 語(yǔ)句會(huì)更加嚴(yán)謹(jǐn)。
例如:
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
printf("星期一!\n");
break;
case 2:
printf("星期二!\n");
break;
case 3:
printf("星期三!\n");
break;
case 4:
printf("星期四!\n");
break;
case 5:
printf("星期五!\n");
break;
case 6:
printf("星期六!\n");
break;
case 7:
printf("星期天!\n");
break;
}
return 0;
}
運(yùn)行結(jié)果:
上面這段代碼就很好的應(yīng)用了 b r e a k break break,當(dāng)我們輸入 1 1 1 ~ 7 7 7 之間的數(shù)時(shí),會(huì)在屏幕打印所對(duì)應(yīng)的星期,并且在打印完后直接跳出,不再繼續(xù)執(zhí)行下面的選擇。
4. 去掉部分break的switch語(yǔ)句
??我們已經(jīng)知道了沒(méi)有遇到 b r e a k break break,將繼續(xù)執(zhí)行后面的語(yǔ)句,直到遇到了 b r e a k break break,才跳出所在的 s w i t c h switch switch 語(yǔ)句。
??那么我們是不是也可以利用一下這個(gè)規(guī)定,來(lái)達(dá)到可以在一定程度上減少代碼量:
#include <stdio.h>
int main()
{
int day;
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;
}
return 0;
}
就像上面這段代碼一樣,既然周一到周五都是工作日,那么我們不論輸入的是1~5當(dāng)中的幾,都會(huì)周五的下面的【工作日!】后,通過(guò) b r e a k break break 跳出選擇語(yǔ)句。
例如: 當(dāng)我們輸入2時(shí),執(zhí)行語(yǔ)句是空的,則繼續(xù)往下執(zhí)行,3和4也是空的,直到在 c a s e case case 5 中的 p r i n t f printf printf 語(yǔ)句打?。?font color="green">工作日!,執(zhí)行完后遇到了 b r e a k break break ,跳出了選擇語(yǔ)句。
注:
??????default子句??????
??如果表達(dá)的值與所有的 c a s e case case 標(biāo)簽的值都不匹配,也就是所有的語(yǔ)句都被跳過(guò)了,程序并不會(huì)被終止,也不會(huì)報(bào)錯(cuò)。
??但是,你不想忽略不匹配所有 c a s e case case 標(biāo)簽的表達(dá)式的值,該怎么辦?
??當(dāng)switch表達(dá)式的值與 c a s e case case 分支的條件都不滿足時(shí),程序?qū)?zhí)行 d e f a u l t default default 子句。所以,每個(gè)switch語(yǔ)句中只能出現(xiàn)一條default子句,而且它可以出現(xiàn)在 s w i t c h switch switch 語(yǔ)句列表的任何位置,因?yàn)樗挥性谄渌? c a s e case case 語(yǔ)句都不匹配時(shí)才會(huì)使用。
5. 嵌套的switch語(yǔ)句
#include <stdio.h>
int main()
{
int a = 100;
int b = 200;
switch (a)
{
case 100:
printf("這是外部 switch 的一部分\n");
switch (b)
{
case 200:
printf("這是內(nèi)部 switch 的一部分\n");
}
}
printf("a 的準(zhǔn)確值是 %d\n", a);
printf("b 的準(zhǔn)確值是 %d\n", b);
return 0;
}
運(yùn)行結(jié)果:
如上面這段代碼, s w i t c h switch switch 語(yǔ)句可以像 i f if if 語(yǔ)句一樣也進(jìn)行嵌套使用。
大家可以自己試一試其他的嵌套方式,由于嵌套的 s w i t c h switch switch 語(yǔ)句并不常用,小明就不過(guò)多的給大家介紹了。
6. 例題
?練習(xí)一:
制作簡(jiǎn)易計(jì)算器
#include <stdio.h>
int main()
{
int first, second, result;
char sign;
scanf("%d%c%d", &first, &sign, &second);
switch (sign)
{
case '+': result = first + second;
printf("%d", result);
break;
case '-': result = first - second;
printf("%d", result);
break;
case '*': result = first * second;
printf("%d", result);
break;
case '/': result = first / second;
printf("%d", result);
break;
case '%': result = first % second;
printf("%d", result);
break;
default: printf("ERROR\n");
}
return 0;
}
?練習(xí)二:
判斷輸入的字母是不是元音字母
#include <stdio.h>
int main()
{
char ch;
scanf("%c", &ch);
switch (ch)
{
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
printf("是元音字母\n");
break;
default:
printf("不是元音字母\n");
}
return 0;
}
?練習(xí)三:
判斷某同學(xué)分?jǐn)?shù)等級(jí)
??90分以上為 A,80~89分為 B,70~79分為 C,60~69分為 D,60分以下為 不及格。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-702017.html
#include <stdio.h>
int main()
{
int score = 0;
scanf("%d",&score);
switch (score / 10)
{
case 10:
printf("滿分的好同學(xué)\n");
break;
case 9:
printf("A\n");
break;
case 8:
printf("B\n");
break;
case 7:
printf("C\n");
break;
case 6:
printf("D\n");
break;
default:
printf("不及格\n");
}
return 0;
}
完結(jié)
好啦,閱讀到這里就已經(jīng)看完了本期博客的全部?jī)?nèi)容了
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-702017.html
到了這里,關(guān)于【C語(yǔ)言】選擇語(yǔ)句(分支語(yǔ)句)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!