经典C语言谭浩强版第七章数组.ppt

上传人:小飞机 文档编号:6331356 上传时间:2023-10-17 格式:PPT 页数:35 大小:493.50KB
返回 下载 相关 举报
经典C语言谭浩强版第七章数组.ppt_第1页
第1页 / 共35页
经典C语言谭浩强版第七章数组.ppt_第2页
第2页 / 共35页
经典C语言谭浩强版第七章数组.ppt_第3页
第3页 / 共35页
经典C语言谭浩强版第七章数组.ppt_第4页
第4页 / 共35页
经典C语言谭浩强版第七章数组.ppt_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《经典C语言谭浩强版第七章数组.ppt》由会员分享,可在线阅读,更多相关《经典C语言谭浩强版第七章数组.ppt(35页珍藏版)》请在三一办公上搜索。

1、第七章 数组,引言7.1 一维数组的定义和引用7.2 二维数组的定义和引用7.3 字符数组,引言,一、数组的引入为了便于处理一批类型相同的数据,引入了数组类型,假设现在要求保存每个学生的成绩,那就不能只使用一个变量s了,而需要40个变量,但这样一来输入、输出、计算都会变得繁琐.在这种情况下,我们可以使用数组类型,说明一个含有40个元素的数组,每个数组元素存放一个成绩,成绩的输入、输出、计算都可通过循环来实现,二、数组的概念1.数组:由具有相同类型的 固定数量的元素组成的结构,2.数组元素:每一个数组元素 都是一个变量,为了与一般 的变量相区别,我们称数组 元素为下标变量,3.下标变量在数组中的

2、位置 序号称下标,#include main()int j,sum,s40;float ave;sum=0;for(j=0;j=39;j+)scanf(“%d”,7.1 一维数组的定义和引用,一、一维数组的定义 1.格式:类型标识符 数组名 常量表达式;例:int a10;,2.说明(1)数组名是用户定义的标识符,数组名表示了一个存储区的首地址(即第一个数组元素的地址)(2)数组长度:指数组中元素的个数(3)数组元素的下标由零开始 数组a 有10个元素:a0,a1 a9(4)常量表达式中不能包含变量,常量表达式的值不能是实数,二、数组元素的引用 1.引用形式:数组名 下标,注意:如果出现 a5

3、=72;编译时不会 指出错误,系统会将a4后下一个 存储单元 赋值为72,但这样可能 会破坏数组以外其他变量的值,72,a5,1020,假设这个存储空间是变量x的,实际上a5是不存在的,如果执行了a5=72,会将x原有的正确数据覆盖掉,2.说明(1)下标可以是整型常量或整型表达式 如:a1,a2*3,(2)数组定义为 int a5,数组长度为5 而下标在0-4之内,即a0-a4,三、一维数组的初始化1.概念:在定义一维数组时对各元素指定初始值称为 数组的初始化,如:int a5=1,3,5,7,9;,2.说明 对数组的全体元素指定初值,初值用 括起来,数据 之间用逗号分开.在这种情况下,可以不

4、指明数组的 长度,系统会根据 内数据的个数确定数组的长度 如:int a=1,3,5,7,9;,(2)对数组中部分元素指定初值(这时不能省略数组长度)如:int a5=1,3,5;,(3)使数组中的全部元素初始值都为 0 如:int a5=0,0,0,0,0;,更简单的写法:int a5=0;,例1:输入一个数据,在已知数组中查找是否有该数据,9,a0a1a2a3a4a5a6a7a8a9,main()int i,x;int a10=5,8,0,1,9,2,6,3,7,4;scanf(“%d”,例2:用数组求fibonacci(斐波纳契)数列的前20个数,main()int i,f20=1,1;

5、for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;i20;i+)if(i%4=0)printf(“n”);printf(“%6d”,fi);,f0f1f2f3f4f5:f19,2,3,5,8,6765,i=2f2=f0+f1,i=3f3=f1+f2,i=4f4=f2+f3,例3:用冒泡排序法对6个数进行排序(从小到大),a0a1a2a3a4a5,2,7,7,5,4,7,1,4,5,1,5,1,4,1,2,冒泡排序方法:依次比较相邻的两个数,将小数放前面,大数放后面.n个数排序需要进行n-1轮比较,从第1轮到第n-1轮,各轮的比较次数依次为:n-1次、n-2次 1次,9,9

6、,9,9,9,7,2,5,4,1,初始状态,第1轮,第2轮,第3轮,第4轮,第5轮,7,#include main()int a6,i,j,t;for(i=0;iaj+1)t=aj;aj=aj+1;aj+1=t;for(i=0;i6;i+)printf(“%3d”,ai);,输入6个数据,用嵌套的for循环实现排序外层循环控制进行几轮比较内层循环控制每一轮的比较次数,如果前面的数大于后面的数,则进行交换,输出排序后的6个数据,a0a1a2a3a4a5,第1轮,第2轮,第3轮,第4轮,第5轮,从这道例题中我们发现,在进行完第二轮比较后,实际上排序已经完成了,从第三轮开始,后面的比较都是多余的,在

