java語言程式設計(基礎篇)第2章 基本程式設計 複習題 解答
第2章基本程式設計
作者:wwj
複習題
2.2~2.7節
2.1.下列哪些識別符號是合法的?哪些是java關鍵字?
applet ,Applet , a++ , --a , 4#R , $4 , #44 , apps ,class , public ,int ,x ,y ,radius
解:合法:applet , Applet, $4, apps , x, y ,radius.
不合法:a++ , --a , 4#R , #44 , class , public , int
關鍵字:class , public , int
2.2.將下面的演算法翻譯成java程式碼:
·第一步:宣告一個名為miles
·第二步:宣告一個名為KILOMETERS_PER_MILE值為1.609的double型變數。
·第三步:宣告一個名為kilometers的double型變數,將miles和KILOMETERS_PER_MILE相乘的結果賦給kilometers。
·第四步:將kilometers顯示在控制檯上。
在第四步之後,kilometers的值是多少?
解:1.double miles = 100;
2. final double KILOMETERS_PER_MILE = 1.609
3. kilometers = miles * KILOMETERS_PER_MILE;
4.System.out.println(kilometers);
kilometers=160.9
2.3使用常量的好處是什麼?宣告一個值為20的int型常量SIZE。
解:使用常量有三個好處:1)不必重複輸入同一個值;
2)如果必須修改常量值,只需要在原始碼的一個地方做修改;
3)給常量賦值一個描述性名字會提高程式易讀性。
2.8~2.10節
2.4假設int a=1和 double d=1.0 ,並且每個表示式都是獨立的,那麼下面的表示式的結果是什麼?
a = 46 /9;=> a =5
a = 46 %9 + 4 * 4 – 2;=> a = 1 + 16 -2 = 15
a = 45 +43 % 5 * (23 * 3 % 2); =>a =45 + 3 * (1) = 48
a %=3 / a+ 3;=>a % = 3 + 3 => a = a % 6 = 1
d = 4 + d* d + 4;=> d = 4 + 1.0 + 4 = 9.0
d += 1.5* 3 + (++a);=> d + = 4.5 + 2 =>d = d + 6.5 = 7.5
d -= 1.5* 3 + a++;=> d -= 4.5 + 1 = > d = d – 5.5 = -4.5
2.5給出下面求餘運算的結果。
56 % 6=> 2
78 % -4=>2
-34 % 5=>-4
-34 % -5=>-4
5 % 1=>0
1 % 5=>1
啟發:求餘運算的結果的正負取決於被除數的正負,若被除數為負餘數為負,反之為正
2.6如果今天是星期二,那麼100天后是星期幾?
解:( 2 + 100 ) % 7 = 4 ,所以100天后是星期四
2.7分別找出byte、short、int、long、float和double中的最大數和最小數,哪種資料型別所需的儲存空間最小?
解:類型範圍最大數最小數儲存大小
byte-128~ 127127-1288位
short-32768~32767-327683276716位
int-2147483648~2147483647-21474836482147483648 32位
long-9223372036854775808~9223372036854775807
-92233720368547758089223372036854775807
64位
float1.4E-45~3.4028235E+383.4028235E+381.4E-4532位
double 4.9E-325~1.7976931348623157E+30864位
2.8 25 / 4的結果是什麼?如果希望得到的結果是浮點數,應該怎麼改寫這個表示式?
解:25 / 4 = > 6,如果希望得到的結果是浮點數,25/ 4應該改寫為 25.0 / 4.0、25.0 / 4
或者25 / 4.0
2.9下列語句正確嗎?如果正確,寫出其輸出值。
System.out.println(“25 / 4 is” + 25 / 4);=> 6
System.out.println(“25 / 4.0 is” + 25 /4.0);=> 6.25
System.out.println(“3 * 2 / 4 is” +3 * 2 / 4);=> 1
System.out.println(“3.0 * 2 / 4 is” + 3.0 *2 / 4); => 1.5
2.10如果用java書寫下面的算術表示式?
解:4.0 / (3.0 * (r + 34)) – 9 * (a +b * c) + (3.0 + d * (2 + a)) / (a + b * d)
2.11假設m和r都是整數。編寫mr^2的java表示式,得到一個浮點數。
解:1.0 * m * ( r * r)
2.12下列說法哪些是正確的?
(1)任何表示式都可以用作語句。
(2)表示式x++可以用作語句。
(3)語句x=x+5也是一個表示式。
(4)語句x=y=x=0是非法的。
解:(2)(3)是正確的
2.13下列哪些是正確的浮點數直接量?
12.3,12.3e+2 , 23.4e-2 , -334.4 , 20 , 39F , 40D
解:都是正確的浮點數直接量
2.14找出並修改下列程式碼的錯誤:
1public class Test {
2public void main (string [] args){
3int i;
4int k = 100.0;
5int j = i + 1;
6
7System.out.println(“ j is” + j + “ and kis “ + k);
8}
9}
解:第2行:main方法沒有用static修飾,引數列表中string應為String
第3行:i未初始化
第4行:double型別值不能直接賦給int型變數
第5行:i應先定義
第7~8行:字串不能斷行
2.15如何使用System.currentTimeMillis()方法獲取當前分鐘數?
解:long totalMilliseconds =System.currentTimeMillis();
先呼叫System.currentTimeMillis()獲取當前時間與1970年1月1日0點之間單位為毫秒的差值。
接著通過 totalMilliseconds/1000來計算總的秒數
long totalSeconds = totalMilliseconds / 1000;
計算總的分鐘數
long totalMinutes = totalSeconds / 60;
最後獲取當前分鐘數
long currentHour = totalHours % 24;
2.11節
2.16不同型別的數值能在一起計算嗎?
解:當然可以。不同型別可以進行相同的計算成為型別轉換。
2.17如果顯式地將double型轉換為int型,那麼對double型值的小數部分是如何處理的?型別轉換是否改變被轉換變數的值?
解:小數部分被截去,型別轉換不改變被轉換變數的值。
2.18寫出下面語句段的輸出:
float f =12.5F;
int i =(int)f;
System.out.println(“fis “ + f);=> 12.5
System.out.println(“iis “ + i);=> 12
2.13節
2.19使用列印語句求出‘1’、‘A’、‘B’、‘a’、‘b’的ASCII碼。使用列印語句求出ASCII碼為十進位制數40、59、79、85、90的字元。使用列印語句求出ASCII碼為十六進位制40、5A、71、72、7A的字元。
解:
System.out.println((int)'1');
System.out.println((int)'A');
System.out.println((int)'B');
System.out.println((int)'a');
System.out.println((int)'b');
System.out.println((char)40);
System.out.println((char)59);
System.out.println((char)79);
System.out.println((char)85);
System.out.println((char)90);
System.out.println((char)0X40);
System.out.println((char)0X5A);
System.out.println((char)0X71);
System.out.println((char)0X72);
System.out.println((char)0X7A);
2.20下列哪些是正確的字元直接量?
‘1’,‘\u345dE’,‘\u3fFa’,‘\b’,\t
解:‘\u345dE’是錯的,應為4個16進位制數,而不是5個
其他都正確。
2.21如何顯示字元\和 “?
解:'\\' and '\”';
2.22執行下述程式碼:
int i = ‘1’;
int j = ‘1’ + ‘2’;
int k = ‘a’;
char c = 90;
解:i變成 49因為1的ASCII碼是49
j 變成 99因為1的ASCII碼是49,2的ASCII碼是50
k 變成 97因為a的ASCII碼是97
c 變成‘z’,因為90是’z’是的ASCII碼
2.23下面哪些型別的轉換是允許的?如果允許,寫成轉換後的結果。
char c = ‘A’;
i = (int)c;=>i = 65
float f = 1000.34f;
int i = (int)f;=> i = 1000
double d = 1000.34;
int i = (int)d;=> i = 1000
int i = 97p;
char c = (char)i;=> c = ‘a’
2.24給出下面程式的輸出結果:
public class Test{
public static void main(String[] args){
char x = ‘a’;
char y = ‘c’;
System.out.println(++x);=> b
System.out.println(y++);=> c
System.out.println(x – y); => -2
}
}
2.15節
2.25給出下面語句的輸出結果
System.out.println("1" + 1);=> 11
System.out.println('1' + 1);=> 50(since the Unicode for 1is 49
System.out.println("1" + 1 +1);=> 111
System.out.println("1" + (1 +1)); => 12
System.out.println('1' + 1 + 1); => 51
2.26計算下面表示式的結果
1 + “Welcome “ + 1 +1=>1Welcome 11
1 + “Welcome “ + (1 + 1) =>1Welcome 2
1 + “Welcome “ + (‘\u0001’ + 1)=>1Welcome 2
1 + “Welcome “ + ‘a’ +1 =>1Welcome a1
2.16~2.17節
2.27類名、方法名、常量和變數的命名習慣是什麼?根據Java的命名習慣,下面哪些是常量、方法、變數或類?
解:類名:首字母要大寫
變數和方法名:第一個單詞字母小寫,後面所有的單詞的首字母要大寫
常量:所有的字母都要大寫
2.28根據程式設計風格和文件指南,使用次花括號方式,重新佈局下列程式的格式。
publicclass Test
{
//main method
public static void main(String[] args){
/** Print a line*/
System.out.println(“2 % 3 = “+2%3);
}
}
解:
publicclass Test{
//main method
public static void main(String[] args){
/** Print a line*/
System.out.println(“2 % 3 = “+2%3);
}
}
2.29描述何謂語法錯誤、執行錯誤和邏輯錯誤。
解:語法錯誤:在編譯過程中出現的錯誤
執行錯誤:引起程式非正常中斷的錯誤。
邏輯錯誤:程式沒有按預期的方式執行時所發生的錯誤。
2.18節
2.30為什麼必須匯入JoptionPane類而無須匯入Math類?
解:Math類是包含在java.lang包中,是系統自動引入的
2.31如何使用對話方塊提示使用者輸入一個整數?
解:String s = JoptionPane.showInputDialog(”Enteran input”);
2.32如何將字串轉換為整數?如何將字串轉換為double型?
解: int i= intger.parseInt(intString);
double s =double.parstDouble(double string);