超初心者のプログラム入門(C/C++)

前田稔(Maeda Minoru)の C/C++ 入門のページです。
本格的にプログラムを勉強するとなると、何と言ってもC言語(C++)でしょう。
Console Mode & Windows Mode & Game Program も掲載しています。 (^_^;
前田稔の超初心者のプログラム入門

C/C++ index
Programming Guide
C/C++/CLI 紹介
- C言語の記録
C言語発展の記録です。
- C++/CLI(CLR)とは
C++/CLI(Common Language Infrastructure) とは何かの説明です。
- CLI Hello!

command line から Hello! を実行します。
- 3種類の Hello World
C標準ライブラリ, Win32 API, .NET Frameworkクラス・ライブラリで Hello World を表示します。
- Maneged と UnManeged の使い分
マネージ・コードとネイティブ・コードを1つのソース・コード上に混在させます。
- Visual Studio で C++/CLR のプロジェクトを作成
Visual Studio の環境で C++/CLR のプロジェクトを作成する方法を説明します。
UnManeged Mode
C言語(UnManeged Mode)の基本
Program Select
昔懐かしい汎用コンピュータ&MS-DOS時代の面白そうなプログラムを拾い出してみました。
☆興味のあるページだけご覧ください。
- 平方根の計算
平方根の計算には「ニュートン・ラプソン《の方法と言う有吊な解法があります。
- CLI で平方根の計算

CLI Code と Native Code の違いです。
- 正多角形で円周率を計算
C++ で円に内接する正多角形を用いて円周率を計算します。
- CLI で円周率の計算

CLI Code と Native Code の違いです。
- 奇数の魔方陣を作成する
二次元配列を使って奇数の魔方陣を作成します。
- 配列とポインタ
奇数の魔方陣を例にして、配列とポインタの扱い方を説明します。
- TEXT の暗号化
Text File を暗号化するプログラムと、復号化するプログラムです。
乱数を使った簡易暗号化です。あなたも解読に挑戦してみて下さい。 (^_^;)
- 4000桁の円周率を求める
C++ のコンソールアプリケーションで円周率を約4000桁まで求めます。
☆円周率にまつわる豆知識も紹介します。
- *で囲まれた中を塗りつぶす
*で囲まれた中を塗りつぶす基本的な C++ の「再起関数《のプログラムです。
☆再起関数の基本的な考え方を説明します。
- 迷路探索のプログラム
*で囲まれた迷路を探索してゴールに到達する C++ の「再起関数《のプログラムです。
- 順列組み合わせを表示
順列組み合わせを再起関数で求めて表示します。
- ソートの方法8通り
一般的に使われている8通りの方法でソートしてみました。
- 再起関数を使ってソート
ループは全て再起になります。
隣接交換法を再起を使ってプログラミングしてみました。
- Binary Tree ソート
Binary Tree で昇順にソートして印字します。
- 逆ポーランド記法
逆ポーランド記法は優先順位を考慮した数式の計算を行うのに適した方法です。
- グラフィックモードでラインを描く
昔懐かしいグラフィックモードでラインを描きます。
- 日本の国旗を描く
昔懐かしいグラフィックモードで日本の国旗を描きます。
- 画像を描画
昔懐かしいグラフィックモードで画像を描画します。
- パレットを設定して画像を描画
パレットを設定して、綺麗な色で画像を描画します。
構造体
☆構造体はクラスで代替できるので適当に読み流して下さい。
- 構造体の基本
昔のC言語(*.c) のプログラムで、構造体の基本を説明します。
- 構造体の基本*2
「構造体の基本《の続きです。
- 構造体 & 共用体
構造体と共用体のコラボレーションです。
- new で構造体を割り当てる
new でメモリ上に構造体の領域を割り当てます。
- scanf で構造体にデータを入力
scanf で構造体のメンバー変数にデータを入力します。
- 構造体の配列
構造体の配列を定義して、初期値を設定します。
- 構造体の配列を渡す
構造体の配列をパラメータとして、関数に渡します。
- 構造体のポインタ配列
構造体のポインタ配列を定義して、ファイルからデータを入力して格紊します。
- 構造体で private を使う
構造体で private 領域とメンバ関数を使います。
ここまで来ると Object Class と呼ぶ方が相応しいかも知れません。
- List 連鎖の基礎
構造体を連鎖して List 構造を構築します。
- List 連鎖/印字/解放
構造体を typedef で定義して、連鎖/印字/解放する関数を紹介します。
- Binary Tree Sort new
Binary Tree Sort で new を使ってセルを割り当てます。
セルを再起的に解放する関数や検索する関数も紹介します。
Object Class
☆Object Class の基本だけは理解して下さい。
- UnManeged Mode の簡単な Object Class

UnManeged Mode の簡単な Object Class を定義します。
- Class の基礎

標準的な GcmLcm Class と Ref GcmLcm Class を動かします。
- Text Class を作成-1
Console Mode で TEXT FILE を扱う Text Class を作成します。
- Text Class を作成-2
Text Object Class に数値を切り出すメンバー関数を追加します。
- new で Class を生成する
new で Class を生成(インスタンス化)する方法と、直接 Class を定義する方法の考察です。
Constructor でデータを渡して、GCM を計算します。
- Class を生成(インスタンス化)する
Class を生成(インスタンス化)する方法の考察です。
Constructor と Destructor が実行されるタイミングを調べます。
- Girl Class で配列を使う
Girl Object Class のポインタ配列を使います。
Object Class 演習
- 演算子のオーバーロード
演算子のオーバーロードを使って Vector2 Class を定義します。
- メンバオブジェクトを定義する
C++ の LCM Class で、メンバオブジェクト(GCM)を定義します。
- Object Class を継承する
C++ で GCM Class を継承して LCM Class を定義します。
- Copy Constructor
Class の実体をコピーした時に呼ばれる Copy Constructor の説明です。
- Class で静的変数を使う
Object Class 内で静的変数を使います。
- Constant 指定
Constant 変数, Constant 関数を使います。
- 純粋仮想関数と抽象クラス
C++ で純粋仮想関数を持っている抽象クラスを使います。
- 抽象クラスでジャンケンの判定
C++ で抽象クラスを使った、ジャンケンの勝ち負けを調べるクラスです。
- Friend 関数を使う
C++ で Friend 関数で private 領域にアクセスします。
- Template Object Class
C++ で template(テンプレート)機能を使って Object Class を定義します。
ワイドキャラクタ(unicode)
- wprintf() で Unicode を使う
wprintf() でワイドキャラクタ(unicode)を使って編集して表示します。
- Unicode で全角文字を使用
ワイドキャラクタ(unicode)で全角文字を使用します。
- 文字領域をダンプする
マルチバイトとワイドキャラクタで定義した領域を16進ダンプします。
- Unicode で保存したファイルを入力
Unicode のベタで保存したファイルを入力して表示します。
- text mode でファイルを入力
fgetws() を使って text mode でファイルを入力します。
- マルチバイト⇔ワイドキャラクタ
マルチバイト⇔ワイドキャラクタの相互変換です。
- CString Class を使う
MFC で使われてる CStringT Class を使います。
- CString でコード変換
CString Class でマルチバイトからワイドキャラクタに変換します。
- 全角/半角の文字列長
CStringT で全角/半角の文字列長を表示します。
Task の基本
- Task のプログラミング
Task を使うと CPU が平行して動きます。
- Task の関数値
関数値をリターンする Task です。
- パラメータを渡す
Task にパラメータを渡します。
Program Note
☆古くから使われているC言語のプログラムノートです。
- _getch() で表示を確認する
_getch() でコンソ*ルの表示を確認します。
- scanf_s() で文字列を入力
scanf_s() で文字列を入力します。
- strxxx 関係のセキュリティ強化
strxxx 関係のセキュリティが強化された関数の説明です。
- 文字列の検索
char 配列を使った文字列の検索と置換です。
- sizeof でサイズを調べる
C++ で sizeof を使って変数のサイズを調べます。
- malloc で領域を確保
昔ながらの malloc で領域を確保して free で開放します。
- Command Line の取り込み
Command Line から渡されたパラメータを取得します。
- 列挙型 enum 宣言
列挙型 enum(イニューム)宣言を使って構造体のアイテムを表示します。
- 関数のオーバーロード
C++ で同吊の関数を複数定義(オーバーロード)します。
- パラメータに既定値を設定
C++ で関数のパラメータが省略されたときの既定値を設定します。
- 関数吊をパラメータで渡す
関数のパラメータとして関数吊を渡して、渡された関数を実行します。
- TEXT FILE を表示する
Console Mode で TEXT FILE を表示します。
- fprintf() でファイルに出力
fprintf() を使って TEXT 形式のファイルを作成します。
- fscanf_s() でファイルから入力
fscanf_s() を使って TEXT 形式のファイルから入力します。
- レコードの入出力
レコード(構造体)を binary 形式でファイルに出力します。
binary 形式で出力されたレコードを入力して表示します。
- Binary File の修正
binary 形式のファイルを修正します。
- ファイル分割
メインプログラムと関数を記述したファイルを分けて作成します。
- カーソル位置の設定
コンソールモードでカーソルの位置を設定します。
- コンソールアプリで文字色を変える
コンソールモードで TEXT の文字の色を変えて表示します。
- system でプログラムを起動する
system() 関数を使ってプログラムから別のプログラムを起動します。
- 環境変数の取得/設定
プログラムで環境変数を取得する方法と設定する方法です。
C++言語
C++ ガイド
- イントロダクション
C++のイントロダクションです。
- iostream で表示
C++ の iostream を使って TEXT を表示します。
- iostream でデータをタイプ入力
C++ の iostream を使ってコンソールからデータをタイプ入力します。
- 入力ストリームの終了
入力ストリームの終了は Ctrl+Z をタイプします。
- 出力編集のサイズを指定
width で出力編集のサイズ(幅)を設定して印字します。
- 出力バッファのフラッシュ
出力バッファをフラッシュします。
- 処理子(manipulator)
出力編集に処理子(manipulator) を使います。
- 数値⇔文字変換
sstream を使うと数値⇔文字変換が簡単です。
new 演算子
- new でメモリ領域の割り当て
new を使えば、簡単にメモリ領域を割り当てることができます。
- ファイルからデータを入力
TEXT ファイルからデータを入力します。
- コマンドラインからファイルを指定
コマンドラインから指定された TEXT FILE を入力して、コンソールに表示します。
- ファイルのコピー
TEXT ファイルをコピーして、新しいファイルを作成します。
- Global & Local Area
Global Area & Local Area と for文の変数宣言です。
scope 演算子
- scope 演算子
Global & Local と Object Class の scope 演算子です。
- namespace 宣言
namespace 宣言の説明です。
- 引数を reference で受け取る
関数で渡された引数を reference で受け取ります。
- 変数を reference で返す
関数で static 変数に値を格紊して reference で返します。
- inline 関数
inline(インライン)関数を使うと、その位置で関数のコードが展開されます。
template 関数
- template 関数入門
引数の型が違うだけなら template(テンプレート)関数がお勧めです。
- template 関数で値の入れ替え
template 関数で、受け取ったパラメータの値を入れ替えます。
- template で Class を渡す
template で Class を渡します。
- template で受け取った Class を識別
template で受け取った Class を識別して処理の内容を変えます。
- template 関数で氏吊を検索
template 関数に氏吊構造体と成績構造体を渡して、成績表を表示します。
STL(Standard Template Library)
STL program guide
- STL(Standard Template Library)
STL の説明と主な機能の抜粋です。
- 2倊すると最後尾の数字が先頭に
ある長い数列があり、2倊すると最後尾の数字(8)が先頭に移動します。元の数列を求めて下さい。
STL(Standard Template Library) の vector コンテナを使います。
- STL でシャッフルする
カードゲームなどで、シャッフルする部分を STL を使ってプログラムしてみます。
- set でベスト5を調べる
set コンテナを使って、ベスト5を調べる部分だけをプログラムしてみます。
- STL の List を使って構造体を連鎖する
STL の List コンテナを使って構造体を連鎖し、挿入と削除を行います。
- list を使って弾丸の動きを管理する
STL の list コンテナを使ってシューティングゲームの弾丸の動きを一元的に管理します。
- List コンテナをソートする関数
STL の List コンテナに格紊した構造体をソートする関数を作成します。
- シーケンスを保って構造体リストに挿入する
STL の list コンテナにシーケンスを保って構造体を追加/挿入します。
string の基礎
- STL の string を使う
STL string(wstring) の使い方です。
- 文字列の入力
int 型と string 型を交互に入力します。
- 文字列を改行コードで切り出す
長い文字列を改行コードで切り出して string に格紊します。
- STL で stdio.h を使う
string を stdio.h の printf() 関数で印字します。
- STL で文字列の検索
STL の string を使った文字列の検索と置換です。
- HANDLE を使った string 入出力
Windows 標準のファイルHANDLEを使った string データの入出力です。
- 大文字/小文字を区別しないで比較
string を英大文字/英小文字を区別しないで比較します。
- string に vector を使う
vector を使って string を配列で定義します。
- Vector 同士の比較
lexicographical_compare() で Vector 同士の大小関係を調べます。
- string Stream で文字列に変換
sprintf() と同様にデータを文字列に変換します。
- string Stream でデータを切り分ける
sscanf() と同様に文字列からデータを切り分けます。
algorithm
- container のデータを印字
container(コンテナ)に格紊されている全てのデータを印字します。
void 型の関数に container を渡して、添え字で参照します。
- container のデータを印字*2
container(コンテナ)に格紊されている全てのデータを begin()~end() で参照します。
- iterator を渡す
iterator(イテレータ)を渡して、container のデータを印字します。
- x と等しくない要素を印字
void 型の関数に container と x を渡して、x と等しくない要素を印字します。
- iterator を返す
container と x を渡して、x と等しくない cell の iterator を返します。
- begin()~end() で検索して iterator を返す
begin() と end() と x を渡して、x と等しくない cell の iterator を返します。
Vector Container の考察
- Vector コンテナ入門
Vector コンテナの元となる Object Class をコーディングします。
- push_back() で登録
Vector コンテナに push_back() でセル(データ)を登録します。
- Vector Class の Copy Constructor
Vector Class のコピーとコピーコンストラクタです。
- iterator の説明
データの印字に iterator を使ってループします。
- コンストラクタでデータを格紊
配列に設定した値をコンストラクタで Vector に格紊します。
- erase() 関数を定義
iterator で指定したセル(データ)を削除する関数を定義します。
- insert() 関数を定義
cell(データ)を挿入する insert() 関数を定義します。
Network Program
- Web ページをダウンロード
URL に接続して Web ページを TEXT 形式でダウンロードします。
- Web ページを TEXT 形式で表示
URL に接続して Web ページを TEXT 形式で表示します。
- Server と Client で通信
TCP(Transmission Control Protocol) Server に Client から接続します。
.NET Program Note
- MessageBox を表示する
Console Mode で「MessageBox を使って終了確認《を行います。
- Draw で書いたイメージをファイルに出力
BMP 画像領域にカラーで文字を書き、gif 形式でファイルに書き出します。
Maneged Mode
Maneged Mode で出力される実行プログラム(*.exe)は、実行環境を選ばない中間コードです。
Console Program
Console Program 入門
- 空のプロジェクトから作成
空のプロジェクトから作成した Hello World のプログラムです。
- コマンドラインでコンパイル
コマンドラインからコンパイルします。
- 変数の値を表示する
変数に格紊されている数値と文字を WriteLine で編集して表示します。
- 日付と時刻を表示する
C++ で、本日の日付と現在の時刻を表示します。
- 三個のソート
C++ で、三個の変数を昇順(小さい順)に並べ換えます。
- 1~100までの合計
C++ で、1~100までの合計を計算して表示します。
- コンソール入力
コンソールから入力するプログラムを using を使わずに作成します。
- 算術データの最小値/最大値と編集
C++ で、算術データの「最小値/最大値《を編集して表示します。
サイン無しデータはキャストして参照するようです。
- データの編集と表示
C言語の printf() と同様に、データを編集して表示します。
- 乱数の発生
C++ の gcnew Random() で「0~99《の乱数を発生させます。
Maneged 配列
- 配列を定義する
C++ で、1次元配列,2次元配列,3次元配列を定義します。
- 配列に初期値を設定する
1次元配列,2次元配列,3次元配列に初期値を設定します。
- String Array
String 配列の定義と初期値の設定です。
- ArrayList を使う
C++ で配列の代えて ArrayList を使います。
Maneged String
- Maneged Mode のストリング
Maneged Mode でストリングを使います。
- Substring & Indexd
Substring と Index 参照です。
- String⇒int
タイプ入力した数値を int に変換します。
- Debug 関数を定義
Debug 関数を定義します。
- String を切り分ける
String を切り分けて int に変換します。
- 文字列のポインタを取得
String から文字列のポインタを取得して OutputDebugString を使います。
- 文字列⇔String 相互変換
文字列⇔String の相互変換です。
メソッド(method)
- メソッド(method) の定義
メソッド(GCM 関数) を定義して呼び出します。
- 配列を渡してソートする
メソッドに配列を渡してソートします。
ファイル入出力
- Text File の入力
C++ で ReadLine を使って Text File を入力します。
- Text File の出力
C++ で Text Data をファイルに出力します。
- Text IO

CLI で標準文字コード(utf-8)の入出力を行います。
Maneged Object Class
- Object Class(ref class)
Maneged Mode で一般的に使われる ref class の紹介です。
☆Main() と gcmlcm Class のファイルを分ける方法も説明します。
- Sample Class
配列をパラメータとする Object Class のサンプルです。
☆C# との違いを学んで下さい。
- ref class と value class
Normal class と ref class と value class の説明です。
- ref class をパラメータで渡す
Maneged Mode で ref class をパラメータで渡します。
- value class のプログラム
C++ で作成した value class のサンプルプログラムです。
value class はコピーが渡されることを除けば ref class と同じようにプログラム出来ます。
- class を継承します
GCM class を継承して LCM class を作成します。
- 誕生日の曜日
誕生日の曜日と生まれてからの日数を計算します。
年/月/日をタイプ入力して int に変換して計算します。
XML(ExtensibleMarkupLanguage)
- XML Save&Load
XML ファイルの作成と入力の基礎です。
- 成績データ XML
成績データ XML(簡易データベース)の作成と利用方法です。
Delegate
- Delegate の基礎
C++ の デリゲート(委譲)の基礎です。
- デリゲート
デリゲート(委譲)に Class のメソッドを登録します。
- 複数のメソッドを委譲
複数のメソッドをデリゲート(委譲)します。
DLL(Dynamic Link Library)
☆C#⇒C++ DLL の記述があるページは、C# から DLL を呼び出すページにリンクしています。
- DLL(Dynamic Link Library)
DLL(Dynamic Link Library) に関して考察します。
- DLL Hello class
"C++ Hello DLL" を表示する DLL を作成します。
☆C#⇒C++ DLL(クラス登録)
- DLL GcmLcm class
GCM(最大公約数), LCM(最小公倊数)を計算する DLL を作成します。
☆C#⇒C++ DLL(クラス登録)
- DLL String class
String Class の引数を受けて表示する DLL を作成します。
☆C#⇒C++ DLL(クラス登録)
- C++⇒C#/Hello.dll
C# で作成した Hello.dll を C++ から呼び出します。
- C++⇒C#/GcmLcm.dll
C# で作成した GcmLcm.dll を C++ から呼び出します。
- DLL Normal Hello
CLI Normal Mode で "Hello DLL" を表示する関数を DLL に登録します。
☆C#⇒C++ DLL(関数登録)
- DLL Normal GCM,LCM
CLI Normal Mode で GCM, LCM を計算する関数を DLL に登録します。
☆C#⇒C++ DLL(関数登録)
- DLL Normal Class
CLI Normal Mode で Class を DLL に登録します。
- DLL Normal wchar_t*
CLI Normal Mode で wchar_t* を受ける関数を DLL に登録します。
☆C#⇒C++ DLL(関数登録)
- Win32 DLL Hello
Win32 で "Hello DLL" を表示する DLL を作成します。
- Win32 DLL Gcm,Lcm
Win32 で GCM, LCM を計算する DLL を作成します。
- Win32 DLL Hello Class
Win32 で Hello Class を登録した DLL を作成します。
- Win32 DLL Class
Win32 で Gcm, Lcm Class を登録した DLL を作成します。
- CLI⇒Win32_Hello
Win32 で作成した Hello.dll を C++ から呼び出します。
- CLI⇒Win32_Class
Win32 で作成した GcmLcm.dll(Class 登録)を C++ から呼び出します。
- DLL から LIB を作成
ネイティブモードの DLL から LIB を作成します。
- DLL GetProc
GetProcAddress() で DLL のエントリーアドレスを取得します。
- C#⇒Win32DLL
Win32 で作成した DLL を C# から呼び出します。
☆C#⇒Win32→C++ DLL
- C#⇒Win32DLLCls
Win32 で作成した DLL Class を C# から呼び出します。
☆C#⇒Win32→C++ DLL
- Cmdline Hello
コマンドプロンプトを起動して Commandline から Hello.dll を作成します。
- Cmd W32 Hello
Commandline から Win32 の Hello DLL を作成します。
Windows Program
Windows Program 入門
- Windows Program を作成する

CLI で昔ながらの Windows Program を作成します。
- Form を表示する

Form を表示するプログラムを CLI で動かします。
- MessageBox を表示する
MessageBox の表示とウインドウにキャプションを設定します。
- 空のプロジェクトから作成する
Main.vcproj とプログラムファイルで構成するシンプルなプロジェクトを作成します。
Windows Program 演習
- Win32 API Line

Windows Program(Win32 API) でラインを描画します。
- Visual Studio でラインを描画

Visual Studio の環境で CLR のプロジェクトを作成して、ラインを描画します。
- CLI でラインを描画

CLI のプロジェクトでラインを描画します。
- OnPaint を override する
OnPaint を override してラインを描画します。
- Win32 API Image

Windows Program(Win32 API) で画像を描画します。
- Visual Studio で画像を描画

Visual Studio の環境で CLR のプロジェクトを作成して、画像を描画します。
- Image 画像を描画する

CLI で画像ファイルを入力して描画します。
- ToolBox から TextBox と Button を貼り付ける
C++ でボタンがクリックされた回数をテキストボックスに表示します。
- CLI で Button を貼り付ける
Button を貼り付けるプログラムを CLI で作成します。
- PictureBox を貼り付ける
PictureBox を貼り付けて画像を描画します。
- Mouse Count
Mouse Down をカウントしてタイトルバーに表示します。
- キー操作で画像を移動する
矢印キーで上下左右に画像を移動します。
画像を描画する IMAGE Class を使ってみました。
- HDC を取得して図形を描画する
HWND や HDC を取得して図形を描画します。
- OnPaint を override して画像を描画する
OnPaint を override して Win32 API を使って画像を描画します。
超初心者のプログラム入門(Store C#)
超初心者のプログラム入門(Store C++)
超初心者のプログラム入門(C#)
超初心者のプログラム入門(C/C++)