2014-09-23 4 views
0

Мой учитель хочет получить сумму всех чисел от x до y ... как x + (x + 1) + (x + 2) ... до y. Но я думаю, что я делаю что-то неправильно здесь!Упражнение в C для вычисления суммы от x до 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; 
} 
+3

чем проблема у вас возникли? – interjay

+1

Сумма от x до y составляет сумму от 1 до y минус сумма от 1 до x, это то, что вы делаете? –

+0

Да, но я получаю только сумму x! например, если я положил на консоль x и y, это только суммирует x, как если бы я положил 5, это будет делать 0 + 1 + 2 + 3 + 4 ... я хочу x = 5 и Y = 10 6 + 7 + 8 + 9 + 10 –

ответ

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); 
1

Вот одно решение:

#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 (п + 1) * п/2 и не (п-1) * п/2

 Смежные вопросы

  • Нет связанных вопросов^_^