北大青鸟C语言教程--第十章 带参数的函数_第1页
北大青鸟C语言教程--第十章 带参数的函数_第2页
北大青鸟C语言教程--第十章 带参数的函数_第3页
北大青鸟C语言教程--第十章 带参数的函数_第4页
北大青鸟C语言教程--第十章 带参数的函数_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ACCP V4.0第十章第十章带参数的函数ACCP V4.02回顾 2-1 q函数是程序中的一个相对独立的单元或模块q使用函数带来的好处: 程序更清晰、易维护、分模块方便设计与开发、提高代码的重用性q语言提供了极为丰富的内置函数,要使用这些内置函数,需要在程序前包含相应的头文件q自定义函数是用户在程序中根据需要而编写的函数ACCP V4.03回顾 2-2 q函数的结构包括:返回值类型、函数名、参数列表、函数体q函数原型说明以便向编译器指出该函数使用什么样的格式和语法q函数调用时程序控制流将转向被调函数,被调函数执行结束时,控制流返回主调函数qreturn 语句用于向调用函数返回值ACCP V4

2、.04目标q理解变量的作用域q理解变量的存储类型q理解两种参数传递的方式:传值、引用q熟悉带参函数的调用q熟练使用数组作为函数参数ACCP V4.05变量的作用域 4-1 作用域是某些事物起作用或有效的区域。限于陆地限于海洋限于空中ACCP V4.06q 程序中变量也有不同的使用范围,称为变量的作用域。变量的作用域决定变量的可访问性变量的作用域 4-2void displayDiscount() float discount_amt; . . . . . . . . .局部变量:不能在函数外使用float discount_amt;void main() . . . . . .void dis

3、playDiscount() . . . . . .全局变量:可以在整个程序中使用ACCP V4.07变量的作用域 4-3#include void addNumbers() int num1,num2,sum; printf(n 请输入两个数:); scanf(%d %d,&num1,&num2); sum=num1+num2; printf( 子函数中 sum 的值是 %d n,sum);void main() int sum=0; addNumbers(); printf(n 主函数中 sum 的值是 %d n ,sum);内存内存sumnum2045num1请输入两个数

4、:56 45子函数中sum的值是101主函数中sum的值是 056sum101ACCP V4.08变量的作用域 4-4#include int sum=0;void addNumbers()int num1,num2;printf(n 请输入两个数:);scanf(%d %d,&num1,&num2);sum=num1+num2;printf( 子函数中 sum 的值是 %d n,sum);void main()addNumbers();printf(n 主函数中 sum 的值是 %d n ,sum);内存内存sumnum2045num1请输入两个数:56 45子函数中sum的

5、值是101主函数中sum的值是10156101ACCP V4.09存储类型 2-1q 变量的存储方式可分为“静态存储”和“动态存储”两种q 静态存储变量是一直存在的,而动态存储变量则时而存在时而消失q 这种由于变量存储方式不同而产生的特性称为变量的生存期q 生存期表示了变量存在的时间ACCP V4.010存储类型 2-2存储类型存储类型说明说明auto自动变量局部变量在缺省存储类型的情况下归为自动变量。register寄存器变量存放在CPU的寄存器中。对于循环次数较多的循环控制变量及循环体内反复使用的变量均可定义为寄存器变量。 static静态变量在程序执行时存在,并且只要整个程序在运行,就可

6、以继续访问该变量。extern外部变量作用域是整个程序,包含该程序的各个文件。生存期非常长,它在该程序运行结束后,才释放内存。ACCP V4.011静态局部变量q静态局部变量生存期为整个源程序q静态局部变量作用域与自动变量相同,即只能在定义该变量的函数内使用该变量q对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值q函数被调用时,其中的静态局部变量的值将保留前次被调用的结果ACCP V4.012静态局部变量示例void format() static int m = 0; m+;if (m % 10 = 0)putchar(n); elseputchar( ); void mai

7、n()int i;for(i=0;i50;i+)printf(%d,i);format();内存内存i0m011循环执行50次49490 10 1 2 3 4 5 6 7 8 910 11 12 13 14 15 16 17 18 1920 21 22 23 24 25 26 27 28 2930 31 32 33 34 35 36 37 38 3940 41 42 43 44 45 46 47 48 492ACCP V4.013静态全局变量q静态全局变量与普通全局变量在存储方式上完全相同q区别在于:非静态全局变量的作用域是整个源程序;而静态全局变量的作用域只是定义它的文件ACCP V4.01

