思路
定义相关函数,求解周长和面积,在主函数里面调用。
代码
#include <stdio.h>
#define pi 3.14
double zhouchang(int r){
return 2*pi*r;
}
double mianji(int r){
return pi*r*r;
}
int main(){
int r;
scanf("%d",&r);
printf("周长是%.2f\n",zhouchang(r));
printf("面积是%.2f\n",mianji(r));
return 0;
}
运行结果
反思
1.在运行过程中,我首先是宏变量的定义出现了错误,最开始我是这样定义的#define pi=3.14 显然这样定义是错误的,正确的定义方式是#define pi 3.14
2.在编辑周长函数或者是面积函数的时候,我定义他们的返回类型是int型,然而由于我对pi的定义存在小数位,这当然是不合规矩的,后将其改成double类型。
3.同样的精度问题出现在我的输出上面,最开始我是使用整数类型的输出格式%d,后来意识到精度问题,将%d改成了%ld类型,当时就下意思的以为double对应的输出格式是%ld,但其实不是的,%ld是long int 的输出类型,而double类型对应的是输出类型使用的是%lf或者%f。我最后使用的是%f,并保留了两位小数,即%.2f。
格式说明符 | 示例输入 | 输出结果 | 解释 |
---|---|---|---|
%f | 3.14 | 3.140000 | 默认右对齐,无宽度限制 |
%5.2f | 3.14 | 3.14 | 右对齐,总宽度5,保留2位 |
%-5.2f | 3.14 | 3.14 | 左对齐,总宽度5,保留2位 |
%-2f | 3.14 | 3.140000 | 左对齐,宽度不足直接输出;输出的内容至少占 2个字符宽度;如果实际内容长度大于2,按实际宽度输出(不会截断数据)。
|
C语言中,printf的%f既可以用于float,也可以用于double。%lf在scanf中用于double,但是在printf中%lf与%f等价。
4.还有一处错误是在编写主函数时,我将主函数main写成了mian,是一个编程错误。
5.最后一处错误就是在输出周长和面积的时候,第二次犯懒了,直接将第一次输出复制粘贴了,函数调用修改了,但是前面的文字说明忘记进行修改了。
6.总的来说,整个编程题不难,但是其中有很多问题确实被暴露出来了,写下这么多的总结,也希望自己在日后能少犯些类似的错误,希望看文章的你们也是如此。