java 语言程序设计-李尊朝 第5章 数组 练习答案

1。编程对10个整数排序

	public class BubbleSort 
	 {
	                             //定义一个静态方法,使用冒泡排序方法
		                         //对一维数组进行由小到大的排序
	    public static void bubbleSort(int[] a) 
	     {
	        int n=a.length;                   //取得数组长度
	        int temp;                       //用于交换的临时变量
			for(int i=n-1;i>0;i--)              //外层循环
				for(int j=0;j<i-1;j++)          //内层循环
				if(a[j+1]<a[j])
				  {
					temp=a[j+1];             //交换2元素的值
					a[j+1]=a[j];
					a[j]=temp;
				 }
			
	      }
		public static void main(String[] args) 
		 {
	        int[] m={10,8,21,65,32,51,74,14,28,95};
	        System.out.println("排序前的数组是:");
	        for(int i=0;i<m.length;i++)
	            System.out.print(m[i]+"  ");
	        System.out.println();
	        bubbleSort(m);                    //调用静态方法对数组m进行排序
	        System.out.println("排序后的数组是:\n");
	        for(int i=0;i<m.length;i++)
	            System.out.print(m[i]+"  ");
	    }    
	}
2.打印以下的杨辉三角形
	public class YanghuiTriangle 
	 {
	
		public static void main(String[] args) 
		{
	        int i,j;
	        int a[][]=new int[11][11];      //定义1个二维数组
	        for(i=1;i<11;i++) 
	         {
	            a[i][i]=1;         //对数组中的对角线和第1列上的每个元素赋值1
	            a[i][1]=1;
	         }
	        

for(i=3;i<11;i++) for(j=2;j<=i-1;j++) a[i][j]=a[i-1][j-1]+a[i-1][j];

	        for(i=1;i<11;i++)                //输出结果
	         { 
	           for(j=1;j<=i;j++)
	              System.out.print(a[i][j]+"  ");
	              System.out.println("\n");
	         }
	        System.out.println("\n");
	    }
	}
3.从键盘输入10个整数,放入一个一维数组,然后将前5个元素与后5个元素对换,即将第一个元素与第十个元素互换,依此类类推。
	public class ExchangeNum 
	 {
	   public static void main(String[] args) 
	     {
	        if(args.length!=10){                           //输入格式错误
	System.out.println("输入格式错误!请按照此格式输入:java ExchangeNum a1 a2 ...a10");
				System.exit(0);                          //输入格式错误,系统退出!
			}
			int a[]=new int[10];                   //构造有10个元素的一维数组a
	        int temp;                            //用于交换的临时变量
	        for(int i=0;i<10;i++)                 //从命令行读入10个整数,存放在a中
	            a[i]=Integer.parseInt(args[i]);
	        System.out.println("您输入的10个整数是:");
	        for(int i=0;i<10;i++)
	            System.out.print(a[i]+"  ");
	        for(int i=0;i<5;i++)
	         {
	            temp=a[i];
	            a[i]=a[9-i];                      //待交换元素的下标和为9
	            a[9-i]=temp;
	         }
	        System.out.println("\n交换后的10个整数是:");
	        for(int i=0;i<10;i++)
	            System.out.print(a[i]+"  ");
	    }
	}
4.建立一个m行n列的矩阵,找出最小元素所在行和列,并输出该值 及行、列位置   
	public class FindMin 
	 {
	    public static void main(String[] args) 
	     {
			if(args.length!=2)                      //输入格式错误
			 {
				System.out.println("输入格式错误!请按照此格式输入:java FindMin m n");
				System.exit(0);                   //输入格式错误,系统退出!
			 }
	        int m,n;
	        m=Integer.parseInt(args[0]);
	        n=Integer.parseInt(args[1]);
	        int a[][]=new int[m][n];            //构造1个m行n列的二维数组
	        for(int i=0;i<m;i++)
	            for(int j=0;j<n;j++)            //为二维数组中的每个元素赋随机值
	                a[i][j]=(int)(100*Math.random());
	        System.out.println("系统随机自动生成的矩阵是:");
	        for(int i=0;i<m;i++)
	         {
	            System.out.println("\n");
	            for(int j=0;j<n;j++)
	             {
	                System.out.print(a[i][j]+" ");
	             }
	         }
	        int min=a[0][0],row=1,column=1;
			for(int i=0;i<m;i++)
				for(int j=0;j<n;j++)
				 {
					if(min>a[i][j])       //找到较小值,并记录其所在行和列的下标
					 {	
						min=a[i][j];
						row=i+1;           //因数组下标从0开始
						column=j+1;
					}
			    }
			System.out.println("\n最小数"+min+"在第"+row+"行,第"+column+"列");
	    }
	}
