- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1C语言入门3简单函数1数学函数
第?3?章?简单函数
1.?数学函数
在数学中我们用过sin和ln这样的函数,例如sin(π/2)=1,ln1=0等等,在C语言中也可以使用这些函数(ln函数在C标准库中叫做log):
例?3.1.?在C语言中使用数学函数
#include math.h
#include stdio.h
int main(void)
{
double pi = 3.1416;
printf(sin(pi/2)=%f\nln1=%f\n, sin(pi/2), log(1.0));
return 0;
}
编译运行这个程序,结果如下:
$ gcc main.c -lm
$ ./a.out
sin(pi/2)=1.000000
ln1=0.000000
在数学中写一个函数有时候可以省略括号,而C语言要求一定要加上括号,例如log(1.0)。在C语言的术语中,1.0是参数(Argument),log是函数(Function),log(1.0)是函数调用(Function Call)。sin(pi/2)和log(1.0)这两个函数调用在我们的printf语句中处于什么位置呢?在上一章讲过,这应该是写表达式的位置。因此函数调用也是一种表达式,这个表达式由函数调用运算符(()括号)和两个操作数组成,操作数log是一个函数名(Function Designator),它的类型是一种函数类型(Function Type),操作数1.0是double型的。log(1.0)这个表达式的值就是对数运算的结果,也是double型的,在C语言中函数调用表达式的值称为函数的返回值(Return Value)。总结一下我们新学的语法规则:
表达式?→?函数名表达式?→?表达式(参数列表)参数列表?→?表达式,?表达式,?...
现在我们可以完全理解printf语句了:原来printf也是一个函数,上例中的printf(sin(pi/2)=%f\nln1=%f\n, sin(pi/2), log(1.0))是带三个参数的函数调用,而函数调用也是一种表达式,因此printf语句也是表达式语句的一种。但是printf感觉不像一个数学函数,为什么呢?因为像log这种函数,我们传进去一个参数会得到一个返回值,我们调用log函数就是为了得到它的返回值,至于printf,我们并不关心它的返回值(事实上它也有返回值,表示实际打印的字符数),我们调用printf不是为了得到它的返回值,而是为了利用它所产生的副作用(Side Effect)--打印。C语言的函数可以有Side Effect,这一点是它和数学函数在概念上的根本区别。
Side Effect这个概念也适用于运算符组成的表达式。比如a + b这个表达式也可以看成一个函数调用,把运算符+看作函数,它的两个参数是a和b,返回值是两个参数的和,传入两个参数,得到一个返回值,并没有产生任何Side Effect。而赋值运算符是有Side Effect的,如果把a = b这个表达式看成函数调用,返回值就是所赋的值,既是b的值也是a的值,但除此之外还产生了Side Effect,就是变量a被改变了,改变计算机存储单元里的数据或者做输入输出操作都算Side Effect。
回想一下我们的学习过程,一开始我们说赋值是一种语句,后来学了表达式,我们说赋值语句是表达式语句的一种;一开始我们说printf是一种语句,现在学了函数,我们又说printf也是表达式语句的一种。随着我们一步步的学习,把原来看似不同类型的语句统一成一种语句了。学习的过程总是这样,初学者一开始接触的很多概念从严格意义上说是错的,但是很容易理解,随着一步步学习,在理解原有概念的基础上不断纠正,不断泛化(Generalize)。比如一年级老师说小数不能减大数,其实这个概念是错的,后来引入了负数就可以减了,后来引入了分数,原来的正数和负数的概念就泛化为整数,上初中学了无理数,原来的整数和分数的概念就泛化为有理数,再上高中学了复数,有理数和无理数的概念就泛化为实数。坦白说,到目前为止本书的很多说法都是不完全正确的,但这是学习理解的必经阶段,到后面的章节都会逐步纠正的。
程序第一行的#号(Pound Sign,Number Sign或Hash Sign)和include表示包含一个头文件(Header File),后面尖括号(Angel Bracket)中就是文件名(这些头文件通常位于/usr/include目录下)。头文件中声明了我们程序中使用的库函数,根据先声明后使用的原则,要使用printf函数必须包含stdio.h,要使用数学函数必须包含math.h,如果什么库函数都不使用就不必包含任何头文件,例如写一个程序int main(void){int a;a=2;ret
文档评论(0)