2016年12月23日 星期五

JAVA7教學手冊(洪維恩) CH03變數與資料型態習題

JAVA學習的紀錄,JAVA7教學手冊(洪維恩)習題裡面沒有附上答案,故新手解答錯誤可能非常多,但我會盡力學習查證錯誤並且記錄學習的過程。

3.1
1.下列何者是錯誤的字面值?為什麼?
(a)2B (b)1A(c)3.20(d)a5
(e)$53(f)-67(g)2I(h)6.34K

ans:C(double資料類型)是正確  其他資料型態不同
2.是指出下列各字面值之類型
(a)6.56(b)3.2E24(c)6.74e36(d)1024(e)1.5E-06

ans:a是double,b是double,c是d是int,e是double。

3. 字串(String)是屬於原始資料型態,還是非原始資料型態?為什麼

ans:3-2頁內容的,字串以特殊的方式指向變數實體,稱之為參考(reference)。這類變數在宣告時並不會配置記憶體空間,而是另外進行記憶體配置。固非原始資料。

3.2

4. int char float 與double資料型態的變數,個讚有多少個位元數?它們能夠表示的數值範圍是多少?

















5.試將下列各數以JAVA的指數型式來表示。
(a)-96.43(b)1974.56(c)0.01234(d)0.000432

ans:A:(-9.643E) B(1.9745E3)C(1.234E-2)D(4.32E-4)

6.下列宣告boolean型態的變數並初始化的敘述中,哪一個可以被JAVA編譯器所接受?
(a)boolean flag=true;
(b)Boolean flag=true
(c)boolean flag=True
(d)boolean flag=TRUE

ANS:A 其他字母不能大寫
7.在下列的變數中,是說明它們個屬於哪一種資料?
(a)164            a            int
(b)786L         n           long
(c)33.42         s           double
(d)33.344F                 float
(e)367.87D                double

8.指出下列幾個程式片段錯誤的地方並加以修正:
(a)
01 public static void main(String args[])
02 {
03    long num=32998399887;    //修正:32998399887L
04    System.out.println("num "+num);
05 }
(b)
01 public static void main(String args[])
02 {
03    char ch="\"";                                                            //'\"'
04    System.out.println(ch+"Spring is coming!"+ch);   
05    System.out.println(\""Birds are flying! "\");          //(ch+"Birds are flying!"+ch);
06}
(c)
01 public static void main(String args[])
02 {
03    float num=2.0;
04    System.out.println(num+"*"+num+ = +(num*num));  //換行
//System.out.println("num"+"*"+"num+ = "+(num*num));
05 }
(d)
01 public static void main(String args[])
02 {
03    int imax= Integer.max_value;        //MAX_VALUE需要大寫
04    System.out.println("Max VALUE of int; "+imax);
05 }

9.下列的敘述中,試問應該用甚麼型態的變數來描述下列各項比較恰當?
(1) 一個班級學生人數的總數   a   int
(2)紐約帝國大廈的樓層數        n   int
(3)月球到地球的距離                s   double
(4)手機的重量                                 float
(5)您的身高與體重                         float
(6)這本JAVA的總頁數                    int
(7)一個離子的(ion)重量                 double
(8)硬碟每秒的轉速                         float
(9)昨天有下雨                                 boolean
(10)地球上人口的總數                    int

10.是寫一些程式,分別利用字元'B'的Unicode編碼與16進位碼來列印。關於字元的編碼,請參考附錄D

ans:B的16進位為42  char ch= '\u0042'可印出B

11.假設伏點數變數f的值為6235.748,整個變數i的值為13,試撰寫一程式,將兩個變數值相加(f+i)與相除(f/i)後印除其結果。

ans:
01 public static void main(String args[])
02 {
03 float f=6235.748f;
04 int i=13;
05 System.out.println("f+i="+(f+i)+"  f/i= "+f/i );
06
07 }

12.是將字元變數 ch的值設100 在於程式中以println()印出ch。您會得到甚麼樣的結果?為什麼?

ANS
char ch=100;
System.out.println(ch);

//d  因為附錄D 十進位100 就是d    

13.希臘的小寫字母θ 16進位值為3B8,是在JAVA程式裡列印出小寫字母θ


01 public static void main(String args[])
02 {
03         char ch='\u03B8';
04 System.out.println(ch);
05
06 }

3.3

14如果想把35+52的運算結果換算成長整數(long),則程式碼應如何撰寫?

ans:
01 public static void main(String args[])
02 {
03        int a=35;
04 int b=52;
05 System.out.println((long)a+(long)b);
06
07 }

//印出87

15.如果想把35*52的運算結果換算成浮點數,則程式碼應如何撰寫?

ans:
01 public static void main(String args[])
02 {
03        int a=35;
04 int b=52;
05 System.out.println((float)a+(float)b);
06
07 }
//印出1820.0

16.如果想把12-5的運算結果轉換成倍精度浮點數,則程式碼應如何撰寫?

ans:
01 public static void main(String args[])
02 {
03        int a=12;
04 int b=5;
05 System.out.println((double)a-(double)b);
06
07 }
//印出7.0

17.請撰寫一程式計算並印出5/3的結果。

ans:
01 public static void main(String args[])
02 {
03        int a=5;
04 int b=3;
05 System.out.println((double)a/(double)b);
06
07 }
//印出1.666667

3.4

18.請撰寫一程式,由鍵盤輸入"Wrong never comes right!!"字串,輸出結果也是"Wrong never comes right!!" 字串。

ans
import java.util.Scanner;
public class iplusf
{
public static void main(String args[])
{
Scanner scn=new Scanner(System.in);
String str="Wrong never comes right!!";
str=scn.nextLine();
System.out.println(str);

}
}
//不論輸入甚麼就印出甚麼

19.略

20. 請撰寫一程式,由鍵盤輸入一個整數num,其輸出結果為num*3。

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

num=scn.nextInt();
System.out.println(num*3);

}
}

