一.前言
1.什么是语句?
二.分支语句(选择结构)
我们先来看一个生动形象例子:
如果你好好学习,校招时拿一个好offer,走上人生巅峰。
如果你不学习,毕业等于失业,回家卖红薯。
这就是选择!
在了解选择之后,我们需要学习选择结构的语法
1.if语句
1.1语法结构(以下为if语句的语法结构)
(一)最简单的if结构
#include<stdio.h>
int main(){
if(表达式)
语句1;
else
语句2;
return 0;
}
(二)多分支if结构
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 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或者else后面的语句,可以是一条,也可以是多条,如果是多条的话,则必须用{}结构引起,若为一条,那用不用看你心情(滑稽)
1.2其他的一些注意问题(重点)
在了解了这个规则之后,问题就变得清晰了许多
在初学c语言的过程中,一些初学者常常会犯一些马虎的小毛病
例如if(b==2)常常会写丢一个=变为if(b=2)
解释:第一个为判断句,判断b是否等于2,从而代表值0或者1。第二个为赋值句,将b赋值为2的操作,在将b赋值之后,b的值作为判断语句真假的条件,这个语句就为真了(非0)
所以为了避免一些憨憨问题,我们可以写为if(2==b),这样的话即使你写错了写成了if(2=b),编译也是不通过的,这样可以快速发现bug并修改。
<一条华丽的分割线路过并吃了两口代码>
#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匹配的
所以题目中的else是和if(b==2)匹配的故输出结果没有
改进后的代码(这样的话代码是不是清晰规范了好多呢😊)
#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.switch结构
我们来举个栗子,来提前了解一下switch结构
2.1switch语法结构
switch(整型表达式) {
case 常量表达式;
语句;
//break;
}
ok啊兄弟们,相信语法你们都懂了吧,那我给大家再举个栗子吧
以下为我第一次学的时候写出来的代码
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d",&day)
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");
}
return 0;
}
我当时就心想这不就是小菜吗,运行的时候却发生了猫腻,大家可以试试
不用想了肯定是bug了,后来通过教材了解到break这个东东。
2.2 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; }
当输入为1时,碰上case1执行完语句,直接break跳出分支
当输入为2时,碰上case 2执行完语句,碰上break跳出分支
…
以此类推就好了
那我们写的错误代码,是怎么样运行机制呢?
我通过吉林大学的教材,找到了流程图,和pad图,方便大家理解
那么break是必须要加的吗?
显然不是的,某些情况中,合理添加和删除break可以使代码更简洁
假设我们更改一下需求
我们的代码就可以写为
#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; }
这样的话,是不是会更方便一些呢!