Previous: 論理 and
Up: 論理演算
Previous Page: 論理 and
Next Page: 復習

論理 or

例5
                if ( a>0 || b<0 ){
                        printf("a > 0 又は b < 0\n");
                }
論理 or も左から右へと評価し、もし左の値が真ならば全体の値は右の値に 関わらず真なので、その場合右の値は評価されない。

例6
                if ( a>0 && b>0 || c>0) ...
この例では、演算の順序に気をつける必要がある。表に書いた様に、論理 and と論理 or では、論理 and の方が優先度が高いので、上の条件は次のプログラムと 同じである。
例7
                if ( (a>0 && b>0) || c>0 ) ...

課題6

cd c を実行した後で( /c に移動した後で)、以下の課題を やってみよ。

課題 6.1
出題プログラムを動かしてみる
以下のプログラムを実行し、正解が得られるまで試みよ。
/* kadai 6.1 */
#include <stdio.h>
main()
{
        int a, b, c, ans, mondaisu, seikaisu;
        mondaisu = seikaisu = 4;

printf("以下の問題では、真の時は1を、偽の時は0を入力せよ。\n\n"); /* prob. 1 */ printf("a=1, b=2 の時、a>0 && b>0 は真(1)か偽(0)か? 答=> "); a=1; b=2; scanf("%d",&ans); if ( ans == (a>0 && b>0) ){ seikaisu = seikaisu - 1; } /* prob. 2 */ printf("a=1, b=-1 の時、a<0 || b>0 は真(1)か偽(0)か? 答=> "); a=1; b=-1; scanf("%d",&ans); if ( ans == (a<0 || b>0) ){ seikaisu = seikaisu - 1; } /* prob. 3 */ printf("a=-2, b=-1 の時、a<0 && !b>0 は真(1)か偽(0)か? 答=> "); a=-2; b=-1; scanf("%d",&ans); if ( ans == (a<0 && !b>0) ){ seikaisu = seikaisu - 1; } /* prob. 4 */ printf("a=3, b=-2, c=1 の a>0 && b>-2 || c>-1 は真(1)か偽(0)か? 答え=>"); a=3; b=-2; c=1; scanf("%d",&ans); if ( ans == (a>0 && b>-2 || c>-1) ){ seikaisu = seikaisu - 1; }

printf("正解は、%d 問中 %d です。\n", mondaisu, seikaisu); if (mondaisu == seikaisu){ printf("全問正解です。次の課題に進んで下さい。\n"); }else{ printf("やり直してください。\n"); } }

このプログラムで入力された答と論理式の真偽が一致しているかどうかを調べる 為に、if 文の条件式に ans == 論理式 で判定している。

課題 6.2
三角形の成立条件

三角形の3辺の長さを与えたときに、その三角形が成立しているかどうかを 調べるプログラムを作る。注意すべきは、どんな長さの3辺を与えても三角形が 成立するわけではない点である。例えば、斜辺の長さが異常に長い 1000 のような 値をとるときに、他の2辺が 1,1 の長さならば明らかに、これは三角形として 成立しない。一般に三角形の三辺を a, b, c とすると、三角形の成立条件は、 a + b > c かつ b + c > a かつ c + a > b である。

3辺の長さ(自然数)をキーボードから入力して、三角形として成立するかどうか を判定するプログラムを作れ。

課題 6.3
三角形の形状

課題 6.3 のプログラムを利用して、三角形の成立条件を調べた上に、形状を 調べるプログラムを作ろう。三角形の形状はいろいろなものがあるが、ここでは 直角三角形、鈍角三角形、鋭角三角形のどれであるかを調べるプログラムを 作る。以下ではもっとも長い辺を a とし、それ以外の辺を b,c とする。 (但し、どれか2つないしは3つの辺が等しい場合も含む)

直角三角形
が成立するもの。
鈍角三角形
が成立するもの。
鋭角三角形
が成立するもの。

ヒント もっとも長い辺(斜辺)を求めるには、次の様にする。

int a, b, c, temp;
        ...
        if (a < b){
                temp=a; a=b; b=temp; /* swap a, b */
        }
        if (a < c){
                temp=a; a=c; c=temp; /* swap a, c */
        }
これで、, となっている。

いろいろな三角形について、作成したプログラムを走らせてみよ。 特に、5, 4, 3 の三角形、3, 2, 6 の三角形、5, 4, 6 の三角形は最低 確かめよ。

作成したプログラムをメイルで、金山まで送ること。但し、題は「課題6」と すること。

maruyama@wakhok.ac.jp
1995年02月08日 (水) 18時57分57秒 JST