原题是java,用C语言怎么求这个

①定义一个抽象类 Shape,它有一个计算面积的抽象方法 calArea。 ②定义一个三角形类 Triangle。它有两个属性 n、m,分别表示三角形的底和
高。另外,它必须继承于 Shape 类,并实现 calArea 方法来计算三角形的面积。

③定义一个矩形类 Rectangle。它有两个属性 n、m,分别表示矩形的长和宽。
另外,它必须继承于 Shape 类,并实现 calArea 方法来计算矩形的面积。
④定义一个圆类 Circle。它有一个属性 n,表示圆形的半径。另外,它必须继
承于 Shape 类,并实现 calArea 方法来计算圆形的面积。
⑤分别创建一个三角形对象、一个矩形对象、一个圆形对象,然后将它们存
入到一个数组中,最后将数组中各类图形的面积输出到屏幕上。


public class ShapeTest {

    public static void main(String[] args) {

        Triangle triangle = new Triangle(10, 5);
        Rectangle rect = new Rectangle(10, 20);
        Circle circle = new Circle(10);
        System.out.println("三角形面积:"+triangle.calArea());
        System.out.println("矩形面积:"+rect.calArea());
        System.out.println("圆面积:"+circle.calArea());
    }

}
/*
⑤分别创建一个三角形对象、一个矩形对象、一个圆形对象,然后将它们存
入到一个数组中,最后将数组中各类图形的面积输出到屏幕上。
 * */
abstract class Shape{
    abstract double calArea();
}
class Triangle extends Shape{
    private int n;
    private int m;
    
    public Triangle() {}
    public Triangle(int n,int m) {
        this.n = n;
        this.m = m;
    }
    
    public int getN() {
        return n;
    }

    public void setN(int n) {
        this.n = n;
    }

    public int getM() {
        return m;
    }

    public void setM(int m) {
        this.m = m;
    }

    @Override
    double calArea() {
        
        return n*m/2.0;
    }
    
}
class Rectangle extends Shape{
    private int n;
    private int m;
    
    public Rectangle() {}
    public Rectangle(int n,int m) {
        this.n = n;
        this.m = m;
    }
    
    public int getN() {
        return n;
    }

    public void setN(int n) {
        this.n = n;
    }

    public int getM() {
        return m;
    }

    public void setM(int m) {
        this.m = m;
    }

    @Override
    double calArea() {
        
        return n*m;
    }
    
}
class Circle extends Shape{
    private int n;
    
    public Circle() {}
    public Circle(int n) {
        this.n = n;
    }
    
    public int getN() {
        return n;
    }

    public void setN(int n) {
        this.n = n;
    }

    @Override
    double calArea() {
        
        return Math.PI*n*n;
    }
    
}