C语言板书7数组

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

7
4. 可在定义时对 静态数组 和 外部存储(全局)数组 赋初值, 方法如下: 赋初值 方法如下 对全部元素赋初值 int a[10] ={10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; 对部分元素赋初值 int a[10]={0,1,2,3,4}; 如此,只有前 个元素初值确定,后 个元素由系 只有前5个元素初值确定 如此 只有前 个元素初值确定 后5个元素由系 统设置. 统设置.
10
7.1.3 一维数组的应用 数列. 例:求Fibonacci 数列. 定义数组,并赋初值 定义数组 并赋初值 int f [20]={1,1}; 用循环for实现 用循环 实现: 实现 for (i=2; i<20; i++) f [i]=f [i –2]+f [i –1]; 注意:下标越界问题 注意 下标越界问题:i =2且i<20 下标越界问题 且
5
§7.1 一维数组
7.1.1 一维数组的定义 形式: 数组名[ 形式 类型说明符 数组名 常量表达式]; 例: int a [20]; float x [100]; 1. 数组名的确定方法同变量名. 数组名的确定方法同变量名. 2. C语言用方括号 ]表示数组元数个数. 语言用方括号[ 表示数组元数个数. 语言用方括号 表示数组元数个数
29
二维数组一般用二重循环 有一个3× 的矩阵 的矩阵, 例2. 有一个 ×4的矩阵,要求编程序求出其中值 最大的那个元素的值,以及所在的行号和列号. 最大的那个元素的值,以及所在的行号和列号. 先用N- 流程图表示算法 先用 -S流程图表示算法
1
for循环
表达式1只执行一次 表达式3的执行时间在循环体最后,在循 环中每次都要执行. 正常循环结束时,循环变量的值为最后 一次进入循环的值加或减步长. 正常非循环结束时,循环变量的值为最 后跳出循环时的值.
2
循环嵌套
外层循环每执行一次,内层循环都要循 外层循环每执行一次, 环执行多次 嵌套时用缩进书写形式,层次清楚,不 嵌套时用缩进书写形式,层次清楚, 交叉 break只能跳出本层循环 只能跳出本层循环 continue只能回到本层循环开始 只能回到本层循环开始 各种循环可以相互转换
19
{ t=a[i]; a[i]=a[j]; a[j]=t;} printf (" the sorted numbers: \n "); for (i=1; i<=10; i++) printf(" %d ", a[i]); } 另一种排序法:冒泡排序法(详见教材 另一种排序法:冒泡排序法(详见教材)
22
3. 二维数组的存放方式为 按行存放.由此可推广 二维数组的存放方式为: 按行存放. 至三维, 维数组的定义和存放 维数组的定义和存放. 至三维,n维数组的定义和存放. 最右边的下标变化最快. 即: 最右边的下标变化最快. 4. 初始化 初始化: 按行给二维数组赋初值: 按行给二维数组赋初值 int a[3][4]={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12}}; 可以去掉其中的{ . 可以去掉其中的 }.
20
§7.2 二维数组
7.2.1 二维数组的定义 数组名[常量表达式 常量表达式 常量表达式] 常量表达式] 形式 类型说明符 数组名 常量表达式 [常量表达式 例: int a[4] [10]; float x[8] [20]; 1. 不可将定义写为 a[4,10]. 不可将定义写为int .
21
9ቤተ መጻሕፍቲ ባይዱ
7.1.2 一维数组的引用 1. 须象使用变量那样 先定义 后使 须象使用变量那样,先定义 先定义,后使 用 2. 引用方式 数组名 下标 引用方式: 数组名[下标 下标] 代表了一个元素,等价一个同类型的变量. 代表了一个元素 等价一个同类型的变量. 等价一个同类型的变量 例: a [0]5+a[1] 6 为正确的算术表达式 3. 一般地 一维数组各元素分配在连续地内存单元 一般地,一维数组各元素分配在连续地内存单元 之中. 之中.
15
两次交换
从以上例子可以看到: 用到两种循环,第一种循 从以上例子可以看到 用到两种循环 第一种循 找第i小 环––找第 小的元素,第二种循 对其后的元素的 找第 的元素,第二种循––对其后的元素的 一一比较. 一一比较. 初始化 流程图: 流程图 输入n个元素 数组 输入 个元素a数组 个元素 B A i←1 ← j←i+1 ← a[i]>a[j] 交换a[i] 交换 a[j]
27
{ for (j=0; j<=1; j++) printf("%5d", b[i]j]); printf("\n"); } } 运行结果如下: 运行结果如下: array a: 1 2 3 4 5 6
28
array b: 1 4 2 5 3 6
数组元素数据的输入必须以循环方式进行或者定义 时置初值. 时置初值.
12
运行结果如下: 运行结果如下: 1 8 89 987 1 13 144 1597 2 21 133 1584 3 34 377 4181 5 55 610 6765
13
排序问题–––计算机处理数据的一个重要问题 例2: 排序问题 计算机处理数据的一个重要问题 排序算法较多,一种最简单的算法 排序算法较多 一种最简单的算法–––选择排序 一种最简单的算法 选择排序 法用得较多.基本思路: 设有n个数 个数,需将它们从小 法用得较多.基本思路 设有 个数 需将它们从小 到大顺序排列. 到大顺序排列.则: 1. 从n个元素中 通过比较 找出最小元素 放在第 个元素中,通过比较 找出最小元素,放在第 个元素中 通过比较,找出最小元素 一个位置上. 一个位置上. 2. 在剩下的 –1个元素中 找出第二小的元素并把 在剩下的n 个元素中 个元素中,找出第二小的元素并把 它放在第二个位置上. 它放在第二个位置上. 3. 对上述过程重复 直至剩下一个元素. 对上述过程重复,直至剩下一个元素 直至剩下一个元素.
24
7.2.2 二维数组元素的引用 形式: 数组名[下标 下标] 形式 数组名 下标][下标 下标 下标 其中的下标为整型表达式,但不得 其中的下标为整型表达式 但不得越界. 与一维数组元素一样,二维数组元素相当于同 与一维数组元素一样 二维数组元素相当于同 类型的简单变量. 类型的简单变量.
25
2. 可将二维数组的元素看成为若干个特殊的一维数 组. 如: int b[3] [4]; 有三个特殊的一维数组b[0],b[1], b[2],每一 则: 有三个特殊的一维数组 每一 个又有四个元素: 个又有四个元素 b[0][0], b[0][1], b[0][2], b[0][3], b[1][0], b[1][1], b[1][2], b[1][3], b[2][0], b[2][1], b[2][2], b[2][3],
11
程序如下: 程序如下: mian ( ) { 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] } }
6
3. 常量表达式为常量和符号常量.不允许有变量 常量表达式为常量和符号常量.不允许有变量, 其表达式的值代表了元素的个数. 其表达式的值代表了元素的个数. 例: int a[20]; 表示有20个元素 表示有 个元素 且元素从0开始编排: 且元素从 开始编排:a[0],a[1]…,a [19] 开始编排
26
printf("array a: \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("array b:\n"); for (i=0; i<=2; i++)
18
程序: 程序 main ( ) { int a [11]; int i, j, t; printf (" please input 10 n~:\n "); for (i=1; i<=10; i++) scanf(" %d ", &a[i]); printf(" \n "); for (i=1; i<=9; i++) for (j=i+1; j<=10; j++) if (a[i]>a[j])
Yes No
16
j←j+1 ← 内循环 j>n No A
Yes
i←i+1 ← 外循环 i> n–1
Yes No
B
打印结果 结束
17
打印: 个数换一行. 打印 每5个数换一行. 个数换一行 for (i=0; i<20; i++) { if (i%5= =0) printf(" \n "); printf (" %12d ", f [i]); }
23
可以对部分元素赋初值,但需表达清楚. 可以对部分元素赋初值 但需表达清楚.如: 但需表达清楚 int a[3][4]={{1,2},{3},{0,8}}. . 则相当于 1 2 0 0 3 0 0 0 0 8 0 0 可通过赋初值决定数组大小.如为二维 则只可 可通过赋初值决定数组大小.如为二维,则只可 省略第一维的大小. 省略第一维的大小 static int a[3][4]={1,2,3,…,12};
14
例:
8, 4, 20, 100, 28, 1, 两次交换
第1次: 4, 8, 20, 100, 28, 1 次 1, 8, 20, 100, 28, 4
第2次: 1, 4, 20, 100, 28, 8 ––– 一次交换 次 第3次: 1, 4, 8, 100, 28, 20 ––– 一次交换 次 第4次: 1, 4, 8, 28, 100, 20, 次 1, 4, 8, 20, 100, 28 第5次: 1, 4, 8, 20, 28, 100 ––– 一次交换 次
3
C程序设计
第七章 数组
4
数组概述
前面所用到的数据均为基本类型(整 前面所用到的数据均为基本类型 整 , 实 , 字 符),为了丰富数据类型 ,须提供强有力的数据表 , 达方式. 语言提供了一种构造类型数据 语言提供了一种构造类型数据–––由基 达方式 . C语言提供了一种构造类型数据 由基 本类型按某一规则组合在一起. 本类型按某一规则组合在一起. 其中数组:同一种 基本 基本)类型按一定顺序组 其中数组:同一种(基本 类型按一定顺序组 合在一起的数据类型. 合在一起的数据类型.
若字符多于元素个数则语法错反之后而补034可以去掉定义时的大小设置而通过自动赋值决定长度大小staticchar前面说过字符串常量用表示且由则长度为15116其中x15存放0其中字符数组的引用每一个字符数组元素相当于一个字符变35格式符
循环小结
需要重复执行的程序段可以放入循环. 需要重复执行的程序段可以放入循环. 循环中用到的计算数据可以键盘输入, 循环中用到的计算数据可以键盘输入, 也可以由循环变量产生. 也可以由循环变量产生. 循环可以按循环条件循环至条件为假结 也可以在无法预计结束点时, 束,也可以在无法预计结束点时,由 if(...)break;结束循环. 结束循环. 结束循环 if(...) continue可以在循环体中间折回起 可以在循环体中间折回起 始点.且只能用在循环中. 始点.且只能用在循环中.
8
如对数组元素赋同一初值,必须一一写出 如对数组元素赋同一初值 必须一一写出: 必须一一写出 int a[10]={0,0,0,0,0,0,0,0,0,0}; 不可写成: 不可写成 int a[{10*0}];
若赋全部元素的初值,可省略常量表达式 若赋全部元素的初值,可省略常量表达式 …a [ ]={0,1,2,3}; 表示a[4],即只有 个元素. 即只有4个元素 表示 即只有 个元素.
7.2.4 程序举例 将一个二维数组行和列元素互换, 例1 将一个二维数组行和列元素互换,存到另一 个二维数组中.例如: 个二维数组中.例如: 123 a= 456 14 b= 2 5 36 程序如下: 程序如下:main ( ) { int a[2] [3]={{1, 2,3},{4, 5,6}}; int b[3] [2], i, j;
相关文档
最新文档