前言:
今天我们来重点来学习分支语句的相关内容,对于分支语句大家应该都挺熟悉的,但是你一定还有一些知识不知道,不信就来看看!
1.什么是语句?
C语言中的语句分为以下五类:
(1)表达式语句 3+5;
(2)函数调用语句 printf("hehe\n");
(3)空语句: ;
有时候我们需要一条语句,但是这条语句什么都不需要做,就可以使用空语句
(4)控制语句:用于控制程序的执行流程
可分为以下三类:
<2>循环语句:do while语句,while语句,for语句
<3>转向语句:break语句,goto语句,continue语句,return语句
(5)复合语句
2.分支语句(选择结构)
2.1if语句
语法结构:C语言中:0表示假,非0表示真
if(表达式) if(表达式) //多分支 if(表达式1)
语句; 语句1; 语句1;
else else if(表达式2)
语句2; 语句2;
else
语句3;
代码演示:
单分支:
//单分支 #include<stdio.h> int main() { //如果年纪大于18输出成年人 int age = 0; //输入 scanf("%d", &age); //判断 if (age >= 18) printf("成年人\n"); return 0; }
双分支: 注意else后面不跟表达式
//双分支 #include<stdio.h> 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<stdio.h> 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<age<30怎么表达:不能和数学中一样直接写,C语言中不存在连等
if(age>18&&age<30)
(2)if默认只能控制一条语句,要执行多条语句,就得加{}
#include<stdio.h> int main() { int age = 0; scanf("%d", &age); if (age >= 18) {//代码块 printf("成年了\n"); printf("谈恋爱\n"); } return 0; }
2.1.1悬空的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; }
大家可以看看这个程序的结果是多少?
其实什么也不打印,因为else的匹配规则是和它最近的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; }
改成这样就清晰的知道这个代码的逻辑
2.1.2if书写形式的对比
1. if(condition) 2. { 3. return x; 4. } 5. return y; 6.
分析这个代码,思考一下是不是满足condition就return x,不满足就return y
答案使肯定的,但是这样的代码我们还要思考一下才能知道它的逻辑
if(condition) { return x; } else { return y; }
这样改进就可以清晰的知道其逻辑
我们再来看一个代码
#include <stdio.h> 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)
2.1.3练习
(1)判断一个数是否为奇数
#include<stdio.h> int main() { int number = 0; scanf("%d", &number); if (number % 2 == 1) printf("是奇数\n"); else printf("不是奇数\n"); return 0; }
(2)输出1-100之间的奇数
方法一:
#include<stdio.h> 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<stdio.h> int main()//输出1-100之间的奇数 { int i = 0; for (i = 1; i <= 100; i = i + 2) { printf("%d ", i);//记得加一个空格隔开 } return 0; }
2.2switch语句
switch语句也是一种分支语句,但是常常是多分支的情况(这样就避免if..else if...else if..形式)
比如:
switch语句的结构:
switch(整形表达式)
{
case 整形常量表达式:
语句;
}
注意:switch语句中case和switch后面接的不一定只是int类型,还可以是char,short,long类型,但是不能跟double,float类型
2.2.1在switch语句中的break和default语句
break实现了switch语句跳出分支语句的效果,switch语句搭配break使用才能实现真正的分支
比如:
#include<stdio.h> 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<stdio.h> 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语句
2.2.2练习
问题:看看下面代码结果是什么?
#include <stdio.h> 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
结语:彼方尚有荣光在,少年不惧岁月长
觉得笔者写的还可以,或者自己有些许收获的时候,麻烦铁汁们动动小手,给俺来个一键三连,万分感谢