大家好,我是深鱼~
目录
前言:
1.什么是语句?
2.分支语句(选择结构)
2.1if语句
2.1.1悬空的else
2.1.2if书写形式的对比
2.1.3练习
2.2switch语句
2.2.1在switch语句中的break和default语句
2.2.2练习
结语:彼方尚有荣光在,少年不惧岁月长
今天我们来重点来学习分支语句的相关内容,对于分支语句大家应该都挺熟悉的,但是你一定还有一些知识不知道,不信就来看看!
C语言中的语句分为以下五类:
(1)表达式语句 3+5;
(2)函数调用语句 printf("hehe\n");
(3)空语句: ;
有时候我们需要一条语句,但是这条语句什么都不需要做,就可以使用空语句
(4)控制语句:用于控制程序的执行流程
可分为以下三类:
<1>分支语句(条件判断语句):if语句,switch语句
<2>循环语句:do while语句,while语句,for语句
<3>转向语句:break语句,goto语句,continue语句,return语句
(5)复合语句
语法结构:C语言中:0表示假,非0表示真
if(表达式) if(表达式) //多分支 if(表达式1)
语句; 语句1; 语句1;
else else if(表达式2)
语句2; 语句2;
else
语句3;
代码演示:
单分支:
//单分支
#include
int main()
{
//如果年纪大于18输出成年人
int age = 0;
//输入
scanf("%d", &age);
//判断
if (age >= 18)
printf("成年人\n");
return 0;
}
双分支: 注意else后面不跟表达式
//双分支
#include
int main()
{
//如果年龄大于等于18-成年人,否则打印-未成年人
int age = 0;
//输入
scanf("%d", &age);
//判断
if (age >= 18)
printf("成年人\n");
else
printf("未成年\n");
return 0;
}
多分支:因为各个分支是相互排斥的,所以18-30大于18就可以不用写
//age<18 - 未成年
//18~30 - 青年
//31~50 - 中年
//51~70 - 中老年
//71~99 - 老年
//>99 - 老寿星
#include
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
printf("未成年\n");
else if (age <= 30)
printf("青年\n");
else if (age <= 50)
printf("中年\n");
else if (age <= 70)
printf("中老年\n");
else if (age <= 99)
printf("老年\n");
else
printf("老寿星\n");
return 0;
}
注意:(1)在C语言中要想表达18
if(age>18&&age<30)
(2)if默认只能控制一条语句,要执行多条语句,就得加{}
#include
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
{//代码块
printf("成年了\n");
printf("谈恋爱\n");
}
return 0;
}
#include
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
大家可以看看这个程序的结果是多少?
其实什么也不打印,因为else的匹配规则是和它最近的if匹配
这就告诉我们代码风格很重要,我们可以适当使用{}使代码的逻辑更加清晰
#include
int main()
{
int a = 0;
int b = 2;
if (a == 1)
{
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
}
return 0;
}
改成这样就清晰的知道这个代码的逻辑
if(condition)
{
return x;
}
return y;
分析这个代码,思考一下是不是满足condition就return x,不满足就return y
答案使肯定的,但是这样的代码我们还要思考一下才能知道它的逻辑
if(condition)
{
return x;
}
else
{
return y;
}
这样改进就可以清晰的知道其逻辑
我们再来看一个代码
#include
int main()
{
int a = 10;
if (a == 5)
printf("hehe\n");
return 0;
}
我们看到第5行,对于我们初学者很可能分不清=和==的区别,就经常会在if后面表达式跟=
先来看看=和==有什么区别?
=赋值符 eg:a=5,意思就是把5赋值给a
==判断是否相等 eg:a==5就是判断a和5是否相等
既然==是判断是否相等,那左右两边交换位置也就没有影响,那么我们为了防止写错
if(5==a)
(1)判断一个数是否为奇数
#include
int main()
{
int number = 0;
scanf("%d", &number);
if (number % 2 == 1)
printf("是奇数\n");
else
printf("不是奇数\n");
return 0;
}
(2)输出1-100之间的奇数
方法一:
#include
int main()//输出1-100之间的奇数
{
int i = 0;
for (i = 1; i <= 100; i++)
{
//判断并输出
if (i % 2 == 1)
printf("%d ", i);//记得加一个空格隔开
}
return 0;
}
方法二:1就是奇数,然后加2下一个奇数,直接i=i+2
#include
int main()//输出1-100之间的奇数
{
int i = 0;
for (i = 1; i <= 100; i = i + 2)
{
printf("%d ", i);//记得加一个空格隔开
}
return 0;
}
switch语句也是一种分支语句,但是常常是多分支的情况(这样就避免if..else if...else if..形式)
比如:
switch语句的结构:
switch(整形表达式)
{case 整形常量表达式:
语句;
}
注意:switch语句中case和switch后面接的不一定只是int类型,还可以是char,short,long类型,但是不能跟double,float类型
break实现了switch语句跳出分支语句的效果,switch语句搭配break使用才能实现真正的分支
比如:
#include
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
printf("星期1\n");
break;
case 2:
printf("星期2\n");
break;
case 3:
printf("星期3\n");
break;
case 4:
printf("星期4\n");
break;
case 5:
printf("星期5\n");
break;
case 6:
printf("星期6\n");
break;
case 7:
printf("星期天\n");
break;
}
return 0;
}
但是如果要
1.输入1-5,输出“weekday”
2.输入6-7,输出“weedend”
代码如下:
#include
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekend\n");
break;
default:
printf("选择错误\n");
break;
}
return 0;
}
如果输入的值和所有case标签的值都不一样,那就直接进入default语句,注意每个switch语句只能出现一个default子句,default子句可以出现在语句列表的任何位置
编程好习惯:在最后一个case语句和default语句的后面加上一条break语句
问题:看看下面代码结果是什么?
#include
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1:
m++;
case 2:
n++;
case 3:
switch (n)
{//switch允许嵌套使用
case 1:
n++;
case 2:
m++;
n++;
break;
}
case 4:
m++;
break;
default:
break;
}
printf("m = %d,n = %d\n", m, n);
return 0;
}
答案:m=5,n=3
分析:首先n=1,m=2,然后进入switch语句,n=1,直接进入case1,m=3,因为没有break,继续进入case2,n=2,然后又没有break,继续进入case3,因为n=2,进入case2,m=4,n=3,然后break跳出小的switch语句,因为case3没有break,继续进入case4,m=5,遇到break直接跳出大的switch语句,最后输出m=5,n=3
觉得笔者写的还可以,或者自己有些许收获的时候,麻烦铁汁们动动小手,给俺来个一键三连,万分感谢