#include<stdio.h> voidmain() { int a, b, r; a = 27, b = 18; do { r = a % b; a = b; b = r; } while (r != 0); // 余数不为0时继续循环 printf("最大公约数是:%d\n", a); // 循环结束后,a就是最大公约数 }
intmain() { int a, b, temp, i; scanf_s("%d,%d", &a, &b); if (a < b) { temp = a; a = b; b = temp; } for (i = b;i >= 1;i--) { if (a % i == 0 && b % i == 0) { break; } } printf("最大公约数是%d", i); }
注意
我第一次写这个代码的时候是这么写的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#include<stdio.h>
intmain() { int a, b, temp; scanf_s("%d,%d", &a, &b); if (a < b) { temp = a; a = b; b = temp; } for (int i = b;i >= 1;i--) { if (a % i == 0 && b % i == 0) { break; } } printf("最大公约数是%d", i); }
我在for循环中定义int i,运行的时候提示i是未定义的标识符!!!
在 C 语言中,在for循环的初始化部分声明的变量(如int i = b),其作用域仅限于for循环内部。当循环结束后,变量i就会被销毁,外部的printf语句无法访问到它,因此会报错 “未声明的标识符i”。
故修改后:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#include<stdio.h>
intmain() { int a, b, temp, i; scanf_s("%d,%d", &a, &b); if (a < b) { temp = a; a = b; b = temp; } for (i = b;i >= 1;i--) { if (a % i == 0 && b % i == 0) { break; } } printf("最大公约数是%d", i); }