第07章数组_第1页
第07章数组_第2页
第07章数组_第3页
第07章数组_第4页
第07章数组_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2021-12-222基本类型基本类型 构造类型构造类型派生类型派生类型整型int结构体struct数组类型字符型char共用体(联合)型union指针类型实型float枚举型enum双精度型Double用户定义类型typedef 空值型void构造数据类型(导出类型):构造数据类型(导出类型):由基本数据类型按一定规则组合而成的。广义上包括表中的构造类型和派生类型。 2021-12-2237.1 数组和数组元素数组和数组元素7.2 一维数组一维数组7.3 多维数组多维数组7.4 字符数组字符数组退出2021-12-2247.1 数组和数组元素数组和数组元素数数 组组是一种数据结构,处于这种结

2、构中的变量具有相同的性质,并按一定的顺序排列。数组的定义: 数据类型数据类型 数组名数组名 数组长度数组长度;例例: int: int a6; a6; a00145a1a2a3a4a523a数组元素(下标变量)数组元素(下标变量)数组中的每个分量,用下标来表示其所处位置,各分量排列有序且数据类型相同。数组元素的表示: 数组名数组名 下标下标 例:a3, data34数组名数组名表示数组存储区域的首地址,数组的首地址也就是第一个元素的地址,是一个地址常量,不能向它赋值。例:a或&a0下下 标标用来表示该数组元素在数组中的相对位置,是整型常量,最小值为0,最大值为数组长度-1。例: a3中

3、的下标32021-12-225一维数组一维数组:带有一个方括号的数组。a6二维数组:二维数组:带有两个方括号的数组。data34三维数组:三维数组:带有三个方括号的数组。c345 n 维数组维数组: 带有n个方括号的数组。b4 4多多维维数数组组例7.1 用数组表示向量D和矩阵A数组d10表示向量D: d0,d1,d2,d3,d4,d5,d6,d7,d8,d9数组a43表示矩阵A:a00,a01,a323231302221201211100201009876543210),(aaaaaaaaaaaaAddddddddddD返 回2021-12-2267.2 一维数组一维数组1.一维数组的定义:

4、一维数组的定义: 类型类型 数组名数组名数组长度数组长度; 例:int a6;数组长度:数组长度:用常量表达式来表示数组元素的个数。 2.一维数组元素的使用:一维数组元素的使用: 数组名数组名下标下标 例:a0=100;2021-12-2279 8 7 6 5 4 3 2 1 0例7.2一维数组元素的使用。main() int i,a10; for (i=0;i=0;i-) printf(%d ,ai);2021-12-2283.一维数组的初始化:一维数组的初始化:在说明时对数组的元素进行赋值。类型类型 数组名数组名数组长度数组长度=常量表达式常量表达式1,常量表达常量表达式式2,;注:数组长

5、度可省略,设初值时系统自动分配。 花括号中的常量个数常小于数组长度,相应赋值后,其余赋0。 若数组长度小于初值个数,则编译错误。 int a=0,1,2,3,4,5,6,7,8,9; int a10=0,1,2,3,4,5,6,7,8,9; int a10=0,1,2,3,4; int a4=1,2,3,4,5; 2021-12-229例7.3整数数组的初始化。int a=0,1,0,0,1;main() int i; for (i=0;i5;i+) printf(%d ,ai); 0 1 0 0 12021-12-2210例7.4冒泡法从小到大排序程序。排序过程:设有n个数据,存放到a1到a

6、n的n个数组元素中。 (1) 从a1到an,依次把两个相邻元素两两比较,即a1与a2比,a2与a3比,an-1与an比;(2) 每次两相邻元素比较后,若前一个元素值比后一个元素值大,则交换两元素值;否则,不交换。(3)重复上述算法,把a1到an中的最大值换到an ,再把a1到an-1中最大值换到an-1 ,最后把a1到a2中最大值换到a2中,即完成排序。main() int i,j,t,a6=1,0,-8,23,76,-6; printf(n); for (j=1;j5;j+) for (i=0;iai+1)t=ai;ai=ai+1;ai+1=t; printf(the sorted numb

7、ers : n); for (i=0;i6;i+) printf(%d ,ai);2021-12-2211例7.5比较交换法从大到小排序程序。排序过程:(1)通过比较交换将数组元素a1到an中的最大值放入a1中;(2)再次比较交换将数组元素a2到an中的最大值放入a2中; (3)以此类推,将ai到an中的最大值存入到ai中,直到最后二个元素an-1与an进行一次比较,依条件交换,较大值存入an-1中,即达到了按从大到小的排序。#define N 6main() int i,j,t,aN=1,0,-8,23,76,-6; printf(n); for(i=0;iN-1;i+) for(j=i+1

8、;j=N-1;j+) if(aiaj) t=ai;ai=aj;aj=t; printf(the sorted numbers : n); for(i=0;iN;i+) printf(%d ,ai);2021-12-2212例7.6选择法排序从大到小排序程序。排序过程: 在每一轮比较中不是每当aiaj时就交换,而是用一个变量k记下其中值较大的元素的下标值,在ai与ai1到an都比较后,只将ai与ai1到an中值最大的那个元素交换,为此,在每一轮只需将ai与ak的值交换即可。#define N 6main() int i,j,t,k,aN=1,0,-8,23,76,-6; printf(n); f

