IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> [简明C语言]分支和循环P_4:循环 - for语句 -> 正文阅读

[C++知识库][简明C语言]分支和循环P_4:循环 - for语句


前言

第二章:分支和循环

循环语句,是用于重复执行某条语句的语句。

for循环语句的循环方式为利用一个条件来控制是否要继续反复执行这个语句,它是计算机的一种基本循环模式。当满足条件时进入循环,不满足跳出。


1. for语句

上一部分详细讲解了while循环,介绍了为什么需要for循环。

首先通过一段伪代码看一下for循环的语法:

for(表达式1;表达式2;表达式3)
	循环语句;

表达式1初始化部分,用于初始化循环变量。
表达式2条件判断部分,用于判断循环什么时候终止。
表达式3调整部分,用于循环条件的调整。

来看一段实际应用。

使用for循环打印1-10十个数字:

#include <stdio.h>

int main()
{
	int i = 0;
	//for(i=1/*初始化*/;i<=10/*判断部分*/;i++/*调整部分*/)
	for (i = 1; i <= 10; i++)
	{
		printf("%d ", i);
	}
	return 0;
}

运行结果:
运行结果
可以看到成功打印出了1-10十个数字。

执行流程图

for语句执行的流程:
流程图
可以发现,表达式1,即初始化部分在整个流程中只被执行了1次

对比for循环和while循环。

看下面两段代码:

int i = 0;
//实现相同的功能,使用while
i = 1;//初始化部分
while(i <= 10)//判断部分
{
	printf("%d ", i);
	i = i + 1;//调整部分
}

//实现相同的功能,使用for
for(i = 1; i < 11; i++)
{
	printf("%d ", i);
}

可以发现在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。

所以,for循环的风格更胜一筹;for循环使用的频率也最高。

break关键字

在上述例子中,加入break关键字:

#include <stdio.h>

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

运行结果
运行结果
i = 5的时候终止循环,打印出1,2,3,4。

只要break被执行,循环终止。

continue关键字

在上述例子中,加入continue关键字:

#include <stdio.h>

int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
		{
			continue;
		}
		printf("%d ", i);
	}
	return 0;
}

运行结果:
运行结果
可以发现打印结果跳过了5,打印出1,2,3,4,6,7,8,9。
并没有像while循环中出现死循环的情况。

这是因为for循环的调整部分不会被continue跳过。

在continue跳过打印5之后,仍会执行i++,此时i = 6,不会陷入死循环。

while循环中的continue跳过剩余部分后,有可能跳过调整部分;
for循环中的continue跳过剩余部分后,直接跳至调整部分。


2. for语句的循环控制变量

一些建议:

  1. 不可在for循环体内修改循环变量,防止for循环失去控制。
  2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。

建议1

尽量不要在for循环体内修改循环变量。
如果将上述代码修改为:

#include <stdio.h>

int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		printf("%d ", i);
		i = 5;//修改循环变量
	}
	return 0;
}

运行发现“:
运行结果
出现了死循环!

在内部修改了循环变量,使代码“走不出去”。

所以尽量不要在循环体内修改循环变量(包括嵌套)。

建议2

尽量for语句的循环控制变量的取值采用“前闭后开区间”写法。

前闭后开区间:

#include <stdio.h>

int main()
{
	int arr[10] = { 0 };
	int i = 0;
	for (i = 1; i < 10; i++)//前闭后开区间
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

前后闭区间:

#include <stdio.h>

int main()
{
	int arr[10] = { 0 };
	int i = 0;
	for (i = 1; i <= 9; i++)//前后闭区间
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

运行结果都是一样的:
运行结果
但是更建议写成前闭后开区间形式:
10
这里的10意味着循环了10次,代码风格和可读性更好。


3. for循环的变种

变种1

#include <stdio.h>

int main()
{
	//省略判断部分 - 判断部分恒为真
	for (;;)//不写
	{
		printf("666\n");
	}
	return 0;
}

运行结果为:
运行结果
可见在循环打印。

由此可见for循环的初始化、条件判断和调整部分都是可以省略不写的。

但是判断部分的省略意味着判断部分恒为真,即陷入死循环。

变种2

#include <stdio.h>

int main()
{
	int i = 0;
	int j = 0;
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			printf("666\n");
		}
	}
	return 0;
}

运行结果:
运行结果
外循环3次,内循环3次,共打印9次。

如果省略初始化部分,那么将打印几次呢?

#include <stdio.h>

int main()
{
	int i = 0;
	int j = 0;
	for (; i < 3; i++)
	{
		for (; j < 3; j++)
		{
			printf("666\n");
		}
	}
	return 0;
}

运行结果:
运行结果
只打印了3次,为什么呢?

这是因为i = 0执行第一次外循环时,直到内循环的j = 3时将跳出内循环。

然后i = 1执行第二次外循环时,由于没有初始化j,导致j = 3不满足循环的条件。

所以只执行了一次外循环!只打印了3次

不要随便省略初始化!!

变种3

#include <stdio.h>

int main()
{
	int x, y;
	for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
	{
		printf("666\n");
	}
	return 0;
}

运行结果
运行结果
可以发现,使用两个循环变量来控制变量也是可以的。


4. 题目

请问循环要循环多少次?

#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赋值
代表着把0赋值给k
0为假

因为条件判断部分为!!
所以根本没有进入循环!!

总结

本文详细介绍了循环语句中的for语句,对循环语句有一个深入的了解。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 10:54:41  更:2022-09-13 10:56:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 2:47:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码