| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1536 人关注过本帖
标题:这个程序为什么会出现这样的情况,求解!
只看楼主 加入收藏
低调低调
Rank: 3Rank: 3
来 自:四川省成都市
等 级:论坛游侠
威 望:1
帖 子:66
专家分:103
注 册:2016-6-23
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:8 
这个程序为什么会出现这样的情况,求解!
小问题求解:
题目:写一函数,要求:输入两个正整数m和 n,求其最大公约数和最小公倍数。

#include <stdio.h>
#include <string.h>

int max(int ,int);

int main(int argc, char const *argv[])
{
    int m,n;
    printf("请输入两个数,中间用“ ”隔开\n");
    scanf("%d %d",&m,&n);

    int Max = max(m,n);
    printf("这两个数的最大公约数为:%d\n",Max );   
    printf("这两个数的最小公倍数为:%d\n",m * n / Max );
    return 0;
}


int max(int m ,int n){

    int count = m < n ? m : n;
    int maxValue;
    for (int i = 0; i < count; ++i)
    {
        if (m % i == 0 && n % i ==0)
        {
            maxValue = i;
        }
    }
    return maxValue;

}

结果如下:
TP-LINK-520E:Desktop tens04$ cc hoemWork1.c
TP-LINK-520E:Desktop tens04$ ./a.out
请输入两个整数,用逗号隔开:
5 10
这两个数的最大公约数是:0
Floating point exception: 8


求解答,求各位大大帮忙看看是怎么回事  我实在是学识不够 弄不出来了!
搜索更多相关主题的帖子: 最小公倍数 include return 公约数 正整数 
2016-07-04 11:10
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:5 
for (int i = 0; i < count; ++i)改成  for (int i = 1; i <=count; ++i)
for循环运行:先是执行i=0的,也就是先初始化或者可以说先判断i是确定值还是未知值,
             然后执行 i<count,判断i是否符合循环条件
             接着执行循环体的代码
             当循环体执行结束后,执行++i;
 i < count这个判定条件也是不对的.
2016-07-04 11:38
低调低调
Rank: 3Rank: 3
来 自:四川省成都市
等 级:论坛游侠
威 望:1
帖 子:66
专家分:103
注 册:2016-6-23
收藏
得分:0 
回复 2楼 linlulu001
那么请问该怎么改呢?我自己理解的能力只能写成这样了!希望大大您能帮我解答下!
其次,i = 0;和i= 1影响的只是它循环的起始点啊!
2016-07-04 12:00
平常心q
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:120
专家分:550
注 册:2016-3-31
收藏
得分:5 
for (int i = 0; i < count; ++i)改成  for (int i = 1; i <=count; ++i)就可以了
i = 0;和i= 1影响的不只是它循环的起始点,
因为接下来
if (m % i == 0 && n % i ==0)
中的i 不能为0
2016-07-04 12:18
平常心q
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:120
专家分:550
注 册:2016-3-31
收藏
得分:0 
代码也可以这样来写的:
# include <stdio.h>
int main(void)
{
    int a, b, num1, num2, temp;
    printf("请输入两个数字:");
    scanf("%d %d", &num1, &num2);
    if(num1 < num2)/*交换两个数,使大数放在num1上*/
    {
        temp = num1;
        num1 = num2;
        num2 = temp;
    }
    a = num1, b = num2;
    while(b != 0) /*利用辗除法,直到b为0为止*/
    {
        temp = a % b;
        a = b;
        b = temp;
    }
    printf("最大公约数:%d\n", a);
    printf("最小公倍数:%d\n", num1 * num2 / a);

    return 0;
}

希望可以帮到你!
2016-07-04 12:19
低调低调
Rank: 3Rank: 3
来 自:四川省成都市
等 级:论坛游侠
威 望:1
帖 子:66
专家分:103
注 册:2016-6-23
收藏
得分:0 
回复 5楼 平常心q
谢谢  我先试试啊!
2016-07-04 12:40
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
子函数for循环for (int i = 0; i < count; ++i)改成  for (int i = 1; i <=count; ++i)
难道你没有发现这两个for是有区别的吗。
2016-07-04 12:43
低调低调
Rank: 3Rank: 3
来 自:四川省成都市
等 级:论坛游侠
威 望:1
帖 子:66
专家分:103
注 册:2016-6-23
收藏
得分:0 
回复 7楼 linlulu001
子函数中的for循环即使i==0;也不会造成最后的结果显示为:浮点数异常错误啊!还是无法理解!希望大大您能说的通俗易懂一点,我还是菜鸟!
2016-07-04 17:26
低调低调
Rank: 3Rank: 3
来 自:四川省成都市
等 级:论坛游侠
威 望:1
帖 子:66
专家分:103
注 册:2016-6-23
收藏
得分:0 
回复 7楼 linlulu001
oo   我找到错误了  谢谢前辈的提醒
2016-07-04 19:05
快速回复:这个程序为什么会出现这样的情况,求解!
数据加载中...
 
   



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

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