模块四 数组应用训练 电子教案(表格式) C语言程序设计(高教版)

资源下载
  1. 二一教育资源

模块四 数组应用训练 电子教案(表格式) C语言程序设计(高教版)

资源简介

第3章 面向对象(上)
模块四 数组应用训练
职业本科规划教材
《C语言程序设计》
教学设计
课程名称: C语言程序设计
授课年级: 2022年级
授课学期: 2022学年第一学期
教师姓名: XXX
2021年10月22日
课题名称 模块四 数组应用训练 计划学时 8学时
内容分析 所谓数组,就是同类型有序数据的集合。可以为该数据集合起一个名字,称为数组名。该数据集合中的各数据项称为数组元素,用数组名和下标表示。
教学目标及基本要求 (1) 熟练掌握一维数组的使用;(2) 熟练掌握字符数组及字符串的使用(3) 理解二维数组的使用;(4) 了解多维数组的使用。
教学重点 一维数组、字符数组、字符串
教学难点 字符串、二维数组
教学方式 教学采用教师课堂讲授与学生操作练习共同进行的一体化教学方式概念性知识点:提出为什么,将抽象具体化,配合教学PPT、案例辅助讲解。操作性知识点:提需求,并上机演示如何操作,重点内容总结经验及注意事项。学生操作练习:完成教材中的引例、做中学以及练中学案例,有能力的学生还可以完成教师额外布置的拓展练习题目。
教学过程 第一、二学时(一维数组语句)一、引例任务,提出需求(1)通过引力任务,引出本节所需知识内容。【引例任务】输入5个数,求其平均值。【程序代码】#include void main(){ int i,a[5]; float s=0,ave; printf("请输入5个整型数据:\n"); for(i=0;i<5;i++) scanf("%d",&a[i]); for(i=0;i<5;i++) s+=a[i]; ave=s/5.0f; printf("平均值为:%4.2f\n",ave);}【程序运行】请输入5个整型数据:5 6 7 8 9 2↙平均值为:7.00(2)明确学习方向。【知识点】一维数组的语法格式数组元素的引用格式一维数组的初始化【能力点】一维数组的应用明确目标,完成任务一维数组的定义由一组类型相同的相关数据项构造而成的集合称为数组(Array),在内存中占据连续的存储空间。构成数组的数据项称为数组的元素(element of Array)。同一数组中的元素,具有相同的数据类型。【做中学4-1】从键盘输入一组数据,然后逆序输出。【程序代码】 #include void main(){ int i,a[10]; for(i=0;i<=4;i++) scanf(“%d”,&a[i]); /*对数组各元素赋值*/ for(i=4;i>=0;i--) printf("a[%d]=%d ",i,a[i]); /*逆向输出数组元素的值*/}1)一维数组的语法格式:[存储类型] 数据类型 数组名[数组长度]说明:(1) 存储类型是auto类型或static类型,缺省时系统默认为auto类型。如果定义为auto类型,数组存放在动态存储区;如果定义为static类型,数组存放在静态数据区。(2) 数据类型表示的是数组中各元素的数据类型,可以是任何基本类型和构造类型。但同一数组中的各元素必须属于同一数据类型。(3) 数组名的命名应该符合C语言中标识符命名规则。(4) 定义数组时,数组的长度是数组中元素的个数,只能用常量或符号常量表示,不能是变量或包含变量的表达式。2)数组元素的引用格式:数组名[下标]数组元素:a[0]a[1]a[2]a[3]a[4]a[5]a[6]存储单元:-235-413246684-9336-545它表示数组中的某个元素。下标是数组元素在数组中的排列序号,可以是整型常量、变量或表达式。例如:a[0]=a[1]+3+a[2*2]+a[9-3]3)一维数组的初始化数组的初始化可以在定义时完成,也可以在数组定义之后对数组元素逐个赋值。(1) 在定义时进行初始化的格式:数据类型 数组名 [数组长度]={数据1,数据2,…,数据n};(2) 说明:(1) 花括弧中的数据应与定义的类型一致,否则系统会进行自动类型转换。(2) 可以只给数组的前面一部分元素赋值。例如:int a[6]={0,3,2};a数组的前3个元素依次得到相应的赋值,而后3个元素则由系统自动赋为0。(3) 在对数组全部元素赋值时,可以省略数组的长度。例如:int a[]={0,3,2,6,-9,10,45,78};系统会根据花括弧中初值的个数自动定义a数组的长度为8。一维数组的应用【做中学4-2】输入10个数,输出其中的最大值和最小值。【程序代码】#include #define N 10void main(){ int i; float a[N],max,min; printf("请输入%d数据:\n",N); for(i=0;i<=N-1;i++) scanf("%f",&a[i]); max=min=a[0]; for(i=0;i<=N-1;i++){ if (a[i]>max) max=a[i]; if (a[i]#define N 11void main(){ int i,j, t,a[N];printf("请输入%d个待排序数据:\n",N-1); for(i=1;ia[j+1]) { /*比较相邻元素,将大值置后*/ t=a[j]; a[j]=a[j+1]; a[j+1]=t; } printf("\n排序后的数据为:\n"); for(i=1;ivoid main(){ int i,j,a[4][5]; for (i=0;i<4;i++) for (j=0;j<5;j++) a[i][j]=i*j; for (i=0;i<4;i++) { for (j=0;j<5;j++) printf("a[%d][%d]=%2dKKKK",i,j,a[i][j]); printf("\n"); }for (i=0;i<4;i++) { for (j=0;j<5;j++) printf("%dKKKK",a[i][j]); printf("\n"); }}1)二维数组的定义 二维数组的语法格式: 存储类型 数据类型 数组名[第一维长度][第二维长度]第一维长度代表数组矩阵的行数,第二维长度代表数组矩阵的列数。二维数组在内存中是按先行后列的顺序存放。即先存放第一行元素,然后依次存放第二行、第三行、……。2)二维数组的引用同一维数组一样,二维数组也是必须先定义后引用,二维数组的引用也是通过下标来实现的。格式为:数组名[行下标][ 列下标]其中,行下标和列下标表示数组元素所在的行和列,下标可以是常量,变量,或整数表达式。并且每个下标都必须用方括号括起来,行下标和列下标都不能超出定义范围。例如:int a[3][4]; a[0][3]表示二维数组a的第0行第3列的元素,a[i][j]表示a数组的第i行第j列的元素。对a数组中各元素引用时,行下标的范围为0~2,列下标的范围为0~3。3)二维数组的初始化二维数组初始化可以在定义时完成,也可以在程序当中逐个赋值。定义时初始化二维数组的语法格式为数据类型 数组名[第一维长度][第一维长度]={{数据行1},{数据行2},…,{数据行n}}或:数据类型 数组名[第一维长度][第一维长度]={数据1,数据2,…,数据n}数据行是指数组矩阵中某行数据按从左至右的次序排列起来的集合,数据行中的各数据项之间用逗号隔开。例如:int a[3][4]={{1,0,5,2},{3,0,0,0},{0,0,0,0}};数组a被初始化为:a[0][0]=1 a[0][1]=0 a[0][2]=5 a[0][3]=2a[1][0]=3 a[1][1]=0 a[1][2]=0 a[1][3]=0a[2][0]=0 a[2][1]=0 a[2][2]=0 a[2][3]=0使用第二种形式进行初始化时,系统将按数组中每个数据在内存中排列的顺序依次对数组元素赋值。上例可写成 int a[3][4]={1,0,5,2,3,0,0,0,0,0,0,0};当二维数组的长度较小时,利用这种格式对数组进行初始化显得简洁方便。但当数组长度较大时,则容易引起混乱,而且不易修改,而利用第一种格式比较直观且方便修改。说明:(1) 可以只给部分元素赋初值,此时系统将自动给剩余的元素赋0值。当位于数组后面大部分的元素值为0时,使用第二种格式给数组赋初值。(2) 给全部元素赋值时,可省略一维数组长度。当使用上述两种初始化格式对二维数组的全部元素都赋初值时,可以省略第一维长度,但不能省略第二维长度。系统将根据花括弧中的数据总数确定数组的第一维长度。数组a中共有12个数据且列数为4,则可确定其行数为3。2. 二维数组应用【做中学4-5】编写程序,求3×4矩阵中值最小的元素的值,及其所在的行号、列号。【程序代码】 #define ROW 3#define COL 4 #include void main(){ int i,j,row=0,column=0,min; static int a[ROW][COL]={{1,22,13,43},{345,3,-500,96},{103,10,3,20}}; min=a[0][0]; for(i=0;i<3;i++) for(j=0;j<4;j++) if (a[i][j]void main(){int a[2][3]={5,6,7,8,2,1},c[2][4],i,j,k;int b[3][4]={{2,5,1,3},{3,5,0,2},{6,4,2,7}};for (i=0;i<2;i++)for (j=0;j<4;j++){ c[i][j]=0; for (k=0;k<3;k++) c[i][j]+=a[i][k]*b[k][j]; }printf("矩阵a与b的乘积矩阵c为:\n");for (i=0;i<2;i++){ for (j=0;j<4;j++) printf("%4d",c[i][j]); printf("\n");}} 三、归纳总结,布置课后作业 (1)回顾上课前的学习目标,对本节课知识点进行总结。 (2)扫描二维码查看相应资源,完成课后作业。第五、六学时(字符数组、字符串)引例任务,提出需求(1)回顾上节课的内容,二维数组的应用。(2)明确本节课学习方向。【知识点】字符数组字符串【能力点】掌握字符数组的应用掌握字符串的应用二、明确目标,完成任务1. 字符数组用来存放字符型数据的数组是字符数组。字符数组的一个元素存放一个字符。字符数组的定义、引用和初始化与前面介绍的数组类似,它也有一维字符数组,二维字符数组和多维字符数组。字符数组通常用来存放和处理字符串。【做中学4-7】使用字符数组输出“I am happy!”。【程序代码】 #include void main(){ static char c[11]={'I',' ','a','m',' ','h','a','p','p','y','!'}; int i; for(i=0;i<11;i++) printf("%c",c[i]); printf("\n");}1)字符数组的定义字符数组的定义方法与前面介绍的数组的定义方法类似,它的数据类型是char。2)字符数组的引用字符数组的引用也是由数组名和下标组合在一起来表示数组元素。可以引用字符数组中的某个元素,得到一个字符。3)字符数组的初始化字符数组的初始化与普通数组的初始化类似,可以在定义数组时完成,也可以在定义之后再逐个给数组元素赋值。4)字符数组的应用【做中学4-8】输入一行简单英文句子,统计其中单词的个数。【程序代码】 #include void main(){ char ch,st[50];int i=0,words=0,flag=0;printf("请输入一行英文句子:\n");gets(st); while ((ch=st[i])!='\0'){if (ch==' ') flag=0; else if (flag==0){ flag=1; words+=1; } i++;}printf("该句子有%d个单词。\n",words);}【做中学4-9】要求输入多名学生的姓名,并按姓名升序输出学生名单。【程序代码】 #include #include #define N 10void main(){ char str[20],name[N][20]; int i,j,p; for (i=0;i字符串2,则函数值为1;如果字符串1<字符串2,则函数值为-1;5)strcpy(字符数组,字符串)功能:将字符串复制到字符数组中,函数返回字符数组的起始地址。在C语言中,不能直接将字符串或字符数组用赋值号赋值给一个已定义过的字符数组。6)strlen(字符串)功能:求字符串的长度,不包括‘\0’在内。当参数为字符数组时,要求参数必须使用字符数组名。函数返回值为字符串的长度。7) strlwr(字符串)功能:将字符串中的大写字母转换为小写字母。当参数为字符数组时,要求必须使用字符数组名。函数返回值为转换后的小写字符串。8) strupr(字符串)功能:将字符串中的小写字母转换为大写字母。当参数为字符数组时,要求参数必须使用字符数组名。函数返回值为转换后的大写字符串。三、归纳总结,布置课后作业 (1)回顾上课前的学习目标,对本节课知识点进行总结.(2)扫描二维码查看相应资源,完成课后作业。第七、八学时(边学边练、实训题)一、上机练习【能力点】掌握一维数组、二维数组的定义和使用掌握字符数组及字符串的使用掌握字符串函数的应用【练中学4-1】使用筛选法求100以内的素数,并按每行放10个素数的格式把它们打印出来。 【程序代码】#include #define SIZE 100#define PWIDTH 10void main(){ char sieve[SIZE+1]={0}; int i,n,printcol=0; sieve[0]=1; for(n=1; n<=SIZE;n++) if(sieve[n-1]==0){ printf("%5d",n); if(++printcol>=PWIDTH){ putchar('\n'); printcol=0; } for(i=n;i<=SIZE;i+=n) sieve[i-1]=1; } if(printcol!=0) putchar('\n');}【练中学4-2】判别用户输入的字符串是否符合C语言合法标识符的规定。【程序代码】#include #define NUM 255void main(){ int i; char c,ident[NUM+1]; printf("请输入字符串!\n"); for(i=0;i='a'&& c<='z' || c>='A' && c<='Z' || c>='0' && c<='9' || c=='_' ) ident[i]=c; else if(c==' ' || c=='\n'){ i++; break; } else goto error; } ident[i]='\0'; if(ident[0]<'0' || ident[0]>'9')printf("标识符为: %s\n",ident); if(ident[0]<'A' || ident[0]>'Z' && ident[0]<'a'&& ident[0]!='_' || ident[0]>'z' )error: printf("不是标识符!\n"); }二、归纳总结,完成课后实训题 (1)回顾本节课的学习目标,对知识点进行总结。 (2)完成课后实训作业。
教学后记
2

展开更多......

收起↑

资源预览