【发布时间】:2020-03-12 06:33:19
【问题描述】:
??????
我必须创建 2 个结构,即矩形和椭圆形,其中矩形结构包含其长度和宽度,椭圆形结构包含其半短轴和半长轴的长度。然后我必须创建一个以上述两个结构作为其成员的联合形状。然后我必须创建一个通用函数'area',它计算联合的面积(根据传递给函数的参数,矩形或椭圆形)。我目前使用菜单驱动的方法和使用开关案例(问题后附加的代码)处理了上述问题。
我想创建一个智能函数,它以联合作为参数并根据联合中存储的结构计算面积。
代码
typedef struct rect{
int l,b;
}r;
typedef struct oval{
int x,y;
}o;
union shape{
r r1;
o o1;
}sh;
void area(int a);
void main()
{
int ch;
int a;
printf(" 1.Area of rect\n 2.Area of oval\n 3.EXIT");
while(1){
printf("\nEnter your choice: ");
scanf("%d",&ch);
switch(ch)
{
case 1:a=0;
area(a);
break;
case 2:a=1;
area(a);
break;
default:printf("BYE\n");
return;
}
}
}
void area(int a)
{
if(a==0){
printf("Enter Length and Breadth: ");
scanf("%d %d",&sh.r1.l,&sh.r1.b);
int ar=sh.r1.l*sh.r1.b;
printf("%d",ar);
}
else if(a==1){
printf("Enter x and y of Oval: ");
scanf("%d %d",&sh.o1.x,&sh.o1.y);
float ar=sh.o1.x*sh.o1.y;
printf("%.2f",ar*3.14);
}
}
提前致谢!
【问题讨论】:
-
您需要一个具有
type成员的struct和union。type用于指示union的哪个字段有效。 -
@user3386109 你能提供一个使用
type成员的例子吗? -
看看this question。第一个答案有一个我正在谈论的例子(在更大的代码 sn-p 中)。 this question 在主题上有一个变化。
-
@user3386109 良好的链接。但是我可以建议将“第一个答案”更改为“最受好评的答案”吗?您知道的每个用户都可以单独配置答案的排序。
-
如果您想留在纯 C 语言中,另一种方法是在您的
shape结构中添加一个指向area函数的指针。创建椭圆时,只需将此指针指向ovalArea函数;当你创建一个矩形时,让它指向一个rectArea;等等与其他几何。当您需要sh *a的区域时,只需致电a->area(a)。
标签: c gcc struct shapes unions