2014-09-23 24 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 2014-09-23 10:59:50

+1

從x到y的總和是從1到y的總和減去從1到x的總和,這是你在做什麼? – 2014-09-23 10:59:58

+0

是的,但我只得到x的總和!就像如果我把控制檯的x和y這隻會將x加起來,就像我把5這樣做會做0 + 1 + 2 + 3 + 4 ...我要x = 5和Y = 10 6 + 7 + 8 + 9 + 10 – 2014-09-23 11:03:49

回答

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爲(n + 1)* n/2個和第(n-1)* n/2的