常用試験問題の収集

1728 ワード

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.ポインタとアプリケーションの違いは?

  • 答え:
    ①非空の区別.いずれの場合も空の値を指す参照は使用できません.1つの参照は常に特定のオブジェクトを指す必要があります.
    ②合法性の区別.参照を使用する前に正当性をテストする必要はありません.逆に、ポインタは常にテストされ、NULLにならないようにします.
    ③修正可能な違い:ポインタと参照のもう一つの重要な違いは、ポインタが別の異なるオブジェクトを指すように再割り当てされることであるが、参照は常に初期化時に指定されたオブジェクトを指し、以降は変更できないが、指定されたオブジェクトの値は変更可能である
    ④適用の違い:総じて言えば、以下の場合はポインタを使うべきです.
    一:オブジェクトを指さない可能性を考慮する
    2:異なる時点で異なるオブジェクトを指す必要があります.常に1つのオブジェクトを指し、1つのオブジェクトを指すと指向が変更されない場合は、参照を使用します.

  • 5.自然数がある数の平方かどうかを判断します.(実はこの数が奇数加算に違いないと判断したのです)
    (n+1)^2=n^2+2 n+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;  
        }