可以根据目录观看需要了解的部分
1.分支语句
1.1 if语句
if(表达式)
语句1
else
语句2
若表达式为turn(0),则执行语句,若为flast(非0)则不执行语句
![](https://img-blog.csdnimg.cn/direct/ddb4e06d3179430a9a54bb53b072ac0e.png)
== : 判断是否相等,相等则输出,不相等则不输出
if语句后不用带 ; 不然就会和后面语句分隔开
![](https://img-blog.csdnimg.cn/direct/3e5eb11f2a9c45169dffab3fd9e0ef10.png)
![](https://img-blog.csdnimg.cn/direct/f59e3bc797b24b0681de25bcca1f4bcd.png)
c语言为顺序结构,先输入再选择
默认情况
下 if else 的后面只能跟一条语句
如果要跟多条语句,则可使用{} 如下
1.2 分支包含多条语句的方法
![](https://img-blog.csdnimg.cn/direct/01a4eeb643c94748aeeaf6b5dd9e1d92.png)
1.3 嵌套if语句
在if else语句中,else可以和另一个if语句连用,构成多重判断
例如:要求输入一个整数,判断输入的整数是0,还是正数或负数
![](https://img-blog.csdnimg.cn/direct/55187d06776c4f01bc2df232a5546eaf.png)
![](https://img-blog.csdnimg.cn/direct/905ab6d0b4534fc8a79f270ac9c623f7.png)
1.4 例题
输入一个人的年龄
如果年龄 < 18岁,打印"少年"
如果年龄在18岁至44岁打印"青年"
如果年龄在45岁至59岁打印"中老年"
如果年龄在60岁至89岁打印"老年"
如果90岁及以上打印"老寿星"
![](https://img-blog.csdnimg.cn/direct/55be91f25cd0452c868a4ede4a2279e8.png)
简化版
![](https://img-blog.csdnimg.cn/direct/07d7851820614623ae4100c0ec920144.png)
1.5 悬空else
![](https://img-blog.csdnimg.cn/direct/e6d7097c4a234195b938f1803b0aecf6.png)
上图中,因为if条件不成立,所以不会执行if语句,所以不输出
if语句中的else只会和
距离最近
的if匹配
同时,if else 语句中,只会同时执行一条语句,执行if时不执行else,执行else时,if则不成立。
2.关系操作符
> 大与运算符
< 小于运算符
>= 大于等于运算符
<= 小于等于运算符
== 相等运算符
!= 不相等运算符
在选择语句中,容易将
【
=(赋值)】与 [ == (判断相等)
】
弄混淆,所以在选择语句中习惯将 if(5==a),将值写在相等运算符的左边,如果==写错也能立即发现错误
多个关系运算符不宜连用,例如 if(a>b>c)
![](https://img-blog.csdnimg.cn/direct/b28b6c0aa5d54f5fbc513fb643555401.png)
if语句中的(a<b<c)会逐步比较,先进行a与b的比较结果为1,然后1再和c比较
正常的表达方式应为: if(a<b && b<c)
&&---并且
3.条件操作符
3.1三目操作符 :
exp1(语句1) ? exp2 : exp3
意思就是:先执行语句1,如果语句1为真,则执行语句2。如果语句1为假,则执行语句3。其用法与 if 语句类似
![](https://img-blog.csdnimg.cn/direct/9ccfff83015847caa7420335bb8cdc7c.png)
3.2例题:
实现找出两个数中的最大值
![](https://img-blog.csdnimg.cn/direct/66e5df76b3b24ed58988466268e51a0c.png)
3.3 逻辑操作符
|| :或
&& : 与
! :非
注 : c语言中,非0表示真,0表示假
!
![](https://img-blog.csdnimg.cn/direct/ca03639bb0624b0d9c191e14f9d82954.png)
! a : 当a = 0 时,则 a 为假,! a 则为真
&&(双目操作符) (参考 2.关系操作符)
a && b (可以理解为并且)
都为真,则为真,却一方不可
例: 张三 && 李四,抬桌子却
谁都不
|| (a或者b 有一个满足就可以)(张三或者李四帮忙抬桌子)
![](https://img-blog.csdnimg.cn/direct/90c54bb6befa4d7cb592b0be00ba9fab.png)
3.4 例题:
(闰年判断)
![](https://img-blog.csdnimg.cn/direct/2278767b50884691a7bfae3d79c565a8.png)
方法一:
![](https://img-blog.csdnimg.cn/direct/317d49fbc54745bd81456227b2588e00.png)
方法二:
![](https://img-blog.csdnimg.cn/direct/f131cf8d6a54468e8463bba875c0cd4b.png)
方法三:
![](https://img-blog.csdnimg.cn/direct/2c6522563b6b4dc78e5b02ae6c271eaa.png)
4 短路(逻辑运算符中才存在)
在逻辑操作符( || && !)的运算中,代码是从左往右运算的,如果运算符左边的表达式满足逻辑运算符的条件,则不再对右侧表达式求值, 这种情况成为“短路”。
如方法一
在c语言中 0 为假,非 0 为真
5.switch语句
(switch语句是一种特殊的if....else结构,用于判断条件有多个结果的情况,把多个的 else if 改成更易用,可读性更好的形式)
switch语句
switch(表达式)
{
case 结果1:
break;
(打断程序运行)
case 结果2:
break;
case 结果3:
break;
default:
}
5.1 例题:
![](https://img-blog.csdnimg.cn/direct/bd144274063d43a0b5be3ec3cc3c3aef.png)
if语句
![](https://img-blog.csdnimg.cn/direct/3edd5865c05b466c959d2d355516c748.png)
switch语句
![](https://img-blog.csdnimg.cn/direct/42fe04a2084f4931be74f82b03eca32d.png)
case语句决定从哪个入口进
break决定从哪跳出
switch语句后的表达式【 switch(表达式)】 必须是整型
case后的值,必须是整型常量表达式
其中,字符也为整型,可以使用switch语句 因为字符的本质是 ASCII码 值
default可有可无,可加可不加
要表示一周
![](https://img-blog.csdnimg.cn/direct/b18e383492a746d0862b84c04d004183.png)
要表示周一~~周五为工作日,周天为休息日
![](https://img-blog.csdnimg.cn/direct/5426aa79849a4ba0a451dc544beb31c1.png)
default
如上述程序,如果输入的值不在1~7之间,则default可以使用
![](https://img-blog.csdnimg.cn/direct/0eefa20630374507a91e59e6ff161a33.png)
6.循环语句
while语句
while(表达式)
语句;
while语句后默认跟一条语句,如果跟多条,则需要使用 {}
![](https://img-blog.csdnimg.cn/direct/0812aee9eadd48daa8d2e161fe99f3b0.png)
在屏幕上打印1--10
![](https://img-blog.csdnimg.cn/direct/ba92b06ec35041c48dda8c892d4c555f.png)
例题:输出正的整数,逆序打印每一位
如:输入1234,输出4321
输入521,输出125
![](https://img-blog.csdnimg.cn/direct/c3260bd8963a41609720d5882179c3ea.png)
1.for 循环(三种循环中使用最多)
![](https://img-blog.csdnimg.cn/direct/2fffd2e60fbc4656a09bac25702b3c6e.png)
语句形式
for(表达式1
;
表达式2
;
表达式3)
(for循环中的三个表达式,任意一个都可以省略)
语句;// 如果使用多条语句则使用 { }
表达式1
:初始化表达式
表达式2
:判断表达式
表达式3
:调整
![](https://img-blog.csdnimg.cn/direct/5feb81b2f0fd412196f32feb9296ac8b.png)
1.1 例题
![](https://img-blog.csdnimg.cn/direct/3bb83b9a42934ee8895480c4bc3a6f3f.png)
2. do--while 循环(使用最少)
语法
do
语句;
while(表达式);
do执行语句 while判断真假,为真则再次执行语句
![](https://img-blog.csdnimg.cn/direct/bcf88d2566a7429183f17d79cd38d154.png)
2.1 例题
![](https://img-blog.csdnimg.cn/direct/66db3f929a9b42dd8e67a20f951b231c.png)
3. break 和 continue 语句
break 的作用是永久的终止循环,即跳出循环
continue 的作用是跳过本次循环中,continue 后面的代码
3.1 while循环中的 break 和 continue
3.1.1 break
![](https://img-blog.csdnimg.cn/direct/1ac6899465404a96b324bf9eb058a303.png)
当 a == 5;的时候执行 break 语句,就会跳出 while 循环,此时输出结果为 1234
3.1.2 continue
![](https://img-blog.csdnimg.cn/direct/943265c47da44fafae5a00641c180fe4.png)
continue 的本质是:跳过 continue 后面的代码
所以当 a == 5;时,执行 continue 语句,跳过了 printf()和a++语句,开始执行 while循环,此时a=5,所以陷入了死循环,代表 a 的值永远为 5
如果想实现打印 1 2 3 4 6 7 8 9 10,缺少五,则只需修改
![](https://img-blog.csdnimg.cn/direct/9bb576c2883d4b8fb626550cbc97de0c.png)
3.2 for 循环中的 break 和 continue
3.2.1 break
![](https://img-blog.csdnimg.cn/direct/8c5b4367184146db9fc805f113a44c25.png)
3.2.2 continue
![](https://img-blog.csdnimg.cn/direct/c57bc96c7c564486a6c757b3cfad0bd1.png)
3.2.3 break 与 continue 的使用场景
如果想要实现输入密码,如果密码输入正确,则可用 break 跳出循环 ,如果密码输入错误,则可用 continue 跳过后面的代码,重新输入密码。
4 循环的嵌套
while,do while,for 循环可以嵌套在一起使用,效率更高
4.1 例题
![](https://img-blog.csdnimg.cn/direct/5c0dfa1a4aa243dabb37b2f0925fc49c.png)
解释:
1.进入第一层 for 循环 a = 100;a <= 200;
2.进入第二层 for 循环,b = 2;b <= 99;
3.if 判定--100 % 2 == 0
4.进入 if 语句,c = 0;break 跳出第二层 for 循环
5.进入第一层 for 循环,a++ = 101;a <= 200;
6.进入第二层 for 循环,b = 2;b <= 100;
7.if 判定--101 % 2 !=0; 不进入 if 语句,进入 for 循环 b++ = 3........
8.当 b >100 时,不执行 if 语句。
9.执行 if(c == 1)
10.打印 a
以此类推
5 goto语句
goto语句可以实现在同一个函数内跳转到设置好的标号处。(在多层循环中,如果想快速跳出,则可使用 goto 语句)
如果有三层循环,break 只能跳出1层循环,goto 语句能跳出3层循环
语句形式
goto 语句;
语句:
5.1 例题:
写一个关机程序--------需要用到【system(库函数):可以执行系统命令,需要用到头文件 <stdlib.h>】
![](https://img-blog.csdnimg.cn/direct/1a56302b0d4e4ffaa31dd01f416dacc2.png)
6 分支和循环练习题
6.1 猜数字游戏
(1)自动生成1~100的随机数
(2)玩家猜数字,根据猜测数据的大小给出大了,或小了的反馈,直至猜对
需要用到的知识点
1.rand
c语言提供了一个函数叫 rand ,这个函数是可以生成随机数的,函数原型如下:
int rand (void)
rand 函数会返回一个
伪随机数
这个随机数的范围是0~RAND-MAX是(大部分值为32767).
范围为0-32767
rand 函数的使用需要包含一个头文件:<stdlib.h>
![](https://img-blog.csdnimg.cn/direct/6e37dd979984424e92dae4ddefdddb51.png)
由于生成的数为
伪随机数(真正的算法是不知道下一次的值是多少)
所以,无论再重新执行多少次,rand函数生成的数字不变
rand函数是对一个叫“
种子
”的基=基准值进行运算生成的随机数。
之所以每次产生的随机数是一样的,是因为
rand 函数生成随机数的默认种子是 1
。如果要生成不同的随机数,就要让种子是变化的。
就需要用到 srand函数
2.srand
c语言提供了一个函数叫 srand ,用来随机数的生成器,其原型如下:
void srand (unsigned int seed(种子));
程序中再调用 rand 函数之前先调用 srand 函数,通过srand 函数的参数 seed(种子) 来设置 rand 函数生成随机数的时候的种子,只要种子在变化,生成的随机数就变化起来了。
![](https://img-blog.csdnimg.cn/direct/c6ac5233636d49a6b58f57a88c839d8a.png)
![](https://img-blog.csdnimg.cn/direct/371428b71f5b4094bc72cddef3293497.png)
3.time (用时间作为种子)
我们如果想要让 rand 产生随机数,就必须让 srand()是一个变化的值,就需要用到 time 作为种子,因为时间随时都会变化
time 函数会返回当前的日历时间,其实返回的是1970年1月1日0时0分0秒到现在程序运行时间之间的差值,单位是秒。返回的类型是time_t类型的,time_t类型本质上其实就是32位或者64位的整型类型。
time函数的参数 timer 如果是非NULL的指针的话,函数也会将这个返回的差值放在timer指向的内存中带回去。如果 timer 是NULL,就只返回这个时间的差值。time函数返回的这个时间差也被叫做: 时间戳
time函数的时候需要包含头文件:<time.h>
第一次
![](https://img-blog.csdnimg.cn/direct/46924bc00ee547258616f80a1f54767e.png)
第二次
![](https://img-blog.csdnimg.cn/direct/94637d530c0d461f96c1519691aba15e.png)
解读
![](https://img-blog.csdnimg.cn/direct/f628aecee24641dc968e2e44f0f3fa69.png)
srand((unsigned int)time(NULL));//
设置随机数的生成起点(种子)
4.设置随机数的范围
如果不加限制rand 生成的随机数的范围:0-32767.所以我们要加以限制
![](https://img-blog.csdnimg.cn/direct/ce10723a32d74748a91d16ac72088f55.png)
如下
![](https://img-blog.csdnimg.cn/direct/4c484e3566f84c099510a3396d52a2c3.png)
void 表述函数不返回任何值
游戏
![](https://img-blog.csdnimg.cn/direct/7e52d1b9c92f4670a6328896e545438c.png)