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("不存在");
       }

         
   
  }
}

沒有留言:

張貼留言