7.1 函数定义和函数的调用 (课件)-《C语言程序设计》同步教学(清华大学出版)

2024-08-12
| 21页
| 188人阅读
| 30人下载
普通

内容正文:

《C语言程序设计》 (清华大学出版) 同步教学 C 语言程序设计 第七章 函 数 2 第七章 函 数 第7章 函 数 7.1 函数定义和函数调用 7.2 函数的嵌套调用和递归调用 7.3 局部变量和全局变量 7.4 变量的存储类别 7.5 内部函数和外部函数 3 函数概述 程序设计有两大最高级的艺术 算法设计艺术 结构设计艺术 函数(function)是结构设计的最基本单位 “一个程序应该是轻灵自由的,它的子过程就象串在一根线上的珍珠。” ——Geoffrey James的《编程之道》 函数是C 语言的基本组成单元。每个函数用来完成某一特定的功能。 把单一功能做成函数的方式,有利于软件的复用。 第七章 函 数 4 函数概述 C程序的函数有两种: 标准库函数:由系统提供,如:sqrt(x), exp(x)。 自定义函数: 用户自定义函数 第七章 函 数 5 7.1 函数定义和函数的调用 返回值类型 函数名 (参数表) { 函数体 return 表达式; } 返回值类型与return语句配合 如果不需要返回值,则应该用 void 定义返回值类型。 当函数执行到return语句时,就中止函数的执行,返回到调用它的地方。 函数内部可以定义只能自己使用的变量,称 内部变量。参数表里的变量也是内部变量 第七章 函 数 6 函数名命名 Windows风格函数名命名 用大写字母开头的单词组合而成 变量名形式 “名词”或者“形容词+名词” 如变量名OldValue与NewValue等 函数名形式 “动词”或者“动词+名词”(动宾词组) 如函数名GetMax()等 第七章 函 数 7 对函数接口加以注释说明 /* 函数功能:实现××××功能 函数参数:参数1,表示××××× 参数2,表示××××× 函数返回值: ××××× */ 返回值类型 函数名 (参数表) { 函数体 return 表达式; } 第七章 函 数 8 【例7.1a】 计算两个整数的平均数 /* 函数功能: 计算平均数 函数入口参数: 整型x,存储第一个运算数 整型y,存储第二个运算数 函数返回值: 平均数 */ int Average(int x, int y) { int result; result = (x + y) / 2; return result; } 第七章 函 数 9 函数调用(call) 单向值传递 调用函数时,必须提供所有的参数 提供的参数个数、类型、顺序与定义时相同 有返回值时 放到一个数值表达式中,如c = max(a,b); 作为另一个函数调用的参数,如 c = max(max(a,b),c); printf("%d ", max(a,b)); 无返回值时 函数调用表达式,如display(a,b); 第七章 函 数 10 【例7.1b】 使用了Average函数的main() #include <stdio.h> int Average(int x, int y) { int result; result = (x + y) / 2; return result; } main() { int a = 12; int b = 24; int ave; ave = Average(a, b); printf("Average of %d and %d is %d. ", a, b, ave); } int Average(int x, int y) { int result; result = (x + y) / 2; return result; } main() { int a = 12; int b = 24; int ave; ave = Average(a, b); printf(……); } 数据传递 执行顺序 第七章 函 数 11 函数原型(prototype) 调用一个函数之前,先要对其返回值类型、函数名和参数进行声明(declare) 不对函数进行声明是非常危险的 声明时不要省略参数以及返回值的类型 第七章 函 数 12 #include <stdio.h> int Average(int x, int y) { int result; result = (x + y) / 2; return result; } main() { int a = 12; int b = 24; int ave = Average(a, b); printf("Average of %d and %d is %d. ", a, b, ave); } 【例7.1】 第七章 函 数 13 #include <stdio.h> int Average(int x, int y); /*声明Average()函数*/ main() { int a = 12; int b = 24; int ave = Average(a, b); printf("Average of %d and %d is %d. ", a, b, ave); } int Average(int x, int y) /*计算两个整数的平均数*/ { int result; result = (x + y) / 2; return result; } 【例7.1】 第七章 函 数 14 7.2.1 函数的嵌套调用 在被调函数中,又调用了函数----嵌套调用 7.2 函数的嵌套调用和递归调用 main() { … … ... } a 函数 { … … } b函数 { … … … } ① ③ ④ ⑤ ⑥ ⑦ ② 第七章 函 数 15 【例7.7】 编写程序,输入n,m,求组合数 #include <stdio.h> void main() { int m,n; long cmn(int,int); scanf("%d%d",&m,&n); printf("cmn=%ld ", cmn(m,n) ); } long Jc(int n) { int i; long t=1; for(i=1;i<=n;i++) t*=i; return (t); } long cmn(int m,int n) { return (Jc(m)/(Jc(n)* Jc(m-n) )); } 第七章 函 数 16 7.2.2 函数的递归调用 当一个函数直接或间接的调用它自身时,称为函数的递归调用。 前者称为直接递归,后者称为间接递归 第七章 函 数 17 7.7.2 函数的递归调用 递归方法: 两步:递推、回归。 例如:求4! 4!=4*3! → 3!=3*2! → 2!=2*1! → 1!=1*0! → 0!=1 4!=4*6 ← 3!=3*2 ← 2!=2*1 ← 1!=1*1←0!=1 第七章 函 数 18 【例7.8】 用递归计算n! #include <stdio.h> long Jc(int n) { long f; if(n==1||n==0) f=1; else f=n*Jc( n-1); return f; } void main() { long y; int n; scanf("%d",&n); y=Jc(n); printf("%d!=%ld",n,y); } main函数 y=Jc(3) jc函数 f=3*Jc(2) jc函数 f=2*Jc(1) jc函数 f=1 return 1 jc函数 f=2*Jc(1) return 2 jc函数 f=3*Jc(2) return 6 第七章 函 数 19 【例7.9】 把十进制整数按相反的顺序将各位数字打印出来。如:print(123456); 输出:654321 #include <stdio.h> void print(long n) { if(n==0) return; else { printf("%d",n%10); print(n/10); return; } } void main() { long n; scanf("%ld",&n); print(n); } 运行结果如下: 123456↙ 654321 第七章 函 数 20 感谢观看 21 main� f1� f2� f3� f4� f5� f6� f7� f ����� ����f����� f1 ����� ����f2����� f2 ����� ����f1����� $$

资源预览图

7.1 函数定义和函数的调用 (课件)-《C语言程序设计》同步教学(清华大学出版)
1
7.1 函数定义和函数的调用 (课件)-《C语言程序设计》同步教学(清华大学出版)
2
7.1 函数定义和函数的调用 (课件)-《C语言程序设计》同步教学(清华大学出版)
3
7.1 函数定义和函数的调用 (课件)-《C语言程序设计》同步教学(清华大学出版)
4
7.1 函数定义和函数的调用 (课件)-《C语言程序设计》同步教学(清华大学出版)
5
7.1 函数定义和函数的调用 (课件)-《C语言程序设计》同步教学(清华大学出版)
6
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。