サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
iPhone 16
programming-place.net
トップページ – C言語編 このページの概要 以下は目次です。 規模の大きいプログラム ヘッダファイル インクルードガード ビルドの過程 コンパイル リンク extern と外部結合 static と内部結合 static と関数 練習問題 参考リンク 更新履歴 規模の大きいプログラム ここまでに登場したプログラムは、どれも1つのソースファイルだけで完結していました。しかし、もう少し規模の大きなプログラムを作るときには、ソースファイルを複数個に分割することが一般的です。 「1つのソースファイルだけで完結していた」と書いたばかりですが、これまでのプログラムも本当は複数のファイルが関わっています。これまでに登場したほとんどのプログラムで、冒頭に次の1行があります。 第23章で解説したとおり、これは #include というプリプロセッサディレクティブです。#include <stdio.h>
トップページ ここは、Programming Place Plus の 新C++編のトップページです。C++ でのプログラミングを、入門段階から順序立てて解説していきます。 新C++編を読むにあたって、古いバージョンの C++ や、C言語の知識は不要です。 プログラミング自体の経験がない(少ない)方は、導入 から始めてください。ある程度わかっている方は、本編 から始めて構いません。いずれも、目次に並べている順番で読み進めることを想定しています。 導入 本編 APPENDIX リンク集 参考書籍 記号の一覧 演算子の一覧 キーワードの一覧表 型の分類表
C++編で扱っている C++ は 2003年に登場した C++03 という、とても古いバージョンのものです。C++ はその後、C++11 -> C++14 -> C++17 -> C++20 -> C++23 と更新されています。 なかでも C++11 での更新は非常に大きなものであり、これから C++ の学習を始めるのなら、C++11 よりも古いバージョンを対象にするべきではありません。特に事情がないなら、新しい C++ を学んでください。 当サイトでは、C++14 をベースにした新C++編を作成中です。
C++編で扱っている C++ は 2003年に登場した C++03 という、とても古いバージョンのものです。C++ はその後、C++11 -> C++14 -> C++17 -> C++20 -> C++23 と更新されています。 なかでも C++11 での更新は非常に大きなものであり、これから C++ の学習を始めるのなら、C++11 よりも古いバージョンを対象にするべきではありません。特に事情がないなら、新しい C++ を学んでください。 当サイトでは、C++14 をベースにした新C++編を作成中です。 ここは、Programming Place Plus の C++編のトップページです。C++ の文法機能や標準ライブラリに関する網羅的な情報を、C++03 ベースで扱っています。 C++編は、C言語の知識があることを前提として書かれています。C言語については、C言語編を参照してください
トップページ – C言語編 このページの概要 以下は目次です。 ASCIIコード マルチバイト文字 マルチバイト文字を扱う標準ライブラリ関数 0x5c問題 文字列リテラルの連結 練習問題 参考リンク 更新履歴 ASCIIコード 第42章で少しだけ触れたように、文字は、文字コード (character code) という数値で表現されます。つまり、ある数値とある文字とを対応付けるルールを決めておき、数値表現として記憶しておくという手を取ります。 実際、char型の値は整数です。それを文字情報であるとみなすことで初めて、文字として扱えます。たとえば、以下のような printf関数の呼び分けが分かりやすい例かもしれません。 #include <stdio.h> int main(void) { char c = 'a'; printf("%c\n", c); // char型の値を文字として出力
トップページ – アルゴリズムとデータ構造編 この章の概要 この章の概要です。 木構造 二分木 再帰的な性質 走査 まとめ 練習問題 参考リンク 更新履歴 木構造 この章では、木構造(ツリー)というデータ構造を紹介します。連結リスト(第3章)と同様に、非常に重要なデータ構造です。 まず、木構造の概念図を見てください。 木構造 この概念図において、○ の部分を節(ノード)と呼びます。各節が線で結ばれていることが分かると思いますが、この線の部分を枝と呼びます。この概念図で、上下を逆さまにしてみれば、木のような形をしていることが分かると思います。これが木構造と呼ばれる理由です。 ここで、ある節から見て、その1つ下にある節のことを子と呼び、逆に1つ上の節を親と呼びます。 この辺りの用語は、家系図を見るように考えればいいです。兄弟、従弟、先祖、子孫などの用語もあります。ちなみに「兄弟」は broth
トップページ – アルゴリズムとデータ構造編 この章の概要 この章の概要です。 ハッシュ 衝突 チェイン法 ハッシュ関数 まとめ 練習問題 参考リンク 更新履歴 関連する話題が、以下のページにあります。 オープンアドレス法によるハッシュ探索 第7章 この章では、ハッシュ探索という探索アルゴリズムを説明します。 ハッシュ探索は、O(1) という圧倒的に小さい計算量で探索を行える非常に優れたアルゴリズムです。つまり、データ数がどれだけあろうと、目的の要素がある場所をたった1回の計算だけで導き出せることを意味しています。どうしたらこんなことが可能になるのでしょうか? 原理はこうです。データを登録するときに、そのデータ自身の値を使って何らかの計算をおこなって、格納位置(通常、データ構造としては配列を使うので、その添字のこと)を決定します。 たとえば、登録するデータが整数だと仮定します。そして、登録
トップページ – C言語編 このページの概要 以下は目次です。 バイナリファイル バイナリデータを確認する エンディアン 文字コード fwrite関数による書き込み fread関数による読み込み ランダムアクセス 改行文字 練習問題 参考リンク 更新履歴 前章までに扱ってきたファイルは、文字だけで構成されていました。このようなファイルは、テキストファイルと呼ばれます。これに対して、この章で扱う、0 と 1 のビットの並びで表現されたファイルを、バイナリファイルと呼びます。また、バイナリファイルで扱うデータのことを、バイナリデータ (binary data) と呼びます。 0 と 1 のビットの並びを使って何を表現するのかが問題ですが、何でも表現できます。バイナリファイルは、文字、画像や音声、動画といったさまざまな形式のデータを扱うことが可能です。文字ならば、ある文字をどういうビットの並びで
トップページ – アルゴリズムとデータ構造編 この章の概要 この章の概要です。 クイックソート クイックソートのプログラム例 再帰しないクイックソートの実装 クイックソートの性能 最悪の場合 基準値の選び方 まとめ 練習問題 参考リンク 更新履歴 この章では、クイックソートを取り上げます。 クイックソートは、その名のとおり、非常に高速なソートを実現するアルゴリズムです。 具体的には、平均計算量が O(n log n)であり、対象のデータ列に事前に何らかの制約を要求しない汎用的なソートアルゴリズムとしては理論上、最高性能となります。 しかし、クイックソートの最悪時の計算量は O(n2)です。これはバブルソート(第3章)などの遅いソートアルゴリズムと同等です。 このように性能のふり幅がとても大きいのですが、最悪のケースは、実装を工夫することでほぼ避けられます。この辺りのことは、後程説明します。
#include <stdio.h> #include <stdarg.h> #include <assert.h> void print(const char* format, ...); int main(void) { print("ddcd", 10, 20, 'x', 30); print("ss", "abc", "def"); print("dfc", 50, 3.3f, 'Z'); } /* 標準出力へ任意の個数・型の値を出力する 引数: format: 出力フォーマットを表す文字を並べたもの。 d … 符号付き整数型 f … 実浮動小数点型 c … 文字型 s … 文字列型 とする。 たとえば、"dds" と指定すると、 後続の実引数が 整数型, 整数型, 文字列型 の順番で並んでいるものと判断される。 ...: 出力する値のリスト */ void print(const
トップページ – アルゴリズムとデータ構造編 この章の概要 この章の概要です。 シェルソート 間隔の決め方 シェルソートのプログラム例 シェルソートの性能 まとめ 練習問題 参考リンク 更新履歴 この章では、シェルソートを取り上げます。 「シェル」は考案者 Donald L. Shell の名前から来ています。 シェルソートは、改良挿入ソート(改良挿入法)と呼ばれることもあります。その呼び名のとおり、挿入ソート(第4章)をよりうまく使うことで、効率の向上を図ります。 シェルソートでは、挿入ソートを離れた要素どうしで挿入ソートを行うことを何度か繰り返します。これだけ聞くと、かえって遅くなるように思えますが、挿入ソートの適用の仕方に工夫があります。 まず、適当な間隔 h を決定し、この間隔だけ離れた要素同士で挿入ソートを行います。その後、h を少し狭めて、やはりその間隔だけ離れた要素同士で挿入
C++編で扱っている C++ は 2003年に登場した C++03 という、とても古いバージョンのものです。C++ はその後、C++11 -> C++14 -> C++17 -> C++20 -> C++23 と更新されています。 なかでも C++11 での更新は非常に大きなものであり、これから C++ の学習を始めるのなら、C++11 よりも古いバージョンを対象にするべきではありません。特に事情がないなら、新しい C++ を学んでください。 当サイトでは、C++14 をベースにした新C++編を作成中です。 前章までの Studentクラスでは、SetData というメンバ関数を用意して、メンバ変数に初期値を与えるという形を取りましたが、本来は、メンバ変数を初期化するためには、コンストラクタ^を利用するべきです。 コンストラクタは、オブジェクトがインスタンス化されるときに、自動的に呼び出さ
C++編で扱っている C++ は 2003年に登場した C++03 という、とても古いバージョンのものです。C++ はその後、C++11 -> C++14 -> C++17 -> C++20 -> C++23 と更新されています。 なかでも C++11 での更新は非常に大きなものであり、これから C++ の学習を始めるのなら、C++11 よりも古いバージョンを対象にするべきではありません。特に事情がないなら、新しい C++ を学んでください。 当サイトでは、C++14 をベースにした新C++編を作成中です。 constオブジェクト この章では、const修飾子(以降、単に const と記述します)とそれに関連する話題を取り上げます。C++ において、const の利用価値は非常に高く、使える場面では積極的に使うべきです。 まずは、もっとも単純と思われる使い方から見ていきましょう。
C++編で扱っている C++ は 2003年に登場した C++03 という、とても古いバージョンのものです。C++ はその後、C++11 -> C++14 -> C++17 -> C++20 -> C++23 と更新されています。 なかでも C++11 での更新は非常に大きなものであり、これから C++ の学習を始めるのなら、C++11 よりも古いバージョンを対象にするべきではありません。特に事情がないなら、新しい C++ を学んでください。 当サイトでは、C++14 をベースにした新C++編を作成中です。 第8章で説明した関数オーバーロードを使えば、異なる型を持った同名の関数を作れますが、関数の作成者が想定した範囲内でしか対応できません。しかも、型ごとに1つ1つ関数を定義しなければなりません。何より、関数オーバーロードでは、将来追加されるかもしれない未知の型にまでは対応できません。 そこ
トップページ – アルゴリズムとデータ構造編 この章の概要 この章の概要です。 優先度付きキュー ヒープによる実装 まとめ 練習問題 参考リンク 更新履歴 優先度付きキュー(プライオリティキュー)は、要素1つ1つに優先度が割り当てられており、その優先度に従った順に取り出されるというデータ構造です。キュー(第6章)という名前が付いていますが、要素を取り出すときのルールがまったく異なります。 優先度のルールは自由に決めて構いません。たとえば、整数を格納する優先度付きキューであれば、その要素の値自体を優先度と考え、優先度の昇順に取り出されるといった具合です。この方法の場合、適当に複数の要素を格納した後で、取り出し操作を繰り返し行えば、昇順に並んだ要素の組が得られます。 優先度付きキューを実装する手段はいろいろとあります。単なる配列だけでも実現できますし、リスト構造や、木構造を使うこともできます。
トップページ – 参考書籍 トップページ – C++編 トップページ – 新C++編 ここでは、C++ に関する参考書籍を紹介します。 書名をクリックすると、詳細な紹介ページへ移動します。 出版日の新しいものほど、上に来るように並べています。 「5段階評価」は、★の数が多いほど、良書であるという判定です。この判定は、その本を読むのに適切なレベルにある読者を想定したものです。「レベル」は以下のように想定しています。 入門)C++ を使って、初めてのプログラミングを学ぼうとする入門者 初級)C++ の基本的な文法や機能を学習する人 中級)C++ の基本的な文法や機能を知り、小さなプログラムを書ける人 上級)すでに本格的な C++ のプログラミングをしている人 技術書を割引価格で購入できたり、多くのポイントが還元されたりするお得情報を、「セール情報」のページで取り上げていますので、こちらもご覧く
計算量を用いることで、O(n) のアルゴリズムでは、データの個数n が 2倍になれば、処理時間も 2倍になるであろうという予測が立ちます。ここで n がいくつなのかも、処理時間が何秒なのかもまったく登場しないことがポイントです。特定の環境に依存せずに、アルゴリズムの性能が評価できるというわけです。 この表で上の方にあるほど、計算量が小さい、効率的なアルゴリズムです。しかし、現実的には必ずしも、効率的なアルゴリズムほど高速であるとはいえないことに注意が必要です。 まず、データの個数を表す n は、それなりの大きさがあることを前提としています。小さなデータ列を対象とすると、O(n) よりも O(n log n) の方が高速である可能性もあります。しかし、データ列が大きくなっていけば、歴然とした差が出てきます。 たとえば、n = 10 程度なら、O(n2) のアルゴリズムを使っても問題ないでしょ
C++編で扱っている C++ は 2003年に登場した C++03 という、とても古いバージョンのものです。C++ はその後、C++11 -> C++14 -> C++17 -> C++20 -> C++23 と更新されています。 なかでも C++11 での更新は非常に大きなものであり、これから C++ の学習を始めるのなら、C++11 よりも古いバージョンを対象にするべきではありません。特に事情がないなら、新しい C++ を学んでください。 当サイトでは、C++14 をベースにした新C++編を作成中です。 代入演算子をオーバーロードして、コピーの処理を変更することについて >第17章 非メンバとして行う演算子オーバーロードについて >第35章 new/delete演算子のオーバーロードについて >第36章 演算子オーバーロード 🔗 第17章で、代入演算子を自分で定義できることを確認しま
C++編で扱っている C++ は 2003年に登場した C++03 という、とても古いバージョンのものです。C++ はその後、C++11 -> C++14 -> C++17 -> C++20 -> C++23 と更新されています。 なかでも C++11 での更新は非常に大きなものであり、これから C++ の学習を始めるのなら、C++11 よりも古いバージョンを対象にするべきではありません。特に事情がないなら、新しい C++ を学んでください。 当サイトでは、C++14 をベースにした新C++編を作成中です。 C++標準ライブラリには、文字列を安全かつ便利に扱える std::string という機能があります。std::string を使うには、<string> という名前の標準ヘッダをインクルードする必要があります。 std::string の正体を明かすと、std::basic_stri
トップページ ここは、Programming Place Plus のC言語編のトップページです。C言語の文法や機能に関する網羅的な情報があります。 2021年11月27日より、全面的な改修作業を行っています。 導入 言語学習 APPENDIX 標準ライブラリのリファレンス(名前順) 標準ライブラリのリファレンス(ヘッダ別) printf関数 scanf関数 逆引き リンク集 参考書籍 記号の一覧 演算子の優先順位 キーワードの一覧表 型の分類表
Programming Place Plus へようこそ。 当サイトはプログラミングに関する学習サイトで、現在はC言語と C++ を扱っています。 プログラミングの入門~中級(自分でプログラミングできるレベル)までをサポートすることを目指して、コンテンツを作成、更新しています。 最近行われた更新を、ここから確認できます。 お知らせ ’2023/4/30 次月から、参考書籍に本を追加するタイミングを、最終土曜日に変更します ’2023/4/23 「セール情報」のページを追加しました 参考書籍 で紹介している本を中心に、お買い得情報を取り上げます(週1回程度の更新予定) ’2023/1/29 オフライン版を更新しました ’2022/6/12 「今後の予定」を更新しました コンテンツ Programming Place Plus のコンテンツです。最近行われた更新はこちら。 以下の検索窓から、す
この章では、配列の中にある要素を、ランダムな順番に並べ替えるという操作について考えてみます。この操作をランダムシャッフルと呼びます。 次のような配列を対象とします。 #include <stdio.h> #include <stdlib.h> #include <time.h> #define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof(array[0])) #define SWAP(type,a,b) { type work = a; a = b; b = work; } static void random_shuffle(int* array, size_t size); static void print_array(const int* array, size_t size); int main(void) { int array[] =
トップページ ここは、Programming Place Plus の、アルゴリズムとデータ構造編のトップページです。 各種アルゴリズムとデータ構造に関して、詳細な解説や、C言語を使った具体的な実装例があります(C言語についての情報は、C言語編を参照してください)。 データ構造 整列アルゴリズム 探索アルゴリズム その他のアルゴリズム APPENDIX リンク集 参考書籍
申し訳ありません。お探しのページが見つかりません。 ページが削除されているか、将来作成される予定のページに対するリンクを選択されたかもしれません。 以下のリンクから、目的に近いページへ移動されるか、検索窓を使ってページをお探しください。 Programming Place Plus のトップページ C言語編のトップページ (旧)C++編のトップページ 新C++編のトップページ アルゴリズムとデータ構造編のトップページ 用語集のトップページ 参考書籍のトップページ
このページを最初にブックマークしてみませんか?
『Programming Place Plus』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く