8、4函数形参和实参void main ( )void main ( ) . . . . . . . . . . . . display ( 10, 20.5 ); display ( 10, 20.5 ); display ( int num, float fraction )display ( int num, float fraction ) . . . . . . . . . . . . 实际参数函数调用形式参数ACCP V4.015void main() int a = 0; /初始化a值为0 func(a); /调用函数func printf(%d,a); /输出a的结果/定义函数fu

9、ncvoid func(int a) a = 10; /让参数a等于10传值调用0传值调用将会输出什么ACCP V4.016#include void increment(int,int);void main()int num1,num2;printf(n 请输入两个数: );scanf( %d %d,&num1,&num2);printf(n 递增前的值是 %d 和 %dn, num1, num2);increment(num1,num2);printf(n 递增后的值是 %d 和 %dn, num1, num2);void increment(int val1,int va

10、l2)val1+;val2+;printf(n 子函数中值 %d 和 %dn, val1, val2);传值调用示例请输入两个数 : 34 56递增前的值是 34 和 56_递增后的值是 34 和 56num1num2var13456var2子函数中的值是 35 和 5735345657num1num234563456FF23FF05调用后修改为调用后修改为3535val2FFEAFF45将变量num1的值赋给形参val1将变量num2的值赋给形参val2val1调用后修改为调用后修改为5757调用函数被调用函数ACCP V4.017void main() int a = 0; /初始化a值为

11、0 func(&a); /调用函数F printf(%d,a); /输出a的结果/定义函数Fvoid func(int *a) *a = 10; /让参数a等于10引用调用FFE0引用调用a=FFE0将会输出什么ACCP V4.018#include void increment(int*, int*);void main()int num1,num2;printf(n 请输入两个数: );scanf( %d %d,&num1,&num2);printf(n 递增前的值是 %d 和 %dn,num1,num2);increment(&num1,&num2

12、);printf(n 递增后的值是 %d 和 %dn, num1, num2);void increment(int *ptr1, int *ptr2)(*ptr1)+;(*ptr2)+;printf(n 子函数中值 %d 和 %dn, *ptr1, *ptr2);引用调用示例请输入两个数 : 45 67递增前的值是 45 和 67_递增后的值是 46 和 68num1num2var14567var2子函数中的值是 46 和 6846FF23FF0568FF23FF05num1num24567FF23FF05FF23FF05ptr2FF45FF51调用前为45调用后为46将变量num1的地址赋

13、给形参,即指针ptr1指向变量num1ptr1调用前为67调用后为68将变量num2的地址赋给形参,即指针ptr2指向变量num2ACCP V4.019数组作为函数参数q在用数组作实参时,以传址方式调用函数,也就是说把实参数组的首地址赋给形参q实际上形参数组和实参数组为同一数组,共同拥有一段内存空间ACCP V4.020数组作为参数示例1问题描述:通过函数实现5个学员成绩的排序。 #include #define N 5void sort(float);void main() float gradeN; int i; printf(n 输入 %d 个学员的成绩:n,N); for(i=0;iN

14、;i+)scanf(%f,&gradei); sort(grade); printf(n 排序后的成绩为:n); for(i=0;iN;i+) printf(%5.2f ,gradei); printf(n);传递数组时不使用 “&”演示:示例5void sort(float aN) int i,j; float temp; for(i=0;iN;i+) for(j=0;j aj+1) temp = aj+1;aj+1 = aj;aj = temp; ACCP V4.021问题描述:通过函数实现求5个数中的最大值。 #include int find_larg(int *);v

15、oid main() int arr15; int i, larg_num; printf(n 请输入 5 个不同的值,存储在一个数组中 n); for (i = 0; i = 4; i+) scanf(%d, &arr1i); larg_num = find_larg(arr1); printf(n 最大的数是:%dn , larg_num);数组作为参数示例2演示:示例6int find_larg(int *ptr) int high = *ptr,i; ptr+; for (i = 1; i =4; i+) if (high *ptr) high = *ptr; ptr+; return high;ACCP V4.022总结 2-1q根据变量的作用域可以将变量划分为:局部变量和全局变量q根据

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论