25.循环语句-for
25.1 知识点
for 循环基本语法
for
循环的基本语法结构如下:
for ( /*初始化表达式*/; /*条件表达式*/; /*增量表达式*/)
{
// 循环代码逻辑
}
- 第一个空位(初始化表达式):通常用于声明一个临时变量,作为计数器。
- 第二个空位(条件表达式):决定是否进入循环,返回一个布尔类型的结果(可以是布尔变量、关系运算符、逻辑运算符或算术运算符)。
- 第三个空位(增量表达式):用于对第一个空位中声明的变量进行自增或自减操作。
注意:
- 第一个空位只在第一次进入
for
循环时执行。 - 第二个空位会在每次进入
for
循环时判断,决定是否继续执行循环体。 - 第三个空位的操作会在每次循环完毕后执行。
示例:
for (int i = 0; i < 10; i++)
{
cout << i << endl;
}
// 执行完循环体后,输出 "循环外的逻辑"
cout << "循环外的逻辑" << endl;
for (int i = 10; i >= 0; i--)
{
cout << i << endl;
}
// 执行完循环体后,输出 "循环外的逻辑"
cout << "循环外的逻辑" << endl;
每个空位可以根据需要进行自定义。例如,可以在第一个空位声明多个变量,在第二个空位使用任何能够返回布尔值的表达式,在第三个空位执行任何逻辑。
for (int i = 0, j = 0; i < 10 && j < 0; ++i, j = j + 1)
{
// 循环逻辑
}
for 循环支持嵌套使用
for
循环可以嵌套在其他语句中,形成多重循环结构。以下是一个嵌套 for
循环的示例:
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
cout << i + j << endl;
}
while (true)
{
// 无限循环逻辑
}
if (true)
{
// 条件判断
}
do
{
// 循环体
} while (true);
switch (i)
{
default:
break;
}
}
在 for
循环体内,可以嵌套多种语句,如 while
、if
、do-while
和 switch
等。
for 循环特殊写法
for
循环可以使用一些特殊写法来实现不同的控制逻辑。
死循环:
for
循环可以写成死循环形式。以下是一个死循环的示例:for (;;) { cout << "for 循环的死循环" << endl; }
不写初始化和条件判断:
初始化表达式和循环条件也可以不写在for
语句的空位中,而是放在循环体前或循环体后。以下是两个示例:- 在循环前声明变量,不写初始化表达式:
int k = 0; for (; k < 10;) { cout << k << endl; ++k; // 或者 k++, k += 1 }
- 不在
for
循环的条件表达式中写判断条件:
for (k = 0; ; ++k) { if (k < 10) break; }
for 循环与 while 循环的对比
for
循环和 while
循环的主要区别在于用途和结构。两者都可以实现相同的循环逻辑,但通常 for
循环用于明确知道循环次数时,而 while
循环用于条件未知时。
for 循环:
for
循环通常用于精确控制某个范围的循环,尤其适合在循环次数已知的情况下使用。for (int i = 0; i < 10; i++) { // 循环体 }
while 循环:
while
循环更适合在循环次数不确定,依赖于某个条件的情况下使用。int j = 0; while (j < 10) { // 循环体 ++j; }
25.2 知识点代码
Lesson25_循环语句_for.cpp
#include <iostream>
using namespace std;
int main()
{
std::cout << "for循环语句\n";
#pragma region 知识点一 for循环基本语法
//for ( /*初始化表达式*/; /*条件表达式*/; /*增量表达式*/)
//{
// //循环代码逻辑
//}
//第一个空位(初始表达式): 一般是用来声明一个临时变量,用来计数用的
//第二个空位(条件表达式):表示进入循环的条件 一个bool类型的结果(bool变量 关系运算符 逻辑运算符 算数运算符)
//第三个空位(增量表达式):用第一个空中声明的变量 进行一个 自增减运算
//第一个空位 只有在第一次进入for循环时 才会去执行
//第二个空位 是每次进入for循环时都会去判断 决定了是否继续循环
for (int i = 0; i < 10; i++)
{
cout << i << endl;
//执行完这个循环语句块中的所有逻辑后
//最后才会执行第三个空中的代码
}
cout << "循环外的逻辑" << endl;
for (int i = 10; i >= 0; i--)
{
cout << i << endl;
}
cout << "循环外的逻辑" << endl;
//每个空位 可以按照规则进行书写
//第一个空位 就是声明变量 所以可以连续声明的
//第二个空位 就是进入条件 只要是能够返回真假的表达式都是可以的
//第三个空位 就是执行完一次循环逻辑过后要做的事情 做啥都行
/*for (int i = 0, j = 0; i < 10 && j < 0; ++i, j = j + 1)
{
}*/
#pragma endregion
#pragma region 知识点二 for循环支持嵌套使用
//多种语句嵌套
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
cout << i + j << endl;
}
while (true)
{
}
if (true)
{
}
do
{
} while (true);
switch (i)
{
default:
break;
}
}
#pragma endregion
#pragma region 知识点三 for循环特殊写法
//for循环时可以写死循环
/*for (;;)
{
cout << "for循环的死循环" << endl;
}*/
//不写在空位里 而是在循环前和循环体最后写也是可以的
//不在空位里写初始和循环体末尾条件
int k = 0;
for (;k < 10;)
{
cout << k << endl;
++k;//k++,k+=1;
}
//不在空位里写判断条件
for (k = 0; ; ++k)
{
if (k < 10)
break;
}
#pragma endregion
#pragma region 知识点四 for循环与while循环的对比
//所有和循环相关的逻辑
//使用目前学习过的循环语句都可以实现
// for循环 一般用来准确的得到某一个范围中的所有数
for (int i = 0; i < 10; i++)
{
}
int j = 0;
while (j < 10)
{
//....................
++j;
}
#pragma endregion
}
25.3 练习题
输出1到100之间的整数(包含本身)
for (int i = 1; i <= 100; i++)
{
cout << i << endl;
}
求1~100之间所有偶数的和
int sum = 0;
//第一步:得到1~100之间的数
for (int i = 1; i <= 100; i++)
{
//第二步:先判断 是不是偶数 是才累加
if (i % 2 == 0)
sum += i;
}
cout << sum << endl;
sum = 0;
for (int i = 2; i <= 100; i += 2)
{
sum += i;
}
cout << sum << endl;
找出100~999之间的水仙花数
例如:153 = 111 + 555 + 333 这个数就是水仙花数
//第一步:得到100~999之间的数
for (int i = 100; i <= 999; i++)
{
//第二步:得到百位、十位、个位
int bai = i / 100;
int shi = i % 100 / 10;
int ge = i % 10;
//370 = 3 * 3 *3 + 7 *7*7 = 27 + 49*7 = 27 + 343 = 370
//第三步:判断 各位置的 立方 相加 是不是等于原来这个数
if (bai * bai * bai + shi * shi * shi + ge * ge * ge == i)
cout << i << endl;
}
在控制台上输出九九乘法表
for (int i = 1; i <= 9; i++)
{
// 1 1X1=1 空行
// 2 1X2=2 2X2=4 空行
// 3 1X3=3 2X3=6 3X3=9 空行
// 每一行 第一个数 是从1开始 并且是小于等于 当前行数的
for (int j = 1; j <= i; j++)
{
//j就是第一个数
//i就是第二个数
cout << j << "X" << i << "=" << j * i << " ";
}
//空行 因为之前一行的内容需要连续打印 不能空行
//应该链接完毕了 再来空行
cout << endl;
}
在控制台上输出如下10*10的空心星型方阵
**********
* *
* *
* *
* *
* *
* *
* *
* *
**********
for (int j = 0; j < 10; j++)
{
//10列
for (int i = 0; i < 10; i++)
{
//每一个行的规则
//第一行和最后一行 要全部打印星号
if (j == 0 || j == 9)
cout << "*";
else
{
//其他就按照现在的规则
if (i == 0 || i == 9)
cout << "*";
else
cout << " ";
}
}
cout << endl;
}
在控制台上输出如下10*10的三角形方阵
* 1 1
** 2 2
*** 3 3
**** 4 4
*****
******
*******
********
*********
***********
//10行
for (int i = 1; i <= 10; i++)
{
//10列
//打印n个星号 n=行数
for (int j = 1; j <= i; j++)
{
//连接打印
cout << "*";
}
//空行
cout << endl;
}
在控制台上输出如下10行的三角形方阵
* 1 1 -> 2i - 1 9 10 - i
*** 2 3 -> 2i - 1 8 10 - i
***** 3 5 7
******* 4 7 6
********* 5 9 5
*********** 6 11 4
************* 7 13 3
*************** 8 15 2
***************** 9 17 1
******************* 10 19 0
//10行
for (int i = 1; i <= 10; i++)
{
//空格
for (int k = 1; k <= 10 - i; k++)
{
cout << " ";
}
//星号
for (int j = 1; j <= 2*i - 1; j++)
{
//这一行的内容要连着打印 所以不能空行
cout << "*";
}
//空行
cout << endl;
}
25.4 练习题代码
Lesson25_练习题.cpp
#include <iostream>
using namespace std;
int main()
{
std::cout << "for循环练习题\n";
#pragma region 练习题一
//输出1到100之间的整数(包含本身)
for (int i = 1; i <= 100; i++)
{
cout << i << endl;
}
#pragma endregion
#pragma region 练习题二
//求1~100之间所有偶数的和
int sum = 0;
//第一步:得到1~100之间的数
for (int i = 1; i <= 100; i++)
{
//第二步:先判断 是不是偶数 是才累加
if (i % 2 == 0)
sum += i;
}
cout << sum << endl;
sum = 0;
for (int i = 2; i <= 100; i += 2)
{
sum += i;
}
cout << sum << endl;
#pragma endregion
#pragma region 练习题三
/*找出100~999之间的水仙花数
例如:153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3 这个数就是水仙花数*/
//第一步:得到100~999之间的数
for (int i = 100; i <= 999; i++)
{
//第二步:得到百位、十位、个位
int bai = i / 100;
int shi = i % 100 / 10;
int ge = i % 10;
//370 = 3 * 3 *3 + 7 *7*7 = 27 + 49*7 = 27 + 343 = 370
//第三步:判断 各位置的 立方 相加 是不是等于原来这个数
if (bai * bai * bai + shi * shi * shi + ge * ge * ge == i)
cout << i << endl;
}
#pragma endregion
#pragma region 练习题四
//在控制台上输出九九乘法表
for (int i = 1; i <= 9; i++)
{
// 1 1X1=1 空行
// 2 1X2=2 2X2=4 空行
// 3 1X3=3 2X3=6 3X3=9 空行
// 每一行 第一个数 是从1开始 并且是小于等于 当前行数的
for (int j = 1; j <= i; j++)
{
//j就是第一个数
//i就是第二个数
cout << j << "X" << i << "=" << j * i << " ";
}
//空行 因为之前一行的内容需要连续打印 不能空行
//应该链接完毕了 再来空行
cout << endl;
}
#pragma endregion
#pragma region 练习题五
/*在控制台上输出如下10 * 10的空心星型方阵
**********
* *
* *
* *
* *
* *
* *
* *
* *
**********/
//10行
for (int j = 0; j < 10; j++)
{
//10列
for (int i = 0; i < 10; i++)
{
//每一个行的规则
//第一行和最后一行 要全部打印星号
if (j == 0 || j == 9)
cout << "*";
else
{
//其他就按照现在的规则
if (i == 0 || i == 9)
cout << "*";
else
cout << " ";
}
}
cout << endl;
}
#pragma endregion
#pragma region 练习题六
/*在控制台上输出如下10 * 10的三角形方阵
* 1 1
** 2 2
*** 3 3
**** 4 4
*****
******
*******
********
*********
***********/
//10行
for (int i = 1; i <= 10; i++)
{
//10列
//打印n个星号 n=行数
for (int j = 1; j <= i; j++)
{
//连接打印
cout << "*";
}
//空行
cout << endl;
}
#pragma endregion
#pragma region 练习题七
/*在控制台上输出如下10行的三角形方阵
* 1 1 -> 2i - 1 9 10 - i
*** 2 3 -> 2i - 1 8 10 - i
***** 3 5 7
******* 4 7 6
********* 5 9 5
*********** 6 11 4
************* 7 13 3
*************** 8 15 2
***************** 9 17 1
******************* 10 19 0 */
//10行
for (int i = 1; i <= 10; i++)
{
//空格
for (int k = 1; k <= 10 - i; k++)
{
cout << " ";
}
//星号
for (int j = 1; j <= 2*i - 1; j++)
{
//这一行的内容要连着打印 所以不能空行
cout << "*";
}
//空行
cout << endl;
}
#pragma endregion
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com