所以我编写了一个计算毕达哥拉斯三元组的程序,只要c低于用户输入的数字。所以我用3个while循环来完成这个。我也想要完成的是在屏幕上打印,具有最薄内角的三元组必须是直角三角形。基本上,我使用正弦定律计算每个三元组的最小角度,然后将其最小值存储在数组中,紧接着数组的三个索引代表其相应的三元组。然后我做了一个方法来比较三元组中的每个角度,并且如果有更大的方法将其存储在阵列的最初四个点中。我目前不担心数组的大小,并已将其声明为9999.所以问题是,当我比较多于一组三元组时,程序不会使数组中的第一组索引等于三重组最小的角度。我同意我使用的程序非常低效且耗时,但是如果您能给我某种解决方案,或者甚至指引我朝着正确的方向行事,我会很感激。谢谢。哦,这里是我的代码,程序没有检测到语句
#include <stdio.h>
#include <math.h>
#define PI 3.14159265
static int a[9999];
int main(void)
{
int side1, side2, hyp, num;
int i = 0;
int j;
side1 = 1;
hyp = 0;
printf("Please enter a number\n");
scanf("%d", &num);
while (side1 < num) {
side2 = 1;
while (side2 < num) {
hyp = 1;
while (hyp < num) {
if (side1 * side1 + side2 * side2 == hyp * hyp && side1 < side2) {
printf("The side lengths are %d,%d,%d\n", side1, side2, hyp);
float angle1 = (asin((float) side1/hyp) * (180/PI));
float angle2 = (asin((float) side2/hyp) * (180/PI));
if (angle1 > angle2) {
a[i] = (int)angle2;
a[i + 1] = side1;
a[i + 2] = side2;
a[i + 3] = hyp;
} else if (angle2 > angle1) {
a[i] = (int)angle1;
a[i + 1] = side1;
a[i + 2] = side2;
a[i + 3] = hyp;
} else {
a[i] = (int)angle1;
a[i + 1] = side1;
a[i + 2] = side2;
a[i + 3] = hyp;
}
i=i+4;
}
hyp++;
}
side2++;
}
side1++;
}
a[i+1]=99.99;
a[i+2]=99.99;
a[i+3]=99.99;
a[i+4]=99.99;
compare(i);
return (0);
}
void compare(int i)
{
int j;
for(j=0;j<i;j=j+4)
{
if (a[0]>a[j+4])
{
a[0]=a[j+4];
a[1]=a[j+5];
a[2]=a[j+6];
a[3]=a[j+7];
}
//printf("%d\n",a[0]);
}
printf("The thinnest triangle is formed by (%d , %d , %d)", a[1], a[2], a[3]);
}
哦,还有一件事情,我之所以取得了一些指标99.9是这样,当回路检查,这是不是最后的三,我不希望有一个错误,因为循环将没有进一步比较以前的三元组。好的,我把它改成了一个等号,但现在输出总是99,99,99。
调试器说了什么? – pm100
请注意'=用于变量声明,'=='用于比较/条件 –