2016年12月29日 星期四

運算子 運算式與敘述ch4

1.
(a)
public class hw4_1a

{
  public static void main (String args[])
  {
     int a=8;
     System.out.println("a="+(++a));
     System.out.println("a="+(a--));
 }
}
//印出 a=9  a=a+1 執行完+1
           a=9              不知道為何會是9,以為是7。
(b)
public class hw4_1b

{
  public static void main (String args[])
  {
     int a=10,b=20;
     a%=5
     b*=3;
     System.out.println("a="+a);
     System.out.println("b="+b);
 }
}
//印出a=0
          b=3

(c)
public class hw4_1c
{
  public static void main (String args[])
  {
     int a=20,b=5;
     a%=b
     b*=3;
     System.out.println("a="+a);
     System.out.println("b="+b);
 }
}
//印出a=0
          b=15

2.下列哪些運算式的值為true?那些運算式的值為false?
(a)'a'<28            a  false
(b)4+3==8-1     n  True
(c)8>2               s  True
(d)'a'!=97              false

3.撰寫一程式,將習題2的運算結果織布林值印出。
(b)4+3==8-1     True
public class iplusf

{
  public static void main (String args[])
  {

    boolean bool=true;
 
 if(4+3==8-1)
 {


    System.out.println(true);
 }
 else
 {
    System.out.println(false);
 }

  }

}//印出true
(c)8>2               True


public class iplusf

{
  public static void main (String args[])
  {

    boolean bool=true;
 
 if(8>2)
 {


    System.out.println(true);
 }
 else
 {
    System.out.println(false);
 }

  }//印出true
4. 下列的運算式中,是指出那些式運算元,那些式運算子?
(a)(6  +  num )  -  12 +  a
     元 子 元     子 元 子 元
(b)num=(  12 +  ans) -  24
     元   子 元 子 元  子 元
(c)k++
元子子
5.何謂一元運算子?與其他運算子相比,他有何特徵?
ans:
一元運算子、二元運算子、以及三元運算子。它們差在哪兒?答案是,它們能,或者說,它們需要幾個運算元來做運算。例如加法會是二元運算子,因為它需要兩個運算元來計算,只有一個運算元是無法做加法運算的。負號則是一元運算子,它將一個運算元變號,從負變正,或者從正變負。三元運算子比較特別,而且只有一個,這個留待以後補充。每個運算子在工作時,會吃掉被用來作運算的運算元,消化後轉化成一個新的運算元,消化方式與結果則視運算子的運算方法而定。

4.2

6.下列的四則運算都沒有加上括號。請在適當的位置將它們都加上括號,使得這些運算式較易閱讀,且依然符合先乘除後加減的原則:
(a)(12/3)+(4*10)+(12*2)
(b)12+(5*12)-(5*6)/4
(c)5-(2*7)+56-(12*12)-(6*3)/(4+1)

7.試判別下列的各敘述的執行結果:
(a)6+4<9+12                                A   true
(b)16+7*6+9                                N   67
(c)(13-6)/7+8                                S   9
(d)7>0 && 6<6 && 12<13                false
(e)8>0 || 12<7                                     true
(f)8<=8                                               true
(g)7+7>15                                          false
(h)19+34-6>4                                     true
(i)12+7>0 || 13-5>6                            true
(j)3>=5                                               false

8.撰寫一程式,將習題7的運算結果列印出。
public class hw_8

{
  public static void main (String args[])
  {

    System.out.println(3>=5   );


  }

}
//印出false。

4.3
9.設下列個運算式中,a的初值皆為10,b的初值皆為20,是寫出下列各式中,經運算後的num a與b之值:
(a)num=(a++)-b
(b)num=(-b)*a
(c)num=(a++)+(b--)
(d)num=(--a)+(b--)
(e)a+=a*(b++)

ans:
(a)10
(b)-200
(c)30
(d)29
(e)a=a+a*(b++) //210
//備註:a++或a-- 似乎沒效果,只有在++a先執行遞增的有效果。


10.試撰寫一程式,將習題9的運算結果印出。
public class aaa

{
  public static void main (String args[])
  {

 int a=10,b=20,num;

    System.out.println(a+=a*(b++));


  }

}
//僅寫其中一個程式。

11.設下列各運算式中,a的出值皆為10,b的初值為5,在不需強制轉換資料型態的情況下,試寫出下列各式中,經運算過後的a與b值:
(a)b*=a
(b)a/=b++
(c)a/=++b
(d)a%=--b
(e)b%=a++
ans
(a)b=b*a          50
(b)a=a/b+1       3
(c)a=a/(b+1)     1.6666
(d)a=a%(b-1)    2
(e)b=b%a+1      6

12.撰寫一程式,將11題的運算結果列印出來。

public class 12

{
  public static void main (String args[])
  {

 int a=10,b=5;

    System.out.println(b=b%a+1  );


  }

}

13.試撰寫一轉換攝氏至華氏溫度的程式,計算攝氏0度是多少華氏溫度,其轉換公式如下:

華氏溫度=(9/5)*攝氏溫度+32

ans   輸入0可得32


import java.util.Scanner;
public class iplusf

{
  public static void main (String args[])
  {
 float a,b;
 Scanner scn=new Scanner(System.in);
 a=scn.nextInt();

System.out.println("攝氏溫度0等於華氏溫度"+(32f+9f/5f*a));


  }
14.根據上題所提供的轉換公式,撰寫轉換華氏溫度至攝氏溫度的程式,並計算華氏32度是多少攝氏溫度。

ans

import java.util.Scanner;
public class iplusf

{
  public static void main (String args[])
  {
 float a,b
 Scanner scn=new Scanner(System.in);
 a=scn.nextInt();

 System.out.println((a-32)*5f/9f));


  }

15.撰寫一轉換英鎊至公斤的程式,計算100英鎊是多少公斤,其轉換公式如下:
      1英鎊=0.454公斤

ans

import java.util.Scanner;
public class iplusf

{
  public static void main (String args[])
  {


 float a,b;
 System.out.println("輸入英鎊");


 Scanner scn=new Scanner(System.in);
 a=scn.nextInt();

 System.out.println((0.454f*a)+"公斤");

  }
//印出45.4公斤

16.根據上題所提供的資訊,撰寫轉換公斤至英鎊的程式,並計算10公斤是多少英鎊。

ans

import java.util.Scanner;
public class iplusf

{
  public static void main (String args[])
  {
 
 float a,b;
 System.out.println("輸入公斤");
 
 
 Scanner scn=new Scanner(System.in);
 a=scn.nextInt();

 System.out.println((2.2026f*a)+"英鎊");

  }
  
}
//印出22.026001英鎊

17.試撰寫一程式,輸入長方形的長和寬,計算其面積。

ans

import java.util.Scanner;
public class iplusf

{
  public static void main (String args[])
  {
 
 float a,b;
 System.out.println("輸入長與寬");
 
 
 Scanner scn=new Scanner(System.in);
 a=(float) scn.nextDouble();
      b=(float) scn.nextInt();  
 System.out.println((float)a*b+"面積");

  }
//輸入小數無法得出面積待解決<- b=(float) scn.nextInt();  更正scn.nextDouble();

18.已知圓球體積為4/3r3次方

ans
import java.util.Scanner;
public class iplusf

{
  public static void main (String args[])
  {

 float a,b;
 System.out.println("圓球體積4/3Π/rrr請輸入半徑R");


 Scanner scn=new Scanner(System.in);
 a=(float) scn.nextDouble();
     
 System.out.println((float)4/3*3.14*a*a*a+"體積");

  }

19.一周有7天,試撰寫一程式,計算285天是幾周又幾天。

ans
import java.util.Scanner;
public class iplusf

{
  public static void main (String args[])
  {

 int c;
 float a,b;
 System.out.println("輸入285");


 Scanner scn=new Scanner(System.in);
      c=scn.nextInt();
 System.out.println(c/7+"week "+c%7+"day");

  }
//印出40week 5day。

20.當Java發現程式的運算式中有形態不符合的情況時,請問有哪些規則可以處裡型態的轉換?
ans:

