湖南省C语言上教案第六章数组高教版doc.docx

上传人:b****6 文档编号:8901041 上传时间:2023-02-02 格式:DOCX 页数:34 大小:89.67KB
下载 相关 举报
湖南省C语言上教案第六章数组高教版doc.docx_第1页
第1页 / 共34页
湖南省C语言上教案第六章数组高教版doc.docx_第2页
第2页 / 共34页
湖南省C语言上教案第六章数组高教版doc.docx_第3页
第3页 / 共34页
湖南省C语言上教案第六章数组高教版doc.docx_第4页
第4页 / 共34页
湖南省C语言上教案第六章数组高教版doc.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

湖南省C语言上教案第六章数组高教版doc.docx

《湖南省C语言上教案第六章数组高教版doc.docx》由会员分享,可在线阅读,更多相关《湖南省C语言上教案第六章数组高教版doc.docx(34页珍藏版)》请在冰豆网上搜索。

湖南省C语言上教案第六章数组高教版doc.docx

湖南省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′的话

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 英语考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1