2014-09-28 6 views
0

진행 번호 (r)와 횟수 (n)로 숫자 (x0)의 배수를 합치려고합니다. 숫자 x0 = 6, r = 3, n = 3을 사용하면 결과는 6 + 9 + 12 = 27이되지만 프로그램에서 항상 18을 얻습니다.C의 산술 진행과 올바른 결과가 없음

나는 종이에하는 경우에 문제가 구문이 될 수 임 두려워, 그래서 결과는

그래서 C에서 프로그램을 프로그래머 ..., 맞다 : 돕는

#include <stdio.h> 

int sum_progression(int x0, int r, int n) 
{ 
    return (n/2) * ((2 * x0) + ((n - 1) * (r))); 
} 

void test_sum_progression(void) 
{ 
    int x0; 
    int r; 
    int n; 
    scanf("%d", &x0); 
    scanf("%d", &r); 
    scanf("%d", &n); 
    int z = sum_progression(x0,r,n); 
    printf("%d\n", z); 
} 

int main(void) 
{ 
    test_sum_progression(); 
    return 0; 
} 

감사합니다!

+4

'printf ("% d \ n", (3/2));'. –

+0

이제 그에게 맡기고 배워 보겠습니다. – Deduplicator

+0

나는 이해하지 못한다. :/C는 새로운 것이고 어떤 것들은 이해하기가 쉽지 않다. 왜 3/2 인쇄해야합니까? –

답변

1

나누기와 함께 ints를 사용하면 값이 계산 된 다음 int로 잘립니다.
int로 int를 나누면 다음과 같이해야합니다.
return (n/(double) 2) * ((2 * x0) + ((n-1) * (r))));

+2

부동 소수점으로 갈 생각이 없습니다. 제한된 범위와 2로 나누어 진 단 하나이지만 작동 할 수도 있습니다. – Deduplicator

+0

당신 말이 맞아요. 두 배로 바뀌었다. – atlanteh

+0

@atlanteh :'double' 또한 부동 소수점입니다 ... –

관련 문제