首页 > 解决方案 > 在我编写的这段 C 代码中我做错了什么

问题描述

问题:给定两个整数 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));
}

标签: c

解决方案


正确解决您的问题:

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=a。因此,您需要在if-else条件中进行正确的初始化。

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

  3. 您在循环中使用的条件fori==aor i==b,在循环开始时不正确,这意味着您的循环根本不会运行。所以把它改成i<=aor i<=b

我还在return a最后添加了,以防万一a==b


推荐阅读