分支与循环语句(下)
循环语句
- 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语句的循环控制变量
建议:
- 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
- 建议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(一直循环,不输出数据)
循环语句练习
- 计算 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!+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;
}
- 在一个有序数组中查找具体的某个数字n。(讲解二分查找)
链接: 简单二分查找.
- 编写代码,演示多个字符从两端移动,向中间汇聚。
链接: 演示多个字符从两端移动,向中间汇聚.
- 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则
提示登录成,如果三次均输入错误,则退出程序。
链接: 模拟用户登录情景.
猜数字游戏
链接: 猜数字游戏.
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分中内关机
- 如果输入:我错了,就取消关机
对计算机命令关机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;
}
分支与循环语句(下)相关推荐
- php中可以实现分支,PHP中的分支及循环语句
这次实践的都是PHP7的语法. 感觉是以前的5差别不是那么大,只是希望越来越快吧. $looking = isset($_GET['title']) || isset($_GET['author']) ...
- C语言全网最详细的分支和循环语句讲解
文章目录 前言 一.什么是语句? 二.分支语句(选择结构) 1.if语句 1.1 悬空else 1.2 if书写形式的对比 1.3 小小练习巩固一下 2.switch语句 2.1 在switch语句中 ...
- C语言中阶第一篇:分支和循环语句透析,包含getchar和scanf的详细介绍(本篇循环只到while)
业精于勤荒于嬉,行成于思毁于随. 在笔者初阶的文章里,已经介绍过分支和循环语句,不过由于是初阶,所以并不细致,今天我们正式打开了中阶的大门,开始一步一步的深入C语言的学习. C语言是结构化的程序设计语 ...
- 初始C语言-分支与循环语句
一.语句 1. 什么是语句? C语句可分为以下五类: 1. 表达式语句 2. 函数调用语句 3. 控制语句 4. 复合语句 5. 空语句 本章后面介绍的是控制语句. 2. 控制语句: 用于控制程序的执 ...
- 第2节-分支和循环语句
目录 1.什么是语句 2.分支语句(选择结构) 2.1.if语句 2.1.1.悬空else 2.1.2.if书写形式的对比 2.1.3练习 2.2.switch语句 2.2.1.在switch语句中的 ...
- 分支与循环语句C语言
c语言是一门 结构化 的程序设计语言 分为以下三种结构 顺序结构 选择结构 循环结构 一.分支语句 if语句 单分支种类 种类1: if(表达式) 语句1 种类2: if(表达式) 语句1: else ...
- 【软件测试】结构化分支和循环语句的白盒测试
文章目录 黑盒测试与白盒测试 分支语句的白盒测试 测试用例设计方法 举例 画流程图 设计语句覆盖测试用例 设计分支覆盖测试用例 设计路径覆盖测试用例 循环语句的白盒测试 简单循环 嵌套循环 连锁循环 ...
- 分支和循环语句---循环语句
目录 3. 循环语句 3.1.while循环 3.1.1 while语句中的break和continue 3.2 for循环 3.2.1 for循环语法 3.2.2 for语句的循环控制变量 3.2. ...
- JAVA2实验3分支与循环语句,实验3控制语句:分支、循环.doc
实验3控制语句:分支.循环 实验3 控制语句:分支.循环 一.实验目的 1.掌握 Java表达式语句与复合语句使用方法. 2. 理解 Java 程序语法结构,掌握顺序结构.选择结构的程序设计方法. 3 ...
最新文章
- 触类旁通,经典面试题最长公共子序列应该这么答
- 读取EXCEL文件内容
- C++之struct构造函数(2010-10-19 15:04:47)
- MongoDB 5.0新特性概览
- IOS基本数据类型之枚举
- 剑指Offer - 面试题56 - I. 数组中数字出现的次数(异或,分组)
- 高性能服务器机柜,TS系列网络服务器机柜
- 训练日志 2019.1.26
- 4.6上午口语练习 阅读词汇
- 吴恩达深度学习1.3练习_Neural Networks and Deep Learning
- 【开发工具】之windows下gnu makefile编写
- 趣学 C 语言(十)—— 控制台交互(getch() vs. getchar())
- Chrome 87 发布,获多年来最大性能提升
- 华为交换机路由器登陆密码详细操作
- Cisco Packet Tracer
- Android面试题之Activity篇
- go-http server使用hijack接管连接的管理
- rs485数据线接反_RS485引脚说明及接口说明
- OLYMP‘ARTS 2023奥艺大会中国推介会在北京盛大举行
- Python OpenCV crosscheck交叉特征点出现错误解决办法
热门文章
- Typora、Markdown中的公式,颜色汇总
- 5·12特别纪念 | 数据防“灾”,有“备”而来
- linux微信最新版无法打开问题解决
- Android FFmpegMediaMetadataRetriever获取歌曲的作者
- python将str写入csv_【python3】中str转成bytes类型后用csv.writerow()写入csv文件仍然出错...
- kafka topic消息分配partition规则
- python 网页爬虫,带登陆信息
- 淘宝无货源店群,新手开店怎么入门?掌握这几点让你少走弯路!
- 时间分割算法,Java将一段时间按星期来分割
- AppStore上线审核“App预览和截屏”chrome上的截屏参数