専門学生です。コードについてなんですがわからなかったので質問させてください。
上から順にどんな動きをするのかを教えてください。特にに23行目のfor文のどんな動作を期待して実際にどう動くのかを知りたいです。
#include <stdio.h>
void main()
{
int a;
int b;
int sum;
int num;
for(a = 1; a < 10000; a++)
{
sum = 0;
num = 0;
for(b = 1; b < a; b++)
{
if(a % b == 0)
{
sum += b;
}
}
if(sum == a)
{
printf("%d", a);
for(b = 1; b < a; b++)
{
if(a % b == 0)
{
if(num != 0)
{
printf("+");
num = b;
printf("%d", num);
}
}
}
printf("\n");
}
}
}
自分自身以外の約数の総和が自分自身に等しくなる自然数を完全数と言う。例えば6の約数は1,2,3でその和は6となるので完全数である。10000以下の整数の中から、全ての完全数を探し出し表示するプログラムを作るというものです。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
23行目からのコードは完全数の約数を
××=××+××+・・・・+××
という形式で出力することなんだろうけど
バグってて動かないね。
if (num != 0)
のelse側の処理が無い。写し忘れ?
aの出力の後に何か区切りになるものを出力していないのも変。
最初のforは完全数の候補を列挙するためのもの
2番目forは候補の約数を探し、その合計値を計算する
為のもの。
約数の探し方が下手なんで、遅いでしょうね。
No.2
- 回答日時:
#include <stdio.h>
int main(void)
{
int a;
int b;
int sum;
int num;
for(a = 1; a < 10000; a++) /* 被除数を増やしていく */
{
sum = 0; /* 総和の初期化 */
num = 0;
for(b = 1; b < a; b++) /* 除数を増やしていくが被除数を超えない */
{
if(a % b == 0) /* 除数が約数になってるかチェック */
{
sum += b; /* 除数が約数なら総和に加算 */
}
}
if(sum == a) /* 完全数かチェック */
{
printf("%d", a); /* 完全数なら出力 */
for(b = 1; b < a; b++) /* 除数を増やしていくが被除数を超えない */
{
if(a % b == 0) /* 除数が約数になってるかチェック */
{
if(num != 0) /* numは一回も変更されてないので、これ以降は無意味な計算になってる。 */
{
printf("+");
num = b;
printf("%d", num);
}
}
}
printf("\n");
}
}
}
/* ここまで */
別な人も書いてましたが、23行〜34行目まではループを回してるだけで事実上「何もしてません」。numに関する操作がどこにも定義されてないから、ですね。ずーっとnumは0のままなので、何も実行されてないのです。
恐らく"+"とか書かれてるんで、1 + 2 + 3 = 6とか表示したかったのでは。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# プログラミング実行後の表示される値を答えよ #include<stdio.h> void main( 7 2022/05/20 00:07
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語プログラムが理解できなくて…
-
初心者です。for文、if文を使っ...
-
全角文字の判定
-
#if 1 #elseの意味について
-
構文エラー";"が型の前にあり...
-
scanf関数を用いての加減乗除%...
-
for文の中にswitch文はいれられ...
-
大学のプログラミングのニュー...
-
プログラム
-
C言語・最大値を算出するプロ...
-
直角三角形
-
VHDLで、case文とwhen文のどち...
-
C言語でのトランプシャッフルに...
-
C言語の二分法のプログラムにつ...
-
C言語 数字以外を入力させない...
-
階乗のプログラム!!
-
配列を関数に渡す方法
-
c言語for文
-
プログラミングで二番目に大き...
-
へんな現象
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
#if 1 #elseの意味について
-
for文の中にswitch文はいれられ...
-
C言語階乗の総和を求める
-
配列を使って魔方陣
-
C言語 数字以外を入力させない...
-
C言語プログラムが理解できなくて…
-
配列を関数に渡す方法
-
初心者です。for文、if文を使っ...
-
scanf関数を用いての加減乗除%...
-
c言語プログラミングで1から100...
-
while文について、c言語...
-
getcの改行判定
-
プログラミングで二番目に大き...
-
VHDLで、case文とwhen文のどち...
-
C言語で電卓を作成する。
-
C言語の二分法のプログラムにつ...
-
プログラミングに関して
-
階乗のプログラム!!
-
C言語についてですfor ifをつか...
おすすめ情報