段软w 发表于 2019-11-3 23:55:16

求帮忙看一下最大公约数

#include <stdio.h>
int main()
{
        int m,n,t,i,a;
        printf("输入两个整数m,n:");
        scanf("%d %d",&m,&n);
       
        while(i!=0)
        {
                m%n==i;
                t=n;
                a=i;
                n=a;
                m=t;
               
        }
        printf("最大公约数为:%d",t);
        return 0;
} 指点一下为啥while死循环了 运行的时候输入完数字就没反应了 谢谢!

jackz007 发表于 2019-11-4 00:19:44

本帖最后由 jackz007 于 2019-11-4 01:58 编辑

      循环变量 i 没有赋初值,而且,在整个循环过程中,i 的值始终没给改变,如何能不死循环?
      试试我修改的代码:
#include <stdio.h>
int main(void)
{
      int m , n , t                                             ;
      printf("输入两个整数 m , n : ")                           ;
      scanf("%d%d", & m , & n)                                    ;
      if(m > 0 && n > 0) for(; n > 0 ; t = m % n , m = n , n = t) ;
      else m = 0                                                ;
      if (m > 1) printf("最大公约数为 : %d\n" , m)                ;
      else printf("m , n 没有最大公约数\n")                     ;
}

bin554385863 发表于 2019-11-4 00:51:51

本帖最后由 bin554385863 于 2019-11-4 03:51 编辑

#include <stdio.h>
int main()
{
      int m,n,t,i,a;
      printf("输入两个整数m,n:");
      scanf("%d %d",&m,&n);
      
      while(i!=0)——>i没有初始化,当然会陷入死循环
      {
                m%n==i;
                t=n;
                a=i;
                n=a;
                m=t;

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int m = 1, n = 1, res = 0, count = 0;
    printf("请输入计算的次数\n");
    scanf("%d", &count);
    while (count != 0)
    {
      printf("请输入要计算的两个数\n");
      scanf("%d%d", &m, &n);
      if ((n && m) != 0)
      {
            int t = m < n ? m : n; //最大公约数必然小于较小的数
            for (size_t i = t; i >= 1; i--)
            {
                if ((m % i == 0) && (n % i == 0))
                {
                  res = i;
                  break;
                }
            }
      }
      else
      {
            printf("无效数字0, 请重新输入\n\n");
            continue;
      }
      printf("[%d]和[%d]的最大公约数是(%d)\n\n", m, n, res);
      count--;
      res = 0;
    }
    return 0;
}


---------------------------------------------------------------------------------------------------
PS E:\Users\admin\Documents\VScode> & 'c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.1\debugAdapters\bin\WindowsDebugLauncher.exe' '--stdin=Microsoft-MIEngine-In-ouganha0.xjx' '--stdout=Microsoft-MIEngine-Out-3d2cknc2.gdv' '--stderr=Microsoft-MIEngine-Error-o4fgkqzu.uva' '--pid=Microsoft-MIEngine-Pid-pnioebrm.avr' '--dbgExe=D:\MinGW\bin\gdb.exe' '--interpreter=mi'
请输入计算的次数
3
请输入要计算的两个数
32 0
无效数字0, 请重新输入

请输入要计算的两个数
23 25
和的最大公约数是(1)

请输入要计算的两个数
120 564
和的最大公约数是(12)

请输入要计算的两个数
999 555
和的最大公约数是(111)

PS E:\Users\admin\Documents\VScode>

段软w 发表于 2019-11-4 09:20:06

jackz007 发表于 2019-11-4 00:19
循环变量 i 没有赋初值,而且,在整个循环过程中,i 的值始终没给改变,如何能不死循环?
      试 ...

谢谢!

heboy18 发表于 2019-11-4 09:34:22

c语言种,定义变量不赋初始值,系统会给一个默认值(内存空间地址),你可以debuger看一下,对你理解有一定帮助。

人造人 发表于 2019-11-4 12:29:39

heboy18 发表于 2019-11-4 09:34
c语言种,定义变量不赋初始值,系统会给一个默认值(内存空间地址),你可以debuger看一下,对你理解有一定 ...

“系统会给一个默认值”

这句应该改成这样比较合适
系统会给一个随机值

heboy18 发表于 2019-11-5 11:02:34

人造人 发表于 2019-11-4 12:29
“系统会给一个默认值”

这句应该改成这样比较合适


表达错误,谢谢指正

段软w 发表于 2019-11-5 12:44:33

heboy18 发表于 2019-11-4 09:34
c语言种,定义变量不赋初始值,系统会给一个默认值(内存空间地址),你可以debuger看一下,对你理解有一定 ...

好的 谢谢!

段软w 发表于 2019-11-5 12:45:05

人造人 发表于 2019-11-4 12:29
“系统会给一个默认值”

这句应该改成这样比较合适


{:10_297:}
页: [1]
查看完整版本: 求帮忙看一下最大公约数