输出函数printf,输出函数的作用不是算出结果,而是产生输出的效果。
看个小例子
假设有一堆圆形的瓷盘,需要求他们的面积。
他们的半径分别是,3.21、2.15、3.33、3.56
#include<stdio.h>
int main(){
printf("area = %f\n",3.12*3.12*3.14);
printf("area = %f\n",2.15*2.15*3.14);
printf("area = %f\n",3.33*3.33*3.14);
printf("area = %f\n",3.56*3.56*3.14);
return 0;
}
我们可能会写出如上的程序, 但是在这个程序里有许多相同的东西。不仅其中对各项数据的计算过程相同,而且同一个数据还需要重复出现。 如果这个时候有一个专门的函数来计算这个面积,只需要告诉它半径是多少,就可以返回给你一个结果,是很省事的事情。
猜想如果这个函数是这样子的
float circle_area(float r)
float 是对这个函数 circle_area 的返回值类型,
float r 是传给这个函数的参数,类型是float
现在来写写circle_area(float r)的业务逻辑
float circle_area(float r){
return r * r * 3.1416;
}
很简单,就是将计算结果返回回来。
现在我们再来看看优化过的程序后,
#include<stdio.h>
float circle_area(float r){
return r * r * 3.1416;
}
int main(){
printf("area = %f\n",circle_area(3.12));
printf("area = %f\n",circle_area(2.15));
printf("area = %f\n",circle_area(3.22));
printf("area = %f\n",circle_area(3.56));
return 0;
}
我们可以把一段计算过程定义成一个函数,并给它取一个名字。有了这样的函数定义之后,如果程序里需要这样的一段计算,那么久可以简单地通过函数的名字调用这个函数,然后做有关的逻辑运算。
这个程序就包括了两个部分:前面是circle_area的定义,后面就是我们熟悉的main函数,main函数内调用了前面定义的circle_area函数。
定义一个circle_area 函数会带来很多益处。比如,函数调用一目了然,参数也只需要填写一次。更重要的是如果万一业务逻辑发生变化,程序需要改变,我们只需要在调用函数那里稍作修改。
我们继续来猜想一下之前的例子
如果说是有 10000 个瓷盘,
#include<stdio.h>
int main(){
printf("area = %f\n",3.12*3.12*3.14);
printf("area = %f\n",2.15*2.15*3.14);
printf("area = %f\n",3.33*3.33*3.14);
//这里省略9996条 printf 语句
//...
//...
printf("area = %f\n",3.56*3.56*3.14);
return 0;
}
现在程序需求出现变化, 在计算面积完之后还要加上额外的50.0 这个时候你得在程序10000个 输出语句那里都得加上 + 50.0
printf("area = %f\n",3.33*3.33*3.14 + 50.0);
如果真的是这样手动这样操作10000次,想想都是醉了。
然而,幸好我们定义一个circle_area函数, 我们只需要在里面稍作修改就完事。
float circle_area(float r){
return r * r * 3.1416 + 50;
}
我们仅仅只需要在cirle_area 里面 修改为 return r * r *3/1416 +50.0 就可以了, main 函数内的,完全不需要修改。
如果某天,boss觉得 pi = 3.1416 不够精确, 需要更精确的 3.141592 ,这个时候 我们也只需要在circle_area函数内修改一次就可以。