無題
Re:無題
こんばんは。
う~ん、学校の課題でしょうか?
とりあえず自分でやってみて、
「このようにやってみたのですが、こんなエラーが出て上手くいかないのですがどうしたらいいのでしょう」
って感じで質問すると答えるほうも心証が良いかもしれませんね。
利用規約の中にあるとおり、学校の課題なのかどうかとか、どのくらいのCの知識があるのかを
明記していただければ、答えるほうも答えやすいですね。
ってすいません、最初から説教じみてしまい…
大まかな流れとしては、
1.変数wを宣言し、初期値を入れておく。
2.キーボードから入力した値を変数nに格納する。
3.繰り返し構文の中で、wと「nを1ずつ減らしていった値」の割り算の余りを求める。
4.その余りが0ならば、割り切れる数として表示する。
って感じでしょうか。
このようにすれば大体できると思います。
う~ん、学校の課題でしょうか?
とりあえず自分でやってみて、
「このようにやってみたのですが、こんなエラーが出て上手くいかないのですがどうしたらいいのでしょう」
って感じで質問すると答えるほうも心証が良いかもしれませんね。
利用規約の中にあるとおり、学校の課題なのかどうかとか、どのくらいのCの知識があるのかを
明記していただければ、答えるほうも答えやすいですね。
ってすいません、最初から説教じみてしまい…
大まかな流れとしては、
1.変数wを宣言し、初期値を入れておく。
2.キーボードから入力した値を変数nに格納する。
3.繰り返し構文の中で、wと「nを1ずつ減らしていった値」の割り算の余りを求める。
4.その余りが0ならば、割り切れる数として表示する。
って感じでしょうか。
このようにすれば大体できると思います。
すいませんでした
これは学校の課題です
それでですね
#include <stdio.h>
main()
{
int a,i,n,w;
printf("nを入力してください\n");
scanf("%d",&n);
scanf("%d",&w);
if(n>=2&&n<=20){
}
else{
printf("error!");
}
for(i=n;n>=2&&n<=20;n--){
a=w%n;
}
if(a==0){
printf("w%n=%d\n",a);
}
return 0;
}
ここまで作ってみたんですがエラーが出てしまいます。
アドバイスの方をお願いします。
それでですね
#include <stdio.h>
main()
{
int a,i,n,w;
printf("nを入力してください\n");
scanf("%d",&n);
scanf("%d",&w);
if(n>=2&&n<=20){
}
else{
printf("error!");
}
for(i=n;n>=2&&n<=20;n--){
a=w%n;
}
if(a==0){
printf("w%n=%d\n",a);
}
return 0;
}
ここまで作ってみたんですがエラーが出てしまいます。
アドバイスの方をお願いします。
Re:すいませんでした
う~ん、コードを貼る時はpreタグでコード部分を囲ったほうが見やすいですね。利用規約のとおりです。
まぁ、この掲示板に初めて来た人なら見落とすこともあるでしょう…次回があればお気をつけください。
まず、メイン関数の最初
int main()
の「int」が抜けてますね。
最初のif文の
if(n>=2 && n<=20)
ですが、ここではキーボードから入力された値が、適正な範囲にあるかどうかを判別したいのですよね。
値が適正な範囲にない場合だけ"error!"を表示すればいいのですから、
このif文は「nが適正な範囲にない」ことを検出するようにしたほうが良いでしょう。
そうすれば、else文を用いなくても、値の範囲が正しければ次の処理に移ることができます。
あと、もし値が適正な範囲にない場合は、"error!"を表示した後にプログラムを終了させるなどの処理をしてはいかがでしょう。
次のfor文ですが、カウンタiの値の範囲が妙なことになってますね。
一応、処理がこのfor文にたどり着くということはnの値が適正な範囲にあるとわかったわけですから、
&&n<=20
は要りません。
このfor文の中で、wと「nを1ずつ減らしていった値」の割り算の余りを求めるといいでしょう。
貼っていただいたコードを見ると、まずw%nの値をaにいったん格納し、
その後aの値が0かどうか判断しているようですね。
これでもいいのですが、w%nの値を直接if文で判別に用いても大丈夫です。
最後のif文の中なのですが、
if(a==0)
printf("w%n=%d\n",a);
これですと、表示されるaの値は0だけになってしまいますが、よろしいのでしょうか?
このif文の中に来るということはa==0が成り立っているのですから、当然表示されるaの値は0です。
いろいろ試行錯誤をしてがんばってみてください、
プログラミングの上達には、失敗が欠かせません。
まぁ、この掲示板に初めて来た人なら見落とすこともあるでしょう…次回があればお気をつけください。
まず、メイン関数の最初
int main()
の「int」が抜けてますね。
最初のif文の
if(n>=2 && n<=20)
ですが、ここではキーボードから入力された値が、適正な範囲にあるかどうかを判別したいのですよね。
値が適正な範囲にない場合だけ"error!"を表示すればいいのですから、
このif文は「nが適正な範囲にない」ことを検出するようにしたほうが良いでしょう。
そうすれば、else文を用いなくても、値の範囲が正しければ次の処理に移ることができます。
あと、もし値が適正な範囲にない場合は、"error!"を表示した後にプログラムを終了させるなどの処理をしてはいかがでしょう。
次のfor文ですが、カウンタiの値の範囲が妙なことになってますね。
一応、処理がこのfor文にたどり着くということはnの値が適正な範囲にあるとわかったわけですから、
&&n<=20
は要りません。
このfor文の中で、wと「nを1ずつ減らしていった値」の割り算の余りを求めるといいでしょう。
貼っていただいたコードを見ると、まずw%nの値をaにいったん格納し、
その後aの値が0かどうか判断しているようですね。
これでもいいのですが、w%nの値を直接if文で判別に用いても大丈夫です。
最後のif文の中なのですが、
if(a==0)
printf("w%n=%d\n",a);
これですと、表示されるaの値は0だけになってしまいますが、よろしいのでしょうか?
このif文の中に来るということはa==0が成り立っているのですから、当然表示されるaの値は0です。
いろいろ試行錯誤をしてがんばってみてください、
プログラミングの上達には、失敗が欠かせません。
Re:無題
がんばってますね~、その調子です。
「nの値から始めて、nを1ずつ減じながら、n=1になるまで繰り返す」という処理は、
for(i=n ; 1<i ; i--)
{
//ここに繰り返したい処理を書く
}
こんなfor文になります。
「wを割り切るiの値を表示する」には、
まず「iがwを割り切るかどうか」を判定しなければいけません。
iがwを割り切るかどうかは、wからiを割った余りが0になるかどうかである事はわかりますね?
つまりif文で、w÷iの余りが0になるかどうかを判別すればいいわけです。
具体的に書くと、
if(w%i==0)
ですね。
この式が成り立つときにiの値を表示すればいいので、
このif文の中にprintfでiを表示させるとよいでしょう。
このif文をさっきのfor文の{}の中で繰り返せばいいので、
「nの値から始めて、nを1ずつ減じながら、n=1になるまで繰り返す」という処理は、
for(i=n ; 1<i ; i--)
{
//ここに繰り返したい処理を書く
}
こんなfor文になります。
「wを割り切るiの値を表示する」には、
まず「iがwを割り切るかどうか」を判定しなければいけません。
iがwを割り切るかどうかは、wからiを割った余りが0になるかどうかである事はわかりますね?
つまりif文で、w÷iの余りが0になるかどうかを判別すればいいわけです。
具体的に書くと、
if(w%i==0)
ですね。
この式が成り立つときにiの値を表示すればいいので、
このif文の中にprintfでiを表示させるとよいでしょう。
このif文をさっきのfor文の{}の中で繰り返せばいいので、
for(i=n ; 1<i ; i--) { if(w%i==0) printf("w=%d を割り切る値は %d\n",w,i); }とでもすると良いでしょう。