2013-10-21 38 views
0

所以我编写了一个计算毕达哥拉斯三元组的程序,只要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。

+0

调试器说了什么? – pm100

+1

请注意'=用于变量声明,'=='用于比较/条件 –

回答

1

或许以a[0]==a[j+4]开头的四条语句应该使用=而不是==

+0

但是为什么它会给我(99,99,99) – user2229592

+0

在哪里打印出对应于最薄三角形的三个值,还请打印出我的价值。也许它是0. –

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]; // <- here, 
      a[1] = a[j+5]; // <- here, 
      a[2] = a[j+6]; // <- here, 
      a[3] = a[j+7]; // <- and here 

     } 
    //printf("%d\n",a[0]); 
    } 
    printf("The thinnest triangle is formed by (%d , %d , %d)", a[1], a[2], a[3]); 

} 
+0

我做了,但是如果我输入10例如,输出是(99,99,99) – user2229592

+0

您正在将'a [i + 1] = 99.99;'等分配给类型为' int'。该数组将把浮点数解析成'int'类型,即'99'。我认为三角形的安全值可能是181或更高,因为没有二维三角形超过180度。如果你打印出你的角度,你会看到这个。我在你的代码中输入了'10',并收到了'(99,99,99)',角度为'0'。 –