循环语句

  • for循环
    • for循环的语法
    • break和continue在for循环中
    • for语句的循环控制变量
    • 一些for循环的变种
    • 例题
  • do...while()循环
    • do语句的语法:
    • do while循环中的break和continue
  • 循环语句练习
  • goto语句
    • 关机程序

for循环

for循环是我们要学习的第二个循环语句也是循环语句中最常用的一个。与while循环有很多相同点和差异,让我们来了解一下把

for循环的语法

for(表达式1; 表达式2; 表达式3)
循环语句;
表达式1
表达式1为初始化部分,用于初始化循环变量的。
表达式2
表达式2为条件判断部分,用于判断循环时候终止。
表达式3
表达式3为调整部分,用于循环条件的调整。
对比一下while循环和for循环的基本语法

上面是输出1-10while循环和for循环实现代码
while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。所以,for循环的风格更胜一筹。
循环语句是多条必须加{}成为代码块,调整部分在while内部再for循环表达式3的位置,这个区别会使两循环再continue有所体现。
for循环先执行表达式1,在执行表达式2,循环语句,表达式3,再表达式2,循环语句,表达式3……一直循环下去
表达式1有的人为了方便直接定义初始化,但是这种是在C99标准才出现的,C++也支持,但是有的C语言编译器不支持,为了避免这种状况我们先在循坏外定义,然后在语句1初始化。

break和continue在for循环中

for循环中也可以出现break和continue,他们的意义和在while循环中是一样的。但是还是有些差异:

#include<stdio.h>
int main()
{int i = 1;while (i <= 10){if (5 == i)continue;printf("%d ", i);i++;}return 0;
}
#include<stdio.h>
int main()
{int i = 1;for(i=1;i<=10;i++){if (5 == i)continue;printf("%d ", i);}return 0;
}

上面两个程序的输出结果
1 2 3 4(一直循环,不输出数据)
1 2 3 4 6 7 8 9 10

上面出现的区别是因为while调整部分在循环语句内部continue跳过本次循环后面的代码,直接去判断部分,进行下一次循环的判断。i++后面就不会执行。
for循环的continue跳过循环后面的代码直接进行调整部分不会出现死循环。

#include <stdio.h>
int main()
{int i = 0;for (i = 1; i <= 10; i++){if (i == 5)break;printf("%d ", i);}return 0;
}

输出结果是1 2 3 4和while循环几乎一致。

for语句的循环控制变量

建议:

  1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
  2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
    int i = 0;
    //前闭后开的写法
    for(i=0; i<10; i++)
    {}
    //两边都是闭区间
    for(i=0; i<=9; i++)
    {}

遍历输出数组用前闭后开

#include<stdio.h>
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int i = 0;for (i = 0; i < 10; i++){printf("%d ", arr[i]);}return 0;
}

上述代码更加清晰的表达了循环的次数。如果判断部分写i<=9;也能实现但不如i<10;

如果题目用的闭区间更加便捷也不用必须前开后闭。
例如找100-200的偶数,没有必要必须前闭后开,for (i = 100; i <= 200; i++)这样就很好

一些for循环的变种

#include<stdio.h>
int main()
{for (;;){printf("hello\n");}return 0;
}

这个代码会死循环,说明了判断部分为空默认为真。
for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问题。

2.请问下面代码输出几个hello

#include<stdio.h>
int main()
{int i = 0;int j = 0;for (i = 0; i < 3; i++){for (j = 0; j < 3; j++){printf("hello\n");}}return 0;
}
#include<stdio.h>
int main()
{int i = 0;int j = 0;for (i = 0; i < 3; i++){for (; j < 3; j++){printf("hello\n");}}return 0;
}

内层循环初始化的程序输出9个,未初始化的输出3个,

3.使用多余一个变量控制循环

#include<stdio.h>
int main()
{int x, y;for (x = 0, y = 0; x < 2 && y < 5; ++x, y++){printf("hehe\n");}return 0;
}

例题

请问循环要循环多少次?

