首页 > 解决方案 > 我的总面积和面积公式没有计算

问题描述

所以在我正在做的项目中,我有一个以原点为中心的圆圈,我需要通过它切割一条垂直线。我正在尝试计算圆的较小比例的面积;我的输入是半径和左右手的比例。现在我只是想确保它正确地进行我的计算,并且它正在正确地计算比率,但它根本不计算比率区域。请帮忙

int main(){
float radius, left, right, total;
float ratio;
float ratioArea = ratio*pi*pow(radius, 2);

scanf("%d%d%d", &radius, &left, &right);

if(left == right)
{
    printf("left and right are equal");
}

// do area calculations with righthand side
else if(left > right)
{
    ratio = right / (right+left);
    ratioArea = ratio * pi * pow(radius, 2);

    printf("ratio= %.6f, area = %f\n", ratio, ratioArea);

}

// do area calculations with lefthand side
else if(left < right)
{   
    ratio = left / (left + right);
    ratioArea = ratio*pi*pow(radius, 2);

    printf("ratio = %.6f, area = %f\n", ratio, ratioArea);
}


return 0;

}

标签: csyntaxdecimalformulacalculation

解决方案


第一个问题在这里:

scanf("%d%d%d", &radius, &left, &right);

%d读取一个整数并接受一个int *,而不是一个float *。您需要%f扫描一个float.

您还需要检查是否scanf成功:

if (scanf("%f%f%f", &radius, &left, &right) != 3) {
    // handle error here
    exit(EXIT_FAILURE);
}

scanf返回成功扫描的项目数。如果返回值不是 3,则至少有一个变量未设置。


第二个(大部分是无害的)问题:

float radius, left, right, total;
float ratio;
float ratioArea = ratio*pi*pow(radius, 2);

您正在ratioArea根据 和 的值ratio进行radius初始化,此时尚未初始化。我很确定这段代码有未定义的行为。

只需删除初始化并float ratioArea;改为执行即可;您已经ratioArea在下面使用它的每个分支中进行了设置。


推荐阅读