㊙️小明博客主页:➡️ 敲键盘的小明 ㊙️
✅关注小明了解更多知识☝️
文章目录
前言
提示:本篇文章为C语言选择语句的个人总结,内容如若有误,请及时联系我更正。
- 转载请注明原创,谢谢。
提示:以下是本篇文章正文内容:
一、什么是选择语句?
假设你在水果摊购买一斤的水果,摊主会根据你购买的水果种类来计算价格。
行情:
苹果🍎
7
7
7元
/
/
/斤,葡萄🍇
8
8
8元
/
/
/斤,
香蕉🍌
5
5
5元
/
/
/斤,草莓🍓
20
20
20元
/
/
/斤
在这个场景中,选择语句就像摊主,根据你购买的水果种类(不同的条件)来计算不同的价格(执行不同的操作)。
二、if语句
注:C语言中:0表示假,非0表示真
1. 语句格式
🔴单分支
if(表达式)
{
语句;
}
过程: 先计算“条件”表达式的值,如果该值不等于 0 0 0 ,表达式值为真,执行“语句”,否则表达式值为假,不执行“语句”。
🔴双分支
if(表达式)
{
语句1;
}
else
{
语句2;
}
过程: 先计算“条件”表达式的值,如果该值不等于 0 0 0 ,表达式为真,否则表达式为假:
表达式为真时,执行“语句1”,表达式为假时,执行“语句2”。
🔴多分支
if(表达式1)
{
语句1;
}
else if(表达式2)
{
语句2;
}
else
{
语句3;
}
过程:
- 先计算表达式1的值,如果为真,则执行“语句1”。
- 如果表达式1为假,则不执行“语句1”,开始计算表达式2的值,如果为真,则执行“语句2”。
- 如果表达式2也为假,则执行“语句3”。
2. if语句的使用方法
🔴单分支
#include<stdio.h>
int main()
{
int m = 2;
if(m < 5)
{
printf("小于5\n");
}
return 0;
}
运行结果:
过程: 我们将 2 2 2 赋值给 m m m ,在执行选择语句时, 2 2 2 确实是小于 5 5 5 ,则用于判断的表达式为真,则执行了输出语句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;
}
运行结果:
过程:
情况1: 同单分支一样,小于 5 5 5 的情况就是在屏幕上打印 小于 5 5 5 。
情况2: 将 6 6 6 赋值给 m m m 时,在执行选择语句时, 6 6 6 是大于 5 5 5 的,用于判断的表达式 ( 6 < 5 ) (6<5) (6<5) 为假,则不执行 i f if if 中的语句,转去执行 e l s e else else 中的语句,在屏幕上打印了: 大于 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;
}
运行结果:
表达式不成立是不会进入该 i f if if 语句中的!
过程:
表达式1: 输入的值如果大于 0 0 0 ,则表达式1成立。
表达式2: 输入的值如果大于 18 18 18 并且小于 35 35 35 则表达式2成立,在屏幕上打印 青年!
表达式3: 输入的值如果小于 18 18 18 则表达式3成立,在屏幕上打印 未成年!
表达式4: 输入的值如果大于 35 35 35 且小于 55 55 55 则表达式4成立,在屏幕上打印 中年! ,如果表达式2、3、4 都不成立说明我们输入的年龄大于 55 55 55 的,则在屏幕上打印 老年!如果输入的值为负数,则表达式1不成立,直接跳到最后一个 e l s e else else 语句,在屏幕上打印输入年龄有误!。(毕竟年龄是不能为负数滴😏,当然也可以再加个判断将年龄限制在百岁左右,不然输入几千岁几万岁不就妥妥的老妖怪了嘛😱😱😱)
3. 悬空的else
了解了以上的知识后,如果遇到一些特殊的选择语句,又会有什么变化嘞?
让我们看一下这段代码:【猜一下会在屏幕上打印什么?】
#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;
}
如果老夫所料不错,施主的答案是 haha ,那么施主所想是否正确捏?
运行结果:
是不是有点小意外?为什么会这样呢?
C语言中, e l s e else else 与离它 最近的 i f if 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;
}
改成这样是不是就一目了然了,当我们优化以后可以看到在第一句判断时就已经不成立了,所以是不会进入选择语句内,直接到该语句的末尾。
总结: i f if if 语句可以单独使用,而 e l s e else else 必须和 i f if if 配对使用,并且 e l s e else else 是和它上面最近的未曾匹配的 i f if if 进行配对。
4. 嵌套的if语句
i f if if 语句是可以嵌套使用的,那么该怎样嵌套捏?
if(表达式1)
{
if(表达式2)
{
语句1;
}
else
{
语句2;
}
}
else
{
if(表达式3)
{
语句3;
}
else
{
语句4;
}
}
这种嵌套的 i f if if 语句运行流程是:
先判断表达式1是否成立,如果 成立 ,则开始判断表达式2,表达式2成立则执行 语句1 ,表达式2不成立则执行 语句2 ;
如果表达式1 不成立 ,则开始判断表达式3,成立则执行 语句3 ,不成立则执行 语句4 。
5. 例题
✅练习一:
判断一个数是奇数还是偶数
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
if (n % 2 == 1)
{
printf("%d是奇数!\n", n);
}
else
{
printf("%d是偶数!\n", n);
}
return 0;
}
✅练习二:
判断某一年是否为闰年
闰年是指该年份能被 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;
}
✅练习三:
判断一个数的值的范围
#include <stdio.h>
int main()
{
int num = 0;
printf("请输入一个整数:");
scanf("%d", &num);
if (num < 0)
{
printf("输入的整数是负数。\n");
}
else if (num == 0)
{
printf("输入的整数是 0。\n");
}
else if (num < 10)
{
printf("输入的整数是小于 10 的整数。\n");
}
else if (num < 20)
{
printf("输入的整数是大于等于 10 且小于 20 的整数。\n");
}
else
{
printf("输入的整数是大于 20 的整数。\n");
}
return 0;
}
✅练习四:
比较两个数哪一个更大
#include <stdio.h>
int main()
{
int a, b;
printf("请输入两个数:");
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语句
s w i t c h switch switch 也是一种分支结构,常常用于多分支的情况!若果 i f if if e l s e else else … i f if if e l s e else else…过多时,可以选择用 s w i t c h switch switch 语句。
1. 语句格式
switch(表达式)
{
case 常量表达式1: 语句1; break;
case 常量表达式2: 语句2; break;
······
case 常量表达式n: 语句n; break;
default: 语句 n+1;
}
- s w i t c h switch switch 表达式的值是 c a s e case case 后面的常量表达式的可能取值。
- s w i t c h switch switch 后面的表达式值的类型一般为 整型 或者 字符型 。
- c a s e case case 子句后的常量表达式必须为简单的 整型 或者 字符型常量 。
- 当执行完一个分支的执行语句后,如果没有遇到 b r e a k break break ,程序将无条件的继续执行后面的所有分支语句,直到遇到 b r e a k break break 后,则退出 所在的 s w i t c h switch switch 语句。
- s w i t c h switch switch 语句也是可以 嵌套 使用的。
2. switch语句使用方法
由上面的第 4 4 4 点我们可以看到在没有遇到 b r e a k break break 之前,程序会无条件继续执行,直到遇到 b r e a k break break 才会结束,那么我们用代码来深刻体验一下:
#include <stdio.h>
int main()
{
int num = 2;
switch (num)
{
case 1:
printf("num 的值是 1\n");
printf("继续执行下面的 case 2 的代码\n");
case 2:
printf("num 的值是 2\n");
printf("继续执行下面的 case 3 的代码\n");
case 3:
printf("num 的值是 3\n");
printf("继续执行下面的 case 4的代码\n");
case 4:
printf("num 的值是 4\n");
printf("继续执行下面的 case 5 的代码\n");
case 5:
printf("num 的值是 5\n");
printf("继续执行下面的 case 6 的代码\n");
break;
case 6:
printf("num 的值是 6\n");
default:
printf("未匹配到任何 case\n");
}
return 0;
}
运行结果:
可以看出,当 n u m = 2 num=2 num=2 时, s w i t c h switch switch 选择语句会从 c a s e case case 2 2 2 执行,但是在 c a s e case case 2 2 2 结束后并没有遇到 b r e a k break break,所以将继续执行接下来的语句,直到在 c a s e case case 5 5 5 结束时遇到了 b r e a k break break,则跳出了所在的 s w i t c h switch switch 语句,而不再继续 c a s e case case 6 6 6 的语句。
3. break的妙用
在 C 语言中, s w i t c h switch switch 语句中的 b r e a k break break 作用是跳出 s w i t c h switch switch 语句,如果没有遇到 b r e a k break break 语句,程序会继续执行下一个 c a s e case case 标签后的语句。如果所有 c a s e case case 标签都没有匹配到 b r e a k break break ,程序会执行 d e f a u l t default default 标签后的语句。
所以加了 b r e a k break break 的 s w i t c h switch switch 语句会更加严谨。
例如:
#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;
}
运行结果:
上面这段代码就很好的应用了 b r e a k break break,当我们输入 1 1 1 ~ 7 7 7 之间的数时,会在屏幕打印所对应的星期,并且在打印完后直接跳出,不再继续执行下面的选择。
4. 去掉部分break的switch语句
我们已经知道了没有遇到 b r e a k break break,将继续执行后面的语句,直到遇到了 b r e a k break break,才跳出所在的 s w i t c h switch switch 语句。
那么我们是不是也可以利用一下这个规定,来达到可以在一定程度上减少代码量:
#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当中的几,都会周五的下面的【工作日!】后,通过 b r e a k break break 跳出选择语句。
例如: 当我们输入2时,执行语句是空的,则继续往下执行,3和4也是空的,直到在 c a s e case case 5 中的 p r i n t f printf printf 语句打印:工作日!,执行完后遇到了 b r e a k break break ,跳出了选择语句。
注:
🔴🔴🔴default子句🔴🔴🔴
如果表达的值与所有的 c a s e case case 标签的值都不匹配,也就是所有的语句都被跳过了,程序并不会被终止,也不会报错。
但是,你不想忽略不匹配所有 c a s e case case 标签的表达式的值,该怎么办?
当switch表达式的值与 c a s e case case 分支的条件都不满足时,程序将执行 d e f a u l t default default 子句。所以,每个switch语句中只能出现一条default子句,而且它可以出现在 s w i t c h switch switch 语句列表的任何位置,因为它只有在其他 c a s e case case 语句都不匹配时才会使用。
5. 嵌套的switch语句
#include <stdio.h>
int main()
{
int a = 100;
int b = 200;
switch (a)
{
case 100:
printf("这是外部 switch 的一部分\n");
switch (b)
{
case 200:
printf("这是内部 switch 的一部分\n");
}
}
printf("a 的准确值是 %d\n", a);
printf("b 的准确值是 %d\n", b);
return 0;
}
运行结果:
如上面这段代码, s w i t c h switch switch 语句可以像 i f if if 语句一样也进行嵌套使用。
大家可以自己试一试其他的嵌套方式,由于嵌套的 s w i t c h switch switch 语句并不常用,小明就不过多的给大家介绍了。
6. 例题
✅练习一:
制作简易计算器
#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;
}
✅练习二:
判断输入的字母是不是元音字母
#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;
}
✅练习三:
判断某同学分数等级
90分以上为 A,80~89分为 B,70~79分为 C,60~69分为 D,60分以下为 不及格。
#include <stdio.h>
int main()
{
int score = 0;
scanf("%d",&score);
switch (score / 10)
{
case 10:
printf("满分的好同学\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;
}
完结
好啦,阅读到这里就已经看完了本期博客的全部内容了