




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第 7 章章函函 数数再谈函数和它的参数、返回值再谈函数和它的参数、返回值函数函数(功能模块)(功能模块)完成一定功能,但不需要输入完成一定功能,但不需要输入参数,也不返回值参数,也不返回值输输入入输输出出形参形参返回值返回值函数函数(功能模块)(功能模块)return 函数的返回值最多有一个函数的返回值最多有一个实际参数实际参数 形式参数:值传递(赋值)形式参数:值传递(赋值)7.7.1 数组元素作函数实参数组元素作函数实参7.7.2 数组名作函数参数数组名作函数参数7.7.3 多维数组名作函数参数多维数组名作函数参数v数组元素做参数:与普通变量相同数组元素做参数:与普通变量相同实参、形参
2、占据不同的内存,值传递实参、形参占据不同的内存,值传递例,记录某数组中相邻例,记录某数组中相邻两个元素中较大者。两个元素中较大者。void main ( ) float max(float x, float y ); float a20=0, c10=0; int i, j; for(i=0;i20;i+) scanf( “%f”, &ai); for(i=0,j=0; iy ? x : y; return z;例,记录并输出两个数例,记录并输出两个数中的较大者。中的较大者。v除了可以用数组元素作为函数参数外,除了可以用数组元素作为函数参数外,还可以用数组名作函数参数还可以用数组名作函
3、数参数(包括实参包括实参和形参和形参)v用数组元素作实参时,用数组元素作实参时,向形参变量传递的是数组元素的值向形参变量传递的是数组元素的值值传递值传递v用数组名作函数实参时,用数组名作函数实参时,向形参向形参 传递的是数组首元素的地址传递的是数组首元素的地址地址传递地址传递 例例. 有一个一维数组有一个一维数组array,内放,内放10个个学生成绩,求平均成绩。学生成绩,求平均成绩。v解题思路:解题思路:用函数用函数average求平均成绩,用数组名作求平均成绩,用数组名作为函数实参,形参也用数组名为函数实参,形参也用数组名在在average函数中引用各数组元素,求平函数中引用各数组元素,求
4、平均成绩并返回均成绩并返回main函数函数#include int main() float average(float array10); float score10,aver; int i; printf(input 10 scores:n); for(i=0;i10;i+) scanf(%f,&scorei); printf(n); aver=average(score); printf(%5.2fn,aver); return 0; 定义实参数组定义实参数组float average(float array10) int i; float aver,sum=array0; fo
5、r(i=1;i10;i+) sum=sum+arrayi; aver=sum/10; return(aver);定义形参数组定义形参数组相当于相当于score0相当于相当于scorei注意:注意:用数组名作函数用数组名作函数参数参数时,时,实参实参向形参向形参传递的是数组首元素的地址传递的是数组首元素的地址对形参大小不做检查对形参大小不做检查(float array ) 例例(续)(续) 有两个班级,分别有有两个班级,分别有35名和名和30名学生,调用一个名学生,调用一个average函数,分别求函数,分别求这两个班的学生的平均成绩。这两个班的学生的平均成绩。v解题思路:解题思路:需要解决怎样
6、用同一个函数求两个不同长度的需要解决怎样用同一个函数求两个不同长度的数组的平均值的问题数组的平均值的问题定义定义average函数时不指定数组的长度,在形函数时不指定数组的长度,在形参表中增加一个整型变量参表中增加一个整型变量n从主函数把数组实际长度从实参传递给形参从主函数把数组实际长度从实参传递给形参n这个这个n用来在用来在average函数中控制循环的次数函数中控制循环的次数为简化,设两个班的学生数分别为为简化,设两个班的学生数分别为5和和10float average(float array ,int n)#include int main() float average(float a
7、rray ,int n); float score15=98.5,97,91.5,60,55; float score210=67.5,89.5,99,69.5, 77,89.5,76.5,54,60,99.5; printf(“%6.2fn”,average(score1,5); printf(“%6.2fn”,average(score2,10); return 0;float average(float array ,int n) int i; float aver,sum=array0; for(i=1;in;i+) sum=sum+arrayi; aver=sum/n; return
8、(aver);调用形式为调用形式为average(score1,5)时时相当于相当于score10相当于相当于score1i相当于相当于5float average(float array ,int n) int i; float aver,sum=array0; for(i=1;in;i+) sum=sum+arrayi; aver=sum/n; return(aver);调用形式为调用形式为average(score2,10)时时相当于相当于score20相当于相当于score2i相当于相当于10例例. .将一维数组中各元素值加将一维数组中各元素值加1后显示出来。后显示出来。void AD
9、D1( int a , int n ) int i; for ( i = 0; i n; i + + ) a i + = 1;int main ( ) int i , array = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ; ADD1(array, 10); for ( i = 0 ; i 10 ; i + + ) printf ( “ %d ”, array i ); return 0; 数组名作函数参数数组名作函数参数传递的是实参数组在内存传递的是实参数组在内存中的首地址中的首地址实参、形参数组对同一段实参、形参数组对同一段内存操作内存操作例例.冒泡排序冒泡排序v基本思
10、想基本思想从前向后将相邻两个数据进行比较从前向后将相邻两个数据进行比较逐个交换次序不当的数据逐个交换次序不当的数据大数沉底,小数起泡(从小到大排序)大数沉底,小数起泡(从小到大排序)多趟扫描后得到排序表多趟扫描后得到排序表v算法思路算法思路要比较要比较I I轮轮每一轮,要比较每一轮,要比较J J次,一个大数沉底次,一个大数沉底输入数据输入数据排序排序输出数据输出数据变量变量i i表示比较的趟数表示比较的趟数变量变量j j表示每单趟比较的次数表示每单趟比较的次数#define num 10#include void main( ) int anum, i, j, t ; for( i=0 ; i
11、num; i+ ) scanf( “%d”, &ai); for( i=1; inum ; i+ ) for( j=0; j aj+1 ) t=aj; aj=aj+1; aj+1=t; for( i=0; inum; i+) printf (“%5d ”, ai); printf(“n”); sort(a,num); for( i=1; inums ; i+ ) for( j=0; j sj+1 t=sj; sj=sj+1; sj+1=t; void sort(int s, int nums) int i,j,t;void sort(int s,int nums);请读程序请读程序:
12、:结果是结果是: _ .A) 720B) 120 C) 24 D) 6#include f ( int b , int n ) int i , r = 1 ; for ( i = 0 ; i = n ; i + ) r = r * b i ; return r; void main ( ) int x , a = 2, 3 ,4, 5, 6, 7, 8, 9 ; x = f ( a , 3 ); printf ( “ %d ” , x ); v数组名作函数参数:数组名作函数参数: 地址传递地址传递传递的实际上是实参数组在内存中的首地址传递的实际上是实参数组在内存中的首地址实参、形参数组对同一段
13、内存操作实参、形参数组对同一段内存操作实参、形参数组类型相同实参、形参数组类型相同对形参大小不作检查对形参大小不作检查 int max(int array );调用函数时,只写数组名调用函数时,只写数组名 v多维数组名作为函数参数多维数组名作为函数参数注意对数组大小的说明注意对数组大小的说明 int max(int array 5);c = max( array ); 数组作为函数参数数组作为函数参数 例例. 有一个的矩阵,求所有元素有一个的矩阵,求所有元素中的最大值。中的最大值。v解题思路:先使变量解题思路:先使变量max的初值等于的初值等于矩阵中第一个元素的值,然后将矩阵矩阵中第一个元素的
14、值,然后将矩阵中各个元素的值与中各个元素的值与max相比,每次比相比,每次比较后都把较后都把“大者大者”存放在存放在max中,全中,全部元素比较完后,部元素比较完后,max 的值就是所有的值就是所有元素的最大值。元素的最大值。要与要与形参数组第形参数组第二二维大小维大小相同相同#include void main() int max_value(int array4); int a34=1,3,5,7,2,4,6,8, 15,17,34,12; printf(“Max value is %dn”, max_value(a) ); 第一维的大小可以省略第一维的大小可以省略不能省略第二维的(及更高
15、维的)不能省略第二维的(及更高维的)int max_value(int array4) int i,j,max; max = array00; for (i=0;i3;i+) for(j=0;jmax) max = arrayij; return (max);要与实参要与实参数组第数组第二二维大小维大小相同相同形参形参数组数组的的第第二二维大小维大小不能省略不能省略以下两个程序有什么差别?以下两个程序有什么差别?void main ( ) float max(float, float); float a, b, c; scanf( “%f,%f”, &a, &b); c = m
16、ax(a,b); printf( “max is %f”, c );float max(float x, float y ) float z; z = xy ? x : y; return z; float a, b, c;void main ( ) float max(float, float); scanf( “%f,%f”, &a, &b); c = max(a,b); printf( “max is %f”, c );float max(float x, float y ) float z; z = xy ? x : y; return z;v定义变量可能有三种情况:定
17、义变量可能有三种情况:在函数在函数内的内的开头定义开头定义在函数内的复合语句内定义在函数内的复合语句内定义在函数的外部定义在函数的外部定义称为称为“局部变量局部变量” 称为称为“全局变量全局变量”、“外外部变量部变量”v在一个函数内部定义的变量只在本函在一个函数内部定义的变量只在本函数范围内有效数范围内有效(可以被使用)(可以被使用)v在复合语句内定义的变量只在本复合在复合语句内定义的变量只在本复合语句范围内有效语句范围内有效 故,故, 在在函数内部函数内部或复合语句内部或复合语句内部定义的变量称为定义的变量称为“局部变量局部变量”float f1( int a) int b,c; char
18、f2(int x,int y) int i,j; void main( ) int m,n; a、b、c仅在仅在此函数内此函数内有效有效x、y、i、j仅在仅在此函数内此函数内有效有效m、n仅在此仅在此函数内函数内有效有效float f1( int a) int b,c; char f2(int x,int y) int i,j; void main( ) int a,b; 类似于不同班类似于不同班级的同名学生级的同名学生int main ( ) int a,b; int c; c=a+b; c仅在此复合仅在此复合语句内语句内有效有效a、b仅在此函数内仅在此函数内有有效效v在函数内定义的变量是局
19、部变量在函数内定义的变量是局部变量,而在函而在函数之外定义的变量称为数之外定义的变量称为外部变量外部变量v有效范围有效范围:从定义变量的位置开始到本源从定义变量的位置开始到本源文件结束文件结束 故,故,外部变量外部变量也称为也称为全局变量全局变量int p=1,q=5float f1(int a) int b,c; char c1,c2;char f2 (int x, int y) int i,j; void main ( ) int m,n; p、q、c1、c2为为全局变量全局变量int p=1,q=5float f1(int a) int b,c; char c1,c2;char f2 (
20、int x, int y) int i,j; void main ( ) int m,n; p、q的有效范围的有效范围c1、c2的有效范围的有效范围全局变量的全局变量的有效范围有效范围:从定义变从定义变量的位置开始到本源文件结束量的位置开始到本源文件结束 #include int u, v;float max(float x, float y ) float z; z = uv ? x : y; return z;void main ( ) float a, b, c; scanf( “%d,%dn”, &u, &v); scanf( “%f,%f”, &a, &
21、;b); c = max(a,b); printf( “max is %f”, c );F1.c程序程序问题:问题: 如果想通过函数调用方式如果想通过函数调用方式改变多个数据可以怎么做?改变多个数据可以怎么做?数组作为参数数组作为参数利用全局变量利用全局变量利用指针利用指针 例例. 有一个一维数组,内放有一个一维数组,内放10个学生成绩,个学生成绩,写一个函数,当主函数调用此函数后,能写一个函数,当主函数调用此函数后,能求出平均分、最高分和最低分。求出平均分、最高分和最低分。解题思路:解题思路: 调用一个函数可以得到一个函数返回值,调用一个函数可以得到一个函数返回值,现在希望通过函数调用能得到
22、现在希望通过函数调用能得到3个结果。个结果。全局变量应用举例全局变量应用举例float max=0 , min=0;float average(float a, int n) int i; float sum=a0; max = min = a0; for( i=0 ; imax) max=ai; else if(aimin) min=ai; else ; sum=sum+ai; return(sum/n);#includevoid main( ) int i; float ave , score10; for( i=0 ; i b ? a : b ; return c; void main ( ) int a = 8 ; /* a 为局部变量为局部变量 */ printf ( “ max=%d n ”, max ( a, b ) ); 形参形参 a, b作用范围
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 消防设备应急操作
- 社团代课合同范本
- 工业互联网平台监测分析体系与实施路径研究
- 工地方木合同范本
- 家庭合伙游旅游合同
- 定制产品开发合同范本
- 2025至2030年中国手机充电器行业发展研究报告
- 2025至2030年中国成套联合碾米设备行业发展研究报告
- 2025至2030年中国恶霉灵市场现状分析及前景预测报告
- 2025至2030年中国微型便携式录像机市场分析及竞争策略研究报告
- 体育康养与心理健康促进的结合研究论文
- 天津市河东区2024-2025学年九年级下学期结课考试化学试题(含答案)
- 2025技术服务合同模板
- 2025年保安证学习资源题及答案
- 公司事故隐患内部报告奖励制度
- 如何通过合理膳食安排促进婴幼儿成长发育
- 人教版(2024)七年级下册生物期中复习必背知识点提纲
- 浙江省绍兴市2025届高三语文一模试卷(含答案)
- 2025届高三化学一轮复习 化学工艺流程题说题 课件
- 网线采购合同
- 2024年初级中式烹调师技能鉴定理论考前通关必练题库(含答案)
评论
0/150
提交评论