版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数 组,1,本章要点,1、数组的定义格式 2、数组元素引用的格式 3、数组的赋值与初始化 4、数组与函数 5、字符数组 6、字符串,2,数组,数组是由一组具有相同数据类型的元素组成的集合。数组的类型就是这组元素的数据类型。构成数组的这组元素在内存中占用一组连续的存储单元。可以用一个统一的数组名标识这一组数据,而用下标来指明数组中各元素的序号。,3,一维数组的定义,语法格式: 类型 数组名常量表达式; 如: char a5; int b10; const int size=10; int csize; 注意:在定义数组时,不能用变量来描述数组定义中的元素个数。例如,下面的定义方式是不合法的: i
2、nt n; cinn; int bn;,数组名是代表数组元素首地址的符号常量,例 对于 char a10 a的内容是一个地址,也就是a0的地址;在定义a10之后a为一个表示地址的常量。,4,一维数组的存储,用数组名加下标值就可以访问数组中对应的某个元素。下标值从0开始,因此对于一个具有n个元素的一维数组来说,它的下标值是0 n-1。 数组元素在内存中是顺序存储的。对于一维数组,就是简单地按下标顺序存储。 如:int b5;,5,一维数组的初始化,6,数组元素的赋值,由于数组名是常量,数组元素是变量,所以对数组的赋值只能针对数组元素,并且必须逐一赋值。 例 int mydata5; mydata
3、0=3; mydata1=78; mydata2=54; mydata3=90; mydata4=6;,mydata=3,78,54,90,6 是错误的!,7,数组元素的赋值,8,数组元素的引用,引用形式为: 数组名下标 下标可以是整常数或整型表达式。例如a2+1、ai+j等(i和j为整型变量)。例如: a2=10; /将10赋给数组中的a2元素。 a5=a2; /将a2元素的值赋给a5元素 couta5; /打印a5元素的值,9,数组越界,在给数组元素赋值或对数组元素进行引用时,一定要注意下标的值不要超过数组的范围,否则会产生数组越界问题。因为当数组下标越界时,编译器并不认为它是一个错误,但
4、这往往会带来非常严重的后果。 例如:定义了一个整型数组a: int a10; 数组a的合法下标为09。如果程序要求给a10赋值,将可能导致程序出错,甚至系统崩溃。 可以使用下式预防越界: sizeof(a)/sizeof(int),10,一维数组例,#include using namespace std; void showVal ( int num ); int main ( ) int testArr 5 = 5, 10, 15, 20, 25 ; for ( int ct = 0; ct 5; ct+ ) showVal ( testArr ct ); return 0; void s
5、howVal ( int num ) cout num “ “; ,11,一维数组例,#include using namespace std; int main( ) int i,a10; for (i=0;i=0;i-) coutai ; coutendl; return 0; ,12,一维数组例,#include using namespace std; int main() int age5; /数组声明 int sum=0; for(int i=0;iagei; /写数组元素 sum+=agei; coutThe average is:sum/5.0endl; return 0; ,
6、13,一维数组例,#include using namespace std; int main() int age=18,20,17,21,19; /数组初始化 int sum=0; for(int i=0;i5;i+) sum+=agei; coutThe average is:sum/5.0endl; return 0; ,14,一维数组例,编写程序,用冒泡法对10个数排序(按由小到大顺序)。,15,一维数组例,#include using namespace std; int main( ) int a11; int i,j,t; coutai; coutai+1) /如果前面的数大于后
7、面的数 t=ai;ai=ai+1;ai+1=t; coutthe sorted numbers :endl; for(i=1;i11;i+) /输出10个数 coutai ; coutendl; return 0; ,16,#include using namespace std; int main() int n,a10000,i,j; cinn; for(i=0;iai; for(i=0;in-1;i+) ,for(j=i+1;jn;j+) if(aiaj) swap(ai,aj); for(i=0;in;i+) coutai ; ,80.简单的排序,17,#include using n
8、amespace std; int main() int a,b,c,d,e=1; cina; int na; for(c=0;cnc; ,cinb; for(c=0;cb) e=e+1; coute; return 0; ,100.成绩排名,18,#include using namespace std; int main() int a10000,n,i=0,j; cinn;,while(n0) ai=n%2; i+; n=n/2; for(j=i-1;j=0;j-) coutaj; ,86.十进制数转换为二进制数,19,二维数组的定义,20,二维数组初始化,(1)分别对各元素赋值,每一行
9、的初始值用一对花括号括起来。例如: int a23=1,2,3,4,5,6; (2)将各初始值全部连续地写在一个花括号内,在程序编译时会按内存中排列的顺序将各初始值分别赋给数组元素。例如 int a23=1,2,3,4,5,6; (3)只对数组的部分元素赋值。例如: int a23=1,2,3,4; (4)可以在分行赋初值时,只对该行中一部分元素赋初值,例如: static int a23=1,2,1;,21,省略第一维的大小,若在定义数组时给出了全部数组元素的初值,则数组的第一维下标可以省略,但第二维下标不能省略。 下面两种定义方式等价: static int a23=1,2,3,4,5,6
10、; static int a 3=1,2,3,4,5,6; static int a2 =1,2,3,4,5,6; /错误写法 在分行定义时,也可以只对部分元素赋初值而省略第一维的下标。例如: int a 4=1,2,3,4,5; 等价于 int a34=1,2,0,0,0,0,0,0,3,4,5,0 ;,22,二维数组例,#include using namespace std; int main() float disks24; int row, col; disks00 = 2.39; / Row 1, column 1 disks01 = 2.75; / Row 1, column 2
11、 disks02 = 3.29; / Row 1, column 3 disks03 = 3.59; / Row 1, column 4 disks10 = 1.75; / Row 2, column 1,23,二维数组例,disks11 = 2.19; / Row 2, column 2 disks12 = 2.69; / Row 2, column 3 disks13 = 2.95; / Row 2, column 4 / Print for (row=0; row2; row+) for (col=0; col4; col+) cout “$” disksrowcol “n”; retu
12、rn 0; ,24,二维数组例,#include / 二维矩阵的转置 using namespace std; int main( ) int a23=1,2,3,4,5,6; int b32,i,j; coutarray a:endl; for (i=0;i=1;i+) for (j=0;j=2;j+) bji=aij; coutarray b:endl; for (i=0;i=2;i+) for(j=0;j=1;j+) coutbij ; coutendl; return 0; ,25,二维数组例,#include using namespace std; int main( ) int
13、i,j,row=0,colum=0,max; int a34=5,12,23,56,19,28,37,46,-12,-34,6,8; max=a00; /使max开始时取a00的值 for (i=0;imax) /如果某元素大于max max=aij; /max将取该元素的值 row=i; /记下该元素的行号i colum=j; /记下该元素的列号j coutmax=max,row=row,colum=columendl; return 0; ,26,例 :读入下表中值到数组,分别求各行、各列及表中所有数之和,#include int main() int x54,i,j; for(i=0;i
14、xij; for(i=0;i3;i+) x4i=0; for(j=0;j5;j+) xj3=0; for(i=0;i4;i+) for(j=0;j3;j+) xi3+=xij; x4j+=xij; x43+=xij; ,for(i=0;i5;i+) for(j=0;j4;j+) cout“ ”xij; coutendl; return 0; ,27,多维数组,28,数组和函数,1. 数组元素作为函数的参数 用法与普通变量作参数相同。将数组元素的值传送给形参进行函数体调用,函数调用完返回后,数组元素的值不变。这种传送方式是“值传送”方式。,29,例,#include using namespac
15、e std; int main( ) int max_value(int x,int max); /函数声明 int i,j,row=0,colum=0,max; int a34=5,12,23,56,19,28,37,46,-12,-34,6,8; /数组初始化 max=a00; for (i=0;imax) return x; /如果xmax,函数返回值为x else return max; /如果xmax,函数返回值为max ,30,数组名作为函数的参数 当用数组名作为函数的实参和形参时,传递的是数组的地址。这时实参数组和形参数组应该分别在它们所在的函数中定义。把实参数组的起始地址传送给
16、形参数组,这样形参数组就和实参数组共占同一段内存单元,当形参值发生变化时,实参值也发生变化。,数组和函数,31,例,#include using namespace std; int main( ) void select_sort(int array,int n); /函数声明 int a10,i; coutai; coutendl; select_sort(a,10); /函数调用,数组名作实参 coutthe sorted array:endl; for(i=0;i10;i+) /输出10个已排好序的数 coutai ; coutendl; return 0; ,32,例,void se
17、lect_sort(int array,int n) /形参array是数组名 int i,j,k,t; for(i=0;in-1;i+) k=i; for(j=i+1;jn;j+) if(arrayjarrayk) k=j; t=arrayk; arrayk=arrayi; arrayi=t; ,33,例,输入10个学生的成绩,求平均成绩,并将低于平均成绩的分数打印出来。 #include using namespace std; void readdata(float score10) coutscorei; ,34,例,float aver(float score10) float su
18、m=0; int i; for(i=0;i10;i+) sum+=scorei; return(sum/10); void print(float score10,float ave) int i; coutthe scores which are below the average:; for(i=0;i10;i+) if(scoreiave) coutscorei ; coutendl; ,35,例,int main() float ave,score10; readdata(score); ave=aver(score); coutaverage=aveendl; print(score
19、,ave); return 0; ,运行结果: Please input 10 students score: 10 20 30 40 50 60 70 80 90 100 average=55 the scores which are below the average:10 20 30 40 50,36,数组元素与 数组名 作函数参数比较,#include void swap2(int x,int y) int z; z=x; x=y; y=z; int main() int a2=1,2; swap2(a0,a1); cout“a0=“a0“,a1=“a1; return 0; ,值传递
20、,37,#include void swap2(int x) int z; z=x0; x0=x1; x1=z; int main() int a2=1,2; swap2(a); couta0=“a0“,a1=“a1; return 0; ,地址传递,38,例: 求二维数组中最大元素值,39,#include int max_value(int array34) int i,j,k,max; max=array00; for(i=0;imax) max=arrayij; return (max); int main() int a34=1,3,5,7, 2,4,6,8,15,17,34,12;
21、 cout“max value is “max_value(a)endl; return 0; ,40,例: 求二维数组中各行元素之和,#include void get_sum_row(int x3, int result ,int row, int col) int i,j; for(i=0;irow;i+) resulti=0; for(j=0;jcol;j+) resulti+=xij; int main() int a23=3,6,9,1,4,7; int sum_row2,row=2,col=3,i; get_sum_row(a,sum_row,row,col); for(i=0;
22、irow;i+) coutThe sum of row“i+1“=“sum_rowiendl; return 0; ,18,12,41,字符数组,char c10; c0=I; c1= ; c2=a; c3=m; c4= ; c5=h; c6=a; c7=p; c8=p; c9=y; char c10=I, ,a,m, ,h,a,p,p,y; char c=I, ,a,m, ,h,a,p,p,y;,42,字符数组赋值和引用,char c5; c=C,h,i,n,a; /错误,不能对整个数组一次赋值 c0=C; c1=h;c2=i;c3=n;c4=a; /对数组元素赋值,正确 若已定义了a和b是
23、具有相同类型和长度的数组,且b数组已被初始化,则: a=b; /错误,不能对整个数组整体赋值 a0=b0; /正确,引用数组元素,43,字符串,44,字符数组的输入和输出,(1) 逐个字符输入输出。 如: char c5; for(int i=0;ici; (2) 将整个字符串一次输入或输出。 如: char str20; cinstr; /用字符数组名输入字符串 coutstr; /用字符数组名输出字符串,45,字符串处理函数,1、#include 或 #include 2、字符串连接函数 strcat(char,const char); char str130=Peoples Republ
24、ic of ; char str2=China; strcat(str1,str2); /将str2连接到str1后面 3、字符串复制函数strcpy(char,const char); char str110,str2=China; strcpy(str1,str2); /将str2复制到str1,46,4、字符串比较函数strcmp(const char,const char); strcmp(str1,str2); strcmp(China,Korea); strcmp(str1,Beijing); (1) 如果字符串1=字符串2,函数值为0。 (2) 如果字符串1字符串2,函数值为一正
25、整数。 (3) 如果字符串1字符串2,函数值为一负整数。 5、字符串长度函数strlen(const char); char str10=China; coutstrlen(str); /不包括0,字符串处理函数,47,例,#include #include using namespace std; int main( ) void max_string(char str30,int i); /函数声明 int i; char country_name330; for(i=0;icountry_namei; /输入3个国家名 max_string(country_name,3); return
26、 0; ,48,例,void max_string(char str30,int n) int i; char string30; strcpy(string,str0); /使string的值为str0的值 for(i=0;i0) strcpy(string,stri); /将stri中的字符串复制到string coutendlthe largest string is: stringendl; ,49,#include #include using namespace std; int main() char str1 = Hello!, str2 = How are you?,str2
27、0; int len1,len2,len3; len1=strlen(str1); len2=strlen(str2); if(strcmp(str1, str2)0) strcpy(str,str1); strcat(str,str2); else if (strcmp(str1, str2)0) strcpy(str,str2); strcat(str,str1); else strcpy(str,str1); len3=strlen(str); puts(str); coutLen1=len1,Len2=len2,Len3=len3endl; return 0; ,How are you?Hello! Len1=6,Len2=12,Len3=18,50,字符串类,1. 定义字符串变量 #include /注意头文件名不是string.h string string1; /定义string1为字符串变量 string string2=“China”; /定义string2同时对其初始化 2. 对字符串变
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 加工用芒果-行业标准
- 农业机械化水平评价分类办法
- 报警器使用安全指南
- 广东省深圳市2026年九年级中考二模历史试卷附答案
- 暑期幼小衔接试题及答案
- 科学可视化-从概念、方法到典型案例 课件 体视
- 2026助理医师考试历年真题及答案
- 儿童偏头痛识别与家庭护理指导指南 (2026 版)
- 一级建造师考试(机电工程管理与实务)题库含答案(2025年广西钦州市)
- 2026年初级注册安全工程师《安全生产实务》模拟试题(安徽)
- 《焊条电弧焊》课件(共七章)
- 2026中远海运集团招聘考试参考题库及答案解析
- 高速路机电安全培训课件
- 医疗器械生产企业洁净区工作服管理规定
- 2025国铁集团考试题库及答案
- 老年健康饮食指导及食谱设计
- 中国科学院2025年科研项目聘用人员工作规范与考核协议
- 综合行政执法面试题及参考答案
- (高清版)DB42∕T 2012-2023 《土家族吊脚楼营造规程》
- 胎儿常见疾病的治疗:胎儿宫内治疗原则和治疗方法-医学课件
- DB32/T 4152-2021水利工程液化地基处理技术规范
评论
0/150
提交评论