ここまではあっているでしょうか?
質問欄に提示されてあるコードを見て気づいたことを挙げると
(i)綴りミスがある
例えば、<studio.h> -> <stdio.h>, While -> whileです。
(ii)半角と全角が混じっている
(iii)printf()の中身が " "でくくられていない
が挙げられます。
ちなみに「引き算の回数のカウント」を加え,わたしなりに修正したものが以下のようになります。
C
1#include <stdio.h>
2
3int main(void)
4{
5 int a,b;
6 int gcd;
7 int count = 0;
8
9 printf("a,b : ");
10 scanf("%d, %d", &a, &b);
11
12 while (a != b) {
13 printf("%d回目: ",count++);
14 if (a > b) {
15 a = a - b;
16 }
17 else if (a < b) {
18 b = b - a;
19 }
20 printf("a = %d b = %d \n",a,b);
21 }
22 printf("a = bになりました。\n");
23 gcd = a;
24
25 printf("gcd(a, b) = %d\n", gcd);
26
27 return 0;
28}
29
.(ループさせる回数) = (引き算を行う回数)
を記憶する変数としてcount
を用意しループするたびに1増やせばいいです。
また、
C
1else{
2 printf("a = bになりました。\n");
3}
のところですが、a = b
になったときにwhile
文から抜け出すのでelse
に行くことはありません。
よって、書くならwhile
文の外に書きましょう。
最大公約数を求める有名な方法
最大公約数を求める有名な方法としてユークリッド互除法というのがあります。処理速度が速いです。
C
1#include <stdio.h>
2#include <stdlib.h>
3
4#define BUFSIZE 256
5
6void my_gcd(int,int);
7
8int main(void)
9{
10 char buf[BUFSIZE];
11 int a,b;
12 printf("数字を入力\n");
13 printf("一つ目\n->");
14 fgets(buf,BUFSIZE,stdin);
15 a = strtol(buf,NULL,10);
16 printf("二つ目\n->");
17 fgets(buf,BUFSIZE,stdin);
18 b = strtol(buf,NULL,10);
19
20 my_gcd(a,b);
21 return 0;
22}
23
24void my_gcd(int a, int b)
25{
26 int r = a % b;
27 int count = 0;
28
29 printf("%d ÷ %d = %d あまり %d\n",a,b,a / b, r);
30 while(r != 0){
31 printf("%d回目",++count);
32 a = b;
33 b = r;
34 r = a % b;
35 printf("%d ÷ %d = %d あまり %d\n",a,b,a / b, r);
36 }
37 printf("最大公約数は%d\n",b);
38}
39
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。