分支语句if 、switch
- 一、C语言中语句的定义
- 二、分支语句(选择结构)
- 2.1 if 语句:
- if 语句的结构
- 代码演示
- 练习题
- 更正
- 2.2 if 书写形式的对比
- 试着判断两个代码是否是一样的:
- 判断哪一种代码书写方式更好:
- 2.3 关于 if 语句的练习题:
- 代码1:
- 代码2:
- 2.4 switch 语句
- default 子句
- 改良关于星期的 switch
- switch 练习:
一、C语言中语句的定义
C语言中由一个分号 ; 隔开的,就是一条语句,比如:
> printf("Hello World !");
> 3 + 5;
二、分支语句(选择结构)
如果你好好学习,将来就进好公司敲代码。
如果你不好好学习,将来就进小公司敲代码。
这就是选择!
2.1 if 语句:
if 语句的结构
表达式的结果如果是真,就执行语句;为假就不执行语句。
如何判断真假呢?
0 为假,非 0 为真。
if (表达式)
语句;
if (表达式)
语句;
else
语句;
//多分支结构
if (表达式1)
语句1;
else if (表达式2)
语句2;
else if (表达式3)
语句3;
......
else
语句 n ;
代码演示
//代码一
#include <stdio.h>
int main() {
int age = 0;
scanf("%d", &age);
if (age >= 18) {
printf("成年!\n");
}
return 0;
}
//代码二
#include <stdio.h>
int main() {
int age = 0;
scanf("%d", &age);
if (age < 18) {
printf("未成年!");
}
else {
printf("成年!");
}
return 0;
}
//代码三
#include <stdio.h>
int main() {
int age = 0;
scanf("%d", &age);
if (age < 18) {
printf("少年\n");
}
else if (age >= 18 && age < 30) {
printf("青年\n");
}
else if (age >= 30 && age < 50) {
printf("壮年\n");
}
else if (age >= 50 && age < 80) {
printf("老年\n");
}
else {
printf("长寿老人\n");
}
return 0;
}
练习题
试判断该代码的输出值
#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;
}
这很容易造成误导,结果什么都不输出。
适当使用 { } 可以使代码的逻辑更加清楚。
代码的风格很重要!
更正
#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.2 if 书写形式的对比
试着判断两个代码是否是一样的:
//代码一
if (condition) {
return x;
}
return y;
//代码二
if (condition){
return x;
}else{
return y;
}
结果是一样的!return 只能 return 一次。
判断哪一种代码书写方式更好:
//代码一
int num = 1;
if (num == 5) {
printf ("hehe\n");
}
//代码二
int num = 1;
if (5 == num){
printf("hehe\n");
}
第二种会好一些,因为可以避免 if 表达式中漏写一个“=”号,出现的 bug
2.3 关于 if 语句的练习题:
- 判断一个数是否为奇数
- 输出1-100之间的奇数
代码1:
//> 1. 判断一个数是否为奇数
#include <stdio.h>
int main() {
int num = 0;
scanf("%d", &num);
if (num % 2 == 1) {
printf("%d是奇数。\n", num);
}
return 0;
}
代码2:
//> 2. 输出1 - 100之间的奇数
#include <stdio.h>
int main() {
int i = 1;
for (i = 1; i <= 100; i++) {
if (i % 2 == 1) {
printf("%d\n", i);
}
}
return 0;
}
2.4 switch 语句
switch语句也是一种分支语句。常用于多分支结构的情况。
比如:
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
。。。
输入7,输出星期日
若我们用前面学过的 if 语句来写,很麻烦,要不停的写 if else。
那我们可以试一下用 swithc 语句。
switch (整型表达式){
语句项;
}
语句项又是什么呢?
case 整形常量表达式;
语句;
而以上的结构,还要搭配 break 使用,这样才能实现分支
例如:
#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;
}
使用 break 关键字就会跳出 switch 结构,如果我们灵活使用 break,可以完成别的需求。
输入1-5,输出的是‘weekday’;
输入6-7,输出的是‘weekend’。
#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;
}
return 0;
}
要擅用 break,把 switch 语句分割成不同的部分。
default 子句
如果 switch 表达式的值与所有的 case 标签都不匹配怎么办?假设用户就没有输入1-7,输入一个 0 会怎么样?
其实也不会怎么样,就是结构的所有项都被跳过,执行 switch 之后的代码了。
如果你不想忽略不匹配的所有 case 标签的值,这个时候可以使用 default 子句。
default 子句在所有不匹配项过后,自动执行 default 子句后面的代码。所有每个 switch 语句中只有一个 default 子句。
default 子句可以出现在语句列表的任何位置,而且执行顺序会先贯穿每一个 case 标签后再执行 default子句。
在每个 switch 语句中都放一个 default 子句是个好习惯,甚至可以在后面加上 break。
改良关于星期的 switch
#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;
}
switch 练习:
#include <stdio.h>
int main() {
int n = 1;
int m = 2;
switch (n) {
case 1:
m++; //3
case 2:
n++; //2
case 3:
switch (n) { //2
case 1:
n++;
case 2:
m++; //4
n++; //3
break;
}
case 4:
m++; //5
break;
default:
break;
}
printf("m = %d,n = %d\n", m, n); //5 3
return 0;
}