7、这种情况下我们希望可以终止比较.,初始状态,为了解决问题,我们在程序中设置一个变量flag,用它记录在一轮比较中是否进行了交换在每轮比较开始前flag=0,如果在此轮比较中进行了交换,则flag=1,在一轮比较结束后,判断flag的值是否为1,如果值为0,说明在此轮比较中没有进行交换(即已经完成排序了),此时可以终止循环(即结束排序)如果flag的值为1,则要继续进行排序,#include main()int a6,i,j,t,flag;for(i=0;iaj+1)t=aj;aj=aj+1;aj+1=t;flag=1;i+;while(flag);for(i=0;i6;i+)printf(“%

8、3d”,ai);,7.2 二维数组的定义和使用,一、二维数组的定义 1.概念:一个一维数组,它的每一个元素都是类型相同 的一维数组,就形成一个二维数组,2.定义形式:类型标识符 数组名 常量表达式1 常量表达式2 如:int a34;,a0a1a2,3.存储形式:数组的元素在内存中是连续存放的 int a33;的存放形式如下:,a10a11a12,a20a21a22,a00a01a02,a00a01a02a10a11a12a20a21a22,101010121014101610181020102210241026,二、二维数组的引用 数组元素的表示形式:数组名 下标 下标,注意:(1)每个下标

9、都要用 括起来 如 a 2 1 不能写成 a 2,1(2)下标不要超过定义的范围,三、二维数组的初始化 1.分行初始化 int a34=1,2,3,4,5,6,7,8,9,10,11,12;此方法较直观,第一对 内的数据赋给 第一行数组元素,以此类推,2.按数据的排列顺序对数组元素赋初值 int a34=1,2,3,4,5,6,7,8,9,10,11,12 将数据依次赋给元素 a00,a01 a23,注意:此方法数据没有明显的界限,当数据较多时容易出错,3.对数组的部分元素赋初值 int a34=1,2,3,0,4;,int a34=1,2,3,4,5,6;,4.对数组的全部元素赋初值时可以省

10、略第一维的长度 系统会根据数据的个数和第二维的长度自动求出 第一维的长度 int a 4=1,2,0,3,4,5;int b 2=1,2,3,4,5,6,7,8;,数组a 第一维长度为 3,数组b 第一维长度为 4,四、二维数组程序举例,例5:找出矩阵中最大的数,并输出其行号和列号,max,0,row,0,col,5,9,3,0,12,1,2,#include main()int i,j,row=0,col=0,max;int a34=5,2,0,9,3,7,12,6,10,4,1,8;max=a00;for(i=0;imax)max=aij;row=i;col=j;printf(“max=%

11、dn”,max);printf(“max=a%d%dn”,row,col);,输出:max=12max=a12,37126,10418,5209,例6:将一个矩阵进行转置(即原来的行变为列),#include main()int a34,b43,i,j;for(i=0;i3;i+)for(j=0;j4;j+)scanf(“%d”,输入数组a,进行矩阵转置,输出数组b,a02,b20,a21,b12,7.3字符数组,例7 打印以下的杨辉三角形。(要求打印出10行),11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1.,main()int y1010,i,j;for(i=

12、0;i10;i+)yi0=1;yii=1;for(i=2;i10;i+)for(j=1;j=i-1;j+)yij=yi-1j+yi-1j-1;for(i=0;i10;i+)for(j=0;j=i;j+)printf(“%5d”,yij);printf(“n”);,main()int y1111,i,j;for(i=1;i=10;i+)yi1=1;yii=1;for(i=3;i=10;i+)for(j=2;j=i-1;j+)yij=yi-1j+yi-1j-1;for(i=1;i=10;i+)for(j=1;j=i;j+)printf(“%5d”,yij);printf(“n”);,7.3 字符数

13、组,一、字符数组和字符串 1.字符数组定义:char c10;2.字符串:由若干个有效字符组成的序列 有效字符包括字母,数字,专用字符,转义字符 如:“bfer”“a45-7”“mtkn”,3.字符串的存储 C语言中没有专门的字符串变量,因此字符串存放在字符数组中,字符串以“0”作为结束标志,例:char c5;,c0=O;c1=K;c2=!;,c0=O;c1=K;c2=!;c3=0;,注意:字符数组与字符串并不相同,二、字符数组的初始化 1.为数组中的元素指定初值 char c8=H,e,l,l,o;,如果对数组全部元素指定初值,则可以省略数组的长度char c=H,e,l,l,o;,2.对

