C语言教程:函数 学习目的:函数是C语言程序设计的 基本形式,主要介绍的是自定义函 数。通过讲解,使学生熟悉函数的 般形式,函数的参数使用,通过 剖析程序,使学生能够正确分析出 函数程序的功能
C语言教程:函数 学习目的:函数是C语言程序设计的 基本形式,主要介绍的是自定义函 数。通过讲解,使学生熟悉函数的 一般形式,函数的参数使用,通过 剖析程序,使学生能够正确分析出 函数程序的功能
函数内容介绍 紫1函数概述 紫2函数的定义和声明 3函数的调用、函数参数和返回值 紫4嵌套和递归调用 紫5数组作函数参数 紫6变量的作用域 ※7变量的存储类别 8内部函数和外部函数
函数内容介绍 1 函数概述 2 函数的定义和声明 3 函数的调用、函数参数和返回值 4 嵌套和递归调用 5 数组作函数参数 6 变量的作用域 7 变量的存储类别 8 内部函数和外部函数
C语言称为函数式语言 C程序 源程序文件1 源程序文件2 源程序文件n 预处理命令 全局变量声明 函数1 函数n 函数首部 函数体 局部变量声明 执行语句
C语言称为函数式语言 源程序文件1 预处理命令 全局变量声明 函数首部 局部变量声明 执行语句 函数体 函 数1 函 数n 源程序文件2 源程序文件n C程序
函数模块式的结构的好处: 兴言易于实现结构化程序设计、使程序的 层次结构清晰、便于程序的编写、阅读、 调试
函数模块式的结构的好处: 言易于实现结构化程序设计、使程序的 层次结构清晰、便于程序的编写、阅读、 调试
函数分类: 从函数定义来看,函数分为库函数和用户定义函数 兴从函数返回值来看,函数分为有返回值函数和无返回值函数 从函数和函数之间数据传送来度看,函数分为无参函数和有参函数。 强调: 1、所有的函数定义,包括主函数man在内,都是平行的。但是函数之间允 许相互调用,也允许嵌套调用。习惯上把调用者称为主调函数。函数还一 可以自己调用自己,称为递归调用,如intf0{…0} 2、main函数是主函数,它可以调用其它函数,而不允许被其它函数调用 3、一个C程序必须有,也只能有一个主函数main
函数分类 : 从函数定义来看,函数分为库函数和用户定义函数。 从函数返回值来看,函数分为有返回值函数和无返回值函数。 从函数和函数之间数据传送来度看,函数分为无参函数和有参函数。 强调: 1、所有的函数定义,包括主函数main在内,都是平行的。但是函数之间允 许相互调用,也允许嵌套调用。习惯上把调用者称为主调函数。函数还 可以自己调用自己,称为递归调用,如 int f(){……f()……} 。 2、main 函数是主函数,它可以调用其它函数,而不允许被其它函数调用。 3、一个C程序必须有,也只能有一个主函数main
函数定义的一般形式 1.无参函数的定义形式 一类型标识符函数名(--+-------+ {声明部分 语句} 无参数,但括号不可少 在很多情况下都不要求无参函数有返回值,此时函数类型符可以 为 Vold。 2.有参函数定义的一般形式 戏类型标识符函数名(形式参数表列) 声明部分 语句} 形参既然是变量,必须在形参表中给出形参的类型说明。 紫例如,定义一个函数,用于求两个数中的大数,可写为 紫 Int max(inta,intb) 紫{if(a>b) return a; else return b; 1 紫一个函数的定义可以放在任意位置,既可放在主函数main之前, 也可放在main之后。 紫关于函数的说明或声明:在所有函数之前外部或在函数调用之前
函数定义的一般形式 1. 无参函数的定义形式 类型标识符 函数名() {声明部分 语句 } 无参数,但括号不可少。 在很多情况下都不要求无参函数有返回值,此时函数类型符可以 写为void。 2. 有参函数定义的一般形式 类型标识符 函数名(形式参数表列) {声明部分 语句 } 形参既然是变量,必须在形参表中给出形参的类型说明。 例如,定义一个函数,用于求两个数中的大数,可写为: int max(int a, int b) { if (a>b) return a; else return b; } 一个函数的定义可以放在任意位置,既可放在主函数main之前, 也可放在main之后。 关于函数的说明或声明:在所有函数之前外部或在函数调用之前
【例】 ※ Int max(inta,ntb) ※if(a>b) return a; 煤 else return b: 兴main 数 int max( int a int b);/*函数的说明或声明* nt x,y, 2, x printf("input two numbers: n") xx scanf("%d%d", &x, &y) zmax(x, y ※ printf((" maxmum m=%d",z) }
【例】 int max(int a,int b) { if(a>b)return a; else return b; } main() { int max(int a,int b); /*函数的说明或声明*/ int x,y,z; printf("input two numbers:\n"); scanf("%d%d",&x,&y); z=max(x,y); printf("maxmum=%d",z); }
函数的参数和函数的值 1、形式参数和实际参数 要点 兴1)形参变量只有在被调用时才分配内存单元,在调 用结束时,即刻释放所分配的内存单元。因此,形参 只有在函数内部有效。函数调用结束返回主调函数后 则不能再使用该形参变量 2)实参可以是常量、变量、表达式、函数等 数3)实参和形参在数量上,类型上,顺序上应严格一 致 兴4)函数调用中发生的数据传送是单向的
函数的参数和函数的值 1、形式参数和实际参数 要点: 1) 形参变量只有在被调用时才分配内存单元,在调 用结束时,即刻释放所分配的内存单元。因此,形参 只有在函数内部有效。函数调用结束返回主调函数后 则不能再使用该形参变量。 2) 实参可以是常量、变量、表达式、函数等 3) 实参和形参在数量上,类型上,顺序上应严格一 致。 4) 函数调用中发生的数据传送是单向的
【例】可以说明这个问题。 main( i int n; x printf("input number in") 紫 scanf("%od",&n) 紫S(n) 在man0函数中 printf("n=%odn", n) 在s0函数中 类ints(intn) Int 1 Input number 紫for(i-n-1i1>=1;-) =15 n=n+1; 紫 printf("n=%dn"n); }/说明:函数s的功能是求∑m的值
【例】可以说明这个问题。 main() { int n; printf("input number\n"); scanf("%d",&n); s(n); printf("n=%d\n",n); } int s(int n) { int i; for(i=n-1;i>=1;i--) n=n+i; printf("n=%d\n",n); } //说明:函数s的功能是求∑ni的值
函数的返回值 ---4---4--÷--一 ※函数的值是指函数被调用之后,执行函数体中的程序段所取得的 并返回给主调函数的值。 说明: 1)函数的值只能通过 return语句返回主调函数。 紫 return语句的一般形式为: 紫 return表达式; 紫或者为 戏 return( 表达式) 充是计渣傅用混料空未调面数语腰我, 因此只能返回一个函数值 紫执行 return后,停止函数的执行、即结束函数
函数的返回值 函数的值是指函数被调用之后,执行函数体中的程序段所取得的 并返回给主调函数的值。 说明: 1) 函数的值只能通过return语句返回主调函数。 return 语句的一般形式为: return 表达式; 或者为: return (表达式); 该语句的功能是计算表达式的值,并返回给主调函数。在函数中 允许有多个return语句,但每次调用只能有一个return 语句被执行, 因此只能返回一个函数值。 执行return后,停止函数的执行、即结束函数