C言語入門 (7) 特定の条件でのみ処理を行いたい

Posted: 2012年03月23日

特定の条件で処理を行いときにはどうすればよいか
例えば、入力された数値で割り算を行うプログラムを作成する場合

z = x / y;

xとyを入力してもらうときは
xは何でも問題がないが、yは0の場合エラーになるため
yが0の場合は、処理をしないようにする必要があります。

このような場合どのようなプログラムを書けばいいか

if

一般的なプログラムは、if文を使用します。
if文の書き方は、以下のとおりです。

 // {}で囲まれた処理が分岐後の処理
 if (条件) {
     処理
 }

今回の問題を解決する場合は以下のようになります。

プログラムプログラム:

 #include  <stdio.h>
 #include  <math.h>

 int main(void)
 {
     int x, y;
     int z = 0;

     scanf("%d", &x);
     scanf("%d", &y);

     if (y != 0) {
         z = x / y;
     }
     printf("%d", z);

     return nResult ;
 }

解説解説:

yが0の場合は、割り算を行わずに、printfの処理を行います。
このばあいは、zの初期値が表示されます。

scanfの処理は、適当なため実際のプログラムでは使用しないでください。
もっと、エラーチェックが必要なため

if文にはほかにも条件が一致しなかったときに行う処理も
記述することができます。

 if (条件) {
     処理
 } else {
     処理
 }

else以降の処理は、条件に一致しないときに呼び出されます。
今回の割り算プログラムでは、else文を使用することで
0割を行っているエラーメッセージを出力することも可能になります。

プログラムプログラム:

 if (y != 0) {
     z = x / y;
 } else {
     printf("yには0を指定しないでください");
     return -1;
 }

switch

また複雑な条件の場合は、switch文を使用すると
見やすく記述することができます。

 swich (条件) {
  case 結果:
      処理
      break;
  default:
      処理
 }

swtich文では結果ごとに処理が記述できるため
見やすいプログラムになります。
defaultでは、caseで指定されなかった場合の処理を記述します。
if文とswitch文で書いた場合は以下のようになります。

プログラムプログラム:

 if (y == 0) {
     printf("yには0を指定しないでください");
     return -1;
     z = x / y;
 } else if (y == 1) {
     z = x;
 } else {
     z = x / y;
 }

 swich (y) {
     case 0:
         printf("yには0を指定しないでください");
         return -1;
     case 1:
         z = x;
         break;
     default:
         z = x / y;
 }

C言語では、if文はswitch文よりも処理が早いため
使い分けは、その状況次第です。
他のプログラミング言語では、switch文が早い場合もあります。

特殊な分岐

分かりづらくなるため、私はあまり使用しませんが
コード量は、減るため状況によって使用する機会があると思います。

特殊な分岐方法は、様々な方法があるため以下のサンプルを参照してください。

// 三項演算子(?)
条件 ? trueの場合の処理 : falseの場合の処理;

// 論理演算
条件 && trueの場合の処理;
条件 || falseの場合の処理;

このように短く条件式を記述することができます。
3項演算子は代入の処理で使用することがたまりあります。
論理演算式は、assert(プログラムのエラーチェック)で使用することがあります。

具体的には、

プログラムプログラム:

 // bInitがtrueの場合 0を代入
 int nIndex = (bInit == TRUE ? 0 : 1);

 // 関数をじっこうした結果でチェックする
 puts("文字列を出力") == EOF && assert(false);

コードが読みづらくなるため
コメントを追加するといいとおもいます。
コメントを追加するくらいなら、if文で書いたほうが短くなると思いますので
ほとんど使わないと思います。

練習練習:

  1. 入力された値が奇数/偶数で分岐するプログラムを作成してください。
  2. 1〜40まで数字を表示するが3の倍数でアホな表示をするプログラムを作成してください。
  3. 無限ループ(ずーとループする)するが、
     キー「q」が押されたら終了するようなプログラムを作成してください。

// 入力された1文字を読み込みます。
// 入力された文字は返却値intです。
int getchar(void);

カテゴリー: プログラム, 入門 | タグ: , | コメント無し »

コメント