繁体   English   中英

我在写的这个 C 代码中做错了什么

[英]What am I doing wrong in this C code I've written

问题:给定两个整数 a 和 b,它们可以是正数或负数,找到它们之间和包括它们的所有整数的总和并返回它。 如果两个数字相等,则返回 a 或 b。

我对以下解决方案的期望答案是 14。但无论我更改什么,它始终显示 5

我的解决方案:

int get_sum(int a , int b)
{
  int d = a;

  if ( a > b)
    {
      for ( int i = b; i == a; i++)
        {
          d = d + i ;
        }
      return d;
    }

  if ( a < b )
    {
      for ( int i = a; i == b; i++)
        {
          d = d + i;
        }
      return d;
    }
return 0;
}

int main (void)
{
printf("%i", get_sum(5,-1));
}

您的问题的正确解决方案:

int get_sum(int a , int b)
{
  int d;

  if ( a > b)
  {
    d = b;
    
    for ( int i = b+1; i <= a; i++)
        
      d = d + i ;
    
    return d;
  }

  else if ( a < b )
  {
    d = a;

    for ( int i = a+1; i <= b; i++)

        d = d + i;
    
    return d;
  }

  else return a;
}

int main (void)
{
printf("%i", get_sum(5,-1));
}

您的代码有错误的地方是:

  1. 你初始化了d=a ,但在你的情况下 a > b,所以它应该是d=b 如果 a < b,那么它应该是d=b 因此,您需要将正确的初始化放在if-else条件中。

  2. 您使用了for循环for (int i = b; i==a; i++) 由于您已经在if内部初始化了d=b ,因此初始化i=b错误地将b添加到d两次。 所以初始化i=b+1i=a+1

  3. 您在for循环中使用的条件是i==ai==b ,这在循环开始时不成立,这意味着您的循环根本不会运行。 所以将其更改为i<=ai<=b

我还在最后添加了return a ,以防a==b为真。

由于条件,您的 for 循环无法正常工作

    int get_sum(int a , int b)
{
  int d = 0;

  if ( a > b)
    {
      for ( int i = b; i <= a; i++)
        {
          d = d + i ;
        }
      return d;
    }

  if ( a < b )
    {
      for ( int i = a; i <= b; i++)
        {
          d = d + i;
        }
      return d;
    }
return 0;
}

int main (void)
{
printf("%i", get_sum(5,-1));
}

它现在可以按您的意愿工作,遍历 a 和 b 之间的所有整数。 此外,您必须将 d 设置为 0。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM