- 1、本文档共23页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5章函数
第5章 函 数
C程序的重要组成是函数。当你面临一个大的问题时,为了有效地解决问题,方法是将问题分解。在设计一个大的程序时,关键的一点是把它划分成若干个小而容易处理的程序模块,每一个程序模块用来实现一个特定的功能,这样的程序模块在高级语言中一般称为子程序,在C语言中则称为函数。
本章主要讲授函数的定义和函数的调用方式与方法,以及变量的作用域和存储类型等。
C语言的函数定义都是互相平行的、独立的,但可以嵌套调用和递归调用,调用时实参与形参之间是值传递。一个C程序是由若干个(至少一个)函数组成,每一个函数用来实现一个特定的功能,通过互相调用完成系统的总功能。C语言的函数提供了实现“自上而下”的结构化编程方法,图5-1是一个程序中函数调用的示意图。每一个C程序有且只有一个main函数,它的运行是从main函数开始,一个结构良好的程序最后从main函数结束。一个C程序的所有函数可以组织在若干个源文件中,源文件是编译的基本单位。
C语言的变量,从作用域(即变量在什么范围内有效)来讲,可以分为局部变量和全局变量;从生存期(即变量值在内存中存在的时间)来讲,可以分为动态存储变量和静态存储变量。
5.1 函数的定义
从用户使用的角度看,函数有两种:
(1) 标准函数,即库函数。这是由系统提供的,像printf()和sqrt()等都是库函数,对于这些库函数用户不必自己定义,可以直接使用它们。
(2) 用户定义函数,是用户根据所需解决的问题而专门编写的函数。
先给出一个简单的函数调用的例子。
例5.1 用户定义函数的定义与调用。
#include ?stdio.h?
int sum() { /* 用户定义函数sum */
int n, hj?0;
for (n?1; n??100; n??)
hj?hj?n;
return (hj); /* 返回函数值 */
}
void output(int zh) {
/* 用户定义函数output,形参变量zh接受实参s传过来的值 */
printf((************\n(); /* 调用库函数printf */
printf(( sum?%d\n(, zh);
printf((************\n();
}
void main() {
int s;
s?sum(); /* 调用用户定义函数sum */
output(s); /* 调用用户定义函数output */
}
运行结果如下:
************
sum?5050
************
这里,sum、output都是用户自定义的函数名,分别用来求1至100之间的自然数之和,输出所求的结果。包含函数调用语句“s?sum();”和“output(s);”的函数称为主调函数,函数sum及output均称为被调用函数。
由上例可知,一个函数由函数头和函数体两部分构成。函数头又包括函数类型、函数名、形式参数及其类型声明等组成;函数体由声明部分和执行语句部分构成。在函数体的声明部分中,对函数中所用的变量进行定义,另外还需对函数中将要调用的函数作声明(见5.3.2节)。
函数定义的一般形式如下:
(1) 无参函数的定义形式:
类型标识符 函数名() { ——函数头(即函数的说明部分)
声明部分
执行语句
}
例5.1中的sum函数是无参函数。函数名前的“类型标识符”是用来声明函数的类型,即函数返回值的类型。return语句的作用是将它后面的表达式hj的值返回到主调函数中。
(2) 有参函数定义的一般形式:
类型标识符 函数名(形式参数列表) { ——函数头(即函数的说明部分)
声明部分
执行语句
}
例5.1中的output函数是有参函数。变量zh为形式参数,“int zh”定义形参变量zh的类型。主调函数中的函数调用语句“output(s);”中的变量s为实际参数。由于该函数不需要返回值,所以函数类型为void。
“形式参数列表”列出所有形式参数及其类型声明,如果有一个以上形式参数,则它们之间用逗号分隔。在函数调用时,主调函数中的“实际参数列表”中的每一个实际参数值依次传递给被调用函数中的“形式参数列表”中的每一个形参变量。
(3) 空函数,它的形式为:
类型标识符 函数名() {
}
例如:
void count() {
}
调用此函数时,什么工作也不做,没有起任何实际作用。但在主调函数中写上“count();”语句表明“在这里要调用一个函数”,而现在这个函数的具体内容尚未写出来,因此调用此函数时没有起任何实际作用,待以后扩充函数
文档评论(0)