在学习分支和循环之前,我们先要认识一下什么是语句,知道语句简单的构成,了解一下continue和break语句是什么。这对我们学习分支和循环语句非常重要。我的博客计划是第一个,可惜执行起来却是…hhh
废话少说,正文如下。
正文
什么是语句
C语句可分为以下四类:
- 表达式语句
- 初始化语句
- 初始化的意思就是给变量赋值
- 格式:基本类型 变量 = 数值
- 在定义变量时最好都把它初始化,否则后面忘记初始化就难受了。
int a = 10; int b = 20; a = b + c;//这些都是最简单的表达式语句
函数调用语句
- 如下
printf ("hehe");//printf函数在调用的时候需要引用头文件stdio.h
控制语句
控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语言有九种控制语句。
可分成以下三类:
条件判断语句也叫分支语句:if语句、switch语句;
循环执行语句:do while语句、while语句、for语句;
转向语句:break语句、goto语句、continue语句、return语句
空语句
最简单的空语句就是一个分号;
空语句本身并不执行任何任务,但有时还是有用。他所使用的场合就是语法要求出现一条完整的语句。
break和continue语句
- break语句用于永久终止循环,这里要注意,如果有多个嵌套循环的时候,指的是终止当前的一个循环。就是for花括号内的那个循环。
- continue语句用于终止当前循环,然后直接跳到条件表达式的位置去测试条件表达式。
分支语句
if
- 代码块
{ expression; }//就是一个花括号内的语句称为一个代码块。
if语法1
if(条件表达式) 语句;// 如果条件表达式为真(即非0),则执行 语句,否则就为假跳过他不执行。
注意:
- 语法规定0为假,非零即为真。
- 如果语句为一条则不需要加花括号(即形成一个代码块),多条语句才加。(为了养成好习惯,一条语句也尽量加上。)
- if语法2
if(条件表达式) 语句1; else 语句2;//
注意: else不能单独脱离if使用
- if语法3(多分支)
if(条件表达式1) { 语句1; } else if(条件表达式2) { 语句2; } else { 语句3; }
如果"条件表达式1"为真,则执行"语句1",否则判断"条件表达式2",如果为真执行"语句2", 当表达 式1、2都不满足,会执行最后一个else语句。
众多大括号中,只有一个大括号中的内容会被执行
只有前面所有添加都不满足, 才会执行else大括号中的内容
看下面这个if空语句的用法
if(3 > 2); { printf("3 > 2"); } // 输出结果: 3 > 2 // 因为if(3 > 2)后面有一个分号, 所以系统会认为if省略了大括号 // if省略大括号时只能管控紧随其后的那条语句, 所以只能管控分号
switch
switch语句也是一种分支语句。
常常用于多分支的情况。
比如:
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期日
那我没写成 if…else if …else if 的形式太复杂,那我们就得有不一样的语法形式。
这就是switch 语句。
switch(整型表达式) { case (整型常量表达式); }
注意:整型常量表达式指的是这个地方只能是常量,比如1,10,5等等,也不能是float等浮点类型的小数。
在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。
break语句 的实际效果是把语句列表划分为不同的分支部分。
编程好习惯:在最后一个 case 语句的后面加上一条 break语句。
(之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break语句)
格式如下
switch(条件表达式) { case 常量表达式1: 语句1; break; case 常量表达式2: 语句2; break; case 常量表达式n: 语句n; break; default: 语句n+1; break; }
default子句
如果表达的值与所有的case标签的值都不匹配怎么办?
其实也没什么,结构就是所有的语句都被跳过而已。
程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。
但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?
你可以在语句列表中增加一条default子句,把下面的标签
default:
写在任何一个 case 标签可以出现的位置。
当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。
所以,每个switch语句中只能出现一条default子句。
但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。
解释:
计算"条件表达式"的值, 逐个与其后的"常量表达式"值相比较,当"条件表达式"的值与某个"常量表达式"的值相等时, 即执行其后的语句, 然后跳出switch语句
如果"表达式"的值与所有case后的"常量表达式"均不相同时,则执行default后的语句
如果没有break;语句程序会按照顺序结构从上往下依次执行。
default语句可以放在代码块内的任何位置,只要没有可选择的case语句,就会执行default语句。
if和Switch转换
看上去if和switch都可以实现同样的功能, 那么在企业开发中我们什么时候使用if, 什么时候使用switch呢?
if else if 针对于范围的多路选择 switch 是针对点的多路选择
最后警告:在使用if语句时
int main() { int a =10; if (a=10) { printf(“%d”, a); } }//错误写法,但编译器不会报错
int main() { int a =10; if (10=a) { printf(“%d”, a); } }//编译器会报错
- 所以在遇见判断变量等于常量的时候,老司机的写法就是把常量写在前面,把变量写在后面。这样你的编译器,例如Devcpp或者vs才会报错,利于代码的维护和找错。否则你可能找半天都找不到错误在哪。
循环语句
while
while语句流程图
我们已经掌握了,if语句:
if(条件) 语句;
条件满足的情况下,if语句后的语句执行,否则不执行。
但是这个语句只会执行一次。
由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。
那我们怎么做呢?
C语言中给我们引入了: while 语句,可以实现循环。
变量初始化; while(条件表达式) { 循环语句; 调整部分; }
过程:当变量满足条件表达式时,为真,则执行循环语句和调整部分,否则为假跳出代码块,即跳出花括号。
while有当……的意思。而if有如果……的意思。可以把while当作多个if的叠加。
break在while语句里的用法
总结:其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。
所以:while中的break是用于永久终止循环的。
变量初始化; while(条件表达式) { 循环语句; break; 调整部分; } //在遇见break语句时直接跳出while循环,结束循环。
break在while语句里的用法
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,
而是直接跳转到while语句的判断部分。进行下一次循环入口的判断。
变量初始化; while(条件表达式) { 循环语句; continue; 调整部分; } //在遇见continue语句时直接跳到条件表达式的位置,对表达式测试。
for
for循环流程图
- 我们已经知道了while循环,但是我们为什么还要一个for循环呢?首先来看看for循环的语法:
- 初始化部分,用于初始化循环变量的。(就是变量赋值)
- 条件表达式部分,用于判断循环时候终止。
- 调整部分,用于循环条件的调整。例如(i++,i- -)
for(变量初始化;条件表达式;调整部分) { 循环语句; } //在企业开发中,能用while解决的,用for几乎都能解决。
可以发现在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。所以,for循环的风格更胜一筹;for循环使用的频率也最高。
虽然for循环和while差不多。但也是有区别的。但for和whlie的区别在于:for括号内变量初始化的值
只能在后面执行一次,离开循环模块就不能再用了
变量初始化; for(;条件表达式;调整部分) { 循环语句 } //但是把变量初始化语句写在最前面的话,那个变量的值在后面还能用
在这里需要说明一点就是:for括号里面的分号不能省略。
for(;;);
- 以上就是最简单的死循环。
do whlie
do while循环流程图
do { 循环语句; } while(条件表达式);
- 这里要注意的一点是 while()后面有分号!
- 流程:
- 和while语句一样,但循环至少执行一次,使用的场景有限,所以不是经常使用。
goto语句
最后我们来介绍一下goto语句。
要使用goto语句,你必须在你希望跳转的语句前面加上语句标签。语句标签就是标识符后面加个冒号。包含这些标签的goto语句可以出现在同一个函数中的任何位置。
goto是一种危险的语句, 因为在学习C的过程中,很容易形成对它的依赖。经验欠缺的程序员有时使用goto语句来避免考虑程序的设计。这样写出来的程序较之细心编写的程序总是难以维护得多。
最后
如果你觉得文章对你有一些帮助。点赞,收藏是对我最大的鼓励。