@h_munemasa さん,もしかしたら
yがマイナスになった場合に終了
とのことですが,条件がy>0
なので正しくは「0以下になったら終了」ではないでしょうか.
そして整数演算で2で割り続けるので32回以内に0になると思いました.
2Like
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
ここに問題・エラーに対して試したことを記載してください。
@h_munemasa さん,もしかしたら
yがマイナスになった場合に終了
とのことですが,条件がy>0
なので正しくは「0以下になったら終了」ではないでしょうか.
そして整数演算で2で割り続けるので32回以内に0になると思いました.
@PondVillege さん
ご指摘ありがとうございました。
おっしゃるの通りのようです。
出力例の部分のf4(3,5)は<15>です
の部分を見落としており、
無限ループにより表示されていないものだと思いこんでいました。
誤った回答については削除させていただきました。
多分,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;
}
@hcictory
Questioner