版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VisualC++程序设计第6章数组版本号:V2005.08-06.01C++语言不仅提供了基本类型的数据,如int,char,float,还提供了构造类型的数据,它们有,数组、结构体和共用体。数组:是一组有序数据的集合。数组中的每个元素都属于同一个数据类型,可以用一个统一的数组名和下标来唯一确定数组中的元素。6.1.1一维数组的定义和使用(1)数组的定义 类型数组名[常量表达式]例如:inta[10];说明:(1)常量表达式中可以包括常量和符号常量,不能包含变量。常量表达式的值表示数组元素的个数即数组的长度。例如:inta[5];表示:定义了一个a数组,它包含5个元素,每个元素都是整型。这5个元素分别是:a[0],a[1],a[2],a[3]和a[4]。但不含a[5]。6.1.一维数组的定义、初始化和引用(2)数组名代表该数组的起始地址,也就是数组中第一个元素的地址,即:a=&a[0];
在定义数组时,对各元素指定初始值,这个过程称为对数组的初始化。数组的初始化是在系统编译时完成的,它不占用系统运行时间。对于静态(static)数组和外部(extern)数组,若不进行初始化,系统会对所有数组元素自动赋以0值。对于auto型数组,若不进行初始化,则其初始值不定。初始化数组元素的方法多种多样,可以对全部或部分数组元素初始化。(2)数组元素的引用例如:staticinta[5]={1,3,5,7,9};M=a[2+1];n=a[I+j];I和j为有确定值的整型变量。注意:C++编译系统不检查下标“出界”例如:a[5]=100;对全部数组元素逐一初始化。
staticinta[5]={1,3,5,7,9};初始化时,若不指定数组长度,则按实际元素个数初始化数组。
staticinta[]={1,3,5,7,9};只对数组中a[0],a[1],a[2]进行初始化。
staticinta[5]={1,3,5};例:书P100例6.1,例6.2//例6.2输出数组为全局变量和局部变量时的初值#include<iostream.h>intx[5];voidmain(void){ for(inti=0;i<5;i++) cout<<x[i]<<'\t'; cout<<'\n'; inty[5]; for(i=0;i<5;i++) cout<<y[i]<<'\t'; cout<<'\n';}#include<iostream.h>#include<iomanip.h>voidmain(void){ inti; staticintf[20]={1,1}; for(i=2;i<20;i++){ f[i]=f[i-2]+f[i-1]; } for(i=0;i<20;i++){ if(i%5==0)cout<<'\n'; cout<<setw(5)<<f[i]<<''; }}与迭代算法比较,由于省去了每次迭代后的变量替换fib=fib1+fib2;fib2=fib1;fib1=fib;因此结构上清淅简单。缺点:占用较多的内存空间。例:用数组来处理Fibonacci数列。一般定义格式为:类型数组名[表达式][表达式]…例如:intI[2][3];inta[2][3][4];C++将多维数组看成是由若干个一维数组的组合。因此二维数组中数组元素的排列顺序是按行逐行存放,即列坐标先变化,行坐标后变化。对于多维数组,元素在内存中的排列顺序为:第一维的下标变化最慢,最右边的下标变化最快。6.2二维和多维数组
多维数组的初始化,其基本方法与一维数组相似,可以按行或不按行,一次对全部或部分数组元素进行初始化。例如: staticinta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};staticinta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};staticinta[3][4]={{1},{5,6}};staticinta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
无论是一维数组,二维数组或是多维数组,其在内存中的排列总是一维的,对于常用的二维数组而言,其中任一元素在内存中的排列次序可以由下列方法计算出来:设:一个二维数组a[m][n];其中第i行第j列元素a[i][j]在内存中的位置为:i*n+j;(序号从0开始)例如:a[3][4]= a00a01a02a03 a10a11a12a13 a20a21a22a23则a[1][0]的位置为:1*4+0=4;即表示它是内存中从序号0算起的第4号元素。
将数组中的数据作为函数的参数传送给另一个函数,可以采用两种方法:(1)将数组元素作为函数的参数这种方式属于传值调用,实参与形参应具有相同的数据类型,且只能从实参传给形参,而不能从形参传给实参。6.3数组和函数(数组作为函数的参数)#include<iostream.h>floatfun1(float,float,float);voidmain(void){ floata[3]={4.0,5.0,6.0}; floatave; ave=fun1(a[0],a[1],a[2]); cout<<ave;}floatfun1(floata,floatb,floatc){ floatsum,aver; sum=a+b+c; aver=(float)(sum/3.0); return(aver);}例6.2:求平均值说明:1.以数组名为参数时,采取的是传址调用的方式,即把实参数组的起始地址传给形参数组,这样形参数组就和实参数组共占一段内存单元。#include<iostream.h>voidswap(intx[]);voidmain(void){ inta[2]={4,9}; swap(a); cout<<a[0]<<a[1];}(2)将数组名作为函数的参数voidswap(intx[]){ intt; t=x[0]; x[0]=x[1]; x[1]=t;}2.由于采用传址调用方式,数据的传递可以是双向的,既可以将实参数据传给形参,又可将形参数据回送给实参(形参数据的改变必然导致实参数据的改变)。3.以数组名作参数时,必须定义实参数组的确定大小,而形参数组可以不定其长度,只写一对“[]”。#include<iostream.h>#include<stdlib.h>
constSIZE=15;
voidmain(void){inti,high,low,arr[SIZE];for(i=0;i<SIZE;i++)arr[i]=rand()%100;cout<<“Herearethe”<<SIZE<<“randomnumbers:”<<endl;for(i=0;i<SIZE;i++) cout<<arr[i]<<'\t';
cout<<endl;//初始化时认为最大和最小值均为数组的第一个元素【例6.3】找出一个整型数组各数组元素中的最大数和最小数,数组中的数由随机数函数rand()产生。high=arr[0];low=arr[0];for(i=1;i<SIZE;i++){ if(arr[i]>high) high=arr[i]; if(arr[i]<low) low=arr[i];}cout<<"highestvalueis"<<high<<endl;cout<<"lowestvalueis"<<low<<endl;return;}字符数组即数组中的每一个元素是字符,在C++语言中字符型数组的应用很多:(1)字符数组定义、引用及初始化定义:chara[10];此时定义了一个包含10个字符元素的字符数组。初始化:staticcharc[14]={‘I’,‘
’,‘a’,‘m’,‘
’,‘a’,‘
’,‘s’,‘t’,‘u’,‘d’,‘e’,‘n’,‘t’};Staticcharc[]={“Iamastudent”};Staticcharc[]=“Iamastudent”;6.4字符数组及字符串处理函数(2)字符数组的输入、输出•
逐个字符的输入、输出;charstr[10];cout<<“输入十个字符:”;for(intI=0;I<10;I++)cin>>str[I];•
把字符数组作为字符串输入、输出;chars1[50],s2[60];cout<<“输入两个字符串:”;cin>>s1;cin>>s2;cout<<“\ns1=”<<s1;cout<<“\ns2=”<<s2<<‘\n’;当输入为:stringsisabc输出为:s1=stringss2=is注意:
在输入字符串时遇到空格字符或换行字符,认为一个字符串结束,接着的非空格字符作为一个新的字符串开始。当把一个字符数组中的字符作为字符串输出时,遇到‘\0’时认为字符串结束。例6.11#include<iostream.h>voidmain(void){chars3[81];chars4[8]={‘s’,‘j’,‘f’,‘s’,‘k’,‘l’,‘f’,‘j’};
cout<<“输入一行字符串:”;cin.getline(s3,80);cout<<“s3=”<<s3<<‘\n’;cout<<“s4=”<<s4<<‘\n’;}若输入:youarestudents可能的输出是:s3=youarestudentss4=sjfsklfjyouarestudents•
使用cin.getline()函数按行输入字符数组;S,j,f,s,k,l,f,j,youarestudents\0s4s3(a)strcpy(字符数组1,字符数组2)函数原形:
char*strcpy(char*,char*);功能:将字符数组(串)2拷贝到字符数组1中。例: staticcharstr1[10]; staticcharstr2[]=“china”; strcpy(str1,str2);6.5.字符串处理函数a.字符数组1的长度不应小于字符数组2的长度。b.字符数组1必须写成数组名形式str1,字符数组2可以是字符数组名,也可以是一个字符串常量:
strcpy(str1,“china”);c.不能用赋值语句将一个字符数组直接赋给另一个字符数组,如下面的用法是不合法的,必须用strcpy函数处理。
str1=“china”; str2=str1;d.可以用strncpy函数将字符串2中前若干个字符拷贝到字符数组1中去。
strncpy(str1,str2,2);说明:函数原形:
char*strcat(char*,char*);功能:把字符数组2拼接到字符数组1的后面,结果放在字符数组1中,函数调用后得到一个返回值,该返回值表示字符数组1的地址。
staticcharstr1[80]=“people’srepublicof”; staticcharstr2[]=“china”; strcat(str1,str2);说明:
a.str1必须足够大,以便容纳连接后的新字符串。
b.连接时将str1后面的‘\0’取消,只在新串最后保留一个‘\0’。(b)strcat(字符数组1,字符数组2)函数原形:
intstrcmp(char*,char*);功能:对两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到‘\0’为止。比较结果由函数返回。关系 返回值
str1==str2; =0 FALSE str1>str2; >0 TRUE str1<str2; <0 TRUE(c)strcmp(字符数组1,字符数组2)说明:两个字符串的比较不能用以下形式:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乌鲁木齐职业大学《光电子技术与应用》2024-2025学年第二学期期末试卷
- 西安体育学院《化学课程与教材研究》2024-2025学年第二学期期末试卷
- 云南能源职业技术学院《微电子学》2024-2025学年第二学期期末试卷
- 石家庄财经职业学院《数据分析语言程序设计》2024-2025学年第二学期期末试卷
- 吉林安全生产会议讲解
- 三峡电力职业学院《企业价值创造实战》2024-2025学年第二学期期末试卷
- 绵阳职业技术学院《城乡规划原理一》2024-2025学年第二学期期末试卷
- 青岛酒店管理职业技术学院《剑桥商务英语中级》2024-2025学年第二学期期末试卷
- 汕头大学《跨文化社会研究方法》2024-2025学年第二学期期末试卷
- 黄河交通学院《建筑节能技术(英语)》2024-2025学年第二学期期末试卷
- 花旗银行(中国)校招面试题及答案
- 2026年渤海船舶职业学院单招职业技能考试题库含答案解析
- 2026及未来5年中国鸡肉深加工行业市场动态分析及投资前景研判报告
- 2026年包头铁道职业技术学院单招职业倾向性考试题库带答案详解ab卷
- 2025年江苏医药职业学院单招职业适应性考试题库附答案解析
- 水利系统各单位年后复工复产安全工作部署
- 贵州铝业集团2026高校毕业生招聘35人(一)备考题库附答案解析
- 2025-2026学年人美版(北京)小学美术六年级第二学期教学计划及进度表
- 开学第一课课件2025-2026学年湘教版八年级地理下册
- 2026上海安全员《A证》考试题库及答案
- 常减压生产工艺培训
评论
0/150
提交评论