STEP 5.1 (非再帰バージョン)

<問題> ユークリッドの互除法によって、2つの整数p, q の最大公約数を求めるプログラムを作成せよ。(ただし、p > q とする)

<実行例>  最大公約数を出力するだけでもいいが、このプログラムが、どのように実行されているのかを、変数を追いかけて確かめよう。適当なprintf文を入れてみよう。

p,qを入力してください
p = 512
q = 384

512と384の最大公約数を求める
p =  512, q =  384, r =  128
p =  384, q =  128, r =    0
最大公約数は128である。

p = 91
q = 77

91と77の最大公約数を求める
p =   91, q =   77, r =   14
p =   77, q =   14, r =    7
p =   14, q =    7, r =    0
最大公約数は7である。

p = 876
q = 204

876と204の最大公約数を求める
p =  876, q =  204, r =   60
p =  204, q =   60, r =   24
p =   60, q =   24, r =   12
p =   24, q =   12, r =    0
最大公約数は12である。


解答例

#include <stdio.h>

int gcd1(int p, int q);

int main (void) {

    int p, q;

    printf("p,q (p > q)を入力してください \n");
    printf("p = ");
    scanf("%d", &p);
    printf("q = ");
    scanf("%d", &q);

    printf("\n%dと%dの最大公約数を求める\n", p, q);
    printf("%dと%dの最大公約数は%dである。\n",p, q, gcd1(p,q));

    return 0;

}


int gcd1 (int p, int q) {
    int r;

/* 以下、適当なprintf文で、変数、x,y,rの変化をおいかけてみよう */

(新) プログラム確認ツールへ (クリックすると正解例が一度に表示) 
(正解のコードを確認するツールです。利用した皆さんは状況をページ内アンケートで知らせてください。
今は、まだどうしても作成が難しい人は、(A) コードの全体 (B) 実行の様子 の確認を行って、自分のレポートにしてください。わからない部分はハイライトしてChatGPTを利用してみて。
次回はできるだけ自分の力で! 利用した皆さんは状況をアンケートで知らせてください。)
(2024年度4年生のツールです。答え見せすぎだけど、、と議論しましたが、できないときは、まずわかることこそ重要だ!とのことです)