第6章循环结构(二)
- 格式:doc
- 大小:40.94 KB
- 文档页数:23
第6章循环结构程序设计6-1.比较while语句、do–while语句和for语句的异同。
答:(1)while语句、do-while语句用于条件循环,for语句用于计数循环。
(2)while语句、for语句是先判断循环条件,后执行循环体,如果循环条件一开始就不成立,则循环体一次也不被执行;而do-while语句是是先执行循环体,后判断循环条件,所以循环体至少被执行一次。
(3)知道循环的次数可选用for语句实现循环,不知道循环的次数可选用while语句或do-while语句实现循环.(4)一般而言,三种循环语句可等价实现.6-2 仔细阅读下面的程序,指出程序的运行结果.#include<stdio.h>void main(){ int i;for(i=0;++i;i<5){ if(i==3){printf("%d\n",++i);break;}printf("%d\n",++i);}}答:24思考:语句“for(“i=0;++i;i<5”)在编译时为何会给出语法警告错误?当将其改为“for(i=0;i<5;++i)”时,运行结果又将如何?6-3 仔细阅读下面的语的程序,指出程序的运行结果。
#include"stdio.h"void main(){ int i, a=0;for(i=1;i<=5;i++){do{i++;a++;} while(i<3);}i++;printf("a=%d,i=%d",a,i);}答:a=3,i=7思考:在for循环中嵌套着do-while循环,那么do-while循环中对i的修改会对for循环产生影响吗?6-4编写程序,用1000个单词”computer”填充屏幕,每行60个 .解:#include<stdio.h>void main(){ int i;for(i=1;i<=1000;i++){ printf("computer.");if(i%60==0)printf("\n");}}思考:在for循环中,”if(i%60==0)printf(“\n”);”语句的作用是什么?没有此语句将会是什么状况?6-5输入一行字符(以$结束),统计其中的数字字符、空格字符出现的次数。
第6章循环结构(二)◇本章工作任务实现MyShopping统计顾客的年龄层次实现MyShopping循环录入会员信息实现MyShopping登录时用户信息验证◇本章技能目标会使用for循环结构会在程序中使用break和continue本章单词请在预习时学会下列单词的含义和发音,并填写在横线处。
1.rate:2.young:3.schedule:4.negative:5.customer:6.birthday:7.point:8.continue:9.return: _本章简介上一章我们学习了while和do-while循环结构。
在编程的过程中,把一些重复执行的代码采用循环结构进行描述,大大简化了编码工作,使得代码更加简洁、易读。
相信通过使用循环结构编程,你一定体会到了它的魅力。
while循环结构是先进行条件判断,然后执行循环操作;do-while循环结构是先执行依次循环操作,然后进行判断。
但是Java中的循环结构不只有while和do-while两种,还有for循环结构,它又是什么样子的?有什么功能?这一章就让我们揭晓这一结构:for循环结构。
6.1 for循环6.1.1 为什么需要for循环在上一章,通过使用while循环,张浩轻松解决了老师补充的问题,如示例1所示。
示例1public class WhileDemo {public static void main(String[] args) {int i=0;while(i<100){ ←使用while循环System.out.println(“好好学习,天天向上!”);i++;}}}仔细观察你会发现,这里的循环次数“100遍”已经固定,这是我们也可以选用for循环结构来实现,如示例2所示。
示例2public class ForDemo {public static void main(String[] args) {for(int i=0; i<100; i++;) { ←使用for循环System.out.println(“好好学习,天天向上!”);}}}通过运行程序,我们可以看到示例1和示例2的运行结果是一样的,但示例2的代码看起来更加简洁。
这是因为for循环将循环结构的四个组成部分集中体现在一个for结构中,更加清晰。
因此,在解决有固定循环次数的问题时,就可以首选for循环结构。
下面就让我们看看什么是for循环结构。
6.1.2 什么是for循环循环语句的主要作用是反复执行一段代码,知道满足一定的条件为止。
总结一下,我们可以把循环分成四个部分。
初始部分:设置循环的初始状态。
比如我们设置记录循环次数的变量i为0。
循环体:重复执行的代码,即输出“好好学习,天天向上!”。
迭代部分:下一次循环开始前要执行的部分,在while循环中它作为循环体的一部分。
比如使用“i++;”进行循环次数的累加。
循环条件:判断是否继续循环的条件。
比如使用“i<100”判断循环次数是否已经达到100次。
在for循环结构中,这几个部分同样必不可少,不然循环就会出现错误。
for循环的一般格式如下。
语法for (表达式1;表达式2;表达式3) {//循环体}记住,这里for就是此循环结构的关键字。
每个表达式的含义如表6-1所示。
表6-1 for循环中三个表达式的含义表达式形式功能举例表达式1 赋值语句循环结构的初始部分,为循环 int i=0变量赋初值表达式2 条件语句循环结构的循环条件 i<100表达式3 赋值语句,通常使循环结构的迭代部分,通常用用++或--运算符来修改循环变量的值 i++for关键字后面括号中的三个表达式必须用“;”隔开。
for循环中的这三个部分以及{}中的循环体使循环结构必需的四个组成部分完美地结合在了一起,非常简明。
了解了for循环的语法,那么它的执行过程是怎样的呢?结合图6.1和示例2来理解。
图6.1 for循环执行过程for循环执行的顺序如下。
(1)执行初始部分(int i=0;)。
(2)进行循环条件判断(i<100;)。
(3)根据循环条件判断结果。
如果为true,执行循环体。
如果为false,退出循环,步骤(4)、(5)均不执行。
(4)执行迭代部分,改变循环变量值(i++)。
(5)依次重复步骤(2)、(3)、(4),直到退出for循环结构。
可见,在for循环中,表达式1这个初始部分仅仅执行了1次。
6.1.3 如何使用for循环——问题———————————————————————————————————循环输入某同学S1结业考试的五门课成绩,并计算平均分。
——分析———————————————————————————————————很明显,循环次数是固定的五次,因此我们优选for循环。
使用for循环结构的步骤和使用while/do-while一样,首先要明确循环条件和循环操作,这里的循环条件是“循环次数不足五次,继续执行”,循环操作是“录入成绩,并计算成绩之和”。
然后,套用for语法写出代码。
最后,检查循环是否能够退出。
示例3import java.until.★;public class AverageScore{public static void main(String[] args) {int score; //每门课的成绩int sum=0; //成绩之和double avg=0.0; //平均分Scanner input=new Scanner(System.in);System.out.print(“输入学生姓名:”);String name=input.next();for(int i=0;i<5;i++) { //循环五次录入五门课成绩 System.out.println(“请输入5门功课中第”+(i+1)+“门课的成绩:”);score=input.nextInt(); //录入成绩sum=sum+score; //计算成绩和}avg=sum/5; //计算平均分System.out.println(name+“的平均分是:”+avg);}}示例3的运行结果如图6.2所示。
图6.2 示例3的运行结果在示例3中,声明循环变量i,“int i=0”是初始部分,用来记录循环次数,“i<5”是循环条件,“i++”是迭代成分,整个循环过程是:首先执行初始部分,即i=0,然后判断循环条件。
如果为true,则执行一次循环体。
循环体结束后,执行迭代部分i++,然后再判断循环条件。
如果为true,继续执行循环体,迭代部分……指导循环条件为假,退出循环。
好好体会一下for循环结构各个部分的执行顺序,你会发现表达式1只执行一次,表达式2和表达式3则可能执行多次。
循环体可能多次执行,也可能一次都不执行。
现在学会了如何使用for循环,赶快拿出笔来,动手试一试解决下面这个问题吧!——问题———————————————————————————————————输入任意一个整数,根据这个值输出加法表。
假设输入值为6,输出效果图如图6.3所示。
图6.3 运行结果——分析———————————————————————————————————由图6.3可知,循环次数为固定值,即从0递增到输入的值,循环体为两数求和。
第一个加数从0开始递增到输入的值,另一个加数相反,从输入值递减至0。
具体代码如示例4所示。
示例4import java.until.★;public class SumTable {public static void main(String[] args) {int i,j;Scanner input=new Scanner(System.in);System.out.print(“请输入一个值:”);int val=input.nextInt();System.out.println (“根据这个值可以输出以下加法表:”);for( i=0;j=val;i++,j- -) {System.out.println(i+“+”+j+“=”+(i+j));}}}——注意———————————————————————————————————在示例4的for循环中,表达式1使用了一个特殊的形式,它是用“,”隔开的多个表达式组成的表达式。
i=0,j=val;在表达式1中,分别对两个变量i和j赋初值,它们表示两个加数。
表达式3也使用了这种形式。
i++, j--;在这种特殊形式的表达式中,运算顺序是从左到右。
每次循环体执行完,先执行i自加1,再执行j自减1。
通过示例,我们已经知道了for循环的用法,在实际使用中还有哪些需要注意的地方呢?——注意———————————————————————————————————根据for循环的语法,我们知道for循环的循环条件中有三个表达式,在语法上,这三个表达式都可以省略,但表达式后面的分号不能省略。
如果省略了表达式,要注意保证循环能够正常运行。
省略“表达式1”,比如下面的for循环语句。
for﹙;i<10;i++﹚;这个for循环虽然省略了“表达式1”,但其后的“;”号没有省略。
我们在实际编程中,如果出现“表达式1”省略的情况,需要在for语句前给循环变量赋值,因此,可将上面的语句修改为:int i=0;for(;i<10;i++﹚;——注意——————————————————————————————————— 省略“表达式2”,即不判断循环条件,循环将无终止运行,也就形成了“死循环’,比如下面的for语句。
for(int i=0;;i++);在编程过程中要避免“死循环”的出现,所以对上面的语句可以做如下修改:一种方法是添加“表达式2”,另一种方法是在循环体中使用break强制跳出循环。
关于break 的用法将在下一节介绍。
省略“表达式3”,即不改变循环变量的值,也会出现“死循环”,比如对下面的语句。
for﹙int i=0;i<10;﹚;这里省略了“表达式3”,变量i的值始终为0,因此循环条件永远成立,程序就会出现“死循环”,在这种情况下,我们可以在循环体中改变i的值,语句如下。
for(int i=0;i<10;﹚{i++;}这样就能使循环正常结束,不会出现“死循环”。
三个表达式都省略,即如下语句。
for(;;);上面这个语句在语法上没有错,但逻辑上是错误的,我们可以参考上面三种情况的描述进行修改。
在实际开发中,为了提高代码的可读性,尽量不要省略各个表达式。
如果需要省略,可以考虑是否改用while或do-while循环。
6.1.4 上机练习现在已经完成了for循环的学习,下面就让我们做一个练习巩固以下学习成果。
上机练习1指导——计算顾客比例训练要点for循环结构需求说明商场为了提高销售额,需要对顾客的年龄层次(30岁之上/之下)进行调查(样本数为10),请计算这两个层次的顾客比例。