22、使用 for 语句创建计数循环

使用 for 语句创建计数循环

在编程中, for 语句是一种强大的工具,可用于创建计数循环,实现各种功能。下面将详细介绍 for 语句的多种应用场景及示例代码。

1. 绘制星星

首先,我们来看一个简单的程序,它允许用户输入星星的数量,并在画布上绘制相应数量的星星。

String input;
input = showInputDialog("Enter the number of stars:");
int stars;
stars = int(input);
for (int count = 1; count <= stars; count = count + 1)
{
    stroke(255, 255, 255);
    point( random(width), random(height) );
}

这个程序的流程如下:
1. 提示用户输入星星的数量。
2. 将用户输入的字符串转换为整数。
3. 使用 for 循环,循环次数为用户输入的星星数量。
4. 在每次循环中,设置笔触颜色为白色,并在画布上随机位置绘制一个点。

2. 计算阶乘

阶乘是一个数学概念,对于一个非负整数 n ,其阶乘 n! 是所有小于或等于 n 的正整数的乘积。我们可以使用 for 语句来计算阶乘。

int integer;
integer = 5;
int factorial;
factorial = 1;
for (int count = 1; count <= integer; count = count + 1)
{
    factorial = factorial * count;
    println(count + "! = " + factorial);
}
println("Answer: " + integer + "! is " + factorial);

这个程序的执行步骤如下:
1. 初始化变量 integer 为 5,表示要计算 5 的阶乘。
2. 初始化变量 factorial 为 1。
3. 使用 for 循环,从 1 到 integer 进行循环。
4. 在每次循环中,将 factorial 乘以当前的 count 值,并更新 factorial 的值。
5. 打印当前 count 的阶乘结果。
6. 循环结束后,打印最终的阶乘结果。

下面是不同 integer 值的运行结果:
| integer 值 | 输出结果 |
| ---- | ---- |
| 5 | 1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
Answer: 5! is 120 |
| 6 | 1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
Answer: 6! is 720 |
| 1 | 1! = 1
Answer: 1! is 1 |
| 0 | Answer: 0! is 1 |

需要注意的是,当 integer 为 0 时, for 循环的条件一开始就为假,循环体不会执行,但由于 factorial 初始化为 1,最终结果仍然正确。

另外,阶乘的值增长非常快,当 integer 超过 16 时, int 类型可能会溢出。我们可以使用 long 类型来存储更大的阶乘值。

int integer;
integer = 5;
long factorial;
factorial = 1;
for (int count = 1; count <= integer; count = count + 1)
{
    factorial = factorial * count;
    println(count + "! = " + factorial);
}
println("Answer: " + integer + "! is " + factorial);
3. 嵌套 for 循环

嵌套 for 循环是指在一个 for 循环内部再嵌套一个 for 循环。下面通过几个例子来介绍嵌套 for 循环的应用。

3.1 教室座位示例

假设有一个教室,有 4 行,每行有 6 个座位。我们可以使用嵌套 for 循环来遍历所有座位。

for (int row = 1; row <= 5; row = row + 1)
{
    println("Row: " + row);
    for (int seat = 1; seat <= 6; seat = seat + 1)
    {
        print(" Seat " + seat);
    }
    println(" -- end of row");
}

这个程序的执行流程如下:
1. 外层 for 循环控制行数,从 1 到 5。
2. 在每次外层循环中,打印当前行号。
3. 内层 for 循环控制每行的座位号,从 1 到 6。
4. 在内层循环中,打印当前座位号。
5. 内层循环结束后,打印“ – end of row”表示该行结束。

运行结果如下:

Row: 1
 Seat 1 Seat 2 Seat 3 Seat 4 Seat 5 Seat 6 -- end of row
Row: 2
 Seat 1 Seat 2 Seat 3 Seat 4 Seat 5 Seat 6 -- end of row
Row: 3
 Seat 1 Seat 2 Seat 3 Seat 4 Seat 5 Seat 6 -- end of row
Row: 4
 Seat 1 Seat 2 Seat 3 Seat 4 Seat 5 Seat 6 -- end of row
Row: 5
 Seat 1 Seat 2 Seat 3 Seat 4 Seat 5 Seat 6 -- end of row
3.2 像素操作示例

我们可以使用嵌套 for 循环来操作画布上的每个像素。

size(300, 200);
for (int row = 0; row < height; row = row + 1)
{
    for (int column = 0; column < width; column = column + 1)
    {
        stroke(random(256), random(256), random(256));
        point(column, row);
    }
}

