c语言程序设计第5章.ppt

上传人:tia****nde 文档编号:11495424 上传时间:2020-04-25 格式:PPT 页数:68 大小:1.69MB
返回 下载 相关 举报
c语言程序设计第5章.ppt_第1页
第1页 / 共68页
c语言程序设计第5章.ppt_第2页
第2页 / 共68页
c语言程序设计第5章.ppt_第3页
第3页 / 共68页
点击查看更多>>
资源描述
肖洁大连工业大学管理学院,高级语言程序设计,第五章数组,一维数组,1,字符串,2,3,二维数组,5.1一维数组,一、一维数组的定义,二、一维数组元素的引用,三、一维数组的初始化,五、数组与函数,四、一维数组的程序举例,一、一维数组的定义,数组是一组有序的、类型相同的数据的集合,这些数据被称为数组的元素。,一、一维数组的定义,数组是同类型变量的集合,共用一个名字,用下标区分;每个变量称作数组元素;按下标递增顺序在内存中存放;使用几个下标区分变量,就是几维数组。一维数组与数学中的数列对应,二维数组与矩阵对应。,一、一维数组的定义,一维数组定义格式:类型标识符数组名数组大小;,数组必须先定义、后使用。,说明数组元素类型,floatmark100;charstr200;intstudent_age10;intx=8,y=3;intax+y;,一、一维数组的定义,intstudent_age10;,下标的序号从0开始,注意没有student_age10元素,二、一维数组元素的引用,数组元素的引用形式:数组名下标,整型常量、整型变量或整型表达式。,例:a3=a0+ai+1;,下标指出在数组中第几个元素,下标不要越界,二、一维数组元素的引用,数组中的每个元素在功能上等价于一个一般的变量。例如:输入100个学生成绩,并求出总成绩。,m0m1m2m99,85,148,226,316,7950,82,7950,三、一维数组的初始化,方法:将初值依次写在花括号内。,如:inta5=2,4,6,8,10;,存储形式:,存储单元,三、一维数组的初始化,(1)给数组中部分元素赋初值,其他元素按0值处理。如:inta9=1,2;则a0=1,a1=2,a2a8值全为0。,(2)对数组元素全部赋值可以不指定长度。如:inta=0,1,2,3,5;等价于:inta5=0,1,2,3,5;,(3)初值的个数不能超过数组最大元素的个数。如:inta3=1,2,3,4;,说明:,四、一维数组的程序举例,例5.1用一个数组存储10个学生的年龄,然后分别按正序和反序显示它们。,四、一维数组的程序举例,修改程序段:for(i=Nelements-1;i=0;i-)printf(%6d,student_agei);printf(n);/*反序输出*/,一次运行结果:,四、一维数组的程序举例,例5.2顺序查找一个学生年龄的C程序。,#include#includeintmain(void)inti,aAge;intstudent_age=10,11,12,13,14,15,16,17,18,19;printf(“请输入要查找的年龄:”);scanf(“%d”,四、一维数组的程序举例,例5.2顺序查找一个学生年龄的C程序。,一次运行结果:,另一次运行结果:,四、一维数组的程序举例,例5.3用数组来处理求Fibonacci数列问题。数学表示:f(0)=f(1)=1,f(n)=f(n-2)+f(n-1)程序为:main()inti;intf20=1,1;for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;i20;i+)if(i%5=0)printf(“n”);printf(“%12d”,fi);,运行结果如下:11235813213455891442333776109871597258441816765,四、一维数组的程序举例,例5.4冒泡排序。(由小到大)p165,方法:将两个相邻数比较,大的调到后面。,四、一维数组的程序举例,例5.4冒泡排序动画演示。,四、一维数组的程序举例,由以上可推知:5个数要比较4轮第一轮中要进行两两比较4次第二轮中要进行两两比较3次若有n个数,则要进行n-1轮比较第i轮比较中要进行n-i次两两比较。,五、数组与函数,数组与函数之间关系:向函数的形参传送数组元素。调用函数后返回一个数组元素值。向函数的形参传送数组名(数组的地址)。函数对数组操作。,1.函数对数组操作,voidbubbleSort(void)/*冒泡排序函数*/inti,j,temp;for(j=0;jai+1)temp=ai;ai=ai+1;ai+1=temp;,2.向函数传递数组名(数组名作参数),#include#defineN8voiddisp(int);voidbubbleSort(intdN);intmain()intxN=9,8,3,7,5,2,6,1;bubbleSort(x);disp(x);return0;,函数声明语句中可以没有数组名字和数组大小,函数声明语句中也可以有数组名字和数组大小,用数组名作实参,用数组名作实参,voidbubbleSort(intaN)inti,j,temp;for(j=0;jai+1)temp=ai;ai=ai+1;ai+1=temp;voiddisp(intc)inti;printf(n排序结果:);for(i=0;i=N-1;i+)printf(%3d,ci);printf(n);,函数定义中数组可以不写出大小,2.向函数传递数组名(数组名作参数),函数定义中数组可以写出大小,实参,主调函数,被调函数,传地址值,形参,传送数组名(首元素的地址),数组名,数组名,2.向函数传递数组名(数组名作参数),由该程序可以得到如下结论:(1)实参向形参传送的是数组首元素的地址,使被调函数可以对主调函数建立的数组中的元素进行读写。(2)以数组名作参数时,有如下几点规则:函数原型必须指明数组类型,而数组的大小不是必须的;实参可以只写数组名,而这个数组名必须是已经定义为具有确定长度的数组名。,2.向函数传递数组名(数组名作参数),例编写函数求数组中所有元素的平均值。doubleaverage(inta,intn)inti;doubles=0;for(i=0;in;i+)s=s+ai;returns/n;主函数如何编写?main()intb4=1,2,3,4;doubleave;ave=average(b,4);printf(“ave=%f”,ave);,用另外一个参数表示数组的长度,2.向函数传递数组名(数组名作参数),5.2字符串,一、字符数组与字符串,二、字符串的输入输出,三、字符串处理函数,一、字符数组与字符串,字符数组的定义、初始化和元素的引用与一般的数组相同。,例如:charc10;则c为字符数组。,1.字符数组及其初始化当数组的元素类型为字符型时,被称为字符数组。,charc7=p,r,o,g,r,a,m;,chars=C,h,i,n,a;,2.字符串及其初始化在C语言中,把用一对双撇号括起来的零个或多个字符序列称为字符串常量。如:hello,A,等。,字符串结束标志0为最后一个元素。,一、字符数组与字符串,一个字符数组只有以0为最后一个元素时被成为字符串。,字符串的定义和初始化可以有如下几种形式:charstr16=C,h,i,n,a,0;charstr16=“China”;charstr16=“China”;charstr1=C,h,i,n,a,0;charstr1=“China”;charstr1=“China”;应当注意,定义字符串时,一定要注意给定的字符数组的大小要比实际存储的字符串中的有效字符数多1。,一、字符数组与字符串,二、字符串的输入输出,使用格式化输入输出函数(printf和scanf),用%c格式输入输出。使用格式化输入输出函数(printf和scanf),用%s格式输入输出。使用字符串处理函数puts()和gets()输入输出。,二、字符串的输入输出,使用格式化输入输出函数(printf和scanf),用%c格式输入输出。,for(i=1;i=10;i+)scanf(“%c”,逐个输入字符串a的每个元素,for(i=1;ia,三、字符串处理函数,例5.9输入5个字符串,输出其中最小的字符串。,三、字符串处理函数,#include#include#defineN10intmain(void)charstrN,minN;inti;printf(“先输入第1个字符串:”);gets(min);for(i=2;i0)strcpy(min,str);printf(“n最小的字符串是:%sn”,min);return0;,例5.9程序运行情况如下:,三、字符串处理函数,例5.10计算字符串长度。,intstrlenth(chars)inti=0,len=0;while(si+)len+;returnlen;,三、字符串处理函数,d,0,c,b,a,s,例5.11字符串复制。,三、字符串处理函数,voidstrcopy(chardest,charsrc)inti=0,j=0;while(desti+=srcj+)!=0);,5.3二维数组,一、二维数组定义,二、二维数组的初始化,三、二维数组元素的引用,四、向函数传送二维数组,五、二维数组的程序举例,例如:inta33;,一、二维数组定义,一、二维数组定义,(1)分行给二维数组赋初值。如:inta23=2,3,1,1,2,3;可以省略第1维的大小。inta3=2,3,1,1,2,3;,(2)将所有数据写在一个内,按顺序赋值,即按数组元素在内存中排列的顺序赋初值。如:inta23=2,3,1,1,2,3;,二、二维数组的初始化,设有数组a23,(3)可以对部分元素赋值。如:inta33=1,0,1,0,0,1;,inta23=5,6,7,8;,二、二维数组的初始化,二维数组元素表示形式:数组名下标1下标2下标1和下标2是整型常量、整型变量或整型表达式。其编号是从0开始的。,例如:若有inta1012,i=15;则使用a3*30,a1i-5都是合法的。,下标不要越界,三、二维数组的引用,四、向函数传送二维数组,例5.12成绩分析。,#defineSTDNUM4/*STDNUM表示学生号*/#defineCOURNUM3/*COURNUM表示课程号*/doublescoreSTDNUMCOURNUM=89,78,56,88,99,100,72,80,61,60,70,75;,voidStudAveScore(doubleaCOURNUM)introw,col;doubleSumScreCour;for(row=0;row=STDNUM-1;row+)SumScreCour=0;for(col=0;col=COURNUM-1;col+)SumScreCour+=arowcol;printf(“n学生%d的平均成绩是:%fn”,row+1,SumScreCour/COURNUM);,计算各学生的平均成绩函数,四、向函数传送二维数组,计算各门课程的平均成绩函数,voidCourAveScore(doublebCOURNUM)introw,col;doubleSumScreStud=0;for(col=0;col=COURNUM-1;col+)SumScreStud=0;for(row=0;row=STDNUM-1;row+)SumScreStud+=browcol;printf(“n课程%d的平均成绩是:%fn”,col+1,SumScreStud/STDNUM);,四、向函数传送二维数组,#defineSTDNUM4#defineCOURNUM3voidStudAveScore(doubleCOURNUM);voidCourAveScore(doublebCOURNUM);intmain(void)doublescoreSTDNUMCOURNUM=89,78,56,88,99,100,72,80,61,60,70,75;StudAveScore(score);/*传送实际数组名*/CourAveScore(score);return0;,主函数,四、向函数传送二维数组,例1将一个矩阵a23中的每个元素乘以2。,for(i=0;i2;i+)for(j=0;j3;j+)aij=aij*2;,五、二维数组程序举例,例2将一个矩阵a23转置存到另一个矩阵b32中。,分析:用数组a、b分别代表矩阵a、b;执行:bji=aij;即可完成转换。涉及到两个下标的,一般用两重循环。,五、二维数组程序举例,main()inta23=1,2,3,4,5,6;intb32,i,j;printf(“arraya:n”);for(i=0;i2;i+)for(j=0;j3;j+)printf(“%5d”,aij);bji=aij;printf(“n”);,printf(“arrayb:n”);for(i=0;i3;i+)for(j=0;j2;j+)printf(“%5d”,bij);printf(“n”);,运行结果如下:arraya:123456arrayb:142536,五、二维数组程序举例,main()inti,j,row=0,colum=0,max;inta34=1,2,3,4,9,7,4,6,-1,2,0,8;max=a00;for(i=0;imax)max=aij;row=i;colum=j;printf(“%max=%d,row=%d,colum=%dn”,max,row,colum);,运行结果为:max=9,row=1,colum=0,例3求34矩阵中最大元素的值及其所在行和列号。,五、二维数组程序举例,例4输出一个钻石图形。,五、二维数组程序举例,main()chardiamond5=,*,*,*,*,*,*,*,*;inti,j;for(i=0;i5;i+)for(j=0;j5;j+)printf(“%c”,diamondij);printf(“n”);,习题5.17有n个学生,每人考m门课,找出每门课成绩最高的学生的学号。,五、二维数组程序举例,#defineN14/*学生数*/#defineN24/*课程数*/#includeintmain(void)intnoN1;/*成绩最高学生的学号*/inti,j,num;doublepN1N2,max1,sum=0.0;,五、二维数组程序举例,for(j=0;jN2;j+)/*N2为课程数*/if(j=0)printf(请输入数学得分:n);elseif(j=1)printf(请输入物理得分:n);elseif(j=2)printf(请输入化学得分:n);elseprintf(请输入英语得分:n);for(i=0;iN1;i+)printf(No.%d?,i+1);scanf(“%lf”,/*输入所有学生的各门课程成绩*/,五、二维数组程序举例,求第j门课成绩的最高分数max1及总和sum,求第j门课成绩的最高分数获得者的学号存入no数组,for(j=0;jN2;j+)/*N2为课程数*/max1=p0j;for(i=0;iN1;i+)if(max1pij)max1=pij;sum=sum+pij;num=1;for(i=0;iN1;i+)if(max1=pij)nonum+=i+1;,五、二维数组程序举例,输出第j门课成绩的最高分数获得者的学号,if(j=0)printf(数学最高分为:%lfn,max1);printf(学号为:n);elseif(j=1)printf(物理最高分为:%lfn,max1);printf(学号为:n);elseif(j=2)printf(化学最高分为:%lfn,max1);printf(学号为:n);elseprintf(英语最高分为:%1fn,max1);printf(学号为:n);for(i=1;i=num-1;i+)printf(No.%dn,noi);,五、二维数组程序举例,printf(=n);printf(全部学生全部课程的总平均分数=%10.6lf,sum/N1/N2);return0;,本章要点,1.建立数组的概念;2.掌握一维数组和二维数组的定义、引用、存储结构和初始化方法;3.掌握一维和二维字符数组的输入输出;4.掌握字符串处理函数的使用;5.掌握数组与函数关系6.掌握用数组进行编程的技术。,1.C语言中数组的下标从0开始;2.C语言不进行下标的越界检查;3.数组名是地址;4.字符数组在定义时必须考虑到串结束符的位置;5.注意区别数组与简单变量初始化的方法,特别是字符数组的初始化方法;6.掌握运用字符串的操作函数。,本章注意问题,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!