7.3数组与指针应用(教案)-《C语言程序设计》同步教学(电子工业版)

2024-11-18
| 6页
| 137人阅读
| 1人下载
普通

内容正文:

课程单元教案 本课编号 21 本课课时 4学时 内容提要 项目7 指针应用 任务3数组与指针应用 教学目的 1.掌握指向数组元素的指针变量的定义和引用方法; 2.掌握指向数组的指针变量作为函数参数的应用。 知识能力 结构 1.掌握指向数组元素的指针变量的定义和引用方法; 2.掌握指向数组的指针变量作为函数参数的应用。 教学重点 难点 重点:掌握指向数组元素的指针变量的定义和引用方法; 掌握指向数组的指针变量作为函数参数的应用。 难点: 掌握指向数组的指针变量作为函数参数的应用。 教学手段 方法 教学方法:任务驱动教学法、启发式 教学手段:课堂讲授法、多媒体教学 思考题与 习题 1.指针如何与数组建立指向关系? 2.如何用指针访问一维数组? 3.如何用指针访问二维数组? 教学内容进程设计 复习回顾:指针变量定义、功能和用法。 任务导入:综合实践7 学生成绩管理系统指针应用设计 任务描述:学生成绩管理系统文指针应用设计:应用指针实现学生成绩信息(包括学号、姓名、5门成绩、总分、平均分等基本信息)的输入、输出及处理。并用指针作为函数形参实现综合实践6中的各项功能。 任务3 数组与指针应用 3.1指针与一维数组 1.数组元素的指针 定义格式:类型名 *指针变量名; 用指针变量指向数组元素: int a[10]={1,2,3,4,5,6,7,8,9,10},*p; p=&a[0]; //等价于p=a; 说明:数组名代表数组元素的首地址,不代表整个数组,所以p=a和p=&a[0]是等价的。 举例1、通过指针输入并输出整型数组的10个元素值。 #include<stdio.h> main(){ int a[10],*p,i; printf(“输入10个整数: ”); p=a; for(i=0;i<10;i++){ scanf(“%d”,p++); } p=a; for(i=0;i<10;i++){ printf(“%3d”,*p++); } printf(“ ”); } 执行scanf(“%d”,p++);输入数据后指针移动,当循环结束后指针指向尾元素的下一个存储空间。因此,执行printf(“%3d”,*p++);之前,需要把指针进行复位:p=a;。 2.访问数组元素的方法 访问数组元素除了常用的下标法之外,还可以用数组名和指针变量进行访问,称为地址法和指针法。 例如:int a[10]={1,2,3,4,5,6,7,8,9,10},*p; 用地址法访问数组元素: for(i=0;i<10;i++) printf(“%3d”,*(a+i)); 说明:(1)数组名代表数组首地址,是一个指针型常量程序运行期间是固定不变的,所以不允许更新操作,如a++;或者a=a+1;都是错误的。 (2)a+i代表元素a[i]的地址。 (3)一维数组a中的元素a[i]用地址法可表示为:*(a+i) 。 指针法访问数组元素,指针可以移动,也可以保持指向不变。 指针移动:printf(“%3d”,*p++); 指针不动:printf(“%3d”,*(p+i)); 说明:(1)p+i和a+i就是a[i]的地址,或者说它们指向数组的第i个元素。 (2)*(p+i)或*(a+i)是p+i或a+i所指向的数组元素,即a[i]。 (3)指向数组元素的指针变量可以带下标,如p[i]与*(p+i)等价。 (4)指针变量可以实现本身的值改变,数组名不可以,即:p++正确,而a++不正确。 举例:用指针法求一维数组中的最大值。 #include <stdio.h> #define N 10 main(){ int a[N],i,max; printf("请输入%d个数据:",N); for(i=0;i<N;i++) scanf("%d",&a[i]); max=a[0]; for(i=0;i<N;i++) if(max<a[i]) max=a[i]; printf("最大值为%d ",max);} for(p=a;p<a+N;p++)中用指针变量作为循环控制变量,首地址为a,尾地址为a+N。 3.4指针与二维数组 1.二维数组 假设有定义: int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 说明:a是二维数组名,有三个行元素:a[0]、a[1]和a[2],它们分别代表一个包含有4个元素的一维数组。因此把二维数组可以想象成“数组的数组”。 说明:a、a+1和a+2是行地址,a[0]、a[1]和a[2]是列地址,根据地址访问法a[0]等价于*a, a[1]等价于*(a+1), a[2]等价于*(a+2),则元素a[i][j]的地址访问法为*(*(a+i)+j)。 举例:用地址法实现3*4二维数组元素的输入和输出。 #include <stdio.h> main(){ int a[3][4],i,j; printf("地址法输入3*4的二维数组元素: "); for(i=0;i<3;i++){ for(j=0;j<4;j++){ scanf("%d",*(a+i)+j); }} printf("地址法输出二维数组: "); for(i=0;i<3;i++){ for(j=0;j<4;j++){ printf("%d ",*(*(a+i)+j)); } printf(" "); }} *(a+i)+j表示a[i][j]元素的地址,则*(*(a+i)+j)表示a[i][j]元素。 2.指针与二维数组 (1)指向二维数组元素的指针变量 定义格式:类型标识符 *指针变量名; 举例:用指向数组元素的指针变量p访问整型二维数组a[3][4]的元素。 #include<stdio.h> main(){ int a[3][4],i,j,*p; printf("输入3*4的二维数组元素: "); p=&a[0][0]; for(i=0;i<3;i++){ for(j=0;j<4;j++){ scanf("%d",p++); } } printf("输出二维数组: "); p=&a[0][0]; for(i=0;i<3;i++){ for(j=0;j<4;j++){ printf("%d ",*p++); } printf(" "); }} 指针变量p为指向二维数组元素的指针变量,初始值为a[0][0]的地址,则p++表示指向下一个元素。 (2)指向一维数组的指针变量 定义格式:类型标识符 (*指针变量名)[整型常量]; 功能:定义一个包含有若干个元素的一维数组的指针变量。 举例:用指向一维数组的指针变量p访问整型二维数组a[3][4]的元素。 #include<stdio.h> main(){ int a[3][4],i,j,(*p)[4]; printf("输入3*4的二维数组元素: "); p=a; for(i=0;i<3;i++){ for(j=0;j<4;j++){ scanf("%d",*(p+i)+j); } } printf("输出二维数组: "); for(i=0;i<3;i++){ for(j=0;j<4;j++){ printf("%d ",*(*(p+i)+j)); } printf(" "); }} 指针变量p为指向包含4个元素一维数组的指针变量,初始值为a,则p++不是指向下一个元素,而是指向下一行。因此,*(*(p+i)+j)表示a[i][j]元素。 3.3指向数组的指针变量作为函数参数 1.指向一维数组元素的指针变量作为函数参数 在数组名作为函数参数传递中,形参数组只是用来接收实参数组传递的地址符号,而不是一个真实的数组,不必设定长度,也不会开辟新的空间,因此本质上形参数组名就是一个指针变量,接收实参数组传递的地址符号。 举例:用指针变量作为函数参数编写功能函数将数组a中的整数按相反顺序存放。 #include <stdio.h> void inv(int *x,int n ) {int *p,t,*i,*j; j=x+n-1; for (i=x;i<j;i++,j--) {t=*i;*i=*j;*j=t;} } main ( ) {int i ,a[10]={3,7,9,11,0,6,7,5,4,2}; printf(“原数组: "); for (i=0;i<10;i++) printf("%4d",a[i]); printf(" "); inv(a,10); printf(“交换后: "); for (i=0;i<10;i++) printf("%4d",a[i]); printf(" "); } 2.指向二维数组元素的指针变量作为函数参数 举例:假设已有3个学生,每个学生有4门成绩,编写函数求所有学生成绩的总平均分。 #include<stdio.h> float aver(float *p,int m,int n){ int i,j; float s=0; for(i=0;i<m;i++){ for(j=0;j<n;j++){ s+=*p; p++; } } return(s/(m*n)); } main(){ float score[3][4]={{45,67,75,71},{87,80,96,91},{77,75,82,73}}; int i,j; printf("输出成绩: "); for(i=0;i<3;i++){ for(j=0;j<4;j++){ printf("%7.2f",score[i][j]); } printf(" "); } printf("学生总平均分:%.2f ",aver(score[0],3,4)); } 形参p是指针变量,用于接收二维数组元素score[0][0]的地址,即score[0]的值。 3. 指向一维数组的指针变量作为函数参数 举例:有3个学生,每个学生4门成绩,输入要查询的学生的序号n,编写函数输出该学生的成绩。 #include<stdio.h> void search(float (*p)[4],int n){ int i; printf("第%d个同学的成绩: “,n); for(i=0;i<4;i++){ printf("%7.2f",*(*(p+n-1)+i)); } printf(" "); } main(){ float score[3][4]={{45,67,75,71},{87,80,96,91},{77,75,82,73}}; int i,j,n; printf("输出成绩: "); for(i=0;i<3;i++){ for(j=0;j<4;j++){ printf("%7.2f",score[i][j]); } printf(" "); } printf("输入学生序号(1-3):"); scanf("%d",&n); search(score,n); } 其中,形参变量p是指向包含4个元素一维维数组的指针变量,接收实参变量二维数组名score的值,则*(p+n-1)表示要查询的学生所在行的首地址。 随堂实训: 1.用指针变量对一维数组中的元素进行排序并输出。 2.用指针变量作为函数参数实现题目1。 3.用指针变量把3*3的二维数组进行转置并输出。 4.用指针变量作为函数参数实现题目3。 教学小结 1.指向数组元素的指针变量的定义和引用方法; 2.指向数组的指针变量作为函数参数的应用。 学科网(北京)股份有限公司 $$

资源预览图

7.3数组与指针应用(教案)-《C语言程序设计》同步教学(电子工业版)
1
7.3数组与指针应用(教案)-《C语言程序设计》同步教学(电子工业版)
2
7.3数组与指针应用(教案)-《C语言程序设计》同步教学(电子工业版)
3
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。