- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10
§7.1 一维数组的定义和引用
四、一维数组的初始化 1、在定义数组时对数组元素赋初值(初始化方式) 初始化后, 如:int a[4]={1,2,3,4}; a[0]=1, a[1]=2, 2、可以只给一部分元素赋值 a[2]=3, a[3]=4 初始化后, 如:int b[10]={1,2}; b[0]=1, b[1]=2, 3、如果想使一个数组中全部元素值为 0…, ,可以 编译系统根据初值 b[2]=0, b[9]=0 程 int a[4]={0*4},错 个数确定数组维数 写成 int c[4]={0,0,0,0}; 如: 因为数组不能整体 序 4、在对全部数组元素赋初值时,可以不指定数 int a[10]={1,2,3,4} 赋初值 设 注意 组长度。 如:int d[]={1,2,3,4,5};
5
C
§7.0 引言
三、数组概念 计算机处理数据时,经常出现数据时用某种有 序的形式进行组织的情况。 如:以学号为序的成绩单 线性方程组的m×n系数矩阵 a11 a12 a13 … a1n a21 a22 a23 … a2n 这些数据具有共同的特征: … … … … … am1 am2 am3 … amn ☆都是由若干个分量组成 ☆数据的诸分量都是统一类型(可取任何数据类型) ☆这些分量是按一定顺序排列的
16
程 序 设 计
C
§7.2 二维数组的定义和引用
二、二维数组的存储 二维数组从概念上可理解为行-列矩阵但存储 器是一维的,需按照一定的规则转换,在内存中:
二维数组中元素排列顺序是—按行存放 2000
a[0][0] a[0][1]
a[0][2] a[1][0] a[1][1] a[1][2]
17
程 序 设 计
18
程 序 设 计
C
§7.2 二维数组的定义和引用
四、二维数组的初始化(按行存放) 1、按存放顺序赋值
如:int x[2][3]={1,2,3,4,5,6}; 结果为:x[0][0]=1,x[0][1]=2,x[0][2]=3 x[1][0]=4,x[1][1]=5,x[1][2]=6
程 序 设 计
8
C
§7.1 一维数组的定义和引用
二、一维数组的存储 C编译程序是怎样管理一个数组呢? 提示:
用连续的内存单元存放各个元素 int占2字节
如:int a[5]; 其内存存储为: 总字节数
1000 1002 1004 1006 1008 a[1] a[2] a[3]
=sizeof(int)*元素个数 =2*5=10
13 27 38
38 30 27
27
30 38
27
30
49 13 27
27 49 30
38 30 49
49 30
65
程 序 设 计
C
第 一 趟
第 二 趟
第 三 趟
第 四 趟
第 五 趟
第 六 趟
第 七 趟
14
§7.2 二维数组的定义和引用
在C语言中,数组的元素还可以是数组,这样就 构成二维数组,所以二维数组可以看成是“数组的 数组”.依次类推,还可以构成三维、四维数组(或 称多维数组)等.二维数组是多位数组中最简单 ,最 注意 常用的数组,它代表多维数组的基本特征。 不能定义成: int a[3,4]或int b(4,M) 一、二维数组的定义 类型名 数组名 [常量表达式1][常量表达式2] 表示行是符号常量) 表示层 如: int a[3][4],b[4][M];(M 在此基础上,可掌握多维数组的定义 . 表示行 表示列 a为3×4列(3行 概念上可理解二维数组 4列)的整型数组 a[3][4] 表示列 如:float a[2][3][4] b为4×3 是一个 M行 列4 (3 列的矩阵 行4列)的整型数组
如:float a[2][3] 即:数组元素的实际存放顺序是 右边下标比左边下标变化得快!
2004
2008 2012 2016 2020
C
§7.2 二维数组的定义和引用
三、二维数组的引用 二维数组元素的引用形式为: 数组名[下标][下标] 如:int a[2][4],b[5][3] 下标可以是整型表达式 a[2-1][2*2-1] b[1][2]=a[1][3]/2 注意下标的最大取值,即:要注意数组定义和数 组元素引用的区别 如:int a[3][4];则下标下限值是a[0][0] 下标上限值是a[2][3]
整型、字符型、实型
程 序 设 计
C
3
§7.0 引言
二、构造类型的基本概念
在C语言中,变量类型除了前面已经介绍的几种基本类型 外,还有另外一些复杂类型,叫做构造类型。
构造类型:是由基本类型数据按照一定规则构造而成。
(如:数组、结构体、共同体、枚举型)
程 序 设 计
C
说明:
(1) 构造类型的每个分量是一个变量,它可以是一个简单 类型或构造类型。 (2) 构造类型的分量的使用方法与简单变量相同。 (3) 构造类型的分量占用相邻的存储空间。 (4) 对构造类型的分量来说,重点是访问其分量的方法。
C
2、按行赋值
如:int x[2][3]={{1,2,3},{4,5,6}}; 结果同上。
19
§7.2 二维数组的定义和引用
四、二维数组的初始化(按行存放) 3、部分赋值 以存放顺序赋值
如:int x[2][3]={1,2,4}; 结果为:x[0][0]=1,x[0][1]=2,x[0][2]=4 x[1][0]=0,x[1][1]=0,x[1][2]=0 如:int x[2][3]={{1,2},{4}}; 结果为:x[0][0]=1,x[0][1]=2,x[0][2]=0 x[1][0]=4,x[1][1]=0,x[1][2]=0 如:int x[2][3]={{6,2},{5,0,6}}; 结果为:x[0][0]=6,x[0][1]=2,x[0][2]=0 x[1][0]=5,x[1][1]=0,x[1][2]=6
合法标识符 表示元素个数, 下标从0开始
程 序 设 计
[ ]:数组运算符 单目运算符 如:int a[10], b[5]; M是符号常量 优先级(1) char c[8]; 左结合 如: ( ) 说明 float x[20],y[4*M+1],w[5]; 不能用 int a (10); float x[n]; (1)数组名命名规则和简单变量名相同; (2)定义数组时,需要指定数组中元素的个数,[ ]中常量表达 式的值确定数组元素个数(数组尺寸); (3)例 数组名后只能用 [ ]来表示常量表达式 ; int i=15; 见程序 :7-000 int data[i]; (不能用变量定义数组维数 ) (4)常量表达式中可以包含常量和符号常量 ,不能包含变量 ;
计 被定义数组长度与提供初值的个数不同 自动定义数组长度为5 相当于 ,int a[5]={1,2,3,4,5}; 则数组长度不能省!
C
11
§7.1 一维数组的定义和引用
例:用数组来处理求Fibonacci数列的前20项。
#include<stdio.h> 为前两个 2 1) (n 2) void F main( 数组赋值 F F F (n 3) {int i;n n 1 n 2 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]); } } 请大家与用循环实 现程序进行比较!
4
§7.0 引言
如: int a[10];
整型数组
float b[3][4];
单精度二维数组3行4列
程 序 设 计
如:struct student 结构体 { int num; char name[20]; char sex; int age; 结构体变量 float score; char addr[30]; } student1, student2;
F1 1 (n 1)
0 1 2 3 4 5 1 1 2 3 5 8 ……... f[0] f[1] f[2] f[3] f[4] f[5]
程 序 设 计
C
19
f[19]
f[19]
12
§7.1 一维数组的定义和引用
例 用冒泡法对10个数排序
基本思想:将相邻两个数字比较,小的调整到前面。 排序过程: (1)比较第一个数与第二个数,若为逆序a[0]>a[1], 则交换;然 后比较第二个数与第三个数;依次类推, 直至第n-1个数和第n个数比较为止——第一趟冒泡排 序,结果最大的数被安置在 最后一个元素位置上 (2)对前n-1个数进行第二趟冒泡排序,结果使次大 的数被安置在第n-1个元素位置 (3)重复上述过程,共经过n-1趟冒泡排序后,排序 结束
以行赋值
程 序 设 计
C
20
§7.2 二维数组的定义和引用
四、二维数组的初始化(按行存放) 4、省略第一维长度
如: int x[ ][3]={1,2,3,4,5,6,7}; 结果为: x[0][0]=1,x[0][1]=2,x[0][2]=3 x[1][0]=4,x[1][1]=5,x[1][2]=6 x[2][0]=7,x[2][1]=0,x[2][2]=0 注意:不能省略第二维的长度!
程 序 设 计
C
0 1 2 3 4 相当于数组 下标是 } 数组元素的下标常 例 int a[10]; 的赋值过程 可以是整型常量 用循环变量来控制 (即输入数组 printf(“%d”,a); () ) 程序的功能? 下标从 0开始 或整型表达式 必须 for(j=0;j<10;j++) 最大下标是数组元素个数减1 0~9 printf(“%d\t”,a[j]); 功能:逆序输出 () 9876543210 这十个数字。 如:a[0]=a[5]+a[7]-a[2*3]