70423


C言語で、キーボードから正の整数Nをよみ込み、１から１００までの整数のうちすべてのNの倍数の数字とその個数を求めるプログラムを作りたいのですが、どうしたらいいのか全くわかりませんでした。

なので最初に（第一段階として）、Nの倍数の個数を求められるためのプログラムを作成しました。

[code]

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

しかし、これではNの倍数の個数すら求めることができませんでした。

C言語に関しては、とりあえず本は読んでみたものの、やり始めたばかりなので、何をどうしたらいいのか、またはどこをどのように聞けばいいのか（適切な質問の仕方）もわからないので、かなり愚かな質問になっているかもしれません。  
C言語に関して、基礎からしっかりと学習できる良い本があればおしえていただけるとありがたいです。


CC BY-SA 4.0
2020-09-15T17:33:55.127
70421
2020-09-15T18:39:47.883
2020-09-15T18:13:20.717
3605
41837
question
c
どうしたらいいのかわかりません。


勉強の方法や参考書については、スタック・オーバーフローの質問としては、なじまないので措いておくとして、提示のプログラムが動かない原因は、`baisu`の値を入力する前に使っているからです。

プログラムは基本的には上から順番に実行されます。提示のプログラムは、`for`文で倍数の個数を求める処理をした後に、`scanf`で何の倍数を求めるかを入力しています。つまり順番が逆です。直し方は`printf("倍数は：
"); scanf("%d",&baisu);`を`for`文の前に持っていけばいいだけです。

[code]

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

とりあえずは、コンピュータになったつもりで、プログラムがどんな風に動作するか追っていきましょう。


CC BY-SA 4.0
2020-09-15T18:38:09.033
70422
2020-09-15T18:38:09.033
3605
70421
answer


質問内容から間違っている点を指摘するよりも、ソースコードのどの部分が意図通りに動いていないかを調べる方法を提示するほうが良いと思ったのでそうします。

原始的なデバッグ方法ですが、printf()を入れていって意図通りになってないところを探すという方法があります。  
提示ソースコードに2行printf()を追加してみました。気になるところがあれば他の変数をprintf()で確認しても良いです。  
表示結果をみて修正箇所がわかったけれども修正方法が分からない場合、質問を編集するかまた回答にコメントをしてください。

[code]

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


CC BY-SA 4.0
2020-09-15T18:39:47.883
70423
2020-09-15T18:39:47.883
30745
70421
answer