大家帮忙看一下谢谢!
实验目的:从键盘输入三角形的6个顶点坐标,实现三角形周长和面积的计算。要求:
(1)定义平面直角坐标系的点结构体类型,坐标值为整形;
(2)定义三角结构体类型,分量为3个顶点分量(点结构体类型),周长(浮点型),面积(浮点型);
(3)主函数中定义三角结构体类型数组包含3个三角形元素;
(4)定义函数,实现三角形结构体数组的输入,参数为指向三角结构体类型的指针变量;
(5)定义函数,实现三角形周长和面积的计算,参数为指向三角结构体类型的指针变量;
(6)定义函数,实现3个三角形中面积最大三角形的查找,并输出其坐标信息,参数为指向三角结构体类型的指针变量。
下面是我写的代码和报错,不知道怎么修改
给个代码可以吗,我在编译器里帮你改
#include <stdio.h>
#include <math.h>
typedef struct//坐标系的结构体申明
{
int x;
int y;
}p_1;//把x,y的值赋给变量p1,p1={x,y},p1为全局变量
typedef struct//三角形结构体类型申明
{
p_1 c1;//调用变量p1
p_1 c2;
p_1 c3;
float len;
float area;
}p_2;//p2={c1,c2,c3,len,area}
void triangle_input(p_2 *p);
float distance(p_1 c1,p_1 c2);
void len_area(p_2 *p);
int max_area(p_2 *p);
int main()
{
p_2 t[3] = {{{0, 0}, {0, 1}, {1, 0}, 0, 0},
{{0, 0}, {0, 2}, {2, 0}, 0, 0},
{{0, 0}, {0, 3}, {3, 0}, 0, 0}};//定义三角结构体类型数组包含3个三角形元素
int idx;
triangle_input(t);
len_area(t);
idx=max_area(t);
printf("面积最大的三角形坐标为;(%d,%d),(%d,%d),(%d,%d),周长为:%0.3f,面积为:%0.3f\n",
t[idx].c1.x,t[idx].c1.y,t[idx].c2.x,t[idx].c2.y,t[idx].c3.x,t[idx].c3.y,t[idx].len,t[idx].area);
return 0;
}
void triangle_input(p_2 *p)//实现三角形结构体数组的输入,参数为指向三角结构体类型的指针变量
{
int i;
printf("请从键盘输入三个三角形的顶点坐标:\n");
for(i=0;i<3;i++)
{
scanf("%d%d%d%d%d%d",&((p+i)->c1.x),&((p+i)->c1.y),&((p+i)->c2.x),&((p+i)->c2.y),&((p+i)->c3.x),&((p+i)->c3.y));
// 通过结构指针间接访问成员值访问的一般形式:(*结构指针变量). 成员名 或 结构指针变量 -> 成员名
}
}
float distance(p_1 c1,p_1 c2)//定义求边长的公式
{
float d;
d=sqrt((c2.x-c1.x)*(c2.x-c1.x)+(c2.y-c1.y)*(c2.y-c1.y));
return d;
}
void len_area(p_2 *p)//定义求边长和面积的函数
{
int i;
float d1,d2,d3,s;
for(i=0;i<3;i++)//用循环来控制计算三个三角形的边长
{
d1=distance(p->c1,p->c2);
d2=distance(p->c1,p->c3);
d3=distance(p->c2,p->c3);
s=(d1+d2+d3)/2;//\海伦公式计算三角形的面积公式:s = (a + b + c) / 2,area = sqrt(s * (s - a) * (s - b) * (s - c))
p->len=d1+d2+d3;
p->area=sqrt(s*(s-d1)*(s-d2)*(s-d3));
printf("三角形的周长为%0.3f,面积为%0.3f\n",p->len,p->area);
}
}
int max_area(p_2 *p)//实现3个三角形中面积最大三角形的查找,并输出其坐标信息,参数为指向三角结构体类型的指针变量
{
int idx=0;
int i;
for(i=1;i<3;i++);
{
if(((p+idx)->area) < ((p+i)->area))
{
idx=i;
}
}
return idx;
}
改了一些,你看看能不能编译
修改完善如下,改动处见注释“修改”,供参考:
#include <stdio.h>
#include <math.h>
typedef struct//坐标系的结构体申明
{
int x;
int y;
}p_1;//把x,y的值赋给变量p1,p1={x,y},p1为全局变量
typedef struct//三角形结构体类型申明
{
p_1 c1;//调用变量p1
p_1 c2;
p_1 c3;
float len;
float area;
}p_2;//p2={c1,c2,c3,len,area}
void triangle_input(p_2 *p);
float distance(p_1 c1,p_1 c2);
void len_area(p_2 *p);
int max_area(p_2 *p); //void max_area(p_2 *p); 修改
int main()
{
p_2 t[3] = {{{0, 0}, {0, 1}, {1, 0}, 0, 0},
{{0, 0}, {0, 2}, {2, 0}, 0, 0},
{{0, 0}, {0, 3}, {3, 0}, 0, 0}};//定义三角结构体类型数组包含3个三角形元素
int idx;
triangle_input(t);
len_area(t);
idx=max_area(t);
printf("面积最大的三角形坐标为;(%d,%d),(%d,%d),(%d,%d),周长为:%0.3f,面积为:%0.3f\n",
t[idx].c1.x,t[idx].c1.y,t[idx].c2.x,t[idx].c2.y,t[idx].c3.x,t[idx].c3.y,t[idx].len,t[idx].area); //修改
//t[idx].c1.x,t[idx].c1.y,t[idx].c2.x,t[idx].c2.y,t[idx].c3.x,t[idx].c3.y,t[idx].len,t[idx].area,);
return 0;
}
void triangle_input(p_2 *p)//实现三角形结构体数组的输入,参数为指向三角结构体类型的指针变量
{
int i;
printf("请从键盘输入三个三角形的顶点坐标:\n");
for(i=0;i<3;i++)
{
scanf("%d%d%d%d%d%d",&((p+i)->c1.x),&((p+i)->c1.y),&((p+i)->c2.x),&((p+i)->c2.y),&((p+i)->c3.x),&((p+i)->c3.y));//修改
//scanf("%d%d%d%d%d%d",&((p+i)->c1.x),&((p+i)->c1.y),&((p+i)->c2.x),&((p+i)->c2.y),&((p+i)->c3.x),&((p+i)->3.y);
// 通过结构指针间接访问成员值访问的一般形式:(*结构指针变量). 成员名 或 结构指针变量 -> 成员名
}
}
float distance(p_1 c1,p_1 c2)//定义求边长的公式
{
float d;
d=sqrt((c2.x-c1.x)*(c2.x-c1.x)+(c2.y-c1.y)*(c2.y-c1.y));
return d;
}
void len_area(p_2 *p)//定义求边长和面积的函数
{
int i;
float d1,d2,d3,s;
for(i=0;i<3;p++,i++)//修改
// for(i=0;i<3;i++)
{
d1=distance(p->c1,p->c2);
d2=distance(p->c1,p->c3);
d3=distance(p->c2,p->c3);
s=(d1+d2+d3)/2;//\海伦公式计算三角形的面积公式:s = (a + b + c) / 2,area = sqrt(s * (s - a) * (s - b) * (s - c))
p->len=d1+d2+d3;
p->area=sqrt(s*(s-d1)*(s-d2)*(s-d3));
printf("三角形的周长为%0.3f,面积为%0.3f\n",p->len,p->area);//修改
//printf("三角形的周长为%0.3f,面积为%0.3f\n",p.len,p.area);
}
}
int max_area(p_2 *p)//实现3个三角形中面积最大三角形的查找,并输出其坐标信息,参数为指向三角结构体类型的指针变量
{
int idx=0;
int i;
for(i=1;i<3;i++) //; 多了分号';' 修改
{
if(((p+idx)->area) < ((p+i)->area))
{
idx=i;
}
}
return idx;
}