21.是由鍵盤讀入兩個數值1200與2100,計算此二數之和。

ans

import java.util.Scanner;     // 載入Scanner類別
public class iplusf
{
   public static void main(String args[])
   {
     Scanner scn=new Scanner(System.in);  // 宣告Scanner類別的物件
     int num1;
     int num2;

     System.out.print("num1");
     num1=scn.nextInt();     // 輸入字串
     System.out.print("num2 ");
     num2=scn.nextInt();       // 輸入整數

     System.out.print("num1+num2="+(num1+num2));
   
   }
}
//印出3300

22.請撰寫一程式,由鍵盤輸入一個英文字母,計算它在26個字母裡的順序。舉例來說,若輸入的是d,則輸出為"d為第4個字母"。請注意英文字母大小寫

import java.util.*;
public class iplusf {
    public static void main(String[] args) {
            Scanner sc=new Scanner(System.in);
        char[]ary={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
        System.out.print("請輸入一個英文單字(不可空格):");
        String str=sc.next();
        str=str.toLowerCase();
        for(int i=0;i<str.length();i++){
                for(int j=0;j<ary.length;j++){
                                if((str.charAt(i))==(ary[j])){
                                        System.out.println(str.charAt(i)+"為第"+(j+1)+"個字母");
                                }
                }
        }

//我不會上網找的答案>,,<






3 則留言:

  1. 8.(c)答案應該是
    System.out.println(num+"*"+num+"="+(num*num));
    9.10答案應該是 long
    地球人口至今(2019.07.29)已達75.3億,而int的最大數值為21.4億多,將無法編譯

    回覆刪除
  2. 22.可以使ch強制轉換成int十進制,而a的十進制為97,b為98,得輸入字母-96為答案
    import java.util.Scanner;

    public class Practice22{
    public static void main(String args[]){
    while(true) {
    System.out.println("請輸入一個英文字母(小寫)");
    Scanner scanner = new Scanner(System.in);
    String string = scanner.next();
    char ch;
    ch = string.charAt(0);
    int i = ch - 96;
    System.out.println(ch + "為第" + i + "個字母");
    System.out.println();
    }
    }
    }

    回覆刪除