| 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 (条件式) {
// 条件式が真の場合に実行される処理
}以下は、入力された点数が60点より大きいならば「合格」、そうでなければ「不合格」と表示するプログラムである。
#include <stdio.h>
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文を使って判定部分を追加してください。
#include <stdio.h>
int main() {
int num = 15;
// ここにif文を使って判定を書いてください
return 0;
}numは10より大きいです
Details
if文の条件式では、`num > 10`のように比較演算子を使います。模範解答
```c #includeint main() { int num = 15;
if (num > 10) {
printf("numは10より大きいです\n");
}
return 0;
}
</details>
## else
---
else文を使うことで、条件式が偽の場合に実行する処理を指定できる。
```c
if (条件式) {
// 条件式が真の場合に実行される処理
} else {
// 条件式が偽の場合に実行される処理
}
ifで示した例の、60点以上でないときの処理をelseを使って簡単に記述できる。
#include <stdio.h>
int main(void) {
int score;
printf("点数を入力してください: ");
scanf("%d", &score);
if (score >= 60) {
printf("合格\n");
} else {
printf("不合格\n");
}
return 0;
}変数scoreが60未満なら「不合格」と表示されるように、ifとelse文を使って処理を追加してください。
#include <stdio.h>
int main() {
int score = 45;
// ここにif-else文を使って条件分岐を記述してください
return 0;
}不合格
Details
`if (score >= 60)`のように条件を書き、`else`の中に「それ以外」の処理を書きましょう。模範解答
```c #include int main() { int score = 45;if (score >= 60) {
printf("合格\n");
} else {
printf("不合格\n");
}
return 0;
}
</details>
実行結果はif文と同じである。
フローチャートで表すと以下のようになる。

## else if
---
else ifを使うことで、複数の条件を指定することができる。
```c
if (条件式1) {
// 条件式1が真の場合に実行される処理
} else if (条件式2) {
// 条件式1が偽で条件式2が真の場合に実行される処理
} else {
// 条件式1,2が偽の場合に実行される処理
}
2.elseのコードに、入力された点数が100点ならば「満点」と出力させるコードを足す。
#include <stdio.h>
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」などの文字を表示すること。
#include <stdio.h>
int main() {
int score = 85;
// ここにif-else if-else文を使って判定を書いてください
return 0;
}成績はBです
Details
`if (score >= 90)` のように範囲を使って、次に `else if (score >= 80)` というように条件を並べます。最後に `else` を使ってその他の範囲を処理します。模範解答
```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;
}
</details>
## 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文を完成させてください。
#include <stdio.h>
int main() {
int a = 12;
int b = 3;
int c = -1;
// ここにif文を使って判定を書いてください
return 0;
}条件を満たしました
Details
`a >= 10`,`b <= 5`,`c != 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;
}
</details>
## 変数のスコープ
---
変数は使用できる範囲に制限がある。これを変数のスコープという。
変数のスコープは、`{}`で囲まれたブロック内でのみ使用できる。
以下のコードを例に説明する。
変数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 ``` ---例1: 条件式 10 > 5はc言語では1と評価されるため、条件式としては真となる。
例2: 条件式 10 < 5はc言語では0と評価されるため、条件式としては偽となる。
例3: 条件式 10は0以外であるため、条件式は真となる。
これはc言語の仕様であり、他の言語とは若干異なるので注意が必要である。
気になった人は調べてみると良いだろう。
{/* {入力された値が10以上ならば「Yes」、それ以外なら「No」と出力するプログラムを書け。}
<Anser ans={
#include <stdio.h>
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未満 → "不可" }
<Anser ans={
#include <stdio.h>
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文を使用して複数の条件分岐ができる} */}