实验4循环程序设计.docx

上传人:b****2 文档编号:1519178 上传时间:2022-10-22 格式:DOCX 页数:15 大小:21.43KB
下载 相关 举报
实验4循环程序设计.docx_第1页
第1页 / 共15页
实验4循环程序设计.docx_第2页
第2页 / 共15页
实验4循环程序设计.docx_第3页
第3页 / 共15页
实验4循环程序设计.docx_第4页
第4页 / 共15页
实验4循环程序设计.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

实验4循环程序设计.docx

《实验4循环程序设计.docx》由会员分享,可在线阅读,更多相关《实验4循环程序设计.docx(15页珍藏版)》请在冰豆网上搜索。

实验4循环程序设计.docx

实验4循环程序设计

实验4 循环程序设计

4.1实验目的

(1)掌握三种循环语句的使用,能分析循环的执行过程;

(2)掌握break和continue语句的使用;

(3)了解如何利用求余和整除操作获取和删除一个整数的最低位;

(4)掌握累加、累乘的处理方法。

(5)掌握计数问题的编写技巧,如何控制每行输出元素个数。

4.2知识要点

   循环就是反复执行一段代码,直到满足结束条件。

循环语句一般包括初始化、循环体、迭代和判断4部分。

4.2.1while循环与dowhile循环的使用差异

while语句的格式:

  while(条件表达式){ 

    循环体

    }

特点是“先判断、后执行”,循环体有可能执行0次。

do…while循环的格式:

   do

{

        循环体

    }while(条件表达式)

特点是“先执行,后判断”,循环体至少要执行1次。

建议:

在程序设计中尽量不用dowhile循环,而用while循环。

4.2.2for循环与while循环的对应关系

for(控制变量赋初值;循环条件;增值){

循环体

}

等价于:

控制变量赋初值;

While(循环条件){

循环体;

控制变量增值;

}

注意几点:

(1)for循环的执行过程是先做初始化,然后判断是否满足结束条件,若满足,则执行循环体,在执行完循环体后进行迭代增值。

(2)初始化部分和增值部分可以使用逗号语句执行多个操作;

(3)三部分均为空,写成for(;;)相当于一个无限循环。

4.2.3continue和break语句的作用

●        continue---跳过之后的语句,继续下一轮循环;

●        break---跳出直接所处循环。

●        带标号的continue可以回到标号指定的那级循环的下一轮执行。

●        带标号的break可以跳出标号指定的那级循环。

4.2.4常见问题处理

(1)累加问题的解决办法—累加变量的初值设置在循环外,通常赋0为初值;

(2)如何利用循环求阶乘—累乘,在循环外设置变量初值为1;

(3)如何控制每行的输出数据个数(计数问题);

(4)如何产生一定范围的随机整数。

Math.random()产生的数是0到1之间的小数,不包括0和1,要产生随机整数必须先放大再取整。

4.3样例程序

样例1:

输入一批学生成绩,以-1作为结束标记 

   

(1)统计这批学生中,不及格、及格、中等、良好、优秀的人数。

  

(2)求这批学生的平均分。

【分析】根据要求不难看出这是一个计数和累加问题。

学生数量不确定,但有一个结束标记(-1),该问题从总体结构是一个循环处理问题,可采用while循环,当输入数据为-1时结束循环。

为了统计各种情况的人数,需要设立相应的计数变量,并给其赋初值0,另外为了求平均分,必须计算总分,也就是计算出所有学生成绩的累加和,然后除总人数即可得到平均。

【参考程序】

importjava.io.*;

