目录
小乐乐接到个任务,写一个程序,根据输入的年龄判断此人是否成年。
小乐乐又接到一个任务,写一个程序,根据输入的年龄来判断此人处于什么阶段。
前言
C语言是结构化的程序设计语言,我们生活中遇到的问题都能被高度抽象为“顺序结构”、“选择结构”、“循环结构”三种结构,C语言是用计算机来解决生活中的实际问题,所以也支持上述三种结构,这一篇讲述分支语句(选择结构)或者成为条件啊判断语句,有if、switch两种。
什么是分支语句?
我们将实现选择结构这种功能的语句称之为分支语句。
if语句
语法
可以是
if(表达式)
语句;if(表达式)
语句;
也可以是
if(表达式)
语句1;
else
语句2;
还可以是
//多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3
例子
小乐乐接到个任务,写一个程序,根据输入的年龄判断此人是否成年。
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
{
printf("未成年\n");
}
else
{
printf("成年\n");
}
}
小乐乐又接到一个任务,写一个程序,根据输入的年龄来判断此人处于什么阶段。
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");
}
}
需要注意的细节
else和if的匹配问题
else与离它最近的if匹配,而不是与格式对齐的if匹配。
示例:这里的else与if(b == 2)匹配而不是和if(a == 1)匹配,但这样的格式很容易让人误以为else是跟if(a == 1)匹配,从而的到错误的答案。
#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;
}
或者是用括号将内容括起来
#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;
}
if书写形式的比较
有上面的例子我们可以知道,代码风格的好坏,决定了代码的可读性和可维护性,好的代码风格就像是书法一样,让人赏心悦目,那么我们这里给出if的几种写法来比较好坏。
代码1和代码2的比较
代码2要优于代码1。
代码1会让人产生歧义:不管这个条件是真是假,都会返回y,但实际上是:为真返回x,为假返回y,当返回时,这个程序就终止了,不会再往下走。
代码2清晰明了,条件为真返回x,条件为假就返回y。
//代码1
if (condition) {
return x;
}
return y;
//代码2
if(condition)
{
return x;
}
else
{
return y;
}
代码3 和代码4的比较
代码4要优于代码3.
代码3,当条件漏了=时,也就是if(num = 5)时,程序的走向偏离了我们的预期,但是依然能够执行,从判断语句变成了赋值语句,缺点就在于犯了错但不会报出来。
代码4,当条件漏了=时,也就是if(5 = num)时,编译器会直接报错,方便我们弄懂错误在哪,而不用调试半天,抓破头皮。
//代码3
int num = 1;
if(num == 5)
{
printf("hehe\n");
}
int num = 1;
if(5 == num)
{
printf("hehe\n");
}
实现多分支语句时,使用多个if和使用if else的区别
有的同志会疑惑,我使用多个if来实现多分支语句不比if else来的快?我为什么要用if else呢?
区别就在于效率。
使用if else
各个if语句是联系起来的,执行的效率更高
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");
}
}
相当于是下面所示
#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");
}
}
}
}
使用多个if
使用多个if时,各个if之间相当于是独立的,随着语句的执行,依次执行判断,有多少个if就要判断多少次。
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
{
printf("少年\n");
}
if (age >= 18 && age < 30)
{
printf("青年\n");
}
if (age >= 30 && age < 50)
{
printf("中年\n");
}
if (age >= 50 && age < 80)
{
printf("老年\n");
}
if(age>=80)
{
printf("高寿\n");
}
}
switch语句
switch 也是一种分支语句,适用于多分支情况,比使用if else要简洁一点。
switch语法结构
switch(整型表达式)
{
语句项;
}
语句项
case 整形常量表达式:
语句;
示例
小乐乐接到一个任务,根据day的值来显示今天是星期几。
#include <stdio.h>
int main()
{
int day = 3;
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;
default:
printf("输入错误\n");
break;
}
return 0;
}
switch的注意事项
搭配break才能真正实现分支
程序在遇到break时才会跳出switch语句,要不然会继续往下执行,例如:
#include <stdio.h>
int main()
{
int day = 1;
switch (day)
{
case 1:
printf("星期一\n");
case 2:
printf("星期二\n");
case 3:
printf("星期三\n");
case 4:
printf("星期四\n");
case 5:
printf("星期五\n");
case 6:
printf("星期六\n");
case 7:
printf("星期天\n");
default:
printf("输入错误\n");
}
return 0;
}
使用default来保底
将输入的值不符合我们的情况放进default语句中,来保证能得到反馈。
当我们将day赋值成0时,没有default则没有反馈。
#include <stdio.h>
int main()
{
int day = 0;
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;
}
if语句和switch的比较
if语句更适用于范围的判断,switch更适用于点的判断。多分支情况switch要更好。
总结
本文介绍了两种分支语句if和switch,分别讲述了它们的使用方式、场景、及注意事项,希望能帮助同志们多于分支语句的理解更上一层楼~