C语言,第8章 数组做函数参数

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第8讲 函 数_2
内容提要
• 一维数组做函数参数 • 二维数组做函数参数 • 变量的作用域和存储类别(理论性
知识) • 进一步理解函数的递归调用和递归
算法的应用
回顾上周内容
怎样编写自定义函数?
怎样调用自定义函数?
函数的格式
函数值类型 函数名(形式参数) {
函数体 } 说明:
• 如果函数没有函数值,函数值类型为void • 如果函数有函数值,函数值类型为某种数据类型,函数值由 return语句返回; • 如果函数没有形式参数,表示为void • 如果函数有形式参数,则每一个形参的说明均为:
• 在函数中对形参数组定义时,可以指定每一维的大 小,也可以省略第一维的大小说明,但不能只指定 第一维而省略第二维。例如:
int array[3][4]; int array[ ][10]; ( 正确!) int array[ ][ ]; int array[3][ ]; ( 错误!)
程序举例
P818.C 程序的功能是:找出任意的一个m×n矩阵 每一行上的最大值的列下标并按示例格式要求显示 。
maxvalue = a[i][j]; maxlie = j; } } printf("The max value in line %d is %d\n", i, maxlie); } }
程序举例
P823.C 程序的功能是:将m(2<=m<=20)行m列的二 维数组arrayA中的最后一行放到二维数组arrayB的 第0列中,把二维数组arrayA中的第0行放到二维数 组arrayB的最后一列中,二维数组arrayB中的其他 数据和arrayA一致。
变量的作用域(局部变量和全局变量
void zh(int a[20][20], int b[20][20], int n) {
int i, j;
for (i=0; i<n; i++) {
for (j=0; j<n; j++) {
b[i][j] = a[i][j]; } }
for (源自文库=0; i<n; i++) {
} }
b[i][n-1] = a[0][i]; b[i][0] = a[n-1][i];
• 在函数中对形参数组定义时,可以省略数组 的大小说明。例如, int arr[ ]
程序举例
P241.C 程序的功能是:从键盘分别读入5个数到 arrA中、8个数至arrB中,然后分别调用自定义函数 输出数组arrA和arrB的各元素。
void printArray(int a[], int n) {
之前哪些地方涉及过“地址”这个概念
1、输入的时候。 scanf(“%d ”, &a);
2、数组名。 int a[10], b[10]; a = b; //错误,为什么
一维数组做函数参数
• 在调用函数时,如果被调函数的形参是一维 数组,则对应的实参是一个内存单元的地址 ,实参数组和形参数组共享一段内存。
int i;
for (i=0; i<n; i++) {
printf("%d ", a[i]); } }
程序举例
P243.C 程序的功能是:从键盘分别读入5个数到 arrA中、8个数至arrB中,然后分别调用自定义函数 计算数组arrA和arrB各元素的平均值、再输出平均 值。
float average(int a[], int n) {
int i, sum = 0;
for (i=0; i<n; i++) {
sum = sum + a[i]; }
return (float)sum/n; }
程序举例
P244.C 程序的功能是:从键盘分别读入5个数到 arrA中、8个数至arrB中,再读入一个欲查找的数 searchVal,然后分别调用自定义函数在数组arrA和 arrB中查找searchVal所在位置的下标(不考虑在数 组中存在多个searchVal的情况)、输出查找结果。
void max(int a[N][N], int hang, int lie) {
int i, j, maxvalue, maxlie; for (i=0; i<hang; i++) {
maxvalue = a[i][0]; maxlie = 0; for (j=1; j<lie; j++) { if (a[i][j] > maxvalue) {
void nixu(char a[]) {
int i, j; char tmp;
for (i = 0, j = strlen(a) - 1; i < j; i++, j--)
{ tmp = a[i]; a[i] = a[j]; a[j] = tmp;
} }
二维数组做函数参数
• 在调用函数时,如果被调函数的形参是二维数组, 则对应的实参是一个内存单元地址,实参数组和形 参数组共享一段内存。
数据类型 形参名 如果有多个形参,用逗号分隔。
函数的调用
要让计算机执行一个函数,就必须对函数进行调用。
说明:
• 调用库函数,需要在源程序最前面通过include预编译指令 引入对应库函数的头文件
• 调用库函数的关键是遵守函数原型定义的约定 • 使用正确的函数名 • 传递的实参在数量,类型和顺序必须和形参一致 • 如果有函数值,注意返回值的类型
• 函数可以嵌套调用,递归调用,但是不能循环调用。
函数总结
1、实参与形参的个数相等,类型一致; 2、实参可以是变量、表达式、常数,实参必须有确 定的值; 3、在调用函数时,如果被调用函数的形参是变量, 实参和形参分别拥有各自的内存空间,实参将值传递 给对应的形参,形参值的改变不影响实参; 4、如果函数调用在前,函数定义在后,则在调用函 数前必须对函数进行原型声明。
int search(int a[], int n, int m) {
int weizhi = -1, i;
for (i=0; i<n; i++) {
if (a[i] == m) {
weizhi = i; break; } }
return weizhi; }
程序举例
P817.C 程序的功能是:从键盘输入一行可带空格 的字符串(约定:字符数≤127字节),调用函数将该 字符串逆序存放,然后输出该字符串。
相关文档
最新文档