分支和循环语句

1.if语句

1.1if

if 语句的语法形式如下:
if ( 表达式 )
语句
表达式成立(为真),则语句执行;表达式不成立(为假),则语句不执行。C语言中,0表示假,非0表示真。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

1.2else

if ( 表达式 )
语句1
else
语句2
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3分支中包含多条语句

在这里插入图片描述
在这里插入图片描述
这是因为 if 语句只能控制⼀条语句,即 printf(“成年了\n”); ,if语句为真,则打印成年了,if语句为假,则不打印成年了。 printf(“可以谈恋爱了\n”); 独立存在,不管if语句真假,都会执行。
在这里插入图片描述
在这里插入图片描述

1.4 嵌套if

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

输⼊一个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出:非正数。
在这里插入图片描述
在这里插入图片描述
输⼊一个⼈的年龄,
如果年龄<18岁,打印"少年"
如果年龄在18岁⾄44岁打印"⻘年"
如果年龄在45岁⾄59岁打印"中⽼年"
如果年龄在60岁⾄89岁打印"⽼年"
如果90岁及以上打印"⽼寿星"
在这里插入图片描述
在这里插入图片描述

1.5悬空else

在这里插入图片描述
这就是悬空 else 的问题,如果有多个 if 和 else , else 总是跟最近的 if 匹配。后边的 if…else 语句是嵌套在第一个 if 语句中的,如果第⼀个 if 语句就不成立,嵌套的 if 和 else 就没机会执行了,最终啥都不打印。
改成下面更易理解:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果我们希望else和第一个if匹配:在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.关系操作符

C语言用于比较的表达式称为关系表达式,其用到的运算符称为关系运算符(关系操作符)。
主要有下面6个:
• > 大于运算符
• < 小于运算符
• >= 大于等于运算符
• <= 小于等于运算符
• == 相等运算符
• != 不相等运算符
在这里插入图片描述
输入的值是否相等都打印haha,因为 = 是赋值运算符。而== 是相等运算符。
当一个变量和一个常量比较相等,若常量左置,==误写为=时编译器会报错提醒。在这里插入图片描述
关系表达式通常返回 0 或 1 ,表示真假。
多个关系运算符不宜连用。在这里插入图片描述
数学逻辑上a<b<c不成立,但却能打印haha。因为关系运算符从左到右计算,此处实际执行的是(a<b)<c。a < b成立, 返回 1 , 1再与c比较。
如果要判断变量b的值是否在 a 和 c 之间,应写为a < b && b <c。&&意为并且。在这里插入图片描述

3.条件操作符

条件操作符也叫三目操作符。
操作数1 ? 操作数2 :操作数3
1真2算 ,1假3算,计算结果是整个表达式的结果。在这里插入图片描述
以上代码可改为:在这里插入图片描述
用条件表达式实现找两个数中较大值:在这里插入图片描述

4. 逻辑操作符

! :逻辑取反运算符(改变单个表达式的真假)。
&& :逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
|| :逻辑或运算符,就是或者的意思(两侧至少有一个表达式为真,则为真,否则为假)。

4.1逻辑取反运算符 !

a—— 0(假)—— 非0(真)
!a—— 非0(真)—— 0(假)在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2 逻辑与运算符&&在这里插入图片描述

4.3 逻辑或运算符||在这里插入图片描述

4.4 练习:闰年的判断在这里插入图片描述

4.5 短路

C语言逻辑运算符先对左侧的表达式求值,再对右侧的表达式求值。
如果左边表达式满足逻辑运算符的条件,就不再对右边表达式求值,这种情况称为“短路”。

(1)对于&&,两侧的表达式都为真,则为真,否则为假。
左边操作数结果是0(假)时,已可知整个表达式为假,右边操作数就不再执行。
如(month >= 3 && month <= 5),month>=3不成立,month就不会在3~5内,整个表达式也就不成立,不必再执行右边操作数。在这里插入图片描述
关系表达式通常返回 0 或 1 ,表示真假。
第一个&&两侧a++=1,++b=3,都非0,则i=a++&&++b为真,从而a++&&++b=1。
又 对于&&操作符来说,左边操作数结果是0时,右边操作数就不再执行。
第二个&&两侧a++&&++b=1,d=5,都非0,则i=a++&&++b&&d++为真,从而i=1。

在这里插入图片描述
a++=0,为假,则右侧操作数不再执行,表达式结果为i=0。

(2)对于||,两侧至少有一个表达式为真,则为真,否则为假。
左操作数真,则整个表达式真,右操作数不再执行;左操作数假,则执行右操作数。在这里插入图片描述
在这里插入图片描述

5. switch 语句

在这里插入图片描述

5.1 if语句和switch语句的对比

输入任意⼀个整数值,计算除3之后的余数:
在这里插入图片描述
在这里插入图片描述
上述代码中,我们要注意:
case 和后边的数字之间必须有空格;
case 语句中的代码执行完成后,需加上 break ,才能跳出该switch语句。

5.2 switch语句中的break

如果我们去掉case语句中的break:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
某⼀个case语句后无break 语句,代码会继续往下执行,直到遇到 break 语句或switch语句结束。在这里插入图片描述