这个程序的执行步骤如下:
1. 设置画布大小为 300x200 像素。
2. 外层 for 循环控制行号,从 0 到画布高度。
3. 内层 for 循环控制列号,从 0 到画布宽度。
4. 在每次内层循环中,设置随机笔触颜色,并在当前像素位置绘制一个点。

我们还可以通过修改循环步长和绘制图形来实现不同的效果,例如绘制不同大小的随机颜色方块。

import static javax.swing.JOptionPane.*;
size(300, 200);
String input;
input = showInputDialog("Enter tile size:");
int tile;
tile = int(input);
for (int row = 0; row < height; row = row + tile)
{
    for (int column = 0; column < width; column = column + tile)
    {
        noStroke();
        fill(random(256), random(256), random(256));
        rect(column, row, tile, tile);
    }
}

这个程序的操作步骤如下:
1. 导入 javax.swing.JOptionPane 包。
2. 设置画布大小为 300x200 像素。
3. 提示用户输入方块大小。
4. 将用户输入的字符串转换为整数。
5. 使用嵌套 for 循环,外层循环控制行号,内层循环控制列号,循环步长为用户输入的方块大小。
6. 在每次内层循环中,关闭笔触,设置随机填充颜色,并绘制一个指定大小的方块。

4. 总结

通过以上示例,我们可以看到 for 语句在编程中的强大功能。它可以用于计数、重复执行一组操作、嵌套循环等。在使用 for 语句时,需要注意循环条件和循环变量的更新,以确保循环能够正确执行。同时,对于一些复杂的问题,嵌套 for 循环可以帮助我们更方便地处理。

下面是一个简单的 for 循环使用总结流程图:

graph TD;
    A[开始] --> B[初始化循环变量];
    B --> C{循环条件是否满足};
    C -- 是 --> D[执行循环体];
    D --> E[更新循环变量];
    E --> C;
    C -- 否 --> F[结束];
5. 练习

以下是一些使用 for 语句的练习,你可以尝试完成这些练习来巩固所学知识。
1. 编写 for 语句,在控制台输出:

1
2
3
4
5
6

代码示例:

for (int i = 1; i <= 6; i++) {
    println(i);
}
  1. 编写 for 语句,在控制台输出:
2
3
4
5

代码示例:

for (int i = 2; i <= 5; i++) {
    println(i);
}
  1. 编写 for 语句,在控制台输出:
2
4
6
8
10
12

代码示例:

for (int i = 2; i <= 12; i += 2) {
    println(i);
}
  1. 编写 for 语句,在控制台输出:
5
10
15
20
25
30

代码示例:

for (int i = 5; i <= 30; i += 5) {
    println(i);
}
  1. 编写 for 语句,在控制台输出 10 次“Processing”。
for (int i = 0; i < 10; i++) {
    println("Processing");
}
  1. 编写 for 语句,在控制台输出:
line: 1
line: 2
line: 3
line: 4
line: 5
line: 6
line: 7
line: 8
line: 9

代码示例:

for (int i = 1; i <= 9; i++) {
    println("line: " + i);
}
  1. 编写 for 语句,在控制台输出:
50
45
40
35
30
25
20
15
10
5
0

代码示例:

for (int i = 50; i >= 0; i -= 5) {
    println(i);
}
  1. 编写 for 语句,在控制台输出 1 到 6 的整数的平方:
1
4
9
16
25
36

代码示例:

for (int i = 1; i <= 6; i++) {
    println(i * i);
}
  1. 编写 for 语句,在控制台输出:
0
20
40
60
80
100
120
140
160
180
200

代码示例:

for (int i = 0; i <= 200; i += 20) {
    println(i);
}
  1. 修改上一个程序,设置画布大小为 200x200 像素,并在 for 语句中添加 line() 函数调用,在画布上绘制指定线段。
    代码示例:
size(200, 200);
for (int i = 0; i <= 200; i += 20) {
    line(0, i, width, i);
    println(i);
}

11 - 15 题涉及到对 line() 函数的不同修改,你可以根据具体要求进行调整。
16. 编写 for 语句,在控制台输出:

30
60
90
120
150
180

代码示例:

for (int i = 30; i <= 180; i += 30) {
    println(i);
}
  1. 修改上一个程序,设置画布大小为 200x200 像素,并在 for 语句中添加 ellipse() 函数调用,在画布上绘制直径为 20 像素的圆。
    代码示例:
size(200, 200);
for (int i = 30; i <= 180; i += 30) {
    ellipse(i, height / 2, 20, 20);
    println(i);
}
  1. 编写 for 语句,在控制台输出:
