int gcd( int x, int y );//求最大公约数
int main()
{
int x, y;
scanf("%d %d", &x, &y);
printf("%d\n", gcd(x, y));
return 0;
}
int gcd( int x, int y )
{
int i;
int n = x;
if(n>y) n = y;
for(int i = n;i >=1;i--)
if(x%i == 0&&y%i == 0)
return i;
}
int gcd( int x, int y )
{
int i;
int n = x;
if(n>y) n = y;
for(int i = n;i >=1;i--)
if(x%i == 0&&y%i == 0)
break;
return i;
}
在C语言中,for的标准形式是不能在for里进行定义i的
C++才能
应该是这样的,所以,你这样做就会出现一些问题,待会我给你写写我的想法
int gcd( int x, int y );//求最大公约数
int main()
{
int x, y;
scanf("%d %d", &x, &y);
printf("%d\n", gcd(x, y));
return 0;
}
/* 这是正确的 */
//int gcd( int x, int y )
//{
//int i;
//int n = x;
//if(n>y) n = y;
//for(int i = n;i >=1;i--)
//if(x%i == 0&&y%i == 0)
//return i;
//
//}
/* 我给你修改一下格式,看的更明白 */
int gcd( int x, int y )
{
int i=1; //我这里先给你定义一个数字
int n = x;
if(n>y) n = y;
//
for(int i = n;i >=1;i--) //int i=n;对i进行了定义,导致了这里的i和for外面的i是不一样的
{
if(x%i == 0&&y%i == 0)
{
break;
}
}
//注意花括号{}
//for里面的 i 不会影响函数里的i,相当于函数与主函数main的同名定义会有优先级
return i; //而这里会输出定义的数字 1
//
//改成以下是没有问题的
// for(i = n;i >=1;i--)
// {
// if(x%i == 0&&y%i == 0)
// {
// break;
// }
// }
}
普及一下知识
C语言中for循环这样定义:
int i;
for(i=0;i<5;i++)
C++中for循环可以这样定义:
for(int i=0;i<5;i++)
注意,两种定义里边,i不要在本函数的其他的地方(比如本函数是main)再定义,否则会出现"优先级,作用域的问题"
感谢解😂
@FutureWorld: 求结贴最佳
x=0不就错了,还有没有返回值的路径
你好,什么是返回值路径啊😱
@FutureWorld: 从a点开始执行,能执行到b点,就有路径,不知道有没有这样的说法
看上去确实是一样的,建议设断点调试一下。另外建议for和if就算只有一条语句也加大括号,最后建议格式话一下代码
codes
嗯嗯,谢谢了各位。
真TM奇怪😂
@FutureWorld: 设断点跟一下就真相大白了也许
int gcd( int x, int y )
{
int i;
int n = x;
if(n>y) n = y;
for(int i = n;i >=1;i--)
if(x%i == 0&&y%i == 0)
break;
return i;
}
你这样写是有问题的,一开始写了int i,在for循环里又int i。break跳出来的返回的你之前定义的i,默认值是0.
第一个没错是因为你在for循环里返回了i,
😢😢,哦,好像是啊,好蠢啊,哎,谢谢,非常感谢