以下代码 输入值是24 18 执行后 判断if ((a % c) == 0 && (b % c) == 0)为真,此时c==6,但没有打印c的值,谢谢了~!
按了F10查看值,就是直接跳过打印的部分了
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf("%d %d",&a,&b);
if (a < b)
{
c = a;
for (;(a % c) != 0 && (b % c) != 0;c -= 1)
{
if ((a % c) == 0 && (b % a) == 0)
printf("%d", c);
break;
}
}
else if(a>b)
{
c = b;
for (;(a % c) != 0 || (b % c) != 0;c -= 1)
{
if ((a % c) == 0 && (b % c) == 0)
{
printf("%d", c);
break;
}
}
}
return 0;
}
因为if判断在for循环中
第一个for循环因为c=a,所以在第一次进行判断时a%c==0循环条件不成立退出循环,故不会走循环内部方法。
第二个for循环条件与内部if判断刚好相反,所以只要能进入循环,if条件肯定不会成立,当((a % c) == 0 && (b % c) == 0)为真时for循环条件为假,推出循环,也就不会执行循环内部的if判断。你这看着像是求两个数的最小大公因数的,if判断需要放到循环下边来判断,且两个for循环的条件应该一致且第二个的是正确的,建议修改如下:
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf("%d %d",&a,&b);
if (a < b)
{
c = a;
}
else if(a>b)
{
c = b;
}
for (;(a % c) != 0 || (b % c) != 0;c -= 1){}
if ((a % c) == 0 && (b % c) == 0)
{
printf("%d", c);
}
return 0;
}
for (;(a % c) != 0 || (b % c) != 0;c -= 1)
(a % c) != 0 || (b % c) != 0 这个条件不满足跳出循环了。
int main()
{
int a, b, c;
scanf("%d %d", &a, &b);
if (a < b)
c = a;
else
c = b;
for (; c > 0; c -= 1)
{
if ((a % c) == 0 && (b % c) == 0)
{
printf("%d", c);
break;
}
}
return 0;
}
你的第一个if语句后面,执行完后,直接break了,也就是程序中断了,不会执行后面的