湖南省C语言上教案第六章数组高教版doc.docx
- 文档编号:8901041
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:34
- 大小:89.67KB
湖南省C语言上教案第六章数组高教版doc.docx
《湖南省C语言上教案第六章数组高教版doc.docx》由会员分享,可在线阅读,更多相关《湖南省C语言上教案第六章数组高教版doc.docx(34页珍藏版)》请在冰豆网上搜索。
湖南省C语言上教案第六章数组高教版doc
课题
一维数组
教学
目的
1、掌握一维数组的定义和引用
教材
分析
教学重点
一维定义、引用、初始化
教学难点
数组的存储形式,数组的首地址
课时安排
1
教学方法
讲授与演示法相结合讨论法
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
一新课引入
数组是有序数据的集合,数组中每一个元素都属于同一个数据类型。
问题:
给一组数排序,这组数该如何存放呢
.1.1.1.1.2.4..5.3.6.8..7.7.7.4.41.5.8
?
?
?
这些数据如何存放才便于排序,这便是本章所要解决的问题
•一个班学生的学习成绩
•一行文字
•一个矩阵
这些数据的特点是:
1.具有相同的数据类型
2.使用过程中需要保留原始数据
C语言为这些数据,提供了一种构造数据类型:
数组。
所谓数组就是一组具有相同数据类型的数据的有序集合。
二、新授
一、一维数组的定义和引用
定义数组,就是要:
(1)规定数组的名称,其取名规则与变量名相同;
(2)规定数组的类型,包括其数据类型和存储类型;
(3)规定数组的大小,即数组的维数及包含的数组元素的个数。
数组元素就是包含在数组中的变量。
1、一维数组的定义:
类型说明符数组名[常量表达式]
例如:
inta[10];
它表示定义了一个整形数组,数组名为a,此数组有10个元素。
例如:
intdata[10],number[5];
说明:
1.数组名定名规则和变量名相同,遵循标识符定名规则。
2.在定义数组时,需要指定数组中元素的个数,方括弧中的常量表达式用来表示元素的个数,即数组长度。
3.常量表达式中可以包括常量和符号常量,但不能包含变量。
也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。
例如:
intn;
scanf(“%d″,&n);/*在程序中临时输入数组的大小*/
inta[n];
三、小结
备注
第六章数组
课题
一维数组
教学
目的
1、掌握一维数组的定义和引用
2、维数组的初始化
教材
分析
教学重点
一维定义、引用、初始化
教学难点
数组的存储形式,数组的首地址
课时安排
1
教学方法
讲授与演示法相结合讨论法
教具
计算机、投影仪
教
学
内
容
及
过
程
设
计
一复习引入
数组说明中其他常见的错误:
①floata[0];/*数组大小为0没有意义*/
1intb
(2)(3);/*不能使用圆括号*/
2intk,a[k];/*不能用变量说明数组大小*/
如何引用数组中元素的值?
二、新授
1、一维数组元素的引用
数组名[下标]
下标可以是整型常量或整型表达式。
例如:
a[0]=a[5]+a[7]-a[2*3]
注意:
定义数组时用到的“数组名[常量表达式]”和引用数组元素时用到的“数组名[下标]”是有区别的。
2、一维数组在内存中占一段连续的存储空间,其首地址:
a或&a[0]
例:
floatmark[100];
每个数据元素占用的字节数,就是基类型的字节数一个元素占4个字节
3、一维数组的初始化
1.在定义数组时对数组元素赋以初值;inta[10]={0,1,2,3,4,5,6,7,8,9};
2.可以只给一部分元素赋值;inta[10]={0,1,2,3,4};
3.如果想使一个数组中全部元素值为0,可简便实现;
inta[10]={0,0,0,0,0,0,0,0,0,0};
其实,对static数组不赋初值,系统会对所有数组元素自动赋以0值,即上句等价于:
staticinta[10];
不能写成:
inta[10]={0*10};
4.C允许通过所赋初值的个数来隐含定义一维数组的大小;在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度
inta[]={0,1,2,3,4,5,0};相当于inta[7]={0,1,2,3,4,5,0};
实例1:
用数组来处理,求解Fibonacci数列。
前20个数
Fibonacci数列公式:
已知:
a1=a2=1an=an-1+an-2即:
1,1,2,3,5,8,13
代码略
一、小结
1、 一维数组的定义、引用及初始化
2、 一维数组的存储形式
备注
实例要求上机,安排习题课堂2节
教
学
内
容
及
过
程
设
计
5编程:
1、按已给流程写出下列题和程序代码用起泡法对10个数排序(由小到大)代码略
(比较、选择、插入法共四种方法晚习讲解)
6、下面程序的运行结果是参考答案:
12345。
main()
{inta[10]={1,2,2,3,4,3,4,5,1,5};
intn=0,i,j,c,k;
for(i=0;i<10-n;i++)
{c=a[i];
for(j=i+1;j<10-n;j++)
if(a[j]==c)
{for(k=j;k<10-n;k++)
a[k]=a[k+1];
n++;}
}
for(i=0;i<10-n;i++)printf("%3d",a[i]);
}
7、下面程序的功能是输入5个整数,找出最大数和最小数所在的位置,并把二者对调,然后输出调整后的5个数。
main()
{inta[5],max,min,i,j,k;
for(i=0;i<5;i++)
scanf("%d:
&a[i];
min=a[0];
for(i=1;i<5;i++)
if(a[i] max=a[0]; for(i=1;i<5;i++) ifa[i]>max){max=a[i];【2】;} 【3】 printf("\nThepositionofminis: %3d\n",k); printf("\nThepositionofmaxis: %3d\n",j); for(i=0;i<5;i++) printf("%5d",a[i]); } 参考答案: 【1】j=i【2】k=i【3】a[j]=max;a[k]=min; 布置作业 上机练习: 课堂例题 汇编练习: 循环章节1-5 课题 一维数组习题课 教学 目的 掌握一维数组的初始化与应用 课时安排 2 教 学 内 容 及 过 程 设 计 一复习引入 #include voidmain() {inti; intf[20]={1,1}; for(i=2;i<20;i++)f[i]=f[i-2]+f[i-1]; for(i=0;i<20;i++) {if(i%5==0)printf(″\n″);printf(″%12d″,f[i]);}/*For循环结束*/ }/*程序结束*/ 二、习题讲解 1、以下对一维数组a的正确说明是参考答案: D。 A)intn;scanf("%d",&n);inta[n];B)intn=10,a[n]; C)inta(10);D)#defineSIZE10 inta[SIZE]; 2.若有说明: inta[10];则对数组元素的正确引用是参考答案: D。 A)a[10]B)a[3,5]C)a(5)D)a[10-10] 3.在C语言中,一维数组的定义方式为: 类型说明符数组名考答案: A A)[常量表达式]B)[整型表达式] C)[整型表达式]或[整型常量]D)[整型常量] 4下面程序有错误的行是. 1main() 2{ 3inta[3]={1}; 4inti; 5scanf("%d",&a); 6for(i=1;i<3;i++)a[0]=a[0]+a[i]; 7printf("a[0]=%d\n",a[0]); 8} 1、若有以下输入(数之间有空格),则下面程序的运行结果是 参考分析: 本程序是删除用户所输入的所有奇数。 7165467983246122-1 main() {intb[51],x,i,j=0,n=0;scanf("%d",&x);while(x>-1){b[++n]=x;scanf("%d",&x);} for(i=1;i<=n;i++)if(b[i]%2==0)b[++j]=b[i]; for(i=1;i<=j;i++)printf("%3d",b[i]);} 备注 实例上机,习题课2节 课题 第六章数组 教学 目的 1掌握二维数组的定义和引用 教材 分析 教学重点 二维数组的定义、引用、初始化 教学难点 数组的存储形式,数组的首地址 课时安排 2 教学方法 讲授与演示法相结合例举法、讨论法 教具 计算机、投影仪 教 学 内 容 及 过 程 设 计 第一课时 一、复习引入 一维数组他定义,是一行同类型的变量存储空间,那若是几行同类型的变量来存量数据将如何实现? 二、新授 1、二维数组的定义 类型说明符数组名[常量表达式1][常量表达式2]; 如: intnumber[5][4];数组的存储结构: 以行为主序的连续空间 定义a为3×4(3行4列)的数组,b为5×10(5行10列)的数组。 如下: floata[3][4],b[5][10]; 不能写成floata[3,4],b[5,10]; 注意: 我们可以把二维数组看作是一种特殊的一维数组: 它的元素又是一个一维数组。 例如: 可以把a看作是一个一维数组,它有3个元素: a[0]、a[1]、a[2],每个元素又是一个包含4个元素的一维数组 2、二维数组在内存中的存放 二维数组中的元素在内存中的排列顺序是: 按行存放,即先顺序存放第一行的元素,再存放第二行的元素……下图表示对a[3][4]数组存放的顺序 3、二维数组的引用: 二维数组元素的表示形式为: 数组名[下标][下标] 例如: a[2][3] 下标可以是整型表达式,如a[2-1][2*2-1] 不要写成a[2,3],a[2-1,2*2-1]形式 在使用数组元素时,应该注意下标值应在已定义的数组大小的范围内。 常出现的错误有: inta[3][4];/*定义a为3×4的数组*/ ┆ a[3][4]=3; 练习: 1、以下对二维数组a的正确说明是参考答案: C。 A)inta[3][];B)floata(3,4); C)doublea[1][4];D)floata(3)(4); 2、若有说明: inta[3][4];则对a数组元素的正确引用是参考答案: C A)a[2][4]B)a[1,3]C)a[1+1][0]D)a (2) (1) 参考分析: 在实际应用中a[2][4]这种应用方式实质上访问的是a[3][0],这是越界访问。 教 学 内 容 及 过 程 设 计 第二课时 1、复习第一课时内容并拓展思考: 有了二维数组的基础,那么多维数组如何定义呢? 定义三维数组: floata[2][3][4]; 注意: 多维数组元素在内存中的排列顺序: 第一维的下标变化最慢,最右边的下标变化最快 2、二维数组的初始化 1. 分行给二维数组赋初值: 如 staticinta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 2. 可以将所有数据写在一个花括号内,按数组排列的顺序对元素赋初值;如: staticinta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 3. 如果花括号内的初值个数少于每行中的数组元素个数,则每行中后面的元素自动赋初值0;也允许代表给每行元素赋初值的花括号的数目少于数组的行数,这时,后面各行的元素也自动赋0值。 4.C语言规定,可以用初始化的方法来隐含定义二维数组第一维的大小,即可以省略数组定义中第一个方括号中的表达式,但不能省略第二个方括号中的表达式。 如: staticinta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};等价于staticint[][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 在定义时也可以只对部分元素赋初值而省略第一维长度,但应分行赋初值。 如: staticinta[][4]={{0,0,3},{0},{0,10}}; 3、二维数组的输入与输出 用二重循环,以a[m][n]为例 for(i=0;i for(j=0;j {……} 4、实例讲解: 将一个二维数组行和列元素互换,存到另一个二维数组中。 #include voidmain() { inta[2][3]={{1,2,3},{4,5,6}}; intb[3][2],i,j; printf(″arraya: \n″); for(i=0;i<=1;i++) {for(j=0;j<=2;j++) {printf(″%5d″,a[i][j]);b[j][i]=a[i][j];} printf(″\n″); } printf(″arrayb: \n″); for(i=0;i<=2;i++) {for(j=0;j<=1;j++) printf("%5d″,b[i][j]);printf(″\n″);} }/*程序结束*/ 教 学 内 容 及 过 程 设 计 5、思考练习: 有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。 (要求先作流程图再写程代码,并上机调试) #include voidmain() { inti,j,row=0,colum=0,max; inta[3][4]={{1,2,3,4},{9,8,7,6}, {-10,10,-5,2}}; max=a[0][0]; for(i=0;i<=2;i++) for(j=0;j<=3;j++) if(a[i][j]>max) {max=a[i][j]; row=i; colum=j; } printf(″max=%d,row=%d,colum=%d\n″, max,row,colum); }/*程序结束*/ 三、课堂小结 1、 二维数组的定义、引用及初始化、二维数组的存储形式 四、布置作业 上机练习: 上机训练题+例题汇编练习: (P77)17-28 备注 上机练习,另练习与讲解各一课时 二维数组的定义和二维数组元素的引用 1、若有以下定义,则对b数组元素正确的引用是 intb[2][3]={1,2,3,4,5,6}; Ab[1]Bb[0][3] Cb[2][2]Db[1][1] 2、 3、以下不能正确定义二维数组的选项是( ) A.int a[2][2]={{1},{2}}; B.int a[][2]={1,2,3,4}; C.int a[2][2]={{1},2,3}; D.int a[2][]={{1,2},{3,4}}; 4、以下不能正确定义二维数组的选项是( )。 A. B. C. D. 5、 6、 7、在下列叙述中,错误的是( )。 A.C语言中,二维数组或多维数组是按行存放的 B.赋值表达式b[1][2]=a[2][3]是正确的 C.chara[1];a[0]='A'与inta[1];a[0]='A'等价 D.数组名后的方括号内可以为常量表达式,也可以为变量 8、下列叙述中正确的是( )。 A.为了建立一个关系,首先要构造数据的逻辑关系 B.表示关系的二维表中各元组的每一个分量还可以分成若干数据项 C.一个关系的属性名表称为关系模式 D.一个关系可以包括多个二维表 9、下列程序执行后的输出结果是 main() { char arr[2][4]; strcpy(arr,"you"); strcpy(arr[1],"me"); arr[0][3]=′&′; printf("%s\n",arr);} A.you&me B.you C.me D.err 10、下列二维数组初始化语句中,正确且与语句inta[][3]={1,2,3,4,5}等价的是( )。 A.inta[2][]={{1,2,3},{4,5}}; B.inta[][3]={1,2,3,4,5,0}; C.inta[][3]={{1,0},{2,0},{3,0)}; D.inta[2]={{1,2,3},{4,5,6}}; 11、定义如下变量和数组: int k; int a[3][3]={9,8,7,6,5,4,3,2,1}; 则下面语句的输出结果是 for(k=0;k<3;k++)printf("%d",a[k][k]); A.7 5 3B.9 5 1 C.9 6 3 D.7 4 1 12、若二二维数组a有m列,则在a[i][j]前的元素个数为( ) A.i*m+IB.i*m+j C.j*m+i+1D.i*m+j+1 13、下面的程序段运行后,输出结果是( )。 A.9 B.不确定值 C.0D.18 14、若有定义语句: int a[3][6];按在内存中的存放顺序,a数组的第10个元素是( )。 A.a[0][4] B.a[1][3] C.a[0][3] D.a[1][4] 15、若有函数内部说明: int a[3][4];则数组a中各元素 A.可在程序的运行阶段得到初值0 B.可在程序的编译阶段得到初值0 C.不能得到确定的初值 D.可在程序的编译或运行阶段得到初值0 16、以下语句定义正确的是( ) A.inta[1][4]-{1,2,3,4,5}; B.floata[3][]={{1},{2},{3}}; C.onga[2][3]={{1},{1,2},{1,2,3},{0,0)}; D.doublea[][3]={0}; 二、填空题 17、以下程序中,函数 sumColumM的功能是: 求出M行N列二维数组每列元素中的最小值,并计算它们的和值。 和值通过形参传回主函数输出。 请填空。 #define M 2 #define N 4 void SumColumMin(int a[M][N],int *sum) { int i,j,k,s=0; for(i=0;i { k=0; for(j=1;j if(a[k]>a[j])k=j; s+=_______; } [*sum] =s; } main() { int x[M][N]={3,2,5,1,4,1,8,3},s; SumColumMin(_______); printf("%d\n",s); } 18、设在主函数中有以下定义和函数调用语句,且fun函数为void类型;请写出fun函数的首部【13】。 要求形参名为b。 main() {double s[10][22]; int n; ┆ ┆ fun(s); ┆ } 19、以下程序运行后的输出结果是_______。 main() { int a[4][4]={{1,2,3,4},{5,6,7,8},{11,12,13,14},{15,16,17,18}}; int i=0,j=0,s=0; while(i++<4) { if(i==2||i==4) continue; j=0; do{ s+= a[j]; j++; } while(j<4); } printf("%d\n",s); } 20、在关系模型中,把数据看成一个二维表,每一个二维表称为一个 【5】 。 课题 字符型数组 教学 目的 1、掌握字符数组的定义、初始化,结束标志 2、字符串数据在内存中的存放 教材 分析 教学重点 数组的定义 教学难点 符数组定义与存放 课时安排 1 教学方法 讲授与演示法相结合讨论法 教具 计算机、投影仪 教 学 内 容 及 过 程 设 计 一、复习引导 从一般的一维数组、二维数组到特殊的字符数组 二讲授新课 一)、字符数组的定义: char数组名[exp];如: charc[10]; 二)、字符数组的初始化 1.给每一个字符型数组元素依次赋给一个单字符。 如: charstr[6]={‘C’,‘h’,‘i’,‘n’,‘a’,‘\0’}; 2.直接在赋值号右边给出字符串常量。 如: charstr[6]=“China”; 注意: a)字符数组的长度可以通过赋初值的方式隐含定义;如: charstr[]={‘C’,‘h’,‘i’,‘n’,‘a’,‘\0’}; charstr[]=“China”; b)如果括号中提供的初值个数(即字符个数)大于数组长度,则作语法错误处理。 如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定义为空字符(即‘\0’)。 c)如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。 charc[]={′I′,′′,′a′,′m′,′′,′h′,′a′,′p′,′p′,′y′};数组c的长度自动定为10。 三)、字符串和字符串结束标志 为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”——‘\0’ 字符数组并不要求它的最后一个字符为′\0′,甚至可以不包含′\0′。 例如: charc[5]={′C′,′h′,′i′,′n′,′a′};但是由于系统对字符串常量自动加一个′\0′。 因此,为了使处理方法一致在字符数组中也常人为地加上一个′\0′。 例如: charc[6]={′C′,′h′,′i′,′n′,′a′,′\0′}; 组讨论思考: 定义字符数组∶charc[]={“Pascalprogram”};要用一个新的字符串代替原有的字符串”Pascalprogram”,从键盘向字符数组输入∶Hello如果不加′\0′的话
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 湖南省 语言 教案 第六 数组 高教 doc