一、5类C语句
-
表达式语句
-
函数调用语句
-
控制语句
1)分支语句:if、switch;
2) 循环语句:do、do while 、for;
3) 转向语句:continue、 break、goto、return;
4.复合语句
5.空语句
二、分支语句
if语句
1.结构
//多分支
2.条件表达式为真就执行【1为真,0为假】
3.如果条件成立,要执行多条语句要怎么办?
一对{}表示一个代码块
4.else的匹配:else是和离他最近的且不带else的if匹配;
5.if 的格式书写
第二种比第一种好!!
Switch语句
【常用于多分支】
1.语法结构
代码块里的是语句项
2.switch语句中的break
在switch语句中我们无法直接实现分支,需要借助break来实现分支;
break的实际效果是把语句列表分成不同的分支部分
3.好习惯:在最后一条case后面加一个break语句;
4.Switch 语句中的default子句
1)当所有表达的值和所有case标签的值都不匹配时,程序不会停止也不会保错,结果只是会跳过所有case语句而已;
但如果你不想忽略不匹配所有case标签的表达的值,可以在Switch语句中加一个default语句;
加在任意case语句可以存在的地方;
如果Switch语句表达式的值与任何case标签的值都不匹配,就会执行default子句后面的语句;
所以一个Switch语句只会有一个default子句;
default可以加在任何位子,语句流会像执行case语句一样执行default语句;
5.编程好习惯
在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。
6.练习
【细节1】case1、2、3后没有break,所以接下来按顺序执行;
【细节2】Switch语句允许嵌套使用;
【细节3】case3中的break只是结束了case中的Switch语句,并没有结束大的Switch语句,并且case3语句后没有break,所以继续执行case4语句;
三、循环语句
while语句
1.语法结构
2.break语句
【作用:永久终止循环】
3.continue语句
【作用:终止本次循环,本次循环中continue后面的部分不再执行,直接跳到while语句的判断部分,进行下一次循环的入口判断】
用途:“只输出数字字符,跳过其他字符”
for语句
1.语法结构
2.for语句和while语句的比较
可以看出while同时也具备有循环的三个必须条件,但和for语句相比while语句的三个条件距离较远,查找修改时不集中不方便,所以在风格上for语句更胜一筹;
For语句用的更频繁;
3.continue与break语句
和while语句中的continue和break作用相同;
4.for语句的循环控制变量
建议:
1) 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
2)建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
//前闭后开的写法
for(i=0; i<10; i++)
{}
//两边都是闭区间
for(i=0; i<=9; i++)
{}
5.for循环的一些变种
1)for语句中的3个表达式可以省略,但初学不建议省略;
2)可以使用多个变量控制循环;
do while 语句
1.语法结构
2.do while 语句特点
【至少执行一次,使用场景有限,所以不常用】
3.continue和break语句
【和while循环中的用法相同】
四、分支与循环(下)
随机数生成【猜数字游戏实现】
rand函数
【原型:int rand(void)】
1.可以生成随机数,范围是0~RAND_MAX(其大小依赖于编译器,一般是32767)
2.生成的是伪随机数,伪随机数不是真正的随机数,是通过某种算法生成的随机数。真正的随机数是无法预测下一个数值是多少的。
3.而rand函数是对一个叫“种子”的基准值进行运算而生成的随机数;
4.之所以在之前的程序运行中随机数都一样,是因为rand函数默认种子为1;
5.为了使随机数不再重复,我们要使种子进行变化(不用随机,只要变化就好)
6.使用rand函数要包含stdlib.h
7. 写法rand()%a[范围是0~a]
普适写法rand()%(n-m+1)+m[范围是m~n]
Eg.范围1~100 rand()%100+1
srand函数
【原型:void srand(unsigned int seed)】
- 用来初始化随机数的生成器的;
- 程序在调用rand函数之前要先调用srand函数,通过srand函数的参数seed设置rand函数在生成随机数时的种子,只要种子变化,随机数序列就会变化;
- 但是在生成随机数的时候我们还需要随机变化的种子,这就矛盾了,所以我们又引入了time函数;
time 函数
【原型:time_t time(time_t* timer)】
- time_t实质上是整型类型
- 参数timer一般可以是NULL
- time函数返回的时间差叫做时间戳,是现在时刻和1970年1月1日的时间差,单位是秒
- 使用time函数要包含头文件time.h