实验名称:程序控制语句和JAVA编译器的使用 |
|
实验室名称:902 |
实验台号:901 |
学生姓名: |
专业班级:2014级2班 |
指导教师: |
实验日期: 2016-03-24 |
一、实验目的
1.熟悉JDK开发环境。
2. 熟悉“记事本”编辑器或eclipse环境的使用。
3.掌握Java程序结构和开发过程。
4.掌握if语句、if-else-if、switch结构的使用
5. 掌握使用while、do-while、for、continue语句和break语句实现循环。
二、实验仪器及环境:
PC计算机;windows7操作系统、JDK1.6和eclipse开发工具
1. 分支语句编程
(1)使用简单if语句编程,给定三个整数,然后按照从小到大的顺序将其输出。
输入:输入数据有多组,每组3个数值。
输出:按从小到大顺序排好的三个数。
源代码:
packagecn.edu.nefu.zhihu; importjava.util.Scanner; public class test{ public static void main(String[] args){ int a,b,c; Scanner reader=newScanner(System.in); while(reader.hasNextInt()&&reader.hasNextInt()&&reader.hasNextInt()){ a=reader.nextInt(); b=reader.nextInt(); c=reader.nextInt(); if(a>b){ int t=a; a=b; b=t; } if(b>c){ int t=b; b=c; c=t; } if(a>b){ int t=a; a=b; b=t; } System.out.printf("%d%d %d\n",a,b,c); } //System.out.println("Helloworld!"); } }
(2)分别使用if-else-if语句或switch语句编程,确定某一月在哪个季节。
输入:输入数据只有一组,每组1个代表月份的数值。
输出:对应输入数值的所属季度。
源代码:
package cn.edu.nefu.zhihu; import java.util.Scanner; public class test { public static void main(String[] args) { Scanner reader=new Scanner(System.in); System.out.println("输入一个月份:"); int n=reader.nextInt(); switch(n){ case 1 : case 2 : case 3 :System.out.printf("%d月属于第一季度",n);break; case 4 : case 5 : case 6 :System.out.printf("%d月属于第二季度",n);break; case 7 : case 8 : case 9 :System.out.printf("%d月属于第三季度",n);break; case 10 : case 11 : case 12 :System.out.printf("%d月属于第四季度",n);break; default: System.out.println("输入有误");break; } } }
(3)编程输入学生的学习成绩的等级,给出相应的成绩范围。设A级为85分以上(包括85分);B级为70分以上(包括70分);C级为60分以上(包括60分);D级为60分以下。分别使用switch语句实现。
输入:输入数据只有一组,每组1个字符。
输出:对应输入字符的成绩范围。
代码实现:
package cn.edu.nefu.zhihu; import java.util.Scanner; public class test { public static void main(String[] args) { Scanner reader=new Scanner(System.in); String c; char str[]; char c1; System.out.println("输入一个等级:"); c=reader.nextLine(); //等待用户在命令行输入一行文本回车,即以回车结束 str=c.toCharArray(); //将此字符串转化为一个新的字符数组 c1=str[0]; //System.out.println(str); switch(c1){ case 'A' :System.out.println("成绩范围为:[85,100]");break; case 'B' :System.out.println("成绩范围为:[70,85)");break; case 'C' :System.out.println("成绩范围为:[60,70)");break; case 'D' :System.out.println("成绩范围为:[0,60)");break; default: System.out.println("输入有误");break; } } }
2.循环语句编程
(1) 使用while或do-while或for语句编程,求1~100的和。
(2) 使用continue语句实现:将100~300之间的不能被3整除的数输出。
(3) 使用break语句实现记数:从1~100,当数到78时程序终止。
输出:分别按要求输出。
源代码:
package cn.edu.nefu.pack1; public class demo1 { public static void main(String[] args) { int sum=0; for(int i=1;i<=100;i++){ sum+=i; } System.out.println("1到100的和为:"); System.out.println(sum); System.out.println("continue语句实现100到300间不能被3整除的数如下:"); for(int i=100;i<=300;i++){ if(i%3==0){ continue; } System.out.printf("%d ",i); } System.out.println(); System.out.println("break语句实现从1数到100,遇到78时终止:"); for(int i=1;i<=100;i++){ System.out.printf("%d ",i); if(i==78) break; } } }
3.课后作业
(1) 编写一个java应用程序,输出俄文字母表。
已知大写(小写)俄文字母表首字母为:А(а) 且俄文字母共有32个
输出:按要求输出。
源代码:
package cn.edu.nefu.pack1; public class demo1 { public static void main(String[] args) { char c='а'; char c1='А'; for(int i=(int)c;i<c+32;i++){ System.out.printf(" "+(char)i); } System.out.println(); for(int i=(int)c1;i<c1+32;i++){ System.out.printf(" "+(char)i); } } }
(2) 编写一个应用程序,用户从键盘只能输入整数,程序输出这些整数的和。
输入:输入数据有多组,每组1个整型数字。
输出:对应输入整数的和。
源代码:
package cn.edu.nefu.pack1; import java.util.Scanner; public class demo1 { public static void main(String[] args) { Scanner reader=new Scanner(System.in); long sum=0; while(reader.hasNextInt()){ long x=reader.nextInt(); sum+=x; System.out.println(sum); //System.out.printf("%d",sum); } } }
(3) 有一函数:当x<0时 y=-1+2x;当x=0时 y=-1;当x>0时 y=-1+3x;编写一个java应用程序,从键盘输入一个x的值,程序输出y的值。
输入:输入数据有多组,每组1个浮点型数字。
输出:对应输入浮点型的y值。
源代码:
package cn.edu.nefu.pack1; import java.util.Scanner; public class demo1 { public static void main(String[] args) { Scanner reader=new Scanner(System.in); double x,y; while(reader.hasNextDouble()){ x=reader.nextDouble(); if(x<0){ y=-1+2*x; } else if(x==0){ y=-1; } else{ y=-1+3*x; } System.out.println(y); //System.out.printf("%d",sum); } } }
(4) 编写一个java应用程序,使用while循环语句计算1~1000之间能被3和7同时整除的整数之和。
输出:按要求输出。
源代码:
package cn.edu.nefu.pack1; public class demo1 { public static void main(String[] args) { int sum=0; int i=1; while(i<=1000){ if(i%3==0&&i%7==0){ sum+=i; } i++; } System.out.println(sum); } }
测试结果:23688
(5) 编写一个java应用程序,使用for循环计算8+88+888+8888+….的前10项之和。
输出:按要求输出,注意和的范围,要用long。
源代码:
package cn.edu.nefu.pack1; public class demo1 { public static void main(String[] args) { long sum=8; long a=8; for(int i=2;i<=10;i++){ a=a*10+8; sum+=a; } System.out.println(sum); } }
测试结果:9876543200
(6) 编写一个java应用程序,计算1!+2!+3!+...从第100项到第200项之和。 (精华部分)
输出:按要求输出。
注意:阶乘数据比较大,用正常的long型已经早已经存不下了,所以要借助于java.math.BigInterger来做。
源代码:
package cn.edu.nefu.pack1; import java.math.BigInteger; public class demo1 { public static void main(String[] args) { BigInteger sum=BigInteger.valueOf(0); //sum=0; BigInteger zero=BigInteger.valueOf(0); //zero=0; BigInteger one=BigInteger.valueOf(1); //one=1; for(int j=100;j<=200;j++){ BigInteger bi=BigInteger.valueOf(1); //bi=1; BigInteger i=BigInteger.valueOf(j); //i=j; while(i.compareTo(zero)>0){ //while(i>0) //求i的阶乘 bi=bi.multiply(i); //bi=bi*i; i=i.subtract(one); //i=i-1; } sum=sum.add(bi); //sum=sum+bi; } System.out.println(sum); } }
测试结果:
792621072814943158937574954417696054502273470568077747007887743862285047941581535541498718312275086275679893343076013862361579680670972527976009279036348551929550827607601145450876014530359530008733947699274904382825444692112993342058966668017369617374101405221613980910401559347844227172278387932925351155828685624342954436057587785914951951445917696000000000000000000000000
此次试验为直接面向过程编程,比较容易实现。特别注意的是,当数据比较大时,要把数据范围定义的比较大,防止溢出,当正常的数据范围也存不下时,则要借助于BigInteger来寻求方法;switch(n)语句中的n可以是整型或者是字符型的变量,而把String类转化为字符数组用到的语句是:char a[]=s.toCharArray();