与えられたa,bは正の整数です。a,bの最大公約数を求めます。
フローチャートは、情報処理技術者試験(H29春AP問6)にあります。
終了時にxに格納されているものが、最大公約数です。
※mod(x,y)はxをyで割った余りです。

たとえば、以下の数字で考えます。
x=20、y=25
■ループ1:t=20、x=25、y=20
■ループ2:t=5、x=20、y=5
■ループ3:t=0、x=5、y=0 ←ループ終了
終了時にはxに、a(20)とb(25)の最大公約数である5が入ります。
プログラム
実際にCでプログラムを書いてみると、以下のようになります。
プログラム(xとyの入力チェックを含めた少し詳細なもの)
フローチャートは、情報処理技術者試験(H29春AP問6)にあります。
終了時にxに格納されているものが、最大公約数です。
※mod(x,y)はxをyで割った余りです。

たとえば、以下の数字で考えます。
x=20、y=25
■ループ1:t=20、x=25、y=20
■ループ2:t=5、x=20、y=5
■ループ3:t=0、x=5、y=0 ←ループ終了
終了時にはxに、a(20)とb(25)の最大公約数である5が入ります。

実際にCでプログラムを書いてみると、以下のようになります。
#include <stdio.h> //mod関数("x"を"y"で割った余りを計算する) int mod(int x, int y) { //"%"は余りを計算する演算子 return x%y; //"x"を"y"で割った余りを返す } //main関数 void main(){ int x, y; int t; // 余りを入れる //標準入力からxとyの値を取得 printf("整数aを入力してください:"); scanf("%d", &x); printf("整数bを入力してください:"); scanf("%d", &y); //while文で"y"が0以外の場合はループ1を実施 while(y!=0){ t = mod(x, y); //定義したmod関数の戻り値を"t"に代入 x = y; //"y"の値を"x"に代入 y = t; //"t"の値を"y"に代入 } printf("x=%dです\n", x); } |

#include <stdio.h> int mod(int x, int y) { return x%y; } void main(){ int x, y; int t; printf("input x:"); if(scanf("%d", &x)!=1){ //数値の取得に失敗した場合 printf("入力エラー\n"); return; //プログラムの途中終了 } if(x<=0){ //xが正の整数で無い場合 printf("数値が不正です\n"); //プログラムの途中終了 return; } printf("input y:"); if(scanf("%d", &y)!=1){ printf("入力エラー\n"); return; } if(y<=0){ printf("数値が不正です\n"); return; } while(y!=0){ t = mod(x, y); x = y; y = t; } printf("x=%dです\n", x); } |
コメント