
C言語で整数の約数をすべて表示するプログラムを作りました。
このプログラムの場合、自然数のみ対応し、負の値を入力しても計算されません。
この問いは、このプログラムでも正しいのでしょうか?
それとも負の値を入力しても約数が表示されるようにしなければならないのでしょうか?
その場合どのように直せばよろしいのでしょうか?
ご指導、よろしくお願いします。
#include <stdio.h>
int main()
{
int i;
int n;
printf("整数を入力してください = ");
scanf("%d",&n);
printf("%dの約数は ", n);
for( i=1; i<=n; ++i ){
if( n%i == 0 )
printf("%d ", i);
}
printf("です。\n");
return 0;
}
No.4
- 回答日時:
やかましいことをいうと 整数 n に対して
n=ab となる整数a、bが約数なので
約数にも正負が有ります。
またn=0の時は n=0・a(aは任意の整数)
なので0を含む全ての整数が約数です。
でも、実用としては n、a、b>0 で充分なので
仕様を確認すべきでしょう。
それと効率の話ですが
約数は√(n)まで調べれば充分。√(n)より大きい約数は
√(n)より小さい約数でnを割れば求まります。
計算量が激減します。

No.2
- 回答日時:
これは授業の演習課題か何かですかね?
>それとも負の値を入力しても約数が表示されるようにしなければならないのでしょうか?
課題を出した側に確認した方がいいです。
言葉通りに、入力した整数の約数全てを出力しろ、という課題なら、負の約数も対象になりますが、
意図的に出題側がそうしたいのではなく、説明足りてないだけの可能性が高いです。
また、入力する整数の範囲の下限、上限もどこまで必要か確認した方が良いでしょう。
int型が扱える下限値、上限値が出題者の上限を超える場合は別の型を使ったり、
工夫が必要になります。
>この問いは、このプログラムでも正しいのでしょうか?
上記の確認の結果次第ですが、入力された値のチェックをした方が良いでしょう。
例えば、開発環境にもよりますが、int型が扱える上限が2147483647の場合に、
nに2147483647を入力してしまうと、上記プログラムは異常になります。
for文ループの最後に、iがnと等しくなった後に、++iをして時に、
iがint型が扱える最大値を超えてしまうからです。
入力した数値自身が約数であることは自明なので、イコールを消して、
for(i=1;i<n;i++)として、
for文の終わった後に、printf("%d",n);を追加するとしても良いかもしれません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
数字以外が入力されたらエラー...
-
java初心者です。入力されたの...
-
*をユーザーが入力した数字の数...
-
C言語でつるかめ算をするにはど...
-
正負を反転させて出力するプロ...
-
Eclipseコンソール表示を、リセ...
-
プログラミング初心者です。 Py...
-
if文で困っています。
-
UWSCで変数をキー入力
-
scanfが2回使えない・・・?;
-
Excel VBAで、Application.Inpu...
-
batプログラム上で文字列を入力...
-
scanfについて
-
scanfの入力をgets関数で読み捨...
-
C言語におけるfgetsを用いたル...
-
Userformの入力順序をタブオー...
-
if文の条件にscanf関数を使うと…?
-
cout関数を使っているのですが...
-
入力値が1以下、かつ数字以外の...
-
C言語の勉強しています。すみま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
数字以外が入力されたらエラー...
-
*をユーザーが入力した数字の数...
-
java初心者です。入力されたの...
-
正負を反転させて出力するプロ...
-
Eclipseコンソール表示を、リセ...
-
scanfが2回使えない・・・?;
-
プログラミング初心者です。 Py...
-
C言語でgetchar();が上手く使え...
-
Excel VBAで、Application.Inpu...
-
電卓の小数点
-
cout関数を使っているのですが...
-
"scanf"でエンターで改行させな...
-
小数か整数かを判定する方法
-
至急教えてください!プログラ...
-
getchar()について 教えてくだ...
-
scanf が無視されます
-
batプログラム上で文字列を入力...
-
コマンドプロンプトからのEOFの...
-
IF文で戻ることはできますか?...
-
プログラミングの問題です 「金...
おすすめ情報