习题1.1.1
给出以下表达式的值:
a. (0 + 15) / 2
b. 2.0e-6 * 100000000.1
c. true && false || true && true
参考答案:
a. 7
b. 200.0000002 (2.0e-6 是指数形式,等于2.0 * 10 ^ -6)
c. true
习题1.1.2
给出以下表达式的类型和值:
a. (1 + 2.236)/2
b. 1 + 2 + 3 + 4.0
c. 4.1 >= 4
d. 1 + 2 + “3”
参考答案:
a. 1.618
b. 10.0
c. true
d. 33
习题1.1.3
编写一个程序,从命令行得到三个整数参数。如果它们都相等则打印 equal,否则打印 not equal
public class Test { public static void main(String[] args) { String str = args[0].equals(args[1]) && args [1].equals(args[2]) ?" equal " :" not equal "; System.out.println(str); } }
习题1.1.4
下列语句各有什么问题(如果有的话)?
a. if (a > b) then c = 0;
b. if a > b { c = 0; }
c. if (a > b) c = 0;
d. if (a > b) c = 0 else b = 0;
参考答案:
a:没有then这个关键字
b:a > b 缺少()
d:c = 0 后面缺少;
习题1.1.5
编写一段程序,如果 double 类型的变量 x 和 y 都严格位于 0 和 1 之间则打印 true,否则打印 false。
参考答案:
import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入x:"); double x = input.nextDouble(); System.out.println("请输入y:"); double y = input.nextDouble(); System.out.println((x > 0 && x < 1) && (y > 0 && y < 1)); } }
习题1.1.6
下面这段程序会打印出什么?
public static void main(String[] args) { int f = 0; int g = 1; for (int i = 0; i <= 15; i++) { StdOut.println(f); f = f + g; g = f - g; } }
参考答案:
0
1
1
2
3
5
8
13
21
34
55
89
144
233
610
习题1.1.7
分别给出以下代码段打印出的值:
a.
double t = 9.0; while (Math.abs(t - 9.0/t) > .001) t = (9.0/t + t) / 2.0; StdOut.printf("%.5f\n", t);
b.
int sum = 0; for (int i = 1; i < 1000; i++) for (int j = 0; j < i; j++) sum++; StdOut.println(sum);
c.
int sum = 0; for (int i = 1; i < 1000; i *= 2) for (int j = 0; j < 1000; j++) sum++; StdOut.println(sum);
参考答案:
a:3.00009
c:10000
习题1.1.8
下列语句会打印出什么结果?给出解释。
a.
System.out.println('b');
b.
System.out.println('b' + 'c');
c.
System.out.println((char) ('a' + 4));
答案:
a:b (解释:直接打印char字符)
c:e (解释:97 + 4 = 101,e的ASCII码是101)
习题1.1.9
编写一段代码,将一个正整数 N 用二进制表示并转换为一个 String 类型的值 s。
参考答案:
解法一:
public class Test { public static String DECtoBIN(int n) { return ("" + Integer.toBinaryString(n)); } public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入一个正整数N:"); int n = input.nextInt(); System.out.println(DECtoBIN(n)); } }
解法二:
public static String DECtoBIN(int n) { String s = ""; for (int i = n; i > 0; i /= 2) { s = (i % 2) + s; } return s; }
解法三:
public static String DECtoBIN(int n) { String resultString = ""; for (int i = 31; i >= 0; i--) //int类型占32位 resultString = resultString + (n >>> i & 1); // &:位与:第一个操作数的的第n位于第二个操作数的第n位如果都是1,那么结果的第n为也为1,否则为0 // >>> :无符号右移 return resultString; }
摘自Kyson博客
习题1.1.10
下面这段代码有什么问题?
int[] a; for (int i = 0; i < 10; i++) a[i] = i * i;
参考答案:
没有为数组a分配内存
请登录之后再进行评论