#include <stdio.h>
int main()
{int i = 0;int k = 0;for(i =0,k=0; k=0; i++,k++)k++;return 0;
}

答案是一次没有,k=0;赋值表达式使判断部分为假。

do…while()循环

do语句的语法:

do
循环语句;
while(表达式);
循环语句是多条必须加{}成为代码块
循环语句至少执行一次这也使他成为了三大循环使用最少的了。

用do…while()循环1-10

#include<stdio.h>
int main()
{int i = 1;do{printf("%d ", i);i++;} while (i <= 10);return 0;
}

do while循环中的break和continue

do while循环和while循环都是调整部分在循环语句内部,用break没啥区别,但用continue会和while循环一样死循环

#include<stdio.h>
int main()
{int i = 1;do{if (5 == i){continue;}printf("%d ", i);i++;} while (i<=10);return 0;
}

上面程序的输出结果
1 2 3 4(一直循环,不输出数据)

循环语句练习

  1. 计算 n的阶乘。
#include<stdio.h>
int main()
{int i = 1;int ret = 1;int num = 0;scanf("%d", &num);for (i = 1; i <= num; i++){ret *= i;}printf("%d\n", ret);return 0;
}
  1. 计算 1!+2!+3!+……+10!
#include<stdio.h>
int main()
{int i = 1;int ret = 1;int sum = 0;for (i = 1; i <= 10; i++){ret *= i;sum += ret;}printf("%d\n", sum);return 0;
}
  1. 在一个有序数组中查找具体的某个数字n。(讲解二分查找)
    链接: 简单二分查找.
  1. 编写代码,演示多个字符从两端移动,向中间汇聚。
    链接: 演示多个字符从两端移动,向中间汇聚.
  1. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则
    提示登录成,如果三次均输入错误,则退出程序。
    链接: 模拟用户登录情景.

猜数字游戏
链接: 猜数字游戏.

goto语句

C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。
从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。

#include<stdio.h>
int main()
{again:printf("hello ");printf("world!\n");goto again;return 0;
}

这个程序的输出结果是一个死循环,用while循环语句也可以完成。
goto语句不能跨函数使用

但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过
程。
例如:一次跳出两层或多层循环。
多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。

关机程序

下面是使用goto语句的一个例子,然后使用循环的实现方式替换goto语句:

  1. 电脑运行起来后,1分中内关机
  2. 如果输入:我错了,就取消关机

对计算机命令关机shutdown -s -t 60 前面的英文是命令关机60是60s后
shutdown -a是停止关机
上面的这些命令通过system函数实现,头文件stdlib.h

goto

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int main()
{char input[20] = { 0 };system("shutdown -s -t 60");
again:printf("请注意,你的电脑在60秒内关机,如果输入:我错了,就取消关机\n");scanf("%s", input);if (strcmp(input, "我错了")==0){system("shutdown -a");}else{goto again;}return 0;
}

while循环

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int main()
{char input[20] = { 0 };system("shutdown -s -t 60");while (1){printf("请注意,你的电脑在60秒内关机,如果输入:我错了,就取消关机\n");scanf("%s", input);if (strcmp(input, "我错了") == 0){system("shutdown -a");break;}}return 0;
}

