はじめての C

min 以上で n の最小の倍数を計算する
プログラムを作成せよ。

  1. /* mini */
  2. #include
  3. main()
  4. {
  5. int n, min, x;
  6. x = 0;
  7. printf("min 以上で最小の\n");
  8. printf("n の倍数を\n");
  9. printf("算出します。\n\n");
  10. printf("n の数を入力してください n = ");
  11. scanf("%d", &n);
  12. printf("min の数を入力してください min = ");
  13. scanf("%d", &min);
  14. if ( min > (min/n) * n ) {
  15. x = (min/n) * n + n;
  16. } else {
  17. x = min;
  18. }
  19. printf("\n");
  20. printf("%d 以上で最小の\n", min);
  21. printf("%d の倍数は\n", n);
  22. printf("%d ですネ。\n", x);
  23. }

min 以上 max 未満の n の倍数の和を計算する
プログラムを作成せよ。

まず for文を組み立て直してみる。

  • 初期化 : 初期値を min に
  • 継続条件 : 値が max になるまで
  • 増分処理 : 値に n を加えていく

↓こんな感じで

  1. for ( i = min ; i < max ; i = i + n ) {
  2. x = x + i; /* x が n の倍数になる */
  3. }

変数は下の5つ

  • n : もとの数
  • min : 最小の数
  • max : 最大の数
  • i : くりかえす回数
  • x : n の倍数
  1. /* max */
  2. #include
  3. main()
  4. {
  5. int n, min, max, i, x;
  6. x = 0;
  7. printf("これから min 以上 max 未満の\n");
  8. printf("すべての n の倍数の和を\n");
  9. printf("計算します。\n\n");
  10. printf("最初に n の数を入力してください n = ");
  11. scanf("%d", &n);
  12. printf("つぎに min の数を入力してください min = ");
  13. scanf("%d", &min);
  14. printf("最後に max の数を入力してください max = ");
  15. scanf("%d", &max);
  16. if ( min > (min/n) * n ) {
  17. min = (min/n) * n + n;
  18. }
  19. for ( i = min ; i < max ; i += n ) {
  20. x += i;
  21. }
  22. printf("\n");
  23. printf("%d 以上 %d 未満の\n", min, max);
  24. printf("すべての %d の倍数の和は\n", n);
  25. printf("%d になります。\n\n", x);
  26. printf("(min は %d の倍数に直しました、不悪)\n", n);
  27. }

for文で 初期化と増分処理をいじる ということは まったく思いつかなかった。こんなことが できるのか ...

プログラム baisuu もこの方法で書きかえると、
変数は下の4つ

  • n : もとの数
  • max : 最大の数
  • i : くりかえす回数
  • x : n の倍数
  1. /* baisuu.2 */
  2. #include
  3. main()
  4. {
  5. int n, max, i, x;
  6. x = 0;
  7. printf("これから 1 以上 max 未満の\n");
  8. printf("すべての n の倍数の和を\n");
  9. printf("計算します。\n\n");
  10. printf("n の数を入力してください n = ");
  11. scanf("%d", &n);
  12. printf("max の数を入力してください max = ");
  13. scanf("%d", &max);
  14. for ( i = 0 ; i < max ; i = i + n ) {
  15. x = x + i ;
  16. }
  17. printf(\n");
  18. printf("1 以上 %d 未満の\n", max);
  19. printf("すべての %d の倍数の和は\n", n);
  20. printf("%d になります。\n", x);
  21. }

text: 金山典世さん(稚内北星)のページ