2013-02-23 72 views
2

此程序針對每個條件運行所有函數,而且每個條件只應運行一個函數。爲什麼?我應該編寫函數來計算球體,圓柱體和圓錐體的體積和表面積:我無法弄清楚它是如果混亂起來的if語句,還是函數本身。 該程序的理想輸出如下:如何使用在C++中具有多個參數的if語句調用多個函數

選擇形狀(1)球體(2)圓柱體(3)圓錐體(q)退出:1 選擇計算(1)體積(2)表面積:1 輸入球體的半徑:球體的5.5 體積是696.91

選擇形狀(1)球(2)筒(3)錐形(q)中退出:1 選擇一個計算(1)體積(2 )表面積:2 球體半徑輸入:5.5 球體表面積爲380.133

選擇一個形狀(1)體積(2)圓柱體(3)圓錐體(q)退出:2 汽缸是399.139

選擇形狀(1)球(2)筒(3)錐形(q)中退出:2 選擇一個計算(1)體積(2)表面積:2 輸入氣缸的半徑:5.5 輸入氣缸的高度:氣缸的4.2 表面積是335.208

選擇形狀(1)球(2)筒(3)錐形(q)中退出:3 選擇一個小樣utation(1)體積(2)表面積:1 輸入錐體的半徑:5.5 輸入錐體的高度:4.2 卷錐體的是133.046

選擇形狀(1)球(2)筒(3)錐(q)退出:3 選擇一個計算(1)體積(2)表面積:2 輸入錐體的半徑:5.5 輸入錐體的高度:4.2 錐形的表面積是214.607

選擇形狀(1)球體(2)圓柱體(3)圓錐體(q)退出:q

再見!

#include <iostream> 
#include <math.h> 

using namespace std; 

double sphere_volume(double radius); 
double sphere_surface_area(double radius); 
double cylinder_volume(double radius, double height); 
double cylinder_surface_area(double radius, double height); 
double cone_volume(double radius, double height); 
double cone_surface_area(double radius, double height); 

int main() 
{ 
double entHeight; 
double entRadius; 
char shapeCall; 
char compCall; 

cout << "Select a Shape (1) sphere (2) cylinder (3) cone (q) quit: "; 
cin >> shapeCall; 
cout << "Select a Computation (1) volume (2) surface area: "; 
cin >> compCall; 

    if (shapeCall == 1) 
    { 
     if (compCall == 1) 
      cout << "Enter Radius: "; 
      cin >> entRadius; 
      cout << sphere_volume (entRadius) << endl; 
    } 
    if (shapeCall == 1) 
    { 
     if (compCall == 2) 
      cout << "Enter Radius: "; 
      cin >> entRadius; 
      cout << sphere_surface_area (entRadius) << endl; 
    } 
    if (shapeCall == 2) 
    { 
     if (compCall == 1) 
      cout << "Enter Radius: "; 
      cin >> entRadius; 
      cout << "Enter Height: "; 
      cin >> entHeight; 
      cout << cylinder_volume (entRadius, entHeight) << endl; 
    } 
    if (shapeCall == 2) 
    { 
     if (compCall == 2) 
      cout << "Enter Radius: "; 
      cin >> entRadius; 
      cout << "Enter Height: "; 
      cin >> entHeight; 
      cout << cylinder_surface_area (entRadius, entHeight) << endl; 
    } 
    if (shapeCall == 3) 
    { 
     if (compCall == 1) 
     cout << "Enter Radius: "; 
     cin >> entRadius; 
     cout << "Enter Height: "; 
     cin >> entHeight; 
     cout << cone_volume (entRadius, entHeight) << endl; 
    } 
    if (shapeCall ==) 
    { 
     if (compCall == 2) 
     cout << "Enter Radius: "; 
     cin >> entRadius; 
     cout << "Enter Height: "; 
     cin >> entHeight; 
     cout << cone_surface_area (entRadius, entHeight) << endl; 
    } 

return 0; 
} 


double sphere_volume(double radius) 
{ 
    double sphereVolume; 
    sphereVolume = 3.14 * pow(radius, 3) * 4/3; 
    return sphereVolume; 
} 
double sphere_surface_area(double radius) 
{ 
    double sphereSurfArea = 4 * 3.14 * pow(radius, 2); 
    return sphereSurfArea; 
} 
double cylinder_volume(double radius, double height) 
{ 
    double cylinderVolume = 3.14 * pow (radius, 2) * height; 
    return cylinderVolume; 
} 
double cylinder_surface_area(double radius, double height) 
{ 
    double cylinderSurfArea = 2 * 3.14 * pow (radius, 2) + 2 * 3.14 * radius * height; 
    return cylinderSurfArea; 
} 
double cone_volume(double radius, double height) 
{ 
    double coneVolume; 
    coneVolume = (1/3) * 3.14 * pow (radius, 2) * height; 
    return coneVolume; 
} 
double cone_surface_area(double radius, double height) 
{ 
    double coneSurfArea = 3.14 * pow (radius, 2) + 3.14 * sqrt(pow (radius, 2) + pow (height, 2)); 
    return coneSurfArea; 
} 
+0

如果您提供了真實的代碼並對其進行一致格式化,這將會很有幫助。 – 2013-02-23 09:41:45

+0

我也試過這種格式,它也不起作用 – 2013-02-23 10:00:36

+0

什麼是「這種格式」?格式化可以自動化,但如果這不是一個選項,則需要手動完成。 – 2013-02-25 06:41:22

回答

1

if語句預計將在以下格式

if (expression) 
    statement; 

在這expression計算結果爲非零數,或true的情況下,statement被執行。在其他任何事件中,事實並非如此。

出現的原因就好像每個條件的計算結果都是真實的一樣,是因爲您改變了在整個代碼中格式化if語句的方式。您似乎經常使用以下格式來處理條件。

if (compCall == 1) 
     cout << "Enter Radius: "; 
     cin >> entRadius; 
     cout << sphere_volume (entRadius) << endl; 

請考慮if語句只與直接跟隨的語句關聯。因此,該代碼相當於

if (compCall == 1) 
{ 
    cout << "Enter Radius: "; 
} 
cin >> entRadius; 
cout << sphere_volume (entRadius) << endl; 

你遇到的問題是不能正確封閉的條件語句在大括號中出現。它仍然可以被認爲是有效的代碼,但如果使用不正確,它可能會產生非常意想不到的結果。在這種情況下,下面的代碼將產生您期望的結果,因爲與條件相關的語句被正確地括在大括號中。

if (compCall == 1) 
{ 
    cout << "Enter Radius: "; 
    cin >> entRadius; 
    cout << sphere_volume (entRadius) << endl; 
} 
+0

我同意你的回答,只是在表達式計算爲'false'或'0'或'null'時條件爲false。在其他所有情況下,C語言的評估結果均爲真。所以即使'5'被評估爲真或任何負數。但我猜你認爲這個'!0 == 1'的計算結果爲true,'!0 == 2'的計算結果爲false。我會在你的回答中編輯這個。 – 2017-03-09 07:53:09

相關問題