【问题标题】:Exercise in C to calculate sum from x to y在 C 中练习计算从 x 到 y 的总和
【发布时间】:2014-09-23 10:56:53
【问题描述】:

我的老师想要从 x 到 y 的所有数字的总和...比如 x+(x+1)+(x+2)...直到 y。但我觉得我在这里做错了!

有人可以告诉我这里出了什么问题吗?

#include <stdio.h>

int sum_naturals(int n)
{
  return (n-1) * n / 2;
}

int sum_from_to(int m)
{
  return (m-1) * m / 2;
}

void test_sum_naturals(void)
{
  int x;
  scanf("%d", &x);
  int z = sum_naturals(x);
  printf("%d\n", z);
}

void test_sum_from_to(void)
{
   int x;
   int y;
   scanf("%d", &x);
   scanf("%d", &y);
   int z = sum_naturals(x);
   int b = sum_from_to(y);
   printf("%d\n", z);
}

 int main(void)
{
 //test_sum_naturals();
  test_sum_from_to();
  return 0;
}

【问题讨论】:

  • 您遇到了什么问题?
  • 从 x 到 y 的总和是从 1 到 y 的总和减去从 1 到 x 的总和,这是你在做什么?
  • 是的,但我只得到 x 的总和!就像我把 x 和 y 放在控制台上,这只会对 x 求和,就像我把 5 这会做 0+1+2+3+4... 我想要 x=5 和 Y=10 6+7+ 8+9+10
  • 他们不允许我使用 for 循环
  • 您在test_sum_from_to 函数中仅打印x 此处printf("%d\n", z); 的结果。你需要printf("x: %d y: %d \n", z,b);

标签: c imperative-programming


【解决方案1】:

您的代码实际上应该是:

int sum_naturals(int n)
{
    return (n+1) * n / 2;
}

int sum_from_to(int m)
{
    return (m+1) * m / 2;
}

通知+ 而不是您的-

要找到总和,只需在函数test_sum_from_to 中添加这一行:

printf("The sum is %d", b-z);

【讨论】:

    【解决方案2】:

    这是一个解决方案:

    #include<stdio.h>
    
    int sum_naturals(int n)
    {
      return (n+1) * n / 2;
    }
    
    int sum_from_x_to_y(int x, int y){
        return sum_naturals(y) - sum_naturals(x);
    }
    
    main()
    {
         printf ("Sum: %d \n",sum_from_x_to_y(5, 10));
         printf ("Sum: %d \n",sum_from_x_to_y(0, 10));
         printf ("Sum: %d \n",sum_from_x_to_y(0, 5));
        return 0;
    }
    

    注意:从 0 到 N 的总和是 (n+1)*n/2 和 不是 (n-1)*n/2

    【讨论】:

      猜你喜欢
      • 2020-04-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2019-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多