注册 登录
编程论坛 C++教室

while

chris223 发布于 2007-10-03 12:39, 687 次点击
#include<iostream>
#include<string>
using namespace std;
int gcd(int v1,int v2) {
while(v2){
/* 为什么必须是while(v2),不能是while(v1),或其它?如果定义int v,while(v),
或者是while(v1),会出现内存错误,为什么?*/

int temp = v2;
v2 = v1%v2;
v1 = temp;
}
}
int main( )
{
cout<<"Enter two values: \n";
int i,j;
cin>>i>>j;
cout<<"gcd:"<<gcd(i , j)<<endl;
return (0);
}
没人知道吗??

[此贴子已经被作者于2007-10-3 14:06:42编辑过]

8 回复
#2
栖柏2007-10-03 12:44
int gcd(int v1,int v2) {
while(v2){
/* 为什么必须是while(v2),不能是while(v1),或其它?如果定义int v,while(v),
或者是while(v1),会出现内存错误,为什么?*/
int temp = v2;
v2 = v1%v2;
v1 = temp;
}
};这个分号做什么呢?
#3
csmenglei9512007-10-03 12:58
因为v2是除数,while语句的作用就是不让v2=0,为0时不会执行while 循环
#4
不再2007-10-03 13:09
while(v2) //v2为真时循环
{
int temp = v2;
v2 = v1%v2; //只有这里在v2=0时循环结束
v1 = temp;
}

while(v1) //v1为真时循环
{
int temp = v2;
v2 = v1%v2; //在这里可能出现v2=0;当v2=0,v1!=0时,在下个循环将出现v1%0的情况
v1 = temp;
}
#5
gospark2007-10-03 13:57
V2 是被除数,如果你换城V1 的话也没关系,不过你必须在函数中还要做相应改变                                                
#6
chris2232007-10-10 10:36
大家都没说到点子上,如果改成while(v1)编译完成后执行的时候会出现内存错误,这是为什么啊@@
#7
TenY2007-10-10 11:14
除法中要求除数非0,
这里while(v2),就是保证除数为0时,就不继续计算了.因为在while的循环体内有%运算.
函数里还差一个return .至于return的内容就看楼主想用这个函数来干什么了.

[此贴子已经被作者于2007-10-10 11:19:31编辑过]

#8
jack_sqh2007-10-10 15:21
#include<iostream>
#include<string>
using namespace std;
// 求最大公约数
int gcd(int v1,int v2){
while(v2){
int temp = v2;
v2 = v1%v2;
v1 = temp; }
return v1;
}
int main( ){
cout<<"Enter two values: \n";
int i,j;
cin>>i>>j;
cout<<"gcd:"<<gcd(i,j)<<endl;
return (0);
}
求模运算v2!=0,否则那样做会无限循环
#9
chris2232007-10-11 18:20

我明白了,一开始我搞错了这个程序的运行过程,如果换成v1的话,这个循环就成了死循环,当然不对啦!
大家可以推导一下试试

谢谢大家的帮助

[此贴子已经被作者于2007-10-11 18:20:50编辑过]

1