当前课程知识点:C++语言程序设计基础 > 第2章 C++简单程序设计(二) > 循环结构 > for语句
for语句
l for语句语法形式:
l for语句的另一种形式:范围for语句:
for (声明:表达式)
语句
#include <iostream>
using namespace std;
int main() {
int n;
cout << "Enter a positive integer: ";
cin >> n;
cout << "Number " << n << " Factors ";
for (int k = 1; k <= n; k++)
if (n % k == 0)
cout << k << " ";
cout << endl;
return 0;
}
运行结果1:
Enter a positive integer: 36
Number 36 Factors 1 2 3 4 6 9 12 18 36
运行结果2:
Enter a positive integer: 7
Number 7 Factors 1 7
大家好
欢迎继续学习C++语言程序设计
这一节我来介绍for语句
for语句也是一个循环语句
那么它是C++语言中
功能最强的一个循环语句
通常我们用for语句
来处理循环次数已知的循环
除此而外呢
我们前面学过的while语句
do while语句
它们所解决的问题
也都可以转化为
由for语句来解决
那么for语句的特点
就是将循环控制变量的初始化
循环条件的判断
还有循环控制变量的增值
都放在循环头中
这样的可读性特别好 一目了然
下面一个例子呢
是从键盘输入一个整数
然后求出它的所有因子
我们看这个代码怎么实现
同学们肯定想到用循环 对吧
因为我们知道去求一个数的因子
那就从1开始数呗
1和它自己肯定是它的因子
然后2 3 4
一个个往上数
看谁能整除它
谁就是它的因子
这显然是一个循环的过程
我们前面讲了while循环
do while循环
大家会考虑
是否用这两个语句的哪一个
来解决这个问题呢
事实上在这个例题中我们引入
另外一个新的循环语句
for循环
我们来看代码
这个for循环是专门用来
处理循环次数已知的循环问题的
当然for循环的功能很强大
while循环
do while循环能解决的问题
用for循环也是能够解决的
只是说大多数时候呢
我们会选择用for循环
去做这种计数的循环
比如说在这个例题里面
我们看这个for语句
它后面这对括号里面有三个部分
第一个部分定义了一个k
并且初始化为1
这个是初始化的部分
第二个部分是一个控制条件
这里头的要求是k小于等于n
类似于while循环的控制条件
这里的k小于等于n呢
也是循环控制条件
当它为真的时候
for的循环体才会被执行
第三个部分是什么呢
是k自增1
k自增1的目的
是使得这个循环控制条件
能够有一个时刻变成假
也就是用这样的方式
来依次处理不同的数据
现在我们来看一下
这个for语句的执行流程
在这个例子里面
我还是用调试的办法给大家演示先按f10进入这个主函数中
单步执行
然后到这儿输入一个数
比如说我们输入一个36
好 我们看到n里面有这个36了
然后到for循环这儿来
执行这个for循环头之前我们看到
k里面还没有一个确定的值
是一个垃圾数据
因为它还没有被初始化
执行完了这个for循环头以后
k里面的值就是1了
那么这时候1
它当然是小于等于n的
所以这个k小于等于n
这个表达式它的值是真
看我们把鼠标指到这个地方
它可以显示它的值确实是true
所以进入这个循环体了
这个时候用1去除n
当然1可以整除任何数字
所以1是它的因子
输出这个k
我们看到这儿输出了1
然后光标停在这个地方
接着又进到循环头去
现在k进在循环又变成2了
还是小于等于n的
但是2能不能整除n呢 能够整除
所以2也是它的因子
好 这样我们一圈一圈这么转
看已经输出了1 2 3了
它们都是36的因子
当然接下来如果我们不想
一共转36圈
都这样单步地按F10这么去执行
希望它一下跳出这个循环体
那么怎么办呢
我们在循环体之外的一个地方
设一个断点
鼠标点一下这个红点
就是这个断点
这样我们可以按F5
它就把断点之前的内容
全部执行完 停到断点这儿
我们可以看一下
现在36的所有因子都输出来了
通过这个例子我们就看到了
for语句它是一个什么样的机制
现在我们来看
这个for语句的语法规定
for语句一共分这样几个部分
在它括号里面分三个部分
第一个部分是初始语句
在循环开始之前是先求解的
而且就求解这一次
一般来说
会在这里定义一个循环控制变量
给它一个初始化
中间这个表达式1呢
是一个逻辑表达式
它的值是布尔类型的
当它的值为真的时候
就会执行循环体
这跟while语句的
这个循环条件表达式是一样的
第三个部分这儿的表达式2
是在每次执行完了循环体以后
求解的
一般来说我们把循环变量的变化
放在这儿
比如说增值或者减1
或者说按更多的 不是1为步长
而是2 或更多的部长去变化
等等
总而言之
我们将需要变化的这种操作
放在表达式2里面
由于每次执行完循环体以后
这个表达式2会导致一些变量
发生变化
结果就使得再次判断
表达式1的时候
到某个时刻有可能为假
那就是循环结束的时机了
大家可以尝试
将原来我们用while循环
完成的例题改成用for循环
你看看是不是也可以完成
实际上for循环
是功能非常强大的一个循环
凡是可以用while循环完成的
也可以用for循环完成
for循环还有另外一种形式
我们看这个
另外一种形式的语法
这种形式简称范围for循环
那么这种形式主要用于
遍历一个容器中的序列
现在我们还没有学习容器类型
所以在后续章节中
我们学习容器类型以后
会给大家演示
for循环的另外一种语法形式
好 这一节就这些内容
-导学
--第1章导学
-计算机系统简介
--计算机系统简介
--计算机系统简介 测试题
-计算机语言和程序设计方法的发展
--计算机语言和程序设计方法的发展 测试题
-面向对象的基本概念
--面向对象的基本概念 测试题
-程序的开发过程
--程序的开发过程
--程序的开发过程 测试题
-信息的表示和储存
--计算机的数字系统
--数据的编码表示
--信息的表示和储存 测试题
-实验指导
-导学
--第二章导学
-C++语言概述
--C++语言概述 测试题
-基本数据类型、常量、变量
--程序举例
--基本数据类型、常量、变量 测试题
-运算与表达式
--运算与表达式 测试题
-实验二:简单程序设计(上)
-数据的输入和输出
--数据的输入和输出
--数据的输入和输出 测试题
-选择结构
--if语句
--switch语句
--选择结构 测试题
-循环结构
--for语句
--循环结构 测试题
-自定义类型
--自定义类型
--自定义类型
-第2章小结
--第二章小结
-实验二:C++简单程序设计(下)
-导学
--导学
-函数定义
--函数定义
--函数定义 测试题
-函数调用
--例3-2
--例3-3
--例3-4
--例3-5
--例3-6
--函数调用 测试题
-嵌套与递归
--例3-9
--例3-10
--嵌套与递归 测试题
-函数的参数传递
--函数的参数传递
--函数的参数传递 测试题
-引用类型
--引用类型 测试题
-含有可变参数的函数
--含有可变参数的函数 测试题
-内联函数
--内联函数 测试题
-constexpr函数
--CONSTEXPR函数课后习题
-带默认参数值的函数
--带默认参数值的函数 测试题
-函数重载
--函数重载 测试题
-C++系统函数
--C++系统函数习题
-第3章小结
--第三章小结
-实验三(上)函数的应用
-实验三(下)函数的应用
-导学
--导学
-面向对象程序的基本特点
--面向对象程序的基本特点 测试题
-类和对象
--类和对象的定义
--类和对象 测试题
-构造函数
--构造函数基本概念
--委托构造函数
--复制构造函数
--构造函数 测试题
-析构函数
--析构函数
--析构函数 测试题
-类的组合
--类的组合
--类的组合程序举例
--前向引用声明
--类的组合 测试题
-UML简介
--UML简介
--UML简介课后习题
-结构体与联合体
--结构体与联合体 测试题
-枚举类
--枚举类
--枚举类 测试题
-第4章小结
--第四章小结
-实验四(上)
--实验四(上)
-实验四(下)
--实验四(下)
-导学
--导学
-标识符的作用域与可见性
--标识符的作用域与可见性 测试题
-对象的生存期
--对象的生存期
--对象的生存期 测试题
-类的静态成员
--类的静态成员 测试题
-类的友元
--类的友元 测试题
-共享数据的保护
--共享数据的保护 测试题
-多文件结构和预编译命令
--多文件结构和预编译命令 测试题
-第5章小结
--小结
-实验五
--实验五
-导学
--导学
-数组的定义与初始化
--数组的定义与使用
--一维数组应用举例
--数组的定义与初始化 测试题
-数组作为函数的参数
--数组作为函数的参数 测试题
-对象数组
--对象数组
--对象数组 测试题
-基于范围的for循环
-指针的定义和运算
--指针的定义和运算 测试题
-综合实例
--综合实例
-实验六(上)
--实验六上
-指针与数组
--指针数组
--指针与数组 测试题
-指针与函数
--指针类型的函数
--指向函数的指针
--指针与函数 测试题
-对象指针
--对象指针
--对象指针 测试题
-动态内存分配
--动态内存分配 测试题
-智能指针
--智能指针
-vector对象
--vector对象
--vector对象 测试题
-对象复制与移动
--移动构造
--对象复制与移动 测试题
-字符串
--C风格字符串
--string类
--字符串 测试题
-第6章小结
--第六章小结
-综合实例
--综合实例
-实验六(下)
--实验六(下)