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 

2017年1月7日 星期六

選擇性敘述與迴圈 ch5

5.1

1.婷婷某日將她從出門 去 7-11 選購麵包 排隊結帳 付款 走路回家的過程 一一記錄下來。是完成下列的問題:

(a)試繪製出適合的流程圖
(b)這個過程屬於哪一種結構?

ans
出門
  |
7-11
  |
選購麵包
  |
排隊結帳
  |
付款
  |
走路回家

循序性結構(名詞真難計我腦中一直跑出順序性結構


2.小雯將她某日公園玩耍的情形記錄下來,一開始先玩翹翹板,接著溜滑梯10次 散步 盪鞦韆5次 看時間不早了,就趕緊回家吃飯。試完成下列的問題:

(a)是繪製出適合的流程圖。
(b)這個過程屬於哪一種結構?

Ans
翹翹板
  |
溜滑梯---|
   |            |
   |           迴圈10次
盪鞦韆---|
  |             |
  |            迴圈10次
回家吃晚餐

屬於重覆性結構

5.2

3.試撰寫一程式,直接設定一個整數值,然後求此數的絕對值

ans:

import java.util.Scanner;
public class iplusf

{
  public static void main (String args[])
  {
      int a,b;
   
   Scanner scn=new Scanner(System.in);
   a=scn.nextInt();
   a=a>0?a:a*(-1);
   System.out.println("|"+a+"|"+"="+a);

  }

}

4.撰寫一程式,可由鍵盤讀入一個字元。若此字元是數字(即數字 0~9),則印出"此字元是數字"字串;若此字元是英文大 小寫字母(即a~z A~Z),則印出"此字元是英文字母"(註:Scanner類別並沒有字元輸入的method,因此可利用next()輸入字串,再用charAt(0)取出輸入字串裡的第0個字元)

ans:難 先略過


5.撰寫一程式,直接設定一個整數值,然後判斷它是奇數或偶數。

ans:


import java.util.Scanner;
public class iplusf

{
  public static void main (String args[])
  {
      int a;
 Scanner scn=new Scanner(System.in);
 a=scn.nextInt();
 if(a%2==0)
 System.out.println("偶數");
 else
 System.out.println("奇數");

  }

}

6.試將習題5改用條件運算值來撰寫

ans不懂題意與第五題差異??????

import java.util.Scanner;
public class iplusf

{
  public static void main (String args[])
  {
      int a;
  Scanner scn=new Scanner(System.in);
  a=scn.nextInt();
  if(a%2==0)
  System.out.println("偶數");
  else
  System.out.println("奇數");

  }

}

7.撰寫一程式利用if敘述判別所輸入的整數是否可以被5與6同時整除。若是,則印出"可被5與6同時整除!"字串,否則印出"不能被5與6同時整除!"字串。

ans

import java.util.Scanner;
public class iplusf

{
  public static void main (String args[])
  {
      int a;
   Scanner scn=new Scanner(System.in);
   a=scn.nextInt();
   if(a%5==0&a%6==0)
   System.out.println("可被5與6同時整除!");
   else
   System.out.println("不可被5與6同時整除!");

  }

}


8.試撰寫一程式,印出從1到100之間,所有可被16整除的數值
Ans:

import java.util.Scanner;
public class iplusf

{
  public static void main (String args[])
  {
     int sum=0,i;
     for(i=1;i<=100;i++)
     {
    if(i%16==0)
    System.out.println(i);
     }

  }

}//印出16 32 48 64 80 96

9.試撰寫一程式,求出1到100之間所有整數平方總和。
Ans:


import java.util.Scanner;
public class iplusf

{
  public static void main (String args[])
  {
     int sum=0,t=0;
     for(int i=1;i<=100;i++)
     {
   
    t=i*i;
    sum=sum+i*i;
    System.out.println(i+"*"+i+"="+t);
    System.out.println("sum="+sum);
   
     }
   
  }

}


10.試利用for迴圈撰寫出一個能產生如下圖結果的程式
1
12
123
1234
12345

ans

import java.util.Scanner;
public class iplusf
{

public static void main(String[] args)
{
int i,j;
for(i=1;i<=5;i++)
{
for(j=1;j<=i;j++)
{
System.out.print(j);
}
System.out.print("\n");
}
}

}


11.試利用一程式,利用do while迴圈完成九九乘法表。

ans

public class iplusf

{
  public static void main (String args[])
  {
     int i,j;
     do{
    for(i=2;i<=9;i++)
    { for(j=1;j<=9;j++)
     {System.out.print(i+"*"+j+"="+i*j+"  ");
   
     }
    System.out.println() ;
         }
     }while(i<=9);
   

  }
}

//印出
2*1=2  2*2=4  2*3=6  2*4=8  2*5=10  2*6=12  2*7=14  2*8=16  2*9=18
3*1=3  3*2=6  3*3=9  3*4=12  3*5=15  3*6=18  3*7=21  3*8=24  3*9=27
4*1=4  4*2=8  4*3=12  4*4=16  4*5=20  4*6=24  4*7=28  4*8=32  4*9=36
5*1=5  5*2=10  5*3=15  5*4=20  5*5=25  5*6=30  5*7=35  5*8=40  5*9=45
6*1=6  6*2=12  6*3=18  6*4=24  6*5=30  6*6=36  6*7=42  6*8=48  6*9=54
7*1=7  7*2=14  7*3=21  7*4=28  7*5=35  7*6=42  7*7=49  7*8=56  7*9=63
8*1=8  8*2=16  8*3=24  8*4=32  8*5=40  8*6=48  8*7=56  8*8=64  8*9=72
9*1=9  9*2=18  9*3=27  9*4=36  9*5=45  9*6=54  9*7=63  9*8=72  9*9=81



12.在下面的程式中,請式著分別指出變數sum i與num這3個變數的有效範圍,並指出其執行結果。

ans:

public class iplusf
{
   public static void main(String args [])
  {
      int sum=1;                         //public static void main(String args [])的{}內為有效範圍
      for(int i=1;i<=5;i++)         //i有效範圍在for{}內為有效範圍
      {
        sum*=i;
        System.out.println("i="+i+" , sum="+sum);
      }
      {
        int num=5;                      //num{}內為有效範圍
        System.out.println("num="+num);
      }
       System.out.println("sum="+sum);
   }
}

13.迴圈主體若沒有敘述,即稱為空迴圈。雖然空迴圈看起來好像沒有做事,實際上是有耗費CPU的資源。以for迴圈為例,其空迴圈的格式如下
  for(設定初值;判斷條件;設定增減輛);

在大括號內不加入任何的敘述,或是直接在迴圈for敘述後面加上分號,這種迴圈稱為空迴圈。空迴圈最主要的功能是用來延遲程式的執行,而某些初學者,卻常常不小心在迴圈敘述後面加上分號,無意間造成空迴圈,進而發生程式邏輯的錯誤。如下面的for迴圈,是用來加總1~10,卻不慎在for敘述後面加上分號,而造成錯誤的結果:
for(i=1;i<=10;i++);      <------這個分號即成空迴圈
   sum+=i;

下面的程式,是利用for空迴圈執行99999999次,進入迴圈前 後皆把迴圈控制變數i的值印出。部分的程式如下,請將它補上該有的程式,以完成本題的需要。

public class iplusf
{
  public static void main(String args[])
  {
     int i=0;   //迴圈控制變數

    System.out.println("進入迴圈, i="+i);
     // 請在此輸入程式碼,以完成本題的要求
 

    for(i=0;i<99999999;i++);//我輸入 應該是這個意思吧
   System.out.println("離開迴圈, i="+i);
   }
}

//印出進入迴圈, i=0
離開迴圈, i=99999999
如果for();沒有這個分號就會印出 從1到9999999

14.假設有一條繩子長3500公尺,每天剪去一半的長度,請問需要花費幾天的時間繩子會短於3公尺(請用break敘述來撰寫)?

ans

public class iplusf

{
  public static void main (String args[])
  {
     double i=3500,j=2,b,v=1;
   
    for(v=1;v<1000;v++)
    {
    System.out.println(v+" times"+"we still have"+i+" M");
    i=i/j;//這個想好久,有存入計算再存入的功能
 
    if(i<3)
    break;
    }
 
    System.out.println("we will take "+v+" days");
   
  }
}
//印出

1.0 timeswe still have3500.0 M
2.0 timeswe still have1750.0 M
3.0 timeswe still have875.0 M
4.0 timeswe still have437.5 M
5.0 timeswe still have218.75 M
6.0 timeswe still have109.375 M
7.0 timeswe still have54.6875 M
8.0 timeswe still have27.34375 M
9.0 timeswe still have13.671875 M
10.0 timeswe still have6.8359375 M
11.0 timeswe still have3.41796875 M
we will take 11.0 days

15.試詳讀下面的程式碼,寫出完整程式及執行的結果:
for(int i=1;i<=10;i++)
{
    if(i*i<50)
       continue;
      System.out.println("i="+i+" ,i*i="+i*i);
}


ans

public class iplusf

{
  public static void main (String args[])
  {
 for(int i=1;i<=10;i++)
 {
     if(i*i<50)
        continue;
       System.out.println("i="+i+" ,i*i="+i*i);
 }
   
  }
}

//印出
i=8 ,i*i=64
i=9 ,i*i=81         1到7<50  continue跳過從下一個迴圈開始
i=10 ,i*i=100

16.試撰寫一程式,利用break敘述來撰寫4個位數之密碼輸入的過程。使用者有三次輸入的機會,並須滿足下列的條件:
(a)如果密碼輸入不對,則會再視次的出現"請輸入密碼"字串。
(b)如果三次輸入都不對,則會印出"密碼輸入超過三次!!"字串,結束程式的執行。
(c)如果輸入正確,則印出"密碼輸入正確,歡迎使用本系統"字串。

本習題的部分程式碼如下,請將它補上該有的程式碼,以完成本題的需求:

import java.util.Scanner;
public class iplusf
{
   public static void main(String args[])
   {
       Scanner scn=new Scanner(System.in);

       int input ;                          //用來儲存使用者輸入的密碼變數
       int cnt=0;                         //用來計數密碼輸入的次數的變數
       int passwd=6128;            //預設正確的密碼為6128

      while(true)
      {
         System.out.print("請輸入密碼");
         input=scn.nextInt();
         // 請在此輸入程式碼,以完成本題的要求
      }
  }
}


ans

import java.util.Scanner;
public class iplusf
{
   public static void main(String args[])
   {
       Scanner scn=new Scanner(System.in);

       int input ;                          //用來儲存使用者輸入的密碼變數
       int cnt=0;                         //用來計數密碼輸入的次數的變數
       int passwd=6128;            //預設正確的密碼為6128

      while(true)   //直到正確才停止執行迴圈
      {
         System.out.print("請輸入密碼");
         input=scn.nextInt();
         // 請在此輸入程式碼,以完成本題的要求
         if(input==passwd)
         System.out.println("正確");
         else  
        System.out.println("密碼錯誤");
             cnt=cnt+1;
             if(cnt>2)
             {
              System.out.println("密碼輸入超過三次!!");
                  break;
             }
      }  
   
  }
}


17.試閱讀下面的程式碼片段,寫出完整程式及執行結果 :

// hw5_17,continue 敘述練習
for(i=1; i<6; i++)
{
   for(j=1 ; j<6; j++)
  {
      if(i<=j)
        continue;
     System.out.println("i="+i+" ,j="+j);
  }
}

ans

public class iplusf
{
   public static void main(String args[])
   {
       int i,j;
  for(i=1; i<6; i++)
  {
     for(j=1 ; j<6; j++)
    {
        if(i<=j)
          continue;
       System.out.println("i="+i+" ,j="+j);
    }
  }
         
   
  }
}

//印出
i=2 ,j=1
i=3 ,j=1
i=3 ,j=2
i=4 ,j=1
i=4 ,j=2
i=4 ,j=3
i=5 ,j=1
i=5 ,j=2
i=5 ,j=3
i=5 ,j=4

18.試撰寫一程式,利用continue敘述,找出小於45的最大質數。

ans

public class iplusf
{
   public static void main(String args[])
   {
       int i,j,b=0;
     
  for(i=2; i<=46; i++)
  {

  for(j=2;j<i;j++)
  {
      if(i%j==0)    
      break;
  System.out.println("質數= "+i);

  }

  }

//尚未解題成功暫時答案

19.是由程式中直接設定一個1~7之間的整數 day,代表星期一到星期日。若 day的值是1~5,則印出"今天要上班",若 day的值是6~7,則印出"今天要休息",若 day的值不是1~7,則印出"輸入錯誤"。

ans

import java.util.Scanner;
public class iplusf
{
   public static void main(String args[])
   {
     
  System.out.print("輸入一個1到7之間的數字");
  int i,b=0;

     
       Scanner scn=new Scanner(System.in);
       i=scn.nextInt();
 
       switch(i)
       {
       case 1:
       case 2:
       case 3:
       case 4:
       case 5:
           System.out.print("今天要上班");
           break;
       case 6:
       case 7:
      System.out.print("今天休息");
           break;
       default:
      System.out.print("輸入錯誤");
       }

         
   
  }
}


20.試由程式中直接設定一個 1~12數值,如果超出此範圍,則印出"月份不存在",否則利用 switch 印出相對應的季節:

3~5: 春天
6~8: 夏天
9~11:秋天
1,2,12:冬天

ans

import java.util.Scanner;
public class iplusf
{
   public static void main(String args[])
   {
     
  System.out.print("輸入一個1到12之間的數字");
  int i,b=0;

     
       Scanner scn=new Scanner(System.in);
       i=scn.nextInt();
 
       switch(i)
       {  
       case 3:
       case 4:
       case 5:
           System.out.print("春天");
           break;
       case 6:
       case 7:
       case 8:
      System.out.print("夏天");
           break;
       case 9:
       case 10:
       case 11:
      System.out.print("秋天");
           break;
       case 1:
       case 2:
       case 12:
      System.out.print("冬天");
           break;
       default:
      System.out.print("月份不存在");
       }

         
   
  }
}

21. 試由程式中直接設定一個 1~12之間的整數 month,代表一年的12個月份。 若 month的值 1,2,month 的值是7,8,則印出"暑假",若 month 的值 9~12,則印出"上學期",若month的值是3~6,則印出 "下學期" ,若 month的值不是 1~12,則印出"不存在"。

ans

import java.util.Scanner;
public class iplusf
{
   public static void main(String args[])
   {
     
  System.out.print("輸入一個1到12之間的數字");
  int i,b=0;

     
       Scanner scn=new Scanner(System.in);
       i=scn.nextInt();
 
       switch(i)
       {
       case 1:
       case 2:
      System.out.print("暑假");
           break;
       case 3:
       case 4:
       case 5:  
       case 6:
      System.out.print("下學期");
           break;
       case 7:
       case 8:
      System.out.print("暑假");
           break;
       case 9:
       case 10:
       case 11:
       case 12:
      System.out.print("上學期");
           break;
   
       default:
      System.out.print("不存在");
       }

         
   
  }
}