150
125
100
75
50

代码示例:

for (int i = 150; i >= 50; i -= 25) {
    println(i);
}
  1. 修改上一个程序,设置画布大小为 200x200 像素,并在 for 语句中添加 rect() 函数调用,在画布上绘制正方形。
    代码示例:
size(200, 200);
for (int i = 150; i >= 50; i -= 25) {
    rect(i, height / 2 - 25 / 2, 25, 25);
    println(i);
}
  1. 编写程序,设置画布大小为 200x200 像素,使用 for 语句在画布上随机位置绘制 5 个直径为 20 像素的圆。
    代码示例:
size(200, 200);
for (int i = 0; i < 5; i++) {
    ellipse(random(width), random(height), 20, 20);
}
  1. 修改上一个程序,在 for 语句中插入 fill() 函数调用,使每个圆具有随机填充颜色。
    代码示例:
size(200, 200);
for (int i = 0; i < 5; i++) {
    fill(random(256), random(256), random(256));
    ellipse(random(width), random(height), 20, 20);
}
  1. 修改上一个程序,使 for 语句绘制 100 个圆。
    代码示例:
size(200, 200);
for (int i = 0; i < 100; i++) {
    fill(random(256), random(256), random(256));
    ellipse(random(width), random(height), 20, 20);
}
  1. 编写程序,使用 for 循环计算所有正整数到某个数的和。
    代码示例:
int number = 5;
int sum = 0;
for (int i = 1; i <= number; i++) {
    println(i);
    sum += i;
}
println("Total: " + sum);
  1. 修改上一个程序,让用户输入该数字。
    代码示例:
import static javax.swing.JOptionPane.*;
String input = showInputDialog("Enter a number:");
int number = int(input);
int sum = 0;
for (int i = 1; i <= number; i++) {
    println(i);
    sum += i;
}
println("Total: " + sum);
println("Gauss: " + number * (number + 1) / 2);

通过完成这些练习,你可以更好地掌握 for 语句的使用,提高编程能力。

5. 练习(续)

23. 计算正整数和

编写程序,使用 for 循环计算所有正整数到某个数的和。

int number = 5;
int sum = 0;
for (int i = 1; i <= number; i++) {
    println(i);
    sum += i;
}
println("Total: " + sum);

操作步骤如下:
1. 定义变量 number 并赋值为 5,表示要计算到 5 的正整数和。
2. 定义变量 sum 并初始化为 0,用于存储累加的和。
3. 使用 for 循环,从 1 到 number 进行循环。
4. 在每次循环中,打印当前的正整数 i ,并将其累加到 sum 中。
5. 循环结束后,打印累加的总和。

24. 用户输入计算正整数和

修改上一个程序,让用户输入该数字。

import static javax.swing.JOptionPane.*;
String input = showInputDialog("Enter a number:");
int number = int(input);
int sum = 0;
for (int i = 1; i <= number; i++) {
    println(i);
    sum += i;
}
println("Total: " + sum);
println("Gauss: " + number * (number + 1) / 2);

操作步骤如下:
1. 导入 javax.swing.JOptionPane 包,用于弹出输入对话框。
2. 使用 showInputDialog 函数弹出对话框,提示用户输入一个数字,并将用户输入的内容存储在 input 变量中。
3. 将 input 转换为整数类型,存储在 number 变量中。
4. 定义变量 sum 并初始化为 0,用于存储累加的和。
5. 使用 for 循环,从 1 到 number 进行循环。
6. 在每次循环中,打印当前的正整数 i ,并将其累加到 sum 中。
7. 循环结束后,打印累加的总和。
8. 使用高斯公式 number * (number + 1) / 2 计算理论上的总和并打印,用于验证结果。

6. 总结与回顾

6.1 for 语句的核心要点
  • 计数功能 for 循环可以方便地对数字序列进行计数,通过设置合适的初始值、循环条件和步长,能够精确控制计数范围。例如在计算阶乘和输出数字序列的练习中,都充分体现了这一点。
  • 重复操作 :可以将一组操作重复执行指定的次数,提高代码的复用性。如绘制星星、绘制图形等示例,通过循环不断执行绘制操作。
  • 嵌套循环 :嵌套 for 循环可以处理更复杂的任务,如遍历教室座位和操作画布像素。外层循环控制大的范围,内层循环在每个外层循环的迭代中进行更细致的操作。