      自己回答:資料相容  精準度小轉大 若要大轉小則必須自己輸入(強制轉換)
依據本書3-19自動資料做轉換
1.傳換前的資料型態與轉換後的型態相容。
2.轉換後的資料型態之表示範圍比轉換前的形態大。

3-22
強制轉換,若是試表示比較大範圍資料型態的變數,設給範圍較小之資料型態的變數,稱縮小轉換,過程中可能會漏失精準度。

21.設有一程式碼,其變數的初值宣告如下:
char ch='A';
short s=12;
float f=12.4f;
int i=15;
double d=13.62;

在下面的運算式中,是仿照圖4.4.1與圖4.4.2的畫法,繪出資料型態的轉換過程與資料運算過程:
(a) s+(f/s)+(ch*i)
(b)ch+d/(s-i)*f
(c)(s+d)/ch*(d+i)

ans
//第2與3題目S寫錯。


22.試撰寫一程式,將習題21的運算結果印出,藉以驗證運算結果。
(a) s+(f/s)+(ch*i)       我的答案double988.0333..
(b)ch+d/(s-i)*f                           double3.37776  //8.704001731872559正確
(c)(s+d)/ch*(d+i)                       double0.04226  //11.280683076923076正確

import java.util.Scanner;
public class iplusf

{
  public static void main (String args[])
  {

 char ch='A';
 short s=12;
 float f=12.4f;
 int i=15;
 double d=13.62;

 System.out.println((s+d)/ch*(d+i)  );

  }

}

23.設有一程式碼,其變數的初始宣告如下
char ch='P';
short s=54;
float f=6.9f;
int    i=24;
double d=2.98;

試寫出下面各運算式運算過最終的資料型態與運算結果:

(a)ch/(s+f)-(i%d)         //double1.1536289119720458
(b)ch*(s-f)/i-d              //double154.02
(c)i+(f-ch)*s%(i+ch)   //double-75.3999
(d)25-(ch+s)/18           //double18



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)+"個字母");
                                }
                }
        }

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