跳到主要内容

计算圆柱体的表面积和体积——利用%g对输出进行控制

· 阅读需 2 分钟
El Syzomnia

题目

题面描述

编写程序,键盘输入圆柱体的底面半径和高,计算并输出圆柱体的表面积和体积(圆周率按3.14计)。

输入格式:

在一行中输入圆柱体的底面半径和高。

输出格式:

对每一组输入,在两行中分别输出表面积S和体积V。

输入样例:

在这里给出一组输入。例如:

1 1.21

输出样例:

在这里给出相应的输出。例如:

S=13.8788
V=3.7994

关键点 —— %g

借助 %g 这一格式控制符进行自适应输出,以解决题目中没有规定输出浮点数精度的问题。

   printf("S=%g\nV=%g", S, V);

初版

#include <stdio.h>

int main() {
double r, h, π = 3.14;
double S, V;
scanf("%lf %lf", &r, &h);
S = 2 * π * r * (r + h);
V = π * r * r * h;
printf("S=%.4lf\nV=%.4lf", S, V);
return 0;
}

错因分析

没有对题目多做分析,观察输出样例后想当然认为输出要求保留小数点后 4 位数。

值得一提的是,π 这一符号在 VS2019 中可以不需要宏直接作为变量定义和使用,而在PTA网站的编译环境中 π 将不被视为一个可定义的变量从而出现编译错误。

出现编译错误的提交结果

最终结果

#include <stdio.h>

int main() {
double r, h, Pi = 3.14;
double S, V;
scanf("%lf %lf", &r, &h);
S = 2 * Pi * r * (r + h);
V = Pi * r * r * h;
printf("S=%g\nV=%g", S, V);
return 0;
}

将造成编译错误的 π 替换掉,并使用 %g 来代替 %lf 进行输出,最终成功通过测试。

通过测试的提交结果