C ++入門書第1章回答
C Primer Chapter 1 Answers
VS2013に基づくコードの練習
演習1.1
使用しているコンパイラのドキュメントを参照して、使用しているファイルの命名規則を確認してください。 2ページのメインプログラムをコンパイルして実行します。
- Visual C ++プロジェクト用に作成されたファイルの種類
https://docs.microsoft.com/zh-cn/previous-versions/visualstudio/visual-studio-2013/3awe4781(v=vs.120)
演習1.2
プログラムを書き直して、-1を返すようにします。戻り値-1は通常、プログラムエラーの識別子として扱われます。プログラムを再コンパイルして実行し、システムがmainから返されたエラーフラグをどのように処理するかを観察します。
演習1.3
Hello、Worldを標準出力に出力するプログラムを作成します。
#include int main(){ std::cout << 'Hello, World!' << endl return 0 }
演習1.4
このプログラムでは、加算演算子+を使用して2つの数値を加算します。プログラムは、乗算演算子*を使用して、2つの数値の積を出力します。
#include using namespace std int main(){ std::cout << 'Enter two numbers:' <> v1 >> v2 cout << 'the sum of ' << v1 << ' and ' << v2 << ' is ' << v1 + v2 << endl system('pause') return 0 }
演習1.5
すべての出力操作を長いステートメントに入れます。プログラムを書き直し、各オペランドの印刷操作を別々のステートメントに入れます。
#include using namespace std int main(){ std::cout << 'Enter two numbers:' <> v1 >> v2 cout << 'The sum of ' cout << v1 cout << ' and ' cout << v2 cout << ' is ' cout << v1 + v2 cout << endl system('pause') return 0 }
練習1.6
次のプログラムフラグメントが合法かどうかを説明します。
std::cout << 'The sum of ' << v1 << ' and ' << v2 << ' is ' << v1 + v2 << std::endl
プログラムが合法である場合、その出力は何ですか?プログラムが合法でない場合、その理由は何ですか?どうすれば修正できますか?
不合理なエラーは次のとおりです。
- エラー1エラーC2143:構文エラー: ''がありません( 'の前)<<')
修正:余分なセミコロンを削除します。
std::cout << 'The sum of ' << v1 << ' and ' << v2 << ' is ' << v1 + v2 << std::endl
演習1.7
誤ったネストされたコメントを含むプログラムをコンパイルし、コンパイラーによって返されるエラーメッセージを観察します。
/* * Comments are nested here * /* The nesting here is wrong */ * */ int main() { return 0 }
その後の一連のコードに影響を与えるコメントエラーが原因で、VS2013は次のエラーを報告しました。
演習1.8
次の出力ステートメントのどれが正当であるかを示してください(もしあれば):
std::cout << '/*' std::cout << '*/' std::cout << /* '*/' */ std::cout << /* '*/' /* '/*' */
これらのステートメントのコンパイル結果が実際にこれらのステートメントをコンパイルして回答を検証し(上記のステートメントを本体として使用するたびに小さなプログラムを作成する)、各コンパイルエラーを修正する方法を予測します。
3行目は、エラー、C ++のコメント区切り文字をコンパイルします。後半、前の部分が右/*
コメント、後半は引用符が1つマイナスの文字列なので、修正は引用符を追加することです。
*/
出力:
/* '*/ | ' */
練習1.9
whileループを使用して50から100の整数を追加するプログラムを作成します。
|
演習1.10
オペランドの値を1つインクリメントする++演算子に加えて、値を1つ減らすデクリメント演算子(–)の実装もあります。デクリメント演算子を使用して、ループ内で10から0までの整数を降順で出力するプログラムを作成します。
'
演習1.11
ユーザーに2つの整数を入力し、2つの整数で指定された範囲内のすべての整数を出力するように求めるプログラムを作成します。
std::cout << /* '*/' */'
演習1.12
次のforループはどの機能を完了しますか?合計の最終的な値は何ですか?
/**/ */ /*
-100から100まで、合計の最終値は0です。
演習1.13
forループを使用して、セクション1.4.1(11ページ)のすべての演習をやり直します。
- 練習1.9
#include using namespace std int main(){ int sum = 0, val = 1 while (val<=50){ sum += val ++val } cout << ' Sum of 1 to 50 inclusive is ' << sum << std::endl return 0 }
- 演習1.10
#include using namespace std int main(){ int val1 = 0, val2 = 10 while (val1<=10){ val1++ cout << val2 << endl val2-- } return 0 }
- 演習1.11
#include using namespace std / / The idea of using functional programming void print_range(int val1, int val2){ int max = 0 , min = 0 if (val1>val2){ max = val1 min = val2 }else{ max = val2 min = val1 } int temp_val = max while (min <= temp_val){ min++ cout << max << endl max-- } } int main(){ int val1 = 0, val2 = 0 cout << 'Please input two numbers!' <> val1 >> val2 print_range(val1, val2) return 0 }
演習1.14
forループとwhileループと比較した2つの形式の長所と短所は何ですか?
演習1.15
14ページの「コンパイルの取得」で説明されている一般的なエラーを含むプログラムを作成します。コンパイラによって生成されるエラーメッセージに精通している。
よくある間違いは、構文エラー、型エラー、および宣言エラーです。これらは、コンパイラーがチェックできるエラーです。
演習1.16
cinから一連の数値を読み取り、その合計を出力するプログラムを作成します。
int sum = 0 for (int i = -100 i <100 ++i) sum += i
演習1.17
入力されたすべての値が等しい場合、このセクションのプログラムは何を出力しますか?重複する値がない場合、出力はどのようになりますか?
効果は次のとおりです。
演習1.18
このセクションのプログラムをコンパイルして実行し、すべて等しい値を指定します。プログラムを再度実行し、重複する値を入力しないでください。
コードは次のように表示されます。
#include using namespace std int main(){ int sum = 0, val = 1 for (int i = 0 i <= 50 i++){ sum += i } cout << ' Sum of 1 to 50 inclusive is ' << sum << std::endl return 0 }
演習1.19
セクション1.4.1(数値の範囲の印刷)の演習1.1.1(11ページ)で作成したプログラムを変更して、ユーザーが入力した最初の数値が2番目の数値よりも小さい場合に対処できるようにします。
演習1.11自体が、入力データのサイズを判断します。
演習1.20
Webサイトhttp://www.informit.com/title/032174113では、第1章のコードディレクトリにヘッダーファイルSales_item.hが含まれています。自分の作業ディレクトリにコピーします。これを使用して、書籍の販売レコードのセットを読み取り、各レコードを標準出力に出力するプログラムを作成します。
#include using namespace std int main(){ int val1 = 0, val2 = 10 for(int i = 10 i >= 0 i--){ cout << i << endl } return 0 }
演習1.22
同じISBNで複数の販売レコードを読み取り、すべてのレコードの合計を出力するプログラムを作成します。
#include using namespace std / / The idea of using functional programming void print_range(int val1, int val2){ int max = 0, min = 0 if (val1>val2){ max = val1 min = val2 } else{ max = val2 min = val1 } int temp_val = max for (int i = max i >= min i--) { cout << i << endl } } int main(){ int val1 = 0, val2 = 0 cout << 'Please input two numbers!' <> val1 >> val2 print_range(val1, val2) return 0 }
演習1.23
複数の販売記録を読み取り、各ISBN(1冊あたり)の複数の販売記録をカウントするプログラムを作成します。
#include int main() { int sum = 0 for (int value = 0 std::cin >> value) sum += value std::cout << sum << std::endl return 0 }
演習1.24
複数のISBNを表す複数のプログラムを入力して、前のプログラムをテストします。各ISBNのレコードをグループ化する必要があります。
- Data / books.txtは入力データファイルであり、http://www.informit.com/title/032174113からダウンロードできます。
練習1.25
祖先のSales_item.hヘッダーファイルから、セクション1.6に記載されているブックストアプログラムをコンパイルして実行します。
#include using namespace std int main() { int currVal = 0, val = 0 if (cin >> currVal) { int cnt = 1 while (cin >> val) { if (val == currVal) ++cnt else{ cout << currVal << ' occurs ' << cnt << ' items ' << endl currVal = val cnt = 1 } } cout << currVal << ' occurs ' << cnt << ' items ' << endl } return 0 }
効果は次のとおりです。