6.2 注意事项
  • 循环条件 :要确保循环条件的正确性,避免出现无限循环或循环次数不足的情况。例如在计算阶乘时,循环条件 count <= integer 保证了循环能够正确计算到指定数字的阶乘。
  • 数据类型 :对于可能产生较大结果的计算,如阶乘,要注意数据类型的选择,避免数据溢出。可以使用 long 类型替代 int 类型来存储更大的数值。

7. 拓展思考

7.1 优化代码

在实际编程中,可以对代码进行优化,提高代码的性能和可读性。例如,在计算正整数和的程序中,可以使用更简洁的方式,或者添加错误处理机制,防止用户输入非法数据。

7.2 应用场景

for 循环在很多领域都有广泛的应用,如游戏开发中物体的移动和动画效果、数据处理中对数组元素的遍历和计算等。可以根据不同的需求,灵活运用 for 循环来解决实际问题。

8. 练习总结表格

练习编号 题目描述 代码示例
1 在控制台输出 1 - 6 for (int i = 1; i <= 6; i++) { println(i); }
2 在控制台输出 2 - 5 for (int i = 2; i <= 5; i++) { println(i); }
3 在控制台输出 2, 4, 6, 8, 10, 12 for (int i = 2; i <= 12; i += 2) { println(i); }
4 在控制台输出 5, 10, 15, 20, 25, 30 for (int i = 5; i <= 30; i += 5) { println(i); }
5 在控制台输出 10 次“Processing” for (int i = 0; i < 10; i++) { println("Processing"); }
6 在控制台输出 line: 1 - line: 9 for (int i = 1; i <= 9; i++) { println("line: " + i); }
7 在控制台输出 50, 45, 40, 35, 30, 25, 20, 15, 10, 5, 0 for (int i = 50; i >= 0; i -= 5) { println(i); }
8 在控制台输出 1 - 6 的整数平方 for (int i = 1; i <= 6; i++) { println(i * i); }
9 在控制台输出 0, 20, 40, 60, 80, 100, 120, 140, 160, 180, 200 for (int i = 0; i <= 200; i += 20) { println(i); }
10 设置画布 200x200 像素,绘制指定线段 size(200, 200); for (int i = 0; i <= 200; i += 20) { line(0, i, width, i); println(i); }
16 在控制台输出 30, 60, 90, 120, 150, 180 for (int i = 30; i <= 180; i += 30) { println(i); }
17 设置画布 200x200 像素,绘制直径 20 像素的圆 size(200, 200); for (int i = 30; i <= 180; i += 30) { ellipse(i, height / 2, 20, 20); println(i); }
18 在控制台输出 150, 125, 100, 75, 50 for (int i = 150; i >= 50; i -= 25) { println(i); }
19 设置画布 200x200 像素,绘制正方形 size(200, 200); for (int i = 150; i >= 50; i -= 25) { rect(i, height / 2 - 25 / 2, 25, 25); println(i); }
20 设置画布 200x200 像素,随机绘制 5 个直径 20 像素的圆 size(200, 200); for (int i = 0; i < 5; i++) { ellipse(random(width), random(height), 20, 20); }
21 为上一个程序的圆添加随机填充颜色 size(200, 200); for (int i = 0; i < 5; i++) { fill(random(256), random(256), random(256)); ellipse(random(width), random(height), 20, 20); }
22 绘制 100 个带随机颜色的圆 size(200, 200); for (int i = 0; i < 100; i++) { fill(random(256), random(256), random(256)); ellipse(random(width), random(height), 20, 20); }
23 计算正整数到某个数的和 int number = 5; int sum = 0; for (int i = 1; i <= number; i++) { println(i); sum += i; } println("Total: " + sum);
24 用户输入数字计算正整数和 import static javax.swing.JOptionPane.*; String input = showInputDialog("Enter a number:"); int number = int(input); int sum = 0; for (int i = 1; i <= number; i++) { println(i); sum += i; } println("Total: " + sum); println("Gauss: " + number * (number + 1) / 2);

9. 流程图回顾

graph TD;
    A[开始] --> B[初始化循环变量];
    B --> C{循环条件是否满足};
    C -- 是 --> D[执行循环体];
    D --> E[更新循环变量];
    E --> C;
    C -- 否 --> F[结束];

这个流程图清晰地展示了 for 循环的执行过程,从初始化循环变量开始,判断循环条件,满足条件则执行循环体并更新循环变量,直到循环条件不满足为止。通过对这个流程的理解,可以更好地编写和调试 for 循环代码。

通过学习和练习 for 循环,你已经掌握了一种强大的编程工具。在今后的编程实践中,要不断运用和拓展这些知识,提高自己的编程水平。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值