C言語による主要なソートアルゴリズムの実装と解説

開発環境とコード規約 本記事で紹介するコードは、C言語標準規格(C99以降)を想定しており、 Visual Studio 2022などの主要な開発環境で動作します。可読性と保守性を向上させるため、変数名は論理的な意味を持つようにリファクタリングし、標準的な型定義を使用しています。 挿入ソート (Insertion Sort) 挿入ソートは、手札のトランプを整理するように、整列済みの部分 ...

7月9日 21:10 投稿

C言語での単方向リスト:先頭へのノード挿入実装

連結リストのノード構造体定義 C言語における単方向リストの各要素は、データを保持するフィールドと、次の要素へのメモリアドレスを持つ構造体として定義されます。 typedef struct ListItem { int value; struct ListItem* link; } ListItem; リスト先頭へのノード挿入ロジック リストを新規作成する際、最初は要素が存在しないため、先頭ポインタはNULLを指し ...

7月9日 00:46 投稿

C言語の基礎概念と開発環境構築(Visual Studio 2022 を用いた実践)

1. C言語の��要と歴史的意義 C言語は、汎用性が高く、プログラムの実行効率に優れた手続き型プログラミング言語です。高水準言語としての記述のしやすさと、アセンブラに近いハードウェア制御能力を兼ね備えており、「高水準言語の中のアセンブラ」と称されるほどです。1972年にデニス・リッチー氏がベル研究所で開発し、Unix OSの移植性を高める目的で生まれました。 C言 ...

7月8日 16:22 投稿

コンピュータシステムの概覧: CSAPPの視点

情報はビットとコンテキスト 以下に示すCプログラムhello.cを例に考えます: #include <stdio.h> int main() { printf("hello, world\n"); return 0; } このソースコードは、実際には0と1のビット列で構成されています。8ビットが1バイトとなり、各バイトは特定の文字を表します。 現代の多くのコンピュータシステムでは、ASCII標準を使用して ...

7月7日 23:13 投稿

C言語におけるヘッダーファイルとモジュール分割の実装手法

C言語のモジュール化における基本概念 C言語プロジェクトの規模が拡大するにつれ、全てのコードを単一のファイルに記述するのは現実的ではありません。保守性を向上させ、チーム開発を円滑に進めるために、プログラムは機能単位で「インターフェース(宣言)」と「実装(定義)」に分割されます。 役割の明確化 開発では、主に以下の2種類のファイルを組み合わせます。 ヘ ...

7月7日 21:47 投稿

C言語における柔軟配列(Flexible Array Member)の活用と利点

C言語では、malloc、calloc、realloc といった関数を用いてヒープ領域に動的メモリを確保できます。これらに関連する特殊なデータ構造として、「柔軟配列(Flexible Array Member)」があります。 柔軟配列は、構造体の末尾に要素数を明示せずに宣言される配列です。以下のように定義します: struct Data { int header; char flag; int payload[]; // 柔軟 ...

7月7日 18:26 投稿

C言語プログラミング実習課題集

課題1: ランダムな学籍番号生成 #include <stdio.h> #include <stdlib.h> #include <time.h> #define NUM_ITEMS 5 int main() { int rand_val; srand(time(0)); for (int count = 0; count < NUM_ITEMS; count++) { rand_val = rand() % 100 + 1; printf("20240042%04d\n", rand_val); } return 0; } この ...

7月6日 23:04 投稿

C言語によるLeetCode 1047と239の実装解説:スタック処理と単調キュー最適化

問題 1047: 隣接する重複文字の完全除去 問題定義 英小文字のみで構成される文字列が引数として渡されます。この文字列に対して、「隣接する同一文字をペアで取り除く」という演算を繰り返し適用します。すべての演算が行き詰まった時点で残っている文字列を返却してください。解答は一意に決まります。 入力例: "abbaca" → 出力: "ca" 制約条件: 文字列長は [1, 20000] ...

7月5日 22:28 投稿

C言語による制御構造の基礎演習:分岐・反復処理の実装例

1. 単一値の階乗計算 nの階乗(n!)を算出する処理では、累積変数に対して反復処理を用いて乗算を適用します。 #include <stdio.h> int main(void) { int target_num = 0; int factorial_val = 1; printf("計算対象の整数を入力: "); scanf("%d", &target_num); for (int counter = 1; counter <= target_num; ++counter) { f ...

7月5日 00:38 投稿

C言語プログラミング演習:関数とアルゴリズム

演習課題1:成績評価システム #include <stdio.h> char evaluate_score(int mark); // 関数宣言 int main() { int mark; char evaluation; while(scanf("%d", &mark) != EOF) { evaluation = evaluate_score(mark); // 関数呼び出し printf("得点: %d, 評価: %c\n\n", mark, evaluation); } ...

7月3日 21:29 投稿