KiKi理解了继承可以让代码重用,他现在定义一个基类shape,私有数据为坐标点x,y, 由它派生Rectangle类和Circle类,它们都有成员函数GetArea()求面积。派生类Rectangle类有数据:矩形的长和宽;派生类Circle类有数据:圆的半径。Rectangle类又派生正方形Square类,定义各类并测试。输入三组数据,分别是矩形的长和宽、圆的半径、正方形的边长,输出三组数据,分别是矩形、圆、正方形的面积。圆周率按3.14计算。
输入三行,第一行为矩形的长和宽,第二行为圆的半径,第三行为正方形的边长。
三行,分别是矩形、圆、正方形的面积。
7 8 10 5
56 314 25
#include<stdio.h>
struct Circle
{
int radicus;
};
struct Square
{
int side_length;
};
struct Recatangle
{
int length;
int width;
struct Square SL; //结构体内衍生新的结构体
};
void GetArea(struct Recatangle * r,struct Circle* x)//解引用输出
{
printf("%d\n",r->length*r->width);
printf("%g\n",3.14*x->radicus*x->radicus);
printf("%d\n",r->SL.side_length*r->SL.side_length);
}
int main()
{
struct Recatangle r={0};
struct Circle x={0};
//struct Square y={0};
scanf("%d %d\n%d\n%d",&r.length,&r.width,&x.radicus,&r.SL.side_length);
GetArea(&r,&x);//指针传参
return 0;
} #include <stdio.h>
struct
{
int length;
int broad;
}oblong;
struct
{
int r;
}cir;
struct
{
int length;
}rec;
int main()
{
const float pi = 3.14;
scanf("%d%d", &oblong.broad, &oblong.length);
scanf("%d", &cir.r);
scanf("%d", &rec.length);
printf("%d\n", oblong.length * oblong.broad);
printf("%g\n", cir.r * cir.r * pi);
printf("%d\n", rec.length * rec.length);
return 0;
} #include <stdio.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b);
int c;
scanf("%d",&c);
int d;
scanf("%d",&d);
printf("%d\n",a*b);
printf("%g\n",3.14*(c*c));
printf("%d\n",d*d);
return 0;
} #include <stdio.h>
float GetArea(int shape, int x, int y, int r) {
float m = 0;
switch (shape ) {
case 1:
m = x * y;
break;
case 2:
m = 3.14 * r * r;
break;
case 3:
m = x * x;
break;
default:
break;
}
return m;
}
int main() {
int x = 0, y = 0, r = 0;
scanf("%d%d", &x, &y);
int re = (int)GetArea(1, x, y, r);
scanf("%d", &r);
float c = GetArea(2, x, y, r);
scanf("%d", &x);
int s = (int)GetArea(3, x, y, r);
printf("%d\n", re);
int cc = (int)c;
if (cc == c) printf("%d\n", cc);
else printf("%g\n", c);
printf("%d\n", s);
return 0;
}