#include <iostream> using namespace std; #include<string> #include"time.h" #include"math.h" #define PI 3.1415926 //请在begin和end之间填入代码 /**************begin*****************/ class Shape { public: virtual double area() = 0; }; class Circle : public Shape { public: Circle(double r) : radius(r) {} virtual double area() { return PI * radius * radius; } private: double radius; }; class Square : public Shape { public: Square(double w) : width(w) {} virtual double area() { return width * width; } private: double width; }; class Rectangle : public Shape { public: Rectangle(double w, double h) : width(w), height(h) {} virtual double area() { return width * height; } private: double width, height; }; class Trapezoid : public Shape { public: Trapezoid(double eu, double eb, double h) : up(eu), bottom(eb), height(h) {} virtual double area() { return (up + bottom) * height / 2; } private: double up, bottom, height; }; class Triangle : public Shape { public: Triangle(double e1, double e2, double e3) : edge1(e1), edge2(e2), edge3(e3) {} virtual double area() { double p = (edge1 + edge2 + edge3) / 2; return sqrt(p * (p - edge1) * (p - edge2) * (p - edge3)); } private: double edge1, edge2, edge3; }; /****************end**************/ int main() { double r,h,e1,e2,e3,eup,ebo,w; cin>>r; Circle c(r); cin>>w; Square sq(w); cin>>e1>>e2>>e3; Triangle tr(e1,e2,e3); cin>>w>>h; Rectangle re(w,h); cin>>eup>>ebo>>h; Trapezoid trap(eup,ebo,h); double sum=0; /*****************begin*******************/ Shape *shape[5]; for (int i = 0; i < 5; i++) { sum += shape[i]->area(); } cout << "area sum=" << sum << endl; /******************end*****************/ cout<<"area sum="<<sum; }以上代码有什么错
时间: 2023-07-05 14:34:14 浏览: 115
代码中存在一个错误,即在计算总面积之前,需要将各个图形的指针数组shape赋值。此时,shape数组中各元素的指针应指向各个图形的实例。在当前代码中,没有为shape数组中的元素分配内存空间,也没有将shape数组中的元素赋值为各个图形类型的实例。因此,在计算总面积时,程序会出现错误。
请将以下代码:
```
Shape *shape[5];
```
修改为:
```
Shape *shape[5] = {&c, &sq, &tr, &re, &trap};
```
这样,就可以将shape数组中的元素赋值为各个图形类型的实例。修改后的完整代码如下:
相关问题
#include<iostream> #include<iomanip> #include<ctime> #include<math.h> #define pi 3.1415926 using namespace std; int main() {float r, s; cin >> r; s = (4 / 3) * pi * r * r * r; cout<<fixed<<setprecision(3)<<s; },帮我看看这段代码
这段代码的功能是计算球的体积。代码的逻辑基本正确,不过有两个问题需要注意:
1. `s` 变量的类型应该为 `float` 或者 `double` 类型,而不是 `int` 类型。因为球的体积一般是一个小数,用 `int` 类型会导致精度损失。
2. 在计算公式中,分数 `4 / 3` 应该是一个小数,但是由于 `4` 和 `3` 都是整数,所以计算结果也会是整数,即 `4 / 3 = 1`。正确的写法应该是 `4.0 / 3.0` 或者 `4 / 3.0` 或者 `4.0 / 3`,这样可以保证计算结果为小数。
修改后的代码如下:
```c++
#include<iostream>
#include<iomanip>
#include<ctime>
#include<math.h>
#define pi 3.1415926
using namespace std;
int main() {
float r, s;
cin >> r;
s = (4.0 / 3.0) * pi * r * r * r;
cout << fixed << setprecision(3) << s;
}
```
这样就可以正确计算球的体积,并保留三位小数输出了。
阅读全文