制御構文は、上から下へ流れるプログラムを途中で流れを分岐させたり、流れを繰り返したりすることができる構文を表します。
制御構文の主な種類としてif文、for文、while文、switch文の4パターンあります。
if文を使うと、分岐構造を作ることができます。
条件式の真偽
状態 | 真偽 | 値 |
条件が満たされた場合 | true(真) | 1(0以外) |
条件が満たされなかった場合 | false(偽) | 0 |
関係演算子
2つの値の大小を比較します。
条件を満たせば「真(true)」、条件を満たさなければ「偽(false)」となります。
関係演算子の形式は以下の通りです。
演算子 | 例 | 意味 |
---|---|---|
< | a < b | aはbよりも小さい |
> | a > b | aはbよりも大きい |
<= | a <= b | aはbよりも小さい(a == bの条件も含む) |
>= | a >= b | aはbよりも大きい(a == bの条件も含む) |
== | a == b | aとbは等しい |
!= | a != b | aとbは等しくない |
if 文
if文の基本形
条件式には真、又は偽を表す値(すなわち、最終的には数値型)を指定します。if 文は条件式の結果が真の場合のみ実行され、そうでなければ実行されません。より単純にいえば、条件式に 0 以外の値が指定されたときのみ実行されるのです。
if(条件式) {
文1;
}
if(条件式) {
文1;
}
if(条件式) { 文1; }
if ~ else ~
if(条件式) {
文1;
} else {
文2;
}
if(条件式) {
文1;
} else {
文2;
}
if(条件式) { 文1; } else { 文2; }
実例: 偶数奇数判定
/* a5-1-4.c */
#include <stdio.h>
int main(void)
{
int n;
printf("整数値を入力してください。> ");
scanf("%d", &n);
if (n % 2 == 0) {
printf("入力値は偶数です。\n");
} else {
printf("入力値は奇数です。\n");
}
printf("プログラムのおわり\n");
getch();
return 0;
}
/* a5-1-4.c */
#include <stdio.h>
int main(void)
{
int n;
printf("整数値を入力してください。> ");
scanf("%d", &n);
if (n % 2 == 0) {
printf("入力値は偶数です。\n");
} else {
printf("入力値は奇数です。\n");
}
printf("プログラムのおわり\n");
getch();
return 0;
}
/* a5-1-4.c */ #include <stdio.h> int main(void) { int n; printf("整数値を入力してください。> "); scanf("%d", &n); if (n % 2 == 0) { printf("入力値は偶数です。\n"); } else { printf("入力値は奇数です。\n"); } printf("プログラムのおわり\n"); getch(); return 0; }
if文の多分岐構造
if(条件式1) {
文1;
} else if(条件式2) {
文2;
} else if(条件...
:
(中略)
:
} else if(条件式n) {
文n;
} else {
文x;
}
if(条件式1) {
文1;
} else if(条件式2) {
文2;
} else if(条件...
:
(中略)
:
} else if(条件式n) {
文n;
} else {
文x;
}
if(条件式1) { 文1; } else if(条件式2) { 文2; } else if(条件... : (中略) : } else if(条件式n) { 文n; } else { 文x; }
実例:成績判定
/* 成績判定プログラム */
#include <stdio.h>
// C判定:ten 60以上69以下 不合格:ten 59以下
int main(void)
{
int ten;
while (1) //ブロック
{
printf("点数を入力してください。> ");
scanf("%d", &ten);
if ( ten == 0 ) break;
// OR
if (ten < 0 || ten > 100) { // ペアー
printf("点数の入力エラーです。\n");
}
else
if (ten >= 80) { // block ブロック
printf("成績はA判定です。\n");
}
else if (ten >= 70) {
printf("成績はB判定です。\n");
}
else {
printf("成績はC判定です。\n");
}
}
getch();
return 0;
}
/* 成績判定プログラム */
#include <stdio.h>
// C判定:ten 60以上69以下 不合格:ten 59以下
int main(void)
{
int ten;
while (1) //ブロック
{
printf("点数を入力してください。> ");
scanf("%d", &ten);
if ( ten == 0 ) break;
// OR
if (ten < 0 || ten > 100) { // ペアー
printf("点数の入力エラーです。\n");
}
else
if (ten >= 80) { // block ブロック
printf("成績はA判定です。\n");
}
else if (ten >= 70) {
printf("成績はB判定です。\n");
}
else {
printf("成績はC判定です。\n");
}
}
getch();
return 0;
}
/* 成績判定プログラム */ #include <stdio.h> // C判定:ten 60以上69以下 不合格:ten 59以下 int main(void) { int ten; while (1) //ブロック { printf("点数を入力してください。> "); scanf("%d", &ten); if ( ten == 0 ) break; // OR if (ten < 0 || ten > 100) { // ペアー printf("点数の入力エラーです。\n"); } else if (ten >= 80) { // block ブロック printf("成績はA判定です。\n"); } else if (ten >= 70) { printf("成績はB判定です。\n"); } else { printf("成績はC判定です。\n"); } } getch(); return 0; }
if文のネスト
if(条件文1) {
if(条件文2) {
文1;
} else {
文2;
}
} else {
文3;
}
if(条件文1) {
if(条件文2) {
文1;
} else {
文2;
}
} else {
文3;
}
if(条件文1) { if(条件文2) { 文1; } else { 文2; } } else { 文3; }
実例:出席率と点数から成績を判定
/* 出席率と点数から成績を判定するプログラム */
#include <stdio.h>
// nest 入れ子
int main(void)
{
int ten, percent;
while (1) // ブロック block
{
printf("授業の出席率は何%ですか。> ");
scanf("%d", &percent);
if (percent >= 80)
{
printf("点数は何点ですか。> ");
scanf("%d", &ten); // 入れ子 nest
if (ten >= 60)
{
printf("合格です。\n");
}
else
{
printf("再試験です。\n");
}
} //ペアー
else {
printf("補習です。\n");
}
}
return 0;
}
/* 出席率と点数から成績を判定するプログラム */
#include <stdio.h>
// nest 入れ子
int main(void)
{
int ten, percent;
while (1) // ブロック block
{
printf("授業の出席率は何%ですか。> ");
scanf("%d", &percent);
if (percent >= 80)
{
printf("点数は何点ですか。> ");
scanf("%d", &ten); // 入れ子 nest
if (ten >= 60)
{
printf("合格です。\n");
}
else
{
printf("再試験です。\n");
}
} //ペアー
else {
printf("補習です。\n");
}
}
return 0;
}
/* 出席率と点数から成績を判定するプログラム */ #include <stdio.h> // nest 入れ子 int main(void) { int ten, percent; while (1) // ブロック block { printf("授業の出席率は何%ですか。> "); scanf("%d", &percent); if (percent >= 80) { printf("点数は何点ですか。> "); scanf("%d", &ten); // 入れ子 nest if (ten >= 60) { printf("合格です。\n"); } else { printf("再試験です。\n"); } } //ペアー else { printf("補習です。\n"); } } return 0; }
演習問題
演習3-4 (教科書P51)
二つの整数値を読み込んで、値の関係を表示するプログラムを作成
- 「AとBは等しいです。」
- 「AはBより大きいです。」
- 「AはBより小さいです。」
実行例
二つの整数を入力してください。
整数A:12
整数B:6
AはBより大きいです。
二つの整数を入力してください。
整数A:12
整数B:6
AはBより大きいです。
二つの整数を入力してください。 整数A:12 整数B:6 AはBより大きいです。