已阅读5页,还剩75页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章 数组,一维数组 二维数组 字符串,输入 30 个数,将它们排序后输出。,数组:相同类型数据的有序集合 在内存中连续存放 用数组名和下标唯一地确定数组元素 每个元素都属于同一类型,s0、s1、s2、s29,一批相同类型的变量使用同一个数组变量名,用下标来相互区分 优点: 表述简洁,可读性高 便于使用循环结构,7.1 一 维 数 组,7.1.1 一维数组的定义和引用 1、定义 类型名 数组名数组长度 类型名:数组元素的类型 数组名:数组变量的名称(数组),标识符 数组长度:常量表达式,给定数组的大小 int a10 ; 定义一个含有10个整型元素的数组 a,int a10 ; 定义一个含有10个整型元素的数组 a,char c200 ; 定义一个含有200个字符元素的数组 c float f5; 定义一个含有5个浮点型元素的数组 f,2、数组元素的引用,先定义,后使用 只能引用单个的数组元素,不能一次引用整个数组 数组元素的引用:数组名下标 下标:整型表达式 取值范围:,数组长度-1 int a10 ; 10个元素:a0、a1、 a9 下标不要越界,不能使用a10,定义数组: 类型名 数组名数组长度 引用数组元素:数组名下标 数组元素的使用方法与同类型的变量相同 int k, a10;,k=3; a0=23; ak-2=a0+1; scanf(“%d“, ,区分 定义数组 和引用数组元素 定义数组: 类型名 数组名数组长度 引用数组元素:数组名下标 int a10; a0=a1=a9=0; 下标不要越界,main( ) int a10; int i; for(i = 0; i 10; i+) a i = i; for(i = 0; i 10; i+) printf(“%d “, ai); 输出:,0 1 2 3 4 5 6 7 8 9,main( ) int i; int a10; for(i = 0; i =0; i-) printf(“%d “, ai); 输入: 1 2 3 4 5 6 7 8 9 10,输出: 1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1,3、程序举例,例 7.1 输入10个数, 求和. 例 7.2 用数组计算fibonacci数列的前20个数,并按每行打印5个数的格式输出。1, 1, 2, 3, 5, 例7.3 输入5个整数,将它们存入数组a中,再输入1个数x,然后在数组中查找x,如果找到,输出相应的下标,否则,输出“Not Found”。,程序举例,例 7.4_1 输入10个数, 求最小值. 例 7.4_2 输入n(n10), 再输入n个数,求最小值。 例 7.4_3 输入n(n10), 再输入n个数, 输出最小值和它所对应的下标。 例 7.4_4 输入n(n10), 再输入n个数,将最小值与第一个数交换,输出交换后的n个数。 例 7.5 输入n(n10), 再输入n个数,用选择法将它们从小到大排序后输出。,例 7.1求和,输入10个数, 求和.,main( ) int i, a10; long sum; for(i = 0; i 10; i+) scanf(“%d”, ,# include “stdio.h” void main( ) int a10, i; long sum=0; for(i = 0; i 10; i+) scanf(“%d”, ,用数组计算fibonacci数列的前20个数,并按每行打印5个数的格式输出。 1, 1, 2, 3, 5, 8, 13, 分析: 用数组计算并存放fibonacci数列的前20个数 f0=f1=1 fn=fn-1+fn-2 2n19,例 7.2 计算fibonacci数列,main( ) int i, fib20; fib0=fib1=1; for(i=2; i20; i+) fibi=fibi-1+fibi-2; for(i=0; i20; i+) printf(“%6d“, fibi); if(i+1)%5=0) printf(“n“); ,输入5个整数,将它们存入数组a中,再输入1个数x,然后在数组中查找x,如果找到,输出相应的下标,否则,输出“Not Found”。,例7.3查找,输入:2 9 8 9 6 9 输出:,1,void main( ) int i, x, a5; for(i=0; i=5) printf(“Not Foundn”); ,1 3,void main( ) int i, x, a5; for(i=0; i5; i+) scanf(“%d”, ,输入:2 9 8 9 6 9 输出:,输入:2 9 8 9 6 9 输出:,3,void main( ) int i, x, sub, a5; for(i=0; i5; i+) scanf(“%d”, ,输入10个数, 求最小值.,main( ) int i, min, a10; for(i = 0; i 10; i+) scanf(“%d”, ,例 7.4_ 1 求最小值,输入n(n10), 再输入n个数,求最小值。,main( ) int i, min, n, a10; scanf(“%d”, ,例 7.4_2 求最小值(n个数),输入n(n10), 再输入n个数, 输出最小值和它所对应的下标。 用index记录最小值对应的下标 aindex就是最小值,例 7.4_3 求最小值(下标),输出最小值和它所对应的下标,N-S流程图,main( ) int i, min, n, a10; scanf(“%d”, ,输入n(n a0,例 7.4_4 最小值交换,例 7.5 选择法排序,输入n(n10), 再输入n个数,用选择法将它们从小到大排序后输出。 n=5,(1) 1 5 2 8 3 (2) 2 5 8 3 (3) 3 8 5 (4) 5 8,3 5 2 8 1 (n=5) 5个数(a0a4)中找最小数,与a0交换 (1) 1 5 2 8 3 a4 a0 4个数(a1a4)中找最小数,与a1交换 (2) 1 2 5 8 3 a2 a1 3个数(a2a4)中找最小数,与a2交换 (3) 1 2 3 8 5 a4 a2 2个数(a3a4)中找最小数,与a3交换 (4) 1 2 3 5 8 a4 a3,(1) n个数(a0an-1)中找最小数,与a0交换 (2) n-1个数(a1an-1)中找最小数,与a1交换 (n-1) 2个数(an-2an-1)中找最小数,与an-2交换,(1) 5个数(a0a4)中找最小数,与a0交换 (2) 4个数(a1a4)中找最小数,与a1交换 (3) 3个数(a2a4)中找最小数,与a2交换 (4) 2个数(a3a4)中找最小数,与a3交换,n个数(a0an-1)中找最小数,与a0交换,N-S流程图,N-S流程图(选择排序),void main() int i, index, k, n, temp, a10; scanf(“%d”, ,7.1.2 一维数组的初始化,定义数组时,对数组元素赋初值 类型名 数组名数组长度= 初值表; 1. 对全部元素赋初值 int a10=0,1,2,3,4,5,6,7,8,9; a0=0, a1=1,. a9=9 静态数组、全局数组、自动型数组初始化 static int b5=1, 2, 3, 4, 5; 静态存储的数组如果没有初始化,自动给所有元素赋0 static int b5,2. 部分元素初始化 static int b5=1,2,3; b0=1, b1=2, b2=3, b3=0, b4=0 auto int fib20=0,1; 如果对全部元素都赋初值,可以省略数组长度 int a =0,1,2,3,4,5,6,7,8,9; 建议不要省略数组长度,颜晖,计算机程序设计(C),28,0705004,,7.2 二维数组,多维数组的空间想象,二维数组: 一个表格或一个平面矩阵,一维数组: 一列长表或一个向量,多维数组: 多维空间的一个数据列阵,三维数组: 三维空间的一个方阵,7.2.1 二维数组的定义和引用,1、定义 类型名 数组名行长度列长度 int a32; 定义1个二维数组a,3行2列,6个元素 int b510; 5 行 10 列, 50 个元素,2、数组元素的引用,先定义,后使用 定义:类型名 数组名行长度列长度 数组元素的引用: 数组名行下标 列下标 行下标的取值范围是0,行长度-1 列下标的取值范围是0,列长度-1 下标不要越界,int a32; 3 行 2 列, 6 个元素 表示1个3行2列的矩阵 a00 a01 a10 a11 a20 a21,二维数组的元素在内存中按行/列方式存放 a00 a01 a10 a11 a20 a21,遍历二维数组,行下标和列下标分别做为循环变量, 通过二重循环,遍历二维数组 通常将行下标做为外循环的循环变量,a00 a01 a10 a11 a20 a21 for(i = 0; i 3; i+) for(j=0; j2; j+) aij = i+j;,i=0 j=0 i=0 j=1 i=1 j=0 i=1 j=1 i=2 j=0 i=2 j=1,0 1 1 2 2 3,输入二维数组,int a32; for(i = 0; i 3; i+) for(j=0; j2; j+) scanf(“%d”, 输入:1 2 3 4 5 6,a00 a01 a10 a11 a20 a21,1 2 3 4 5 6,按矩阵的形式输出二维数组,int a32; for(i = 0; i 3; i+) for(j=0; j2; j+) printf(“%d”, ,a00 a01 a10 a11 a20 a21,3、程序举例,例7.6 定义1个3*2的二维数组a,数组元素的值由下式给出,按矩阵的形式输出a。 aij=i+j(0i2,0j1) 例7.7 找出矩阵中绝对值最小的元素,以及它的行下标和列下标。 例7.8 方阵转置(行列互换),定义1个3*2的二维数组a,数组元素的值由下式给出,按矩阵的形式输出a。 aij=i+j(0i2,0j1),例7.6,#include void main( ) int i, j; int a32; for(i=0; i3; i+) for(j=0; j2; j+) aij=i+j; for(i=0; i3; i+) for(j=0; j2; j+) printf(“%4d“, aij); printf(“n“); ,找出矩阵中绝对值最小的元素,以及它的行下标和列下标。 求绝对值函数 abs( ) 或 fabs( ) 头文件 math.h row记录绝对值最小的元素的行下标 col记录 列下标 arowcol就是绝对值最小的元素,例7.7,#include #include void main( ) int i, j; int a32; for(i = 0; i 3; i+) for(j=0; j2; j+) scanf(“%d”,row=col=0; for(i=0; i3; i+) for(j=0; j2; j+) if(abs(aij)abs(arowcol) row=i; col=j; printf(“a%d%d=%dn“, row, col, arowcol); 输入:3 2 10 -9 6 -1,3 2 10 -9 6 -1,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,输入一个正整数n (1n6),根据下式生成1个n*n的方阵,然后将该方阵转置(行列互换)后输出。 aij=i*n+j+1(0in-1,0jn-1) int a66,例7.8,分析,#include void main( ) int i, j, n, t; int a66; scanf(“%d”, ,输入 3 1 2 3 4 5 6 7 8 9,for(i=0; in; i+) for(j=0; jn; j+) t=aij; aij=aji; aji=t; for(i=0; in; i+) for(j=0; jn; j+) printf(“%4d“, aij); printf(“n“); ,for(i=0; in; i+) for(j=0; j n; j+) t = aij; aij = aji; aji = t; ,i=0: 1 4 7 2 5 6 3 8 9,i=1: 1 2 7 4 5 8 3 6 9,i=2: 1 2 3 4 5 6 7 8 9,1 2 3 4 5 6 7 8 9,for(i=0; in; i+) for(j=0; j n; j+) if(i = j ) t = aij; aij = aji; aji = t; ,i=0: 1 4 7 2 5 6 3 8 9,i=1: 1 4 7 2 5 8 3 6 9,for(i=0; in; i+) for(j=0; j n;j+) if(i = j ) t=aij; aij=aji; aji=t; ,1 2 3 4 5 6 7 8 9,主对角线:i = j 上三角: i =j,for( j = i; j n; j+),颜晖,计算机程序设计(C),29,0705004,,7.2.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;,省略行长度 对全部元素都赋了初值, 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,7.3 字符串,字符串的存储和运算用一维字符数组实现 7.3.1 一维字符数组 定义、引用、初始化 char str80 ; 定义一个含有80个字符型元素的数组str char t5=H, a, p, p, y; 初始化数组 t,7.3.1 一维字符数组,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;,一维字符数组,char t5=H, a, p, p, y; for(i=0; i5; i+) putchar(si) ;,7.3.2 字符串,字符串常量 用一对双引号括起来的字符序列 一个字符串结束符0 “Happy“ 6个字符 H a p p y 0,有效字符,字符串结束符,字符串的有效长度:有效字符的个数,字符串,字符串:一个特殊的一维字符数组 把字符串放入一维字符数组(存储) 对字符串的操作 = 对字符数组的操作 存储 static char s6=H, a, p, p, y, 0; 字符数组初始化: 用字符串常量 static char s6=“Happy“; static char s6= “Happy“;,字符串,static char s6= “Happy“; 数组长度 = 字符串的有效长度+1 char t5 “Happy“ 不能存入t,字符串,auto char s80= “Happy“;,字符串遇0结束 第一个0前面的所有字符和0一起构成了字符串“Happy” 0之后的其他数组元素与该字符串无关,计算字符串的有效长度,并输出该字符串 字符串的有效长度:有效字符的个数 数组中第一个0前面的字符个数,例7.10 字符串的有效长度,void main( ) int i=0, len; char s80=“Happy“; for(i=0; si!=0; i+) ; len=i; printf(“len = %dn“, len); for(i=0; si!=0; i+) putchar(si); ,输出 len=5 Happy,输出字符串 for(i=0; si!=0; i+) putchar(si); for(i=0; i80; i+) putchar(si); for(i=0; ilen; i+) putchar(si);,字符串,把字符串放入一维字符数组(存储) 对字符串的操作 = 对字符数组的操作 存储 字符数组初始化: 用字符串常量 static char s6= ”Hello“;,赋值 s0=a; s1=0; 等价 static char s6= “a“;,字符串,区分 “a” 和 a “a” 2个字符a和0 a 1个字符常量,输入字符串,把字符串放入一维字符数组(存储) 对字符串的操作 = 对字符数组的操作 存储 字符数组初始化: static char s6= ”Happy“; 赋值:s0=a; s1=0;,输入 0代表空操作,无法输入 输入时,设定一个输入结束符 将输入结束符转换为字符串结束符0,输入一个以问号结束的字符串(少于80个字符),统计其中数字字符的个数。 分析: 数组长度取上限80 以?做为输入结束符,例7.11 统计,颜晖,计算机程序设计(C),30,0705004,yqfjc02dlc.zju.ed
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 48336.101-2026星闪无线通信系统第101部分:架构和通用要求
- T/ZGZS 0505-2023再生棉纱线产品碳足迹核算方法
- T/HSIPA 025-2022中医拨筋技术操作规范
- T/CISIA 008-2024电子级过硫酸盐
- T/CARD 007-2020智力障碍者用可穿戴定位设备技术要求和测试方法
- T/CSCB 0027-2024人胰岛
- 2025~2026学年内蒙古呼伦贝尔市鄂伦春自治旗人教版六年级下册期末考试数学试卷【附答案】
- 2025~2026学年广东省揭阳市普宁市人教版六年级上册学习评价(二)数学试卷【附答案】
- 2025-2026学年河南省林州市初中政治八年级期末下册自测模拟高分特训题(附答案)
- 2025-2026学年江西省樟树市初中政治八年级期末下册高分预测黑金试卷附答案
- 2026国企招聘考试(法务)历年参考题库含答案详解
- 2026年天然气分公司人员招聘笔试模拟试题及详细答案解析
- 2026年注册安全工程师考试(中级)安全生产管理试题与参考答案
- 2026年初级会计实务历年真题及答案
- 电工:低压配电系统电气故障诊断详解
- 2026相关方安全生产管理协议书汇编
- 2026年国家电网招聘之管理类通关考试题库带答案解析
- SYT 6150.2-2025《钢制管道封堵技术规范 第2部分:挡板-囊式封堵》
- GB/T 33969-2026高炉富氧喷煤技术规范
- 2026-2030中国汽车防撞梁行业发展动态与市场需求研究报告
- 2026年煤矿新工人机考题(附答案)
评论
0/150
提交评论