内容正文:
江苏省XY中等专业学校2022-2023-1教案 编号:
专业名称
计算机应用
课程名称
C语言
所在
年级
三年级
主备
教师
授课教师
授课
系部
授课班级
授课
日期
课题
数组名作为函数参数
教学
目标
1、认识函数的调用过程
2、能看懂函数调用的程序
3、培养学生对函数调用的学习
重点
数组元素作为函数的参数与数组名作为函数的参数的不同
难点
区别两者对主调函数中数组元素的影响
教法
讲授法、案例教学法、讨论法
教学设备
黑板 计算机 网络机房
教学
环节
教学活动内容及组织过程
个案补充
教
学
内
容
一、导入:
数组名作为函数的参数,数组元素变化对数组的影响是本节课的重点学习内容
二、讲授:
数组名作为函数参数对数组元素的影响。
例1、
#include <stdio.h>
void nzp(int a[5])
{ int i;
printf("
values of array a are:
");
for(i=0;i<5;i++)
{ if(a[i]<0) a[i]=0;
printf("%d ",a[i]);}
}
void main()
{
int b[5],i;
printf("
input 5 numbers:
");
for(i=0;i<5;i++)
scanf("%d",&b[i]);
printf("initial values of array b are:
");
for(i=0;i<5;i++)
printf("%d ",b[i]);
nzp(b);
printf("
last values of array b are:
");
for(i=0;i<5;i++)
printf("%d ",b[i]);
}
程序中函数nzp的形参为整型数组a,长度为 5。主函数中实参数组b也为整型,长度也为5。在主函数中首先输入数组b的值,然后输出数组b的初始值。接着以数组名b为实参调用nzp函数。在nzp中,按要求把负值单元清零,并输出形参数组a的值。返回主函数之后,再次输出数组b的值。从运行结果可以看出,数组b 的初值和终值是不同的,数组b 的终值和数组a是相同的。这说明实参形参为同一数组,它们的值同时得以改变。
案例1程序修改
#include <stdio.h>
void nzp(int a[8])
{
int i;
printf("
values of array aare:
");
for(i=0;i<8;i++)
{
if(a[i]<0)a[i]=0;
printf("%d",a[i]);
}}
void main()
{
int b[5],i;
printf("
input 5 numbers:
");
for(i=0;i<5;i++)
scanf("%d",&b[i]);
printf("initial values of array b are:
");
for(i=0;i<5;i++)
printf("%d",b[i]);
nzp(b);
printf("
last values of array b are:
");
for(i=0;i<5;i++)
printf("%d",b[i]);
}
程序与案例1程序相比,nzp函数的形参数组长度改为8,函数体中,for语句的循环条件也改为i<8。因此,形参数组 a和实参数组b的长度不一致。编译能够通过,但从结果看,数组a的元素a[5]、a[6]、a[7]显然是无意义的。在函数形参表中,允许不给出形参数组的长度,或者用一个变量来表示数组元素的个数。可以写为:
void nzp(int a[])
或
void nzp(int a[],int n)
其中形参数组a没有给出长度,而由n值动态地表示数组的长度。n的值由主调函数的实参进行传送。
练习1、
#include"stdio.h"
void display(int b[],int n)
{int i;
for(i=0;i<n;i++)
printf("%4d",b[i]);
}
main()
{int a[5]={10,20,30,40,50};
display(a,5);
}
练习2、
#include"stdio.h"
int f(int b[][4],int n)
{int i,j,sum=0;
for(i=0;i<n/2;i++)
for(j=0;j<4;j++)
sum+=b[i][j];