作りたいプログラムは、
コード:
a が 1 でない間繰り返す
a が奇数の場合
3を掛けて 1を足したものを a に代入
a が偶数の場合、
2で割って a に代入
ところが、元のプログラムの if(a%2==0){ の a は
最初の if(a%2==1){ の a と同じものではありません。
a=a*3+1; で変更された結果の a である場合があります。
つまり、
コード:
a が奇数の場合
3を掛けて 1を足したものを a に代入し、それを 2で割って a に代入
となっています。
正しくするには、次のように else を使わないといけません。
コード:
if (a % 2 == 1) {
a = a * 3 + 1;
printf("%d\n", a);
}
else { // else if (a % 2 == 0) { と書いても同じだが無駄
a = a / 2;
printf("%d\n", a);
}