5.实现矩阵的转置
public class Transpose 
  {
    public static void main(String[] args) 
      {
        int m,n;
		if(args.length!=2)                 //输入格式错误
		 { 
			System.out.println("输入格式错误!请按照此格式输入:java Transpose m n");
			System.exit(0);                //输入格式错误,系统退出!
		 }
        m=Integer.parseInt(args[0]);
        n=Integer.parseInt(args[1]);
        int a[][]= new int[m][n];      //创建m行n列的数组a,表示转置前的矩阵
        int b[][]= new int[n][m];      //创建n行m列的数组b,表示转置后的矩阵
        System.out.println("转置前的矩阵\n");
		          //使用随机方法产生随机数,给数组元素赋值,输出此数组
        for(int i=0;i<m;i++)
         {
            for(int j=0;j<n;j++)
              {
                a[i][j]=(int)(100*Math.random());
                System.out.print(a[i][j]+"  ");
              }
            System.out.println("\n");
        }
        
        for(int i=0;i<n;i++)
          {
            for(int j=0;j<m;j++)
                    b[i][j]=a[j][i];          //转置 
           }
        System.out.println("转置后的矩阵\n");
        for(int i=0;i<n;i++)
         {
            for(int j=0;j<m;j++)
                System.out.print(b[i][j]+"  "); //输出转置后的矩阵
            System.out.println("\n");
        }
    }
}

    6、 求一个10行、10列整型方阵对角线上元素之积

public class MatrixCalculation 
 {
    public static void main(String[] args) 
      {
        int a[][]= new int[10][10];                //创建10行10列的数组
        System.out.println("随机生成的方阵为\n");
		                     //初始化此二维数组,其中使用了方法Math.random()
		                     //此方法的作用是随机产生一个0到1之间的小数
        for(int i=0;i<10;i++)
         {
            for(int j=0;j<10;j++)
             {
                a[i][j]=(int)(10*Math.random())+1;//加1避免了元素值为0
                System.out.print(a[i][j]+"   ");
             }
            System.out.println("\n");
        }
       int sum=1;
       for(int i=0;i<10;i++)
               sum*=a[i][i];         //主对角线元素的特征是行、列下标相同
       System.out.println("主对角线上元素积为:"+sum);
       int num=1;
       for(int i=0;i<10;i++)
               num*=a[9-i][i]; 
	   //副对角线元素的特征是行、列下标的和等于方阵的行数减1(因数组的下标从0开始)
       System.out.println("副对角线上元素积为:"+num);
    }
}

7. 编写一个应用三维数组的程序

public class  ThreeDimension
	{
		public static void main(String[] args) 
		{
			if(args.length!=3)          //输入格式错误
			 {
			System.out.println("输入格式错误!请按照此格式输入:java ThreeDimension x y z");
				System.exit(0);         //输入格式错误,系统退出!
			 }
			int x=Integer.parseInt(args[0]);
			int y=Integer.parseInt(args[1]);
			int z=Integer.parseInt(args[2]);
			int a[][][] = new int[x][y][z];
			                           //给矩阵的每个元素赋值
			for(int i=0;i<x;i++)
				for(int j=0;j<y;j++)
				    for(int k=0;k<z;k++)
				        a[i][j][k]=(int)(100*Math.random());
			       //模拟三维立方体,分别输出从0到x-1坐标上yz平面上二维矩阵。
			for(int i=0;i<x;i++)
			{
				System.out.println("x截面上第"+(i+1)+"个二维矩阵是");
				for(int j=0;j<y;j++)
				  {
					System.out.println("\n");
					for(int k=0;k<z;k++)
					   System.out.print(a[i][j][k]+"  ");
				  }
				System.out.println("\n");
			}
		}
	}
8 编写一个程序,计算一维数组中的最大值、最小值 及差值 。
public class FindMaxMin 
	 {
	        public static void main(String[] args) 
	        {
	         if(args.length!=1)                   //输入格式错误
			  {	
				System.out.println("输入格式错误!请按照此格式输入:java FindMaxMin m");
				System.exit(0);                   //输入格式错误,系统退出!
			  }
			int m=Integer.parseInt(args[0]);
	        int a[]=new int [m];                 //构造有m个元素的数组
			                               //随机生成数组的每个元素并输出此数组
	        System.out.println("随机生成的一维数组:");
	        for(int i=0;i<m;i++)
	         {
	            a[i]=(int)(100*Math.random());
	            System.out.print(a[i]+"  ");
	          }
	        int min,max;            //声明存放最大、最小值的变量
	        min=a[0];              //初始值都是数组的第1个元素
	        max=a[0];
	        for(int i=1;i<m;i++)
	         {
	            if(a[i]< min)      //将数组中余下的每个元素和min, max进行比较
	                min=a[i];       //如果小于min,则赋给min
	            if(a[i]> max)
	                max=a[i];         //如果大于max,则赋给max
	         }
	        System.out.println("\n此数组中最大值是:"+max+" 最小值是:"
			                   +min+" 它们的差是:"+(max-min));
	    }
	}
posted @ 2013-04-03 08:59  elite_2012  阅读(957)  评论(0编辑  收藏  举报