9、or(i=0;iN-1;i+) k=i; for(j=i+1;jak) k=j; if(k!=i) t=ai;ai=ak;ak=t; printf(the sorted numbers : n); for(i=0;iN;i+) printf(%d ,ai);返 回2021-12-22137.3 多维数组多维数组 7.3.1 二维数组的定义和使用 7.3.2 二维数组的初始化 7.3.3 二维数组程序举例 返 回2021-12-22147.3.1 二维数组的定义和使用二维数组的定义和使用1.二维数组的定义二维数组的定义 类型类型 数组名数组名常量表达式常量表达式1常量表达式常量表达式2;例:in

10、t a34; a00a01a02a03a10a11a12a13a20a21a22a23014523a01a02a03a10a11a00a13a20a21a22a23a1267101189a0a1a2a0a1a2存储结构存储结构:以行为主序行为主序方式存放。数组长度数组长度=常量表达式1*常量表达式2逻辑结构逻辑结构:行数列数行名2021-12-2215三维数组int b234的存储结构:01234567.20212223b000b001b002b003b010b011b012b013b020b021b022b023b100b101b102b103b110b111b112b113b120b121

11、b122b1232.二维数组元素的使用二维数组元素的使用二维数组名的使用:是该数组的首地址。二维数组元素的使用: 数组名数组名下标下标1下标下标2行号列号2021-12-2216例7.7输入一个二维数组值,并将其在数组中的内容及地址显示出来。main() int a23; int i,j; for(i=0;i2;i+) for(j=0;j3;j+) scanf(%d,&aij); for(i=0;i2;i+) for(j=0;j3;j+) printf(“a%d%d=%d addr= %xn”,i,j,aij,&aij); 返 回123456a00=1 addr=0 x ffd

12、2 a01=2 addr=0 x ffd4a02=3 addr=0 x ffd6a10=4 addr=0 x ffd8a11=5 addr=0 x ffdaa12=6 addr=0 x ffdc2021-12-2217多维数组的初始化有两种方式:直述型:将所有常量写在一个花括号内,各个常量之间用逗号分开,按数组元素存储的顺序对各元素赋初值。7.3.2 二维数组的初始化二维数组的初始化 int a34=1,2,3,4,5,6,7,8,9,10,11,12;int a34=1,2,3,4,5,6,7,8,9,10,11,12;分列型:用花括号嵌套,即每一组一维数组的初值数据再用一对花括号括起。注:

13、若对全部元素都赋初值,第一维长度可省略,但第二维长度不能省。int a34=1,5,9;int a4=1,2,3,4,5,6,7,8,9,10,11,12;2021-12-2218例7.8输入一个3*3的数组,将其行和列互换。main() int i,j,b33; static int a33=1,2,3,4,5,6,7,8,9; for(i=0;i=2;i+) for(j=0;j=2;j+) bji=aij; for(i=0;i=2;i+) for(j=0;j=2;j+) printf(%d ,bij); printf(n); 14 72 5 83 6 9返 回2021-12-2219例7.

14、9有一个3*4的矩阵,要求编程求出第i行、第j列元素的值。main() int i,j; static int a34=1,2,3,4,9,8,7,6,-10,10,-5,2; printf(input integer i: ); scanf(%d,&i); printf(input integer j: ); scanf(%d,&j); printf(a%d%d=%d,i-1,j-1,ai-1j-1); input integer i: 2input integer j: 3a12=77.3.3 二维数组程序举例二维数组程序举例 2021-12-2220main() int

