2012-06-10 116 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

正弦這是一個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

對不起:)是的,我只是複製了代碼。 –

1

你執行所有已初始化,xy甚至在計算。未初始化的變量具有不確定的內容,因此您擁有的任何結果都是不確定的。你冒着用你的一些陳述來調用未定義的行爲的風險(這意味着你無法說出你的代碼將如何確定)。只有在閱讀xy的值後,才能進行操作。

#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的工作方式。