2012-06-10 5 views
1

Я изучаю основы программирования на C++, и мне нужно написать программу, которая выполняет некоторые основные математические функции, используя операторы if/else: вычитание, добавление, умножение и т. Д. Я не получаю ошибок компиляции или времени выполнения, но значения, которые я в конечном итоге, всегда неверны.Неожиданные значения для базовой математической функции

Я изменил некоторые вещи, пытаясь понять, где я поступил не так, но то, что напечатано на экране, насколько слова идут правильно, просто не ответы. Например, когда я сканирую - (знак вычитания) в качестве входных данных, он будет читать разницу между x и y, это какое-то смехотворно большое число.

В любом случае, вот мой код & любая помощь была бы ВЕЛИКОЙ оценкой!

/* 
* This program performs some basic math calculations 
*/ 

#include <stdio.h> 
#include <math.h> 

int main() { 
    int x,y; 
    float sum = x+ y; 
    float difference = x-y; 
    float product = x*y; 
    float quotient = x/y; 
    float exponent = x^y; 
    float modulus = x%y; 
    char symbol; 


    printf("What is the value of x?\n"); 
    scanf("%d", &x); 

    printf("What is the value of y?\n"); 
    scanf("%d", &y); 

    printf("What is your operator?\n"); 
    scanf(" %c", &symbol); 

    if (symbol== '+') 
     printf("The sum of x and y = %f\n", sum); 
    else if (symbol=='-') 
     printf("The difference between x and y = %f\n", difference); 
    else if (symbol=='*') 
     printf("The product of x and y = %f\n", product); 
    else if (symbol=='/') 
     printf("x divided by y = %f\n", quotient); 
    else if (symbol=='^') 
     printf("x multiplied exponentially by y = %f\n", exponent); 
    else if (symbol=='%') 
     printf("x is this much percent of y =%f\n", modulus); 

    return 0; 
} 
+0

В C и C++ что-то вроде «sum = x + y» представляет собой последовательно выполняемую операцию, а не уравнение ... sum сразу получает значение x + y, но значения x и y не определены в этот момент, поэтому значение суммы - мусор. –

ответ

2

Sine это приложение на C++, которое вы можете определить как угодно. Но имейте в виду, что программа, написанная на C или C++ и для всех других языков, будет выполняться сверху вниз, поэтому, когда вы объявляете x и y, у них нет значения, считанного от пользователя. Всегда отслеживайте свои коды сверху донизу. Здесь я объявляю x и y и сначала читаю их значения от пользователя. Затем я вычисляю их различные операции. Я думаю, что большинство из них, кроме разделения, могут быть целыми числами снова, как x и y, но я пытаюсь исправить ваш код.

Если вы хотите иметь возведение в степень на C или C++, вы должны написать свой собственный код.

#include <stdio.h> 
    #include <math.h> 

    float power(int x , int y) 
    { 
     float ret = 1 ; 
     for(int i = 1 ; i <= y ; i++) 
      ret *= x ; 
     return ret ; 
    } 

    int main() { 

    int x,y; 

    printf("What is the value of x?\n"); 
    scanf("%d", &x); 

    printf("What is the value of y?\n"); 
    scanf("%d", &y); 

    printf("What is your operator?\n"); 
    scanf(" %c", &symbol); 


    float sum = (float)x+ y; 
    float difference = (float)x-y; 
    float product = (float)x*y; 
    float quotient = (float)x/y; 
    //float exponent = (float)x^y; //Exponentiation should be implemented using multiplication and loops. 

    float exponent = power(x , y) ; 
    float modulus = (float)x%y; 
    char symbol; 

    if (symbol== '+') 
     printf("The sum of x and y = %f\n", sum); 
    else if (symbol=='-') 
     printf("The difference between x and y = %f\n", difference); 
    else if (symbol=='*') 
     printf("The product of x and y = %f\n", product); 
    else if (symbol=='/') 
     printf("x divided by y = %f\n", quotient); 
    else if (symbol=='^') 
     printf("x multiplied exponentially by y = %f\n", exponent); 
    else if (symbol=='%') 
     printf("x is this much percent of y =%f\n", modulus); 

    return 0; 
    } 
+0

Ow sorry :) Да, я просто скопировал код. –

1

Вы выполняете все расчеты еще до того, как вы инициализируетесь x и y. Неинициализированные переменные имеют неопределенное содержимое, и, следовательно, любой результат, который у вас есть, является неопределенным. Вы рискуете вызвать Undefined Behavior с некоторыми вашими утверждениями (что означает, что невозможно сказать, что ваш код будет делать с какой-либо уверенностью). Выполняйте операции только после того, как вы прочитали значения x и y.

#include <math.h> 

Почему вы должны это включить, если вы не используете какие-либо функции из <math.h>?

float sum = x+ y; 

Сумма (или разность) двух целых чисел всегда будет целым числом. Почему вы используете float здесь?

float quotient = x/y; 

Это делает целочисленное деление и результат преобразуется в float. Таким образом, результаты могут быть не такими, какие вы планируете использовать. Попробуйте преобразовать любой из аргументов в float/double, чтобы получить правильный результат. Кроме того, вы всегда должны проверять деление на ноль. То же самое касается расчета модуля.

float exponent = x^y; 

Там нет оператора экспоненцирования в C. Вы должны использовать библиотечную функцию (например, pow) или свернуть свой собственный.

scanf(" %c", &symbol); 

Почему у вас есть свободное пространство перед вами?

Существует также нет необходимости в этой огромной лестнице if-else. Попробуйте использовать switch.

Вам нужно подобрать хорошую книгу и начать читать, чтобы понять, как работает C.

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