
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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
do-while文が禁止される理由
-
入力した数値を倍々するプログラム
-
ループを途中で抜けたいのですが。
-
C言語forループが完結した場合...
-
入力した文字列から母音だけを...
-
H8/3048マイコンAD/DA変換について
-
C言語、whileループを抜け出す...
-
Cプログラムが終了しない
-
Matlabを使った心理学実験
-
桁数を求めるプログラム。
-
ループの特定入力終了
-
if文でスキップしたい場合は?
-
PAD図の書き方
-
プログラムで関数は使わない方...
-
strstr()関数の実装内容について。
-
他言語で言うcontinue文
-
if文の中にfor文なのか、for文...
-
excel VBA if文について
-
For文の終了値を関数にしても問...
-
基本情報技術平成21年春午後問8...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
do-while文が禁止される理由
-
ループを途中で抜けたいのですが。
-
Excel VBAで年度をまたぐ期間の...
-
C言語forループが完結した場合...
-
UWSCにてある一定の動作を無限...
-
入力した文字列から母音だけを...
-
excel VBA if文について
-
プログラムで関数は使わない方...
-
C++のvolatileについて
-
入力した数値を倍々するプログラム
-
For文の終了値を関数にしても問...
-
break文でループを一気に抜ける...
-
Delphiで・・・
-
if文の中にfor文なのか、for文...
-
for文while文の無限ループの違...
-
PIC のプログラムについて ど...
-
他言語で言うcontinue文
-
PAD図の書き方
-
C言語、whileループを抜け出す...
-
clock関数を利用した時間計測法...
おすすめ情報