PAGE232
假设有一家蛋糕店,每天要生产50个蛋糕。每个蛋糕的制作都需要:
准备模具(初始化)
检查是否还需要生产(条件判断)
倒入面糊(循环体执行)
记录已生产数量(迭代)
for循环就像这个标准化的生产过程,把重复性的工作安排得井井有条。
for语法结构
for循环结构把循环控制的三个关键要素集中放在一行,比while循环更加紧凑明了。就像流水线的控制面板,所有调节按钮都集中在一个区域,操作起来特别方便。
案例解析
学生成绩统计
编写一个程序,统计一个班级学生的平均分。
运行结果
依次输入班级人数和学生成绩
请输入班级人数:5
请输入第1个学生的成绩:65
请输入第2个学生的成绩:36
请输入第3个学生的成绩:96
请输入第4个学生的成绩:49
请输入第5个学生的成绩:86
班级平均分是:66.4
代码解析
先询读取班级人数,确定循环次数。
初始化计数器i=1,这是学生人数的计数器。
每次循环读取一个学生成绩并累加到总成绩totalScore。
计数器i自动增加,直到超过学生人数时结束循环。
最后计算并输出平均分,并格式化输出。
这个例子展示了for循环最适合的场景:已知循环次数的重复操作。就像知道要生产多少个蛋糕,按数量一个个制作。
智能温度转换器
编写程序,把最近一周的摄氏温度转换为华氏温度。
运行结果
依次输入一周7天的温度
请输入最近7天的摄氏温度:
第1天温度:28
第2天温度:26
第3天温度:27
第4天温度:28
第5天温度:29
第6天温度:30
第7天温度:26
温度转换结果:
天数摄氏华氏
128.082.4
226.078.8
327.080.6
428.082.4
529.084.2
630.086.0
726.078.8
代码亮点:
第一个for循环收读取户输入的温度数据
第二个for循环进行批量转换计算
使用printf格式化输出,保持表格对齐
数组索引从0开始,但显示给用户时从1开始
这个案例比简单的计数循环更实用,展示了for循环处理数组的天然优势
常见错误及解决方法
死循环陷阱
解决方法:检查迭代条件,确保循环变量朝着结束条件方向变化。
作用域问题
解决方法:理解循环变量的作用域仅限于循环内部,外部需要使用时要提前声明。
分号位置错误
错误原因:结果编译报错,怎么回事?问题出在那个多余的分号上,它让for循环变成了空语句。
解决方法:注意for语句后面不要误加分号,这会导致循环体变成空语句。应该改成:
数组越界
错误原因:数组的下标从0开始,int[]scores=newint[5];数组下标从0开始到4结束,当i=5时,scores[i]=i*10;等价于scores[5]=5*10;数组越界,出现错误。
解决方法:记住数组索引是从0开始的,应该改成:
综合练习题
理论题
下面代码输出什么?为什么?
答案:输出024,因为循环变量每次增加2
如何用for循环实现从100倒数到1?
答案:for(inti=100;i=1;i--){}
比较for循环和while循环各适合什么场景?
答案:for适合已知循环次数的情况,while适合条件复杂或次数不确定的情况。
下面这段代码会输出什么?
答案:输出10741,因为每次循环i减少3。
如果要遍历字符串中的每个字符,应该怎么写循环?
示例
为什么下面的循环不会结束?
解析:浮点数精度问题导致d永远不会精确等于1.0,应该改为d=1.0。
实战编程题
编写程序计算1到100所有奇数的和
运行结果
奇数和:2500
改进成绩统计程序,增加最高分和最低分统计功能
运行结果
依次输入班级人数和学生成绩
请输入班级人数:5
请输入第1个学生的成绩:65
请输入第2个学生的成绩:36
请输入第3个学生的成绩:96
请输入第4个学生的成绩:49
请输入第5个学生的成绩:86
班级平均分是:66.4
最高分:96.0
最低分:36.0