C语言while问题

来源:百度知道 编辑:UC知道 时间:2024/05/31 15:57:50
#include<stdio.h>
main()
{
int a,b,c,x,y;
printf("请输入两个数!\n求它们的最大公约数和最小公倍数!\n");
scanf("%d %d",&a,&b);
//用IF把大的数字换到前面来.
if(a<b)
{
c=a;a=b;b=c;
}
while(a&&b!=0)
{
x=a%b;
y=a*b/x;
printf("最大公约数为:%d\n",x);
printf("最小公倍数为:%d\n",y);
break;
}
}
32和54的最大公约数和最小公倍数是2和864,为什么我的程序得22和78 ?

下面是正确的程序代码我看不出有什么不同和错误:
# include <stdio.h>

void main()
{
int x, y, num1, num2, temp;
printf("请输入两个正整数:\n");
scanf("%d %d", &num1, &num2);

if(num1 < num2)
{
temp = num1;
num1 = num2;
num2 = temp;
}
x = num1;
y = num2;
while(y != 0)
{
temp = x%y;
x = y;
y = temp;
}
printf("它们的最大公约数为:%d\n", x);
printf("它们的最小公倍数为:%d\n&q

楼主写的while语句不会循环,因为执行一次,遇到break就会中断。while的判断条件也有问题,因为循环体里a,b的值不会改变,也就是说如果没有break就是个无穷循环。而正确答案没有这些问题。可以参考一下答案的解决办法。

#include<iostream>
using namespace std;
int gongyuemax(int& x, int& y)
{
for(int i=(x<y)? x: y; i>=1; i--)
{
if(x%i == 0&&y%i == 0)
{
return(i);
break;
}
}
}
int gongbeimin(int& x, int& y)
{
for(int i = (x>y)? x:y; i!=0;i++)
{
if(i%x == 0&&i%y == 0)
{
return(i);
break;
}
}
}
void main()
{
int x1, y1, a, b;
cin>>x1>>y1;
a = gongyuemax(x1, y1);
b = gongbeimin(x1, y1);
cout<<a<<"\n"<<b<<endl;
}
//此为C++所写

你的while循还只执行了一次,跳出循环不是因为a&&b!=0,而是你while中的break;

got it