publicclassScore{

 publicstaticvoidmain(Stringargs[])throwsIOException{

    ints=0,b=0,c=0,d=0,e=0,f=0; //变量赋初值

    BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));

    inta=Integer.parseInt(br.readLine()); //读取一个整数

    while(a!

=-1){

      s+=a; //累加

      switch(a/10){

        case 0:

        case 1:

        case 2:

        case 3:

        case 4:

        case 5:

b++;break;//计数增1

        case 6:

c++;break;

        case 7:

d++;break;

        case 8:

e++;break;

        case 9:

f++;break;

      }

     a=Integer.parseInt(br.readLine());

   }

   System.out.println("优秀人数:

"+f);

   System.out.println("良好人数:

"+e);

   System.out.println("中等人数:

"+d);

   System.out.println("及格人数:

"+c);

   System.out.println("不及格人数:

"+b);

   intaverage=s/(b+c+d+e+f);    //求平均成绩

   System.out.println("平均分="+average);

  }

}

【说明】程序流图见图4-1,程序总体结构上是一个循环问题,在循环内部要分情况统计各分数段人数,包含一个是switch语句。

在输入数据时未处理异常,所以在main方法的头部增加throwsIOException声明该方法会抛出IO异常。

【编程技巧】

(1)用while循环控制数据的录入和处理过程,-1作为循环的结束标记;注意循环体的最后要有输入数据的语句,以便得到新的处理数据。

(2)如何将各分数档按情况进行分别处理,掌握除10取整后得到数据的特征。

(3)记住累加和计数问题的处理技巧。

样例2:

找10~100之间能被3或5整除的数,每行输出5个数

【参考程序】

publicclassA{

 publicstaticvoidmain(Stringarge[]){

    intk=10; //循环控制变量,从10变化到100

    intm=0; //用于统计输出数的个数

    while(k<=100){   //循环的终值为100

       if(k%3==0||k%5==0){  //被3或5整除

          m++;  

          System.out.print(k+"\t");

          if(m%5==0)  //控制每隔5个输出数换一行

            System.out.println();

       }

       k++; //循环控制变量增值

    }

  }

 }

【说明】本程序是找出一定范围内(10~100)查找满足条件的数,这里有两个关键,一是如何表达一个数被3或5整除,用到求余运算符和逻辑或;二是为了控制每行输出5个数,必须对输出的数进行统计,因此,本程序的实质也要用到计数。

注意,print和println的差别。

【编程技巧】

(1)3或5整除的逻辑表达问题。

(2)如何控制一行输出5个数。

样例3:

编写一个程序从键盘输入10个整数,将最大、最小的整数找出来输出。

【参考程序】

importjava.io.*;

publicclassFind{

 publicstaticvoidmain(Stringa[])throwsIOException{

   intm=0,n=Integer.MAX_VALUE; //用m,n存放需求的最大、最小整数

   BufferedReaderbr=

         newBufferedReader(newInputStreamReader(System.in));

   for(intk=1;k<=10;k++){

     intx=Integer.parseInt(br.readLine());

     if(x>m)m=x; //如果比最大的还大,那x成为最大的.

     if(x

   }

  System.out.println("最大整数="+m);

  System.out.println("最小整数="+n);

 }

}

【编程技巧】

(1)分别引入两个变量m,n用来保存所求的最大与最小数值。

在循环外为这两个变量假定一个值(为多大合适),然后在循环内将其他值与其比较。

也可以先假定第一个数据为最大、最小,然后将剩余数据与其比较。

(2)不要忘记将获取新数据的输入语句放在循环内。

(3)结束循环后输出结果。

样例4:

计算算式:

1+21+22+23+…+2n  (注:

n由键盘输入)

【参考程序1】

publicclassTwoadd{

  publicstaticvoidmain(Stringargs[]){

    intn=Integer.parseInt(args[0]);

    longsum=1;

    for(intk=1;k<=n;k++){ 

       sum=sum+(long)Math.pow(2,k);//用Math类的pow方法求2k

    }

    System.out.println("result="+sum);

  }

 }

【参考程序2】

publicclassTwoadd{

  publicstaticvoidmain(Stringargs[]){

   intn=Integer.parseInt(args[0]);//从命令行输入n

   longsum=1; //保存累加和

   longx=1; //被加项

   for(intk=1;k<=n;k++){

        x=x*2; //求下一个被加项时,只要在前一项的基础上乘2

        sum=sum+x;

    }

    System.out.println("result="+sum);

  }

 }

【说明】“参考程序1”最直观,但“参考程序2”比“参考程序1”要好,利用Math.pow(2,k)求每个累加项花费的时间长,为了完成计算,在pow方法内要执行一段计算程序。

而“参考程序2”求累加项则是一个乘法运算,这里利用了前后两个累加项的变化特点。

甚至简单写成x=x+x形式的加法运算更快,但可读性不如x=x*2。

【编程技巧】

(1)   用循环组织累加,在循环外给累加变量赋初值,在循环内将累加项加到累加变量上;

(2)   分析累加项的变化规律,尤其是前后项之间的关系。

(3)   用Math类的pow方法求2的k次方,由于该方法返回为一个实数,所以要用强制转换为long型才能累加到sum上。

样例5:

从键盘输入一个长整数,求其各位数字之和。

【分析】这里的关键的如何得到各位数字,注意到得到一个整数的最低位数字可用除10求余数的办法,而要得到该整数的除最低位外的数只要用除10取整即可。

因此,利用循环即可将一个整数的所有各位数字取出。

【参考程序】

publicclass fang{

   publicstaticvoidmain(Stringargs[]){  

      inta,m=0;

      a=Integer.parseI

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 考试认证 > 其它考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1