5.3 switch语句中的default

若switch (整型表达式)中的整型表达式与case语句无法匹配,要么不处理,要么用default语句。在这里插入图片描述
在这里插入图片描述

6. while循环

6.1 if 和 while的对比

while 语句的语法结构和 if 语句相似。在这里插入图片描述
在这里插入图片描述
while语句可以实现循环。

6.2 while语句的执行流程在这里插入图片描述

6.3while循环的实践

(1)在屏幕上打印 1~10:在这里插入图片描述
(2)输入一个正整数,逆序打印这个整数的每一位:在这里插入图片描述
1234%10=4,n=1234/10=123;
123%10=3,n=123/10=12;……

7. for循环

7.1语法形式

for(表达式1; 表达式2; 表达式3)
语句;(如果循环体想包含更多语句,可以加上大括号)

表达式1 用于循环变量的初始化
表达式2 用于循环结束条件的判断
表达式3 用于循环变量的调整

7.2 for循环的执行流程在这里插入图片描述

7.3for循环的实践

(1)在屏幕上打印1~10:在这里插入图片描述
(2)计算1~100之间3的倍数的数字之和:在这里插入图片描述

7.4while循环和for循环的对比

在这里插入图片描述
在这里插入图片描述

8. do while 循环

8.1 语法形式在这里插入图片描述

while循环 和 for 循环都是先判断,条件如果满足就进入循环,执行循环语句,如果不满足就不进入循环。
而do while 循环先直接进入循环,执行循环语句,然后再执行 while 后的判断表达式,表达式为真,就进行下⼀次循环,表达式为假,则停止循环。所以do while 语句中循环体至少执行一次。

8.2 do while循环的执行流程在这里插入图片描述

8.3 do while循环的实践

(1)在屏幕上打印1~10:在这里插入图片描述
(2)输入一个正整数,计算这个整数是几位数在这里插入图片描述
循环一次输入值少一位数,同时count加1。

9. break和continue语句

break用于终止循环。
continue 的作用是跳过本次循环中 continue 后边的代码,进行下一次循环的判断。其在 for 循环和 while 循环中有差异。

9.1 while循环中的break和continue

在这里插入图片描述
在这里插入图片描述

9.2 for循环中的break和continue

在这里插入图片描述
在这里插入图片描述

9.3 do while循环中的break和continue在这里插入图片描述

在这里插入图片描述

10.循环嵌套

打印100~200之间的素数。(只能被1和本身整除的数是素数,又称质数)

在这里插入图片描述

11. goto 语句

goto 语句可实现在同一个函数内跳转到设置好的标号处。多层循环的代码中,如果想快速跳出,使用goto语句很方便。
goto 语句如果使用不当,会导致在函数内部随意跳转,打乱程序的执行流程,所以尽量别用。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

12.随机数生成

12.1rand

rand函数原型: int rand (void);
rand函数的使用包含头文件stdlib.h。
rand函数会返回一个伪随机数。伪随机数不是真正的随机数,是通过某种算法生成的随机数。真正的随机数的是无法预测下⼀个值是多少的。rand函数是对一个叫“种子”的基准值进行运算生成的随机数。
每次运行程序产生的随机数序列一样,是因为rand函数生成随机数的默认种子是1。如果要生成不同随机数,就要让种子变化。
在这里插入图片描述

12.2srand

srand原型: void srand (unsigned int seed);
调用 rand 函数之前先调用 srand 函数,通过 srand 函数的参数seed来设置rand函数生成随机数时的种子。只要种子在变化,每次生成的随机数序列也就变化。
在这里插入图片描述
在这里插入图片描述

12.3time

程序中我们一般使用程序运行的时间作为种子,因为时间时刻变化。
C语言中有一个函数叫 time,time函数原型如下:time_t time (time_t* timer);
time 函数会返回当前日历时间,其实返回的是当前到程序开始运行时间之间的差值,单位是秒。返回的类型是time_t类型的,time_t 类型本质上是32位或者64位的整型类型。
time函数的参数 timer 如果是非NULL的指针,函数也会将这个返回的差值放在timer指向的内存中带回去。
如果 timer 是NULL,就只返回这个时间的差值。time函数返回的这个时间差也叫做:时间戳。
time函数使用的时候需要包含头文件:time.h
在这里插入图片描述
srand函数不需要频繁调用,一次运行的程序中调用一次就够了。

12.4生成一定范围内随机数

生成0~99间随机数:在这里插入图片描述

生成1~100间随机数:
在这里插入图片描述

生成100~200间随机数:在这里插入图片描述
生成a~b间随机数——rand()%(b-a+1)+a

12.5 猜数字游戏的实现

在1~100间的整数选定一个作为答案,游戏者一次猜一个数,共有8次猜测机会,猜错了将提示猜大/小了,直到猜对或机会用完,公布答案,游戏结束。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
假如加入菜单(开始游戏或退出游戏…)并调用函数:
在这里插入图片描述
在这里插入图片描述

do while循环至少执行一次操作,确保用户至少看到一次菜单,从而有机会做出选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值