随机生成几百~几千组数,每组包含三个(x,y)坐标点,x和y的范围在-100~100之间,为随机生成。 判断每一组中的三个点,它们能否组成三角形或者是什么三角形(直角、等边、等腰、普通、等等)。并进行三角形类型统计。 其中判断功能应设计为函数。(c语言)
时间: 2024-12-20 16:31:42 浏览: 5
为了实现这个需求,你可以按照以下步骤在C语言中编写程序:
1. **创建随机坐标生成函数**:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct {
int x;
int y;
} Point;
Point* generate_random_point() {
srand(time(0)); // 设置随机种子
return (Point*)malloc(sizeof(Point));
}
void set_random_point(Point* point) {
point->x = rand() % 201 - 100; // x在-100到100范围内,包括两端
point->y = rand() % 201 - 100; // 同理对于y
}
```
2. **判断三角形类型的函数**:
```c
enum TriangleType {
RIGHT,
ISOSCELES,
EQUILATERAL,
ACUTE,
OBTUSE,
INVALID
};
TriangleType triangle_type(Point p1, Point p2, Point p3) {
int a = abs(p1.x - p2.x);
int b = abs(p1.y - p2.y);
int c = abs(p1.x - p3.x);
if ((a + b > c) && (a + c > b) && (b + c > a)) { // 三角形成立条件
int sides[] = {a, b, c};
sort(sides, sizeof(sides) / sizeof(int));
if (sides[0] == sides[1] && sides[1] == sides[2]) {
return EQUILATERAL; // 等边三角形
} else if (sides[0] == sides[1] || sides[1] == sides[2] || sides[0] == sides[2]) {
return ISOSCELES; // 等腰三角形
}
int angle_a = degrees(acos((double)squares(a) + squares(b) - squares(c) / (2 * a * b)));
int angle_b = degrees(acos((double)squares(b) + squares(c) - squares(a) / (2 * b * c)));
if (angle_a == angle_b) {
return ACUTE; // 直角三角形
} else if (angle_a > angle_b) {
return OBTUSE; // 钝角三角形
} else {
return RIGHT; // 右角三角形
}
} else {
return INVALID;
}
}
```
3. **主函数生成并统计三角形类型**:
```c
int main() {
int num_trials = 1000; // 更改这里调整试验次数
Point points[num_trials][3];
int triangle_counts[6] = {0}; // 初始化三角形类型计数
for (int i = 0; i < num_trials; ++i) {
Point* p1 = generate_random_point();
Point* p2 = generate_random_point();
Point* p3 = generate_random_point();
set_random_point(p1);
set_random_point(p2);
set_random_point(p3);
points[i][0] = *p1;
points[i][1] = *p2;
points[i][2] = *p3;
TriangleType type = triangle_type(points[i][0], points[i][1], points[i][2]);
triangle_counts[type]++;
free(p1);
free(p2);
free(p3);
}
// 输出三角形类型及其计数
printf("三角形类型统计:\n");
for (int j = 0; j < sizeof(triangle_counts) / sizeof(int); ++j) {
printf("%d. %s: %d\n", j+1, triangle_type_names[j], triangle_counts[j]);
}
return 0;
}
```
在这个代码示例中,我们首先定义了一个`Point`结构体和一个枚举用于表示三角形类型。然后生成随机点,并检查它们是否构成有效的三角形以及其类型。最后,我们在`main`函数中生成并统计了指定数量的随机三角形。
注意:由于没有提供预定义的三角形类型名称数组`triangle_type_names`,你需要手动添加一个这样的数组,例如:
```c
const char* triangle_type_names[] = {"Invalid", "Right", "Isosceles", "Equilateral", "Acute", "Obtuse"};
```
阅读全文