2015-10-07 2 views
0

Я написал программу, которая вычисляет сумму денег, которую вы должны заплатить. Пользователь вводит основную сумму, процентную ставку и период времени в годах, а затем программа дает им сумму, которую им придется заплатить в будущем. Когда я запускаю программу, конечный результат или сумма, которую мне нужно заплатить, слишком велика или неправильна. Вот код:C программа отображает неверный результат

#include <stdio.h> 
int calculation_1(int principal, int rate, int years); 

int main(void) { 

    int amount1, amount3; 
    double amount2, total; 

    printf("Investement Calculator \n"); 
    printf("====================== \n"); 

    printf("Principal : "); 
    scanf("%d", &amount1); 

    printf("Annual Rate: "); 
    scanf("%lf", &amount2); 

    printf("No of Years: "); 
    scanf("%d", &amount3); 

    total = calculation_1(amount1, amount2, amount3); 

    printf("The future value is: $%.2f \n", total); 

    return 0; 
} 

int calculation_1(int principal, int rate, int years) { 

    double subtotal,final; 

    subtotal = principal * (1 + rate) * years; 

    return subtotal; 
} 

я тестировал с этими значениями: 1000 для принципала, 0,06 для скорости и 5 лет для не лет. Конечный результат должен составлять $ 1338,23, но я получаю $ 5000,00. Вот формула, которую я использовал для расчета суммы:

total = principal * (1 + rate) ^number of years. 

Я не могу понять, что я делаю неправильно.

+1

Вы умножив на количество лет, не поднимая к власти лет. Используйте функцию pow(). – CodyF

+1

Также 'rate' должен быть' double', а не 'int'. –

+0

@alk: heh - хорошо пятнистый - оскорбительный «не» удален сейчас! –

ответ

4

Ваша формула не определяет его правильно:

subtotal = principal * (1 + rate) * years; 

должен быть

subtotal = principal * pow((1 + rate),years); 

также посмотреть на другой ответ (@ameycu) .. ваш тип данных имеет несоответствие.

2
int calculation_1(int principal, int rate, int years) //change 2nd parameter type to double 

Функция требует параметр 2 как тип int и вы передадите ему double при звонке в main -

total = calculation_1(amount1, amount2, amount3); 
    /* amount2 is declared as double */ 

Таким образом, из-за этой дробной части в amount2 будут отброшены, что может привести к неправильным ответ.

И вам нужно использовать функцию pow использовать в формуле, чтобы получить это выражение в вашей математической формуле:

+0

Использование '^' в контексте C для выражения операции * power-of * по крайней мере неоднозначно. – alk

+0

@alk Ну, да, это просто математическая формула. То, что он пытался сделать в программе, является чем-то неправильным для логики. – ameyCU

+0

В C '^' - XOR-оператор. Не каждый может разобрать его как * силу *. – alk

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