15、i,j,k,m=2,n=3,p=2; static int a23= 6,8,7, 3,4,5 ; static int b32= 1,2, 2,1, -1,0 ; static int c22= 0,0, 0,0; for(i=0;im;i+) for(j=0;jp;j+) cij=0; for(k=0;kn;k+) cij=cij+aik*bkj; for(i=0;im;i+) for(j=0;jp;j+) printf(%d ,cij); printf(n); 例7.10求矩阵A与乘积。15 206 10返 回2021-12-22212021-12-22222021-12-2223 字符

16、串结束标志字符串结束标志0 x480 x450 x4C0 x4C0 x4F0 char str = china; char str = c, h, i, n, a; char str10 = china; char str10 = c, h, i, n, a; 2021-12-2224 时时, 2021-12-2225 getsscanf输入的字符串中可包含空格字符输入的字符串中不可包含空格字符只能输入一个字符串可连续输入多个字符串(使用%s%s)不可限定字符串的长度可限定字符串的长度(使用%ns)遇到回车符结束遇到空格符或回车符结束2021-12-2226 功能:向显示器输出字符串(功能:向

17、显示器输出字符串(输出完,换行输出完,换行)说明:如果是字符数组,则必须以说明:如果是字符数组,则必须以00结束结束 2021-12-2227 格式:格式:strlen( (字符串地址字符串地址) ) 功能:计算字符串长度功能:计算字符串长度返值:返回字符串实际长度,不包括返值:返回字符串实际长度,不包括00在内在内 2021-12-2228 2021-12-2229 2021-12-2230 0 2021-12-2231 2021-12-2232 2021-12-2233函数的用法函数的功能应包含的.h文件strset(字符数组, 字符)将字符数组中的字符串中的所有字符都设为指定字符stri

18、ng.hstrlwr(字符数组)将字符数组中的字符串中的所有字符转换成小写字符string.hstrupr(字符数组)将字符数组中的字符串中的所有字符转换成大写字符string.htoupper(字符)将小写字符转换成大写字符ctype.htolower(字符)将大写字符转换成小写字符ctype.hatoi(字符串)将字符串转换成整型stdlib.hatol(字符串)将字符串转换成长整型stdlib.hatof(字符串)将字符串转换成浮点数stdlib.hultoa(无符号长整数,字符数组,进制)将无符号长整数转换成指定的进制数并以字符串的形式存放到字符数组中stdlib.h 2021-12-

19、22342021-12-2235 2021-12-2236 BeiJing000ShangHai00TianJin000GuangZhou0WuHan00000city0city1city2city3city42021-12-2237 2021-12-2238 2021-12-2239综合练习2021-12-22401.假设假设int型变量占两个字节的存储单元型变量占两个字节的存储单元,若有定若有定义:义: int x10=0,2,4; 则数组则数组x在内存中所占字节数为在内存中所占字节数为_。 A、3 B、6 C、10 D、20 D固定长度数组已经定义就分配相应长度*sizeof(数据类型)

20、存储空间,与是否初始化无关2021-12-2241若给出以下定义:若给出以下定义: char x=abcdefg; char y=a,b,c,d,e,f,g; 则正确的叙述为则正确的叙述为_。 A、数组、数组x和数组和数组y等价等价 B、数组、数组x和数和数组组y的长度相同的长度相同 C、数组、数组x的长度大于数组的长度大于数组y的长度的长度 D、数组、数组y的长度大于数组的长度大于数组x的长度的长度Cchar x=abcdefg等价于char x=a,b,c,d,e,f,g,0;2021-12-22423.若定义如下变量和数组若定义如下变量和数组 int j; int x33=1,2,3,4

21、,5,6,7,8,9; 则下面语句的输出结果是则下面语句的输出结果是_。 for (j=0;j3;j+) printf(%d,xj2-j); A、1 5 9 B、1 4 7 C、3 5 7 D、3 6 9Cj=0,x02;j=1,x11;j=2,x201234567890120122021-12-22434.有以下程序有以下程序main() int p7=11,13,14,15,16,17,18, i=0,k=0;while(i7 & pi%2) k =k+ pi; i+; printf(%dn, k); 执行后输出结果是执行后输出结果是_。A、58 B、56 C、45 D、24 D2021-12-22445.以下能正确定义一维数组的选项是以下能正确定义一维数组的选项是_。A、int num; B) #define N 100 int numN;C、int num0.100; D) int N=100; int numN;B2021-12-22456.有以下程序有以下程序main( ) char a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论