数组和字符串.ppt
《数组和字符串.ppt》由会员分享,可在线阅读,更多相关《数组和字符串.ppt(47页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数组和字符串现在学习的是第1页,共47页 第第0列列 第第1列列 第第2列列第第0行行第第1行行a00a01a02a10a11a122.数组元素数组元素数组的成员,用数组名加下标表示数组的成员,用数组名加下标表示。a0a1a2a3a4a5a6a7a8a95.1数组的概念数组的概念 数组是同类型变量的集合。数组具有如下特征:类型 数组的类型就是所有数组元素的数据类型;数组名 各元素共用同一个名称;维数 一维数组有一个下标,二维数组有两个下标。1.数组数组现在学习的是第2页,共47页 维界只能是整常数表达式(含符号常数);维界只能是整常数表达式(含符号常数);数组的下标从数组的下标从0 0开始;开
2、始;多个相同类型的数组可以在一个语句中定义。多个相同类型的数组可以在一个语句中定义。数据类型数据类型数组名数组名维界维界1.数组的定义数组的定义存储类型存储类型数据类型数据类型数组名数组名expnexpn-1exp2exp1intdata10;/一维数组一维数组floata34;/二维数组二维数组charstr130;/一维字符型数组一维字符型数组charstr21080;/二维字符型数组二维字符型数组5.2数组的定义和初始化数组的定义和初始化现在学习的是第3页,共47页2.数组的存储结构数组的存储结构 数组占用一片连续的存储单元,数组中的各个元素依次存放。数组名就是这一片存储单元的首地址。一
3、维数组:各个元素顺序存放。二维数组:先按行的顺序,然后按列的顺序依次存放各个元素。每个元素占用存储单元的多少,取决于数组的数据类型,同一个数组的各个元素占用相同数量的存储单元。字符型数组:各个字符依次存放,每个字符占1字节。现在学习的是第4页,共47页a0a0a1a1a2a2a3a3a4a4a5a5a6a6a7a7b00b00b01b01b02b02b10b10b11b11b12b12c00c00c01c01c06c06c10c10c11c11c16c16【例】【例】inta8;floatb23;charc27;现在学习的是第5页,共47页(1 1)一维数组初始化)一维数组初始化)一维数组初始
4、化)一维数组初始化 把初值顺序放在等号右边的花括号中,各常量之间用逗号隔开。把初值顺序放在等号右边的花括号中,各常量之间用逗号隔开。把初值顺序放在等号右边的花括号中,各常量之间用逗号隔开。把初值顺序放在等号右边的花括号中,各常量之间用逗号隔开。intata10=50,60,70,80,90,100,101,102,103,104;intata10=50,60,70,80,90,100,101,102,103,104;floattable5=1,2.5,3.6,4.7,5;floattable5=1,2.5,3.6,4.7,5;(2 2)二维数组初始化)二维数组初始化)二维数组初始化)二维数组初
5、始化把全部初值放在一对花括号中,每一行的初值又分别放在一对内把全部初值放在一对花括号中,每一行的初值又分别放在一对内把全部初值放在一对花括号中,每一行的初值又分别放在一对内把全部初值放在一对花括号中,每一行的初值又分别放在一对内嵌的花括号中。嵌的花括号中。嵌的花括号中。嵌的花括号中。inta43=1,2,3,4,5,6,7,8,9,10,11,12;inta43=1,2,3,4,5,6,7,8,9,10,11,12;其中代表每一行的内层花括号也可以省略,直接写成其中代表每一行的内层花括号也可以省略,直接写成其中代表每一行的内层花括号也可以省略,直接写成其中代表每一行的内层花括号也可以省略,直接
6、写成inta43=1,2,3,4,5,6,7,8,9,10,11,12;inta43=1,2,3,4,5,6,7,8,9,10,11,12;3.3.数组的初始化数组的初始化现在学习的是第6页,共47页对数组初始化的几点说明对数组初始化的几点说明:如果赋初值的花括号中的常数个数如果赋初值的花括号中的常数个数少于少于数组元素个数,则编译程序会自动数组元素个数,则编译程序会自动以零来补足。以零来补足。intx6=1,2,3,4;相当于相当于intx6=1,2,3,4,0,0;inta43=1,2,4,5;相当于相当于inta43=1,2,0,4,5,0,0,0,0,0,0,0;花括号中的初值可以缺省
7、,但花括号中的初值可以缺省,但逗号不能省略逗号不能省略,缺省的值将被视为,缺省的值将被视为0。floatarray5=,2.5,3.5,;相当于相当于floatarray5=0,2.5,0,3.5,0;当花括号中给出初值的个数多于定义的数组元素个数时,将出错。当花括号中给出初值的个数多于定义的数组元素个数时,将出错。inta4=1,2,3,4,5;编译时会显示错误信息。编译时会显示错误信息。现在学习的是第7页,共47页用字符常数初始化用字符常数初始化charstr12=T,h,e,s,t,r,i,n,g,.,0;charlanguage58=B,A,S,I,C,0,F,O,R,T,R,A,N,
8、0,P,A,S,C,A,L,0,C,0,C,O,B,O,L,0;直接用字符串常量初始化直接用字符串常量初始化charstr12=Thestring.;或或charstr12=Thestring.;charLanguage58=BASIC,FORTRAN,PASCAL,C,COBOL;(3 3 3 3)字符型数组的初始化)字符型数组的初始化)字符型数组的初始化)字符型数组的初始化现在学习的是第8页,共47页 C C语言允许通过初始化方式隐含规定数组的大小。语言允许通过初始化方式隐含规定数组的大小。inta=0,1,2,3,4,5,0;等价于等价于inta7=0,1,2,3,4,5,0;用初始化方
9、法隐含规定多维数组的大小时,只能省略最左用初始化方法隐含规定多维数组的大小时,只能省略最左边的维界表达式。边的维界表达式。例如对二维数组,只能省略第一个方括号中的表达式,写成:例如对二维数组,只能省略第一个方括号中的表达式,写成:inta3=1,2,3,4,5,6,7;等价于等价于inta43=1,2,3,4,5,6,7;不能写成:不能写成:inta4=1,2,3,4,5,6,7;或或inta=1,2,3,4,5,6,7;4.利用初始化隐含规定数组的大小利用初始化隐含规定数组的大小现在学习的是第9页,共47页 用初始化方法隐含规定字符型数组的大小,可以免除乏用初始化方法隐含规定字符型数组的大小
10、,可以免除乏味的统计字符个数的工作。味的统计字符个数的工作。例如例如charstr=T,h,e,s,t,r,i,n,g,.,0;charstr=Thestring.;编译系统会根据初值给出的字符个数自动确定其维界是编译系统会根据初值给出的字符个数自动确定其维界是12。charlanguage8=BASIC,FORTRAN,PASCAL,C,COBOL;编译系统会根据初始化中字符串常量的个数自动确定该数组的第二维编译系统会根据初始化中字符串常量的个数自动确定该数组的第二维维界是维界是5。4.利用初始化隐含规定数组的大小利用初始化隐含规定数组的大小现在学习的是第10页,共47页5.3数组的基本操作
11、数组的基本操作 (1 1)用)用“数组名数组名 下标表达式下标表达式”的形式来引用一维数组元素。下标的的形式来引用一维数组元素。下标的下限下限是是0 0,而,而上限不能超过该数组定义时的维界值减上限不能超过该数组定义时的维界值减1 1。(2 2)用)用“数组名数组名 下标表达式下标表达式11下标表达式下标表达式2”2”的形式来引用二维的形式来引用二维数组元素,数组元素,“下标表达式下标表达式1”1”表示行下标,表示行下标,“下标表达式下标表达式2”2”表示列下标。表示列下标。(3 3)可以用与上面类似的形式来引用一维或二维字符型数组的元素,即字)可以用与上面类似的形式来引用一维或二维字符型数组
12、的元素,即字符串中的一个字符。符串中的一个字符。数组的基本操作包括数组元素的引用、数组的赋值、数组的数组的基本操作包括数组元素的引用、数组的赋值、数组的数组的基本操作包括数组元素的引用、数组的赋值、数组的数组的基本操作包括数组元素的引用、数组的赋值、数组的输入输出等。输入输出等。输入输出等。输入输出等。1 1 1 1数组元素的引用数组元素的引用现在学习的是第11页,共47页 只能逐个对数组元素赋值,不能直接对数组名赋值。只能逐个对数组元素赋值,不能直接对数组名赋值。inti,a5;a0=100,a1=120,a2=200,a3=250,a4=500;如果所赋的值有某种规律,就可以借助于循环来简
13、化程序的如果所赋的值有某种规律,就可以借助于循环来简化程序的编制。编制。intb23,i,j;for(i=0;i2;i+)for(j=0;j3;j+)bij=i+j;2.数组的赋值现在学习的是第12页,共47页 对字符型数组,只能对每个元素用字符常量赋值。对字符型数组,只能对每个元素用字符常量赋值。charst4;st0=A;st1=B;st2=C,st3=0;为了解决直接用字符串对字符型数组赋值的问题,可用为了解决直接用字符串对字符型数组赋值的问题,可用字符串处理字符串处理函数函数实现。实现。#includestrcpy(st,”ABC”);2.数组的赋值现在学习的是第13页,共47页 一维
14、数组,一般用单重循环实现对各个元素逐个输入和一维数组,一般用单重循环实现对各个元素逐个输入和输出。输出。floatx10;inti;for(i=0;i10;i+)scanf(%f,&xi);for(i=0;i10;i+)printf(%f,xi);3.3.数组的输入和输出现在学习的是第14页,共47页按行的顺序输入按行的顺序输入inta34,i,j;for(i=0;i3;i+)for(j=0;j4;j+)scanf(%d,&aij);按列的顺序输入按列的顺序输入inta34,i,j;for(j=0;j4;j+)for(i=0;i3;i+)scanf(“%d”,&aij);按矩阵形式输出按矩阵形
15、式输出#includevoidmain()inti,j;inta34=1,3,5,7,9,2,4,6,8,10,12,11;for(i=0;i3;i+)for(j=0;j4;j+)printf(%d,aij);printf(n);二维数组的输入输出用二重循环实现。二维数组的输入输出用二重循环实现。现在学习的是第15页,共47页【例】【例】将将1010个元素的整形数组个元素的整形数组a a分两行输出,每行分两行输出,每行5 5个数个数。#includevoidmain()inti,a10=1,2,3,4,5,6,7,8,9,10;for(i=0;i10;i+)printf(%2d,ai);if(
16、i%5=4|i=9)printf(n);程序中的程序中的if语句可以改用条件表达式:语句可以改用条件表达式:#includevoidmain()inti,a10=1,2,3,4,5,6,7,8,9,10;for(i=0;i10;i+)printf(%2d%c,ai,i%5=4|i=9?n:);现在学习的是第16页,共47页 字符型数组的输入和输出字符型数组的输入和输出 用用“%s”“%s”控制控制scanf()scanf()和和printf()printf()输入和输出字符串。输入和输出字符串。#includevoidmain()inti;charch10;for(i=0;i9;i+)scan
17、f(%c,&chi);for(i=0;chi!=0;i+)printf(%c,chi);#includevoidmain()charch10;scanf(%s,ch);printf(%s,ch);输出有异常字符?输出有异常字符?可以超出数组长度?可以超出数组长度?现在学习的是第17页,共47页 用gets()和puts()实现。用gets()接收字符串的显著特点是遇到回车键才认为输入结束。gets(字符型数组名);puts(字符型数组名);【例】【例】英文句子的输入输出。英文句子的输入输出。#includevoidmain()charword80;printf(Inputastatement:
18、);gets(word);puts(word);现在学习的是第18页,共47页【例】【例】二维字符型数组的输入和输出。二维字符型数组的输入和输出。#includevoidmain()inti;charcountry38;printf(请输入国家名称请输入国家名称:);for(i=0;i3;i+)gets(countryi);for(i=0;i3;i+)puts(countryi);现在学习的是第19页,共47页【例】统计某班某门课考试成绩各分数档人数。【例】统计某班某门课考试成绩各分数档人数。5.4数组的应用数组的应用1 1数据统计#includevoidmain()inta11=0,i;fl
19、oatx;for(i=1;i=30;i+)scanf(%f,&x);a(int)x/10+=1;/存放各分数档人数存放各分数档人数printf(0-910-1020-2930-3940-4950-5960-6970-7980-8990-99100n);for(i=0;i11;i+)printf(%3d,ai);现在学习的是第20页,共47页【例】试编程找出二维数组【例】试编程找出二维数组a34a34中最大和最小的元素,并指出它们中最大和最小的元素,并指出它们所在的行号和列号。所在的行号和列号。#includemain()inta45,i,j,max,max_row,max_col;intmin
20、,min_row,min_col;printf(输入二维数组如下:输入二维数组如下:n);for(i=0;i4;i+)for(j=0;j5;j+)scanf(%d,&aij);max=a00;max_row=0;max_col=0;min=a00;min_row=0;min_col=0;for(i=0;i4;i+)for(j=0;j5;j+)if(maxaij)min=aij,min_row=i,min_col=j;printf(输出结果如下:输出结果如下:n);printf(max=%d,row=%d,column=%dn,max,max_row,max_col);printf(min=%d
21、,row=%d,column=%dn,min,min_row,min_col);输入数据输入数据max=a00,row1=0,column1=0min=a00,row2=0,column2=0输出结果输出结果maxaijmax=aij,row1=i,column1=jmin=aij,row2=i,column2=j现在学习的是第21页,共47页【例】【例】数据统计中经常用到标准差的概念。假设有数据统计中经常用到标准差的概念。假设有n n个数个数d di i(i=1(i=1n)n),标准差的计算公式为:,标准差的计算公式为:计算计算di之和之和计算平均值计算平均值dd计算计算(di-dd)2之和
22、之和计算标准差计算标准差现在学习的是第22页,共47页#include#include#define N 1000main()int i,n;float dN,dd,s;scanf(%d,&n);/*输入数据个数输入数据个数*/for(i=0;in;i+)/*输入各个输入各个di*/scanf(%f,&di);dd=0;/*计算平均值计算平均值*/for(i=0;in;i+)dd+=di;dd/=n;/*平均值平均值*/s=0;/*计算标准差计算标准差*/for(i=0;in;i+)s+=(di-dd)*(di-dd);s=sqrt(s/(n-1);/*标准差标准差*/printf(s=%f,
23、s);现在学习的是第23页,共47页选择排序的基本思路:选择排序的基本思路:若有若有n n个数需要排序,则需要进行个数需要排序,则需要进行n-1n-1轮排序;轮排序;第第1 1轮有轮有n n个数参加排序,此后,每一轮参加排序的数据个数逐个数参加排序,此后,每一轮参加排序的数据个数逐次减少,即第次减少,即第2 2轮有后轮有后n-1n-1个,第个,第n-1n-1轮只剩下后轮只剩下后2 2个;个;在第在第i i轮排序时,要将轮排序时,要将aiai与其后的各个数进行比较,凡出现比与其后的各个数进行比较,凡出现比aiai小小的数就记下它的位置的数就记下它的位置j j,这一轮结束后,将,这一轮结束后,将a
24、iai与与ajaj交换位置,从而找到第交换位置,从而找到第i i小的元素。小的元素。【例】【例】选择排序。假设有选择排序。假设有1010个数,要求将它们按从小到大的顺序个数,要求将它们按从小到大的顺序排列。排列。2 2排序排序排序是将一批杂乱无序的数据按从小到大或从大到小的顺序整齐排排序是将一批杂乱无序的数据按从小到大或从大到小的顺序整齐排列。排序的主要操作是比较和交换。列。排序的主要操作是比较和交换。现在学习的是第24页,共47页#include#include#defineN10#defineN10main()main()inti,j,k,m;inti,j,k,m;intaN,t;inta
25、N,t;for(i=0;iN;i+)for(i=0;iN;i+)/*/*该循环用于输入数组元素的值该循环用于输入数组元素的值该循环用于输入数组元素的值该循环用于输入数组元素的值*/*/scanf(%d,&ai);scanf(%d,&ai);printf(printf(原始数据序列:原始数据序列:原始数据序列:原始数据序列:););for(i=0;iN;i+)for(i=0;iN;i+)/*/*该循环用于输出数组的初始序列该循环用于输出数组的初始序列该循环用于输出数组的初始序列该循环用于输出数组的初始序列*/*/printf(%4d,ai);printf(%4d,ai);for(i=0;iN-1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组 字符串
限制150内