常用考题收集

1.

#define N 3

#define Y(n) ((N+1)*n)

则执行语句:z=2*(N+Y(5+1))后的z值为()

A、38      B、42     C、48         D、54

2.const与 #define有什么不同?

答:C++中可以使用const定义常量,也可以用#define定义常量,但是前者比后者有更多的优点

  • ①const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只是进行字符替换,没有做类型安全检查,并且在字符替换中可能会产生意料不到的错误(边际效应)
  • ②有些集成化的调试工具可以对const常量进行调试,但是不能对宏进行调试即在C++中 const可以完全替换宏常量
3.头文件中的ifndef/define/endif是干什么的?

  • 是为了防止该头文件被重复引用。

4.指针和应用的区别?

  • 答案:

    ①非空区别。任何情况下都不能使用指向空值的引用,一个引用必须总是指向某些对象

    ②合法性区别。在使用引用之前不需要测试它的合法性,相反,指针则应该总是被测试,防止其为NULL

    ③可修改性区别:指针与引用的另一个重要的区别就是指针可以被重新赋值以指向另一个不同的对象,但是引用则总是指向在初始化时被指定的对象,以后不能改变,但是指定的对象的值是可以改变的

    ④应用区别:总的来说,在一下情况下应该使用指针:

    一:考虑到存在不指向任何对象的可能

    二:需要在不同的时刻指向不同的对象,如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么就应该使用引用

5.判断一个自然数是否是某个数的平方?(其实就是判断这个数一定是奇数相加的)

由于
(n+1)^2
=n^2 + 2n + 1,
= ...
= 1 + (2*1 + 1) + (2*2 + 1) + ... + (2*n + 1)
注意到这些项构成了等差数列(每项之间相差2)。
所以我们可以比较 N-1, N - 1 - 3, N - 1 - 3 - 5 ... 和0的关系。
如果大于0,则继续减;如果等于0,则成功退出;如果小于 0,则失败退出。
复杂度为O(n^0.5)。不过方法3中利用加减法替换掉了方法1中的乘法,所以速度会更快些。

例如:3^2 = 9 = 1 + 2*1+1 + 2*2+1 = 1 + 3 + 5

4^2 = 16 = 1 + 2*1 + 1 + 2*2+1  + 2*3+1

    int square(int n)  
    {  
        int i = 1;  
        n = n - i;  
        while( n > 0 )  
        {  
            i += 2;  
            n -= i;  
        }  
        if( n == 0 )        //是某个数的平方  
            return 1;  
        else                //不是某个数的平方  
            return 0;  
    }  



你可能感兴趣的:(常用考题收集)