| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 909 人关注过本帖
标题:新手求问,更相减损术,死循环
取消只看楼主 加入收藏
随风飘荡
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:208
专家分:598
注 册:2011-9-9
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
新手求问,更相减损术,死循环
程序代码:
#include <stdio.h>
#include <math.h>

void main()
{
    int a,b,t=0,i=0;
    printf("请输入两个整数,以英文逗号相隔\n");
    scanf("%d,%d",&a,&b);
    while ((a%2==0) && (b%2==0))
    {
        a = a/2;
        b = b/2;
        i = i+1;
        printf("%d,%d,%d\n",a,b,i);
    }
    while (a!=b)
    {
        if (b>a)
        {
        t = a;
        a = b;
        b = t;
        }
        a = a - b;
        printf("%d,%d,%d\n",a,b,t);
    }
    a = a * pow(2,i);
    printf("最大公约数为 %d\n",a);
}
求解为什么当我两个都输入偶数的时候就会陷入死循环,printf也只执行一次...
另外在好奇一下为什么t不赋初值那a!=b的循环里第一次的t会是一个很大的数(每次一样),没赋值在内存里面是怎么样的?

另外chenwei435大大的那个代码我也看过int gy里最后一行return temp;是什么意思 另外这个是不是一旦gy被使用就会执行int gy里面的程序段...我是新手,在C程序设计里面也看过一个return的 貌似是比较大小的示例程序...
程序代码:
#include<stdio.h>
int gy(int x,int y)
{
    int temp;
    while(1)
    {
        temp=x-y;
        if(y==temp)
        {
            break;  /*如果减数和差相等就跳出循环*/ 

        }
        if(temp>y)
        {
            x=temp;
        }
        else
        {
            x=y;
            y=temp;
        }
    }
    return temp;
}
void main()
{
    int a,b,t;
    printf("请输入两个数:\n");
    scanf("%d,%d",&a,&b);
    if(a>b)
        t=gy(a,b);
    else
        t=gy(b,a);
    printf("最大公约数为:%d\n",t);
}

搜索更多相关主题的帖子: color 
2011-09-09 01:06
随风飘荡
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:208
专家分:598
注 册:2011-9-9
收藏
得分:0 
另外先感谢2L大大的详细回答,那return为什么是返回给temp变量 而不是 gy或者 a,b?

应该除2会除到有奇数存在才对的 比如198 除2应该是99吧

另外昨天我睡觉的时候想了一下 又改成这样 却没有死循环... 为什么......第一个程序只会执行一次printf,而且之后就CPU占用满.然后程序就不动了

程序代码:
#include <stdio.h>
#include <math.h>

void main()
{
    int a,b,t=0,i=0;
    printf("请输入两个整数,以英文逗号相隔\n");
    scanf("%d,%d",&a,&b);
    while (1)
    {
        if (a%2==0 && b%2==0)
        {
        a = a/2;
        b = b/2;
        i = i+1;
        printf("%d,%d,%d\n",a,b,i);
        }
        else break;
    }
    while (a!=b)
    {
        if (b>a)
        {
        t = a;
        a = b;
        b = t;
        }
        a = a - b;
        printf("%d,%d,%d\n",a,b,t);
    }
    a = a * pow(2,i);
    printf("最大公约数为 %d\n",a);
}



[ 本帖最后由 随风飘荡 于 2011-9-9 10:32 编辑 ]
2011-09-09 10:20
随风飘荡
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:208
专家分:598
注 册:2011-9-9
收藏
得分:0 
我给你摘抄一段书里的

while(表达式)语句
当表达式为非0值时,执行while语句中的内嵌语句,其特点是:先判断表达式,后执行语句。
2011-09-09 11:47
随风飘荡
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:208
专家分:598
注 册:2011-9-9
收藏
得分:0 
但是为什么我的会出现CPU占用满和无动作呢?莫非是因为我是WIN7 X64么....再次感谢大大的耐心回答

这个只是我昨天看到最大公约数然后想自己写个程序试试看,我书没翻完,就看到5.3if语句


[ 本帖最后由 随风飘荡 于 2011-9-9 12:48 编辑 ]
2011-09-09 12:44
快速回复:新手求问,更相减损术,死循环
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.081124 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved