C语言程序设计第八章课件备课讲稿
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6/49
如何使两个数组的值相等?
main() {
int a[5] = {1,2,3,4,5}, b[5]; b = a; }
原因: 数组名表示数组的首地址, 其值不可改变!
2020/6/9
解决方法 • 方法1:逐个元素赋值
b[0]=a[0]; b[1]=a[1]; b[2]=a[2]; b[3]=a[3]; b[4]=a[4];
一维数组的定义
数组首地址
存储类型 数据类型 数组名 [整数1] [整数2] …… [整数n];
int a[5];
a[百度文库]
基类型
下标从0开始
a[1]
定义一个有5个int型元素的数组
a[2]
– 系统在内存分配连续的5个int空间给此数组 a[3]
直接对a的访问,就是访问此数组的首地址
a[4]
2020/6/9
n维数组 –用n个下标来确定各元素在数组中的顺序
如 int c[3][2][4];
–n≥3时,n维数组无法在平面上表示其各元素的位置
a[0] a[1] a[2] a[3] a[4]
2020/6/9
b[0][0] b[0][1] b[1][0] b[1][1]
b[0][2] b[1][121/]49
二维数组的初始化
• 方法2:通过循环赋值
int i;
for (i=0;i<5;i++)
{
b[i] = a[i];
}
7/49
8.1一维数组的定义和初始化
【例8.2】编程实现显示用户输入的月份(不包括 闰年的月份)拥有的天数
2020/6/9
8/49
8.1一维数组的定义和初始化
下标越界是大忌! –编译程序不检查是否越界 –下标越界,将访问数组以外的空间 –那里的数据是未知的,不受我们掌控,可能带
2020/6/9
123 4 56 7 012/490
数组的数据类型和存储类型
根据数组的数据类型,为每一元素安排相同长度的存储单元 根据数组的存储类型,将其安排在内存的动态存储区、静态 存储区或寄存器区 用sizeof(a)来获得数组a所占字节数
short
2020/6/9
13/49
二维数组的存储结构
3/49
8.1一维数组的定义和初始化
一维数组的定义
存储类型 数据类型 数组名 [整数1] [整数2] …… [整数n];
int a[5];
数组大小必须是值为正的常量,不能为变量 a[0]
– 一旦定义,不能改变大小
a[1]
数组大小最好用宏来定义,以适应未来可能
的变化
a[2]
#define SIZE 5
a[3]
2020/6/9
int a[SIZE];
a[4]
4/49
8.1一维数组的定义和初始化
数组定义后的初值仍然是随机数 一般需要进行初始化
int a[5] = { 12, 34, 56 ,78 ,9 }; int a[5] = { 0 }; int a[] = { 11, 22, 33, 44, 55 };
C语言程序设计第八章课件
2020/6/9
1/49
为什么使用数组(Array)?
【例8.1】要读入5人的成绩,然后求平均成绩
需定义5个不同名整型变量,需要使用多个scanf()
int score1, score2, score3, score4, score5; scanf("%d",&score1);
二维数组实例
【例8.4】从键盘输入某年某月(包括闰年),编程输出该年 的该月拥有的天数
2020/6/9
变量c和a的值因数组越界而被悄悄破坏了
2020/6/9
10/49
8.2二维数组的定义和初始化
一维数组
– 用一个下标确定各元素在数组中的顺序 – 可用排列成一行的元素组来表示
如 int a[5];
二维数组 –用两个下标确定各元素在数组中的顺序 –可用排列成i行、j列的元素组来表示
如 int b[2][3];
【例】以下程序的运行结果是什么? int main() {
int a[][3]={{1,2,3},{4,5},{6},{0}}; printf("%d,%d,%d\n",a[1][1],a[2][1],a[3][1]); return 0; }
123
450 600
结果:5, 0, 0
000
【例】若int a[ ][3]={1, 2, 3, 4, 5, 6, 7}, 则a数组的第一维大小是多少?
存放顺序:按行存放
先顺序存放第0行元素,再存放第1行元素
short int a[2][3];
a[0][0] a[0][1]
a[0][0] a[0][1] a[0][2] a[0]
a[1] a[1][0] a[1][1] a[1][2]
a[0][2] a[1][0] a[1][1] a[1][2]
2需020/知6/9 道数组每行列数才能从起始地址开始正确读出数组元1素4/49
scanf("%d",&score2); ......
而用数组,可共用一个scanf()并利用循环语句读取
2020/6/9
int score[5],i; for (i=0; i<5; i++) {
scanf("%d",&score[i]); }
保存大量 同类型的 相关数据
2/49
8.1一维数组的定义和初始化
b[4]
for (i=0; i<=8; i++)
{
c
b[i] = i;
a
printf("%d ", b[i]);
i
}
b[8]
printf("\nc=%d, a=%d, i=%d\n", c, a, i);
return 0;
}
0
40
1
44
2
48
3
4c
4
50
5
54
6
58
79
5c
8
60
64
68
6c
运行程序或单步执行观察变量变化情况可以看到,
来严重后果
2020/6/9
9/49
【例8.3】当下标值小于0或超过数组长度时
会出现什么情况?
#include <stdio.h>
b[0]
int main()
b[1]
{
b[2]
int a = 1, c = 2, b[5] = {0}, i;
b[3]
printf("%p, %p, %p\n", b, &c, &a);
2020/6/9
5/49
8.1一维数组的定义和初始化
数组的引用
数组名 [下标]
数组下标(index)都是从0开始 使用a[0]、a[1]、a[2]、a[3]、a[4]这样的 形式访问每个元素
下标既可是常量,也可是整型表达式,允许快速 随机访问,如a[i]
–可以像使用普通变量一样使用它们
2020/6/9