課題はこちら
コンパイルできないファイルを提出しないように、再確認すること。
インデンテーションに注意すること。 (プログラミングⅡでのインデンテーションの約束事)
変数名に注意すること。この問題の場合sum(和)や
fact(階乗)などという名前の変数を使うことは望ましくない。
この問題の場合、aやxなど、特に意味のない変数名でよい。
(なお、iやjはint型の変数名に使うという慣習がある。)
ループの条件式が微妙に間違っている解答がいくつかある。 自信がない時は微妙な場合(nの値が 1, 63, 511の時など)で確認しておくこと。
このような問題の場合、do〜while文ではなくて、for文またはwhile文を使うべきである。 (条件に厳密に従うと、 nが1のときは、数列をひとつも出力せずに終了しなければならない。)
#include <stdio.h> int main(void) { int i, a=1, n; printf("nを入力して下さい: "); scanf("%d", &n); for(i=0; a<n; i++) { printf("a_%d = %d\n", i, a); a = 2 * a + 1; } return 0; }
非負の整数 nをキーボードから読み込み
a0 | = | 2, | |||
ai | = | 2 × ai-1 - 1 | (i ≥ 1) |
実行例 1:
nを入力して下さい: 100 a_0 = 2 a_1 = 3 a_2 = 5 a_3 = 9 a_4 = 17 a_5 = 33 a_6 = 65実行例 2:
nを入力して下さい: 1000 a_0 = 2 a_1 = 3 a_2 = 5 a_3 = 9 a_4 = 17 a_5 = 33 a_6 = 65 a_7 = 129 a_8 = 257 a_9 = 513