質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

4回答

5339閲覧

論理OR演算子の使い方について

kamecha

総合スコア41

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

1グッド

1クリップ

投稿2018/03/06 22:42

###前提
書籍で勉強している学生です。
書籍の解答がないため問題のヒントや解説をしていただけると嬉しいです。

###問題
下に示すように、2つの整数値を読み込んで、それらの値の差が10以下であれば「それらの差は10以下です。」と、そうでなければ「それらの差は11以上です。」と表示するプログラムを作成せよ。
論理OR演算子を利用すること。

2つの整数を入力してください。 整数A: 12 整数B: 7 それらの差は10以下です。

###該当のソースコード

lang

1#include <stdio.h> 2 3int main (void) 4{ 5 int a, b; 6 int diff = 0; 7 puts("二つの整数値を入力してください。"); 8 printf("整数 A : "); scanf("%d", &a); 9 printf("整数 B : "); scanf("%d", &b); 10 11 diff = (a > b) ? a - b: b - a; 12 13 if(diff <= 10){ 14 puts("それらの差は10以下です。"); 15 }else{ 16 puts("それらの差は11以上です。"); 17 } 18 19 return 0; 20}

###疑問点
論理OR演算子||を使わずに実行する方法は分かるのですが、使う方法が思いつきませんでした。
||を使う場合は、正負も考えて実行しなければならないと思います。

###補足情報
書籍: 新明解c言語 入門編
演習 3-11
学生の身であるため、返答が遅れるかもしれません。

退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

diracpaul

2018/03/06 23:00

3項演算子で条件を使っていますが、これは、aとbの大小が違った時の為に使われています。これをそのままifの条件式に入れればいいと思います。具体的には、aからbを引いた結果が、10以下か以上か、-10以上か以下かをorで繋がればいいと思います。以上か以下かについては、正負によって変わるかもしれないので注意が必要です
kamecha

2018/03/08 13:50

有り難うございます。しかし、これは質問への追記、修正なのでしょうか?
guest

回答4

0

diffに差の絶対値を求めているので、ORの必要性がなくなっています。
絶対値でなくa-bの値に対して「-10以上 AND 10以下」、「-10より小さい OR 10より大きい」という事を要求しているのではないかと。
論理ORの練習という問題でしょうから、理解していれば気にしなくて良いかと思います。

投稿2018/03/07 00:43

編集2018/03/07 00:44
otn

総合スコア84529

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kamecha

2018/03/08 14:28

回答有り難うございます。 やはり11以上の判定にORを使うみたいですね。
guest

0

C

1if (diff > 10 || diff < -10)

投稿2018/03/06 23:16

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kamecha

2018/03/08 14:11

なるほど。 先に差が11以上を考えることによって、判定をしているのですね。
guest

0

if(((a>=b)&&(10>=(a-b))) || ((a<b)&&(10>=(b-a))))

ってはなしかな?

投稿2018/03/06 23:01

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

diracpaul

2018/03/06 23:16

3項演算子で、aとbの大小に関する条件を使っていますが、これをif文の条件に使えばいいと思います。具体的には、aからbを引いた結果が10以上か以下か、-10以上か以下かをORで繋げればいいと思います。正負によって以上以下の条件に注意が必要です。
Zuishin

2018/03/07 00:40

別解でしょう。10 以上でなく 11 以上で分岐しなければならないのでそこは間違っていると思いますが、そんなことを書くくらいなら回答すれば良かったのにと思います。
kamecha

2018/03/08 14:03

有り難うございます。 ところで、条件演算子を3項演算子というのですね、 初めて知りました。
diracpaul

2018/03/08 14:22

iPhoneの小さい画面から入力していため、回答ではなく、回答に対するコメントに書いてしまいました。申し訳ありません。
kamecha

2018/03/08 14:26

なるほど、そうだったのですね。 回答有り難うございます。
guest

0

ベストアンサー

11以上になるようなa,bの条件は2種類あると思うので、その条件をOR演算子でつないでやればいいのではないかと思います。
数直線を書いて考えてみるとよいかと。

投稿2018/03/06 22:58

編集2018/03/06 22:59
bassbone

総合スコア767

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kamecha

2018/03/08 13:53

有り難うございます。 プログラムの順番も考えていきたいと思います。
kamecha

2018/03/08 14:29

数直線の考え方が分かりやすかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問