1 / 65

C++ 语言程序设计 数组

C++ 语言程序设计 数组. 学习目标. . 掌握定义一维数组和二维数组方法以及在定义时设定初值的方法; 掌握数组操作的基本技巧并能用来解决实际问题; 掌握数组的一个典型应用 —— 字符串处理,熟悉常用的字符串处理函数。. 第一讲主要内容. 数组的概念 一维数组的定义和初始化 一维数组的下标访问 一维数组应用举例 多维数组的概念 二维数组的定义和初始化 二维数组的下标访问 二维数组应用举例 字符数组与字符串 字符串的主要操作 字符串应用举例. . 数组的概念. 数组是可以通过下标访问的同类型数据元素的集合。

Download Presentation

C++ 语言程序设计 数组

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C++语言程序设计 数组

  2. 学习目标  • 掌握定义一维数组和二维数组方法以及在定义时设定初值的方法; • 掌握数组操作的基本技巧并能用来解决实际问题; • 掌握数组的一个典型应用——字符串处理,熟悉常用的字符串处理函数。

  3. 第一讲主要内容 数组的概念 一维数组的定义和初始化 一维数组的下标访问 一维数组应用举例 多维数组的概念 二维数组的定义和初始化 二维数组的下标访问 二维数组应用举例 字符数组与字符串 字符串的主要操作 字符串应用举例 

  4. 数组的概念 数组是可以通过下标访问的同类型数据元素的集合。 数组的每个元素是一个存储单元,元素的值就存放于其中,而且可以改变。 数组的数据类型也就是它的元素 (单元)的数据类型 

  5. 一维数组的定义 定义格式: 类型修饰符 数组名 [元素个数] eg:int a[6] 类型修饰符 数组名 ([元素个数])={初值表} 例子: eg:int a[ ]={7,0,9,6,3,5} eg:int a[6]={7,0,9} 可省略

  6. 一维数组的定义和初始化.. char s1[80]; int d[]={1,2,3,4,5,6};

  7. 一维数组的定义和初始化.. double num[5]={1.0,3.0,5.0}; long ldata[10]={0L};

  8. 一维数组的定义和初始化 #define FIRST 100 int D3[]= {FIRST,FIRST+1,FIRST+2};

  9. 一维数组的下标访问 格式:数组名[下标] 例如:k=num[4]; num[2]=6.7; cout<<name[3*k]; 注意防止下标越界

  10. 一维数组应用举例.. —— 例4.1:输入8个整数,然后按输入的相反顺序显示这些数据。

  11. 一维数组的输入/输出 一维数组的输入 int a[size]; cin>>a[0]>>a[1]>>a[2]>>…>>a[size-1]; int a[size]; for(int i=0;i<size;i++)cin>>a[i]; 一维数组的输出 int a[size]; for(int i=0;i< size;i++)cout<<a[i]<<‘‘;

  12. 反序显示 Data[0] Data[1] Data[2] Data[3] Data[3] Data[2] Data[1] Data[0]

  13. 一维数组应用举例.. 1:#include <iostream.h> 2:    3:void main() 4:{ 5:  int data[8]; 6:  cout<<endl<<”请输入8个整数:”; 7:  int i; 8:  for(i=0;i<8;i++) cin>>data[i]; 9:  cout<<endl; 10:  for(i=7;i>=0;i--) cout<<data[i]<<' '; 11:}

  14. 一维数组应用举例.. 1: //例‍4.1程序的改进 2: #include <iostream.h> 3:    4: #define SIZE 8 5:    6: void main() 7: { 8:  int data[SIZE]; 9:  cout<<endl<<”请输入”<<SIZE <<”个整数:”; 10:  int i; 11:  for(i=0;i<SIZE;i++) cin>>data[i]; 12:  cout<<endl; 13:  for(i=SIZE-1;i>=0;i--) cout<<data[i]<<' '; 14: }

  15. 一维数组应用举例.. —— 例4.2:输入10个整数到一个数组中,调整这10个数在数组中的排列位置,使得其中最小的一个数成为数组的首元素。

  16. 一维数组应用举例.. 1:#include <iostream.h> 2: 3:#define SIZE 10 4: 5:void main() 6:{ 7:int data[SIZE]; 8: cout<<endl<<”请输入”<<SIZE <<”个整数:”; 9: int m; 10: for(m=0;m<SIZE;m++) cin>>data[m]; 11: int j=0; 12: for(int i=1;i<SIZE;i++) 13: if(data[i]<data[j]) j=i; 5: void main() //演示 6:{ 7:  int data[SIZE]; 8:  cout<<endl<<”请输入”<<SIZE<<”个整数:”; 9:  int m; 10:  for(m=0;m<SIZE;m++) cin>>data[m]; 11:  int j=0; 12:  for(int i=1;i<SIZE;i++) 13:  if(data[i]<data[j]) j=i; 14:  if(j>0){ 15:  int k=data[0]; 16:  data[0]=data[j]; 17:  data[j]=k; 18:  } 19:  cout<<endl; 20:  for(m=0;m<SIZE;m++)cout<<data[m]<<' '; 21:}

  17. 一维数组应用举例.. —— 例4.3:重新安排整数序列 12 23 9 34 45 7 78 –33 59 3 的顺序,使其按升序排列。显示排序前后的这两个整数序列。

  18. 一维数组应用举例.. 1:  #include <iostream.h> 2:    3:  void main() 4:  { 5:  int data[] ={12,23,9,34,45,7,78,–33,59,3}; 6:  #define SIZE (sizeof(data)/sizeof(data[0])) 7:  8:  int m; 9:  //显示排序前的序列 10:  cout<<endl<<"排序前:"; 11:  for(m=0;m<SIZE;m++) cout<<data[m]<<' '; 12:

  19. 一维数组应用举例.. 13://实现挑选排序的双重循环 14:  for(m=0;m<SIZE-1;m++){ //演示 15:  int j=m; 16:  for(int i=m+1;i<SIZE;i++) 17:  if(data[i]<data[j]) j=i; 18:  if(j>m){ 19:  int k=data[m]; 20:  data[m]=data[j]; 21:  data[j]=k; 22:  } 23:  } 24:    25://显示排序后的序列 26:  cout<<endl<<"排序后:"; 27:  for(m=0;m<SIZE;m++) cout<<data[m]<<' '; 28:}

  20. 12 23 45 7 78 33 - 59 3 [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] 9 j i 34 • 14: for(m=0;m<SIZE-1;m++){ • 15:  int j=m; • 16:  for(int i=m+1;i<SIZE;i++) • 17:  if(data[i]<data[j]) j=i; • 18:  if(j>m){ • 19:  int k=data[m]; • 20:  data[m]=data[j]; • 21:  data[j]=k; • 22:  } • 23:  }

  21. 一维数组应用举例.. —— 例4.4:显示输出 100 以内的所有质数。 • 质数(素数)指除1和它本身以外 不能被别的数整除的整数; • 最小的质数是2,其余的质数都是 奇数; • 质数序列为:2 3 5 7 11 13 17……

  22. 一维数组应用举例.. 1:#include<iostream.h> 2:    3:#define SIZE 100 4:    5:void main() 6:{ 7:  bool p[SIZE]; 8:  cout<<SIZE<<"以内的质数有:2"; 9:  int i; 10:  for(i=3;i<SIZE;i+=2)p[i]=true; 11:  for(i=3;i<SIZE;i+=2) 12:  if(p[i]){ 13:  cout<<' '<<i; 5:void main() 6:{ 7:  bool p[SIZE]; 8:  cout<<SIZE<<"以内的质数有:2"; 9:  int i; 10:  for(i=3;i<SIZE;i+=2)p[i]=true; 11:  for(i=3;i<SIZE;i+=2) 12:  if(p[i]){ 13:  cout<<' '<<i; 15:  for(int j=i+i+i;j<SIZE; j+=i+i) p[j]=false; 16: } 17:}

  23. 多维数组的概念 依据元素的不同排列方式,数组可分为一维数组、二维数组、三维数组等等。 二维数组可以看成是这样的一维数组:它的所有元素都是规格相同的一维数组;三维数组可以看成是这样的一维数组:它的所有元素都是规格相同的二维数组;……

  24. 二维数组的定义和初始化.. • 格式: • 类型修饰符 数组名[行数][列数] • 类型修饰符 数组名[ ][列数]={初值表};

  25. 二维数组的定义和初始化.. float d[4][5];

  26. 二维数组的定义和初始化.. int num[][3] ={{1,3,5},{0},{2,4,6}};

  27. 二维数组的定义和初始化.. int a[5][3]={{1,3},{5,0},{2,4,6}};

  28. 二维数组的定义和初始化.. int b[5][3]={1,3,5,0,2,4,6}; int b[5][3]={{1,3,5},{0,2,4},{6}};

  29. 二维数组的下标访问 格式:数组名[行下标][列下标] 例如:k=num[4][2]; num[2][4]=6.7;

  30. 二维数组的下标访问 • 例:输入足够的整数放入一个 3 行 5 列的二维数组中。 • int d[3][5]; • for(int i=0;i<3;i++) • for(int j=0;j<5;j++) • cin >> d[i][j];

  31. 二维数组的输出 • int data[行数][列数],i,j; • for (i=0;i<行数;i++){ • cout<<endl; • for( j=0;j<列数;j++) • cout<<data[i][j]<<’’;}

  32. 二维数组应用举例.. —— 例4.5:输入一个5╳5的整数矩阵,然后将之转置并显示这个转置后的矩阵。

  33. 二维数组应用举例.. 方法:以主对角线为对称轴,交换所有对称点元素。

  34. 二维数组应用举例.. 1:  #include<iomanip.h> 2:    3:  #define SIZE 5 4:    5:  void main() 6:  { 7:  int data[SIZE][SIZE],i,j; 8:    9:  //输入矩阵 10:  for(i=0;i<SIZE;i++) 11:  for(j=0;j<SIZE;j++) cin>>data[i][j]; 12:    13:  //转置矩阵 14:  for(i=0;i<SIZE-1;i++) 13:  //转置矩阵 14:  for(i=0;i<SIZE-1;i++) 15:  for(j=i+1;j<SIZE;j++){ 16:  int d=data[i][j]; 17:  data[i][j]=data[j][i]; 18:  data[j][i]=d; 19:  } 20:    21:  //输出转置后的矩阵 22:  for(i=0;i<SIZE;i++){ 23:  cout<<endl; 24:  for(j=0;j<SIZE;j++) cout<<setw(8)<<data[i][j]; 25:  } 26:  }

  35. 二维数组应用举例.. for(i=0;i<SIZE-1;i++) for(j=i+1;j<SIZE;j++){ int d=data[i][j]; data[i][j]=data[j][i]; data[j][i]=d;}

  36. 二维数组应用举例.. 例4.7:计算如下所示两个矩阵的乘积:

  37. 二维数组应用举例.. 关于矩阵乘法的常识:  1.第一个矩阵的列数必须等于第二个矩阵的行数;一个 m 行 n 列矩阵乘以一个 n 行 p 列矩阵,其结果是一个m 行 p 列的矩阵。 2.若矩阵 A 乘以矩阵 B,则结果矩阵 C 中的每个元素须按下面的公式计算:

  38. 二维数组应用举例.. c2,4=12*0+(-1)*10+27*9+8*(-37)=0–10+243-296=-63

  39. 15://按先行后列的顺序扫描C的所有元素 16:  for(i=0;i<3;i++) 17:  for(j=0;j<5;j++) 18://计算ci,j的值(A的第i行和B的第j列的内积) 19: for(int k=0;k<4;k++) C[i][j]+=A[i][k]*B[k][j]; 20:    21://下面的二重循环输出的结果——矩阵C的内容 22:  for(int i=0;i<3;i++){ 23:  cout<<endl; 24:  for(int j=0;j<5;j++) cout<<setw(5)<<C[i][j]; 25:  } 26:} 二维数组应用举例.. 1:#include <iomanip.h> 2:    3:void main() 4:{ 5:  int A[3][4]={{2, 3,-5, 0}, 6 {12,-1,27, 8}, 7: {91,22,-32,1}}; 8:  int B[4][5]={{25,13,65,0,5 }, 9: {-2, 0,18,10,45}, 10: {53,33, 3, 9, 0}, 11: { 7,61,26,-37,-1}}; 12:  int C[3][5]={{0}}; 13:  int i,j; 14:   

  40. 二维数组应用举例.. 15://按先行后列的顺序扫描C的所有元素 16:  for(i=0;i<3;i++) 17:  for(j=0;j<5;j++) 18://计算ci,j的值(A的第i行和B的第j列的内积) 19: for(int k=0;k<4;k++) C[i][j]+=A[i][k]*B[k][j];

  41. 字符数组与字符串.. 字符串常量以双引号括起来的字符序列表示,结束符字符串是以'\0'结尾的字符序列,'\0'称为字符串的结束符。 结束符并不显式地表示出来,如"C++程序设计""First line\nSecond line" 

  42. 字符数组与字符串.. 字符串中字符的个数称为字符串的长度(西文字符,不包括结束符);如 "ABCD" 的长度为4"C++程序设计" 的长度为11"First line\nSecond line" 的长度为22 字符串实际占用的空间字节数比它的长度值多1。

  43. 字符数组与字符串.. 可以用字符数组存储字符串,例如要将字符串 "A string" 存储在字符数组 S 中:char s[]={'A',' ','s','t', 'r','i','n','g'};//错误char s[]={'A',' ','s','t', 'r','i','n','g','\0'}; //正确

  44. 字符数组与字符串.. 对于存储字符串的数组的初始化,C++提供了一种更简便的不易出错方法:char s[]="A string"; • 如果这样的字符数组在程序中有可能改而存放别的字符串,应充分估计所需的最大空间,例如:char s[80]="A string";

  45. 字符数组与字符串.. 要为字符数组赋值,使它改而存放另一个字符串,可以用赋值语句:S="XYZ"; //错误S[]="XYZ"; //错误S[0]='X'; //以下正确,S[1]='Y'; S[2]='Z'; S[3]='\0'; 更好的赋值方法是使用strcpy函数

  46. 字符数组与字符串.. 用于存放字符串的一维字符数组可以看成是字符串变量,从而可将存放于其中的字符串作为一个整体来处理;此种情况下数组名可以像简单变量那样单独使用(即不使用下标)。例如:char name[]="Smith"; cout<<"I am "<<name <<'.';将显示输出:I am Smith.

  47. 字符数组与字符串.. 同理,二维字符数组就可视作存放字符串的一维字符串数组。例如:char WD[][4]={"Sun","Mon","Tue","Wed", "Thu","Fri","Sat"};cout<<endl<<WD[4]; 将显示输出:Thu

  48. 字符串的主要操作.. 求字符串长度调用格式:strlen(字符串)功能:计算并返回 字符串的长度例如:char h[50]="How long?";cout<<strlen(h)<<' ' <<strlen("How long?");将输出:9 9

  49. 字符串的主要操作.. 字符串复制调用格式:strcpy(字符串变量, 字符串)功能:将 字符串 复制到 字符串变量 中,该变量中原有内容被覆盖。函数以 字符串变量 作为它的返回值。

  50. 字符串的主要操作.. 例如:char s[]=”12345”;cout<<s<<’ ’;cout<<strcpy(s,”ABCD”)<<’ ’;cout<<s;的输出是:12345 ABCD ABCD

More Related