函数(2数组作参数、变量的作用域和存储类别).ppt_第1页
函数(2数组作参数、变量的作用域和存储类别).ppt_第2页
函数(2数组作参数、变量的作用域和存储类别).ppt_第3页
函数(2数组作参数、变量的作用域和存储类别).ppt_第4页
函数(2数组作参数、变量的作用域和存储类别).ppt_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

5.3 数组作为函数参数,1、数组元素作函数实参 定义函数时形参为简单变量,调用函数时实参为数组元素名。数组元素作函数实参,与用变量作实参一样,是“单向值传递”,即将数组元素的值传给对应的形式参数,形式参数值的改变不会影响到对应的实参数组元素。 例 1 :有两个数组a、b,各有5个元素,将它们对应地逐个相比(即a0与b0比,a1与b1比)。如果a数组中的元素大于b数组中的相应元素的数目多余b数组中元素大于a数组中相应元素的数目(例如,aibi3次, biai1次,其中每次为不同的值),则认为a数组大于b数组,并分别统计出两个数组相应元素大于、等于、小于的次数。,#include int large(int x, int y); int main(void) int a5 = 1, 3, 5, 7, 9, b5 = 5, 3, 8, 9, -1, i, n = 0, m = 0, k = 0; for (i = 0; i 5; i+) if (large(ai, bi) = 1) n = n + 1; else if (large(ai, bi) = 0) m = m + 1; else k = k + 1; ,printf(“aibi %d timesn ai=bi %d timesn ai k) printf(“array a is larger than array bn”); else if (n k) printf(“array a is smaller than array bn”); else printf(“array a is equal to array bn”); return 0; ,int large(int x, int y) int flag; if (x y) flag = 1; else if (x y) flag = -1; else flag = 0; return (flag); ,2、数组名作函数参数 数组名作参数,此时实参与形参都应用数组名。函数调用时是将实参数组的地址传给对应的形参数组,此时实参数组与形参数组为同一地址单元,因此,函数中在形参数组上所作的所有操作均是在对应实参数组上完成的。 数组名作函数参数是数组作函数参数最常见的形式!,例1: 用选择排序法对数组中5个整数按由小到大排序。 所谓选择排序法就是先将5个数中最小的数与a0对换;再将a1a4中最小的数与a1对换每比较一轮,找出一个未经排序的数中最小的一个。共比较4轮。,思路: a0 a1 a2 a3 a4 3 6 1 9 4 未排序时的情况 1 6 3 9 4 第一轮 1 3 6 9 4 第二轮 1 3 4 9 6 第三轮 1 3 4 6 9 第四轮,#include void sort(int b , int n); int main(void) int a5 = 3, 6, 1, 9, 4; int i; sort(a, 5); printf(“the sorted array:n”); for (i = 0; i 5; i+) printf(“%d”, ai); return 0; ,void sort(int b , int n) int i, j, k, t; for (i = 0; i = n - 2; i+) k = i; for (j = i + 1; j = n - 1; j+) if (bj bk) k = j; t = bk; bk = bi; bi = t; ,例2:P822.C 计算并输出n(n100)门课程的平均成绩。,#include #define maxNums 100 float Aver(int n, int smaxNums); int main(void) int i, n = 0, scoresmaxNums; float avgScore; printf(“Please input scores(-1 to exit): “);,for (i = 0; i maxNums; i+) scanf(“%d“, ,float Aver(int n, int smaxNums) int i; float av = 0; for (i = 0; i n; i+) av += si; av /= n; return av; ,1现有以下程序: #include #include void inverse(char str ) char t; int i, j; for (i = 0, j = strlen(str); i strlen(str) / 2; i+, j-) t = stri; stri = strj - 1; strj - 1 = t; int main(void ) char str100; scanf(“%s”, str); inverse(str); printf(“%sn”, str); return 0; 如果输入an anple,该程序的输出结果是( )。 A) an anple B) elpna na C) an D) na,练习,2以下程序的输出结果为( )。 #include int f (int b , int n) int i, r; r = 1; for (i = 0; i = n; i+) r = r * bi; return(r); int main(void) int x, a = 2, 3, 4, 5, 6, 7, 8, 9; x = f(a, 3); printf(“%dn”, x); return 0; A) 720 B) 120 C) 24 D) 6, 用多维数组作函数参数 多维数组元素可以作为实参,其用法跟简单变量相同(传值)。 多维数组名也可作为实参和形参,传递的是数组首地址。 注意:在函数中对形参数组定义时,可以指定每一维的大小,也可以省略第一维的大小说明,但不能只指定第一维而省略第二维。 例如: int array34; ( 正确!) int array ; int array 10; int array3 ;,例 1:有一个23矩阵,求所有元素中的最大值 #include int max_value(int b 3); int main(void) int a23 = 1, 3, 5, 2, 4, 6; printf

温馨提示

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

评论

0/150

提交评论