国 上岸充通大 006 C++程序设计与实践 第4讲 数组与结构 上海交通大学 机械与动力工程学院 2014.9-2015.1 上充通大¥ 1896 1920 1.数组概念 2.一维数组 3.二维数组 4.字符数组/字符串 5.结构 1日 1
1 C++程序设计与实践 上海交通大学 机械与动力工程学院 2014.9-2015.1 第4讲 数组与结构 1. 数组概念 2. 一维数组 3. 二维数组 4. 字符数组/字符串 5. 结构
圈上文大华 数组概念 为什么要引入数组? 例1.考虑要处理2012年上海的气温数据,如计算平均气温、查 找最高气温与最低气温,如何用程序实现? +高是r口+品问 0000000 G 000 292g224w装深深202 floatT11:/2012年1月1日气温 float T[365];∥用数组描述天气 float T12:2012年1月1日气温 float T1231;/2012年12月31日气温 数组是处理大量同类数据 的有效工具。 3/50 圈上涤夫大学 数组概念 为什么要引入数组? 例2.根据座位在影院中不同位置,确定票价? float Price[5][8]; 数组可以方便地用作有些 现实问题的模型。 4/50 2
2 3/50 为什么要引入数组? 例1. 考虑要处理2012年上海的气温数据,如计算平均气温、查 找最高气温与最低气温,如何用程序实现? float T1_1;//2012年1月1日气温 float T1_2;//2012年1月1日气温 …… float T12_31;//2012年12月31日气温 float T[365];//用数组描述天气 数组是处理大量同类数据 的有效工具。 数组概念 4/50 为什么要引入数组? 例2. 根据座位在影院中不同位置,确定票价? float Price[5][8]; 数组可以方便地用作有些 现实问题的模型。 数组概念
圈上海文通大华 数组概念 什么是数组? 数组是具有一定顺序关系的若干相同类型变量 的集合体,组成数组的变量称为该数组的元素。 例如: f1oatf[50]:/浮点数数组,50个元素 char name[20]:/∥字符型数组,19+1个元素 intn[20][100;/整型数组,2000个元素 5/50 上泽克大¥ 1896 2005 1. 数组概念 2.一维数组 3.二维数组 4.字符数组/字符串 5.结构 SH 1日 3
3 5/50 数组概念 什么是数组? 数组是具有一定顺序关系的若干相同类型变量 的集合体,组成数组的变量称为该数组的元素。 float f[50]; //浮点数数组,50个元素 char name[20]; //字符型数组,19+1个元素 int n[20][100];//整型数组,2000个元素 …… 例如: 1. 数组概念 2. 一维数组 3. 二维数组 4. 字符数组/字符串 5. 结构
圆上泽文大学 一维数组 维数组的声明与引用 一维数组的声明 类型说明符 数组名[常量表达式]; 例如: int a[10]; 表示a为整型数组,有10个元素:a[0]..a[9] >引用(赋值) 数组名[下标表达式] >必须先声明,后使用。 >只能逐个引用数组元素,而不能一次引用整个数组 例如:a0]=a5]+a[7a2*3;a81=16:☑ a[10]=16:a=12;☒ 7/150 圈上泽夫道大学 维数组 一维数组的存储顺序 数组元素在内存中顺次存放,它们的地址是连续的。 例如:具有10个元素的数组,在内存中的存放次序如下: a a[o]a[1]a2]a[3]a4]a[5]a[6]a7]a[8]a[9] 数组名字是数组直元素的内存地址。 数组名是一个常量,不能被赋值。 8/50
4 7/50 一维数组 一维数组的声明与引用 一维数组的声明 类型说明符 数组名[ 常量表达式 ]; 例如: int a[10]; 表示 a 为整型数组,有10个元素:a[0]...a[9] 引用(赋值) 数组名[下标表达式 ] 必须先声明,后使用。 只能逐个引用数组元素,而不能一次引用整个数组 例如:a[0]=a[5]+a[7]-a[2*3];a[8] = 16; a[10] = 16; a = 12; 8/50 一维数组 一维数组的存储顺序 a a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 数组名字是数组首元素的内存地址。 数组名是一个常量,不能被赋值。 数组元素在内存中顺次存放,它们的地址是连续的。 例如:具有10个元素的数组 a,在内存中的存放次序如下:
圈上泽文通大华 一维数组 一维数组的初始化 可以声明数组时使数组得到初值: >在声明数组时对数组元素赋以初值。 例如:inta10={0,1,2,3,4,5,6,7,8,9; >可以只给一部分元素赋初值。 例如:inta10={0,1,2,3,4}; >在对全部数组元素赋初值时,可以不指定数组长度。 例如:inta={1,2,3,4,5; 9/50 圆上泽夫通大学 维数组 例1一维数组的声明与引用 #include for(i=0:i<l0:i++) using namespace std; void main() cout<<"A["<<i {intA[10],B[10l <"]="<A[; int i; cout<<"B["<<i for(i=0;i<l0;i++) <"]=" <<B[i]<<endl; A[i]=i*2-1; B[10-i1]=A[; 10/50 5
5 9/50 一维数组 一维数组的初始化 可以声明数组时使数组得到初值: 在声明数组时对数组元素赋以初值。 例如: int a[10]={0,1,2,3,4,5,6,7,8,9}; 可以只给一部分元素赋初值。 例如: int a[10]={0,1,2,3,4}; 在对全部数组元素赋初值时,可以不指定数组长度。 例如: int a[]={1,2,3,4,5}; 10/50 一维数组 例1 一维数组的声明与引用 #include using namespace std; void main() { int A[10],B[10]; int i; for(i=0;i<10;i++) { A[i]=i*2-1; B[10-i-1]=A[i]; } for(i=0;i<10;i++) { cout<<"A["<<i <<"]="<<A[i]; cout<<" B["<<i <<"]=" <<B[i]<<endl; } }
圈上序大峰 一维数组 例2一维数组的声明赋初值与引用 #include for(i=0;i<5;i++) using namespace std: void main() cout<A门<x'<B[; cout<<‘=‘<<C[i]<<endl: f1oatA[5={2.5,2.0,1.2,4.5,3.0}; float B[]={3.0,2.4,6.5,1.2,5.0; float C[5]; int i; for(i=0;i<5;i++) { C[问=A*B[ 11/50 上泽克大¥ 1896 1920 2005 1. 数组概念 2.一维数组 3.二维数组 4.字符数组/字符串 5.结构 6
6 11/50 一维数组 例2 一维数组的声明赋初值与引用 #include using namespace std; void main() { float A[5] = {2.5, 2.0, 1.2, 4.5, 3.0}; float B[ ] = {3.0, 2.4, 6.5, 1.2, 5.0}; float C[5]; int i; for(i=0;i<5;i++) { C[i] = A[i]*B[i]; } for(i=0;i<5;i++) { cout<<A[i]<<‘ x ’<<B[i]; cout<<‘=‘ <<C[i]<<endl; } } 1. 数组概念 2. 一维数组 3. 二维数组 4. 字符数组/字符串 5. 结构
圈上泽文通大华 二维数组 二维数组的声明及引用 >二维数组的声明 类型说明符数组名[常量表达式[常量表达式] 例如:float a[3[4: a[0] -aoo a01 a02 a03 可以理解为: a a[1 -a10a11a12a13 a[2] -a20a21a22a23 >存储顺序 按行存放,上例中数组a的存储顺序为: a0a01ag2a03a10a11a12a13a20a21a2a23 >引用(赋值) 例如:a21o1=0.5;b1[21=a2I3/2:☑ af01=2.0:a314=0.2;a21[4=0.5:☒ 13/50 圆上泽充通大学 二维数组 二维数组的初始化 >将所有数据写在一个(}内,按顺序赋值 例如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12: > 分行给二维数组赋初值 例如:inta3][4]={1,2,3,4,{5,6,7,83,{9,10,1L,12}5 >可以对部分元素赋初值 例如:inta3][4]={1},{0,6},{0,0,11}: >在对全部数组元素赋初值时,可以不指定数组长度 例如:inta0[4={1,2,3,4,5,6,7,8,9,10,1l,12 例如:inta0={1,2,3,4},{5,6,7,8},{9,10,11,12}5 14/50 7
7 13/50 二维数组 二维数组的声明及引用 二维数组的声明 类型说明符 数组名[常量表达式][常量表达式] 例如:float a[3][4]; 可以理解为: a[0]——a00 a01 a02 a03 a[1]——a10 a11 a12 a13 a[2]——a20 a21 a22 a23 a 存储顺序 按行存放,上例中数组a的存储顺序为: a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23 引用(赋值) 例如:a[2][0] = 0.5; b[1][2]=a[2][3]/2; a[0] = 2.0; a[3][4] = 0.2; a[2][4] = 0.5; 14/50 二维数组 二维数组的初始化 将所有数据写在一个{ }内,按顺序赋值 例如:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 分行给二维数组赋初值 例如: int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 可以对部分元素赋初值 例如: int a[3][4]={{1},{0,6},{0,0,11}}; 在对全部数组元素赋初值时,可以不指定数组长度 例如:int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 例如: int a[][]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
圈上序大峰 数组应用 数组作为函数参数 >数组元素作实参,与单个变量一样。 > 数组名作参数,形、实参数都应是数组名,类型 要一样,传送的是数组首地址。对形参数组的改 变会直接影响到实参数组。 函数实现返回多个值 15/50 圆上泽夫通大学 数组应用 例2使用数组名作为函数参数 问题: 1.主函数中初始化一个矩阵并将每个元素都输出; 2.调用子函数,分别计算每一行的元素之和,将和直 接存放在每行的第一个元素中: 3.返回主函数之后输出各行元素的和。 16/50 8
8 15/50 数组应用 数组作为函数参数 数组元素作实参,与单个变量一样。 数组名作参数,形、实参数都应是数组名,类型 要一样,传送的是数组首地址。对形参数组的改 变会直接影响到实参数组。 函数实现返回多个值 16/50 数组应用 例2 使用数组名作为函数参数 问题: 1. 主函数中初始化一个矩阵并将每个元素都输出; 2. 调用子函数,分别计算每一行的元素之和,将和直 接存放在每行的第一个元素中; 3. 返回主函数之后输出各行元素的和
圈上泽支大学 数组应用 例2使用数组名作为函数参数 void main(void) #include A using namespace std; int Table[34]=((1,2,3,4), void RowSum(int A[l[4],int nrow) {2,3,4,5,3,45,6 int sum; for (inti=0;i<3;i++) for (inti=0;i<nrow;i++) for (intj=0;j<4;j++) sum=0; cout <Tableli]lj]<<""; for(intj=0;j<4;j++) cout <endl; sum +=A[i]j]; } cout <"Sum of row "<<i RowSum(Table,3); <<is "<sum <endl; for (inti=0;i<3;i+) A[il[0]=sum; cout <Table[i][0] 17/50 国上泽发1大学 数组应用 例2使用数组名作为函数参数 运行结果: 1234 2345 3456 Sum of row 0 is 10 Sum ofrow I is 14 Sum of row 2 is 18 101418 18/50 9
9 17/50 数组应用 例2 使用数组名作为函数参数 void main(void) { int Table[3][4] = {{1,2,3,4}, {2,3,4,5},{3,4,5,6}}; for (int i = 0; i using namespace std; void RowSum(int A[][4], int nrow) { int sum; for (int i = 0; i < nrow; i++) { sum = 0; for(int j = 0; j < 4; j++) sum += A[i][j]; cout << "Sum of row " << i << " is " << sum << endl; A[i][0]=sum; } } 18/50 数组应用 例2 使用数组名作为函数参数 运行结果: 1 2 3 4 2 3 4 5 3 4 5 6 Sum of row 0 is 10 Sum of row 1 is 14 Sum of row 2 is 18 10 14 18
圈上泽文通大华 1.数组概念 2. 一维数组 3.二维数组 4.字符数组/字符串 5.结构 圈上泽夫大学 字符数组 字符数组的声明和引用 字符串 字符串常量,例如:"china" 字符串以0'为结束标志 用字符数组来存放字符串 字符数组的声明与初始化 例char str[8]={112,114,111,103,114,97,109,0; char str[8]={'p,'r,'o','g,t,'a,'m',0'}; char str[8]="program"; char str[]="program"; 20/50 10
10 1. 数组概念 2. 一维数组 3. 二维数组 4. 字符数组/字符串 5. 结构 20/50 字符数组 字符数组的声明和引用 字符串 字符串常量,例如:"china" 字符串以'\0'为结束标志 用字符数组来存放字符串 字符数组的声明与初始化 例 char str[8]={112,114,111,103,114,97,109,0}; char str[8]={'p','r','o','g','r','a','m','\0'}; char str[8]="program"; char str[]="program";