第5章 函数及变量的存储属性

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
16:31 8
3. 从函数的调用形式看,函数可分为两类: (重要) ①无返回值的函数; ②有返回值的函数;
1、返回值类型为void( 空类型) 2、调用形式:函数调 用语句 3、函数体内没有 return语句或者是不带 表达式的return语句
16:31
1、返回值类型为非 void的任何其它类型
2、调用形式:函数调 用出现在表达式中 3、函数体内使用带表 达式的return语句得到 返回值
例 有参函数 int max(int x,int y) { int z; z=x>y?x:y; return(z); }
16:31
14
5.2.2 函数的调用、参数及传递方式
1、函数调用的一般形式
有参数函数:
无参数函数: 说明:
函数名(实际参数表)
函数名()
⑴多个实参间用逗号隔开; ⑵实际参数表中的参数可以是常量、变量或表达式; ⑶实参与形参按顺序对应、个数相等、类型一致 , 一一传递数据(3个一致性)。
16:31 18
函数调用的3种形式
• 按函数调用在程序中出现的形式和位置 来分,可以有以下3种函数调用方式: 3. 函数参数(函数嵌套) • 函数调用作为另一函数调用时的实参 如m=max(a,max(b,c)); • 其中max(b,c)是一次函数调用,它的值 作为max另一次调用的实参
16:31 19
合法标识符
例 空函数 void dummy( ) { }
函数类型 函数名( [ 形参类型说明表 ] ) { 说明部分 语句部分 }
函数体
函数体为空
例 无参函数 void printstar( ) { printf(“**********\n”); } 或 void printstar(void ) { printf(“**********\n”); } 例 有参函数 int max(int x, y) { int z; z=x>y?x:y; return(z); }
16:31 23
5.2.3、函数的返回值
1. 定义:通过函数调用使主调函数得到一个确定 的值,称为函数的返回值。 例如: c=max(3, 5); 此时函数的返回值是5,因此c=5 2. 函数的返回值语句 return 函数的返回值是通过 return语句 获得的。 return语句将被调函数的一个确定的值带回主 调函数中去。return语句的一般形式: return(函数返回值); return 函数返回值;
⑵如果函数类型和return语句的类型不一致,以函 数类型为准。对数值型数据,可以自动进行类型 转换。既函数类型决定返回值的类型。
⑶如果函数不返回值,可以将函数定义为“无类 型”void (或称“空类型”)。
16:31
例如: void print_star(){……}
26
函数的返wenku.baidu.com值小结
return语句的三种形式:
3、函数参数的传递方式
三个方面
• 个数一致 • 顺序一致 • 类型一致或相容(实际是实参对形参赋值)
16:31
21
上例中形参与实参、函数名与返回值之间的关系:
把函数的 结果赋给 函数名
c=max(a, b); ----------------------- 实参:在运行时 max(int x,int y) 把值传给函数。 { ……… returu (z); 形参:通知系统 } 要预留内存位置。
第5章 函数
• 熟练掌握函数的定义、调用、返回值的
方法及参数传递方式
• 掌握函数使用的常用方法
• 了解变量的作用域和变量的存储类别
16:31 1
本章目录
5.1 5.2 5.3 5.4 5.5 概述 函数的定义与调用 函数的嵌套调用与递归调用 变量的作用域与存储类型 预处理命令
16:31
2
5.1 概 述
例 函数带回不确定值
printstar() { printf("**********"); } void main() { int a; a=printstar(); printf("%d",a); }
输出:10
void printstar() { printf("**********"); } void main() { int a; a=printstar(); printf("%d",a); }
⑶若函数体内没有return语句,就一直将函数执行 完,再返回调用函数。 ⑷ return后面可以无“返回值”(即 return ;),则 该return语句只起到 终止函数执行,返回主调函 数的作用。 25
16:31
3、函数值的类型
函数定义时应该指定函数的类型(即函数值 的类型),应该与return语句的类型一致。 说明: ⑴凡不加类型说明的函数,一律自动按整型处理。
16:31
6
四、函数的分类(教材P125)
1. 从函数的参数形式看,函数可分为两类: ①无参函数; ②有参函数 int max( int x, int y ) 有参函数例:(输出两数中大者) #include <stdio.h> { int max( int x, int y ); int z; void main( ) if(x>y) z=x; { else z=y; int num1,num2,a; return z; scnaf("%d,%d",&num1,&num2); } a = max(num1,num2); printf("max=%d",a); 7 } 16:31
2. 函数参数
形式参数和实际参数 形式参数:在定义函数时函数名后面括号中的 变量名,简称形参。 实际参数:在调用函数时函数名后面括号中的 表达式,简称实参。 int max( int x, int y) void main( ) { { 实参表 形参表 int a,b,c; int z; scanf (“%d,%d,&a,&b); z=x>y? x:y; c=max(a,b); return(z); printf(“Max is %d”,c); } 20 } 16:31
例如: void print_message() { printf(“\n Hello!”); }
2、 有参函数的定义形式
类型标识符 函数名(形式参数表列) { 有参数传递 说明部分 语句 16:31 }
11
例如:
int max (int x, int y) /*求x和y二者中大者,x,y为形参*/ { int z; /*函数体中变量的说明*/ z=x>y?x:y; return (z); /*将z的值作为函数返回值*/ }
2. 从用户使用的角度看,函数有两种 :
①标准函数(库函数); ②用户自己定义的函数
库函数:是由编译系统提供的已设计好的函 数,用户只需调用而无需要去实现它。前几章 用过的scanf,printf,getchar,putchar等都是 库函数。
用户自定义函数:由程序员自己定义和设计的 函数。需要程序员自己来编写函数 功能实现代码。
一、C函数的概念
将一个C程序分为若干模块,每个模块实现一个 特定的功能,在C语言中用函数来实现模块的功能。 函数:具有某种功能的独立程序段。
⑴从程序设计方法看C函数:它是实现模块化 程序设计的语法元素。 ⑵从 C 语言中程序的组成方式看 C 函数:它 是程序的基本组成单位。
16:31 3
二、C函数与C程序结构
编译错误!
16:31
28
例 函数返回值类型转换
void main() { float a,b; int c; scanf("%f,%f",&a,&b); c=max(a,b); printf("Max is %d\n",c); } int max(float x, float y) { float z; z=x>y?x:y; return(z); }
3、 空函数的一般定义形式
类型标识符 函数名( ) { }
例如:void dummy() {
功能:调用后什么也不做。
}
用处:建立程序结构,在需要时补充功能。
16:31 12
注意: 如果在函数定义中省略了返回类型 ,则缺省为int。
16:31
13
函数的定义格式
函数返回值类型 缺省int型 无返回值void
• 按函数调用在程序中出现的形式和位置 来分,可以有以下3种函数调用方式: 1. 函数调用语句(无返回值函数的调用) • 把函数调用单独作为一个语句 如printf_star(); • 这时不要求函数带回值,只要求函数完 成一定的操作
16:31 17
函数调用的3种形式
• 按函数调用在程序中出现的形式和位置 来分,可以有以下3种函数调用方式: 2. 函数表达式(函数必须是有返回值的) • 函数调用出现在另一个表达式中 如c=max(a,b); • 这时要求函数带回一个确定的值以参加 表达式的运算
16:31 15
调用方式
•函数调用语句: 例 printstar(); printf(“Hello,World!\n”); •函数表达式: 例 m=max(a,b)*2; •函数参数: 例 printf(“%d”,max(a,b)); m=max(a,max(b,c));
16:31 16
函数调用的3种形式
9
5.2
5.2.1 5.2.2 5.2.3 5.2.4 5.2.5
函数的定义与调用
函数的定义 函数的调用、参数及传递方式 函数的返回值 函数声明的作用 main函数中的参数(略)
16:31
10
5.2.1 函数的定义
1、 无参函数的定义形式
类型标识符 函数名() { 无参数传递 说明部分 语句 }
16:31
22
关于参数的几点说明:
⑴ 形参调用前不占内存单元,调用时占用, 调用后 释放; ⑵ 形参是函数的内部变量,只在函数内部才有意义;
⑶ 对每个形参必须指明其名字和数据类型; ⑷ 实参可以是常量、变量或表达式,并且必须 有确定的值; ⑸ 实参个数、类型必须与对应的形参一致; ⑹实参对形参的数据传递是值传递,即单向传递, 只由实参传递给形参,反之不可。调用结束后, 只有形参单元被释放,实参单元依然不变。
16:31 24
“函数返回值”是有确定值的常量、变量或表达式。
说明: ⑴ return 后面的值可以是一个表达式,例如: z=x>y? x:y; return (x>y? x:y); return(z); ⑵一个函数中可以有多个return语句,但是一次 函数执行只能执行其中的一个。当执行到某个 return语句时,则终止函数执行,并带回函数值。
⑴C 程序由主函数( main 函数)和若干个(子)函 数构成; ⑵主函数调用子函数; ⑶子函数在定义时是并列的; ⑷子函数可相互调用,也可被多次调用。
main a b e f e
16:31
c h h i
d
g
g
4
三、C函数的特点
⑴一个源文件由一个或多个函数组成,它是一 个独立编译单元。 ⑵一个C程序由一个或多个源文件组成; ⑶C程序执行总是从main函数开始,调用其 他函数后流程回到main函数,在main函数 中结束整个程序的运行。
– 函数中可有多个return语句,要么都带表达式,要么都不带表达 式 – 若无return语句,遇}时,自动返回调用函数 – 若函数类型与return语句中表达式值的类型不一致,按前者为准, 自动转换------函数调用转换 – void型的函数体内要么不使用return语句,要么使用不带表达式 的return语句 16:31 27
16:31 29
5.2.4 对被调用函数的说明 (声明)
⒈ 对被调用函数说明的前提条件 被调用函数必须是已存在的函数,如用户自 定义函数或库函数。
⑷函数不能嵌套定义,但可以互相调用。 注意不能调用main函数。
16:31 5
C程序的结构
C程序
源程序文件1
源程序文件2
………. 源程序文件n
预处理命令
函数1
函数2
……….
函数n
说明部分
执行部分
C是函数式语言 必须有且只能有一个名为main的主函数 C程序的执行总是从main函数开始,在main中结束 函数不能嵌套定义,可以嵌套调用
• 形式: return(表达式); 或 return 表达式; 或 return; • 功能:使程序控制从被调用函数返回到调用函数中,同时 把返值带给调用函数 • 说明:
例 无返回值函数 void swap(int x,int y ) { int temp; temp=x; x=y; y=temp; }
相关文档
最新文档