(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取代之。
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