hcictory
@hcictory (吉 dora)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

printf 文の表示について

解決したいこと

printf文が下記プログラムで実行されない問題について。
例)
とある課題中に発生した問題です。
f1,f2,f3では問題なく表示できたのですが、f4だけ表示できませんでした。
なぜ表示されないのかわかる方いましたら教えていただきたいです。


int f4 (int x,int y)
{
    int r;
    for (r=0; y>0; y=y/2)
    {if (y%2 ==1){
        r=r+x;count1++;

    }
        count2++

       x=x*2;



    }

    printf("%d回\n",count1++);
    printf("%d回\n",count2++);
    return r;
}

例)


f1(3,5)は<15>です
f2(3,5)は<8>です
f3(3,5)は<15>です
f4(3,5)は<15>です
Program ended with exit code: 0

または、問題・エラーが起きている画像をここにドラッグアンドドロップ

該当するソースコード

#include <stdio.h>
int count1=0,count2=0;
int f1(int ,int);
int f2(int ,int);
int f3(int ,int);
int f4(int ,int);


int main(int argc, const char * argv[]) {
    int r1,r2,r3,r4;
    r1=f1(3, 5);
    r2=f2(3, 5);
    r3=f3(3,5);
    r4=f3(3,5);
    printf("f1(3,5)は<%d>です\n",r1);
    printf("f2(3,5)は<%d>です\n",r2);
    printf("f3(3,5)は<%d>です\n",r3);
    printf("f4(3,5)は<%d>です\n",r4);

    return 0;
}
int f1(int x ,int y)
{
    int r;

    for (r=0; y>0; y--) {


        r=r+x;
    }
    return r;
}
int f2 (int x,int y)
{
    int r;
    for (r=x; y>0; y--)
    {
        r++;


    }
    return r;
}
int f3 (int x,int y)
{
    int r;
    for (r=0; y>0; y--)
    {

    r=f2(r,x);

}


    return r;
}
int f4 (int x,int y)
{
    int r;
    for (r=0; y>0; y=y/2)
    {if (y%2 ==1){
        r=r+x;count1++;

    }
        count2++;
       x=x*2;



    }

    printf("%d回\n",count1++);
    printf("%d回\n",count2++);
    return r;
}


例)

def greet
  puts Hello World
end

自分で試したこと

ここに問題・エラーに対して試したことを記載してください。

0

3Answer

@h_munemasa さん,もしかしたら

yがマイナスになった場合に終了

とのことですが,条件がy>0なので正しくは「0以下になったら終了」ではないでしょうか.
そして整数演算で2で割り続けるので32回以内に0になると思いました.

2Like

@PondVillege さん

ご指摘ありがとうございました。
おっしゃるの通りのようです。

出力例の部分のf4(3,5)は<15>ですの部分を見落としており、
無限ループにより表示されていないものだと思いこんでいました。

誤った回答については削除させていただきました。

2Like

多分,main関数の中で,r4 = f4(3, 5)とするべき場所でr4 = f3(3, 5)としているからではないでしょうか.

int main(int argc, const char * argv[]) {
    int r1,r2,r3,r4;
    r1=f1(3, 5);
    r2=f2(3, 5);
    r3=f3(3,5);
-   r4=f3(3,5);
+   r4=f4(3,5);
    printf("f1(3,5)は<%d>です\n",r1);
    printf("f2(3,5)は<%d>です\n",r2);
    printf("f3(3,5)は<%d>です\n",r3);
    printf("f4(3,5)は<%d>です\n",r4);

    return 0;
}
1Like

Comments

  1. @hcictory

    Questioner

    返信ありがとうございます。
    無事任意の結果にたどり着くことができました!
  2. おめでとうございます.この質問をクローズにしていただければ終わりになります.お疲れ様でした.

Your answer might help someone💌