剑指offer 解答题收藏

如下代码的输出是

package Test;
public class Test {
    private static void test(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            try {
                if (arr[i] % 2 == 0) {
                    throw new NullPointerException();
                } else {
                    System.out.print(i);
                }
            } finally {
                System.out.print("e");
            }
        }
    }

    public static void main(String[]args) {
        try {
            test(new int[] {0, 1, 2, 3, 4, 5});
        } catch (Exception e) {
            System.out.print("E");
        }
    }

}

可以得到的结论是( )

A. 编译出错

B. eE

C . Ee

D . eE1eE3eE5

E. Ee1Ee3Ee5

答案:B
由于arr[0] =0,所以在进入 test()方法里面会在第一个if 上抛出一个 NullPointerException,接着会执行 finally 的语句, (finally语句先于 return 和 throw语句执行),输出一个’e,然后回到 main方法中,由于捕捉到异常,所以进入到catch语句中,然后打印一个’E’,所以最终结果为”eE”

以下程序段的输出结果是

char s[]="\\123456\123456\t";
printf("%d\n",strlen(s));

A . 12

B. 13

C. 16

D. 以上都不对

答案:A
这里主要是考察转义字符的使用:\ \123 \t 这些都是转义字符,在计算字符串长度时,这些转移字符代表一个字符。
注意这里的 \123 ,在ascii中,‘\ddd’表示八进制,而’\xdd’表示十六进制,(d是一个数字占位符,表示八进制,x表示十六进制)。所以\123的十进制为83,在ASCII码表中对应的是 S
发表于 2016-03-10 10:02:20

若线性表最常用的操作是存取第n个元素及其前驱和后继元素的值,为节省时间应采用的存储方式()

A. 单链表

B. 双向链表

C. 单循环链表

D. 顺序表
答案:D

单链表只有一个指针域,是指向直接后继的。没有指向直接前驱。
循环链表也是只指向直接后继。
只有双向链表有两个指针域,分别指向直接前驱和后继。存取时需修改两个指针;
顺序表是在计算机内存中以数组的形式保存的线性表。它是数组,不用考虑修改指针,只用修改下标

相比较于双向链表,顺序表更为节省时间

猜你喜欢

转载自blog.csdn.net/yili_world/article/details/79819172