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; }