C语言----分支与循环(2)

这篇介绍for循环和do  while循环 ,以及goto语句


3.2  for 循环

3.2.1 语法结构:

for(表达式1; 表达式2; 表达式3)
循环语句;
表达式 1
表达式 1 初始化部分 ,用于初始化循环变量的。
表达式 2
表达式 2 条件判断部分 ,用于判断循环时候终止。
表达式 3
表达式 3 调整部分 ,用于循环条件的调整。
在while循环中,初始化、判断、调整是分开的,如果代码量比较大时,要进行修改就比较麻烦,for循环将三者在一个括号里,因此使用for循环更加方便, 使用的频率也最高。
例子:打印1~10的数字

for循环的执行流程图:

注意:for循环后面如果没有加大括号只能控制一个语句,要控制多条语句要用大括号括起来。

3.2.2 break和continue在for循环中

在while循环中,我们已经知道break是终止循环的;continue是跳过本次循环,转到下次循环中。那么break和continue在for循环是怎样的呢?

我们不难发现,他们的意义和在while循环中是一样的。

3.2.3 for循环的一些变种

(1)

 

初始化和调整部分的省略就是什么也不写;判断部分省略就意味着条件恒为真,因此就死循环了。通常来说不建议省略,很容易出现问题。

(2)

在上面的例子中,如果给for循环括号里分别补上a=0,b=0,运行结果是16个hhh;但是把这省略,刚开始a初始化为0,进入外循环条件成立再进入内循环,b=0,1,2,3条件成立,因此打印4个hhh,b=4时条件不成立,跳出内循环; 再次到外循环,a=1条件成立,又到内循环,注意:因为内循环初始化省略,所以b的值还是保持上次的4,条件不成立,再跳出内循环,以此类推,只打印4个hhh。

 3.3 do...while()循环

3.3.1 语法结构:

do
循环语句;
while(表达式);
例子:打印1-10

do while循环的流程图:

 特点:循环至少执行一次,使用的场景有限,所以不是经常使用。

3.3.2 do while循环中的break和continue

与while 和 for 循环一样,do while循环的break也是输出4次a,当a满足条件时跳出循环; 与while 和 for 循环的功能是一样的,但是do while循环的continue每次跳出的时候a始终是5,判断为真一直执行,结果程序不能终止。

4.goto语句

平时敲代码时从理论上 goto 语句是没有必要的,实践中没有 goto语句也可以很容易写出代码。但是某些场合下 goto 语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。
goto 语言真正适合的场景如下:
for(...)
   for(...)
  {
       for(...)
      {
           if(disaster)
               goto error;
      }
  }
   
error:
if(disaster)
        // 处理错误情况
使用goto语句的一个例子:(关机程序)

5. 练习    

(1)二分查找(找1-10中的一个数字,如果找到,则输出其下标;反之,则输出找不到)

原理图:

  • 确定范围内左右下标 left ,right
  • 根据 left ,right确定中间元素mid
  • 根据mid确定的元素和查找的元素比较,再确定相应的left或right

前提:有序的数组  

(2)多个字符从两端向中间汇聚

示例:

     welcome to my home!!!!!!!

#########################

w#######################!

we#####################!!

......

      welcome to my home!!!!!!!

(3)用户登入情景,只能登录三次,否则退出程序

注意:两个字符串比较相等不能使用==,应该使用strcmp库函数 (比的是对应字符串位置上的ASCII码值)。

  • strcmp返回0表示2个字符串相等
  • strcmp返回>0的数字,表示第一个字符串大于第二个字符串
  • strcmp返回<0的数字,表示第一个字符串小于第二个字符串

(4)猜数字游戏

  1. 电脑生成一个随机数
  2. 猜数字 :大了,继续猜;小了,继续猜;猜对了,结束游戏
  3. 玩完一局继续玩,不用退出游戏

int r = rand() % 100 + 1;//可以生成随机数,范围为:0-32767

srand((unsigned int)time(NULL));//要给srand传递一个变化的值,因为计算机上的时间是时刻变化的,time函数可以返回一个时间戳 

记住要有相应的头文件!!!

注意:别把生成随机数放在循环里,不然每猜一次数字,又会生成新的随机数,等于说永远猜不到

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值