输入球体的半径,调用函数f()计算,然后输出f()函数返回的表面积、体积

C语言题目

编写main()函数,输入球体的半径,调用函数f()计算,然后输出f()函数返回的表面积、体积。编写函数double f(double r,double *s),计算并返回球体表面积及体积。

程序验证:π取3.14159,半径输入2,输出面积为50.26544,体积为33.510293。

解题思路

根据题目要求,可知总共有两个函数,一个是主函数main(),一个是f()。

题目中已经要求于main函数中输入球的半径,故在main函数中定义变量半径r,对于半径r该取什么数据类型?这需要实际分析一下,很显然是可能存在小数点的,故应取double或是float类型,在此我取了double;

再者,需要调用f()函数计算其球体表面积和体积,再根据其给出的f(double r,double *s)了解到传参的类型,前者为r(这也正好应证了其需要定义为double数据类型),后者*s也为double类型,可知在main函数调用此函数的时候是两个参数,前者为r,后者为表面积s(可以在main函数总定义为其它的),后者*s是指针变量,故调用传参应如此:

f(r,&s);

即需要取地址&传入,但是体积却没有提出。

仔细分析,s为表面积,通过指针变量直接修改了其外部变量的值,故无需返回,则表面积计算应为:

*s = 4*PI*pow(r,2);

而f()函数需要一个返回值,很显然就是球体积了。所以main函数中定义double变量体积v:

v=f(r,&s);

其中的s也在main中定义为double,上面已经说了。

然后就是f()返回值return了,这里return的应该是体积,所以用计算公式计算就可以了:

return 4.0/3*3.14159*r*r*r;

完成以上步骤后,整个题目就差不多完成了,其它的就是简单的输入输出问题了,这里不在赘述,可以参考下面本人给出的代码实践理解思考。

注意事项:4/3在上述计算中存在计算结果偏差的问题,是由于4/3会被当做整型计算,舍去了小数部分,故在此处是4.0/3,或者使用强制类型转换(有些深度了,不过理解是必要的)也可:

return (double)4/3*3.14159*r*r*r;

或是将4和3分开,哈哈。

初步代码实践

本人直接用了math库中的函数 pow() 求 r 的 n次方 以进一步求得表面积和体积,PI是宏定义:

#include<stdio.h>
#include<math.h>
#define PI 3.14159
double f(double r,double *s)
{
    *s = 4*PI*pow(r,2);
    return 4.0/3*PI*pow(r,3);
}
int main()
{
    double r,s,v ;
    scanf("%lf",&r);
    v=f(r,&s);
    printf("S=%lf\nV=%lf\n",s,v);
    return 0;
}

代码优化/进阶

待补充……

于评论区征集中……

© 版权声明
THE END
喜欢就点赞支持一下吧,如果觉得不错或日后有所需要,可以收藏文章和关注作者哦。
点赞5打赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容