C/C++ 言語
ご意見・ご質問(@を半角に変換)
totomi.kuni.mahoroba.00@gmail.com
- C,および,C++ に対する解説です.基本的には,初心者を対象として記述したつもりです.C/C++ に対する概説(C/C++ 概説)もありますので,他の言語を十分知っている方が C/C++ について手っ取り早く学びたい場合は,それを利用するのも一つの方法かと思います.さらに,概説を学んでから,本文に戻るという方法も考えられます.また,特定の言葉,C/C++ の関数やクラス,コマンド等の意味・機能について調べたいときは索引や付録を利用するとより便利だと思います.
- 付録 : C の標準関数,UNIX( Linux )のコマンド,C++ 標準ライブラリ(コンテナ,アルゴリズムなど)(検索機能はこのページのものと同じ)
- C/C++ 概説 : C/C++ に対する概説.既に他の言語に精通している方はここを読むだけで十分かもしれません.
目次
注: (C++) と表示のある箇所は,C++ 独自部分
- はじめに
第Ⅰ部 コンピュータと言語
- 第1章 コンピュータ入門
- 1.1 コンピュータの構造と動作
- 1.2 情報の表現
- 1.2.1 2 進数
- 1.2.2 10 進数から 2 進数への変換
- 1.2.3 数値の表現
- 1.2.3.1 整数の表現
- 1.2.3.2 浮動小数の表現
- 1.2.4 文字の表現
- 演習問題1
- 第2章 プログラム作成手順
- 2.1 アルゴリズム
- 2.2 コーディング
- 2.3 コンパイル
- 2.4 連係編集
- 2.5 実行
- 演習問題2
第Ⅱ部 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 )(C++)
- 3.5 その他
- 3.5.1 キーワード
- 3.5.2 アスキーコード
- 3.5.3 エスケープシーケンス
- 演習問題3
- 第4章 演算子
- 4.1 アドレス演算子と間接演算子
- (プログラム例 4.1 ) ポインタを利用した 2 つのデータの和
- 4.2 関係演算子,等値演算子,及び,論理演算子
- (プログラム例 4.2 ) 関係式と論理式
- 4.3 ビット演算子とシフト演算子
- (プログラム例 4.3 ) ビット演算とシフト演算
- 4.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.1.3 goto 文
- (プログラム例 5.6 ) 入力の繰り返し( goto )
- 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 )
- 演習問題5
- 第6章 配列とポインタ
- 6.1 配列
- (プログラム例 6.0 ) 範囲 for 文(C++11)
- (プログラム例 6.1 ) 平均値と平均値以下の人の出力
- (プログラム例 6.2 ) 平方根の計算とファイルへの出力
- (プログラム例 6.3 ) 大文字から小文字への変換
- 6.2 配列とポインタ
- (プログラム例 6.4 ) 1 次元配列,ポインタ,及び,初期化
- 6.3 2 次元以上の配列とポインタ
- (プログラム例 6.5 ) 2 次元配列,ポインタ,及び,初期化
- (プログラム例 6.5.1 ) 3 次元配列とポインタ
- 6.4 メモリの動的確保
- 6.4.1 malloc と free
- (プログラム例 6.6 ) メモリの動的確保( 1 次元配列)
- (プログラム例 6.7 ) メモリの動的確保( 2 次元配列)
- 6.4.2 new と delete (C++)
- (プログラム例 6.8 ) メモリの動的確保( 1 次元配列,new )
- (プログラム例 6.9 ) メモリの動的確保( 2 次元配列,new )
- (プログラム例 6.10 ) new 演算子と代入・初期化
- 演習問題6
- 第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 )(C++)
- (プログラム例 7.7.1 ) 名前空間
- 7.3 データの受け渡し
- 7.3.1 データとアドレス
- (プログラム例 7.8 ) 複数結果の受け渡し
- (プログラム例 7.9 ) デフォルト引数(C++)
- 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 参照渡し(C++)
- (プログラム例 7.16 ) 参照渡し
- (プログラム例 7.17 ) 参照渡し(参照型関数)
- 7.4 main 関数
- (プログラム例 7.18 ) main 関数の引数(数字の和)
- (プログラム例 7.19 ) main 関数の引数(環境変数の出力)
- 7.5 その他(C++)
- 7.5.1 関数名のオーバーロード
- (プログラム例 7.20 ) 関数名のオーバーロード
- 7.5.2 インライン関数
- (プログラム例 7.21 ) インライン関数と #define マクロ
- 7.5.3 例外処理
- (プログラム例 7.22 ) 例外処理
7.6 様々な例題
- 7.6.1 数値計算
- (プログラム例 7.23 ) 連立線形方程式,逆行列(ガウス・ジョルダン)
- (プログラム例 7.24 ) 非線形方程式(二分法)
- (プログラム例 7.25 ) 非線形方程式(セカント法)
- (プログラム例 7.26 ) 非線形方程式(ニュートン法)
- (プログラム例 7.27 ) 代数方程式(ベアストウ)
- (プログラム例 7.28 ) 行列の固有値(フレーム法+ベアストウ法)
- (プログラム例 7.29 ) 実対称行列の固有値・固有ベクトル(ヤコビ法)
- (プログラム例 7.30 ) 最大固有値と固有ベクトル(べき乗法)
- (プログラム例 7.31 ) 数値積分(台形則)
- (プログラム例 7.32 ) 数値積分(シンプソン則)
- (プログラム例 7.33 ) 微分方程式(ルンゲ・クッタ)
- (プログラム例 7.34 ) 補間法(ラグランジュ)
- (プログラム例 7.35 ) 補間法(スプライン)
- (プログラム例 7.36 ) 補間法(ベジエ曲線)
- 7.6.2 最適化
- (プログラム例 7.37 ) 最適化(線形計画法)
- (プログラム例 7.38 ) 最適化(黄金分割法)
- (プログラム例 7.39 ) 最適化(多項式近似法)
- (プログラム例 7.40 ) 最適化(最急降下法)
- (プログラム例 7.41 ) 最適化(共役勾配法)
- (プログラム例 7.42 ) 最適化( Newton 法)
- (プログラム例 7.43 ) 最適化(準 Newton 法)
- (プログラム例 7.44 ) 最適化(シンプレックス法)
- (プログラム例 7.45 ) 最適化(動的計画法)
- 7.6.3 確率と統計
- (プログラム例 7.46 ) ガンマ関数
- (プログラム例 7.47 ) 二項分布
- (プログラム例 7.48 ) ポアソン分布
- (プログラム例 7.49 ) 一様分布
- (プログラム例 7.50 ) 指数分布
- (プログラム例 7.51 ) 正規分布
- (プログラム例 7.52 ) χ2 分布
- (プログラム例 7.53 ) t 分布
- (プログラム例 7.54 ) F 分布
- (プログラム例 7.55 ) Fisher の直接確率
- (プログラム例 7.56 ) 乱数の発生
- 7.6.4 多変量解析
- (プログラム例 7.57 ) 最小二乗法
- (プログラム例 7.58 ) 重回帰分析
- (プログラム例 7.59 ) 正準相関分析
- (プログラム例 7.60 ) 主成分分析
- (プログラム例 7.61 ) 因子分析
- (プログラム例 7.62 ) クラスター分析
- (プログラム例 7.63 ) 分散分析
- 7.6.5 その他
- (プログラム例 7.64 ) ソート(並べ替え)
- (プログラム例 7.65 ) 基本アルゴリズム(その1)
- 演習問題7
- 第8章 構造体と共用体
- 8.1 構造体
- (プログラム例 8.1 ) 構造体(定義と参照)
- (プログラム例 8.2 ) 構造体(ネスト,方法 1 )
- (プログラム例 8.3 ) 構造体(ネスト,方法 2 )
- (プログラム例 8.4 ) 構造体(関数の引数)
- (プログラム例 8.5 ) 構造体(リスト構造)
- 8.2 共用体
- (プログラム例 8.6 ) 共用体
- 演習問題8
- 第9章 プリプロセッサ
- 9.1 #define
- (プログラム例 9.1 ) 記号定数とマクロの定義
- 9.2 #undef
- 9.3 #if
- (プログラム例 9.2 ) 記号定数の定義による出力先制御
- (プログラム例 9.3 ) 単位変換
- 9.4 #include
- (プログラム例 9.4 ) ファイルの組み込み
- 演習問題9
第Ⅲ部 クラス(C++)
- 第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 ) リスト構造
- (プログラム例 10.7 ) 様々なデータ型の引き渡し
- 演習問題10
- 第11章 演算子のオーバーロード
- 11.1 演算子のオーバーロード
- (プログラム例 11.1 ) ベクトルの加算(メンバー関数)
- (プログラム例 11.2 ) ベクトルの加算(フレンド関数)
- 11.2 複素数の加算(+)と出力(<<)
- (プログラム例 11.3 ) 複素数の加算(メンバー関数)
- (プログラム例 11.4 ) 複素数の加算(フレンド関数)
- 11.3 変換演算子
- (プログラム例 11.5 ) 変換演算子
- 11.4 関数呼び出し () の多重定義
- (プログラム例 11.6 ) 関数オブジェクト
- (プログラム例 11.7 ) イテレータ
- 11.5 演算子のオーバーロードと演算子との関係
- 演習問題11
- 第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 ) 抽象クラス
- 演習問題13
- 第14章 テンプレート
- 14.1 関数テンプレート
- (プログラム例 14.1 ) 関数テンプレート
- 14.2 クラステンプレート
- (プログラム例 14.2 ) クラステンプレート
- 14.3 C++ 標準ライブラリ
- 14.3.1 コンテナ
- 14.3.2 イテレータ(反復子)
- (プログラム例 14.3 ) イテレータ
- (プログラム例 14.4 ) 挿入イテレータ
- (プログラム例 14.5 ) ストリームイテレータ
- 14.3.3 アルゴリズム等
- 14.3.4 関数オブジェクト
- (プログラム例 14.6 ) map における関数オブジェクトの使用
- (プログラム例 14.7 ) 関数オブジェクトの作成
- 14.4 ラムダ式
- (プログラム例 14.8 ) ラムダ式
- 演習問題14
- 第15章 クラスメンバーに対するポインタ
- 15.1 クラスメンバーに対するポインタ
- (プログラム例 15.1 ) クラスメンバーに対するポインタ
- 第16章 入出力クラス
- 16.1 標準入出力
- (プログラム例 16.1 ) 標準入出力
- (プログラム例 16.2 ) クラスの出力
- 16.2 書式付き入出力
- (プログラム例 16.3 ) 書式付き出力(メンバー関数)
- (プログラム例 16.4 ) 書式付き出力(書式操作子)
- 16.3 ファイル入出力
- (プログラム例 16.5 ) ファイル入出力
- 演習問題16
- 第17章 クラスを使用した様々な例題
- (プログラム例 17.0 ) ニューラルネットワーク( Hopfield ネットワーク)
- (プログラム例 17.1 ) ニューラルネットワーク(パーセプトロン学習)
- (プログラム例 17.2 ) ニューラルネットワーク( Winner-Take-All )
- (プログラム例 17.3 ) ニューラルネットワーク(競合学習)
- (プログラム例 17.4 ) ニューラルネットワーク(バックプロパゲーション)
- (プログラム例 17.5 ) ファジイ推論
- (プログラム例 17.6 ) 待ち行列(簡単な例)
- (プログラム例 17.7 ) 待ち行列(複雑な例)
- (プログラム例 17.8 ) 巡回セールスマン問題(分割法)
- (プログラム例 17.9 ) 巡回セールスマン問題(逐次改善法)
- (プログラム例 17.10 ) 遺伝的アルゴリズム( TSP,関数の最大値への応用)
- (プログラム例 17.11 ) 伝達関数(ゲインと位相の計算)
- (プログラム例 17.12 ) カレンダー
- (プログラム例 17.13 ) 基本アルゴリズム(その2)
第Ⅳ部 Network プログラミング
- 第18章 Network プログラミング
- 18.1 ソケットの利用
- (プログラム例 18.1 ) HTTP ポート
- (プログラム例 18.2 ) ファイルの転送
- (プログラム例 18.3 ) チャットルーム