ページ 11

forやifを使った問題

投稿記事Posted: 2017年10月10日(火) 11:02
by krgpsrrr
問題
整数a.bを入力すると100以下のaとbの公倍数を全て書き出し、その個数を教えてくれるプログラムを作成しなさい。
ただし、公倍数がひとつもない場合は"ありません"と表示させること。


整数を2つ入力せよ・・・>8 12
100以下の8と12の公倍数は
24 48 72 96
の4個です。

この問題なのですが、公倍数がない場合は出力できたのですが、ある場合にエラーがでてしまい、きっかけも掴めないためどうしようもないです。
先日forについて学んだばかりなので理解できてないのが要因だと思われます。教えていただきたいです。

Re: forやifを使った問題

投稿記事Posted: 2017年10月10日(火) 11:42
by かずま
krgpsrrr さんが書きました:この問題なのですが、公倍数がない場合は出力できたのですが、ある場合にエラーがでてしまい、きっかけも掴めないためどうしようもないです。

きっかけを掴むために、公倍数がない場合に出力できた
というプログラムを、フォーラムルールにあるように
code タグを使って貼り付けてください。

Re: forやifを使った問題

投稿記事Posted: 2017年10月10日(火) 12:01
by krgpsrrrr
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<stdio.h>
main()
{
 int a, b,i, sum = 0;
 printf("整数a,bを入力せよ・・・>");
 scanf_s("%d%d", &a, &b);
 printf("100以下の%dと%dの公倍数は\n", a, b);
 for (i = a; i <= 100; i++)
 {
  if (i%a == 0 && i%b == 0)
  {
   sum++;
   printf("%d\t", i);
  }
 }
 if (0 < sum )
 {
  printf("%d\t\nの%d個です。\n", i, sum);
 }
 else
  {
   printf("ありません\n", a, b);
  }
 
}

Re: forやifを使った問題

投稿記事Posted: 2017年10月10日(火) 12:02
by krgpsrrr
初めてなため、ルールがよくわかってませんでした。あと一歩で完成できそうですがまだダメな部分がありそうです。よろしくお願いします。

Re: forやifを使った問題

投稿記事Posted: 2017年10月10日(火) 15:38
by かずま
そのプログラムを実行すると、実行結果は
コード[Text]: 全て選択
1
2
3
4
整数a,bを入力せよ・・・>8 12
100以下の8と12の公倍数は
24  48  72  96  101
の4個です。

余計な 101 が出ているだけですから、
 printf("%d\t\nの%d個です。\n", i, sum);

 printf("\nの%d個です。\n", sum);
に変えるだけで完成だと思うんですが。

Re: forやifを使った問題

投稿記事Posted: 2017年10月10日(火) 16:09
by かずま
些細なことですが、printf("ありません\n", a, b); は、
「, a, b」が余計ですね。

さらに、for文で a の倍数だけを候補にすると、
b で割り切れるかどうかだけで公倍数の判定ができます。
コード[C]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
int main(void)
{
    int a, b, sum = 0;
    printf("整数 a, b を入力せよ・・・>");
    if (scanf("%d%d", &a, &b) != 2) return 1;
    printf("100以下の %d と %d の公倍数は\n", a, b);
    for (int i = a; i <= 100; i += a)
        if (i % b == 0) {
            sum++;
            printf("%d\t", i);
        }
 
    if (sum > 0)
        printf("\nの %d個です。\n", sum);
    else
        printf("ありません\n");
    return 0;
}