2017年1月20日 星期五

陣列 Ch6

1.下列矩陣值的設定方式是正確的嗎?如果不是,試指出其錯誤的地方。

(a) int arr={6,7,8,9,1,2};
(b) int arr[5]={5,6,2,7,8,9};
(c) int arr[]={4,8,3,6,2,9};
(d) double arr[]={8,6.7,5,1.9,4.6};

ans
(a) 缺少[]
(b) int arr[5] 不能直接宣告元素而是arr[0]=5 arr[1]=9在其他地方個別宣告元素值。
(c)正確
(d)正確



2.試設計一程式,依照下列的公式來計算 sum 的值,並將其值印出。

           9
sum=  Σ  a[n]*b[9-n]=a[0]*b[9]+a[1]*b[8]+...+a[9]*b[0] ,
          n=0    
其中a與b兩個陣列宣告為:

int a[]={18,-51,23,35,10,9,-3,52,81,69};
int b[]={28,32,-35,40,73,17,92,32,13,29};


ans

import java.util.Scanner;
public class iplusf
{
   public static void main(String args[])
   {
       int sum=0;
       int a[]={18,-51,23,35,10,9,-3,52,81,69};
  int b[]={28,32,-35,40,73,17,92,32,13,29};
       int i;
       for(i=0;i<=9;i++)
       System.out.print(a[i]+" ");
           System.out.println();
         
         
  for(i=0;i<=9;i++)
  System.out.print(b[i]+" ");
      System.out.println();
   
 for(i=0;i<=9;i++)
 sum+=a[i]*b[9-i];
 System.out.println(sum);
  }
}

//印出
18 -51 23 35 10 9 -3 52 81 69
28 32 -35 40 73 17 92 32 13 29
7226

其實只要最後一個for迴圈就可以了。


3.試設計一程式,依照下列的需求完成 :

(a) 宣告並為陣列A設值。陣列A的值為A[]={53,27,69,12,3,96}
(b)印出陣列A值。
(c)計算陣列A中的奇數與偶數各有多少。
(d)尋找陣列中奇數的最大值。
(e)尋找陣列中偶數的最大值。


ans

(a)int A[]={53,27,69,12,3,96};
(b)for(int i=0;i<A.length;i++)
     System.out.print("A["+i+"]="+A[i]+" ");

印出A[0]=53 A[1]=27 A[2]=69 A[3]=12 A[4]=3 A[5]=96 

(c)
 for(int i=0;i<A.length;i++)
     {
     if(A[i]%2==0)
    sum+=1;
     if(A[i]!=0)
     sum1+=1;
      }
      System.out.print("偶數sum="+sum);
      System.out.print("奇數sum="+sum1);

印出  偶數sum=2奇數sum=6
(d)(e)

import java.util.Scanner;
public class iplusf
{
   public static void main(String args[])
   {
      int min,max,sum=0,sum1=0;
  int A[]={53,27,69,12,3,96};
  min=max=A[0];
      for(int i=0;i<A.length;i++)
     {
     if(A[i]%2==0)
    sum+=1;
     if(A[i]>max)
     max=A[i];
     if(A[i]!=0)
     sum1+=1;
     if(A[i]<min)
     min=A[i];
      }
      System.out.println("偶數sum="+sum);
      System.out.println("奇數sum="+sum1);
      System.out.println("max="+max);
      System.out.println("min="+min);
  }
}

印出
偶數sum=2
奇數sum=6
max=96
min=3


4. 設陣列array 宣告為
int array[]={3,5,0,3,2,4,1,6,8,5,4,3,2};

(a) 試撰寫一程式,利用length計算陣列array內元素個數。
(b)接續(a),試找出陣列array內元素的值介於3~6之間(包含3和6)的元素共有幾個


ans
(a)
 public static void main(String args[])
   {
  int array[]={3,5,0,3,2,4,1,6,8,5,4,3,2};

  System.out.println("個數="+array.length);
  }

