C/C++ 自学・自習
- このページは,C/C++ を自分で勉強してみようと思う人のための自学自習用の( e-Learning )ページです.簡単な解説と共に,多くの演習問題を与えてあります.解説を読むだけでなく,必ず,演習問題を自分で解いてください.そして,すべての演習問題に対して正解を得た後,次に進んでください.
- ここでは,演習問題の解答をコンピュータで自動判断していますが,たとえばプログラムを書くような問題の場合,ソースプログラムをチェックして答えが正しいか否かの判断を行っているわけではありません.したがって,なるべく工夫して問題を作成してはいますが,人間が判断する場合とは異なり,十分な判断を行うことはできない場合も多くあると思います.
- また,C/C++ のコンパイラが手元に無くても,プログラムを作成する課題を行うことができますが,できる限り,手元でコンパイル,実行し,エラーがないことを確認した後,作成したプログラムを送信するようにしてください.さもないと,サーバの負荷が増大し,また,時間もかかると思います.その他,演習問題を解く場合,以下の点に注意してください.
- 同時に複数の問題を送信しないでください.必ず,一つの問題に対する結果が得られてから(エラーの場合も含む),次の問題を送信してください.
- 問題の答えを送信する際,必ず学籍番号,または,メールアドレス(外部の方)を入力してください.実際に存在しないいい加減なメールアドレスを入力されても動作しますが,もしそれが他の人が入力されたものと一致した場合は,問題が発生する場合がありますので必ず正しいメールアドレスを入力してください.学籍番号やメールアドレスは,演習結果の保存や演習問題の正誤の判定に利用します.それ以外の目的に利用することは決してありません.
- プログラムを書く問題の際は,必ず,「プログラムを書く際の注意事項」をよく読んでください.
- プログラムを書く問題においては,正解が得られた時点でプログラム例(解答例)を提示します.最初は,C++ の範囲で記述した例と C の範囲で記述した例の 2 つ(基本的な違いは,cin,cout を使用するか,または,scanf,printf を使用するかの点にあります)を提示しますが,「第7章 関数」以降では,1 つの例だけを提示します.基本的には,C++ の仕様に従いますが,入出力は,特に必要がない限り,scanf と printf を使用していきます.
- なお,内容的には同じですが,記述方式を変えた以下のようなページも用意してありますのでご利用下さい.各方式の使い勝手についてご意見をいただければ幸いです.
目次
第T部 基礎
- 第1章 情報の表現
- 1.1 2 進数
- 1.2 10 進数から 2 進数への変換
- 1.3 コンピュータ内部における数値の表現
- 1.3.1 整数の表現方法
- 1.3.2 浮動小数の表現
- 1.4 コンピュータ内部における文字の表現方法
- 第2章 プログラム作成手順
- 2.1 アルゴリズム
- 2.2 コーディング
- 2.3 コンパイル
- 2.4 連係編集
- 2.5 実行
第U部 C と C++ への拡張
- 第3章 簡単なプログラム
- 3.1 プログラムの書き方
- 3.1.1 基本原則
- 3.1.2 わかりやすいプログラム
- 3.2 データ型
- 3.2.1 定数
- 3.2.2 変数
- 3.2.3 列挙型変数
- 3.2.4 typedef 宣言
- 3.3 算術演算子と代入演算子
- 3.3.1 算術演算子
- 3.3.2 代入演算子
- 3.3.3 インクリメント,デクリメント演算子
- 3.3.4 型変換( cast 演算子)
- 3.4 簡単なプログラム
- (プログラム例3.1) 2 つのデータの和と差
- (プログラム例3.2) 2 つのデータの和と差( cout,cin )
- 3.5 その他
- 3.5.1 キーワード
- 3.5.2 アスキーコード
- 3.5.3 エスケープシーケンス
- 第4章 演算子
- 4.1 アドレス演算子と間接演算子
- (プログラム例4.1) ポインタを利用した 2 つのデータの和
- 4.2 関係演算子,等値演算子,及び,論理演算子
- (プログラム例4.2) 関係式と論理式
- 4.3 ビット演算子とシフト演算子
- (プログラム例4.3) ビット演算
- 4.4 その他の演算子
- 第5章 制御文
- 5.1 分岐
- 5.1.1 if 文
- (プログラム例5.1) 円周と面積の計算
- (プログラム例5.2) 坪・m2 間の単位変換
- (プログラム例5.3) 3 つのデータの最大値と最小値
- (プログラム例5.4) データの比較
- 5.1.2 switch 文
- (プログラム例5.5) データの比較( switch 文)
- 5.2 繰り返し
- 5.2.1 繰り返し文
- (プログラム例5.7) 平均値の計算
- (プログラム例5.8) ファイル入出力
- (プログラム例5.9) for 文のネスト
- (プログラム例5.10) 入力の繰り返し( do-while )
- (プログラム例5.11) 最大値(初期設定)
- 5.2.2 繰り返しの中断
- 5.2.2.1 break 文
- (プログラム例5.12) 繰り返しの中断( break )
- 5.2.2.2 continue 文
- (プログラム例5.13) 繰り返しの中断( continue )
- 第6章 配列とポインタ
- 6.1 配列
- (プログラム例6.1) 平均値と平均値以下の人の出力
- (プログラム例6.2) 平方根の計算とファイルへの出力
- (プログラム例6.3) 大文字から小文字への変換
- 6.2 配列とポインタ
- (プログラム例6.4) 1 次元配列,ポインタ,及び,初期化
- 6.3 2 次元以上の配列とポインタ
- (プログラム例6.5) 2 次元配列,ポインタ,及び,初期化
- 6.4 メモリの動的確保
- 6.4.1 malloc と free
- (プログラム例6.6) メモリの動的確保( 1 次元配列)
- (プログラム例6.7) メモリの動的確保( 2 次元配列)
- 6.4.2 new と delete
- (プログラム例6.8) メモリの動的確保( 1 次元配列,new )
- (プログラム例6.9) メモリの動的確保( 2 次元配列,new )
- 第7章 関数
- 7.0 標準関数
- 7.0.1 scanf と printf
- 7.0.2 文字列操作
- (プログラム例7.0) 文字列操作
- 7.1 簡単な関数
- (プログラム例7.1) 階乗の計算
- (プログラム例7.2) 階乗の計算(関数の利用)
- (プログラム例7.3) 階乗の計算(再帰呼び出し)
- (プログラム例7.4) nCr の計算
- 7.2 変数の有効範囲(スコープ)
- 7.2.1 型宣言
- 7.2.2 有効範囲(スコープ)
- (プログラム例7.5) 変数の有効範囲(同じファイル)
- (プログラム例7.6) 変数の有効範囲(別々のファイル)
- (プログラム例7.7) 変数の有効範囲( C++ )
- 7.2.3 名前空間( namespace )
- (プログラム例 7.23 ) 名前空間
- 7.3 データの受け渡し
- 7.3.1 データとアドレス
- (プログラム例7.8) 複数結果の受け渡し
- (プログラム例7.9) デフォルト引数
- 7.3.2 配列
- 7.3.2.1 1 次元配列
- (プログラム例7.10) 1 次元配列の受け渡し
- 7.3.2.2 2 次元以上の配列
- (プログラム例7.11) 2 次元配列の受け渡し(方法 1 )
- (プログラム例7.12) 2 次元配列の受け渡し(方法 2 )
- (プログラム例7.13) 2 次元配列の受け渡し(方法 3 )
- 7.3.3 関数名
- (プログラム例7.14) 関数名の受け渡し(ニュートン法)
- (プログラム例7.15) 関数名の配列
- 7.3.4 参照渡し
- (プログラム例7.16) 参照渡し
- (プログラム例7.17) 参照渡し(参照型関数)
- 7.4 main 関数
- (プログラム例7.18) main 関数の引数(数字の和)
- (プログラム例7.19) main 関数の引数(環境変数の出力)
- 7.5 その他
- 7.5.1 関数名のオーバーロード
- (プログラム例7.20) 関数名のオーバーロード
- 7.5.2 インライン関数
- (プログラム例7.21) インライン関数と #define マクロ
- 7.5.3 例外処理
- (プログラム例7.22) 例外処理
- 第8章 構造体と共用体
- 8.1 構造体
- (プログラム例8.1) 構造体(定義と参照)
- (プログラム例8.2) 構造体(ネスト,方法 1 )
- (プログラム例8.3) 構造体(ネスト,方法 2 )
- (プログラム例8.4) 構造体(関数の引数)
- (プログラム例8.5) 構造体(リスト構造)
- 8.2 共用体
- (プログラム例8.6) 共用体
- 第9章 プリプロセッサ
- 9.1 #define
- (プログラム例9.1) 記号定数とマクロの定義
- 9.2 #undef
- 9.3 #if
- (プログラム例9.2) 記号定数の定義による出力先制御
- (プログラム例9.3) 単位変換
- 9.4 #include
- (プログラム例9.4) ファイルの組み込み
第V部 クラス
- 第10章 クラス
- 10.1 クラス
- 10.1.1 クラスの宣言
- (プログラム例10.1) クラス宣言
- 10.1.2 前送りのクラス宣言
- 10.2 メンバー関数とフレンド関数
- (プログラム例10.2) メンバー関数とフレンド関数
- 10.3 コンストラクタとデストラクタ
- (プログラム例10.3) 時間データ
- (プログラム例10.4) プラントモデル
- (プログラム例10.5) ベクトルの内積と絶対値
- (プログラム例10.6) リスト構造
- 第11章 演算子のオーバーロード
- 11.1 演算子のオーバーロード
- (プログラム例11.1) ベクトルの加算(メンバー関数)
- (プログラム例11.2) ベクトルの加算(フレンド関数)
- 11.2 複素数の加算( + )と出力( << )
- (プログラム例11.3) 複素数の加算(メンバー関数)
- (プログラム例11.4) 複素数の加算(フレンド関数)
- 11.3 変換演算子
- (プログラム例11.5) 変換演算子
- 11.4 演算子のオーバーロードと演算子との関係
- 第12章 代入と初期化
- 12.1 代入
- (プログラム例12.1) 代入( new を使用しない場合)
- (プログラム例12.2) 代入( new を使用する場合)
- (プログラム例12.3) 代入問題の解決( = のオーバーロード)
- 12.2 初期化
- (プログラム例12.4) 初期化( new を使用しない場合)
- (プログラム例12.5) 初期化( new を使用する場合)
- (プログラム例12.6) 初期化問題の解決(初期化用のコンストラクタ)
- (プログラム例12.7) 行列の乗算
- 第13章 派生クラス
- 13.1 派生クラス
- (プログラム例13.1) 派生クラス
- (プログラム例13.2) フレームの表現
- 13.2 仮想関数
- (プログラム例13.3) 仮想関数(フレームの表現)
- 13.3 抽象クラス
- (プログラム例13.4) 抽象クラス
- 第14章 テンプレート
- 14.1 関数テンプレート
- (プログラム例14.1) 関数テンプレート
- 14.2 クラステンプレート
- (プログラム例14.2) クラステンプレート
- 第15章 クラスメンバーに対するポインタ
- 15.1 クラスメンバーに対するポインタ
- (プログラム例15.1) クラスメンバーに対するポインタ
- 第16章 入出力クラス
- 16.1 標準入出力
- (プログラム例16.1) 標準入出力
- (プログラム例16.2) クラスの出力
- 16.2 書式付き入出力
- (プログラム例16.3) 書式付き出力(メンバー関数)
- (プログラム例16.4) 書式付き出力(書式操作子)
- 16.3 ファイル入出力
- (プログラム例16.5) ファイル入出力