第5章数组与指针 5.1数组 5.2指针 5.3动态内存分配 54指针作为函数的参数 5.5指针数组与多级指针
第5章 数组与指针 5.1 数组 5.2 指针 5.3 动态内存分配 5.4 指针作为函数的参数 5.5 指针数组与多级指针
第5章数组与指针 5.1数组 数组:具有相同数据类型的若干变量按序进行存储的变量集 中合。数组有维、二维和多维数组。 5.1.1一维数组 1.一维数组的定义 数据类型数组名[常量表达式]; 如:inta[10] 说明: ,(1)数组名与变量名一样都是标识符,必须遵循标识符的命 规则 2)“数据类型”是指数组元素的数据类型,可以是任一基本 类型或构造类型,同一个数组的每个元素都具有相同的数据类型
5.1 数组 数组:具有相同数据类型的若干变量按序进行存储的变量集 合 。 数组有一维、二维和多维数组。 5.1.1 一维数组 1. 一维数组的定义 数据类型 数组名[常量表达式]; 如: int a[10]; 说明: (1) 数组名与变量名一样都是标识符,必须遵循标识符的命 名规则。 (2) “数据类型”是指数组元素的数据类型,可以是任一基本 类型或构造类型,同一个数组的每个元素都具有相同的数据类型。 第5章 数组与指针
第5章数组与指针 5.1数组 5.1.1一维数组(续一) 3)“常量表达式”必须用方括号括起来,指的是数组的元素 个数(又称数组长度),它是一个整型值,其中可以包含常数和 符号常量,但不能包含变量 (4)数组元素的下标从0开始,即数组中第一个元素的下标为 0。如上面定义的数组a的第一个元素是aoJ (5)一个数组中的所有元素在内存中是连续存放的。 2.一维数组的引用 引用格式:数组名[下标] 其中下标可以为整型常量或表达式 注意:引用数组元素时,不要使下标越界! 如上面的数组a,其下标应为0~9!
5.1 数组 5.1.1 一维数组(续一) (3) “常量表达式”必须用方括号括起来,指的是数组的元素 个数(又称数组长度),它是一个整型值,其中可以包含常数和 符号常量,但不能包含变量。 (4) 数组元素的下标从0开始,即数组中第一个元素的下标为 0。如上面定义的数组a的第一个元素是a[0]。 (5) 一个数组中的所有元素在内存中是连续存放的。 2. 一维数组的引用 引用格式: 数组名[下标] 其中下标可以为整型常量或表达式 注意:引用数组元素时,不要使下标越界! 如上面的数组a,其下标应为0~9! 第5章 数组与指针
第5章数组与指针 例5.1维数组的引用 include void maino int i, a[10]: for(i=0;i<10;i++) [=i*10; for(i=0;i<10;i++) cout≤<a[ cout < endl 程序运行结果为 0102030405060708090
例5.1 一维数组的引用 #include void main() { int i,a[10]; for(i=0; i<10; i++) { a[i] = i*10; } for(i=0; i<10; i++) { cout << a[i] << " "; } cout << endl; } 程序运行结果为: 0 10 20 30 40 50 60 70 80 90 第5章 数组与指针
第5章数组与指针 5.1数组 51.1一维数组(续 3.一维数组的初始化 在定义数组的同时为数组元素提供初始值,称为数组的初始 化。一维数组初始化的一般格式为 数据类型数组名[常量表达式]={值1,值2,…,值n}; 例如: (1)inta5={1,2,345};[1 2345 (2)inta]={12,345};「12345 不指定数组长度,根据初值个数自动确定长度 (3)inta[5]={1,2,3} 12300 初值个数小于数组长度,后面元素值自动赋为0 (4)inta5]={0};00000 初值只写出一个0,则将所有元素都初始化为0
5.1 数组 5.1.1 一维数组(续一) 3. 一维数组的初始化 在定义数组的同时为数组元素提供初始值,称为数组的初始 化。一维数组初始化的一般格式为: 数据类型 数组名[常量表达式] = {值1, 值2, …, 值n}; 例如: (1) int a[5] = {1,2,3,4,5}; (2) int a[ ] = {1,2,3,4,5}; 不指定数组长度,根据初值个数自动确定长度 (3) int a[5] = {1,2,3}; 初值个数小于数组长度,后面元素值自动赋为0 (4) int a[5] = {0}; 初值只写出一个0,则将所有元素都初始化为0 第5章 数组与指针 1 2 3 4 5 1 2 3 4 5 1 2 3 0 0 0 0 0 0 0
第5章数组与指针 例52用一维数组处理 Fibonac数列的前40项 include include void main( inti: intf40]={1,1 for(i=2;i<40;i++) fo= f[i-1]+ f[]; for(i=0;i<40;i++) out<≤setw(12)≤<f; if((+1)%5==0) cout < end: cout << end:
例5.2 用一维数组处理Fibonacci数列的前40项 #include #include void main() { int i; int f[40]={1,1}; for(i=2; i<40; i++) { f[i] = f[i-1] + f[i-2]; } for(i=0; i<40; i++) { cout << setw(12) << f[i]; if( (i+1)%5 == 0) cout << endl; } cout << endl; } 第5章 数组与指针
第5章数组与指针 例52(续) 程序运行结果 1 1 5 8 13 21 34 144 233 37" 618 987 1597 2584 4181 6765 1g946 17711 28657 46368 7525 121393 196418 317811 514229 83248 1346269 21783g9 3524578 5782887 9227465 149335224157817 39g88169 6324598612334155
例5.2(续) 程序运行结果: 第5章 数组与指针
第5章数组与指针 例53用冒泡法对10个整数按从小到大的顺 序排序 分析:冒泡法的基本思想是通过相邻两个数之间的比较和交换, 使较小的数逐渐从底部移向顶部,较大的数逐渐从顶部移向底 部。以5个整数排序为例,过程如图所示。 a[0]8555522222 a[1]5822254443 a[2]2284445334 234 a[3]44483335 a[4]33338888888 整个排序过程由两层循环完成,第一次外层循环通过相邻两个 数的比较交换,将待排序数据中的最大数8移到最后,此时最 后一个数8已经排好序。第二次外层循环再把剩下的4个数两俩 比较交换,将其中最大的数5移到a[3的位置,此时最后两个数 5,8已经排好序。一直到最后将所有数据都排好序
例5.3 用冒泡法对10个整数按从小到大的顺 序排序 分析:冒泡法的基本思想是通过相邻两个数之间的比较和交换, 使较小的数逐渐从底部移向顶部,较大的数逐渐从顶部移向底 部。以5个整数排序为例,过程如图所示。 整个排序过程由两层循环完成,第一次外层循环通过相邻两个 数的比较交换,将待排序数据中的最大数8移到最后,此时最 后一个数8已经排好序。第二次外层循环再把剩下的4个数两俩 比较交换,将其中最大的数5移到a[3]的位置,此时最后两个数 5,8已经排好序。一直到最后将所有数据都排好序。 第5章 数组与指针 a[0] a[1] a[2] a[3] a[4] 8 5 2 4 3 5 8 2 4 3 5 2 8 4 3 5 2 4 8 3 5 2 4 3 8 2 5 4 3 8 2 4 5 3 8 2 4 3 5 8 2 4 3 5 8 2 3 4 5 8 2 3 4 5 8
第5章数组与指针 例53(续一) include #include void maino int i,j, t, a[10; cout<<'请输入10个整数,用空格分隔 for(=0;i<10;i++) cIn for(=0;i<10-1;i++) forj=0;j<10-1-;j++)
例5.3(续一) #include #include void main() { int i,j,t,a[10]; cout > a[i]; for(i=0; i<10-1; i++) { for(j=0; j < 10-1-i; j++) { 第5章 数组与指针
第5章数组与指针 例53(续二) fa]>aj+1]) t=a]; a]=a[+1 aj +1]=t cout<<"排序后的数据 for(=0;i<10;i+) cout < setw(5)<<a[: 「程序运行结果为 请输入10个整数,用空格分隔:83918324217242513 排序后的数据:38913171824253242
例5.3(续二) if(a[j] > a[j+1]) { t = a[j]; a[j] = a[j+1]; a[j+1]=t; } } } cout << "排序后的数据:"; for(i=0; i<10; i++) cout << setw(5) << a[i]; } 第5章 数组与指针 程序运行结果为: 请输入10个整数,用空格分隔:8 3 9 18 32 42 17 24 25 13 排序后的数据:3 8 9 13 17 18 24 25 32 42