预测三角形是否可以用C

时间:2015-07-25 14:54:50

标签: c

我是c的初学者。我被赋予了一项任务,以检查用户是否可以用3个角度的输入形成三角形,并且还必须将三角形的类型(例如倾斜,斜角等)打印到屏幕上。我需要分两部分执行此操作,并尝试在主要部分中执行第一部分,同时将第二部分声明为函数。

然而,似乎我不能在函数中使用主函数中使用的相同变量而不再声明它。有没有办法实现这个目标?

我用Google搜索并了解了全局变量,然而,它是否真的适用于这种情况,因为变量的值是用户输入,因此无法在主脚本和其他函数之外执行?

这是我的代码:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int main(){
    double ang1,ang2,ang3;

    printf("This program determines if a triangle can be formed with an input of 3 angles.\n");
    printf("Enter the first angle:  ");
    scanf("%lf",&ang1);
    printf("\nEnter the second angle:  ");
    scanf("%lf",&ang2);
    printf("\nEnter the third angle:  ");
    scanf("%lf",&ang3);

    if (ang1<=0.000000 || ang2<=0.000000 || ang3<=0.000000){//handles any angles below or equal to 0 degrees
        printf("\nError 404: Angle(s) are not above 0 degrees.\nPlease restart the program again\n");
    }
    else{
        if (ang1+ang2+ang3==180.000000){ //checks if angles add up to 180 degrees
            printf("\nA triangle can be formed by this three angles.\n");
        }
        else{
            printf("A triangle cannot be formed by this three angles.\n");
        }
    }
    task2();
}
task2(){ //In a new file
   double ang1,ang2,ang3;

    printf("This program determines if a triangle can be formed with an input of 3 angles.\n");
    printf("Enter the first angle:  ");
    scanf("%lf",&ang1);
    printf("\nEnter the second angle:  ");
    scanf("%lf",&ang2);
    printf("\nEnter the third angle:  ");
    scanf("%lf",&ang3);

    if (ang1<=0.000000 || ang2<=0.000000 || ang3<=0.000000){//handles any angles below or equal to 0 degrees
        printf("\nError 404: Angle(s) are not above 0 degrees.\nPlease restart the program again\n");
    }
    else if (ang1+ang2+ang3==180.000000){ //checks if angles add up to 180 degrees
            printf("\nA triangle can be formed by this three angles.");
        if (ang1==ang2==ang3){ //checks for equilateral triangle
            printf("\nThis is an equilateral triangle.");
            }
        if (ang1==ang2 || ang2==ang3 || ang1==ang3){ //checks for isoceles triangle
            printf("\nThis is an isoceles triangle.");
            }
        if (ang1!=ang2 || ang2!=ang3 || ang3!=ang1){ // chacks for scalene triangle
            printf("\nThis is a scalene triangle.");
        }
        if (ang1==90.000000 || ang2==90.000000 || ang3==90.000000){ //checks for right angles
            printf("\nThis is a right angle.");
        }
        else{
            printf("\nThis is an oblique triangle."); //when no angles are 90 degrees
        }
        if (ang1<90.000000 && ang2<90.000000&& ang3<90.000000){ //checks if all angles are acute
            printf("\nThis is an acute triangle.");
        }
        if (ang1>90.000000 || ang2>90.000000 || ang3>90.000000){ //checks if one angle is obtuse
            printf("\nThis is an obtuse triangle.");

        }

    }
    else {
        printf("A triangle cannot be formed by this three angles.\n");
    }

}

4 个答案:

答案 0 :(得分:5)

将您的角度作为参数传递给被调用的函数:

void task2(double ang1, double ang2, double ang3) {
    // check what's necessary here
}

int main() {
    double ang1, ang2, ang3;
    // read user input
    // check whether angles make a triangle
    task2(ang1, ang2, ang3);
}

答案 1 :(得分:3)

将变量作为参数传递给task2函数。

void task2(double ang1, double ang2, double ang3);
int main (){
    ...
    task2(ang1, ang2, ang3);
}

void task2(double ang1, double ang2, double ang3) {
   ... 
}

答案 2 :(得分:1)

您可以将3个值作为参数传递给第2个函数。 像这样定义:

void task2 (double ang1, double ang2, double ang3){
...
...
}

并在第一个上调用它:

task2(ang1, ang2, ang3);

然后你就不必再要求他们两次,就像你现在正在做的那样。

另外,除非你真的需要全局变量,否则不建议使用全局变量(Are global variables bad?

答案 3 :(得分:1)

正如其他答案所述,将角度作为参数传递。除此之外,我还看到了一些问题:

        if (ang1==ang2 || ang2==ang3 || ang1==ang3){ //checks for isoceles triangle
            printf("\nThis is an isoceles triangle.");
            }

这应该是其他如果。如果它是普通的if,则等边三角形将被声明为等边和等腰。

if (ang1!=ang2 || ang2!=ang3 || ang3!=ang1){ // chacks for scalene triangle
                printf("\nThis is a scalene triangle.");
            }

在这个片段中,每个OR ||应该成为AND&amp;&amp ;.这不仅仅是一对必须是不平等的,而是所有这些。另一种选择就是使用(ang1!=ang2!=ang3)

其他一切看起来都不错。祝你好运!