最新c c++语言程序设计(西电版第4章 数组(共109张ppt课件).pptx
《最新c c++语言程序设计(西电版第4章 数组(共109张ppt课件).pptx》由会员分享,可在线阅读,更多相关《最新c c++语言程序设计(西电版第4章 数组(共109张ppt课件).pptx(109页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C/C+C/C+语言语言(yyn)(yyn)程序设计程序设计第一页,共一百零九页。4.1 一维数组一维数组4.2 二维数组二维数组4.3 字符字符(z f)数组与字符数组与字符(z f)串串4.4 指针与数组指针与数组4.5 指向指针的指针指向指针的指针4.6 小结小结第二页,共一百零九页。l一个一个(y )人人N门课的成绩怎样存储和处理?门课的成绩怎样存储和处理?l一个班一个班N门课的成绩怎样存储和处理?门课的成绩怎样存储和处理?.这些数据这些数据(shj)(shj)的特点的特点具有相同的数据类型。具有相同的数据类型。 为了方便地使用这些数据,为了方便地使用这些数据,C语言提供了一种语言提供
2、了一种构造构造数据类型:数据类型:数组数组。数组数组是个是个多值变量多值变量由一组由一组同名同名但但不同下标不同下标的元的元素构成。素构成。 一个数组被一个数组被顺序顺序存放在一块存放在一块连续连续的内存中的内存中,用用数数组名组名和和下标下标就可以唯一地确定某个数组元素。就可以唯一地确定某个数组元素。 只有一个下标的数组被称为一维数组,有两个只有一个下标的数组被称为一维数组,有两个下标的数组被称为二维数组,以此类推。下标的数组被称为二维数组,以此类推。C语言允许语言允许使用任意维数的数组。使用任意维数的数组。第三页,共一百零九页。“数据类型数据类型”:是数组元素的数据类型。是数组元素的数据类
3、型。“数组名数组名”:遵循遵循C语言语言标识符规则标识符规则。“整型常量表达式整型常量表达式”:表示数组中有多少个元素,即表示数组中有多少个元素,即数组的长度。它可以是整型常量、整型常量表达式或数组的长度。它可以是整型常量、整型常量表达式或符号常量,但不能包含变量。符号常量,但不能包含变量。例如:例如: float x10; 数组名表示数组第一个元素数组名表示数组第一个元素x0的地址,也就是的地址,也就是(jish)整整个数组的首地址,是一个地址常量。个数组的首地址,是一个地址常量。数据类型数据类型 数组名数组名整型常量整型常量(chngling)表表达式达式;第四页,共一百零九页。常见错误常
4、见错误int x;int x(5);int n=4; int xn;”以下数组定义是正确的:以下数组定义是正确的:#define N 10float score1N, score2N;int num10+N;char c26;第五页,共一百零九页。l数组元素的下标从数组元素的下标从0开始按顺序开始按顺序(shnx)编号。编号。l一维数组的数组元素一维数组的数组元素在内存里在内存里按顺序按顺序存放。存放。l数组名代表数组的首地数组名代表数组的首地址,即址,即score的值与的值与score0 的地址值相同。的地址值相同。 score0score1score2score3score491.534.
5、567.572.084.0低地址低地址高地址高地址score数组数组例如例如(lr):float score5;第六页,共一百零九页。7for(i=0;i5;i+) scanf(%f,&scorei);下标表达式下标表达式可以为任何可以为任何非负整型表达式非负整型表达式,包括整型常量、,包括整型常量、整型变量、含有运算符的整型表达式,以及返回值为整整型变量、含有运算符的整型表达式,以及返回值为整数的函数调用。如果值为小数时,数的函数调用。如果值为小数时,C编译将自动取整。编译将自动取整。下标表达式的值下标表达式的值应在元素应在元素编号的取值范围内编号的取值范围内。数组名数组名下标表达式下标表达
6、式第七页,共一百零九页。8xi / /* *引用引用(ynyng)(ynyng)数组数组x x的第的第3 3个元素个元素* */ /xi+ / /* *引用数组引用数组x x的第的第3 3个元素个元素* */ /x2*i-6 / /* *引用数组引用数组x x的第的第0 0个元素个元素* */ /第八页,共一百零九页。说明说明(shumng)(shumng):(3)下标从)下标从0开始(下界为开始(下界为0),数组的最大下标(上),数组的最大下标(上界)是数组长度减界)是数组长度减1。 例如:例如: int a10; scanf (%d,&a10); /* 下标越界下标越界 */ C编译系统不
7、做越界检查编译系统不做越界检查(jinch),如果引用的数组元素,如果引用的数组元素超出数组范围会破坏其他变量的值。超出数组范围会破坏其他变量的值。第九页,共一百零九页。说明说明:(4)在在C语言中,一般需逐个地使用下标变量引用数组语言中,一般需逐个地使用下标变量引用数组元素。例如,输出有元素。例如,输出有10个元素的整型数组,须使用循环个元素的整型数组,须使用循环(xnhun)语句逐个输出各下标变量:语句逐个输出各下标变量: int a10; for(i=0;i10;i+) printf (%d ,ai); 而不能用一个语句输出整个数组,下面的写法是错误的:而不能用一个语句输出整个数组,下面
8、的写法是错误的: printf (%d ,a);第十页,共一百零九页。11 (5 5) 是是下标下标(xi (xi bio)bio)运算符运算符,引用引用数数组元素组元素时,根据数组时,根据数组的的首地址首地址和和下标下标数,数,计算出该元素的实际计算出该元素的实际地址,取出该地址的地址,取出该地址的内容内容进行操作。进行操作。如引用如引用 scorescore2:2:(1)(1)计算计算(j sun)(j sun) 20002000+ +2 2* *4=4=20082008(2)(2)取出取出20082008的内容的内容2000H2004H2008H200CH218CHscore0score
9、1score2score3score491.534.567.572.084.0第十一页,共一百零九页。12初始化:初始化:在定义在定义(dngy)数组时给数组元素赋初值。数组时给数组元素赋初值。(1) (1) 在定义数组时,对全部数组元素赋初值。在定义数组时,对全部数组元素赋初值。 例例如:如:int x5=1,2,3,4,5;此时可以省略数组长度,例如:此时可以省略数组长度,例如: int x =1,2,3,4,5;(2) (2) 在定义数组时,对部分数组元素赋初值。在定义数组时,对部分数组元素赋初值。例如:例如:int x5=1,2,3; 只给前面三个元素赋初值只给前面三个元素赋初值(x0
10、=1, x1=2,x2=3),为其余元素赋),为其余元素赋 0 0 。(3) (3) 当初值的个数多于数组元素的个数时,编译当初值的个数多于数组元素的个数时,编译(biny)(biny)出出错。例如:错。例如:int x5=1,2,3,4,5,6;数据类型数据类型 数组名数组名整型常量表达式整型常量表达式=常量表常量表 达式,常量表达式,达式,常量表达式,第十二页,共一百零九页。【例例4.2】数组赋值与数组拷贝数组赋值与数组拷贝(kobi)。#include stdio.hvoid main() int a10,b10,i; for(i=0;i10;i+) ai=i+1; for(i=0;i1
11、0;i+) bi=ai; for(i=0;imax 则则: max=ai; k=i; 否则判断否则判断: 若若aimin 则则: min=ai; j=i; l当所有的数都比较完之后,将当所有的数都比较完之后,将aj=max; ak=min;l输出输出a数组。数组。第十四页,共一百零九页。main( ) int a5,max,min,i,j,k; for(i=0; i5; i+) scanf(%d,&ai); min=a0; max=a0; j=k=0; for (i=1; i5; i+) if (aimax) max=ai; k=i ; aj=max; ak=min; for (i=0; i5
12、; i+) printf(%5d,ai); printf(n); 程序运行情况程序运行情况(qngkung)如下:如下:5 7 2 3 1 5 1 2 3 7第十五页,共一百零九页。16第一趟排序情况如下:第一趟排序情况如下: 3 7 5 6 8 0第一次第一次 3和和7比较比较(bjio),不交换,不交换 3 7 5 6 8 0第二次第二次 7和和5比较,交换比较,交换 3 5 7 6 8 0第三次第三次 7和和6比较,交换比较,交换 3 5 6 7 8 0第四次第四次 7和和8比较,不交换比较,不交换 3 5 6 7 8 0第五次第五次 8和和0比较,交换比较,交换 3 5 6 7 0 8
13、在第一趟排序中,在第一趟排序中,6个数比较了个数比较了5次,把次,把6个数中的个数中的最大数最大数8排在最后。排在最后。第十六页,共一百零九页。17第二趟排序情况如下第二趟排序情况如下3 5 6 7 0 8最大数最大数8不用参加不用参加(cnji)比较,其余的比较,其余的5个数比个数比较了较了4次,把其中的最大数次,把其中的最大数7排在最后,排出排在最后,排出7 8。 以此类推:以此类推:第三趟比较第三趟比较3次,排出次,排出 6 7 8第四趟比较第四趟比较2次,排出次,排出 5 6 7 8第五趟比较第五趟比较1次,排出次,排出 3 5 6 7 8最后还剩下最后还剩下1个数个数0,不需再比较,
14、得到排序结果:,不需再比较,得到排序结果:0 3 5 6 7 8第十七页,共一百零九页。18从上述从上述(shngsh)(shngsh)过程可以看到:过程可以看到:n n个数要比较个数要比较n-1n-1趟,趟,而在第而在第j j趟比较中,要进行趟比较中,要进行n-jn-j次两两比较。次两两比较。 冒泡法排序冒泡法排序for (i=0; iN; i+) 输入输入ai for (j=1;jN; j+) for (i=0; iai+1 T F ai与与ai+1交换交换输出输出a0aN-1第十八页,共一百零九页。19程序运行情况程序运行情况(qngkung)如下:如下:3 7 5 6 8 0 0 3
15、5 6 7 8#define N 6main( ) int aN; int i,j,t; for (i=0; iN; i+) /*给数组给数组a赋值赋值*/ scanf(%d,&ai); for (j=1; j=N-1; j+) /*外层循环控制比较的趟数外层循环控制比较的趟数 */ for (i=0; iai+1) /*前后两数比较、交换前后两数比较、交换*/ t=ai;ai=ai+1;ai+1=t; printf(The sorted numbers: n); for(i=0;iN;i+) printf(%dt,ai); 第十九页,共一百零九页。20以以6个数:个数:3、7、5、6、8、0
16、为例。为例。思路:思路:第一趟第一趟:将:将第一个数第一个数依次和后面的数比较依次和后面的数比较(bjio),如果后面的某数小于如果后面的某数小于第一个数第一个数,则两个数交换,则两个数交换,比较结束后,比较结束后,第一个数第一个数则是则是最小最小的数。的数。第二趟第二趟:将:将第二个数第二个数依次和后面的数比较,依次和后面的数比较,如果后面的某数小于如果后面的某数小于第二个数第二个数,则两个数交换,则两个数交换,比较结束后,比较结束后,第二个数第二个数则是则是次小次小的数;的数; 。第二十页,共一百零九页。21图4.3 比较法排序for (i=0; iN; i+) 输入输入ai for (j
17、=0; jN-1; j+) for (i=j+1; iai T F aj与与ai交换交换 输出输出a0aN-1第二十一页,共一百零九页。22程序运行情况程序运行情况(qngkung)如下:如下:96 78 65 86 40 The sorted numbers: 40 65 78 86 96#define N 5main( ) int aN; int i,j,t; for (i=0; iN; i+) scanf(%d,&ai); printf(n); for (j=0; jN-1; j+) /*确定确定(qudng)基准位置基准位置 */ for(i=j+1; iai) t=aj;aj=ai;
18、ai=t; printf(The sorted numbers: n); for(i=0;iN;i+) printf(“%dt”,ai); 第二十二页,共一百零九页。23“整型常量表达式整型常量表达式1 1”:规定规定(gudng)(gudng)了二维数组中了二维数组中一维数组的个数。一维数组的个数。“整型常量表达式整型常量表达式2 2”:规定了一维数组中元素规定了一维数组中元素的个数。的个数。float x23; 的定义的定义(dngy)(dngy)int a3,4,b(3,4),c ,d(3)(4);数据类型数据类型 数组名数组名整型常量整型常量(chngling)表达式表达式1整型常量表
19、达式整型常量表达式2; 第二十三页,共一百零九页。24x00 x01x02x10 x11x122000H2004H2008H200cH2010H2014H 地址地址(dzh)(dzh) 值值 数组元素数组元素与一维数组相同与一维数组相同(xin tn)(xin tn),其下标只能是正整数,并且从,其下标只能是正整数,并且从0 0开开始编号的。始编号的。二维数组元素二维数组元素(yun s)在内存中的在内存中的排列顺序排列顺序:按行存按行存放放第二十四页,共一百零九页。25x0是数组名,是元素是数组名,是元素(yun s)x00的地址的地址x1是数组名,是数组名, 是元素是元素(yun s)x1
20、0的地址的地址x0- x00,x01,x02x1- x10,x11,x12二维数组可看作是一种特殊的一维数组二维数组可看作是一种特殊的一维数组第二十五页,共一百零九页。26a34=3; /* 下标下标(xi bio)越界越界 */a1,2=1; /* 应写成应写成 a12=1; */下标下标(xi bio)(xi bio)表达式是结果为任意非负整型表达式,每表达式是结果为任意非负整型表达式,每个下标个下标(xi bio)(xi bio)都从都从0 0开始。开始。例:例:int a34; a00=3; a01=a00+10; 数组名数组名 行下标表达式行下标表达式列下标表达式列下标表达式 第二十
21、六页,共一百零九页。27注意:注意: 数组元素和数组定义在形式中有些相似,但这两者数组元素和数组定义在形式中有些相似,但这两者具有具有完全不同完全不同(b tn)(b tn)的含义的含义。l数组定义语句的方括号中给出的是某一维的长度,即某数组定义语句的方括号中给出的是某一维的长度,即某一维元素的个数;一维元素的个数;l数组元素中的下标是该元素在数组中的位置标识。数组元素中的下标是该元素在数组中的位置标识。l前者只能是常量,后者可以是常量、变量或表达式。前者只能是常量,后者可以是常量、变量或表达式。第二十七页,共一百零九页。28int a23=1,2,3,4,5,6;1 1按行赋初值,将每一行按
22、行赋初值,将每一行(yxng)(yxng)元素的初值用一对元素的初值用一对花括号括起来。花括号括起来。例例:int a23=1,2,3,4,5,6;初始化后结果初始化后结果(ji gu)(ji gu):2 2根据该数组元素个数,把初始化数据全部括在一根据该数组元素个数,把初始化数据全部括在一个花括号内,由二维数组按行存储的规则,依次赋个花括号内,由二维数组按行存储的规则,依次赋给数组对应的元素。给数组对应的元素。第二十八页,共一百零九页。293 3给部分给部分(b fen)(b fen)元素赋初值元素赋初值例:例:int a23=1,4;初始化后结果初始化后结果(ji gu)(ji gu):
23、1 0 0 4 0 04 4数组初始化时,行长度可省,列长度不能省数组初始化时,行长度可省,列长度不能省 例例int a3=1,2,3,4,5,6,7; int b4=1,4,5;a 结果结果:a0: 1 2 3 a1: 4 5 6a2: 7 0 0b 结果:结果:b0: 1 0 0 0b1: 4 5 0 0第二十九页,共一百零九页。30float x3 =1.0,2.0,3.0,4.0,5.0,6.0; int a ,b 2,c3 ; int m24=1,2,3,4,5,6,7,8,9; /* 编译出错,初值个数多于编译出错,初值个数多于(du y)数组元素的个数数组元素的个数 */ 第三十
24、页,共一百零九页。31【例例4.6】建立建立(jinl)一个一个2行行3列的整数矩阵,求它的转列的整数矩阵,求它的转置矩阵并输出。置矩阵并输出。分析:分析:二维数组的输入、输出要用二重循环语句,外循环二维数组的输入、输出要用二重循环语句,外循环变量兼做数组元素的行下标,内循环变量兼做数组元素的变量兼做数组元素的行下标,内循环变量兼做数组元素的列下标。列下标。 矩阵的转置运算就是将二维数组行和列元素互换矩阵的转置运算就是将二维数组行和列元素互换,一个,一个2行行3列的整数矩阵转置后,得到一个列的整数矩阵转置后,得到一个3行行2列的列的整数矩阵。整数矩阵。#include void main()
25、static int a23=1,2,3,4,5,6; static int b32,i,j; 第三十一页,共一百零九页。32printf(arraya:n); for(i=0;i=1;i+) /*将将a数组中的第数组中的第i行第行第j列元素列元素(yun s)赋值给赋值给b数数组的第组的第j行第行第i列列*/ for(j=0;j=2;j+) printf(%4d,aij);bji=aij; printf(n); 第三十二页,共一百零九页。33printf(arrayb:n);for(i=0;i=2;i+) /*b数组为转置数组为转置(zhun zh)后的数后的数组,输出组,输出b数组元素的值
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新c c+语言程序设计西电版第4章 数组共109张ppt课件 最新 c+ 语言程序设计 西电版第 数组 109 ppt 课件
限制150内