版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、选择法排序,输入一个正整数n (1n10),再输入n个整数,用选择法将它们从小到大排序后输出。 设 n=5 ,例如有5个数:3 5 2 8 1,(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,选择法排
2、序 (程序段),for(k = 0; k n-1; k+) min = k; for(i = k+1; i n; i+) if(aiamin) min = i; temp = amin; /*交换*/ amin = ak; ak = temp; ,Enter n: 5 Enter 10 integers: 3 5 2 8 1 After sorted: 1 2 3 5 8,若一个一维数组,它的每一个元素是(类型相同的)一维数组时,便构成二维数组。 数组的类型相同:是指数组大小、元素类型相同。 数组的维数:是指数组的下标个数,一维数组元素只有一个下标,二维数组元素有两个下标。 二维数组的定义 1
3、.定义形式: 存储类别 类型标识符 数组名行数列数; 例:float b53; 定义了一个53的数组b,即数组为5行3列,可存放15个实型数据。,二维数组,例:int a23; 定义了一个23的数组a,即数组为2行3列,可存放6个整型数据。2.二维数组元素的表示形式: 数组名下标下标下标称第一维下标,下标称第二维下标。 二维数组类似于数学中的矩阵 ,由行、列组成。 把所有第一维下标相同的元素称为行,所有第二维下标相同的元素称为列。,下标1和下标2:整型表达式 行下标的取值范围是0,行长度-1 列下标的取值范围是0,列长度-1,上面定义的二维数组可以理解为定义了3个一维数组, 即相当于 floa
4、t a04, a14, a24; 此处把a0, a1, a2看作是一维数组的名字。,C语言把二维数组看作是一种特殊的一维数组,它的元素又是一个一维组。,2.存放方式: 按行存放: 在内存中先顺序存放第一行元素, 再存放第二行元素,。,数组a的9个元素如下:,定义方式: 类型说明符 数组名常量表达式1常量表达2.常量表达式N 多维数组在内存中的排列顺序为: 第一维的下标变化最慢, 最右边的下标变化最快。,3. 多维数组的定义,根据二维数组的定义,我们可以类推出多维数组的定义。 static int b223; /*定义了一个维的静态整型数组*/ float c2322; /*定义了一个维浮点型数
5、组*/,在数组定义时,多维数组的维数从左到右第一个称第一维,第二个称第二维,依此类推。多维数组元素的顺序仍由下标决定。下标的变化是先变最右边的,再依次变化左边的下标。 三维数组b的12个元素是: b000 b001 b002 b010 b011 b012 b100 b101 b102 b110 b111 b112,多维数组的定义,1.二维数组元素的引用形式:数组名下标1下标2 先定义,后使用 下标称第一维下标(或称行),下标称第二维下标(或称列)。下标从开始变化,其值分别小于数组定义中的常量表达式与常量表达式。,二维数组元素的引用,注意,1.下标是整型常量或表达式。 2.下标值应在定义的数组的
6、大小范围内。,如: int a34; 则: a34=3;,因为行列的最大值为2和3,二维数组的引用:,二维数组的元素的表示形式为: 数组名下标1下标2,二维数组的每一个元素都可以作一个变量来使用。 如: printf(%d,a00); scanf(%d,在二维数组中,一个元素的位置由其下标决定。 对 float a43;其12个元素是: 第 ()行:a00,a01,a02 第 ()行:a10,a11,a12 第 ()行:a20,a21,a22 第 ()行:a30,a31,a32,二维数组的存储结构 设有定义 int a23; float b32;,系统为数组在内存中分配一片连续的内存空间,将二
7、维数组元素按行的顺序存储在所分配的内存区域。 数组a与b的各元素的存储顺序如右图所示,二维数组的元素在内存中按行/列方式存放,二维数组的初始化,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;,3.对部分元素赋值 int a34= 1, 5, 9 ;,1 0 0 0 5 0
8、 0 0 9 0 0 0,1 0 0 0 5 6 0 0 0 0 0 0,1 0 0 0 0 0 0 0 9 0 0 0,int a34= 1, , 9 ;,int a34= 1, 5, 6 ;,4.如果对全部元素赋初值, 则定义数组对第一维的长度可以不指定, 但对第二维长度不缺省。 int a34=1,2,3,4,5,6,7,8,9,10,11,12; int a 4=1,2,3,4,5,6,7,8,9,10,11,12; 也可以只对部分元素赋值而省略第一维的长度, 但应分行赋初值。 int a 4= 0, 0, 3, , 0, 10 ; int a 3=0,0,5;,第一维的大小为多少?,
9、二维数组的初始化,4.如果对全部元素赋初值, 则定义数组对第一维的长度可以不指定, 但对第二维长度不缺省。 int a34=1,2,3,4,5,6,7,8,9,10,11,12; int a 4=1,2,3,4,5,6,7,8,9,10,11,12; 也可以只对部分元素赋值而省略第一维的长度, 但应分行赋初值。 int a 4= 0, 0, 3, , 0, 10 ; int a 3=0,0,5;,第一维的大小为多少?,使用二维数组编程,行下标和列下标分别做为循环变量, 通过二重循环,遍历二维数组 通常将 行下标做为外循环的循环变量 列下标做为内循环,例 二维数组输入输出,#include ma
10、in() int a23; int j,k; printf(nInput array a:); for (j=0;j2;j+) for (k=0;k3;k+) scanf(%d, /*输出一行后换行,再输出下一行*/ ,输入:Input array a:1 2 3 4 5 6 输出:Output array a: 1 2 3 4 5 6,对二维数组的输入输出多使用二层循环结构来实现。外层循环处理各行,循环控制变量j作为数组元素的第一维下标;内层循环处理一行的各列元素,循环控制变量k作为元素的第二维下标。,定义32的二维数组a,数组元素的值由下式给出,按矩阵的形式输出a。 aij = i + j
11、 (0i2,0j1),例 生成一个矩阵并输出,int a32; a00 a01 a10 a11 a20 a21,0 1 1 2 2 3,#include void 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); ,a00 a01 a10 a11 a20 a21,i = 0 j = 0 i = 0 j = 1 i = 1 j = 0 i = 1
12、 j = 1 i = 2 j = 0 i = 2 j = 1,0 1 1 2 2 3,例 从键盘上输入9个整数,保存在二维数组中,按数组原来位置输出第一行和第一列的所有元素。 ,分析:1、输入数组。2、输出数组时要考虑不是所有数据都输出。 思考:应该输出的数据在位置关系上有何特点?(关键!),#include main() int i,j,a33; for(i= 0;i3;i+) /*输入数组*/ for(j=0;j3;j+) printf(a%d%d=,i,j); scanf(%d, ,for(i=0;i3;i+) /*输出数组*/ for (j=0;j3;j+) if(i=1|j=1) p
13、rintf(%-6d,aij); else printf(%-6c, ); printf(“n”); ,例 用如下的33矩阵初始化数组a33,求矩阵的转置矩阵。 123147 456258 789369 转置矩阵:是将原矩阵元素按行列互换形成的矩阵 方法1:转置矩阵是将原矩阵元素按行列互换形成的。 123147 456258 789369 方法2:沿主对角线将对称位置元素互换即可。,程序如下: #include main() int j,k; int a33=1,2,3,4,5,6,7,8,9,b33; for (j=0;j3;j+) for(k=0;k3;k+) bjk=akj; for(j
14、=0;j3;j+) for(k=0;k3;k+) printf(“%6d”,bjk); printf(“n”); ,数组作为函数的参数,数组作为函数参数主要有两种情况: 数组元素作为函数的实参:这种情况与普通变量作实参一样,是将数组元素的值传给形参。形参的变化不会影响实参数组元素,我们称这种参数传递方式为“值传递”。 数组名作实参:要求函数形参是相同类型的数组或指针,这种方式是把实参数组的起始地址传给形参数组,形参数组的改变也是对实参数组的改变,称这种参数传递方式为“地址传递”。,数组名作函数参数时形参与实参都应使用数组名,且分别在被调用函数与主调函数中的说明。 实参与形参类型要一致。 实参数
15、组与形参数组大小可以不一致,形参数组可不指定大小。 C编译程序不检查形参 数组的大小。 (1)在一维形参数组名后面可只跟一对空方括号。 为在被调用函数中处理数组元素的需要,可另设一参数来传递数组元素个数。 (2)对多维数组而言,形参的第一维可不指定,但其它维必须指定。,数组名做函数参数时是把实参数组的起始地址传给了形参数组,即:形参数组与实参数组对应同一段内存单元。 利用这个特点,可用数组返回多个值。,数组名做函数参数,数组名是指针常量,也被称为常指针 数组名做实参,形参也是数组名,#include int sum (int array , int n); void main() int b5
16、=1, 4, 5, 7, 9; printf(%dn, sum(b, 5); ,int sum (int array , int n) int i, s=0; for(i=0; in; i+) s+=arrayi; return(s); ,例 利用函数调用求数组元素之和,数组名,sum(b, 5),b0+b1+.+b4,sum(b, 3),b0+b1+b2,sum(b+1, 3),b1+b2+b3,sum( void main(void) int i, a10,n; printf(Enter n: ); scanf(%d, ,例 将数组元素逆序存放。,void comper(int p , i
17、nt n) int i, j, t; for(i=0,j=n-1; ij; i+, j-) t=pi; pi=pj; pj=t; ,Enter n:6 Enter 10 integers: 10 9 8 7 6 5 5 6 7 8 9 10,数组名做为函数的参数,在函数调用时,将实参数组首元素的地址传给形参,因此,形参也指向实参数组的首元素。如果改变形参所指向单元的值,就是改变实参数组首元素的值。 或:形参数组和实参数组共用同一段存贮空间,如果形参数组中元素的值发生变化,实参数组中元素的值也同时发生变化。,二维数组和指针 1.二维数组元素的地址和二维数组名,对于一维数组: (1)数组名a表示数
18、组的首地址,即a 0的地址; (2)数组名a 是地址常量 (3)a +i是元素a i的地址 (4)a i *(a +i) 这些同样可以运用于二维数组,设有:int a34, *p;,对于二维数组: (1)a是数组名, 包含三个元素 a0,a1,a2 (2)每个元素ai 又是一个一维 数组,包含4个 元素,short int a34;,基类型,行指针与列指针,对二维数组 int a34,有 a-二维数组的首地址,即第0行的首地址 a+i-第i行的首地址 ai *(a+i)-第i行第0列的元素地址 ai+j *(a+i)+j -第i行第j列的元素地址 *(ai+j) *(*(a+i)+j) aij,a+i= 例 short int
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年亲子阅读陪伴质量提升与阅读技巧指导
- 2026年算电协同新基建工程:算力与电力深度融合国家战略部署解读
- 2026年海上油气作业区周边资源协同勘探方案
- 社区护理中的健康社区干预
- 老年人护理中的沟通技巧与艺术
- 泌尿外科患者的疼痛评估与控制
- 神经外科症状护理评估方法
- 2026年高校教师教学发展培训项目申报与课程体系设计
- 2026年大力推进战略性重组整合:从“规模扩张”到“专业化整合”转型
- 糖分摄入危害与代糖产品选择
- 《全国统一建筑工程基础定额河北省消耗量定额》
- T/ISEAA 001-2020网络安全等级保护测评高风险判定指引
- 养生合伙人合同协议书
- 劳动争议处理方案
- 二零二五年度购车绿色出行积分协议书
- Unit15Itsamysterytome!(课件)新概念英语青少版2A
- 【MOOC】市场调查与研究-南京邮电大学 中国大学慕课MOOC答案
- 插画教学课件教学课件
- DB23T 3834-2024 安全生产培训机构管理指南
- 【教材】高二校本课程-趣味化学
- 倍择瑞附有答案
评论
0/150
提交评论