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

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

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

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

968閲覧

whileの条件式についてです。

46hm

総合スコア20

C

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/04/29 17:11

###わからないこと
while()の()は条件式が来るらしいのですが、比較演算子などを用いて、条件を指定したり、(1)で無限ループになるのは理解できるのですが、以下のコードの12行目の(x)はどういう条件なのかよくわかりません。
ちなみに以下のコードは3のつく数字と3の倍数だけ出力するプログラムです。

#include<iostream> using namespace std; int main(){ int n,x; int i =1; cin>>n; while(i<=n){ x = i; if(x % 3 ==0){ cout<<" "<<i; }else{ while(x){ if(x % 10 ==3){ cout<<" "<<i; break; }else{ x/=10; } } } ++i; } cout<<endl; return 0; }

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

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

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

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

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

guest

回答3

0

while ( ● ) は while ( ● != 0 ) と同義です。

投稿2020/04/29 21:01

episteme

総合スコア16614

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

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

0

ベストアンサー

条件を指定したり、(1)で無限ループになるのは理解できる

もしかして、while文がなにをしているかをわかったわけではないなので、知っているパターンから一歩外れたらわからないのでは。

while文だけでなくif文も、あるいはfor文のカッコの中の;で区切られた2番めもそうなんですけど、とにかく「式の値が0か、それ以外か」だけが問題です。(C/C++以外ではまたちょっと事情が変わってきます)

そもそもが、

比較演算子などを用いて、条件を指定

これをなにか「特殊なことをしている」と考えていませんか? 例えば、(100==50)+((30<31)*5) という式をみてびっくりせずにさっと値を出せますか?

比較演算子というくらいで、==とか<とかは前後の値を元に演算して数値を返すもの、ですよ。
==は演算子の前後(左辺/右辺という言い方のほうが普通か)の値を比較して、等しければ1を、そうでなければ0を返す「計算」の機能を持っています。
<は、左辺の方が値が小さければ1を、そうでなければ0を返すという計算をします。
他の比較も同様。それだけのもの。

余計なことを言えば、代入=も演算子。右辺の値を左辺に代入して、その値を返します。だから、初心者あるあるの
if( a=100 ) {
ってのが文法エラーにならないんです。=はaに100を代入して100を返す。ifはカッコの中の値が0かそれ以外を調べる。この組み合わせになんら「間違い」はないので。

話をwhile文に戻せば、繰り返しになりますが()の中の式が0を返すか、それ以外を返すか、それがwhile文の動作を決める要素です。
while(x)文なら、xが0なのか0以外なのか、0なら文の次に進み、0以外なら文を実行してwhileに戻ってくる。それだけ。
それを勝手に条件式とか1とかと結びつけて難しく理解しちゃいけません。

投稿2020/04/29 22:56

thkana

総合スコア7639

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

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

thkana

2020/04/29 23:23

初心者あるあるで言えば、bはaより大きくcより小さいっていう条件の式を a<b<c と書いて「動かない」と悩むというのもありますね。これも、<が1または0を返す演算子でしかないとわかればなぜ駄目なのか解釈できるはず。
guest

0

条件式というよりは真偽値で判定しています。

条件式も評価されて最終的には真偽値になるのです。
真偽値は0以外が正、0が偽として定義されています。

変数xの値が0以外なら正となり中の処理が実行されますが、0なら偽となり中の処理が実行されません。

投稿2020/04/29 17:28

NAOPI-05

総合スコア132

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問