(b)
public class iplusf
{
   public static void main(String args[])
   {
    int[] array={3,5,0,3,2,4,1,6,8,5,4,3,2};
    int i,sum=0;

    System.out.println("元素="+array.length);
    for(i=0;i<array.length;i++){
     if(array[i]>=3 && array[i]<=6)
     sum=sum+1 ;
    }
    System.out.println("3到6共多少個"+sum);
  }
}
//印不出來有問題    <--已經解決
元素=13

3到6共多少個8

5.試撰寫一程式,直接為5個整數設值,並存放到一陣列,再計算這5個數的和。

ans

public class iplusf
{
   public static void main(String args[])
   {
  int a[]={5,2,8,4,5};
  int i;
  int sum=0;
  for(i=0;i<a.length;i++)
  sum+=a[i];

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

6.試撰寫一程式,找出一維陣列元素最大值與最小值的索引值。

ans:

public class iplusf
{
   public static void main(String args[])
   {
  int max=0,min=0,sum=0;
  int a[]={51,12,8,4,6};
 

       max=min=a[0];
    for(int i=0;i<a.length;i++)
    {
    sum+=a[i];
    if(a[i]>max)
     max=a[i];
 
    if(a[i]<min)
     min=a[i];
 

 
    }
    System.out.println("max="+max);
    System.out.println("min="+min);
    System.out.println("sum="+sum);
  }
}

//印出
max=51
min=4
sum=81

7.試撰寫一程式,計算一維陣列中最大與最小的差值。

ans
同上
 在System.out.println("sum="+sum);之下加上
System.out.println("最大最小差值="+(max-min));即可


8.下表為某星期一至星期似的時段一 時段二 與時段三地氣溫:







請將上表的內容直接於程式中以陣列出值方式設定,並依序完成下列各提:

(a)印出陣列內容。
(b)每日的平均溫度。
(c)時段一 時段二與時段三的平均氣溫。
(d)溫度最高的日子與時段。
(e)溫度最低的日子與時段。

ans:
(a)
public class iplusf
{
   public static void main(String args[])
   {
      int i,j,sum=0,q;
      double day[][]={{18.2,17.3,15,13.4},{23.8,25.1,20.6,17.8},{20.6,21.5,18.4,15.7}};
      System.out.print("             ");
      for(q=1;q<5;q++)
      {
      System.out.print("星期"+(0+q)+" ");
      }
      System.out.println();//  "\n"也是空一列喔
      for(i=0;i<day.length;i++)//上面已宣示過資料型態for裡在重覆宣示會造成錯誤
      {
     System.out.print("時段"+(i+1)+" ");
     for(j=0;j<day[i].length;j++)
     {
     System.out.print(day[i][j]+"  ");
   
     }
   
     System.out.print("\n");//時段1....跑完i
      }
   
   
   }

}
//印出
時段1 18.2  17.3  15.0  13.4
時段2 23.8  25.1  20.6  17.8
時段3 20.6  21.5  18.4  15.7

(b)

public class iplusf
{
   public static void main(String args[])
   {
      int i,j,q,sum2=0;
      double sum=0;
      double day[][]={{18.2,17.3,15,13.4},{23.8,25.1,20.6,17.8},{20.6,21.5,18.4,15.7}};
      System.out.print("             ");
      for(q=1;q<5;q++)
      {
      System.out.print("星期"+(0+q)+" ");
      }
      System.out.println();//  "\n"也是空一列喔
      for(i=0;i<day.length;i++)//上面已宣示過資料型態for裡在重覆宣示會造成錯誤
      {
     System.out.print("時段"+(i+1)+" ");
     for(j=0;j<day[i].length;j++)
     {
     sum+=day[i][j];
     sum2+=1;
     System.out.print(day[i][j]+"  ");
   
     }
   
     System.out.print("\n");//時段1....跑完i
      }
      System.out.print("  "+"sum="+sum+"  average="+(sum/sum2));//  僅多出此碼與sum2
   
   }

}

//印出
             星期1 星期2 星期3 星期4
時段1 18.2  17.3  15.0  13.4
時段2 23.8  25.1  20.6  17.8
時段3 20.6  21.5  18.4  15.7
  sum=227.4  average=18.95

(c)

import java.util.Scanner;
public class iplusf
{
   public static void main(String args[])
   {
      int i,j,q,sum2=0,sum9=0,p;
      double sum=0,sum8=0;
      double day[][]={{18.2,17.3,15,13.4},{23.8,25.1,20.6,17.8},{20.6,21.5,18.4,15.7}};
      System.out.print("             ");
      for(q=1;q<5;q++)
      {
      System.out.print("星期"+(0+q)+" ");
      }
      System.out.println();//  "\n"也是空一列喔
   
      for(i=0;i<day.length;i++)//上面已宣示過資料型態for裡在重覆宣示會造成錯誤
      {
     System.out.print("時段"+(i+1)+" ");
     for(j=0;j<day[i].length;j++)
     {
   
   
     sum+=day[i][j];
     sum2+=1;
   
     System.out.print(day[i][j]+"  ");
   
   
     }
   
     System.out.print("\n");//時段1....跑完i
      }
      System.out.print("  "+"sum="+sum+"  average="+(sum/sum2)+"\n");
      System.out.print("\n"+"enter num between 0 to 2"+"\n");
      Scanner scn=new Scanner(System.in);
      p=scn.nextInt();
   
      for(i=0;i<day.length;i++)//上面已宣示過資料型態for裡在重覆宣示會造成錯誤
      {
   
     for(j=0;j<day[i].length;j++)
     {
     if(i==p)
     {sum8+=day[i][j];
     sum9+=1;}
   
   
   
   
     }
   
      }
   
      System.out.print("\n"+"時段"+(p+1)+" "+"average="+(sum8/sum9));
   
   }

}

//印出
              星期1 星期2 星期3 星期4
時段1 18.2  17.3  15.0  13.4
時段2 23.8  25.1  20.6  17.8
時段3 20.6  21.5  18.4  15.7
  sum=227.4  average=18.95

enter num between 0 to 2
0

時段1 average=15.975
1
時段2 average=21.825
2
時段3 average=19.05

(d) 溫度最高的日子與時段
(e) 溫度最低的日子與時段

ans

public class iplusf
{
   public static void main(String args[])
   {
      int i,j,sum=0,q,time=0,date=0,time1=0,date1=0;
      double day[][]={{18.2,17.3,15,13.4},{23.8,25.1,20.6,17.8},{20.6,21.5,18.4,15.7}};
      double min=0,max=0;
      min=max=day[0][0];
      System.out.print("             ");
      for(q=1;q<5;q++)
      {
      System.out.print("星期"+(0+q)+" ");
      }
      System.out.println();//  "\n"也是空一列喔
      for(i=0;i<day.length;i++)//上面已宣示過資料型態for裡在重覆宣示會造成錯誤
      {
       System.out.print("時段"+(i+1)+" ");
       for(j=0;j<day[i].length;j++)
       {
           if(max<day[i][j])
           {
          max=day[i][j];
          time=i+1;
          date=j+1;
           }
           if(min>day[i][j])
           {
          min=day[i][j];
          time1=i+1;
          date1=j+1;
       
           }
      System.out.print(day[i][j]+"  ");
   
       }
   
       System.out.print("\n");//時段1....跑完i
     
      }
      System.out.print("\n"+"max="+max+" "+"時段"+time+" "+"星期"+date);
      System.out.print("\n"+"min="+min+" "+"時段"+time1+" "+"星期"+date1);
   }

}

//印出
             星期1 星期2 星期3 星期4
時段1 18.2  17.3  15.0  13.4
時段2 23.8  25.1  20.6  17.8
時段3 20.6  21.5  18.4  15.7

max=25.1 時段2 星期2
min=13.4 時段1 星期4

9.假設某一公司有五種產品A B C D 與E,其單價分別為12 16 10 14與15元;而該公司共有三位銷售員,他們在某月份的銷售量如下圖所示:






試撰寫一程式印出上表的內容,並計算:

(a)每一個銷售員的銷售總金額。
(b)每一項產品的銷售總金額。
(c)有最好業績(銷售總金額為最多者)的銷售員。
(d)銷售總金額為最多的產品。


(a)每一個銷售員的銷售總金額。
ans

public class eel

{
  public static void main (String args[])
  {
     int i,j = 0,sum0=0,sum1=0,sum2=0,sum3=0,sum4=0,sum5=0,x=0,y=0,z=0,q = 0,w=0,e=0;
    int sales[][]= {{33,32,56,45,33},{77,33,68,45,23},{43,55,43,67,65}};
    for(i=0;i<sales.length;i++)
    {
     for(j=0;j<sales[i].length;j++)
     {
    if(j==0)
    {
    sales[i][j]=sales[i][j]*12;
    }
    if(j==1)
    {
    sales[i][j]=sales[i][j]*16;
    }
    if(j==2)
    {
    sales[i][j]=sales[i][j]*10;
    }
    if(j==3)
    {
    sales[i][j]=sales[i][j]*14;
    }
    if(j==4)
    {
    sales[i][j]=sales[i][j]*15;
    }
     }
    }
    for(i=0;i<sales.length;i++)
    {
     for(j=0;j<sales[i].length;j++)
     {
          if(i==0)
          {
             
       sum0+=sales[i][j];
     
          }
          if(i==1)
          {
             
       sum3+=sales[i][j];
     
          }
          if(i==2)
          {
             
       sum5+=sales[i][j];
     
          }
       //使用累績加法必須有起始數值例如int x=0;
     }
   
    }
    System.out.print("salesman1="+sum0+" "+"salesman2="+sum3+" "+"salesman3="+sum5);
   
  }
}
//印出
salesman1=2593 salesman2=3107 salesman3=3739

(b)每一項產品的銷售總金額。

ans

public class eel

{
  public static void main (String args[])
  {
     int i,j = 0,sum0=0,sum1=0,sum2=0,sum3=0,sum4=0,sum5=0,x=0,y=0,z=0,q = 0,w=0,e=0;
    int sales[][]= {{33,32,56,45,33},{77,33,68,45,23},{43,55,43,67,65}};
 
    for(i=0;i<sales.length;i++)
    {
     for(j=0;j<sales[i].length;j++)
     {
    if(j==0)
    {
    sales[i][j]=sales[i][j]*12;
    }
    if(j==1)
    {
    sales[i][j]=sales[i][j]*16;
    }
    if(j==2)
    {
    sales[i][j]=sales[i][j]*10;
    }
    if(j==3)
    {
    sales[i][j]=sales[i][j]*14;
    }
    if(j==4)
    {
    sales[i][j]=sales[i][j]*15;
    }
     }
    }
   
   
    for(i=0;i<sales.length;i++)
    {
     for(j=0;j<sales[i].length;j++)
     {
          if(j==0)
          {
       sum0+=sales[i][j];
          }
          if(j==1)
          {  
       sum3+=sales[i][j];
          }
          if(j==2)
          {
       sum5+=sales[i][j];
          }
          if(j==3)
          {
       sum2+=sales[i][j];
          }
          if(j==4)
          {
       sum4+=sales[i][j];
          }
       //使用累績加法必須有起始數值例如int x=0;
     }
   
    }
    System.out.print("產品A="+sum0+" "+"產品B="+sum3+" "+"產品C="+sum5+" "+"產品D="+sum2+" "+"產品E="+sum4);

  }


}
//印出
產品A=1836 產品B=1920 產品C=1670 產品D=2198 產品E=1815

(c)有最好業績(銷售總金額為最多者)的銷售員。

salesman3=273
(d)銷售總金額為最多的產品。

產品D=2198

10.試撰寫一程式,找出二維陣列中最小的索引值。印出這個所以值的值,並驗證您的執行結果。陣列的大小與內容請自行設定。

ans

public class iplusf
{
  public static void main (String args[])
  {
    int selfish[][]={{5,7,11,21},{9,1,14,8}};
    int i,j,min=0;
    min=selfish[0][0];
    for(i=0;i<selfish.length;i++)
    {
    for(j=0;j<selfish[i].length;j++)
     {
    if(selfish[0][0]>selfish[i][j])
    {
    selfish[0][0]=selfish[i][j];
    min=selfish[0][0];
    }
     }
 
    }
    System.out.print(min);
  }

}
//印出   1

11.試撰寫一程式,計算並印出二維陣列中,各元素的平方值。其陣列的值如下:
A[][]{{1,2,3},{4,5,6}};
經過運算之後,陣列的值應該為
A[][]={{1,4,9},{16,25,36}};

ans

public class iplusf
{
  public static void main (String args[])
  {
    int A[][]={{1,2,3},{4,5,6}};
    int i,j,min=0;
    for(i=0;i<A.length;i++)
    {
    for(j=0;j<A[i].length;j++)
    {
   
    System.out.print(A[i][j]*A[i][j]+" ");
   
   
    }
    System.out.print("\n");
    }
 
  }

}

//印出
1 4 9
16 25 36

12.試撰寫一程式,在三維陣列A裡找出所有元素的最小值。陣列A的值如下:

int A[] [] []={{{15.85.36},{30,14,37},
                       {47,23,96},{19.39,51}},
                      {{22,16,51},{97.30,12},
                       {68,77,26},{57,32,76}}};

ans

public class iplusf
{
  public static void main (String args[])
  {
 int A[] [] []={{{15,85,36},{30,14,37},
          {47,23,96},{19,39,51}},
         {{22,16,51},{97,30,12},
          {68,77,26},{57,32,76}}};
    int i,j,m,min=0;
    min=A[0][0][0];
 
    for(i=0;i<A.length;i++)
    {
    for(j=0;j<A[i].length;j++)
    {
   
    for(m=0;m<A[i][j].length;m++)
       {
       System.out.print(A[i][j][m]+" ");
    if(A[0][0][0]>A[i][j][m])
    {
    A[0][0][0]=A[i][j][m];
    min=A[0][0][0];
    }
   
       }
    System.out.print("\n");
    }
    System.out.print("\n");
    }
   System.out.print("min="+min);
  }

}

//印出
15 85 36
30 14 37
47 23 96
19 39 51

22 16 51
97 30 12
68 77 26
57 32 76

min=12

13.在數位彩色照片裡,每一個畫素(pixel)的顏色是由 綠與藍(red green與blue,即rgb)三個顏色混合而成的。通常rgb的強度可用0~255的數值來表示。數值越大代表顏色的強度越強。照片的維度是二維,因此恰可用一個二維的矩陣來表示他,每一個矩陣的元素即代表了一個畫素。但因每一個畫素必須是由紅 綠 與藍三個顏色組成,於是要正確的表示一張數位彩色照片的資料,必須利用三維矩陣。下面是一個三維矩陣示意圖,它代表了一個3X3畫素的彩色影像:




(a) 試以一個三維的陣列來描述此一影像。
(b)試將每一個畫素中的r值加30。若加30之後的值超過255,則以255取代之
(c)試將每一個畫素中的g值減30。若30之後的值小於0,則以0取代之。

ans

(a) 試以一個三維的陣列來描述此一影像。

ans

public class iplusf
{
  public static void main (String args[])
  {
 int A[][][]={{{18,172,127},{89,133,136},{175,8,43}},
 {{234,224,113},{128,151,40},{34,48,75}},
 {{141,28,192},{127,40,234},{131,228,98}}};

 System.out.print(A[2][0][2]);
 
  }

}//印出192

(b)試將每一個畫素中的r值加30。若加30之後的值超過255,則以255取代之


ans

public class iplusf
{
  public static void main (String args[])
  {
   int A[][][]={{{18,172,127},{89,133,136},{175,8,43}},
     {{234,224,113},{128,151,40},{34,48,75}},
     {{141,28,192},{127,40,234},{131,228,98}}};
   int i,j,l,p=0;
 
   for(i=0;i<A.length;i++)
   {
  for(j=0;j<A[i].length;j++)
  {
  if((A[i][j][0]+30)>255)
  {
  A[i][j][0]=(255-30);
  }

  System.out.print((A[i][j][0]+30)+" ");

  }
   }

 

  }
}

//印出
48 119 205 255 158 64 171 157 161

(c)試將每一個畫素中的g值減30。若30之後的值小於0,則以0取代之。

ans
public class iplusf
{
  public static void main (String args[])
  {
   int A[][][]={{{18,172,127},{89,133,136},{175,8,43}},
     {{234,224,113},{128,151,40},{34,48,75}},
     {{141,28,192},{127,40,234},{131,228,98}}};
   int i,j,l,p=0;
 
   for(i=0;i<A.length;i++)
   {
  for(j=0;j<A[i].length;j++)
  {
  if((A[i][j][1]-30)<0)
  {
  A[i][j][1]=0+30;
  }

  System.out.print((A[i][j][1]-30)+" ");


  }
   }

 

  }
}
//印出
142 103 0 194 121 18 0 10 198

14.設陣列A的維度為4X2X3,試在程式碼裡宣告此一陣列,並在宣告同時設定初值,然後計算陣列A內所有元素的總和。陣列A的值如下:

A [] [] []={{{82,13,21},{49,12,6}},{{4,18,30},{50,24,62}},
                  {{7,9,14},{20,43,19}},{{20,68,33},{15,17,38}}};

ans:
public class iplusf
{
  public static void main (String args[])
  {
 int i,j,l,sum=0;
 int A[][][]={{{82,13,21},{49,12,6}},{{4,18,30},{50,24,62}},
              {{7,9,14},{20,43,19}},{{20,68,33},{15,17,38}}};

      for(i=0;i<A.length;i++)
      {
     
     for(j=0;j<A[i].length;j++)
     {
     for(l=0;l<A[i][j].length;l++)
     {
    sum=sum+A[i][j][l]; 
     
     }
     
     
     }
     
     
     
      }
  
      System.out.print("sum="+sum);
  }
}
//印出
sum=674

15.試撰寫一程式,請利用三維陣列A完成下列題目的要求。陣列A的值如下:

int A[][][]={{{15,50,65},{38,94,25},
                      {79,44,19},{89,54,73}},
                    {{14,90,46},{43,23,67},
                      {32,56,78},{94,78,40}}};

(a)印出陣列內容。

ans
public class iplusf
{
  public static void main (String args[])
  {
 int i,j,l,sum=0;
 int A[][][]={{{15,50,65},{38,94,25},
          {79,44,19},{89,54,73}},
        {{14,90,46},{43,23,67},
          {32,56,78},{94,78,40}}};

      for(i=0;i<A.length;i++)
      {
     
     for(j=0;j<A[i].length;j++)
     {
     for(l=0;l<A[i][j].length;l++)
     {
     System.out.print(A[i][j][l]+" ");
     
     }
     
     System.out.print("\n");
     }
     
     System.out.print("\n");
     
      }
      
  }
}
//印出
15 50 65 
38 94 25 
79 44 19 
89 54 73 

14 90 46 
43 23 67 
32 56 78 
94 78 40 

(b)在陣列A裡找出所有大於50的元素,將該元素重新設值為99。

ans
public class iplusf
{
  public static void main (String args[])
  {
 int i,j,l,sum=0;
 int A[][][]={{{15,50,65},{38,94,25},
          {79,44,19},{89,54,73}},
        {{14,90,46},{43,23,67},
          {32,56,78},{94,78,40}}};

      for(i=0;i<A.length;i++)
      {
     
     for(j=0;j<A[i].length;j++)
     {
     for(l=0;l<A[i][j].length;l++)
     {
     if(A[i][j][l]>50)
     {
     A[i][j][l]=99;
     }
     System.out.print(A[i][j][l]+" ");
     
     }
     
     System.out.print("\n");
     }
     
     System.out.print("\n");
     
      }
      
  }
}

(c)印出完成(b)之後的陣列內容
//印出
15 50 99 
38 99 25 
99 44 19 
99 99 99 

14 99 46 
43 23 99 
32 99 99 
99 99 40 

沒有留言:

張貼留言