目录
2、在if语句中,表达式的结果为真,则语句执行;反之则不执行。
前言
本篇是讲述在C语言学习过程中我对于分支的一些理解和我们在平时写代码时容易犯的一些错误。
什么是语句?
C语言的语句可以分为以下五类:
1. 表达式语句
2. 函数调用语句
3. 控制语句
4. 复合语句
5. 空语句
控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。
可分成以下三类:
1. 条件判断语句也叫分支语句:if语句、switch语句;
2. 循环执行语句:do while语句、while语句、for语句;
3. 转向语句:break语句、goto语句、continue语句、return语句
分支语句(选择结构)
一、if语句
1、if语句分为但分支与多分支,起选择作用。
语法结构:
if(表达式)
语句;
if(表达式)
语句1;
else
语句2;
//多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
当然如果我们有需求的话,中间也可以引用多个 else if 语句。
例如:
#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");
}
}
2、在if语句中,表达式的结果为真,则语句执行;反之则不执行。
C语言中0表示假,非0表示真
二、switch语句
1、switch语句也是一种分支语句。
与if语句相比来说,if语句更适用于判断范围性,而switch语句则适和点判断,常常用于多分支的情况。
比如:
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期日
switch(整型表达式)
{
语句项;
}
//语句项是一些case语句:
//如下:
case 整形常量表达式:
语句;
2、switch语句中的break。
在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。
例如:
#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;
}
case语句是进入点,来判断条件什么时候进入,如果没有break,则会从进入的case语句一直执行到switch语句结尾才会退出。
当然我们要是有需要连续执行几个case语句时也可以,那就要考虑break的位置了:
1. 输入1-5,输出的是“weekday”;
2. 输入6-7,输出“weekend”
#include <stdio.h>
//switch代码演示
int main()
{
int day = 0;
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语句的作用是把语句列表划为不同的分支部分。
3、default子句
如果表达的值与所有的case标签的值都不匹配怎么办?
其实也没什么,结构就是所有的语句都被跳过而已。
程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。
但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?
你可以在语句列表中增加一条default子句,把下面的标签
default:
写在任何一个 case 标签可以出现的位置。
当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。
所以,每个switch语句中只能出现一条default子句。
但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。
在每个switch语句中放一条default语句是一个编程好习惯。
根据本章所学我们就可以制作一个饮料贩卖机的小程序
代码如下:
#include <stdio.h>
void main()
{
int drink;
printf("*******************\n");
printf("** Choose One **\n");
printf("**1. Coffee **\n");
printf("**2. Tea **\n");
printf("**3. Coca-Cola **\n");
printf("*******************\n");
printf("请输入你选择的饮料:1 or 2 or 3\n");
scanf("%d",&drink);
system("cls");//清屏(这行往上)
switch(drink)
{
case 1:
printf("The coffee was chosen");
break;
case 2:
printf("The tea was chosen");
break;
case 3:
printf("The coca-cola was chosen");
break;
default :
printf("\n error!\n");
break;
}
}
总结:
我们经常容易犯的一个错误就是在if(表达式)语句中表达式的判断上容易出错,尤其是需要判断一个变量与常数的值是否相等时,我们常常容易把“==”写成“=”
例如:
#include<stdio.h>
int main()
{
int a = 0;
scanf("%d",&a);
if(a = 5)
{
printf("%d", a);
}
return 0;
}
如果按照我们正常的逻辑,只有当我们输入的a值是5是才会打印a
但是当我们把程序运行后,就会发现我们不管输入的值是多少,都会打印5
这正是因为误把“==”写成了“=”导致的,但是我们如果把常数写在左面,变量写在右面,编译器则会提醒你的疏忽大意。
if语句中表达式来判断变量与常数是否相等时,建议把常数放在左面,变量放在右面
当我们再次无写时,编译器则会报错:
#include<stdio.h>
int main()
{
int a = 0;
scanf("%d",&a);
if(5 = a)
{
printf("%d", a);
}
return 0;
}
这时我们就会恍然大悟,减少调试时间,疯狂安利这个编程好习惯!!!