プログラミング基礎覚え書き③(条件文ifとswitch)

 条件に応じてルートを変える二つの構文をまとめました。この二つの構文は、本当にキャラがかぶっていて憎らしいほどややこしい。個人的にはifの方がわかりやすいかなあ。

参考文献:高橋麻奈著『やさしいC第5版』

if文
もし○○だったら・・・という条件を与えて、その条件のもと真偽を判定する文。
今までのコードは、各行のおしりにセミコロン;を付けることが多かったが、なぜかif分のおしりにはセミコロン;をつけない。超トラップ。

60点以上なら合格、60点未満なら不合格と判定するコード
if文のところだけはセミコロンをつけないようにする。

#include

int main(void) {

int score;

printf("点数を入力\n");
scanf("%d",&score);

if(score>=60)
printf("合格");

if(score<60)
printf("不合格");

return 0;
}

入力された整数が偶数か奇数かを判定するコード
2で割った余りが0か1かで判断する。パリティピーポー(※3度目)。

#include

int main(void)
{
int num;

printf("整数を入力\n");
scanf("%d", &num);

if(num%2==1)
printf("%dは奇数です\n",num);

if(num%2==0)
printf("%dは偶数です\n",num);

return 0;
}

入れ子(ネスト)構造のif文
イメージとしては二次試験まである感じ。対象を絞り込む事が出来る。
授業の例だと、男性の大人だけ持ち物に髭剃りが追加されるようになっている。

#include

int main(void) {
int gender,age;

printf("性別を整数で入力(男:1,女:2): ");
scanf("%d",&gender);
printf("年齢を入力: ");
scanf("%d",&age);

printf("持ち物は着替えハブラシ");
if (gender==1) {
if (age>=20) {
printf("髭剃り");
}
}
printf("です.\n");

return 0;
}

入力された整数を分類するコード
「3の倍数」「3の倍数+1」「3の倍数+2」の3パターンに分類するためには、入力された整数を3で割って、その余り(懐かしのモジュラス)で判断するようにすればいい。
このコードも入れ子構造になっているのに注意。
まず、モジュラスを定義する大きな{}の中に、3つの{}(余り0の場合と、余り1の場合と、余り2の場合)が入っているようにしないとコンパイルできない(数学と違ってブロックの区切りがすべて中かっこなのでややこしい)。
そして、そもそも3で割れない場合(整数が3未満)はelse文ではじいている。

#include

int main(void) {

int n;
int mod;
scanf("%d", &n);

if (n > 2)
{
mod = n % 3;

if (mod == 0)
{ printf("%dは3の倍数\n", n); }

else if (mod == 1)
{ printf("%dは3の倍数+1\n", n); }

else if (mod == 2)
{ printf("%dは3の倍数+2\n", n); }

}

else
{
printf("%dは3未満\n",n);
}
return 0;
}

テストの点数によって成績をつけるコード
まず100点満点のテストなので点数がマイナスだったり100点を超える場合はエラーとする。
そのあと優>良>可>不可の順にelse if文でマトリョーシカ的に削ぎ落としていく。

#include

int main(void)
{

int n; //点数(数字)の変数を宣言
char *c; //成績(文字)の変数を宣言

scanf("%d", &n);

if(0>n || n>100) printf("\n入力エラー\n"); //ありえない点数

else{
if(n>=80)c="優"; //80点以上
else if(n>=65)c="良"; //65点以上80点未満
else if(n>=50)c="可"; //50点以上65点未満
else c="不可"; //50点未満

printf("\n成績:%s\n",c);
}

return 0;
}

善玉と悪玉のコレステロールの値を判定するコード
善玉コレステロールの正常値は 40以上、悪玉コレステロールの正常値は 70以上 140以下らしい。ちなみに私のコレステロール値はどちらも少ない。それはそれでどうなのだろうか。

#include

int main(void)
{
int zen,aku;

printf("善玉コレステロールの値を入力");
scanf("%d",&zen);

if(40<=zen)

{printf("善玉コレステロールは正常です。\n");}

else
{printf("善玉コレステロールは異常です。\n");}


printf("悪玉コレステロールの値を入力: ");
scanf("%d",&aku);

if(aku>=70 && aku<=140)
{printf("悪玉コレステロールは正常です。\n");}

else
{printf("悪玉コレステロールは異常です。\n");}

return 0;
}

switch文
if文と同じように、条件によって処理をコントロールできる文。
複数のケース(case)を任意に設定し、それ以外の入力があった場合はデフォルトということで、その他の処理としてまとめることができる。
注意点としては、case文ではセミコロン;ではなくコロン:をつけること、それぞれのケースのコードの最後にbreak;を入れないと、全ケースが表示されるバグが起きるということである。

年号をアルファベットから文字に変換するコード
M→明治、T→大正、S→昭和、H→平成に変換する設定。

#include

int main(void)
{

int res;
char ans;

printf("大文字のアルファベット一文字を入力\n");

scanf("%c", &res);

switch(res)
{

case 'M': //※セミコロンなのに注意!
printf("明治\n");
break; //※break文がないとバグるので注意!

case 'T':
printf("大正\n");
break;

case 'S':
printf("昭和\n");
break;

case 'H':
printf("平成\n");
break;

default: //どのケースにも当てはまらない場合
printf("エラー\n");
break;

}

return 0;
}

電卓のコード
数字1(num1)、演算子(op)、数字2(num2)の順に入力し、その計算結果(result)を返す。

#include

int main(void) {
int num1, num2, result;
char op;

printf("式:");
scanf ("%d %c %d", &num1, &op , &num2);

switch (op) {
case '+':
result = num1 + num2;
break;

case '-':
result = num1 - num2;
break;

case '*':
result = num1 * num2;
break;

case '/':
result = num1 / num2;
break;

case '%':
result = num1 % num2;
break;

default:
printf("エラー\n");
break;

}

printf("\n %d%c%dの結果:%d\n", num1,op,num2,result);

return 0;
}

入力された整数が偶数か奇数かを判定するコード(switch文バージョン)
2で割った余りが0か1かで判断する。パリティピーポー(※4度目)。

#include

int main(void)
{

int num,mod;

printf("整数を入力\n");
scanf("%d", &num);

mod=num%2;

switch (mod)

{
case 1:
printf("%dは、奇数です\n");
break;

case 0:
printf("%dは、偶数です\n");
break;

default:
printf("エラー\n");
break;
}

return 0;
}

整数を入力し、その値に対応する季節を表示するコード(caseのまとめ方)
3か4か5が入力されたら全部春と表示するというように、複数のケースをまとめたい場合は、単純に並べて書いちゃって大丈夫らしい。


#include

int main(void)
{
int num;

printf("整数:\n");
scanf("%d", &num);

switch(num)
{

case 3:
case 4:
case 5: //並べちゃうだけでコンパイルできる。
printf("春\n");
break; //※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("?\n");
break;

}
return 0;
}
Calendar
<< April 2024 >>
SunMonTueWedThuFriSat
 123456
78910111213
14151617181920
21222324252627
282930
search this site.
tags
archives
recent comment
recent trackback
others
にほんブログ村 科学ブログへ にほんブログ村 科学ブログ 恐竜へ カウンター
admin
  • 管理者ページ
  • 記事を書く
  • ログアウト