1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > c语言切蛋糕问题程序设计报告 c语言切蛋糕问题 问题如图。望大神指教。

c语言切蛋糕问题程序设计报告 c语言切蛋糕问题 问题如图。望大神指教。

时间:2023-03-25 12:13:49

相关推荐

c语言切蛋糕问题程序设计报告 c语言切蛋糕问题 问题如图。望大神指教。

#include // 获取圆心角的一半

float get_half_circle_angle(float r, float h)

{

if(h>r || h<=0)

{

return 0;

}

float cos_value = (r-h)/r;

return acos(cos_value);

}

// 获取弦长的一半

float get_half_arc(float r, float h)

{

return sqrt(r*r - (r-h)*(r-h));

}

// 获取圆的面积

float get_circle_area(float r)

{

return M_PI*r*r;

}

// 获取弧的面积

float get_arc_area(float r, float h)

{

float half_arc = get_half_arc(r, h);

float circle_angle = 2 * get_half_circle_angle(r, h);

float area = 0.5*circle_angle*r*r-half_arc*sqrt(r*r-half_arc*half_arc);

return area;

}

int main()

{

// 变量定义

float r = 1;

float start = 0, end = 1, middle;

float flag=0, flag1=0, flag2=0, area=0, arc_area=0, arc_area1=0, arc_area2=0;

float ratio;

// 输入比率

printf("please input the ratio:\n");

scanf("%f", &ratio);

getchar();

// 将比率转化为大于1

if(ratio<1){

ratio = 1/ratio;

}

// 获取圆的面积

area = get_circle_area(r);

// 初始化迭代值

middle = (start + end) / 2;

arc_area1 = get_arc_area(r, start);

arc_area2 = get_arc_area(r, end);

if(arc_area1==0)

{

flag1=10000000;

}else{

flag1 = (area-arc_area1)/arc_area1;

}

flag2 = (area-arc_area2)/arc_area2;

// 二分法取值

while(flag1>=ratio && flag2<=ratio){

arc_area = get_arc_area(r, middle);

flag = (area-arc_area)/arc_area;

printf("flag1=%f, flag2=%f, flag=%f, middle=%f\n", flag1, flag2, flag, middle);

if(flag>ratio)

{

if((flag-ratio)<0.0001)

{

break;

}

start = middle;

arc_area1 = get_arc_area(r, start);

flag1 = (area-arc_area1)/arc_area1;

}else{

if((ratio-flag)<0.0001)

{

break;

}

end = middle;

arc_area2 = get_arc_area(r, end);

flag2 = (area-arc_area2)/arc_area2;

}

middle = (start + end) / 2;

}

// 输出结果

printf("arc_area: %f; middle:%f, arc:%f; \n", get_arc_area(r, middle), middle, 2* get_half_arc(r, middle));

return 0;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。