第4章 数组和字符串Word文档下载推荐.docx
- 文档编号:17380798
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:18
- 大小:24.83KB
第4章 数组和字符串Word文档下载推荐.docx
《第4章 数组和字符串Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第4章 数组和字符串Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。
•(6)charf[10]={‘C’,‘H’,‘I’,‘N’,‘A’};
//字符数组,前5个为C、H、I、N、A,第六个元素为‘\0’
•(7)boolg[2*n];
//定义了一个布尔型数组,其中n为常量;
•(8)floata[5],b[10];
//定义了两个单精度数组;
•(9)inta[3][3];
//定义了一个整型的二维数组,共有9个数组元素
•(10)doubleb[m][n];
//定义一个双精度型二维数组,m、n为常量;
•(11)intp[];
//是一个错误的数组定义,因为无法确定数组的大小。
•(12)inta[][5];
//定义了一个错误的二维数组,因为第一维下标的取值无法确定;
•(13)intc[2][4]={{1,3,5,7},{2,4,6,8}};
//定义了一个二维整型数组,其二维数组形式为:
4.3数组元素的输入与输出
•
(1)简单的输入、输出
•数组元素如果是已知的,可以在定义时直接赋值。
如:
inta[5]={1,2,3,4,5};
•数组中各元素定义完成后,就可用cout语句直接输出,如for(i=0;
i<
5;
i++)cout<
a[i]<
¡
®
¯
;
•//输出结果为12345。
•也可以输出数组中的一个或几个元素,如:
•cout<
a[2]<
'
'
a[a[2]];
//输出结果为3和4
•
(2)利用循环语句输入、输出
•如果数组中的元素值是未知的,可以先定义数组,然后利用cin和cout语句进行输入和输出,如:
•inta[6];
•for(inti=0;
6;
i++)cin>
>
a[i];
•for(inti=5;
i>
=0;
i--)cout<
•注意:
在输出二维数组元素时,一定要在两个循环语句之间加大括号。
•(3)程序举例
•【例4.1】从键盘上输入一组数据,按相反的顺序打印
•#include<
iostream>
•usingnamespacestd;
•voidmain()
•{inti,a[10];
•for(i=0;
10;
i++)
•cin>
•for(i=9;
i--)
•cout<
a[i]<
endl;
•}
•【例4.3】输出数列中的前10项:
1,1,2,3,5,8,13,¡
¡
.
•a[0]=1;
a[1]=1;
•for(i=2;
•a[i]=a[i-1]+a[i-2];
}
4.4.1统计
•在现实生活中程序员还经常利用数组中的数据进行统计、排序、查找、计算等。
下面就通过题例来说明这些运算。
•【例4.5】在一次选举学生会主席的大会上,有5名候选人,分别用1,2,3,4,5代表每位候选人的号码,统计出每人的得票数。
用-1作为终止输入的标志。
•程序如下:
•{inti,a[6]={0};
"
请输入每张票上所投候选人的代号"
•cin>
i;
•while(i!
=-1){
•if(i>
=1&
&
i<
=5)a[i]++;
•cin>
•for(i=1;
=5;
:
•在程序中用a数组作为计数器统计每位侯选人的得票数;
由于题目中未说明参选人数,因此使用了while循环;
用if语句保证只统计1—5的有效数字。
•假设从键盘输入的数字为:
2341532211111-1
•结果为:
•1:
6
•2:
4
•3:
2
•4:
1
•5:
4.4.2排序
•【例4.7】已知有10个整数,采用选择法将这10个数按从小到大的顺序打印输出。
•1选择法排序:
选择法排序的基本思想是:
对待排序的序列进行若干遍处理,通过n-i次关键字的比较,从n-i+1个数据中选出最小的数据和第i(1≤i≤n)个数据进行交换,这样一遍处理就能确定一个数的位置,对n个数如果经过n-1次处理,则这n个数就排序成功。
•程序如下
#include<
•{inta[10]={33,61,43,74,86,92,11,35,64,25};
•inti,j,k;
•for(i=1;
i++)//外循环控制次数
•{k=i-1;
//外循环每一遍时最小值的位置
•for(j=i;
j<
j++)//外循环每一遍时需要比较数据的次数
•if(a[j]<
a[k])k=j;
//将最小值的位置号记录下来
4.4.2排序
•intx=a[i-1];
a[i-1]=a[k];
a[k]=x;
//将当前数与最小值互换
•}
i++)cout<
"
//输出排序后的数据
•该程序的运行结果为:
•11253335436164748692
•选择法排序算法特点:
每一遍选择出一个最值确定其在结果序列中的位置,确定元素的位置是从前往后,而每一遍最多进行一次交换,其余元素的相对位置不变。
可进行降序和升序排列。
•2.冒泡法排序:
•冒泡法排序的基本思想是:
如果有n个数,则要进行n-1遍的比较,在第一遍的比较中要进行n-1次相邻元素的两两比较,在第j遍的比较中要进行n-j次的两两比较,比较的顺序从前往后,经过一遍的比较后,将最值沉底(换到最后一个元素的位置),最大值沉底为升序,最小值沉底为降序。
程序如下
•【例4.8】有一组整数,采用冒泡法将这10个数按从小到大的顺序打印输出。
•constintn=10;
•{inta[n];
•inti,j,x;
n-1;
•for(j=0;
n-i;
j++)
•if(a[j]>
a[j+1]){
•x=a[j];
a[j]=a[j+1];
a[j+1]=x;
}
n;
•从键盘输入如下数据:
33614374869211356425
•运行结果为:
11253335436164748692
•冒泡法排序算法特点:
相邻元素两两比较,每遍将最值沉底,即可确定一个数所在的位置,确定元素所在位置的顺序是从后向前,其余元素可作相应位置调整,可进行升序和降序的排列。
•3.插入法排序
•插值法排序的基本思想是:
将序列分为有序序列和无序序列,依次从无序序列中取出元素值插入到有序序列的合适位置。
初始时有序序列中只有一个数,其余n-1个数组成无序序列,则n个数需进行n-1次插入。
从无序序列中取出的每一个数寻找在有序序列中插入位置时可以从有序序列的最后一个数往前找,在找到插入点之后,可以将插入点位置后的所有元素向后移动一个位置,为插入元素准备空间。
程序如下:
•【例4.9】用插入法对上例中的数据进行排序
i++)//外循环控制遍历次数,n个数从第2个数开始到最后进行n-1次插入
•{x=a[i];
//将待插入的数暂存于变量x中
•for(j=i-1;
j>
=0&
x<
a[j];
j--)//在有序序列中寻找插入位置
•a[j+1]=a[j];
//若找到插入位置,则元素后移一个位置
•a[j+1]=x;
//找到插入位置,完成插入
•插入法排序算法特点:
该算法的特点是在寻找插入位置的同时完成元素后移,因为元素的移动必须从后向前,所以可将两个操作结合在一起,提高算法效率,该算法可进行升序和降序的排列。
4.4.3查找
•1.顺序查找
•顺序查找也称为线性查找,对给定的关键码值key,从表(数组)的一端开始,依次检查表中每个元素的值是否与给定的关键码值相等,若检查到最后一个元素时仍没有与关键码值相等的元素,则表明未找到。
•【例4.10】在一组整数42,55,73,28,48,66,30,65,94,72中,查找数据为65的数据,并给出查找结果。
•{constintn=10;
•inti,a[n]={42,55,73,28,48,66,30,65,94,72};
•intx=65;
•for(i=0;
i++)
•if(x==a[i]){cout<
查找"
x<
成功,"
下标为:
break;
•if(i>
=n)cout<
失败"
•运行结果:
•查找65成功,下标为:
7
•如果将x值改为88,则运行结果为:
•查找88失败
•2对分查找
•对分查找也称为二分查找,它比顺序查找速度要快,特别是当数据量很大时效果更加明显。
首先在有序表中取表的中间位置上的元素a[mid]=(n-1)/2与待查元素key进行比较,如果key=a[mid],则表明找到该元素;
如果key<
a[mid],则应在该表的前一半a[0]--a[mid-1]中进行查找;
如果key>
a[mid],则在该表的后一半a[mid+1]--a[n-1]中查找;
如此反复进行,直到找到该元素。
如果循环结束后key!
=a[mid]则表明查找失败。
•【例4.11】假定一维数组中的n个元素是一个从小到大顺序排列的有序表,编一程序从a中用二分法查法,找出其值等于给定值为key的元素。
•{inta[n]={15,26,37,45,48,52,60,66,73,90};
•intkey=80;
•intlow=0,high=n-1;
intmid;
•while(low<
=high)
•{mid=(low+high)/2;
•if(key==a[mid]){cout<
二分查找"
key<
成功"
下标为"
mid<
•elseif(key<
a[mid])high=mid-1;
•elselow=mid+1;
•if(key!
=a[mid])cout<
•二分查找80失败
•如果将key的值改为73,则查找成功。
4.4.4数组的其他应用
•数组在现实生活中的应用还有很多,如对二维表格的计算与处理、矩阵的运算、打印杨晖三角形等。
•【例4.12】对学生期末考试成绩进行处理,统计每一位学生的平均成绩和每门课程的平均成绩(保留小数一位小数),如表4-1所示。
表4-1学生期末考试成绩表
•分析:
首先需要将各科成绩放入二维数组中,假设一个班有n个学生,考试了m门课程,可以定义数组a[n][m],每个学生平均成绩用b[n]表示,每门课平均成绩用c[m]表示。
•#include<
iomanip>
//使用格式函数setw(n)
•constintn=10,m=5;
//定义10人,5门课
•{inta[n][m];
•doubleb[n]={0},c[m]={0};
//初始化平均值变量
•inti,j,sum1,sum2;
//sum1,sum2分别表示每行的和,每列的和
i++)//输入学生成绩
•for(j=0;
m;
•cin>
a[i][j];
•for(i=0;
i++)//求每行元素和、平均值
•{sum1=0;
•sum1+=a[i][j];
•b[i]=int(sum1/float(m)*10+0.5)/10.0;
//求平均值,保留小数点后一位小数,并四舍五入
•for(j=0;
j++)//求每列元素和、平均值
•{sum2=0;
•sum2+=a[j][i];
c[j]=int(sum2/float(n)*10+0.5)/10.0;
i++)//打印成绩表
•{cout<
setw(15)<
setw(8)<
平均分:
b[i];
各科平均分:
c[i]<
setw(8);
•【例4.13】打印杨辉三角形。
根据杨辉三角形的特点,先将三角形逆时针旋转30度,变成直角三角形。
这样就可以认为杨辉三角是一个由二维数组组成的,数组中只有下三角中有数据,根据数据规律每一行的第一列数字为1,行数与列数相等位置上的数字为1。
从第三行、第二列开始,每个元素的值为a[i][j]=a[i-1][j]+a[i-1][j-1]。
最后打印时按等腰三角形形式打印。
•1
1
1
2
1
3
3
4
6
5
10
5
1
•constintn=7;
•voidmain()
•{inta[n][n],i,j,k;
=7;
i++)//给每行第一列元素和对角线上的元素赋值
•{a[i][1]=1;
•a[i][i]=1;
•for(i=3;
i++)
•for(j=2;
=i-1;
j++)//给第2列到i-1列的元素赋值
•a[i][j]=a[i-1][j]+a[i-1][j-1];
i++)//输出等腰的杨辉三角形
•{for(k=1;
k<
=30-2*i;
k++)cout<
//引号中空1格
•for(j=1;
=i;
j++)cout<
a[i][j]<
//引号中空2格
•【例4.14】求二个矩阵的乘法
假定一个矩阵A为3行4列,另一个矩阵B为4行3列,根据矩阵乘法的规则,其乘积C为一个3行3列的矩阵。
•{inti,j,k;
•inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
•intb[4][3]={12,11,10,9,8,7,6,5,4,3,2,1};
•intc[3][3]={0};
3;
•for(k=0;
4;
k++)
•c[i][j]+=a[i][k]*b[k][j];
•{for(j=0;
•cout<
c[i][j]<
•程序运行结果:
•5040
•154128
•300256216
4.5.1字符串的概念
•1.字符串的定义
•字符串是用一对双引号括起来的字符序列,例如,¡
°
china¡
±
,¡
Thisisastring.¡
中国,北京¡
都是字符串常量。
•它在内存中的存放形式是:
按串中字符的排列次序顺序存放,每个字符占用一个字节,每个汉字占用2个字节。
•定义字符数组的长度必须大于等于待存储字符串的长度加1,且自动在字符串末尾加¡
\0¡
。
•2.字符串的输入和输出
•一字符串能够在定义字符串类型或字符串数组时直接将字符串常量存储到数组中,但不能够通过赋值语句把一个字符串直接赋值给数组变量。
•chara[10]="
china"
//双引号为西文中的双引号
•charb[30]="
Heisastudent"
•charc[10]="
•a="
book"
•a[0]='
C'
•stringstr1,str2;
//定义字符串类型的变量
•stringstr1="
•存储字符串的数组,其元素可以通过下标运算符访问,另外也可以对它进行整体的输入和输出。
假设a[14]为一个字符串数组,str1为字符串变量,则:
a>
str1;
a<
str1<
•是允许的。
当计算机执行第一条语句时,要求用户从键盘上输入一个不含空格的字符串,空格键或回车键被作为字符串输入的结束符,并自动在整个字符串的后面加入一个'
\0'
利用一维数组存放一个字符串,多个字符串的存储就要用二维数组或定义string类型的数组变量。
例如:
•
(1)chara[4][6]={"
Bei"
"
jing"
shang"
hai"
};
•
(2)charb[][4]={"
sun"
mon"
tue"
wed"
thu"
fri"
sta"
•(3)charc[5][10]={"
•(4)stringx[]={"
•下面的例子是对二维字符数组的输入和输出:
•chara[5][10];
//从键盘输入5个字符串,每个串的长度不超过9个字符
•for(i=4;
//将数组中的字符串反向输出,并输出一个换行符
4.5.2字符串函数
•VC++2005系统抛弃了原来VC6中有关char*字符串处理方法,而采用标准程序库中的string类,避免了因内存不足或因字符串长度设置不够引起的问题,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第4章 数组和字符串 数组 字符串