C++程序设计教程第4章-数组与结构体.ppt
《C++程序设计教程第4章-数组与结构体.ppt》由会员分享,可在线阅读,更多相关《C++程序设计教程第4章-数组与结构体.ppt(48页珍藏版)》请在三一办公上搜索。
1、,第4章 数组和结构体,数组是有序数据的集合。数组中的每一个元素都属于同一个数据类型,用一个统一的数组名和下标来唯一地确定数组中的元素。4.1.1 数组的定义 格式:类型说明符 数组名常量表达式 例如:int a10;int z34;float b20;数组元素为:a0、a1、a2、a9 b0、b1、b2、b19 ai与某个简单变量是一样的。C+中没有动态数组。例如:int n=10;int an;/是错误的,4.1 数组,4.1.2 数组元素的引用 数组在内存中是连续存放的。对于数组也必须先定义后使用。并且C+规定只能逐个引用数组元素而不能一次引用整个数组。一维数组中数组元素的引用方式为:数
2、组名下标下标可以是整型常量或整型表达式。例如:a0、a2*3、ai+5。二维数组的元素的引用方式为:数组名下标下标下标可以是整型表达式。如a23、a3-12*2-1。但不要写成a2,3。,注意事项:1、同一数组中的元素必须具有相同的数据类型,而且这组数据在内存中将占据一段连续的存储单元,2、数组名命名规则和变量名相同,遵循标识符命名规则。,3、常量表达式表示元素的个数,即数组长度。,4、常量表达式中可以包括常量和符号常量,不能包含变量。(int an;-不对)5、数组第一个元素的下标为0。,例4-1 从键盘输入10个整数,将它们逆序输出。#include int main()int i,a10
3、;for(i=0;iai;for(i=9;i=0;i-)coutai;coutendl;return 0;,例4-2 用数组构造Fibnacci序列的前20个数。#include int main()int i,fib20;fib0=1;fib1=1;for(i=2;i=19;i+)fibi=fibi-1+fibi-2;for(i=0;i=19;i+)coutfibi“;coutendl;return 0;,关键,4.1.3 数组的初始化 在定义数组时可以对其进行初始化。1一维数组的初始化(1)全部赋初值 int a10=0,1,2,3,4,5,6,7,8,9;(2)部分赋初值 int a10
4、=0,1,2,3,4;/后5个元素值为0(3)赋初值时省略数组大小 int a5=0,1,2,3,4;int a=0,1,2,3,4;/两个语句等价 初始化给出的元素个数不能超过数组的长度。例如:int a5=0,1,2,3,4,5;就是错误的。,2二维数组的初始化(1)全部赋初值 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;(2)部分赋初值 int a34=1,2,3;int a34=1,0,2,0,0,3;,(3)赋初值省略第一维的大小 int a 4=1,2,3,4,5,6,7,8,9,10,
5、11,12;等价于:int a34=1,2,3,4,5,6,7,8,9,10,11,12;在定义时也可以只对部分元素赋初值而省略第一维的大小,但应分行赋初值。如 int a 4=0,1,1,0,1;这样的写法,能通知编译系统,数组共有3行。数组各元素为:,例4-3 将一个3*4矩阵转置后输出。例如矩阵 转置后成为矩阵#include int main()int i,j,b43;int a34=1,2,3,4,1,2,3,4,1,2,3,4;coutBefore convertingendl;,for(i=0;i3;i+)for(j=0;j4;j+)cout.width(3);coutaij;c
6、outendl;for(i=0;i3;i+)for(j=0;j4;j+)bji=aij;coutAfter convertingendl;for(i=0;i4;i+)for(j=0;j3;j+)cout.width(3);coutbij;coutendl;return 0;,cout.width(3);/设置宽度为3,不足用空格填充,是左边补空格。,4.1.4 数组的应用1.数组的简单应用例4-4 编写程序找出1000以内所有的完数。所谓完数就是该数等于它的所有因子之和。如6=1+2+3。#include int main()int n,m,i,j,a20;for(n=2;n=1000;n+)
7、m=n;j=0;for(i=1;in;i+)if(n%i=0)aj=i;j=j+1;m=m-i;if(m=0)coutn是一个完数,它的因子是;for(i=0;ij;i+)coutai,;coutendl;return 0;,/aj中存的是因数,例4-5 有3*4的整数数组,编写程序,求出最大的那个元素的值以及其所在的行列号。#include int main()int a34=1,2,3,4,5,6,7,8,9,0,10,11;int i,j,row,col,max;max=a00;row=0;col=0;for(i=0;imax)max=aij;row=i;col=j;coutMax=ma
8、x;coutRow=row;coutCol=colendl;return 0;,修改版:#include int main()/int a34=1,2,3,4,5,6,7,8,9,0,10,11;int a34;int i,j,row,col,max;for(i=0;iaij;max=a00;row=0;col=0;for(i=0;imax)max=aij;row=i;col=j;coutMax=max;coutRow=row;coutCol=colendl;return 0;,输入:1 2 3 4 5 6 7 8 9 0 10 11输出:Max=11 Row=2 Col=3,例4-6 Jos
9、ephus 问题 分析:Josephus 问题是说,一群小孩围成一圈,任意假定一个数m,从第1个小孩起,顺时针方向数,每数到第m个小孩时,该小孩便离开。小孩不断离开,圈子不断缩小。最后,剩下的一个小孩便是胜利者。编写程序,顺序打印离开的小孩及最后的胜利者。,#include#define NUM 10/定义小孩个数int main()int m;/每次数m个小孩,便让小孩离开 int aNUM;/小孩数组 int i,j,k,s;/数组下标变量i,数数记数变量j,/离开小孩记数变量k,游戏标志变量s for(i=0;im;/输入数小孩的间隔数到m k=1;/游戏开始 i=-1;s=1;/设数组
10、下标初值(下一个值0即第一个开数小孩 的下标)和标志s初值,while(s)/剩下的小孩多于一个 j=0;/设置开始记数初值 while(jm)/数m个小孩 i=(i+1)%NUM;/对下标加1求模 if(ai!=0)j+;/如果该元素的小孩在圈中,则数数有效 if(k=NUM)/表示圈中只有一个小孩了,因为k初值是1 s=0;else coutai,;/输出本次离开的小孩的编号 ai=0;/标识小孩已离开 k+;/准备处理圈中下一个小孩 coutendl;cout第 ai 号小孩获胜!;return 0;,理解,2 利用数组进行排序例4-7 用直接选择排序方法将输入的n个整数按从小到大的顺序
11、排列输出。思路:直接选择排序是一种比较简单的排序方法,它的排序过程为:先从待排序的所有记录中选出关键字最小的记录,把它与原始序列中的第一个记录交换位置;然后再从去掉了关键字最小的记录的剩余记录中选出关键字最小的记录,把它与原始序列中第二个记录交换位置;依次类推,直至所有的记录成为有序序列。,#include int main()int a10,i,j,k,temp,n=10;for(i=0;iai;for(i=0;in-1;i+)k=i;for(j=i+1;jn;j+)if(ajak)k=j;if(k!=i)temp=ai;ai=ak;ak=temp;,coutAfter sortingend
12、l;for(i=0;in;i+)cout ai;cout endl;return 0;,找剩余的数中最小的那个数,并把其下标存入k中,例4-8 用冒泡排序方法将输入的n个整数按从小到大的顺序排列输出。思路:冒泡排序的排序过程为:先将第1个记录和第2个记录进行比较,若为逆序,则交换之;接着比较第2个记录和第3个记录;依次类推,直至第n-1个记录和第n个记录进行比较、交换为止,我们称这样的过程为一趟冒泡排序。如此经过一趟排序,关键字最大的记录被安置到最后一个记录的位置上。然后,对前n-1个记录进行同样的操作,使具有次大关键字的记录被安置到第n-1个记录的位置上。重复以上过程,直到没有记录需要交换为
13、止。,/用i表示比较的趟次,则i:19/用j表示比较的两个对象的前一个的下标,/即aj与aj+1比较j:0 9-i#include int main()int a10,i,j,temp,n=10;for(i=0;iai;for(i=1;iaj+1)temp=aj;aj=aj+1;aj+1=temp;,coutAfter sorting“endl;for(i=0;in;i+)cout ai;cout endl;return 0;,3 字符串应用 在C+中,字符串常量是用一对双引号括起来的字符序列。它在内存中的存放形式是:按串中字符的排列次序顺序存放,每个字符占一个字节,并在末尾添加0作为结束标记
14、。在C+的基本数据类型变量中没有字符串变量。将字符串变量作为字符数组来处理。字符数组中的一个元素存放一个字符。可以用字符串常量来使字符数组初始化。例如 char c=“I am a boy”;或 char c“I am a boy”;数组c的长度不是10,而是11。因此,上面的初始化与下面的初始化等价。char c=I,a,m,,a,b,o,y,0;而不与下面的等价:char c=I,a,m,a,b,o,y;,对字符串进行处理,可以使用系统的字符串处理函数gets、puts、strcat、strcpy、strcmp、strlen等。使用这些函数之前,首先要将头文件stdio.h(包含函数get
15、s、puts)、string.h包括到源程序中。(1)gets gets的作用是从终端输入一个字符串到字符数组,并且得到一个函数值。该函数值是字符数组的起始地址。函数原型为:char*gets(char*buffer);用cin也可以输入字符串,但输入的字符串中不能有空格。,(2)puts puts的作用是将一个字符串(以0结束的字符序列)输出到终端。函数原型为:int puts(const char*string);(3)strcatstrcat是STRing CATenate(字符串连接)的缩写。函数原型为:char*strcat(char*strDestination,const cha
16、r*strSource);其作用是连接两个字符数组中的字符串,把字符串strSource接到字符串strDestination的后面,结果放在字符数组strDestination中,函数的返回值为字符数组strDestination 的地址。,(4)strlen strlen是STRing LENgth(字符串长度)的缩写,它是测试字符串长度的函数。函数的返回值为字符串中的实际长度,不包括0在内。函数原型为:int strlen(const char*string);(5)strcpy strcpy是STRing CoPY(字符串复制)的缩写,它是“字符串复制函数”。函数原型为:char*st
17、rcpy(char*strDestination,const char*strSource);其作用是将字符串strSource复制到字符数组strDestination中去,函数的返回值为字符数组strDestination 的地址。,(6)strcmp strcmp是STRing CoMPare(字符串比较)的缩写。函数原型为:int strcmp(const char*string1,const char*string2);作用是比较字符串string1和字符串string2。字符串比较的规则是对两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到0为止。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 程序设计 教程 数组 结构
链接地址:https://www.31ppt.com/p-6153985.html