C++選択
4933 ワード
1.構造化プログラムは三つの基本構造からなる
≪順序構造|Order Structure|emdw≫:順序構造は、各文モジュールを順次実行する線形で秩序ある構造です.
≪ループ構造|Loop Structure|emdw≫:ループ構造は、条件が満たされるまで1つまたは複数のモジュールを繰り返し実行します.
選択構造:選択構造は、条件が成立するか否かに応じてプログラムが実行する経路を選択する.
2.
int a=1,b=0,c=-1,d=0;
3.memcpy
memcpyとは、cおよびc++で使用されるメモリコピー関数を指し、memcpy関数の機能は、ソースsrcが指すメモリアドレスの開始位置からnバイトをターゲットdestが指すメモリアドレスの開始位置にコピーすることである.
関数プロトタイプ
void *memcpy(void *dest, const void *src, size_t n);
必要なヘッダファイルC言語:#include
C++:#include
関数はdestを指すポインタを返します.
4.
assert()マクロの使い方
注意:assertは関数ではなくマクロです.Cのassert.hヘッダファイルにあります.
assertマクロのプロトタイプ定義は、条件がエラーを返すとプログラム実行が終了し、プロトタイプ定義が次のように機能します.
1
2
3
4
5
6
assertの役割は、式exprを先に計算することです.値が偽(すなわち0)の場合、assertの内容と__が印刷されます.FILE__, __LINE__, __ASSERT_FUNCTIONは、abort()関数を実行してkernelに自分を殺させcoredump(システム構成によってcoredumpファイルを生成するかどうか)を実行します.そうでなければassert()は何の役にも立たない.マクロassert()は、一般的にプログラムの正常な動作を確認するために使用され、式の構造が間違っていない場合に真の値になります.デバッグが完了したら、ソースコードからassert()文を削除する必要はありません.マクロNDEBUGに定義がある場合、マクロassert()の定義は空です.
assert(a1.a
5.
定義がある場合:char c;int d; プログラム実行時入力:c=1,d=2<リターン>で、変数c,整数2に文字1を入力できる入力文はscanf(「c=%c,d=%d」,&c,&d);いちいち対応しなければならない.
"&"HTMLの中の&だけで表す
例えば、スペースではなく「 」の文字列を得るには、 
XMLには5つのエスケープ文字があります:<>&"'
エスケープ文字列(Escape Sequence)は、文字エンティティ(Character Entity)とも呼ばれます.
HTMLでは、エスケープ文字列を定義する理由は2つあります.
1つ目の理由は、「」のような記号がHTMLラベルを表すために使用されているため、テキストの記号として直接使用することはできません.HTMLドキュメントでこれらの記号を使用するには、そのエスケープ文字列を定義する必要があります.解釈プログラムがこのような文字列に遭遇すると、それを真実の文字として解釈します.エスケープ文字列を入力するときは、アルファベットの大文字と小文字のルールを厳格に守ります.
2つ目の理由は、ASCII文字セットで定義されていない文字があるため、エスケープ文字列を使用して表す必要があるからです.
6.浅いコピー、深いコピー
7.const intとint const
1つの意味で、定数、付与文は数値を変えることはできません.入力はできます.constとして宣言します.すなわち、変数は「左値」l-valueとして使用できません.もちろん、付与番号の左側に置くことはできません.一方scanf("%d%d",&a,&b);は関数パラメータで、左ではありません.入力パラメータとして使用できます.
8.コンストラクション関数がダミー関数として宣言できない理由は、1オブジェクトを構築するときは、オブジェクトの実際のタイプを知る必要があり、ダミー関数の動作は実行中に実際のタイプを決定するためです.オブジェクトを作成するときは、オブジェクトがまだ作成されていないためです.コンパイラは、オブジェクトの実際のタイプ、クラス自体、またはクラスの派生クラス、またはより深い派生クラスを知ることができません.確定できません...
2虚関数の実行は虚関数テーブルに依存する.虚関数テーブルは、構造関数で初期化されます.すなわち、vptrを初期化し、正しい虚関数テーブルを指します.オブジェクトを構築する間、虚関数テーブルは初期化されず、実行できません.
コンストラクション関数で虚関数を呼び出すエラーの原因:
vptrポインタの初期化は段階的に完了するため:1、親クラスの構造関数を指すと、C++コンパイラは子クラスのvptrポインタを初期化し、vptrポインタが親クラスの虚関数テーブルを指すようにする
2、親のコンストラクション関数の実行が完了したら、サブクラスのコンストラクション関数を実行します.この場合、vptrポインタを本当にサブクラスの虚関数テーブルに向けます.
コンストラクション関数で虚関数を呼び出さないでください.ベースクラス構造の場合,虚関数は非虚であり,派生クラスには進まず,静的バインドである.明らかに、サブクラスのオブジェクトを構築するときは、まずベースクラスのコンストラクション関数を呼び出し、サブクラスのベースクラス部分を構築し、サブクラスはまだ構築されておらず、まだ初期化されていません.ベースクラスの構造で虚関数を呼び出すと、できれば初期化されていないオブジェクトを呼び出すのは危険です.したがって,C++では親オブジェクト部分を構築する際に子クラスを呼び出す虚関数実装はできない.しかし、そんなにプログラムを書いてはいけないのではないでしょうか.そう書いても、コンパイラは間違っていません.ただし、このように書くと、コンパイラはサブクラスの実装を呼び出すのではなく、ベースクラスの実装を呼び出すのです.
構造関数で虚関数を呼び出すエラー構造関数でも虚関数を呼び出さないでください.解析の際にはまずサブクラスの解析関数を呼び出し,オブジェクトのサブクラス部分を解析し,次にベースクラスの解析関数を呼び出してベースクラス部分を解析し,ベースクラスの解析関数の中で虚関数を呼び出すと,すでに解析したサブクラスオブジェクトの裏面の関数を呼び出すことになるが,これは非常に危険である.
9.
次のセグメントでforループの実行回数は()です.char *s="\ta\018bc";
for(; *s!=’\0';s++) printf("*”);
6回sが指す文字列のうち、't'はエスケープ文字であり、'01'もエスケープ文字である
10.printfは右から左へコンパイルし、左から右へ出力し、スタックモデルに合致する
int arr[]={1,2,3,4,5,6,7}; int *p=arr; *(p++)+=89;
printf("%d,%d",*p,*(++p));
結果3
11.プロセスが実行状態からブロック状態に遷移する場合
I/O要求
12.HTTP 1について.0とHTTP 1.1間違いは()正解:Aあなたの答え:C(間違い)HTTP 1.0は短い接続しかできないが、HTTP 1.1 HTTP 1のみを長接続できる.0通信時に大量のメモリを消費するが、HTTP 1.1このような状況を回避できる状態コード100はHTTP 1にのみ適用される.バージョン1
HTTP1.1 RequestメッセージヘッダにHostドメインが1つ追加されました.HTTP 1.0はこのドメインがありません
13.完全ツリー定義:
度は分岐の数です.分岐していないツリーノードの度は0度です.ノードにフォークが1つしかない場合は1度です.2つの分岐は2度のサブツリーです.
二叉木の高さをhとすると、第h層を除いて、他の各層(1〜h−1)の結点数が最大個数に達し、第h層が右から左に連続していくつかの結点が欠けているのが完全二叉木である.完全二叉樹葉結点のアルゴリズム:n個の結点を有する深さkの二叉樹であれば、その各結点は深さkの満二叉樹のうち1~nの番号の結点1つに対応し、この二叉樹を完全二叉樹と呼ぶ.n 0が度0のノード総数(すなわち葉のノード数)であり、n 1が度1のノード総数であり、n 2が度2のノード総数であると仮定すると、n 0=n 2+1であると、n=n 0+n 1+n 2(nは完全なツリーのノード総数)となり、上記の式によりn 2が消去される:n=2 n 0+n 1-1、完全二叉木の中度が1の結点数は2つの可能な0または1しかないため、n 0=(n+1)/2またはn 0=n/2が得られ、n 0=(n+1)/2の式に結合され、完全二叉木の結点総数から葉の結点数を算出することができる.
したがって、葉結点数は(699+1)/2=350
14.KMP動的計画
≪順序構造|Order Structure|emdw≫:順序構造は、各文モジュールを順次実行する線形で秩序ある構造です.
≪ループ構造|Loop Structure|emdw≫:ループ構造は、条件が満たされるまで1つまたは複数のモジュールを繰り返し実行します.
選択構造:選択構造は、条件が成立するか否かに応じてプログラムが実行する経路を選択する.
2.
int a=1,b=0,c=-1,d=0;
d=++a||++b&&++c;
&& ||,
d=1
3.memcpy
memcpyとは、cおよびc++で使用されるメモリコピー関数を指し、memcpy関数の機能は、ソースsrcが指すメモリアドレスの開始位置からnバイトをターゲットdestが指すメモリアドレスの開始位置にコピーすることである.
関数プロトタイプ
void *memcpy(void *dest, const void *src, size_t n);
必要なヘッダファイルC言語:#include
C++:#include
関数はdestを指すポインタを返します.
4.
assert()マクロの使い方
注意:assertは関数ではなくマクロです.Cのassert.hヘッダファイルにあります.
assertマクロのプロトタイプ定義は、条件がエラーを返すとプログラム実行が終了し、プロトタイプ定義が次のように機能します.
1
2
3
4
5
6
#defineassert(expr)\
((expr)\
?__ASSERT_VOID_CAST(0)\
:__assert_fail(__STRING(expr),__FILE__,__LINE__,__ASSERT_FUNCTION))
/*DefinedInGlibc2.15*/
assertの役割は、式exprを先に計算することです.値が偽(すなわち0)の場合、assertの内容と__が印刷されます.FILE__, __LINE__, __ASSERT_FUNCTIONは、abort()関数を実行してkernelに自分を殺させcoredump(システム構成によってcoredumpファイルを生成するかどうか)を実行します.そうでなければassert()は何の役にも立たない.マクロassert()は、一般的にプログラムの正常な動作を確認するために使用され、式の構造が間違っていない場合に真の値になります.デバッグが完了したら、ソースコードからassert()文を削除する必要はありません.マクロNDEBUGに定義がある場合、マクロassert()の定義は空です.
assert(a1.a
5.
定義がある場合:char c;int d; プログラム実行時入力:c=1,d=2<リターン>で、変数c,整数2に文字1を入力できる入力文はscanf(「c=%c,d=%d」,&c,&d);いちいち対応しなければならない.
"&"HTMLの中の&だけで表す
例えば、スペースではなく「 」の文字列を得るには、 
XMLには5つのエスケープ文字があります:<>&"'
エスケープ文字列(Escape Sequence)は、文字エンティティ(Character Entity)とも呼ばれます.
HTMLでは、エスケープ文字列を定義する理由は2つあります.
1つ目の理由は、「」のような記号がHTMLラベルを表すために使用されているため、テキストの記号として直接使用することはできません.HTMLドキュメントでこれらの記号を使用するには、そのエスケープ文字列を定義する必要があります.解釈プログラムがこのような文字列に遭遇すると、それを真実の文字として解釈します.エスケープ文字列を入力するときは、アルファベットの大文字と小文字のルールを厳格に守ります.
2つ目の理由は、ASCII文字セットで定義されていない文字があるため、エスケープ文字列を使用して表す必要があるからです.
6.浅いコピー、深いコピー
7.const intとint const
1つの意味で、定数、付与文は数値を変えることはできません.入力はできます.constとして宣言します.すなわち、変数は「左値」l-valueとして使用できません.もちろん、付与番号の左側に置くことはできません.一方scanf("%d%d",&a,&b);は関数パラメータで、左ではありません.入力パラメータとして使用できます.
8.コンストラクション関数がダミー関数として宣言できない理由は、1オブジェクトを構築するときは、オブジェクトの実際のタイプを知る必要があり、ダミー関数の動作は実行中に実際のタイプを決定するためです.オブジェクトを作成するときは、オブジェクトがまだ作成されていないためです.コンパイラは、オブジェクトの実際のタイプ、クラス自体、またはクラスの派生クラス、またはより深い派生クラスを知ることができません.確定できません...
2虚関数の実行は虚関数テーブルに依存する.虚関数テーブルは、構造関数で初期化されます.すなわち、vptrを初期化し、正しい虚関数テーブルを指します.オブジェクトを構築する間、虚関数テーブルは初期化されず、実行できません.
コンストラクション関数で虚関数を呼び出すエラーの原因:
vptrポインタの初期化は段階的に完了するため:1、親クラスの構造関数を指すと、C++コンパイラは子クラスのvptrポインタを初期化し、vptrポインタが親クラスの虚関数テーブルを指すようにする
2、親のコンストラクション関数の実行が完了したら、サブクラスのコンストラクション関数を実行します.この場合、vptrポインタを本当にサブクラスの虚関数テーブルに向けます.
コンストラクション関数で虚関数を呼び出さないでください.ベースクラス構造の場合,虚関数は非虚であり,派生クラスには進まず,静的バインドである.明らかに、サブクラスのオブジェクトを構築するときは、まずベースクラスのコンストラクション関数を呼び出し、サブクラスのベースクラス部分を構築し、サブクラスはまだ構築されておらず、まだ初期化されていません.ベースクラスの構造で虚関数を呼び出すと、できれば初期化されていないオブジェクトを呼び出すのは危険です.したがって,C++では親オブジェクト部分を構築する際に子クラスを呼び出す虚関数実装はできない.しかし、そんなにプログラムを書いてはいけないのではないでしょうか.そう書いても、コンパイラは間違っていません.ただし、このように書くと、コンパイラはサブクラスの実装を呼び出すのではなく、ベースクラスの実装を呼び出すのです.
構造関数で虚関数を呼び出すエラー構造関数でも虚関数を呼び出さないでください.解析の際にはまずサブクラスの解析関数を呼び出し,オブジェクトのサブクラス部分を解析し,次にベースクラスの解析関数を呼び出してベースクラス部分を解析し,ベースクラスの解析関数の中で虚関数を呼び出すと,すでに解析したサブクラスオブジェクトの裏面の関数を呼び出すことになるが,これは非常に危険である.
9.
次のセグメントでforループの実行回数は()です.char *s="\ta\018bc";
for(; *s!=’\0';s++) printf("*”);
6回sが指す文字列のうち、't'はエスケープ文字であり、'01'もエスケープ文字である
10.printfは右から左へコンパイルし、左から右へ出力し、スタックモデルに合致する
int arr[]={1,2,3,4,5,6,7}; int *p=arr; *(p++)+=89;
printf("%d,%d",*p,*(++p));
結果3
11.プロセスが実行状態からブロック状態に遷移する場合
I/O要求
12.HTTP 1について.0とHTTP 1.1間違いは()正解:Aあなたの答え:C(間違い)HTTP 1.0は短い接続しかできないが、HTTP 1.1 HTTP 1のみを長接続できる.0通信時に大量のメモリを消費するが、HTTP 1.1このような状況を回避できる状態コード100はHTTP 1にのみ適用される.バージョン1
HTTP1.1 RequestメッセージヘッダにHostドメインが1つ追加されました.HTTP 1.0はこのドメインがありません
13.完全ツリー定義:
度は分岐の数です.分岐していないツリーノードの度は0度です.ノードにフォークが1つしかない場合は1度です.2つの分岐は2度のサブツリーです.
二叉木の高さをhとすると、第h層を除いて、他の各層(1〜h−1)の結点数が最大個数に達し、第h層が右から左に連続していくつかの結点が欠けているのが完全二叉木である.完全二叉樹葉結点のアルゴリズム:n個の結点を有する深さkの二叉樹であれば、その各結点は深さkの満二叉樹のうち1~nの番号の結点1つに対応し、この二叉樹を完全二叉樹と呼ぶ.n 0が度0のノード総数(すなわち葉のノード数)であり、n 1が度1のノード総数であり、n 2が度2のノード総数であると仮定すると、n 0=n 2+1であると、n=n 0+n 1+n 2(nは完全なツリーのノード総数)となり、上記の式によりn 2が消去される:n=2 n 0+n 1-1、完全二叉木の中度が1の結点数は2つの可能な0または1しかないため、n 0=(n+1)/2またはn 0=n/2が得られ、n 0=(n+1)/2の式に結合され、完全二叉木の結点総数から葉の結点数を算出することができる.
したがって、葉結点数は(699+1)/2=350
14.KMP動的計画