分支与循环语句(下)相关推荐

  1. php中可以实现分支,PHP中的分支及循环语句

    这次实践的都是PHP7的语法. 感觉是以前的5差别不是那么大,只是希望越来越快吧. $looking = isset($_GET['title']) || isset($_GET['author']) ...

  2. C语言全网最详细的分支和循环语句讲解

    文章目录 前言 一.什么是语句? 二.分支语句(选择结构) 1.if语句 1.1 悬空else 1.2 if书写形式的对比 1.3 小小练习巩固一下 2.switch语句 2.1 在switch语句中 ...

  3. C语言中阶第一篇:分支和循环语句透析,包含getchar和scanf的详细介绍(本篇循环只到while)

    业精于勤荒于嬉,行成于思毁于随. 在笔者初阶的文章里,已经介绍过分支和循环语句,不过由于是初阶,所以并不细致,今天我们正式打开了中阶的大门,开始一步一步的深入C语言的学习. C语言是结构化的程序设计语 ...

  4. 初始C语言-分支与循环语句

    一.语句 1. 什么是语句? C语句可分为以下五类: 1. 表达式语句 2. 函数调用语句 3. 控制语句 4. 复合语句 5. 空语句 本章后面介绍的是控制语句. 2. 控制语句: 用于控制程序的执 ...

  5. 第2节-分支和循环语句

    目录 1.什么是语句 2.分支语句(选择结构) 2.1.if语句 2.1.1.悬空else 2.1.2.if书写形式的对比 2.1.3练习 2.2.switch语句 2.2.1.在switch语句中的 ...

  6. 分支与循环语句C语言

    c语言是一门 结构化 的程序设计语言 分为以下三种结构 顺序结构 选择结构 循环结构 一.分支语句 if语句 单分支种类 种类1: if(表达式) 语句1 种类2: if(表达式) 语句1: else ...

  7. 【软件测试】结构化分支和循环语句的白盒测试

    文章目录 黑盒测试与白盒测试 分支语句的白盒测试 测试用例设计方法 举例 画流程图 设计语句覆盖测试用例 设计分支覆盖测试用例 设计路径覆盖测试用例 循环语句的白盒测试 简单循环 嵌套循环 连锁循环 ...

  8. 分支和循环语句---循环语句

    目录 3. 循环语句 3.1.while循环 3.1.1 while语句中的break和continue 3.2 for循环 3.2.1 for循环语法 3.2.2 for语句的循环控制变量 3.2. ...

  9. JAVA2实验3分支与循环语句,实验3控制语句:分支、循环.doc

    实验3控制语句:分支.循环 实验3 控制语句:分支.循环 一.实验目的 1.掌握 Java表达式语句与复合语句使用方法. 2. 理解 Java 程序语法结构,掌握顺序结构.选择结构的程序设计方法. 3 ...

最新文章

  1. 触类旁通,经典面试题最长公共子序列应该这么答
  2. 读取EXCEL文件内容
  3. C++之struct构造函数(2010-10-19 15:04:47)
  4. MongoDB 5.0新特性概览
  5. IOS基本数据类型之枚举
  6. 剑指Offer - 面试题56 - I. 数组中数字出现的次数(异或,分组)
  7. 高性能服务器机柜,TS系列网络服务器机柜
  8. 训练日志 2019.1.26
  9. 4.6上午口语练习 阅读词汇
  10. 吴恩达深度学习1.3练习_Neural Networks and Deep Learning
  11. 【开发工具】之windows下gnu makefile编写
  12. 趣学 C 语言(十)—— 控制台交互(getch() vs. getchar())
  13. Chrome 87 发布,获多年来最大性能提升
  14. 华为交换机路由器登陆密码详细操作
  15. Cisco Packet Tracer
  16. Android面试题之Activity篇
  17. go-http server使用hijack接管连接的管理
  18. rs485数据线接反_RS485引脚说明及接口说明
  19. OLYMP‘ARTS 2023奥艺大会中国推介会在北京盛大举行
  20. Python OpenCV crosscheck交叉特征点出现错误解决办法

热门文章

  1. Typora、Markdown中的公式,颜色汇总
  2. 5·12特别纪念 | 数据防“灾”,有“备”而来
  3. linux微信最新版无法打开问题解决
  4. Android FFmpegMediaMetadataRetriever获取歌曲的作者
  5. python将str写入csv_【python3】中str转成bytes类型后用csv.writerow()写入csv文件仍然出错...
  6. kafka topic消息分配partition规则
  7. python 网页爬虫,带登陆信息
  8. 淘宝无货源店群,新手开店怎么入门?掌握这几点让你少走弯路!
  9. 时间分割算法,Java将一段时间按星期来分割
  10. AppStore上线审核“App预览和截屏”chrome上的截屏参数