}
}
return 0;
}
}
lect j(n);
cout< 10. 计算图形面积和周长(抽象类 ) a) 题目描述 一个矩形可用两个点表示,一个三角形可用三个点来表示,一个圆可用一个点和一个半径来表示。 请实现一个抽象类Shape及接口方法(double area();double perimeter())和三个派生类Rect、Triagle、Circle,通过构造三种派生类的对象的方式来计算给出的矩形、三角形和圆形的面积area和周长perimeter。 b) 输入描述 有多行输入,第一行为几何形状的数目n,其余n行,每行代表一个形状,其中每行第一个字符串为几何形状字符串,矩形为Rect,三角形为Triangle,圆形为Circle(请注意大小写)。其余为相应形状的几何数据数字,之间用空格分隔(每个点用x,y两个坐标表示,x坐标在前,y坐标在后),如 Rect x1 y1 x2 y2 Circle x y r Triangle x1 y1 x2 y2 x3 y3 c) 输出描述 有多行结果,每行为对应几何形状的面积和周长(PI=3.14159,保留到小数点后5位),两个数字之间用一个空格分隔. d) 样例输入 3 Rect 0 0 2 4 Circle 0 0 3 Triangle 0 0 2 2 2 0 e) 样例输出 8.00000 12.00000 28.27431 18.84954 2.00000 6.82843 参考程序: /******************************************************** 2012 IMIS C++ Practice 4 (Object oriented programming) Task 10 Programmed by YE Huanzhuo Lakeside Nov.28, 2012 ********************************************************/ #include const double PI=3.14159; class shape { virtual double area()=0; virtual double perimeter()=0; }; class Rect: public shape { double x1, y1, x2, y2; public: Rect(double x1, double y1, double x2, double y2) : x1(x1), y1(y1), x2(x2), y2(y2) {} double area() { return fabs((x1-x2)*(y1-y2)); } double perimeter() { return 2*(fabs(x1-x2)+fabs(y1-y2)); } }; class Triangle: public shape { double x1, y1, x2, y2, x3, y3; public: Triangle(double x1, double y1, double x2, double y2, double x3, double y3) : x1(x1), y1(y1), x2(x2), y2(y2), x3(x3), y3(y3) {} double area() { return fabs(x1*y2+x2*y3+x3*y1-x3*y2-x2*y1-x1*y3)/2; } double perimeter() { return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))+sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3))+sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1)); } }; class Circle: public shape { double x, y, r; public: Circle(double x, double y, double r):x(x), y(y), r(r) {} double area() { return PI*r*r; } double perimeter() { return 2*PI*r; } }; int main() { double x1, y1, x2, y2, x3, y3, r; char s[10]; int n, i; cin>>n; cout< } } return 0; { } cin>>x1>>y1>>x2>>y2>>x3>>y3; Triangle T(x1, y1, x2, y2, x3, y3); cout< 11. 简单高精度计算 a) 题目描述 整型是经常使用的数据类型, 常用的32位整数表示精度不超过10位十进制整数。在很多运算中往往需要更高的精度,这时就必须自己编程突破系统已经定义数据类型的限制。 一个可行的方法是采用一个数组表示一个大的整数,每一个数组元素表示这个大整数的一位。例如定义一个数组a[30],其各个元素分别为:9,8,7,6,5,4,3,2,1,0,9,8,7,6,5,4,3,2,1,0,9,8,7,6,5,4,3,2,1,0,则可以用来表示30位十进制整数987654321098765432109876543210。 请你编写程序(不考虑负数): i. 定义一个非负整数类BigInteger,在类中使用动态分配存储空间来存放整数的 各个数位,并实现非负大整数的 1. 初始化、复制、赋值、输入、显示; 2. 关系运算 3. 加法、减法(求两个操作数之差的绝对值,结果非负)、乘法运算; ii. 编写主程序利用非负整数类BigInteger完成各类运算,并输出结果 b) 输入描述 输入有多组样例,每组样例由三行组成,第一行为操作数a,第二行为运算符op,第三行为操作数b。其中a,b均为位数少于1000位的非负整数,op为下列运算之一:+、-、*、==、!=、>、>=、<、<=(其中减法定义为求两个操作数之差的绝对值) c) 输出描述 计算a op b的结果(算术运算的结果少于1000位),针对每组输入样例输出一行。输出的算术运算结果要符合一般的数学表示习惯(例如,最高有效位的左边不能有前导的’0’),输出的关系运算结果以1表示真,0表示假。 d) 样例输入 7798422038462027206418091570017038214954325158287284501126509864550 + 6644654478671 154455686168668608742 - 570620325535649714352477856211346877690604957811744787310 13806496961264274782575849549700031 * 104278462284302057284605155421424724 261800913745549144387657570462003847824 == 30945390762104982326 61806052973400618783421149497858757508903905734886054976023347098394999878472342427167682 != 550319305638993185926221 33485160132480328875209155849017229 > 48706055658499024618501666452069820990222680543730745561173 223255953006515880343449832824383387870686263650800589681213456312563835423612992344693965267757962348828739 >= 8459231671237698245612414056673245577830476701292941849484054454038774 712609293697698786056941590556285144547080247621820218851422961751623938783603762 < 1806413112049773972123323007151923718757730213899815509196276039659381252042527294867590492 136564321671754460256400172008142164350078857012092315307 <= 907145092560931574534094350840314027165670909824872 e) 样例输出 7798422038462027206418091570017038214954325158287284507771164343221 570620325535649714352477856211346877536149271643076178568 1439720272653527639853476844171700671299791197920011931807664846966444 0 1 0 1 1 0 参考程序: /******************************************************** 2012 IMIS C++ Practice 4 (Object oriented programming) Task 11 Programmed by YE Huanzhuo Lakeside Nov.28, 2012