質問: C言語で、キーボードから正の整数Nをよみ込み、1から100までの整数のうちすべてのNの倍数の数字とその個数を求めるプログラムを作りたいのですが、どうしたらいいのか全くわかりませんでした。 なので最初に(第一段階として)、Nの倍数の個数を求められるためのプログラムを作成しました。 ``` #include 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; } ``` しかし、これではNの倍数の個数すら求めることができませんでした。 C言語に関しては、とりあえず本は読んでみたものの、やり始めたばかりなので、何をどうしたらいいのか、またはどこをどのように聞けばいいのか(適切な質問の仕方)もわからないので、かなり愚かな質問になっているかもしれません。 C言語に関して、基礎からしっかりと学習できる良い本があればおしえていただけるとありがたいです。
回答: 勉強の方法や参考書については、スタック・オーバーフローの質問としては、なじまないので措いておくとして、提示のプログラムが動かない原因は、`baisu`の値を入力する前に使っているからです。 プログラムは基本的には上から順番に実行されます。提示のプログラムは、`for`文で倍数の個数を求める処理をした後に、`scanf`で何の倍数を求めるかを入力しています。つまり順番が逆です。直し方は`printf("倍数は: "); scanf("%d",&baisu);`を`for`文の前に持っていけばいいだけです。 ``` #include 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; } ``` とりあえずは、コンピュータになったつもりで、プログラムがどんな風に動作するか追っていきましょう。