程序不检测if语句

时间:2013-10-21 23:51:55

标签: c arrays if-statement

所以我制作了一个计算毕达哥拉斯三元组的程序,只要c低于用户输入的数字。所以我用3个while循环来完成这个。我还想要完成的是在屏幕上打印,具有最薄内角的三元组必须是直角三角形。基本上,我使用正弦定律计算每个三元组的最小角度,然后将最小的角度存储在一个数组中,紧接着它后,数组的三个索引代表其相应的三元组。然后我做了一个方法来比较三元组中的每个角度,如果一个更大,则将它存储在数组的最初四个点中。我目前并不担心数组大小,并将其声明为9999.所以问题是,当我比较超过1组三元组时,程序不会使数组中的第一组索引等于三元组最小的角度。我同意我使用的程序是非常低效和耗时的,但如果你能给我一些解决方案,甚至指导我正确的方向,我会很感激。谢谢。哦,这是我的代码,

#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。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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]);

}