《Java程序设计教程》第二章习题

  1. 请将下面的整数转换成为整数(int)和长整数(long)类型补码表示的二进制数。

    整数 int long
    11 0x0000000B 0x000000000000000B
    33 0x00000021 0x0000000000000021
    105 0x00000069 0x0000000000000069
    7 0x00000007 0x0000000000000007
    -9 0xFFFFFFF7 0xFFFFFFFFFFFFFFF7
    -5 0xFFFFFFFB 0xFFFFFFFFFFFFFFFB
    -111 0xFFFFFF91 0xFFFFFFFFFFFFFF91
    -28 0xFFFFFFE4 0xFFFFFFFFFFFFFFE4
    -65 0xFFFFFFBF 0xFFFFFFFFFFFFFFBF
  2. 计算下面Java表达式的值,并写出表达式结果在Java中的数据类型。

    (1)1+4/5+(int)5.2/2.5 = 3, double

    (2)1+4/5+(int)(5.2/2.5) = 3, int

    (3)1+4/5+5.2/2.5 = 3.08, double

    (4)1.0+4/5+5.2/2.5 = 3.08, double

    (5)1+4/5.0+5.2/2.5 = 3.88, double

    (6)设已经定义了变量:int a=12,请计算表达式:(++a)+(a++) = 26, int

    (7)10>>2 = 2, int

    (8)10&11|12 = 14, int

    (9)5^7 = 2, int

    扫描二维码关注公众号,回复: 5379378 查看本文章

    (10)(-5)|(~5) = -5, int

    (11)(true^false)&&true = true, boolean

    (12)((!true)|false)||(!false) = true, boolean

    Tips: 移位向下取整;~x=-x-1。

  3. 完成下面的通用程序,要求能够输出给定整数 i 的二进制补码。这里所谓的通用程序指的是:当改变 i 的值时,不用修改除语句"int i = 10;"之外的程序代码也能输出修改后的 i 的二进制补码。

    public class J_Example {
        public static void main(String[] args) {
            int i = 10;
            //在这里,请写上尚未完成的程序,使得本程序在执行时能输出i的二进制补码
        } //方法 main 结束
    } //类 J_Example 结束
    
    public class J_Example {
        public static void main(String[] args) {
            int i = 10;
            for(int j = 31; j >= 0; --j) {
                System.out.print((i>>j)&1);
            }
        }
    }
    
  4. 写出下面Java表达式的值。

    (1)设 int a=1,所要计算的表达式为:(true | (++a==1)) & (a == 2) = true

    (2)设 int a=1,所要计算的表达式为:(true || (++a == 1)) & (a == 2) = false

    (3)设 int a=12,求经过运算"a *= 2+3"之后a的值:a = 60

  5. 判断下面的表达式是否含有语法错误。如果含有语法错误,请写出错误原因。

    (1)01 && (4+6) × 逻辑与不能用于int

    (2)4.2 % 2.1 √

    (3)‘a’ > ‘A’ √

    (4)‘1’ == 1 √

  6. 用 for 循环语句,并且在调用 Java 方法 System.out.pirnt 和 System.out.println 时只用下面的语句:

    System.out.print(" ");		// 输出一个空格,并且不换行
    System.out.print("*");		// 输出一个字符'*',并且不换行
    System.out.println("*");	// 输出一个字符'*',并换行
    

    编写程序输出:

       *
      ***
     *****
    *******
     *****
      ***
       *
    
    public class J_Example {
        public static void main(String[] args) {
            for(int i = 0; i < 7; ++i) {
                int t = (i > 3 ? 6 - i : i);
                for(int j = 0; j < 3-t; ++j)
                    System.out.print(" ");
                for(int j = 0; j < 2*t; ++j)
                    System.out.print("*");
                System.out.println("*");
            }
        }
    }
    
  7. 将上面的程序的 for 循环语句分别改成为 while 循环语句和 do-while 循环语句,但要求程序的输出保持不变。

    // while
    public class J_Example {
        public static void main(String[] args) {
            int i = 0;
            while(i < 7) {
                int t = (i > 3 ? 6 - i : i);
                int j = 0;
                while(j < 3-t) {
                    System.out.print(" ");
                    ++j;
                }
                j = 0;
                while(j < 2*t) {
                    System.out.print("*");
                    ++j;
                }
                System.out.println("*");
                ++i;
            }
        }
    }
    
    // do-while
    public class J_Example {
        public static void main(String[] args) {
             int i = 0;
             do {
                int t = (i > 3 ? 6 - i : i), j;
                if(i != 3) {
                    j = 0;
                    do {
                        System.out.print(" ");
                        ++j;
                    } while(j < 3-t);
                }
                if(t != 0) {
                    j = 0;
                    do {
                        System.out.print("*");
                        ++j;
                    } while(j < 2*t);
                }
                System.out.println("*");
                ++i;
            } while(i < 7);
        }
    }
    
  8. 找出在下面各个程序片段中存在的错误。

    (1)

    int i = 0;
    while(i < 10); 
    {
        i++;
        System.out.println(i + "; ");
    }
    

    "while(i<10);"中的分号应该去掉。

    (2)

    for(double x = 0.1; x != 1.0; x += 0.1)
        System.out.println(x + "; ");
    

    由于浮点数表示的近似性,循环不会终止。

    (3)

    int i = 0, sum;
    while(i <= 100) 
        sum += i;
    	i++;
    

    语句块缺少花括号。

  9. 在调用 Java 方法 System.out.print 和 System.out.println 时只用下面的语句:

    System.out.print(" ");		// 输出一个空格,并且不换行
    System.out.print("*");		// 输出一个字符'*',并且不换行
    System.out.print("+");		// 输出一个字符'+',并且不换行
    System.out.println("*");	// 输出一个字符'*',并换行
    

    编写程序输出(注:在图形的中心处有一个"+"):

       *
      ***
     *****
    ***+***
     *****
      ***
       *
    
    public class J_Example {
        public static void main(String[] args) {
            for(int i = 0; i < 7; ++i) {
                int t = (i > 3 ? 6 - i : i);
                for(int j = 0; j < 3-t; ++j)
                    System.out.print(" ");
                for(int j = 0; j < 2*t; ++j) {
                    if(i == 3 && j == 3) System.out.print("+");
                    else System.out.print("*");
                }
                System.out.println("*");
            }
        }
    }
    
  10. 采用结构化程序设计方法设计并编写程序,在控制台窗口输出 50~100 之间的所有素数。要求严格按照结构化程序设计方法画出程序流程图,并编写相应的Java程序。

    Chap2_10

    public class J_Example {
        public static void main(String[] args) {
            for(int i = 50; i <= 100; ++i) {
                if(isPrime(i)) System.out.println(i);
            }
        }
        
        public static boolean isPrime(int n) {
            if(n == 1) return false;
            for(int i = 2; i*i <= n; ++i)
                if(n % i == 0) {
                    return false;
                }
            return true;
        }
    }
    
    
  11. 思考题:如何编程实现计算 1 1 + 2 2 + 3 3 + 4 4 + 5 5 + . . . + 2 0 20 1^1+2^2+3^3+4^4+5^5+...+20^{20} 。要求只采用本章介绍的知识。提示:结果超出了长整数(long)的表示范围。

    import java.math.BigInteger;
    
    public class J_Example {
        public static void main(String[] args) {
            BigInteger sum = new BigInteger("0");
            for(int i = 1; i <= 20; ++i) {
                BigInteger prod = new BigInteger("1");
                BigInteger term = new BigInteger(String.valueOf(i));
                for(int j = 0; j < i; ++j) {
                    prod = prod.multiply(term);
                }
                sum = sum.add(prod);
            }
            System.out.println(sum);
        }
    }
    
    

猜你喜欢

转载自blog.csdn.net/ShadowBurn/article/details/86986857