0
我想使用几个用户定义的函数来计算各种形状(选择1-4)的总面积。无法获得公式来正确计算
我也希望在程序结束时总结成本(选择5)。
我可以得到第一个(圆)和最后一个(三角形)的形状来计算,但不是中间的两个。
当我尝试计算矩形和圆时,代码刚刚移过它,好像它正在跳过它。
谁能告诉我我做错了什么?
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <cmath>
using namespace std;
//predefined functions
double square(double sqrSide, double sqrArea, double& sqrTot);
double rectangle(double rectLength, double rectWidth, double& rectArea, double& rectTot);
double circle(double radius, double& cirTot, double circleArea);
double triangle(double triBase, double triHeight, double& triTot, double triArea);
//constants
const double MATERIAL_COST = 2.59;
const double LABOR_COST = 32.5;
const double PIE = 3.14;
const double TAX = .0825;
int main()
{
// declare and initialize the variables for the shape
int selection;
double sqrSide = 0;
double sqrArea = 0;
double rectLength = 0;
double rectWidth = 0;
double rectArea = 0;
double radius = 0;
double circleArea = 0;
double triBase = 0;
double triHeight = 0;
double triArea = 0;
double sqrTot = 0;
double rectTot = 0;
double cirTot = 0;
double triTot = 0;
do
{
// get input from user as to what they want to do
cout << "Carpet Area Shape" << endl;
cout << "1. Square" << endl;
cout << "2. Rectangle" << endl;
cout << "3. Circle" << endl;
cout << "4. Triangle" << endl;
cout << "5. Done" << endl;
cout << "Type a number to continue: ";
cin >> selection;
cout << endl;
// loop through the solutions based on the user's selection
switch (selection)
{
case 1: // square
// get the length of the side from the user
cout << "What is the length of the square: ";
cin >> sqrSide;
//get the totals of all the shapes
square(sqrSide, sqrArea, sqrTot);
rectangle(rectLength, rectWidth, rectArea, rectTot);
circle(radius, cirTot, circleArea);
triangle(triBase, triHeight, triTot, triArea);
break;
case 2:// rectangle
// get the length of the side from the user
cout << "What is the length of the rectangle: ";
cin >> rectLength;
cout << "What is the width of the rectangle: ";
cin >> rectWidth;
//get the totals of all the shapes
square(sqrSide, sqrArea, sqrTot);
rectangle(rectLength, rectWidth, rectArea, rectTot);
circle(radius, cirTot, circleArea);
triangle(triBase, triHeight, triTot, triArea);
break;
case 3:// circle
// get the radius of the circle from the user
cout << "What is the radius of the circle: ";
cin >> radius;
//get the totals of all the shapes
square(sqrSide, sqrArea, sqrTot);
rectangle(rectLength, rectWidth, rectArea, rectTot);
circle(radius, cirTot, circleArea);
triangle(triBase, triHeight, triTot, triArea);
break;
case 4:// triangle
// get the length of the base from the user
cout << "What is the base of the triangle: ";
cin >> triBase;
// get the height of the triangle from the user
cout << "What is the height of the triangle: ";
cin >> triHeight;
//get the totals of all the shapes
square(sqrSide, sqrArea, sqrTot);
rectangle(rectLength, rectWidth, rectArea, rectTot);
circle(radius, cirTot, circleArea);
triangle(triBase, triHeight, triTot, triArea);
break;
case 5:// exit
system("cls");
//get the totals of all the sheets before the totals page
square(sqrSide, sqrArea, sqrTot);
// rectangle(rectLength, rectWidth, rectArea, rectTot);
circle(radius, cirTot, circleArea);
triangle(triBase, triHeight, triTot, triArea);
//declare the variable that will be used for the total section
double totalArea;
double carpetCost;
double laborCost;
double subTotal;
double tax;
double totalCost;
//initialize the variable that will be used for the total section
totalArea = sqrTot + rectTot + circleArea + triArea;
carpetCost = totalArea * MATERIAL_COST;
laborCost = (totalArea/100) * LABOR_COST;
subTotal = carpetCost + laborCost;
tax = subTotal * TAX;
totalCost = subTotal + tax;
//the total section
cout << "Total of the area: " << totalArea << endl;
cout << " Carpet Cost: $" << carpetCost << endl;
cout << " Labor Cost: $" << laborCost << endl;
cout << " Sub Total: $" << subTotal << endl;
cout << " Tax: $" << tax << endl;
cout << " Total of charge: $" << totalCost << endl;
break;
default: "You have made an invalid selection. Please choose a number from the list.";
cout << endl;
}
// loop through if the user is still making a valid selection
} while (selection > 0 && selection < 5);
system("pause");
return 0;
}
//user defined function to get the area of the square
double square(double sqrSide, double sqrArea, double& sqrTot)
{
sqrArea = sqrSide * sqrSide;
//get the total area and store it as a variable
sqrTot += sqrArea;
if (sqrTot > 0) {
cout << endl;
cout << " Shape: SQUARE " << endl;
cout << " Side: " << sqrSide << " feet" << endl;
cout << " Area: " << sqrArea << " square feet" << endl;
cout << "Total Area: " << sqrTot << " square feet" << endl;
cout << endl;
}
else
{
cout << endl;
}
return sqrTot;
}
//user defined function to get the area of the rectangle
double rectangle(double rectLength, double rectWidth, double& rectArea, double& rectTot)
{
rectArea = rectLength * rectWidth;
if (rectTot > 0) {
//get the total area and store it as a variable
rectTot += rectArea;
cout << " Shape: RECTANGLE " << endl;
cout << " Length: " << rectLength << " feet" << endl;
cout << " Width: " << rectWidth << " feet" << endl;
cout << " Area: " << rectArea << " square feet" << endl;
cout << "Total Area: " << rectTot << " square feet" << endl;
cout << endl;
}
else
{
cout << endl;
}
return rectTot;
}
//user defined function to get the area of the circle
double circle(double radius, double& cirTot, double circleArea)
{
//get the total area and store it as a variable
circleArea = PIE * radius * radius;
if (cirTot > 0) {
//get the total area and store it as a variable
cirTot += circleArea;
cout << " Shape: CIRCLE " << endl;
cout << " Radius: " << radius << " feet" << endl;
cout << " Area: " << circleArea << " square feet" << endl;
cout << "Total Area: " << cirTot << " square feet" << endl;
cout << endl;
}
else
{
cout << endl;
}
return cirTot;
}
//user defined function to get the area of the triangle
double triangle(double triBase, double triHeight, double& triTot, double triArea)
{
triArea = (triBase*triHeight)/2;
// get the total area and store it as a variable
triTot += triArea;
if (triTot > 0) {
//get the total area and store it as a variable
triTot += triArea;
cout << " Shape: TRIANGLE " << endl;
cout << " Base: " << triBase << " feet" << endl;
cout << " Height: " << triHeight << " feet" << endl;
cout << " Area: " << triArea << " square feet" << endl;
cout << "Total Area: " << triTot << " square feet" << endl;
cout << endl;
}
else
{
cout << endl;
}
return triTot;
}
为什么使用'double'精度类型(它给出了15个有效数字的精度),但'PIE'[原文如此]的近似值只有3位有效数字? – Bathsheba
这是很多代码。难道你不能请尝试创建一个[** Minimal **,Complete和Verifiable示例](http://stackoverflow.com/help/mcve)并向我们展示?还提供一些导致问题的示例输入,以及预期的和实际的输出。 –
您还应该学习如何使用调试器。然后,您可以逐行执行代码,同时监视变量及其值。使用调试器应该很快告诉你问题是什么。 –