約数を求める問題について
約数を求める問題について
はじめまして、高校2年生です 授業でだされた 「1から1000までの間の3の約数を求めるプログラムを作成せよ」t歩い問題で 1と3 が答えとして出てくればいいというのはわかったのですが、処理をどうやって書いていいかわかりません 教えていただけませんでしょうか
Re:学校の課題について
3÷nの計算を行い、余りが0の数値を表示すればいいというところまでは分かりますね?
ここまで分かれば、nが1~1000の間だけ処理を繰り返せばいい訳ですが、このやり方が分からないという事でしょうか?
まず、nが1~1000の間だけ繰り返す処理ですが、ループのやり方は習ってますか?while文や、for文と呼ばれているやつを使用するのが一般的だと思うのですが、こういう課題が出ているくらいですから、習っているものとして話をすすめますので、分からなければ質問してください。
今回は1~1000の間だけ繰り返すという処理ですから、for文の方が理解しやすいかと思いますので、こちらを利用します。
int n;
for( n = 1 ; n <= 1000 ; n++ )
{
}
こんな風に使います。始めに変数nに1を代入して、nが1000以下の間だけループを続けて、ループを1周する毎にnの数値に1を足しなさいという意味です。つまり、nが1から始まって、1001になった時点でループが終了する訳です。
次に肝心の計算部分ですが、3÷nの計算をした余りを求める式というのは…
int val;
val = 3 % n;
こんな感じに表記します。今回の課題の場合は、約数を求めるという事ですから、余りが0の時だけ画面に表示すればいいので、valが0の時だけnを表示するという条件分岐を行う必要があります。これを実現させるにはif文を利用します。
if( val == 0 )
{
printf( "%d" , n );
}
こんな感じですね。
あとは前記のループと計算部分を組み合わせるだけです。ほぼ回答のようになってしまいましたが、ここから先は自分で何とかしてみてください。その方が理解度が高くなるはずですしね。
もし、どうしても分からなければ、何が分からなかったかを書き込みしていただければ、できる限りお答えしますので、頑張ってみてください(^-^)
ここまで分かれば、nが1~1000の間だけ処理を繰り返せばいい訳ですが、このやり方が分からないという事でしょうか?
まず、nが1~1000の間だけ繰り返す処理ですが、ループのやり方は習ってますか?while文や、for文と呼ばれているやつを使用するのが一般的だと思うのですが、こういう課題が出ているくらいですから、習っているものとして話をすすめますので、分からなければ質問してください。
今回は1~1000の間だけ繰り返すという処理ですから、for文の方が理解しやすいかと思いますので、こちらを利用します。
int n;
for( n = 1 ; n <= 1000 ; n++ )
{
}
こんな風に使います。始めに変数nに1を代入して、nが1000以下の間だけループを続けて、ループを1周する毎にnの数値に1を足しなさいという意味です。つまり、nが1から始まって、1001になった時点でループが終了する訳です。
次に肝心の計算部分ですが、3÷nの計算をした余りを求める式というのは…
int val;
val = 3 % n;
こんな感じに表記します。今回の課題の場合は、約数を求めるという事ですから、余りが0の時だけ画面に表示すればいいので、valが0の時だけnを表示するという条件分岐を行う必要があります。これを実現させるにはif文を利用します。
if( val == 0 )
{
printf( "%d" , n );
}
こんな感じですね。
あとは前記のループと計算部分を組み合わせるだけです。ほぼ回答のようになってしまいましたが、ここから先は自分で何とかしてみてください。その方が理解度が高くなるはずですしね。
もし、どうしても分からなければ、何が分からなかったかを書き込みしていただければ、できる限りお答えしますので、頑張ってみてください(^-^)
Re:学校の課題について
約数で合っているのですか…。
そうすると、「1000までの数」は、
実は3以上なら何でもよくなります。
1000でなければならない理由がないですね。
倍数ならば、上限の数によって出力結果が変わりますので、
「~まで」には十分に意味がありますが…。
そうすると、「1000までの数」は、
実は3以上なら何でもよくなります。
1000でなければならない理由がないですね。
倍数ならば、上限の数によって出力結果が変わりますので、
「~まで」には十分に意味がありますが…。
Re:学校の課題について
boxさんへ
同じように先生に「出てくるのは 1と3なので1000まで繰り返す必要ないんじゃないんですか」とお聞きしたところ、「ちょつとした引っ掛け問題だよ、とにかくめんどくさくても1000の値までの処理を繰り返し、その間の約数として 1と3がでてくればいいだけだよ」 といわれたのですが、 現在よくわからず混乱しています
同じように先生に「出てくるのは 1と3なので1000まで繰り返す必要ないんじゃないんですか」とお聞きしたところ、「ちょつとした引っ掛け問題だよ、とにかくめんどくさくても1000の値までの処理を繰り返し、その間の約数として 1と3がでてくればいいだけだよ」 といわれたのですが、 現在よくわからず混乱しています
Re:学校の課題について
#include <stdio.h>
int n, val;
val = 3 % n;
for( n = 1 ; n <= 1000 ; n++ )
if( val == 0 )
printf( "%d" , n );
}
return 0
}
アドバイスを参考に自分で作ってみたのですが、こんな感じになったのですが大丈夫でしょうか 違っているところなど ご指摘よろしくおねがいします
int n, val;
val = 3 % n;
for( n = 1 ; n <= 1000 ; n++ )
if( val == 0 )
printf( "%d" , n );
}
return 0
}
アドバイスを参考に自分で作ってみたのですが、こんな感じになったのですが大丈夫でしょうか 違っているところなど ご指摘よろしくおねがいします
Re:学校の課題について
1:main関数が無い
2:値が割り当てられてないnを使っている
3:}の数がおかしい
4:return 0の後ろに;がない
5:valを計算している場所がおかしい
以上の不具合を考慮したサンプルです。
2:値が割り当てられてないnを使っている
3:}の数がおかしい
4:return 0の後ろに;がない
5:valを計算している場所がおかしい
以上の不具合を考慮したサンプルです。
#include <stdio.h> int main() { int n, val; for( n = 1 ; n <= 1000 ; n++ ) { val = 3 % n; if( val == 0 ) printf( "%dn" , n ); } return 0; }
Re:学校の課題について
高校生さん、
解決されましたか?
先生の回答からして、keichanさんの推測どおりとしか考えられません・・。
無駄な計算をかなりするようですが、
バグさんの回答が最適だと思います。
お書きになったプログラムですが、
#include <stdio.h>
ここ、int main(){
とかかないとダメです。どんなプログラムでも、必ずmain関数が必要です。
途中でプログラムかいてて消してしまっただけなんでしょうか?
int n, val;
val = 3 % n;
これでは、ループの中で計算ができません。
1000まで計算したいのならループの中で計算しましょう。
for( n = 1 ; n <= 1000 ; n++ )
ここには括弧のはじまりがひつようです。
if( val == 0 )
printf( "%d" , n );
printfは改行コードをかかないと次表示する値と連続してしまい、わからなくなってしまいます。
}
return 0
}
解決されましたか?
先生の回答からして、keichanさんの推測どおりとしか考えられません・・。
無駄な計算をかなりするようですが、
バグさんの回答が最適だと思います。
お書きになったプログラムですが、
#include <stdio.h>
ここ、int main(){
とかかないとダメです。どんなプログラムでも、必ずmain関数が必要です。
途中でプログラムかいてて消してしまっただけなんでしょうか?
int n, val;
val = 3 % n;
これでは、ループの中で計算ができません。
1000まで計算したいのならループの中で計算しましょう。
for( n = 1 ; n <= 1000 ; n++ )
ここには括弧のはじまりがひつようです。
if( val == 0 )
printf( "%d" , n );
printfは改行コードをかかないと次表示する値と連続してしまい、わからなくなってしまいます。
}
return 0
}