实验四 Java数组与函数实验.docx
《实验四 Java数组与函数实验.docx》由会员分享,可在线阅读,更多相关《实验四 Java数组与函数实验.docx(15页珍藏版)》请在冰点文库上搜索。
实验四Java数组与函数实验
1、用数组求解Fibonacci数列的前20项。
按每行4个输出数组的元素。
publicclassEX4_1{
//算Fibonacci数列
publicstaticintfibonacci(inti){
if(i==1||i==2)
return1;
else{
returnfibonacci(i-2)+fibonacci(i-1);
}
}
publicstaticvoidmain(String[]args){
for(intx=1;x<=20;x++){
System.out.printf("%-8d",fibonacci(x));
if(x%4==0)
System.out.println();
}
}
}
______________________________________________________________________________
2、用选择法对20个数从小到大排序。
publicclassEX4_2{
//产生随机数
publicstaticint[]get(intn){
int[]arr=newint[n];
for(inti=0;iarr[i]=(int)(Math.random()*90+10);
}
returnarr;
}
//排列
publicstaticint[]arrange(int[]arr){
for(inti=0;iintmin=i;
for(intj=i+1;jif(arr[j]}
if(min!
=i){
intt=arr[min];
arr[min]=arr[i];
arr[i]=t;
}
}
returnarr;
}
//输出排列的数组
publicstaticvoiddisplay(int[]arr){
for(inti=0;iSystem.out.print(arr[i]+"");
}
publicstaticvoidmain(String[]args){
int[]arr=get(20);
System.out.println("初始数组是:
");
display(arr);
System.out.println();
System.out.println("排列后数组为");
arr=arrange(arr);
display(arr);
}
}
______________________________________________________________________________
3、利用求素数的方法,就6~20之间的所有偶数验证歌德巴赫猜想:
任何一个大于6的偶数可以分解为两个素数之和。
publicclassEX4_3{
//判断是不是素数
publicstaticbooleanjudgePrime(intn){
booleanb=true;
for(intj=2;j<=Math.sqrt(n);j++)
{
if(n%j==0){b=false;break;}
elseb=true;
}
returnb;
}
//验证哥德巴赫猜想
publicstaticvoidverify(intn){
for(inti=2;i<=n/2;i++){
if(judgePrime(i)&&judgePrime(n-i))
System.out.println(n+"="+i+"+"+(n-i));
}
}
publicstaticvoidmain(String[]args){
System.out.println("验证的[6,20]哥德巴赫猜想:
");
for(intn=6;n<=20;n+=2){
verify(n);
}
}
}
______________________________________________________________________________
4、利用随机函数产生16个随机整数给一个4*4的二维数组赋值。
1)按行列输出数组
2)求最外一圈元素之和。
publicclassEX4_4{
//产生n个数
publicstaticint[]getNumber(intn){
int[]arr=newint[n];
for(inti=0;iarr[i]=(int)(Math.random()*100);
returnarr;
}
//输出二维数组
publicstaticvoiddisplay(int[][]arr){
for(inti=0;ifor(intj=0;jSystem.out.printf("%-4d",arr[i][j]);
System.out.println();
}
}
//将一维数组转换成i行j列的二维数组
publicstaticint[][]trans(int[]arr,inti,intj){
intstr[][]=newint[i][j];
intn=0;
for(i=0;ifor(j=0;jstr[i][j]=arr[n];
returnstr;
}
//计算最外一圈元素之和,并输出
publicstaticvoidcalculate(int[][]str){
intsum=0;
for(inti=0;iif(i==0||i==str.length-1){
for(intj=0;jsum+=str[i][j];
}
else
sum+=(str[i][0]+str[i][str[i].length-1]);
}
System.out.println("最外一圈元素之和为:
"+sum);
}
publicstaticvoidmain(String[]args){
int[]arr=getNumber(16);
intstr[][]=trans(arr,4,4);
System.out.println("4*4的矩阵为:
");
display(str);
System.out.println();
calculate(str);
}
}
______________________________________________________________________________
5、利用数组元素间的关系输出含8行的杨辉三角形;
杨辉三角形特点:
(1)第1列元素为1,对角线元素为1;
(2)其他元素均为前一行的同一列位置元素和前一行的前一列元素之和。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
importjava.util.*;
publicclassEX4_5{
//产生n行杨辉三角
publicstaticint[][]getYangHui(intn){
int[][]arr=newint[n][n];
for(inti=0;iarr[i][0]=1;
arr[i][i]=1;
}
for(inti=2;ifor(intj=1;jarr[i][j]=arr[i-1][j]+arr[i-1][j-1];
}
returnarr;
}
//输出杨辉三角
publicstaticvoiddisplay(int[][]arr){
for(inti=0;ifor(intj=0;jif(arr[i][j]!
=0)
System.out.printf("%-5d",arr[i][j]);
}
System.out.println();
}
}
publicstaticvoidmain(String[]args){
Scannerscan=newScanner(System.in);
System.out.println("请输入需要多少行杨辉三角:
");
intn=scan.nextInt();
int[][]arr=getYangHui(n);
System.out.println(n+"行杨辉三角:
");
display(arr);
}
}
______________________________________________________________________________
6、产生20个范围为0~50之间的不重复随机整数存入到一个数组中,将数组中元素按由小到大输出,并求数组所有元素的平均值。
【提示】每产生一个整数要跟前面已产生的数进行比较,如果已存在,则不算,要重新产生,可以用一个循环来控制产生一个新数,只有产生的数未出现过,才能出循环。
publicclassEX4_6{
//产生不重复随机数存入数组
publicstaticint[]get(intn){
int[]arr=newint[n];
for(inti=0;ibooleanflag=false;
do{
flag=false;
intnum=(int)(Math.random()*50);
for(intj=0;j
if(num==arr[j]){
flag=true;
break;
}
}
if(!
flag){
arr[i]=num;
}
}while(flag);
}
returnarr;
}
//从小到大排列
publicstaticint[]arrange(int[]arr){
for(inti=0;iintmin=i;
for(intj=i+1;jif(arr[j]}
if(min!
=i){
intt=arr[min];
arr[min]=arr[i];
arr[i]=t;
}
}
returnarr;
}
//输出排列后的数组
publicstaticvoiddisplay(int[]arr){
for(inti=0;iSystem.out.print(arr[i]+"");
}
//算平均值
publicstaticvoidcalculate(int[]arr){
doublesum=0;
for(inti=0;isum+=arr[i];
sum=sum/arr.length;
System.out.print("\n\n该数组平均值是:
"+sum);
}
publicstaticvoidmain(String[]args){
int[]arr=get(20);
System.out.println("初始数组是:
");
display(arr);
System.out.println("\n\n排列后数组为");
display(arrange(arr));
calculate(arr);
}
}
______________________________________________________________________________
7、利用随机函数产生36个随机整数给一个6*6的二维数组赋值。
求出所有鞍点,鞍点的条件是该元素在所在行是最大值,在所在列是最小值。
【提示】先找出行上最大的元素,然后在判断该元素在所在的列上是否是最小的。
publicclassEX4_7{
//产生不重复随机数组
publicstaticint[][]getStr(inti,intj){
intstr[][]=newint[i][j];
for(i=0;ifor(j=0;jbooleanflag=false;
do{
flag=false;
intnum=(int)(Math.random()*100);
for(intm=0;m
for(intn=0;nif(num==str[m][n]){
flag=true;
break;
}
}
}
if(!
flag){
str[i][j]=num;
}
}while(flag);
}
}
returnstr;
}
//输出二维数组
publicstaticvoiddisplay(int[][]arr){
for(inti=0;ifor(intj=0;jSystem.out.printf("%-4d",arr[i][j]);
System.out.println();
}
}
//找出鞍点
publicstaticvoidsaddlePoint(int[][]arr){
intgetMax[]=newint[arr.length];//存放每行最大的数
intinMax[]=newint[arr.length];//存放每行最大的数所在的列
intinMin[]=newint[arr.length];//存放列最小的数所在的行
for(inti=0;iintj=0;
inMax[i]=j;
for(;jif(arr[i][inMax[i]]inMax[i]=j;
}
getMax[i]=arr[i][inMax[i]];
}
for(inti=0;iinMin[i]=0;
for(intj=0;jif(arr[inMin[i]][inMax[i]]>arr[j][inMax[i]])
inMin[i]=j;
}
}
for(inti=0;iif(inMin[i]==i){
System.out.print("鞍点是"+getMax+"位于");
System.out.printf("第%d行第%d列\n",i,inMax);
}
else
System.out.printf("第%d行没有鞍点\n",i+1);
}
}
publicstaticvoidmain(String[]args){
int[][]arr=getStr(6,6);
display(arr);
saddlePoint(arr);
}
}