14、字符数组指定字符串初值,char c8=“Hello”;char c8=“Hello”;char c8=H,e,l,l,o,0;,char c=“Hello”;,char c6=“Hello”;,char c5=“Hello”;,错误的初始化,注意:初始化时数组的长度应足够大,确保可以容纳所有字符和结束标志0,三、字符串的输入1.输入单个字符 char c8;int i;scanf(“%c%c%c”,for(i=0;i8;i+)scanf(“%c”,2.输入一个字符串 scanf(“%s”,c);说明:用格式字符%s 输入字符串,字符数组变量c不需要 加地址运算符&,因数组名本身代表数组的首地

15、址,注意:(1)从键盘输入字符串时不加“”(2)用scanf 输入字符串时,空格和回车符都会作为 字符串的分隔符,即scanf不能用来输入包含有 空格的字符串,3.字符串输入函数 gets(字符数组)如:gets(c);,说明:输入有空格的字符串时应使用函数gets,它会读入全部字符直到遇到回车符为止,例:int i;char c8;for(i=0;i8;i+)scanf(“%c”,假设输入为:abcd efgh,注意:用gets输入字符串时,若输入字符数目大于字符数组的 长度,多出的字符则会存放在数组的合法存储空间之外,四、字符串的输出1.输出单个字符,char c8;int i;print

16、f(“%c%c”,c0,c1);for(i=0;i8;i+)printf(“%c”,ci);,2.输出字符串 printf(“%s”,c);,注意:输出时不包括字符0,如果一个字符串中有多个0 则输出时遇到第一个0即认为字符串结束,3.字符串输出函数 puts(字符数组)一次输出一个字符串,输出时将0自动转换成换行符,例:char s15=“abc”,s210=“defg”;printf(“%s%sn”,s1,s2);puts(s1);puts(s2);,输出结果:abcdefgabcdefg,例:int i;char c8;gets(c);for(i=0;i8;i+)printf(“%c”,

17、ci);printf(“n”)puts(c);printf(“%s”,c);,假设输入为:abcd efgh,输出结果:abcd efgabcd efghabcd efgh,五、字符串处理函数(使用字符串函数时要写#include)1.字符串拷贝函数 注意:C语言不允许用赋值表达式对字符数组赋值 char s15=“abc”,s23,s38;s2=“abc”;s3=s1;,/*赋值与初始化不同*/,/*对s2,s3 的赋值都是非法的*/,希望字符数组s2或s3中也存放字符串“abc”不能用赋值而要用字符串拷贝函数,格式:strcpy(字符数组变量1,字符串2)作用:将字符串2中的字符复制到字符

18、数组1中(3)说明:字符数组1 必须足够大 字符串可以是字符串常量,也可以是字符数组变量 拷贝时0也一起拷贝,例:char s15=“abc”,s23,s38;strcpy(s3,s1);strcpy(s2,s1);,s1,s3,s2,函数strncpy(字符数组1,字符串2,n)作用:将字符串2的前n个字符复制到字符数组1 中例:char c110,c2=“abcdef”;strncpy(c1,c2,3);,c1,c2,a b c 0,2.字符串连接函数(1)格式:strcat(字符数组变量1,字符串2)(2)作用:将字符串2中的字符连接到字符串1 的后面,产生的 新字符串仍存放在字符数组1

19、 中(3)说明:连接时将字符串1 末尾的0将去掉,而在连接后的 新字符串末尾添加0 注意:字符数组1要足够大,例:char s110=“abc”,s2=“def”;strcat(s1,s2);strcat(s1,“gh”);,s1,s2,d,e,f,0,g,h,0,3.字符串比较函数(1)格式:strcmp(字符串1,字符串2)(2)作用:比较两个字符串的大小(3)说明:两个字符串可能是字符串常量或字符数组变量 两个字符串比较时,从字符串中的第一个字符开始逐个 比较其ASCII码值,直到出现不同字符或出现0为止 比较的结果由函数值带回,str1=str2 函数值为0str1 str2 函数值为

20、正数str1 str2 函数值为负数,例:int n1,n2,n3;char s15,s25;n1=strcmp(“abc”,“def”);strcpy(s1,“dfg”);strcpy(s2,“you”);n2=strcmp(s1,“def”);n3=strcmp(s1,s2);,字符a与d比较n1=-3(97-100),先d与d比较,相同,然后f 与e比较n2=1(102-101),字符d与y比较n3=-21(100-121),s1,s2,4.测字符串长度函数 格式:strlen(字符串)作用:测出字符串中实际字符的个数(不包括0),例:int len1,len2;char s10;len

21、1=strlen(“computer”);gets(s);len2=strlen(s);,5.字符串中大、小字母转换 strlwr(字符串)将字符串中大写字母换成小写字母 strupr(字符串)将字符串中小写字母换成大写字母,作业:7.3 7.4 7.5 7.11上机:7.6 7.10,作业6.14main()int i,j,k;for(i=0;i=3;i+)/*上面4行*号*/for(j=0;j=2-i;j+)/*输出*前面空格*/printf(“);for(k=0;k=2*i;k+)printf(“*”);printf(“n”);for(i=0;I=2;i+)/*下面3行*号*/for(j=0;j=i;j+)printf(“);for(k=0;k=4-2*i;k+)printf(“*”);printf(“n”);,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号