
int n, bit, s;
s = 0;
while(n) {
bit = n % 2;
n /= 2;
if (bit == 1)
s++;
}
上の処理(2で割っていって余りが1になる回数を数える)において、nが45の場合をトレースしました。
すると、あるところで
n /= 2
の結果nが0になるのですが、そのとき、if以降の部分は評価されないのでしょうか。
要は、while文の中身が複文の場合に、条件式が偽になった場合に、偽になった箇所でループを抜けるのか、ループの最後の分まで評価されて次のループが開始される前にのみ条件式が評価されるのか、C言語の仕様はどうなっているのかという質問です。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
> if以降の部分は評価されないのでしょうか。
されます。
> 条件式が偽になった場合に、
> 偽になった箇所でループを抜けるのか、
> ループの最後の文まで評価されて次のループが開始される前にのみ条件式が評価されるのか
後者です。
以下のようなサンプルを実行させてみれば直ぐにわかると思います。
int n = 1;
while(n){
printf("n = 1\n");
n = 0;
printf("n = 0\n");
}
No.4
- 回答日時:
発想が面白い。
こういう宣言された条件でブロック内の文の実行を逐一チェックし
実行を制御する言語は、私の知る限り無いですね。
エッフェルという言語に多少似た機能があったような。
No.1
- 回答日時:
while文の条件式部分はwhileでくくられた部分を実行するたびに評価されます。
ですからnが0ならwhile(0)ですからその時点で脱出条件が成立したと評価されwhileループ内は実行されません。
ただし、While文の()内は条件式でその評価結果を持ってループ内を実行するか抜けるかの判断がされますから、厳格には0、1ではなくtrue、falseです。
ということでwhile(n)ではなくwhile(n==0)と記すのが望ましく、それは他者がソースコードを見た際に「やっていることの意味」=「作者の考え」を誤解無く理解する上でも大切な事です。
---
ちなにみ。。。
> int n, bit, s;
> s = 0;
> while(n) {
変数sには初期値として0が代入されていますがnとbitの内容は不定です。普通0ですが保証はありません。
よって最初のwhile(n)が意図したとおりに動作する保証はありません。
で、想像しますに・・・
> while(n) {
> n /= 2;
・・・というところからしてnはローカル変数ではなく、この関数の引数なのではないでしょうか?
ただしその場合、この関数の機能は「2で割っていって余りが1になる回数を数える」ではなくなるかと思いますが。
参考まで。
ありがとうございます。
ちなみに、nは、int…の変数宣言の後に、scanf()でキーボードから値を取得しています。今回はその部分を省略しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- Java Java 南京錠 2 2023/02/04 11:46
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- その他(プログラミング・Web制作) uwscとWinShotを使いスクリーンショットを撮る 1 2022/06/30 21:15
- C言語・C++・C# 10人分の生徒の英語の点数{32,34,41,38,40,26,14,46,42,50} と数学の点 2 2022/05/26 21:31
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBAで年度をまたぐ期間の...
-
do-while文が禁止される理由
-
if文を使わずに奇数・偶数を判断
-
入力した数値を倍々するプログラム
-
break文でループを一気に抜ける...
-
VBScriptでSQLに接続し、CSV出...
-
C言語forループが完結した場合...
-
C言語 for文を使った一例について
-
C言語のプログラムみてください...
-
エクセルVBAで Do While (1)って?
-
H8/3048マイコンAD/DA変換について
-
While文の終わりにセミコロンが...
-
For文の終了値を関数にしても問...
-
猫でもわかる、がわかりません。
-
プログラムで関数は使わない方...
-
if文の中にfor文なのか、for文...
-
for文while文の無限ループの違...
-
C言語 数字を削除する関数
-
秀丸エディタで、行の後ろに倍...
-
Aの値からBの値を除するとは??
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
do-while文が禁止される理由
-
break文でループを一気に抜ける...
-
ループを途中で抜けたいのですが。
-
Excel VBAで年度をまたぐ期間の...
-
C言語forループが完結した場合...
-
For文の終了値を関数にしても問...
-
プログラムで関数は使わない方...
-
Cプログラムが終了しない
-
for文while文の無限ループの違...
-
入力した数値を倍々するプログラム
-
if文を使わずに奇数・偶数を判断
-
UWSCにてある一定の動作を無限...
-
入力した文字列から母音だけを...
-
エクセルでC言語のfor文と同じ...
-
猫でもわかる、がわかりません。
-
PIC のプログラムについて ど...
-
C言語、whileループを抜け出す...
-
VBScriptでSQLに接続し、CSV出...
-
エクセルVBAで Do While (1)って?
-
ループの特定入力終了
おすすめ情報