内容正文:
课 题
6.1 一维数组
教 学
目 的
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、一维数组的定义:
类型说明符 数组名[常量表达式]
例如: int a[10];
它表示定义了一个整形数组,数组名为a,此数组有10个元素。
例如:int data[10], number[5];
说明:
1.数组名定名规则和变量名相同,遵循标识符定名规则。
2.在定义数组时,需要指定数组中元素的个数,方括弧中的常量表达式用来表示元素的个数,即数组长度。
3.常量表达式中可以包括常量和符号常量,但不能包含变量。也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。
例如: int n;
scanf(“%d″,&n); /*在程序中临时输入数组的大小 */
int a[n];
三小结
1、 一维数组的定义、引用及初始化
2、 一维数组的存储形式
第二课时
一、 复习引入
数组说明中其他常见的错误:
① float a[0]; /* 数组大小为0没有意义 */
1 int b(2)(3); /* 不能使用圆括号 */
2 int k, a[k]; /* 不能用变量说明数组大小*/
如何引用数组中元素的值?
二、新授
(一)一维数组元素的引用
数组名[下标]
下标可以是整型常量或整型表达式。
例如:a[0]=a[5]+a[7]-a[2*3]
注意:
定义数组时用到的“数组名[常量表达式]” 和引用数组元素时用到的“数组名[下标]” 是有区别的。
(二) 一维数组在内存中占一段连续的存储空间,其首地址:a或&a[0]
例:float mark[100];
每个数据元素占用的字节数,就是基类型的字节数一个元素占4个字节
(三) 一维数组的初始化
1. 在定义数组时对数组元素赋以初值;int a[10]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
2. 可以只给一部分元素赋值; int a[10]={0, 1, 2, 3, 4};
3. 如果想使一个数组中全部元素值为0,可简便实现;
int a[10]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
其实,对static数组不赋初值,系统会对所有数组元素自动赋以0值,即上句等价于: static int a[10];
不能写成:int a[10]={0*10};
4. C允许通过所赋初值的个数来隐含定义一维数组的大小;在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度
int a[]={0,1,2,3,4,5,0}; 相当于 int a[7]={0,1,2,3,4,5,0};
实例1:用数组来处理,求解Fibonacci数列。前20个数
Fibonacci数列公式:已知: a1=a2=1 an=an-1+an-2 即:1,1,2,3,5,8,13
代码略
(四)下面程序的运行结果是 参考答案: 1 2 3 4 5 。
main()
{int a[10]={1,2,2,3,4,3,4,5,1,5};
int n=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]);
}
(五)下面程序的功能是输入5个整数,找出最大数和最小数所在的位置,并把二者对调,然后输出调整后的5个数。
main()
{int a[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]<min) {min=a[i];【1】;}
max=a[0];
for (i=1;i<5;i++)
if a[i]>max) {max=a[i]; 【2】;}
【3】
printf("
The position of min is:%3d
",k);
printf("
The position of max is:%3d
",j);
for (i=0;i<5;i++)
printf("%5d",a[i]);
}
参考答案:【1】j=i【2】k=i【3】a[j]=max;a[k]=min;
(六)一维数组习题课
一 复习引入
#include <stdio.h>
void main()
{ int i;
int f[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) int n; scanf("%d",&n); int a[n]; B)int n=10,a[n];
C) int a(10); D)#define SIZE 10
int a[SIZE];
2.若有说明:int a[10];则对数组元素的正确引用是 参考答案:D 。
A)a[10] B)a[3,5] C)a(5) D)a[10-10]
3. 在C语言中,一维数组的定义方式为:类型说明符 数组名 考答案:A
A)[常量表达式] B)[整型表达式]
C)[整型表达式]或[整型常量] D)[整型常量]
4下面程序有错误的行是.
1 main()
2 {
3 int a[3]={1};
4 int i;
5 scanf("%d",&a);
6 for(i=1;i<3;i++) a[0]=a[0]+a[i];
7 printf("a[0]=%d
",a[0]);
8 }
1、 若有以下输入(数之间有空格),则下面程序的运行结果是
参考分析:本程序是删除用户所输入的所有奇数 。
7 16 5 4 6 7 9 8 3 2 4 6 12 2 -1<CR>
main()
{int b[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]);}
四、布置作业
上机练习:课堂例题
汇编练习:循环章节1-5
学科网(北京)股份有限公司
$$