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

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

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

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

Q&A

解決済

3回答

3850閲覧

for文内の論理演算子「&&」について

b198270jp

総合スコア5

C

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

0グッド

0クリップ

投稿2019/11/03 08:29

前提・実現したいこと

C言語を勉強しています。
「数値を繰り返して入力し、合計が 100 を超えた場合、または入力が 10 回行われた場合、入力を止め入力された数値をすべて表示する」という課題で回答にあるfor文の「&&」の意味を理解したいと考えております。

「合計が 100 を超えた場合、または入力が 10 回行われた場合」なので、「&&」ではなく「||」の方が良いと思い試した見ましたがうまく動きません。
for文の「&&」はどのような意味で使われているのでしょか?

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

int sum;
int values[10];
int i, j;

for( i = 0, sum = 0 ; i < 10 && sum <= 100 ; i++ )
{
scanf("%d", &values[i] );
sum += values[i];
}

for( j = 0 ; j < i ; j ++ )
printf( "\n%d", values[j] );

### 試したこと ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。

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

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

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

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

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

takasima20

2019/11/03 10:12

自分なら sum の脱出条件はループ内に書くかな。その方が分かりやすい気がするし。
guest

回答3

0

合計が 100 を超えた場合、または入力が 10 回行われた場合、入力を止め

ってことは、裏返せば:

「”合計が 100 を超えた、または入力が 10 回行われた”でない」間は入力を続ける

ってことです。

さらに
「”合計が 100 を超えた(A)、または 入力が 10 回行われた(B)”でない」

は !(A || B) → !A && !B ですから

合計が 100 を超えていない かつ 入力が 10 回未満

これをコードに起こすと

i < 10 && sum <= 100

となります。

投稿2019/11/03 09:17

episteme

総合スコア16614

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

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

0

ベストアンサー

「合計が 100 を超えた場合、または入力が 10 回行われた場合、入力を止め

それは脱出条件です。
for文の条件部に書くのは継続条件なので、その否定を使う必要があります。

not ((合計が100を超える) または (入力が10回以上)) ⇔ (合計が100を超えない) かつ (入力が10回以上では無い) ⇔ (合計が100以下) かつ (入力が10回未満)

breakを用いれば、脱出条件をそのまま書くことも可能です。

C

1for(i = 0, sum = 0; ; i++) { 2 if(10 <= i || 100 < sum) break; 3 ... 4}

次のように書いても良いでしょう。

C

1for(i = 0, sum = 0; ; i++) { 2 if(10 <= i) break; 3 if(100 < sum) break; 4 ... 5}

個人的には次のように書くのが一番意図が伝わりやすいように思います。

C

1int sum = 0; 2for(int i = 0; i < 10; ++i) { 3 if(100 < sum) break; 4 5 ... 6}

投稿2019/11/03 08:35

編集2019/11/03 10:13
LouiS0616

総合スコア35660

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

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

b198270jp

2019/11/03 23:56

分かりやすい回答ありがとうございます。理解できました。
guest

0

forの中に書くのはループし続ける条件です。ループを終了する条件の逆です。

投稿2019/11/03 10:12

HogeAnimalLover

総合スコア4830

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問