C语言程序设计 算一下在100到1314355之间,任意三位数是否构成三角形,如果构成,数数一共有多少次,并判断它是不是,等腰三角形,等边三角形和直角三角形,并打印,例如:345,中3,4,5构成三角形,且为直角三角形
时间: 2024-10-27 22:09:14 浏览: 12
在C语言中,我们可以编写一个程序来解决这个问题。首先,我们需要检查三个数字是否能组成一个有效的三角形,即满足三角形三边之间的关系(任意两边之和大于第三边)。接着,我们根据条件判断它是等腰、等边还是直角三角形:
1. 判断是否构成三角形:
- 计算最大值减去最小值的差,看结果是否小于等于中间值。
2. 判断类型:
- 如果所有边相等,则是等边三角形。
- 如果只有两个边相等,且它们加起来等于第三个边,则是等腰三角形。
- 对于直角三角形,可以计算两个较小边的平方和是否等于最长边的平方。如果成立,则是直角三角形。
下面是一个简单的C语言示例函数,用于完成这个任务:
```c
#include <stdio.h>
#include <stdbool.h>
bool is_triangle(int a, int b, int c) {
if (a + b > c && a + c > b && b + c > a)
return true;
else
return false;
}
bool is_right_triangle(int a, int b, int c) {
if ((a * a) == (b * b) + (c * c) || (b * b) == (a * a) + (c * c) || (c * c) == (a * a) + (b * b))
return true;
else
return false;
}
void check_triangle(int num) {
int digits[3];
int sum = 0;
// 提取每一位数字
for (int i = 0; i < 3; ++i) {
digits[i] = num % 10;
sum += digits[i];
num /= 10;
}
// 排序
int sorted[3];
for (int i = 0; i < 3; ++i) {
sorted[i] = digits[i];
}
qsort(sorted, 3, sizeof(sorted[0]), compare);
bool is_valid = is_triangle(sorted[0], sorted[1], sorted[2]);
int types[] = {sorted[0], sorted[1], sorted[2]};
if (is_valid) {
printf("%d-%d-%d构成三角形,", types[0], types[1], types[2]);
if (sorted[0] == sorted[1] && sorted[1] == sorted[2]) {
printf("是等边三角形\n");
} else if (sorted[0] == sorted[1] || sorted[1] == sorted[2] || sorted[0] == sorted[2]) {
printf("是等腰三角形\n");
} else if (is_right_triangle(sorted[0], sorted[1], sorted[2])) {
printf("是直角三角形\n");
} else {
printf("不是特殊类型的三角形\n");
}
} else {
printf("%d-%d-%d不构成三角形\n", types[0], types[1], types[2]);
}
}
// 比较函数用于排序
int compare(const void* a, const void* b) {
return (*(int*)a - *(int*)b);
}
int main() {
int start = 100, end = 1314355;
int count = 0;
for (int i = start; i <= end; ++i) {
check_triangle(i);
count++;
}
printf("\n在%d到%d范围内,有效三角形的数量是:%d\n", start, end, count);
return 0;
}
```
运行此程序,它会遍历指定范围内的每个三位数,检查其是否构成三角形并分类,同时统计有效三角形的数量。
阅读全文