1. if文
if文は、条件分岐を実現するための基本的な制御文です。特定の条件が満たされた場合にだけ処理を実行します。条件が満たされない場合は、その処理をスキップして次の処理に進みます。
条件式(関係演算子、論理演算子を用いる)を判断し、2分岐選択制御を行います。
(1) 基本形
【書き方】
if (条件式)
文1;
else
文2;
↑
タブで字下げ
【フローチャート】

条件式が
・ 真なら文1 を実行
・ 偽なら文2 を実行
// 例
int a = 10;
if (a > 10) // a が 10 より大なら
a = 0; // a に 0 を代入
else // そうでなければ(a が 10 以下なら)
a++; // a をインクリメントする
(2) else節の省略形
【書き方】
if (条件式)
文1;
【フローチャート】

・ 条件式が真なら文1 を実行
// 例
int a = 0;
if (a == 0) // a が 0 と等しければ
a = 2; // a に 2 を代入する
(3) 複合文の形式
{}で囲んだ文の集合を複合文と呼びます。複数行の文は{} で囲んで複合文にします。
【書き方】
if (条件式) {
文11;
文12;
}
else {
文21;
文22;
}
【フローチャート】

条件式が
・ 真なら文11 と文12 を実行
・ 偽なら文21 と文22 を実行
// 例
int a = 10, b;
if (a < 10){ // a が 10 未満なら
a = 1; // a に 1 を代入
b = 2; // b に 2 を代入
}
else { // そうでなければ(a が 10 以上なら)
a = 3; // a に 3 を代入
b = 4; // b に 4 を代入
}
if文の使用例 サンプルプログラム
#include <stdio.h>
int main(void)
{
double x,y,z;
printf("浮動小数点数 x を入力しなさい > ");
scanf("%lf",&x); // 浮動小数点数xの入力
printf("浮動小数点数 y を入力しなさい > ");
scanf("%lf",&y); // 浮動小数点数yの入力
if (x >= y) { // xはy以上のとき
z = x - y; // x - y の計算
printf("x - y = %f\n",z);
}
else { // それ以外のとき
z = y - x; // y - x の計算
printf("y - x = %f\n",z);
}
return 0;
}
【実行結果例】
浮動小数点数 x を入力しなさい > 12.3
浮動小数点数 y を入力しなさい > 12.4
y – x = 0.100000
※ 水色文字はキーボードからの入力
〇 演習問題
問1
次のフローチャートに基づいてプログラムを作成しなさい。

【実行結果例】
整数値を2つ入力 5 5
aは10以下
aとbは等しい
bは10より小さい
a = 6 b = 6
※ 水色文字はキーボードからの入力
問2
キーボードから入力したキーが、アルファベットの大文字ならば、小文字に変換して、画面に出力しなさい。
それ以外なら、そのまま画面に出力しなさい。ただし、文字コードはASCIIとする。
【実行結果例】
文字を入力しなさい F
ch = f
※ 水色文字はキーボードからの入力
解答例
// 問1
#include <stdio.h>
int main(void)
{
int a, b;
printf("整数値を2つ入力 ");
scanf("%d", &a );
scanf("%d", &b );
if (a > 10)
printf("aは10より大きい\n");
else
printf("aは10以下\n");
if (a == b)
printf("aとbは等しい\n");
if (b >= 10) {
printf("bは10以上\n");
a = 0;
b = 0;
}
else {
printf("bは10より小さい\n");
a = a + 1;
b = b + 1;
}
printf("a = %d \t b = %d\n", a, b);
return 0;
}
// 問2
#include <stdio.h>
int main( void )
{
char ch;
printf("文字を入力しなさい ");
scanf("%c", &ch );
if (ch >= 'A' && ch <= 'Z') {
ch = ch + ('a' - 'A');
}
printf("ch = %c\n", ch) ;
return 0;
}
2. else if
(1) if ~ else if ~ else ~
条件式を判断して多分岐選択制御を行います。
【書き方】
if (条件1) {
文1;
}
else if (条件2) {
文2;
}
:
:
else if (条件n) {
文n;
}
else {
文;
}
- 文1~文n、及び文は複合文({ }で囲んだ文)でも可。
- 複数行の文の場合には { } が必要。単文の場合には { } は省略可能。
【フローチャート】

条件1 が真ならば文1 を実行
そうではなく、
条件2 が真ならば文2 を実行
そうではなく、
条件n が真ならば文n を実行
いずれでもないならば文を実行
// 例
int a = 123;
if (a > 1000)
printf("a は 1000 より大きい\n");
else if (a > 500)
printf("a は 1000以下で500より大きい\n");
else if (a > 100)
printf("a は 500以下で100より大きい\n");
else
printf("a は 100以下\n");
【実行結果例】
a は 500以下で100より大きい
〇 演習問題
次のフローチャートに基づいてプログラムを作成しなさい。ただし、文字コードはASCIIとする。

【実行結果例】
文字を入力しなさい 5
数字です
※ 緑色文字はキーボードからの入力
解答例
#include <stdio.h>
int main(void)
{
char moji;
printf("文字を入力しなさい ");
scanf("%c", &moji);
if (moji >= 'A' && moji <= 'Z') {
printf("英大文字です\n");
}
else if (moji >= 'a' && moji <= 'z') {
printf("英小文字です\n");
}
else if (moji >= '0' && moji <= '9') {
printf("数字です\n");
}
else {
printf("英字でも数字でもありません\n");
}
return 0;
}
(2) if文の入れ子(ネスト)
if文の中にまた if文が入る形です。
【書き方】
if (条件1) {
if (条件2) {
文1;
}
else {
文2;
}
}
else {
文3;
}
- { } の数と位置に注意
- インデント(字下げ)で見やすく
- 文1 ~文3 は複合文でも可。
- 複数行の文の場合には { } で囲み複合文に。単文の場合には { } は省略可能。
- これ以外にも様々なパターンで if文は入れ子が可能。
【フローチャート】

条件1 が真で
条件2 が真ならば、文1 を実行
条件2 が偽ならば、文2 を実行
条件1 が偽ならば、文3 を実行
// 例
if (a > 10)
if (b == 1)
a = 0;
else
a = 1;
else
a++;
〇 演習問題
次のフローチャートに基づいてプログラムを作成しなさい。

【実行結果例】
科目を入力してください(k:国語 s:数学) > k
点数を入力してください > 73
国語の点数は平均点以上です
※ 水色文字はキーボードからの入力
解答例
#include <stdio.h>
int main(void)
{
char kamoku;
int ten;
printf("科目を入力してください(k:国語 s:数学)> ");
scanf("%c", &kamoku);
printf("点数を入力してください > ");
scanf("%d", &ten);
if (kamoku == 'k') {
if (ten >= 73 && ten <= 100) {
printf("国語の点数は平均点以上です\n");
}
else if (ten >= 0 && ten < 73) {
printf("国語の点数は平均点未満です\n");
}
else {
printf("点数の入力エラーです\n");
}
}
else if (kamoku == 's') {
if (ten >= 61 && ten <= 100) {
printf("数学の点数は平均点以上です\n");
}
else if (ten >= 0 && ten < 61) {
printf("数学の点数は平均点未満です\n");
}
else {
printf("点数の入力エラーです\n");
}
}
else {
printf("科目の入力エラーです\n");
}
return 0;
}
コメント