diff --git a/public/fc_1_10_for.drawio.svg b/public/fc_1_10_for.drawio.svg
new file mode 100644
index 0000000..d4130fb
--- /dev/null
+++ b/public/fc_1_10_for.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/public/fc_99_for.drawio.svg b/public/fc_99_for.drawio.svg
new file mode 100644
index 0000000..bdb8327
--- /dev/null
+++ b/public/fc_99_for.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/public/fc_exam_else.drawio.svg b/public/fc_exam_else.drawio.svg
new file mode 100644
index 0000000..0515dcf
--- /dev/null
+++ b/public/fc_exam_else.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/public/fc_exam_else_if.drawio.svg b/public/fc_exam_else_if.drawio.svg
new file mode 100644
index 0000000..2737f2f
--- /dev/null
+++ b/public/fc_exam_else_if.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/public/fc_inf_loop.drawio.svg b/public/fc_inf_loop.drawio.svg
new file mode 100644
index 0000000..49da68f
--- /dev/null
+++ b/public/fc_inf_loop.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/public/fc_menu_switch.drawio.svg b/public/fc_menu_switch.drawio.svg
new file mode 100644
index 0000000..066fce3
--- /dev/null
+++ b/public/fc_menu_switch.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/public/fc_sample_break.drawio.svg b/public/fc_sample_break.drawio.svg
new file mode 100644
index 0000000..9f8474a
--- /dev/null
+++ b/public/fc_sample_break.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/content/docs/textbook/c-lang/beginner/11--if-scope.mdx b/src/content/docs/textbook/c-lang/beginner/11--if-scope.mdx
new file mode 100644
index 0000000..3590dc1
--- /dev/null
+++ b/src/content/docs/textbook/c-lang/beginner/11--if-scope.mdx
@@ -0,0 +1,526 @@
+---
+title: if文と条件分岐の基本
+description: if文と条件分岐の基本スコープについて学びます!
+slug: textbook/c-lang/beginner/if-scope
+---
+
+
+import { Aside } from "@astrojs/starlight/components";
+// import Quize from "@/components/astro/Quize.astro";
+// import Anser from "@/components/astro/Anser.astro";
+
+## if
+---
+
+実行したい処理に条件を付けたい時は、if文を用いる。条件式が真の場合に処理を実行する。
+
+```c
+if (条件式) {
+ // 条件式が真の場合に実行される処理
+}
+```
+
+以下は、入力された点数が60点より大きいならば「合格」、そうでなければ「不合格」と表示するプログラムである。
+
+```c
+#include
+int main(void) {
+ int score;
+
+ printf("点数を入力してください: ");
+ scanf("%d", &score);
+
+ if (score >= 60) {
+ printf("合格\n");
+ }
+ if (score < 60) {
+ printf("不合格\n");
+ }
+
+ return 0;
+}
+
+```
+
+ 実行結果
+実行結果1
+```
+点数を入力してください: 50
+不合格
+```
+---
+実行結果2
+```
+点数を入力してください: 60
+合格
+```
+---
+実行結果3
+```
+点数を入力してください: 70
+合格
+```
+---
+
+
+
+
+#### 比較演算子
+---
+
+| 演算子 | 数学の記号 |
+|:-------:|:--------:|
+| `>=` | ≥ |
+| `>` | > |
+| `<` | < |
+| `<=` | ≤ |
+| `==` | = |
+| `!=` | ≠ |
+
+
+
+
+### 練習問題
+
+変数`num`が10より大きいかどうかを判定しできるよう、`if`文を使って判定部分を追加してください。
+
+```c
+#include
+
+int main() {
+ int num = 15;
+
+ // ここにif文を使って判定を書いてください
+
+ return 0;
+}
+```
+#### 実行結果
+```
+numは10より大きいです
+```
+
+
+
+
+ 模範解答
+```c
+#include
+
+int main() {
+ int num = 15;
+
+ if (num > 10) {
+ printf("numは10より大きいです\n");
+ }
+
+ return 0;
+}
+```
+
+## else
+---
+
+else文を使うことで、条件式が偽の場合に実行する処理を指定できる。
+
+```c
+if (条件式) {
+ // 条件式が真の場合に実行される処理
+} else {
+ // 条件式が偽の場合に実行される処理
+}
+```
+
+ifで示した例の、60点以上でないときの処理をelseを使って簡単に記述できる。
+
+```c
+#include
+int main(void) {
+ int score;
+
+ printf("点数を入力してください: ");
+ scanf("%d", &score);
+
+ if (score >= 60) {
+ printf("合格\n");
+ } else {
+ printf("不合格\n");
+ }
+
+ return 0;
+}
+```
+
+### 練習問題
+
+変数`score`が60未満なら「不合格」と表示されるように、`if`と`else`文を使って処理を追加してください。
+
+```c
+#include
+
+int main() {
+ int score = 45;
+
+ // ここにif-else文を使って条件分岐を記述してください
+
+ return 0;
+}
+```
+#### 実行結果
+```
+不合格
+```
+
+
+模範解答
+```c
+#include
+int main() {
+ int score = 45;
+
+ if (score >= 60) {
+ printf("合格\n");
+ } else {
+ printf("不合格\n");
+ }
+
+ return 0;
+}
+```
+
+
+
+実行結果はif文と同じである。
+
+フローチャートで表すと以下のようになる。
+
+
+
+## else if
+---
+
+else ifを使うことで、複数の条件を指定することができる。
+
+```c
+if (条件式1) {
+ // 条件式1が真の場合に実行される処理
+} else if (条件式2) {
+ // 条件式1が偽で条件式2が真の場合に実行される処理
+} else {
+ // 条件式1,2が偽の場合に実行される処理
+}
+```
+
+2.elseのコードに、入力された点数が100点ならば「満点」と出力させるコードを足す。
+
+```c
+#include
+int main(void) {
+ int score;
+
+ printf("点数を入力してください: ");
+ scanf("%d", &score);
+
+ if (score == 100) {
+ printf("満点\n");
+ } else if (score >= 60) {
+ printf("合格\n");
+ } else {
+ printf("不合格\n");
+ }
+
+ return 0;
+}
+```
+
+ 実行結果
+実行結果1
+```
+点数を入力してください: 50
+不合格
+```
+---
+
+実行結果2
+```
+点数を入力してください: 60
+合格
+```
+---
+実行結果3
+```
+点数を入力してください: 70
+合格
+```
+---
+実行結果4
+```
+点数を入力してください: 100
+満点
+```
+---
+
+フローチャートで表すと以下のようになる。
+
+
+### 練習問題
+
+変数`score`の値がによって成績を表示するよう、`else-if`文を使って判定部分を追加してください。
+
+`score`の値が
+90以上ならば「成績はA」、
+80以上ならば「成績はB」、
+70以上ならば「成績はC」、
+それ以外は「成績はD」などの文字を表示すること。
+
+```c
+#include
+
+int main() {
+ int score = 85;
+
+ // ここにif-else if-else文を使って判定を書いてください
+
+ return 0;
+}
+```
+#### 実行結果
+```
+成績はBです
+```
+
+
+ 模範解答
+ ```c
+#include
+int main() {
+ int score = 85;
+
+ if (score >= 90) {
+ printf("成績はAです\n");
+ } else if (score >= 80) {
+ printf("成績はBです\n");
+ } else if (score >= 70) {
+ printf("成績はCです\n");
+ } else {
+ printf("成績はDです\n");
+ }
+
+ return 0;
+}
+```
+
+
+## and, or, not
+---
+
+複数の条件を指定する場合には、if文を複数個用いたり、以下の論理演算子を活用すると良い。
+
+
+| 演算子 | 数学の記号 |
+|:-------|:--------|
+| `&&` | ∧(かつ) |
+| `\|\|` | ∨(または) |
+| `!` | ¬(否定) |
+
+
+```c
+int x = 8;
+int y = 6;
+
+if(x > 5) {
+ printf("x は 5 より大きい\n");
+ if(y > 5) {
+ printf("x と y は 5 より大きい\n");
+ }
+}
+
+if (x < 10 && y < 10) {
+ printf("x と y は 10 より小さい\n");
+}
+if (!(y >= 10)) {
+ printf("y は 10 より大きくない\n");
+}
+```
+
+x = 8,y = 6のときの実行結果
+```
+x は 5 より大きい
+x と y は 5 より大きい
+x と y は 10 より小さい
+y は 10 より大きくない
+```
+---
+
+### 練習問題
+
+3つの変数`a`, `b`, `c`において、`a`は10以上、または`b`が5以下で、かつ`c`が0でない場合に「条件を満たしました」と表示されるよう、`if`文を完成させてください。
+
+```c
+#include
+
+int main() {
+ int a = 12;
+ int b = 3;
+ int c = -1;
+
+ // ここにif文を使って判定を書いてください
+
+ return 0;
+}
+```
+#### 実行結果
+```
+条件を満たしました
+```
+
+
+ 模範解答
+```c
+#include
+int main() {
+ int a = 12;
+ int b = 3;
+ int c = -1;
+
+ if ((a >= 10 || b <= 5) && c != 0) {
+ printf("条件を満たしました\n");
+ }
+
+ return 0;
+}
+```
+
+
+## 変数のスコープ
+---
+
+変数は使用できる範囲に制限がある。これを変数のスコープという。
+変数のスコープは、`{}`で囲まれたブロック内でのみ使用できる。
+以下のコードを例に説明する。
+変数xは一番外側のブロックで宣言されているため、どこでも使用できる。
+しかし、変数yは1つ目のif文の中で宣言されているため、そのif文の中(ブロック)でしか使用できない。
+
+```c
+int x = 8;
+
+if(x > 5) {
+ int y = 6; // 変数yはこのif文の中でのみ使用可能
+ printf("x は 5 より大きい\n");
+ if(y > 5) {
+ printf("x と y は 5 より大きい\n");
+ printf("x = %d\n", x); // 変数xがスコープ内のため使用可能
+ printf("y = %d\n", y); // 変数yがスコープ内のため使用可能
+ }
+}
+printf("x = %d\n", x);
+// printf("y = %d\n", y); // 変数yがスコープ外のためエラー
+```
+
+
+ 実行結果
+```
+x は 5 より大きい
+x と y は 5 より大きい
+x = 8
+y = 6
+x = 8
+```
+---
+
+
+
+
+
+## 理解度チェック
+---
+
+{/*
+{入力された値が10以上ならば「Yes」、それ以外なら「No」と出力するプログラムを書け。}
+
+
+
+int main(void) {
+ int num;
+
+ printf("数値を入力してください: ");
+ scanf("%d", &num);
+
+ if (num >= 10) {
+ printf("Yes\n");
+ } else {
+ printf("No\n");
+ }
+
+ return 0;
+}
+```
+}>
+{if_else文を使用して条件分岐ができる}
+ */}
+
+{/*
+{else ifを使用して、ユーザーに数値を入力してもらい、その数値が以下の条件に当てはまるか判定してください。
+- 90以上 → "優"
+- 70以上90未満 → "良"
+- 50以上70未満 → "可"
+- 50未満 → "不可"
+}
+
+
+
+
+int main(void) {
+ int score;
+
+ printf("点数を入力してください: ");
+ scanf("%d", &score);
+
+ // 条件分岐
+ if (score >= 90) {
+ printf("評価: 優\n");
+ } else if (score >= 70) {
+ printf("評価: 良\n");
+ } else if (score >= 50) {
+ printf("評価: 可\n");
+ } else {
+ printf("評価: 不可\n");
+ }
+
+ return 0;
+```
+}
+}>
+{else if文を使用して複数の条件分岐ができる}
+ */}
+
+
diff --git a/src/content/docs/textbook/c-lang/beginner/12--for.mdx b/src/content/docs/textbook/c-lang/beginner/12--for.mdx
new file mode 100644
index 0000000..e5f6121
--- /dev/null
+++ b/src/content/docs/textbook/c-lang/beginner/12--for.mdx
@@ -0,0 +1,316 @@
+---
+title: for文
+description: for文について学びます!
+slug: textbook/c-lang/beginner/for
+---
+
+import { Aside } from "@astrojs/starlight/components";
+// import Quize from "@/components/astro/Quize.astro";
+// import Anser from "@/components/astro/Anser.astro";
+
+## for
+---
+for文は、繰り返し処理を行うための構文である。
+繰り返し処理は、書き間違えが無限ループの原因になるので注意が必要である。
+
+以下のように記述する。
+
+```c
+for (初期化; 条件式; 更新式) {
+ // 条件式が真の場合に実行される処理
+ }
+```
+
+基本的な構造は、以下の通りである。
+- 初期化には、ループ変数の初期値を設定する。
+- 条件式には、真の場合にループを繰り返す条件を設定する。
+- 更新式には、ループ変数の値を更新する処理を記述する。
+
+以下は、1から10までの数字を表示するプログラムである。
+
+```c
+#include
+int main(void) {
+ int i;
+ for (i = 1; i <= 10; i++) {
+ printf("%d\n", i);
+ }
+ return 0;
+}
+```
+
+ 実行結果
+```
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+```
+
+
+フローチャートで表すと以下のようになる。
+
+
+
+
+
+
+
+### 練習問題
+
+1から5までの数字を順番に表示するよう、`for`文を使って出力部分を完成させてください。
+
+```c
+#include
+
+int main() {
+ // ここにfor文を使って1から5まで表示してください
+
+ return 0;
+}
+```
+#### 実行結果
+```
+1
+2
+3
+4
+5
+```
+
+
+ 模範解答
+```c
+#include
+
+int main() {
+ for (int i = 1; i <= 5; i++) {
+ printf("%d\n", i);
+ }
+
+ return 0;
+}
+```
+
+
+## 複合代入演算子
+---
+
+複合代入演算子は、代入演算子と算術演算子を組み合わせた演算子である。
+代入と演算のコードを省略して記述できる。
+
+| 演算子 | 実際の動作 |
+|:-------|:--------|
+| `a += b` | `a = a + b` |
+| `a -= b` | `a = a - b` |
+| `a *= b` | `a = a * b` |
+| `a /= b` | `a = a / b` |
+| `a %= b` | `a = a % b` |
+
+## for文のネスト
+---
+
+ループの中にループを記述する構造のことをネスト(入れ子)構造と呼ぶ。
+以下は、九九の表を表示するプログラムである。
+
+```c
+#include
+int main(void) {
+ int i, j;
+ for (i = 1; i <= 9; i++) {
+ for (j = 1; j <= 9; j++) {
+ printf("%d * %d = %d\n", i, j, i * j);
+ }
+ }
+ return 0;
+}
+```
+
+
+ 実行結果
+```
+1 * 1 = 1
+1 * 2 = 2
+1 * 3 = 3
+1 * 4 = 4
+~~~
+省略
+~~~
+9 * 8 = 72
+9 * 9 = 81
+```
+
+
+### 練習問題
+
+二重の`for`文を使って、3×3の掛け算表を表示してください。
+
+```c
+#include
+
+int main() {
+ // ここにfor文のネストを書いてください
+
+ return 0;
+}
+```
+#### 実行結果
+```
+1 2 3
+2 4 6
+3 6 9
+```
+
+
+ 模範解答
+```c
+ #include
+
+int main() {
+ int i, j, num = 1;
+
+ for (i = 0; i < 3; i++) {
+ for (j = 0; j < 3; j++) {
+ printf("%d ", num);
+ num++;
+ }
+ printf("\n");
+ }
+
+ return 0;
+}
+```
+
+
+
+フローチャートで表すと以下のようになる。
+
+
+## 理解度チェック
+---
+
+{/*
+{
+for文を使用して、1から10までの合計を求め、その値を出力しなさい。
+}
+
+
+
+
+int main(void) {
+ int sum = 0;
+
+ // 1 から 10 までの合計を求める
+ for (int i = 1; i <= 10; i++) {
+ sum += i; // sum = sum + i
+ }
+
+ // 結果を表示
+ printf("1 から 10 までの合計: %d\n",sum);
+
+ return 0;
+}
+```
+}
+}>
+{+= は合計を求めるときに便利}
+ */}
+
+{/*
+{
+for文を2つ使用して、ユーザーが指定した行数 N で 右上がりの三角形 を * で描画しなさい。
+実行例
+```
+行数を入力してください: 5
+*
+* *
+* * *
+* * * *
+* * * * *
+```
+}
+
+
+
+
+int main(void) {
+ int N;
+
+ // ユーザーに行数を入力してもらう
+ printf("行数を入力してください: ");
+ scanf("%d", &N);
+
+ // 三角形を描画
+ for (int i = 1; i <= N; i++) { // 行のループ
+ for (int j = 1; j <= i; j++) { // 列のループ
+ printf("*");
+ }
+ printf("\n"); // 1行描画したら改行
+ }
+
+ return 0;
+}
+```
+}>
+{j <= i を条件式にすると、iの値が1からNまで増えるごとに、*の数が増やすことができる}
+ */}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/content/docs/textbook/c-lang/beginner/13--while.mdx b/src/content/docs/textbook/c-lang/beginner/13--while.mdx
new file mode 100644
index 0000000..4d10241
--- /dev/null
+++ b/src/content/docs/textbook/c-lang/beginner/13--while.mdx
@@ -0,0 +1,281 @@
+---
+title: while文
+description: while文について学びます!
+slug: textbook/c-lang/beginner/while
+---
+
+import { Aside } from "@astrojs/starlight/components";
+
+## while
+---
+
+while文は、条件式が真の間、繰り返し処理を行う構文である。
+
+```c
+while (条件式) {
+ // 条件式が真の場合に実行される処理
+}
+```
+
+以下は、1から10までの数字を表示するプログラムである。
+```c
+#include
+int main(void) {
+ int i = 1;
+ while (i <= 10) {
+ printf("%d\n", i);
+ i++;
+ }
+ return 0;
+}
+```
+
+ 実行結果
+```
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+```
+
+
+{/* while文の条件式に1を指定することで無限ループを作成できる */}
+{/* for文のフローチャートと同じもの */}
+フローチャートで表すと以下のようになる。
+
+
+### 練習問題
+
+変数`count`が5になるまで繰り返し処理をする`while`文を書いてください。
+
+```c
+#include
+
+int main() {
+ int count = 1;
+
+ // ここにwhile文を書いてください
+
+ return 0;
+}
+```
+#### 実行結果
+```
+count: 1
+count: 2
+count: 3
+count: 4
+count: 5
+```
+
+
+ 模範解答
+```c
+#include
+
+int main() {
+ int count = 1;
+
+ while (count <= 5) {
+ printf("count: %d\n", count);
+ count++;
+ }
+
+ return 0;
+}
+```
+
+
+
+
+
+## do-while文
+---
+
+do-while文は、while文と同様に、条件式が真の間繰り返し処理を行う構文である。
+while文との違いは、条件式の判定を処理の後に行うため、**条件式が偽であっても1回は処理を実行する。**
+特に理由がなければ、while文を使用することが推奨される。
+
+```c
+do {
+ // 条件式が真の場合に実行される処理
+} while (条件式);
+```
+
+以下は、0が入力されるまで数値を入力し続けるプログラムである。
+```c
+#include
+
+int main(void) {
+ int num = 1; // 0以外の数値で初期化
+ printf("0 を入力すると終了します。\n");
+
+ do { // 無限ループ
+ printf("数値を入力してください: ");
+ scanf("%d", &num);
+ printf("入力された数値: %d\n", num);
+ }while(num != 0); // 0 が入力されたらループを抜ける
+
+ printf("終了しました。\n");
+ return 0;
+}
+```
+
+ 実行結果
+実行結果
+```
+0 を入力すると終了します。
+数値を入力してください: 2
+入力された数値: 2
+数値を入力してください: 1
+入力された数値: 1
+数値を入力してください: -5
+入力された数値: -5
+数値を入力してください: 0
+入力された数値: 0
+終了しました。
+```
+---
+
+
+
+
+フローチャートで表すと以下のようになる。
+
+
+### 練習問題
+
+`do-while`文を使って、入力した数が0でない限り繰り返し続けるプログラムを作成してください。
+
+```c
+#include
+
+int main() {
+ int num;
+
+ // ここにdo-while文を書いてください
+ // numが0のときにループを終了します
+
+ return 0;
+}
+```
+#### 実行結果
+```
+数値を入力してください:5
+数値を入力してください:3
+数値を入力してください:0
+終了します
+```
+
+
+
+ 模範解答
+ ```c
+ #include
+
+int main() {
+ int num;
+
+ do {
+ printf("数値を入力してください:");
+ scanf("%d", &num);
+ } while (num != 0);
+
+ printf("終了します\n");
+
+ return 0;
+}
+```
+
+
+## 理解度チェック
+---
+
+{/*
+{
+while文を使用して、ユーザーが 0 を入力するまで数値を合計し表示しなさい
+}
+
+
+
+
+int main(void) {
+ int num;
+ int sum = 0;
+
+ printf("数値を入力してください(0で終了):\n");
+
+ while (1) { // 無限ループ
+ scanf("%d", &num); // ユーザー入力
+ if (num == 0) { // 0が入力されたらループ終了
+ break;
+ }
+ sum += num; // 合計に加算
+ }
+
+ printf("合計: %d\n", sum);
+ return 0;
+}
+```
+}>
+{while文の条件式に1を指定することで無限ループを作成できる}
+ */}
\ No newline at end of file
diff --git a/src/content/docs/textbook/c-lang/beginner/14--switch.mdx b/src/content/docs/textbook/c-lang/beginner/14--switch.mdx
new file mode 100644
index 0000000..778b0f1
--- /dev/null
+++ b/src/content/docs/textbook/c-lang/beginner/14--switch.mdx
@@ -0,0 +1,461 @@
+---
+title: switch文
+description: switch文について学びます!
+slug: textbook/c-lang/beginner/switch
+---
+
+import { Aside } from "@astrojs/starlight/components";
+
+## switch
+---
+
+switch文は、条件によって処理を分岐させる構文である。
+if文と違い、条件式ではなく、式とその値によって処理を分岐させる。
+
+```c
+switch (式) {
+ case 値1:
+ // 式の値が値1の場合に実行される処理
+ break;
+ case 値2:
+ // 式の値が値2の場合に実行される処理
+ break;
+ default:
+ // どのcaseにも当てはまらない場合に実行される処理
+ break;
+}
+```
+
+以下は、選択したメニューの値段を返すプログラムである。
+
+```c
+#include
+
+int main(void) {
+ int menu_num;
+
+ printf("メニューを選んでください:\n");
+ printf("1: ラーメン\n");
+ printf("2: チャーハン\n");
+ printf("3: 餃子\n");
+
+ scanf("%d", &menu_num);
+
+ switch (menu_num) {
+ case 1:
+ printf("1000円\n");
+ break;
+ case 2:
+ printf("500円\n");
+ break;
+ case 3:
+ printf("400円\n");
+ break;
+ default:
+ printf("メニューにありません\n");
+ break;
+ }
+ return 0;
+}
+```
+
+ 実行結果
+実行結果1
+```
+メニューを選んでください:
+1: ラーメン
+2: チャーハン
+3: 餃子
+1
+1000円
+```
+---
+実行結果2
+```
+メニューを選んでください:
+1: ラーメン
+2: チャーハン
+3: 餃子
+4
+メニューにありません
+```
+---
+フローチャートで表すと以下のようになる。
+
+
+
+## break
+---
+
+break文は、実行されるとループ処理やswitch文を抜け、次の処理へ移る構文である。
+break文を省略すると、次のcase文が実行される。
+
+以下は、1から5までの数字が入力されたときに、メッセージを返すコードである。
+```c
+#include
+int main(void) {
+ int num;
+ printf("数字を入力してください: ");
+ scanf("%d", &num);
+
+ switch (num) {
+ case 1:
+ printf("1が入力されました\n");
+ break;
+
+ // case 2,3の処理をまとめることもできる
+ case 2:
+ case 3:
+ printf("2か3が入力されました\n");
+ break;
+
+ // case 4の処理後にbreakがないため、case 5の処理も実行される。
+ // しかし、break文が無いコードは、可読性が低いため、
+ // breakを書くか、コメント文を残すことを推奨する。
+ case 4:
+ printf("4が入力されました\n");
+ case 5:
+ printf("4か5が入力されました\n");
+ break;
+
+ default:
+ printf("不明\n");
+ break;
+ }
+ return 0;
+}
+```
+
+ 実行結果
+実行結果1
+```
+数字を入力してください: 1
+1が入力されました
+```
+---
+実行結果2
+```
+数字を入力してください: 2
+2か3が入力されました
+```
+---
+実行結果3
+```
+数字を入力してください: 3
+2か3が入力されました
+```
+---
+実行結果4
+```
+数字を入力してください: 4
+4が入力されました
+4か5が入力されました
+```
+---
+実行結果5
+```
+数字を入力してください: 5
+4か5が入力されました
+```
+---
+実行結果6
+```
+数字を入力してください: 6
+不明
+```
+---
+
+
+フローチャートで表すと以下のようになる。
+
+
+### 練習問題
+
+変数`num`の値に応じて曜日を表示する`switch`文を作成してください。
+
+```c
+#include
+
+int main() {
+ int num;
+
+ printf("1から7の数字を入力してください: ");
+ scanf("%d", &num);
+
+ // ここにswitch文を書いてください
+
+ return 0;
+}
+```
+#### 実行結果
+
+```
+1から7の数字を入力してください: 1
+月曜日
+```
+```
+1から7の数字を入力してください: 2
+火曜日
+```
+```
+1から7の数字を入力してください: 3
+水曜日
+```
+```
+1から7の数字を入力してください: 4
+木曜日
+```
+```
+1から7の数字を入力してください: 5
+金曜日
+```
+```
+1から7の数字を入力してください: 6
+土曜日
+```
+```
+1から7の数字を入力してください: 7
+日曜日
+```
+
+
+
+ 模範解答
+```c
+#include
+
+int main() {
+ int num;
+
+ printf("1から7の数字を入力してください: ");
+ scanf("%d", &num);
+
+ switch (num) {
+ case 1:
+ printf("月曜日\n");
+ break;
+ case 2:
+ printf("火曜日\n");
+ break;
+ case 3:
+ printf("水曜日\n");
+ break;
+ case 4:
+ printf("木曜日\n");
+ break;
+ case 5:
+ printf("金曜日\n");
+ break;
+ case 6:
+ printf("土曜日\n");
+ break;
+ case 7:
+ printf("日曜日\n");
+ break;
+ default:
+ printf("1から7の数字を入力してください\n");
+ break;
+ }
+
+ return 0;
+}
+```
+
+
+## continue
+---
+
+continue文は、ループ処理を抜けずに次の処理へ移る構文である。
+以下は、1から100までの数字が入力されるとその数字を出力し、入力された数字が1から100まででないときは再入力させるコードである。
+```c
+#include
+
+int main(void) {
+ int num = 1; // 0以外の数値で初期化
+
+ printf("0 を入力するとループを終了します。");
+
+ while (1) {
+ printf("1~100 の数値を入力してください: ");
+ scanf("%d", &num);
+
+ if (num == 0) {
+ break; // break文はループそのものを抜ける
+ } else if (num < 1 || num > 100) {
+ printf("無効な入力です。もう一度入力してください。\n");
+ continue; // continue文はループ処理を抜けずに次のループへ移る
+ }
+
+ printf("入力された数値: %d\n", num);
+ }
+ return 0;
+}
+```
+
+ 実行結果
+```
+0 を入力するとループを終了します。
+1~100 の数値を入力してください: 50
+入力された数値: 50
+1~100 の数値を入力してください: 200
+無効な入力です。もう一度入力してください。
+1~100 の数値を入力してください: 0
+```
+
+---
+
+
+
+### 練習問題
+
+1から10までの数のうち、偶数だけを表示するように`continue`文を使ってください。
+
+```c
+#include
+
+int main() {
+ for (int i = 1; i <= 10; i++) {
+ // ここにcontinue文を使って偶数だけ表示してください
+ }
+
+ return 0;
+}
+```
+#### 実行結果
+```
+2
+4
+6
+8
+10
+```
+
+
+
+ 模範解答
+```c
+#include
+
+int main() {
+ for (int i = 1; i <= 10; i++) {
+ if (i % 2 != 0) {
+ continue;
+ }
+ printf("%d\n", i);
+ }
+
+ return 0;
+}
+```
+
+
+## 理解度チェック
+---
+
+{/*
+{
+swtich文を用いて月を入力すると対応する季節を表示しなさい。
+}
+
+
+
+
+#include
+
+int main(void) {
+ int month;
+
+ // ユーザーに入力を求める
+ printf("1~12の数字を入力してください (例: 3 → 春): ");
+ scanf("%d", &month);
+
+ // switch文を使用して季節を判定
+ switch (month) {
+ case 3:
+ case 4:
+ case 5:
+ printf("春です!\n");
+ break;
+ case 6:
+ case 7:
+ case 8:
+ printf("夏です!\n");
+ break;
+ case 9:
+ case 10:
+ case 11:
+ printf("秋です!\n");
+ break;
+ case 12:
+ case 1:
+ case 2:
+ printf("冬です!\n");
+ break;
+ default:
+ printf("エラー: 1~12の範囲で入力してください。\n");
+ }
+
+ return 0;
+}
+```
+}>
+{case文をまとめることで、同じ処理をまとめることができる。}
+ */}
diff --git a/src/content/docs/textbook/c-lang/beginner/15--ex-library.mdx b/src/content/docs/textbook/c-lang/beginner/15--ex-library.mdx
new file mode 100644
index 0000000..4b2597a
--- /dev/null
+++ b/src/content/docs/textbook/c-lang/beginner/15--ex-library.mdx
@@ -0,0 +1,202 @@
+---
+title: ex-標準ライブラリ
+description: 標準ライブラリについて学びます!
+slug: textbook/c-lang/beginner/library
+---
+
+import { Aside } from "@astrojs/starlight/components";
+
+## 標準ライブラリとは
+---
+
+標準ライブラリとは、C言語の標準で提供されているCプログラムで利用できる関数やマクロの集合のことである。
+標準ライブラリには、様々な関数が用意されており、それらを利用することで、プログラムの開発が容易になる。
+標準ライブラリは、`#include`ディレクティブを用いてプログラムに取り込むことができる。
+
+## stdio.h
+---
+
+`stdio.h`は、**標準入出力**を行うためのヘッダファイルである。
+ヘッダファイルとは、関数やマクロ、型定義などを記述し、他のCファイルで再利用できるようにするファイルであり、拡張子に`.h`を用いるものである。
+以下は、stdio.hで提供されている関数の一部である。
+
+- `printf()` / `scanf()`: 画面への出力・キーボードからの入力
+- `fopen()` / `fclose()`: ファイルのオープン・クローズ
+- `fgets()` / `fputs()`: ファイルからの読み込み・書き込み
+
+## math.h
+---
+`math.h`は、**数学関数**を提供するヘッダファイルである。
+以下は、math.hで提供されている関数の一部である。
+
+- `sin()`, `cos()`, `tan()`: 三角関数
+- `sqrt()`: 平方根
+- `pow()`: べき乗
+```c
+#include
+#define _USE_MATH_DEFINES // VSCodeでM_PIを使うための定義
+#include
+#include
+
+int main(void) {
+ double angle = 45.0; // 角度(度数法)
+ double radians = angle * M_PI / 180.0; // ラジアン変換 M_PIは非推奨
+
+ // 三角関数
+ printf("sin(%.2f度) = %.5f\n", angle, sin(radians));
+ printf("cos(%.2f度) = %.5f\n", angle, cos(radians));
+ printf("tan(%.2f度) = %.5f\n", angle, tan(radians));
+
+ // 平方根
+ double num = 25.0;
+ printf("sqrt(%.2f) = %.2f\n", num, sqrt(num));
+
+ // 累乗
+ printf("2^3 = %.2f\n", pow(2.0, 3.0));
+
+ return 0;
+}
+
+```
+
+ 実行結果
+```
+sin(45.00度) = 0.70711
+cos(45.00度) = 0.70711
+tan(45.00度) = 1.00000
+sqrt(25.00) = 5.00
+2^3 = 8.00
+```
+
+
+
+
+## string.h
+---
+`string.h`は、**文字列操作**を行うためのヘッダファイルである。
+以下は、string.hで提供されている関数の一部である。
+
+- `strlen()`: 文字列の長さを取得
+- `strcpy()`: 文字列のコピー
+- `strcat()`: 文字列の連結
+- `strcmp()`: 文字列の比較
+
+```c
+#include
+#include
+
+int main(void) {
+ // 1. strlen() - 文字列の長さ
+ char str1[] = "Hello";
+ printf("文字列: \"%s\"\n", str1);
+ printf("長さ: %lu\n\n", strlen(str1)); // ヌル終端を除いた長さ
+
+ // 2. strcpy() - 文字列のコピー
+ char source[] = "C Programming";
+ char destination[50]; // 十分なサイズの配列を確保
+ strcpy(destination, source);
+ printf("コピー後の文字列: \"%s\"\n\n", destination);
+
+ // 3. strcat() - 文字列の連結
+ char str2[50] = "Hello, ";
+ char str3[] = "World!";
+ strcat(str2, str3);
+ printf("連結結果: \"%s\"\n\n", str2);
+
+ // 4. strcmp() - 文字列の比較
+ char cmp1[] = "apple";
+ char cmp2[] = "banana";
+ char cmp3[] = "apple";
+
+ printf("strcmp(cmp1, cmp2) = %d\n", strcmp(cmp1, cmp2)); // "apple" < "banana" → 負の値
+ printf("strcmp(cmp1, cmp3) = %d\n", strcmp(cmp1, cmp3)); // "apple" == "apple" → 0
+ printf("strcmp(cmp2, cmp1) = %d\n", strcmp(cmp2, cmp1)); // "banana" > "apple" → 正の値
+
+ return 0;
+}
+```
+
+ 実行結果
+```
+文字列: "Hello"
+長さ: 5
+
+コピー後の文字列: "C Programming"
+
+連結結果: "Hello, World!"
+
+strcmp(cmp1, cmp2) = -1
+strcmp(cmp1, cmp3) = 0
+strcmp(cmp2, cmp1) = 1
+```
+
+## stdlib.h
+---
+
+`stdlib.h`は、**乱数生成やメモリの確保・解放など**を行うためのヘッダファイルである。
+以下は、stdlib.hで提供されている関数の一部である。
+
+- `abs()`: 整数の絶対値を取得
+- `rand()`: 乱数の生成
+- `malloc()`: メモリの確保
+- `free()`: メモリの解放
+
+```c
+#include
+#include
+#include
+
+int main(void) {
+
+ // 絶対値
+ int x = -10;
+ printf("abs(%d) = %d\n", x, abs(x));
+
+ // 乱数の生成(rand())
+ srand(time(NULL)); // 乱数の種を設定
+ int random_number = rand() % 100; // 0〜99の乱数を生成
+ printf("生成された乱数: %d\n\n", random_number);
+
+ // メモリの確保(malloc())
+ int size = 5;
+ int *arr = (int *)malloc(size * sizeof(int)); // int型5個分のメモリを確保
+ if (arr == NULL) {
+ printf("メモリの確保に失敗しました。\n");
+ return 1; // エラー終了
+ }
+
+ // 配列に乱数を格納
+ printf("確保したメモリに乱数を格納:\n");
+ for (int i = 0; i < size; i++) {
+ arr[i] = rand() % 100; // 0〜99の乱数を代入
+ printf("arr[%d] = %d\n", i, arr[i]);
+ }
+
+ // メモリの解放(free())
+ free(arr);
+ printf("\n確保したメモリを解放しました。\n");
+
+ return 0;
+}
+```
+
+ 実行結果
+```
+abs(-10) = 10
+生成された乱数: 7
+
+確保したメモリに乱数を格納:
+arr[0] = 4
+arr[1] = 98
+arr[2] = 37
+arr[3] = 57
+arr[4] = 23
+
+確保したメモリを解放しました。
+```
+
\ No newline at end of file