70630


キーボードから正の整数Nを読み込み、1から100までのすべてのNの倍数とその個数を表示するプログラムを作りたいのですが、すべてのNの倍数の表示方法がわかりません。  
とりあえず第一段階として、Nの倍数の個数を表示するプログラムを作ることはできたので、それを下に示します。

[code]

    #include <stdio.h>
    
    int main(void)
    {
        int i,baisu;
        int kosu=0;
        printf("倍数は： "); scanf("%d",&baisu);
        for(i=1;i<=100;i++){
            if(i%baisu==0)kosu+=1;
        }
        printf("0以上100以下の%dの倍数の個数は%dです\n",baisu,kosu);
        return 0;
    }
    
[/code]

実行結果

[code]

    $ ./a.out
    倍数は：  4
    0以上100以下の4の倍数の個数は25です
    
[/code]

上記のプログラムに何を付け足したら、すべてのNの倍数が表示されるのでしょうか。ご回答よろしくお願いします。


CC BY-SA 4.0
2020-09-23T03:29:21.977
70617
2020-09-24T05:27:05.167
2020-09-23T08:56:16.293
19110
41837
question
c
Nのすべての倍数を表示したい


1～100の値のNの倍数ですから

[code]

    for(i=1;i<=100;i++){
    　　// ここでiとbaisuにより計算
    　　// それを表示する。
    }
    
[/code]

となると思います。


CC BY-SA 4.0
2020-09-23T03:55:43.643
70618
2020-09-23T03:55:43.643
24490
70617
answer


9月15日、[同じ質問](https://ja.stackoverflow.com/questions/70421/%e3%81%a9%e3%81%86%e3%81%97%e3%81%9f%e3%82%89%e3%81%84%e3%81%84%e3%81%ae%e3%81%8b%e3%82%8f%e3%81%8b%e3%82%8a%e3%81%be%e3%81%9b%e3%82%93/70423#70423)をしましたね。その質問と回答を見て、OPはC言語の初心者だと思い、詳しく説明するほうがいいと考えます。

すべてのNの倍数を表示するには、以下のコメント付き行を追加します。

[code]

    #include <stdio.h>
    
    int main(void)
    {
        int i,baisu;
        int kosu=0;
        printf("倍数は： "); scanf("%d",&baisu);
        for(i=1;i<=100;i++){
            if(i%baisu==0){
                printf("%d\n", i);    // この行を追加
                kosu+=1;
            }
        }
        printf("0以上100以下の%dの倍数の個数は%dです\n",baisu,kosu);
        return 0;
    }
    
[/code]

Nの倍数の個数をカウントするために、`i%baisu`の結果が0か0でないかをテストします。その結果が0の場合、`i`はNの倍数だと判断し、個数`kosu`をインクリメントしますね。その時、`i`を出力し、すべてのNの倍数が表示されます。


CC BY-SA 4.0
2020-09-23T12:01:21.390
70630
2020-09-23T12:01:21.390
41425
70617
answer


Nの倍数を計算するのを繰り返して倍数が101以上になったら終了するという考え方の別解です。  
正直なところ誤差ではあるのでしょうが、Nに入る数値次第でループ回数が減るのでたぶん経済的だと思います。

[code]

    #include <errno.h>
    #include <limits.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    long int StrToL(const char *const sourceStr);
    
    int main(void) {
      enum { bufSize = 8 };
      char buf[bufSize] = "";
      fprintf(stderr, "%s", "正の整数を入力してください: ");
      fgets(buf, bufSize, stdin);
      buf[strcspn(buf, "\n")] = 0; // chomp
      long int base = StrToL(buf);
    
      if (base < 1) {
        fprintf(stderr, "% ld %s\n", base, "は正の整数ではありません。");
        return EXIT_FAILURE;
      } else {
        fprintf(stderr, "%ld %s", base, "の1から100までの倍数は");
      }
    
      int count = 0;
      if (base < 101) {
        while (base * ++count < 101) {
          fprintf(stderr, "% ld", base * count);
        }
        --count;
      }
      fprintf(stderr, "%s%d%s\n", (count > 0) ? " の" : "", count, "個です。");
    
      return EXIT_SUCCESS;
    }
    
    long int StrToL(const char *const sourceStr) {
      char *unsafeChar;
      errno = 0;
      enum { OCTAL = 8, DECIMAL = 10, HEXA = 16 };
      const long number = strtol(sourceStr, &unsafeChar, DECIMAL);
    
      if (unsafeChar == sourceStr) {
        fprintf(stderr, "%s: not a decimal number\n", sourceStr);
      } else if ('\0' != *unsafeChar) {
        fprintf(stderr, "%s: extra characters at end of input: %s\n", sourceStr,
                unsafeChar);
      } else if ((LONG_MIN == number || LONG_MAX == number) && ERANGE == errno) {
        fprintf(stderr, "%s out of range of type long\n", sourceStr);
      } else if (number > INT_MAX) {
        fprintf(stderr, "%ld greater than INT_MAX\n", number);
      } else if (number < INT_MIN) {
        fprintf(stderr, "%ld less thatn INT_MIN\n", number);
      }
    
      return number;
    }
    
[/code]


CC BY-SA 4.0
2020-09-24T05:27:05.167
70660
2020-09-24T05:27:05.167
25936
70617
answer