已阅读5页,还剩50页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
0,第8章 集合数据处理,2019年5月27日,本章学习要点,什么是数组? 为什么要使用数组? 如何定义数组? 如何引用数组元素? 二维数组的元素在内存中按什么方式存放? 数据的搜索与排序,2019年5月27日,问题:输入一个正整数n (1n10),再输入n个整数,用选择法将它们从小到大排序后输出。,课题引入,2019年5月27日,8.1 一维数组,1. 一维数组的定义和引用 (1)定义 类型名 数组名数组长度 类型名:数组元素的类型 数组名:数组(变量)的名称,标识符 数组长度:常量表达式,给定数组的大小 int a10; char c200; float f5;,2019年5月27日,数组:相同类型数据的有序集合,在内存中连续存放。 由数组名和下标惟一地确定每个数组元素 每个元素都属于同一类型 一批相同类型的变量使用同一个数组变量名,用下标来相互区分。 优点:表述简洁,可读性高;便于使用循环结构,2019年5月27日,(2)引用,先定义,后使用 只能引用单个的数组元素,不能一次引用整个数组 数组名下标 取值范围:0,数组长度-1 int a10; 10个元素:a0、a1、 a9 数组元素的使用方法与同类型的变量相同 a0=1; a1=2; printf(“%d “, a0);,下标不要越界 不能使用a10,2019年5月27日,定义数组 类型名 数组名数组长度 引用数组元素 数组名下标 int a10; a0 = a9 = 0; ak = temp;,区分数组的定义和数组元素的引用,下标不要越界,数组长度为常量,2019年5月27日,2 一维数组的初始化,定义数组时,对数组元素赋初值 类型名 数组名数组长度 = 初值表; int a10 = 1,2,3,4,5,6,7,8,9,10; int b5 = 1, 2, 3, 4, 5;,2019年5月27日,int b5 = 1, 2, 3; b0 = 1, b1 = 2, b2 = 3, b3 = 0, b4 = 0 int f5 = 0, 0 , 0 , 0 , 0; 等价于int f5 = 0; 如果对全部元素都赋初值,可以省略数组长度 int a 10 = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,针对部分元素的初始化,建议不要省略数组长度,2019年5月27日,3.一维数组的应用,数组和循环 for(i = 0; i n; i+) printf(“%d “, ai); 数组下标作为循环变量,通过循环,逐个处理数组元素,2019年5月27日,例1 用数组进行统计计算。从键盘输入 10个人的数学考试成绩,并存入到一维数组中,然后求出成绩总和和平均分。,#include #define N 10 void main( ) double aN=0; double sum=0, average; int i; for (i=0;i“,i); scanf(“%lf“, ,2019年5月27日,用数组计算fibonacci数列的前20个数,并按每行打印5个数的格式输出。 1, 1, 2, 3, 5, 8, 13, 分析: 用数组计算并存放fibonacci数列的前20个数 f0 = f1 = 1 fn = fn-1 + fn-2 2n19,例 2 计算fibonacci数列,#include int main( ) int i; int fib20 = 1, 1; for(i = 2; i 20; i+) fibi = fibi - 1 + fibi - 2; for(i = 0; i 20; i+) printf(“%6d“, fibi); if(i + 1) % 5 = 0) printf(“n“); return 0; ,1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765,2019年5月27日,思考与练习,问题:如果想将数组a的值全体赋给数组b ,用怎样的方法? int i for (i=0;i8;i=i+1) bi=ai;,2019年5月27日,4.一维数组与指向数组元素的指针,int a6, *p; 数组名代表一个地址,它的值是数组首元素的地址(基地址) a+i 是距数组a的基地址的第i个偏移,sum = 0; for(i = 0; i 100; i+) sum = sum + ai ;,*(a+i),任何由数组下标来实现的操作都能用指针来完成 int a100, *p; p = a; 或 p = ,&ai ai a+i *(a+i),p+i *(p+i) &pi pi,p = a; sum = 0; for(i = 0; i 100; i+) sum = sum + pi;,等价,# include int main( ) int i, a10, *p; long sum = 0; printf(“Enter 10 integers: “); for(i = 0; i 10; i+) scanf(“%d“, ,例3 使用指针计算数组元素之和,Enter 10 integers: 10 9 8 7 6 5 4 3 2 1 sum=55,p,p,p,p,2019年5月27日,输入5个整数,将它们存入数组a中,再输入1个数x,然后在数组中查找x,如果找到,输出相应的下标,否则,输出“Not Found”。 输入:2 9 8 9 6 9 输出:1 输入:2 9 8 9 6 7 输出:Not Found,例3 在数组中查找一个给定的数,2019年5月27日,#include int main(void) int i, flag, x; int a5; printf(“Enter 5 integers: “); for(i = 0; i 5; i+) scanf(“%d“, ,Enter 5 integers: 2 9 8 1 9 Enter x: 9 Index is 1,Enter 5 integers: 2 9 8 1 9 Enter x: 7 Not Found,2019年5月27日,例 4 输入n(n10),再输入n个数 (1) 求最小值 (2) 求最小值和它所对应的下标 (3) 将最小值与第一个数交换,输出交换后的n个数,2019年5月27日,#include int main(void) int i, index, n; int a10; printf(“Enter n: “); scanf(“%d“, ,Enter n: 6 Enter 6 integers: 2 9 -1 8 1 6 min is -1 sub is 2,2019年5月27日,例 1 选择法排序,输入n(n10), 再输入n个数,用选择法将它们从小到大排序后输出。 设 n=5 3 5 2 8 1,(1) 1 5 2 8 3 (2) 2 5 8 3 (3) 3 8 5 (4) 5 8,2019年5月27日,#include int main(void) int i, index, k, n, temp; int a10; /* 定义1个数组a,它有10个整型元素*/ printf(“Enter n: “); scanf(“%d”, ,Enter n: 10 Enter 10 integers: 3 5 2 8 1 22 89 0 -1 7 After sorted: -1 0 1 2 3 5 7 8 22 89,2019年5月27日,例5 将1个3*2的矩阵存入1个3*2的二维数组中,找出最大值以及它的行下标和列下标,并输出该矩阵。,7.2 找出矩阵中最大值所在的位置,2019年5月27日,二维数组,多维数组的空间想象,二维数组: 一个表格或一个平面矩阵,一维数组: 一列长表或一个向量,多维数组: 多维空间的一个数据列阵,三维数组: 三维空间的一个方阵,2019年5月27日,1 二维数组的定义和引用,(1)定义 类型名 数组名行长度列长度 int a32; 定义1个二维数组a,3行2列,6个元素 int b510; 定义1个二维数组a,5 行 10 列, 50 个元素,2019年5月27日,(2)引用,先定义,后使用 数组元素的引用: 数组名行下标 列下标 行下标和列下标:整型表达式 行下标的取值范围是0,行长度-1 列下标的取值范围是0,列长度-1 int a32; 3 行 2 列, 6 个元素 a00 a01 a10 a11 a20 a21,下标不要越界,2019年5月27日,二维数组在内存中的存放方式,int a32; 3 行 2 列, 6 个元素 表示1个3行2列的矩阵 a00 a01 a10 a11 a20 a21,二维数组的元素在内存中按行/列方式存放 a00 a01 a10 a11 a20 a21,2019年5月27日,2 二维数组的初始化,(1)分行赋初值 int a33 = 1,2,3,4,5,6,7,8,9; static int b43 = 1,2,3, ,4,5;,数组a 1 2 3 4 5 6 7 8 9,数组b 1 2 3 0 0 0 4 5 0 0 0 0,(2)顺序赋初值 int a33 = 1,2,3,4,5,6,7,8,9; static int b43 = 1,2,3,0,0,0,4,5;,2019年5月27日,(3)省略行长度 对全部元素都赋了初值, int a 3=1,2,3,4,5,6,7,8,9; 或分行赋初值时,在初值表中列出了全部行 static int b 3=1,2,3,4,5, 建议不要省略,数组a 1 2 3 4 5 6 7 8 9,数组b 1 2 3 0 0 0 4 5 0 0 0 0,2019年5月27日,3 使用二维数组编程,例6 生成一个矩阵并输出 定义1个 3*2 的二维数组a,数组元素的值由下式给出,按矩阵的形式输出a。 aij = i + j(0i2,0j1),int a32; a00 a01 a10 a11 a20 a21,0 1 1 2 2 3,2019年5月27日,#include int main(void) int i, j; int a32; for(i = 0; i 3; i+) for(j = 0; j 2; j+) aij = i + j; for(i = 0; i 3; i+) for(j = 0; j 2; j+) printf(“%4d“, aij); printf(“n“); return 0; ,2019年5月27日,int aNN; N是正整数 aij:i、j的取值范围0,N-1 用二维数组a表示N*N方阵时,对应关系: a00 a01 a02 主对角线 a10 a11 a12 上三角 a20 a21 a22 下三角 副对角线,矩阵与二维数组,i=j i=j i+j=N-1,2019年5月27日,输入一个正整数n (1n6),根据下式生成1个n*n的方阵,然后将该方阵转置(行列互换)后输出。 aij = i * n + j + 1(0in-1,0jn-1) 分析:int a66; n=3时,例7 方阵转置,2019年5月27日,#include int main(void) int i, j, n, temp; int a66; printf(“Enter n: “); scanf(“%d“, ,2019年5月27日,例5 将1个3*2的矩阵存入1个3*2的二维数组中,找出最大值以及它的行下标和列下标,并输出该矩阵。,2019年5月27日,int main(void) int col, i, j, row; int a32; printf(“Enter 6 integers:n“) ; for(i = 0; i arowcol) row = i; col = j; printf(“max = a%d%d = %dn“, row, col, arowcol); return 0; ,Enter 6 integers: 3 2 10 -9 6 -1 3 2 10 -9 6 -1 max = a10 = 10,2019年5月27日,例9 输入一个以回车结束的字符串(少于10个字符),它由数字字符组成,将该字符串转换成整数后输出。,7.3 进制转换,2019年5月27日,#include int main(void) int i, n; char s10; printf(“Enter a string: “); /* 输入字符串 */ i = 0; while(si = getchar( ) != n) i+; si = 0; n = 0; /* 将字符串转换为整数 */ for(i = 0; si != 0; i+) if(si = 0) n = n * 10 + (si - 0); else break; printf(“digit = %dn“, n); return 0; ,Enter a string: 123 digit = 123,2019年5月27日,1 一维字符数组,字符串的存储和运算可以用一维字符数组实现 一维字符数组的定义、引用、初始化与其他类型的一维数组一样。 char str80; 定义一个含有80个字符型元素的数组str char t5=H, a, p, p, y; 初始化数组 t,?输出数组 t 的所有元素 for(i=0; i5; i+) putchar( ti );,2019年5月27日,char t5 = H, a, p, p, y; static char s6 = H, a, p, p, y; static char s6=H, a, p, p, y, 0; 0代表字符0,也就是ASCII码为0的字符 static char s6=H, a, p, p, y, 0;,2019年5月27日,2 字符串,字符串常量 用一对双引号括起来的字符序列 一个字符串结束符 0 “Happy“ 6个字符 H a p p y 0,有效字符,字符串结束符,字符串的有效长度:有效字符的个数,2019年5月27日,字符串与一维字符数组,字符串:一个特殊的一维字符数组 把字符串放入一维字符数组(存储) 对字符串的操作 = 对字符数组的操作,2019年5月27日,(1) 字符串的存储数组初始化,字符串可以存放在一维字符数组中 static char s6 = H, a, p, p, y, 0; 字符数组初始化:用字符串常量 static char s6 = “Happy“; static char s6 = “Happy“; 数组长度 = 字符串的有效长度 + 1 char t5; “Happy“ 能存入t吗?,2019年5月27日,auto char s80= “Happy“; 字符串遇 0 结束 第一个 0 前面的所有字符和 0 一起构成了字符串 “Happy” 0 之后的其他数组元素与该字符串无关,字符串由有效字符和字符串结束符 0 组成,2019年5月27日,(2) 对字符串的操作,把字符串放入一维字符数组(存储) 对字符串的操作 = 对字符数组的操作 普通字符数组:数组元素的个数是确定的,一般用下标控制循环 字符串:没有显式地给出有效字符的个数,只规定在字符串结束符 0 之前的字符都是字符串的有效字符,一般用结束符 0 来控制循环 循环条件:si != 0,2019年5月27日,计算字符串的有效长度,并输出该字符串。 分析: 字符串的有效长度:有效字符的个数 数组中第一个 0 前面的字符个数,例10 计算字符串的有效长度,2019年5月27日,#include int main(void) int i = 0, len; char str80 = “Happy“; /* 初始化 */ for(i = 0; stri != 0; i+) ; len = i; printf(“len = %dn“, len); for(i = 0; stri != 0; i+) /* 输出字符串 */ putchar(stri); return 0; ,len = 5 Happy,2019年5月27日,(3) 字符串的存储赋值和输入,把字符串放入一维字符数组(存储) 对字符串的操作 = 对字符数组的操作 存储 数组初始化 static char s6= “Hello“; 赋值 s0=a; s1=0; 或者 static char s6= “a“; 输入 0 代表空操作,无法输入 输入时,设定一个输入结束符 将输入结束符转换为字符串结束符 0,“a“ 2 个字符 a 和 0 a 1 个字符常量,区分“a“ 和 a,2019年5月27日,输入一个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年秋招:甘肃电力投资集团试题及答案
- 2026年秋招:电池研发试题及答案
- 2026年秋招:大客户销售笔试题及答案
- 中小学生交通安全教育主题班会课件【共23张幻灯片】
- 物联网8.2-获取时间- 上
- 海底世界课件
- T/CAPT 002-2019青少年互联网不健康内容分类与代码
- 北师大版四年级上册课件数一数认识更大的数
- 山东省济宁市2026年初中学业水平考试地理试题(含答案)
- 河南省部分学校联考2026-2027学年高二上学期9月阶段检测语文试卷(含答案)
- 隶书的介绍教学课件
- 新闻宣传写作培训课件
- 源远流长话云南
- 医院三合理培训课件
- 小儿流感课件
- 游艇租赁合同协议书范本
- 驾校场地硬化施工合同
- CJ/T 466-2014燃气输送用不锈钢管及双卡压式管件
- 北京市科技计划项目(课题)结题经费审计工作底稿-参考文本
- 光纤熔接机80S中文操作手册
- 材料化学 课件 11-5 二维纳米材料
评论
0/150
提交评论