好久……不见。
断了两次的学习复盘,今天我来狂补!最近一直在学分支循环语句,首先我们来一起了解一下在C语言中,语句的种类。
1、语句的分类
在C语言中,语句可以分为一下几种:
1、表达式语句
2、函数调用语句
3、控制语句
4、复合语句
5、空语句
没错,标红的那个就是后面几节要介绍的。今天标题的语句均属于控制语句。控制语句适用于控制程序的执行流程,以实现程序的各种程序结构方式,他们由特定的语句定义所组成,C语言中有九种控制语句,可以分为以下三大类:
1、条件判断语句也叫分支语句:if 语句、switch 语句;
2、循环执行语句:do while 语句、while 语句、for 语句;
3、转向语句:break语句、goto 语句、continue 语句、return 语句。
条件判断语句核心就是给出一个表达式,来判断真假,然后分流出两条支路分别执行不同的操作;循环执行则是给定一个条件,符合这个条件就无限进行循环往复的语句执行,一旦不符合条件,就跳出循环;转向语句这个名字还是很贴合他本身的功能的,就是在一段代码中,改变代码执行的方向,具体结合后面的代码进行详解。
2、分支语句(选择结构)
比起分支语句,我觉得选择语句更能贴近它的实际作用的效果。它的实际作用我理解的就是岔路口处有几条路供你选择,每条路都有着自己的最终走向。而且选择语句中可以嵌套使用,也就是你选择一条路之后走过一段时间又来到一个岔路口,又要来进行一次选择。就像我们学习一样。
不同的选择走上不同的路,这就是选择语句,走上不同的选择的路继续遇到不同的选择,套娃模式就是选择语句的嵌套。
2、分支语句——if 语句
说了上面的一堆,相信大家应该有个简单的认识啦,下面我们进行第一的分支语句——if的介绍
首先我们来熟悉一下的 if 的语法结构:
//单分支 :
if(表达式)
{
语句;
}
//双分支:
if(表达式)
{
语句1;
}
else
{
语句2;
}
多分支:
if(表达式1)
{
语句1;
}
else if (表达式2)
{
语句2;
}
else
{
语句3;
}
表达式是作为判断语句走向的唯一依据。如果表达式为真,则 if 中的语句执行,为假则跳过 if 语句。如果是单分支,不论真假,if 执行完之后分支结构结束,如果是双分支,if 为真,执行 if 的语句,else 跳过,如果为假则直接执行else下的语句。多分支结构逐个对 if 、else if 进行语句判断,如果都为假,执行else语句。
上述的代码中 { } 表示一个语句块,如果仅执行一条语句的时候,是可以省略的,但执行多条语句的时候,需要 { } 来括起来,否则第一个 ; 结束后,后面的语句不属于语块内。{ } 可以使代码的逻辑更加清晰,所以建议大家就都写上。
还要注意一个问题就是套娃使用 if 的时候,else 和谁匹配的问题,准则就是和谁近就和谁匹配。所以我们在写代码的时候,为了减少错误发生的可能,将else 与与之对应的 if 对其,尤其是多个if 嵌套的时候,很容易产生误读。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int i = 0;
scanf("%d", &i);
if (i % 2)
{
printf("%d是奇数\n",i);
i++;
}
else
{
printf("%d是偶数\n",i);
}
return 0;
}
如图,当我输入5的时候打印出“5是奇,“i%2”在这里作为 if 的表达式,打印是语句。除了上面这种直接在括号里出现0 和非 0 的表达式外,还有相等、大于和小于较为常见。
if (num == 5)
if (5 == num)
两个表达式都是判断相等,但往往第二个更加好用。因为当我们在平时敲代码的时候,是容易把“=” 和“==” 搞混的,一旦这里把判断相等错输入成了赋值,那么第一个代码num=5 ,表达式不为零,直接进入if 语句中,而第二个 5=num ,常量被赋值则会系统报错,让我们能够快速的找到错误的所在。类似种种的代码思想有很多,后期会慢慢提到。(毕竟老师没讲,现在提我也不会)
2、分支语句——switch 语句
switch 语句也是一种分支语句,主要就是用在多分支的情况。比如:
输入1,输出星期一;
输入2,输出星期二;
输入3,输出星期三;
输入4,输出星期四;
输入5,输出星期五;
输入6,输出星期六;
输入7,输出星期日;
如果我们用上面 if ……else if ……的结构,完全能实现这个要求,但是实在麻烦了一些,这里我们就可以用switch 语句。
switch(整数表达式)
{
语句项;
}
语句项指的就是一些case语句:
case 整形常量表达式:
语句;
这里要注意的是,一定要是整数和整形常量表达式,这是甲鱼的臀部——规定。
在switch中还有一个比较重要的角色——break,如果没有他我们是无法直接实现分支的,switch 搭配 break 才能实现真正的分支。
#include<stdio.h>
int main()
{
int i = 0;
scanf("%d", &i);
switch (i)
{
case 1:
printf("星期一");
break;
case 2:
printf("星期二");
break;
case 3:
printf("星期三");
break;
case 4:
printf("星期四");
break;
case 5:
printf("星期五");
break;
case 6:
printf("星期六");
break;
case 7:
printf("星期日");
break;
}
return 0;
}
如图为实现输入数字几就打印星期几的功能。会看到每一个case语句后面都会跟一个break,是因为switch语句中的整形表达式其实相当于一把钥匙,只要这把钥匙找到了对应的门锁,也就是case语句,那么任务就完成了,执行完对应的case的命令后依次向后执行其他语句,知道 switch语句结束或中途遇到break 才会终止,所以说输入的数字其实就是选择从哪里开始执行语句,之后就是依次向下执行语句,有点类似于 int main()。如果这里我们不用break:
#include<stdio.h>
int main()
{
int i = 0;
scanf("%d", &i);
switch (i)
{
case 1:
printf("星期一");
//break;
case 2:
printf("星期二");
//break;
case 3:
printf("星期三");
//break;
case 4:
printf("星期四");
//break;
case 5:
printf("星期五");
//break;
case 6:
printf("星期六");
//break;
case 7:
printf("星期日");
//break;
}
return 0;
}
输入“1”之后,知道了case的入口——case 1,然后从case 1 后开始执行剩下的部分,直至结束,所以 break 的作用就是把语句列表化成不同的分支。
如果所有表达式的值与所有的case的值都不匹配,不加入其他东西的话,系统也不会报错,就是跳过所有的case,跳出switch 语句。但如果不想要直接跳出去,如果所有的case 都不匹配还想进行一条语句的执行的话,就可以引入——default。直接在语句列表中加入即可:
default:
语句;
当所有的case 的值都不符合时,执行default的值,它可以放在语句列表的任意位置,但是一般我们都放在最后。
在编写最后一个case的时候后面加上一个break,可以避免出现在以前的最后一个 case 语句后面忘了添加 break语句,而导致后面的default语句执行,一个switch中default有且只有一个。大家要清楚的记得这一点:default 前的case语句没有break的话,是会执行default 语句的,它是一条正常的语句,如果读到他了会执行他的,比起其他的语句,他只是多了一个功能,就是其他case 不符合条件时,只要他在语句列表里就会找到他,并且执行他。
今天的小葵花课堂到这就结束了,我去快马加鞭下一篇了~