实验三:Java语言基础
实验目的:
- 掌握Java语言的数据类型,熟悉如何定义和使用各种类型。
- 掌握Java语言运算符的使用方法。
- 了解Java语言中的代码注释与编码规范。
- 掌握Java语言顺序结构、选择结构和循环结构程序设计。
实验内容:
- 水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。例如:1^3 + 5^3 + 3^3 = 153,所以153是一个水仙花数。请编程输出1000以内的所有的水仙花数。
package Test1;
public class Test1 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
for(int i=0;i<1000;i++) //列出所有0至999的三位数
{
int a,b,c;
a=i/100; //找出百位数字
b=i/10-a*10; //找出十位数字
c=i%10; //找出个位数字
if(a*a*a+b*b*b+c*c*c==i) //判断是否是水仙花数
{
System.out.println(i + "是水仙花数");
}
}
}
}
2 .两位数13和62具有很有趣的性质:把它们个位数字和十位数字对调,其乘积不变, 即13*62=31*26。 编程序求共有多少对这种性质的两位数(个位与十位相同的不在此列,如11、22,重复出现的不在此列,如 13*62与62*13)。
package Test2;
public class Test2 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int count=0;
for(int a=10;a<100;a++) //列出第一个所有的二位数
{
for(int b=10;b<100;b++) //列出第二个所有的二位数
{
int c,d,e,f;
c=a/10; //十位数字
d=a%10; //个位数字
e=b/10; //十位数字
f=b%10; //个位数字
if((c*10+d)*(e*10+f)==(d*10+c)*(f*10+e)&&c!=d&&e!=f) //两数的个位数和十位数对调乘积不变以及个、十位数不相同
{
System.out.println(a+"和"+b);
count++;
}
}
}
System.out.println("一共有" + count/2 + "对"); //统计所有的对数
}
}
3. 验证哥德巴赫猜想。一个充分大的偶数(大于或等于6)可以分解为两个素数之和。 试编程序,将 6至50之间全部偶数表示为两个素数之和。
package Test3;
public class Test3 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
for(int i=6;i<=50;i+=2) //找出所有6至50的偶数
{
for(int j=2;j<=i/2;j++) //找出其中一位加数
{
int a;
a=i-j; //找出另一位加数
if(a%2!=0&&a%3!=0&&a%5!=0&&a%7!=0 && j%2!=0&&j%3!=0&&j%5!=0&&j%7!=0) //不能被2,3,5,7整除的为素数
{
System.out.println(i + "=" + a + "+" + j);
}
if((a==2||a==3||a==5||a==7) && (j==2||j==3||j==5||j==7)) //2,3,5,7本身为素数
{
System.out.println(i + "=" + a + "+" + j);
}
if((j==2||j==3||j==5||j==7) && a%2!=0&&a%3!=0&&a%5!=0&&a%7!=0) //当j=2,3,5,7时,找出a
{
System.out.println(i + "=" + a + "+" + j);
}
}
}
}
}
4. 输入1到7之间的某个整数,输出相应的星期:Monday、 Tuesday 等等,用switch语句实现。
package Test4;
import java.util.Scanner;
public class Test4 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner in = new Scanner(System.in); //输入
int a = in.nextInt(); //输入一个整数
switch(a)
{
case 1:
System.out.println("Monday");
break;
case 2:
System.out.println("Tuesday");
break;
case 3:
System.out.println("Wednesday");
break;
case 4:
System.out.println("Thursday");
break;
case 5:
System.out.println("Friday");
break;
case 6:
System.out.println("Saturday");
break;
case 7:
System.out.println("Sunday");
break;
default:
System.out.println("error"); //排除1至7外的数字
}
}
}
5.一个球从x米(x从键盘录入)高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
package Test5;
import java.util.Scanner;
public class Test5 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner in = new Scanner(System.in); //输入
float x = in.nextFloat(); //输入一个小数
float s = 0;
float sum = 0;
for(int i=1;i<=10;i++) //落地次数
{
x=x/2; //反弹高度
s=x*2; //重复经过
sum=sum+s; //总的路程
}
System.out.println("共经过" + sum + "米");
System.out.println("第十次反弹高度:" + x + "米");
}
}
6.可以用整型数的16个二进制位表示16支足球队小组出线的情况,每一位代表一支参赛队,其值为1表示该队出线,其值为0表示该队未能出线。假定从int的第16位由低位向高位分别代表第1队、第2队、第3队……第16队,如果当前表示出线情况的int型值为50083,请输出哪些队获得了出线权?
package Test6;
import java.util.Scanner;
public class Test6 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner in = new Scanner(System.in); //输入
int n = in.nextInt(); //输入一个整数n
if((n & 1)==1)
{
System.out.println("第1队出线");
}
if((n & 2)==2)
{
System.out.println("第2队出线");
}
if((n & 4)==4)
{
System.out.println("第3队出线");
}
if((n & 8)==8)
{
System.out.println("第4队出线");
}
if((n & 16)==16)
{
System.out.println("第5队出线");
}
if((n & 32)==32)
{
System.out.println("第6队出线");
}
if((n & 64)==64)
{
System.out.println("第7队出线");
}
if((n & 128)==128)
{
System.out.println("第8队出线");
}
if((n & 256)==256)
{
System.out.println("第9队出线");
}
if((n & 512)==512)
{
System.out.println("第10队出线");
}
if((n & 1024)==1024)
{
System.out.println("第11队出线");
}
if((n & 2048)==2048)
{
System.out.println("第12队出线");
}
if((n & 4096)==4096)
{
System.out.println("第13队出线");
}
if((n & 8192)==8192)
{
System.out.println("第14队出线");
}
if((n & 16384)==16384)
{
System.out.println("第15队出线");
}
if((n & 32768)==32768)
{
System.out.println("第16队出线");
}
}
}
实验小结:
- Java的基本数据类型都有固定的长度,引用类型都是用类或对象实现的。
- Java对+运算进行了扩展,可作字符串连接运算符。
- 做+运算时,如果一个操作数是字符串,其他操作数自动转换成字符串。
- “&”按位相与。
- Java中大多语法与C语言相同。
- 使用输入Scanner时要导入Scanner类。
- 素数判断:不能被2,3,5,7整除且为2,3,5,7本身的数为素数。