第7章函数 C语言是通过函数来实现模块化程序设计的。较大的 C语言应用程序往往是由多个函数组成的,每个函数分别 对应各自的功能模块。从用户的使用角度看,函数有两种: 标准函数(即库函数)和用户自定义函数。本章主要讨论 的是用户自定义函数。通过本章的学习,读者应该掌握以 下内容: 函数的定义与函数声明 函数的调用 函数的嵌套调用与递归调用 数组作为函数参数
第7章 函数 C语言是通过函数来实现模块化程序设计的。较大的 C语言应用程序往往是由多个函数组成的,每个函数分别 对应各自的功能模块。从用户的使用角度看,函数有两种: 标准函数(即库函数)和用户自定义函数。本章主要讨论 的是用户自定义函数。通过本章的学习,读者应该掌握以 下内容: 函数的定义与函数声明 函数的调用 函数的嵌套调用与递归调用 数组作为函数参数
。内部变量与外部变量 。变量的动态存储与静态存储 。内部函数与外部函数
内部变量与外部变量 变量的动态存储与静态存储 内部函数与外部函数
7.1函数的定义与函数说明 7.1.1相关知识 C语言是由函数组成,一个C语言程序必须包含一个 且仅一个main函数,由main函数开始调用其他函数,其 他函数也可相互调用,但最终返回主函数结束程序。 7.1.2程序范例 通过下例程序认识和学习函数的定义,理解函数的执 行过程。 1.范例一 任务:定义一个函数,用于求两个数中的大数。 源程序:
7.1 函数的定义与函数说明 7.1.1 相关知识 C语言是由函数组成,一个C语言程序必须包含一个 且仅一个main函数,由main 函数开始调用其他函数,其 他函数也可相互调用,但最终返回主函数结束程序。 7.1.2 程序范例 通过下例程序认识和学习函数的定义,理解函数的执 行过程。 1.范例一 任务:定义一个函数,用于求两个数中的大数。 源程序:
int max(int n1,int n2) *定义一个int类型 的名为max的函数*1 return (n1>n2?n1:n2); *函数体! main() *主函数main(0*/ int max(int n1,int n2); *函数声明*1 int num1,num2; printf("input two numbers:\n");
int max(int n1,int n2) /*定义一个int类型 的名为max的函数*/ { return (n1>n2?n1:n2); /*函数体*/ } main() /*主函数main()*/ { int max(int n1, int n2); /*函数声明*/ int num1,num2; printf("input two numbers:\n");
scanf("%d%d",&num1,&num2); printf("max=%dn,max(num1,num2);/*调用max函数*/ getchar(); 使程序暂停,按任一键继续*1 输入:518 运行结果: max=18 程序说明:上述程序由两个函数组成:main0和max0。程
scanf("%d%d", &num1,&num2); printf("max=%d\n, max(num1,num2)); /*调用max函数*/ getchar(); /*使程序暂停,按任一键继续*/ } 输入:5 18 运行结果: max=18 程序说明:上述程序由两个函数组成:main()和max()。程
序由main0为入口,当执行到printf('"max=%dn", max(num1,num2);语句时,暂停主函数,转去执行 max0函数,当max0函数执行完毕,通过return;返回一 个int型值到main0函数的暂停处继续后面语句的执行。 2.范例二 任务:编写函数将小写字母转换成大写字母作为函数值返回, 其他字符不变。用字符@结束输入。 源程序: #include char bigchar(char ch) *定义一个char类
序由main()为入口,当执行到printf("max=%d\n", max(num1,num2));语句时,暂停主函数,转去执行 max()函数,当max()函数执行完毕,通过return返回一 个int型值到main()函数的暂停处继续后面语句的执行。 2.范例二 任务:编写函数将小写字母转换成大写字母作为函数值返回, 其他字符不变。用字符@结束输入。 源程序: #include char bigchar(char ch) /*定义一个char类
型的名为bigchar的函数*I if(ch>='a'&&ch<='z') bigchari函数的函 数体 ch=ch-32; return ch; } main() 定 义一个main0函数*/ char c;
型的名为bigchar的函数*/ { if(ch>='a'&& ch<='z') /*bigchar函数的函 数体*/ ch=ch-32; return ch; } main() /*定 义一个main()函数*/ { char c;
while((c=getchar())!=@) 循环判断是否为@*! c=bigchar(c); *调用bigchar(0*/ putchar(c); 输入:ab123WER@ 输出:AB123WER 程序说明:上述程序由main0和bigchar()函数组成,由 main0为入口,当执行到c=bigchar(c);语句时,暂停主
while((c=getchar())!='@') /*循环判断是否为@*/ { c=bigchar(c); /*调用bigchar()*/ putchar(c); } } 输入:ab123WER@ 输出:AB123WER 程序说明:上述程序由main()和bigchar()函数组成,由 main()为入口,当执行到c=bigchar(c);语句时,暂停主
函数的执行,转去执行bigchar(0函数,当bigchar(0函数执 行完毕,通过returnj返回一个char型值到main0暂停处继 续后面语句的执行。 7.1.3知识归纳 通过观察以上程序,我们可以得出以下要点: 1.函数的定义 (1)任何函数(包括主函数main0)都是由函数说明和函 数体两部分组成。根据函数是否需要参数,可将函数分为 无参函数和有参函数两种
函数的执行,转去执行bigchar()函数,当bigchar()函数执 行完毕,通过return返回一个char型值到main()暂停处继 续后面语句的执行。 7.1.3 知识归纳 通过观察以上程序,我们可以得出以下要点: 1.函数的定义 (1)任何函数(包括主函数main())都是由函数说明和函 数体两部分组成。根据函数是否需要参数,可将函数分为 无参函数和有参函数两种
1)无参函数的一般形式: 函数类型函数名() {【说明语句部分: 可执行语句部分: 2)有参函数的一般形式: 函数类型「 函数名(数据类型参数1[,数据类型参数 2.]) {说明语句部分;
1)无参函数的一般形式: 函数类型 函数名( ) { 说明语句部分; 可执行语句部分; } 2)有参函数的一般形式: 函数类型 函数名( 数据类型 参数1[,数据类型 参数 2.] ) { 说明语句部分;