初学者 做题遇到的问题!

paulxj 2003-05-29 09:36:36
gon(int num1,int num2)
{int temp,a,b;
if(num1<num2) ----------------------------------/*(1)*/
{temp=num1;num1=num2;num2=temp;}
a=num1;b=num2;
while(b!=0)-------------------------------------/*(2)*/
{temp=a%b;a=b;b=temp;printf("\n"); }
return(a);
}

main()
{
int a;
a=gon(3,5);
printf("%d",a);
}



不明白 1 处的()内填 num1<num2 与 num1>num2,怎么都能得到正确的结果?

2处()内填 b!=0 与 temp 效果是一样的么?

更让我迷惑的是1 2里这四个答案任意组合都可以得到正确结果?

还请各位指教!!!!
...全文
36 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
paulxj 2003-06-01
  • 打赏
  • 举报
回复
各位高手来说说!这段到底是不是多余的???
各位高手来说说!这段到底是不是多余的???
各位高手来说说!这段到底是不是多余的???

if(num1<num2) ----------------------------------/*(1)*/
{temp=num1;num1=num2;num2=temp;}

反正我看是多余的!!!!!!!!1
william0129 2003-06-01
  • 打赏
  • 举报
回复
第一个判断我看是没有必要的。如果num1小的话,在循环的第一次中回自动调换过来!
大的话就没有必要了!
yin0731 2003-06-01
  • 打赏
  • 举报
回复
suibij
lyff8neo 2003-06-01
  • 打赏
  • 举报
回复
我觉得此题开始把值已经给出了,这样就不需要比大小了,直接就可以算了!!

但是如果需要从键盘输入得话,那么比大小就很有必要了!
还有把b!=0改成temp!=0在这里是可以得,但是对于程序得理解就比较困难了!!如果程序比较复杂自己就头昏了!!!
laoriver08 2003-06-01
  • 打赏
  • 举报
回复
这个是求最大公约数的程序,这个算法不需要大数在前,无所谓的
如果不要(1)处的语句,最多是在(2)处多循环一次
1处可以不要


(1)处如果执行,tem=num1,而b=num2,互换可以得到最终正确结果,但不能说两者完全等价。(1)处如果不执行,temp的值被初始化为0,,如果把b换成temp,则(2)处就进不了循环。
共同进步
BinaryWorld 2003-06-01
  • 打赏
  • 举报
回复
gon(int num1,int num2)
{int temp,a,b;
if(num1<num2) ----------------------------------/*(1)*/
{temp=num1;num1=num2;num2=temp;}//temp会得到最小值=num2
a=num1;b=num2;
while(b!=0)-------------------------------------/*(2)*/
{temp=a%b;a=b;b=temp;printf("\n"); }//求最小公倍数过程
return(a);
}
a=gon(3,5)
你的参数的传递是传值传递,不需要那么多中间变量。
gon(int num1,int num2)
{
int temp;
if(num1<num2) ----------------------------------/*(1)*/
{temp=num1;num1=num2;num2=temp;}//temp会得到最小值=num2
while(num2!=0)-------------------------------------/*(2)*/
{temp=num1%num2;num1=num2;num2=temp;printf("\n"); }//求最大公约数
return(num1);
}
去掉
if(num1<num2) ----------------------------------/*(1)*/
{temp=num1;num1=num2;num2=temp;}//temp会得到最小值=num2
后,你的循环当num1<num2时,
temp=num1%num2回得到temp=num1,num1=num2,num2=temp,也就是让多了一次判断,本身就是多余的。因为num1<num2时候取摸会得到本身!
applecjn 2003-06-01
  • 打赏
  • 举报
回复
把if一句去掉还是能正确得出结果啊
skywarship 2003-05-30
  • 打赏
  • 举报
回复
把num1<num2换成num1>num2只是多运行了一下while循环
在第一次循环时因为a比b小,因此第一次循环相当于把a和b的值交换了一下,这样就与num1<num2时进入循环的情况一样了
oldcold 2003-05-29
  • 打赏
  • 举报
回复
明显不是多余的,那是判断哪个大的,使a先赋值为大数。
然后在求余,直到b为0才退出。有问题再发短信给我
paulxj 2003-05-29
  • 打赏
  • 举报
回复
这样说来,
if(num1<num2) ----------------------------------/*(1)*/
{temp=num1;num1=num2;num2=temp;}

这部分就是多余的咯?
paulxj 2003-05-29
  • 打赏
  • 举报
回复
num1<num2 与 num1>num2判断是完全相反的,这个判断的结果就是把大数给a,

就是说a必须是较大的数,因为5%3与3%5的结果是不同的!

我还是不太明白

请说详细填好嘛?
Honey_boy 2003-05-29
  • 打赏
  • 举报
回复
paulxj (没什么说的)
要学会编程序,
就得会调试
Honey_boy 2003-05-29
  • 打赏
  • 举报
回复
改为num1>num2的时候,
和原来的num1<num2的相比,
只是多运行了一下while这个循环。
Honey_boy 2003-05-29
  • 打赏
  • 举报
回复
首先b!=0 与 temp 这个条件肯定是一样的,
因为这个函数里面temp与b肯定是相等的。
while(b!=0)而while(b)是等价的。

pzytony 2003-05-29
  • 打赏
  • 举报
回复
num1<num2 a=2 a%b=2
num1>num2 a=5 a%b=2 一样

b!=0 与 temp 效果一样
因为都为真呀
paulxj 2003-05-29
  • 打赏
  • 举报
回复
大家帮帮忙啊!
pzytony 2003-05-29
  • 打赏
  • 举报
回复

a=2衡成立

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