요구 사항 :
. 1. 오버로드 기능 원, 사각형, 사다리꼴, 삼각형의 면적을 계산하는 매개 변수가 원 면적 계산에 지정되지 않은 경우, 단위 원의 면적을 계산한다;
2. 프로그램 입력을 구합니다 , 텍스트 파일의 파일 경로 및 파일 경로 이름 : D : \ Test.txt
3. 입력 형식은 다음과 같습니다.
단일 문자 [] 매개 변수 1 [] 매개 변수 2 [] ... <캐리지 리턴 및 줄 바꿈 >
설명 :
(1) 공백으로 구분하고 캐리지 리턴 및 줄 바꿈으로 입력 그룹을 끝낸 다음 파일 끝까지 다음 입력 줄을 읽습니다.
(2) 단일 문자는 모양 유형을 나타냅니다 .C (원) 파라미터 : 반경
R (직사각형) 파라미터 : 길이, 폭
L (사다리꼴) 파라미터 : 위에서 아래, 아래쪽 하단 높은
T (삼각형) 파라미터 : 하단 고
(3)의 입력 변수의 개수를 초과하면 필요한 매개 변수 수의 경우 중복 입력은 무시됩니다. 입력 매개 변수 수가 필요한 매개 변수 수보다 적 으면 이전 입력 값이 호출됩니다 (이전에 입력이있는 경우) 또는 0 (이전에 입력이없는 경우) );
(4) 기본 매개 변수가 주어지면 원 영역의 계산은 단위 원의 영역을 출력합니다 .4
. 출력 결과는 콘솔에 표시되며 형식은 다음과 같습니다.
XX- 모양 영역 = XXXXXX
5. 코드 깔끔하고 표준
6. 동작 결과 다이어그램 첨부, 테스트 케이스, 테스트 목적, 동작 결과 설명 및 분석
C ++ 구현 코드 :
#include <fstream>
#include <sstream>
#include <iostream>
#include <vector>
#include <string>
#include <stdlib.h>
using namespace std;
double Area(double r = 1);//计算圆形的面积
double Area(double length, double width);//计算矩形的面积
double Area(double uSide, double lSide, double height);//计算梯形的面积
double Area(double lSide, double height, int i);//计算三角形的面积,为与计算矩形的
//面积区分开来,增加一个输入参数int i;
int main()
{
char ch[256];
int i;
float result; //最终结果
float backup[20][10]; //用于备份记录每一轮输入的数据
float Num[10]; //存放每一轮float类型数据
int k = 0; //记录轮数
string tempName;
ifstream ifile;
ifile.open("D:\\我学你妹\\大三上\\面向对象程序设计\\实验\\Test.txt");
do
{
ifile.getline(ch, 255); //按行读取字符串
//将得到的字符串按空格切割放入数组
char* p;
vector<string> num; //字符串数组
const char* delim = " ";
p = strtok(ch, delim);
while (p)
{
i = 0;
string s = p;
num.push_back(s);
p = strtok(NULL, delim);
i++;
}
//将数组中的字符转换为float类型
for (int i = 0; i < num.size(); ++i)
{
Num[i] = atof(num[i].c_str());
//std::cout << "b=" << Num[i] << std::endl;
backup[k][i] = Num[i]; //备份
}
k++;
if (ch[0] == 'C')
{
tempName = "圆形";
if (Num[1] != NULL)
{
result = Area(Num[1]);
}
else
{
result = Area();//利用默认参数求单位圆面积
}
}
else if (ch[0] == 'R')
{
tempName = "矩形";
if (Num[2] != NULL)
{
result = Area(Num[1], Num[2]);
}
else
{
result = Area(Num[1], backup[k-2][1]);
}
}
else if (ch[0] == 'L')
{
tempName = "梯形";
if (Num[3] != NULL) //从后往前判断是否有数据输入,如果没有则从备份数据中提取
{
result = Area(Num[1], Num[2], Num[3]);
}
else if (Num[2] != NULL )
{
result = Area(Num[1], Num[2], backup[k - 2][1]);
}
else if (Num[1] != NULL)
{
if (backup[k - 2][2] != NULL)
{
result = Area(Num[1], backup[k - 2][1], backup[k - 2][2]);
}
else
{
result = Area(Num[1], backup[k - 2][1], backup[k - 3][1]);
}
}
}
else if (ch[0] == 'T')
{
tempName = "三角形";
if (Num[2] != NULL)
{
result = Area(Num[1], Num[2],1);
}
else
{
result = Area(Num[1], backup[k - 2][1],1);
}
}
cout << tempName << "面积 = " << result << endl;
} while (ifile.eof() == 0);
ifile.close();
return 0;
}
double Area(double r)
{
return (3.14) * r * r;
}
double Area(double length, double width) {
return length * width;
}
double Area(double uSide, double lSide, double height) {
return (uSide + lSide)*height / 2;
}
double Area(double lSide, double height, int i) {
return lSide * height / 2;
}
입력 데이터 :
프로그램 실행 결과 :