一、C语言的分支语句和循环语句
1.结构化的C语言
C语言是一个结构化语言,它的重点在于算法与数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事物)控制)。
C语言的三种基本结构为:顺序、选择、循环结构。(原理如图所示)
我们今天要说的是分支和循环语句,那么何为语句呢?
C语言中由一个分号隔开的就是一条语句,比如:
printf("晚上好\n");
这就是一条语句,甚至一个分号;都可以是一条语句,它是空语句。
二、分支语句
什么是选择语句
今天中午吃什么?红烧肉还是炖排骨——这就是一种选择
1.单分支语句
if语句为简单的单分支语句,语法结构如下:
if(表达式)
语句;
if括号内为真则执行
2.多分支语句
if(表达式)
语句1;
else:
语句2;
if(表达式1)
语句1;
else if:
语句2(表达式2);
else:
语句3;
多分支,只执行一条语句。
单分支例:
int age = 20;
if(age<18)
printf("未成年")
多分支例:
注:如果表达式这样写可以吗?
不行,因为他会先执行18按顺序执行,先判断年龄是否为18,然后判断是否小于28,为真就执行了,所以要这么写。
正确写法:
if(age>=18 && age<28)
如果在else中再进行分支呢?
这样也是可以的,只不过相当于把另一部分再进行划分了。
如果条件成立,要执行多条语句,应该使用代码块。
如果不使用代码块执行多条语句就会报错:
悬空else
else有就近原则,会和最近的、未匹配的if进行匹配。所以这个什么都不输出。相当于:
3.switch语句
如果一步步用if else就太麻烦了。
switch语句结构:
switch(整型表达式)
{
语句项;
}
什么是语句项?
简单来说,switch括号里是一个语句项,而且是整型表达式,“整型”。
case就是各种情况,情况一、二、三…
输入几,判断今天是周几。
a.从哪里进去由语句项决定,从哪里出去由break决定,break直接跳出。
b.switch语句执行规则,先判断()里是几,然后就在下面找合适的case,执行完该执行的逻辑跳出去。
c.注意case一定要是整型常量,整型、常量。
的。
d.case后面的break一定要有吗?不一定,需要分支的时候才加
***总结:***
***break语句的实际效果是把语句列表划分为不同的部分。***
有时末尾不加break也能运行,但后期修改万一忘记加break分割,那就会出现大麻烦了,方便他人也方便自己,最好都加。
switch中的default:
如果你的输入case没有呢?提供default语句处理非法状况。
default也没有顺序,放在所有case前都可以,但一般置于末尾。
每个switch语句中只能出现一个default。
case里也可以出现if语句,switch允许嵌套,但不能出现continue,没有意义。
输出结果是5、3,case后面没有break是要继续执行case语句的。
4.代码风格
代码无缩进,虽然能执行,但可读性不强,后来有人来看代码就会分辨不清你的意思。
改变一下刚刚的代码:
使用了代码块进行划分,程序要做什么一目了然。
再来看几组代码:
这个代码是条件成立返回x,不成立返回y。但是这样可读性不强,容易造成其他误解。(return只会返回一个)
这样程序就会清楚明了。
三、循环语句
1.循环语句
流程图:
exper(表达式),表达式结果如果为非0,执行语句,表达式结果为假则跳出流程。
2.break和continue在循环中:
break直接跳了出去,循环中遇到break,不管执行到几,直接跳出去。
来看两段代码,感受一下continue。
i++在后,i没机会变;
i++在前,i可以变。
getchar是什么意思呢?接收键盘输入一个字符,先判断是否等于ch,然后判断是否=EOF(从左至右执行),putchar是输出,相当于printf。
输出字符用putchar更简单
这个一个个输字符,输了EOF也不能跳出,因为EOF是三个字符,那咋办?输入一个ctrl+z,这时getchar就获取了一个EOF,end of file——文件结束标志,本质的值是-1。
附:
未来涉及判断常量和一个变量是否相等的时候,把数字放在左边,这样即使打了一个=,但是运行结果会报错,数字放右边有时可以运行,但是是不正确的结果,再查找也是相当费力。
如: