《(中职)C语言程序设计案例教程 二维数组ppt课件.pptx》由会员分享,可在线阅读,更多相关《(中职)C语言程序设计案例教程 二维数组ppt课件.pptx(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、YCF正版可修改PPT(中职)C语言程序设计案例教程 二维数组ppt课件CONTENTS 目 录提出问题 引入新课自主学习 明确考点案例分析 交流提升仿真演练 体验探索提出问题 引入新课PART 011、数学中的行列式是如何描述的?2、思考:一个学习小组有5个人,每个人有三门课的考试成绩。如何求全组分科的平均成绩和各科总平均成绩,如下表格中。提出问题 引入新课思考张王李赵周Math8561598576C7565638777Html9271709085自主学习 明确考点PART 02二维数组的定义格式为:;考点一:二维数组的定义说明:(1)确定二维数组的行数;确定二维数组的列数;(2)二维数组中
2、元素的存储和排列的顺序是:先存放第一行的元素,再存放第二行的元素,也就是整体按行从上至下存放,行内又按从左至右存放,依次类推;(3)二维数组行列长度与行列标号存在什么关系?二维数组的行下标和列下标都从0开始编号,行、列下标的最大值均比定义的行数、列数少1。二维数组的元素个数等于总行数与总列数之积。例如:inta34;定义名称为b的整型二维数组,数组分为3行4列,共有3412个元素考点一:二维数组的定义说明了一个三行四列的数组,数组名为a,其下标变量的类型为整型。该数组的下标变量共有12个,即:各元素的排列顺序依次为:a00,a01,a02,a03a10,a11,a12,a13a20,a21,a
3、22,a23二维数组初始化与一维数组类似,二维数组可按行分段赋值,也可连续赋值。例如对数组a53:(1)按行分段赋值可写为:inta53=80,75,92,61,65,71,59,63,70,85,87,90,76,77,85;(2)按行连续赋值可写为:inta53=80,75,92,61,65,71,59,63,70,85,87,90,76,77,85;这两种赋初值的结果是完全相同的。考点二:二维数组的初始化说明:1、可以只对部分元素赋初值,未赋初值的元素自动取0值。例如:inta33=0,1,0,0,2,3;赋值后的元素值为:2、如对全部元素赋初值,可以省略第一维的定义,但不能省略第二维的
4、定义。系统根据初始化的数据个数和第2维的长度可以确定第一维的长度。inta3=1,2,3,4,5,6;a数组的第一维的定义被省略,初始化数据共6个,第二维的长度为3,即每行3个数,所以a数组的第一维是2。考点二:二维数组的初始化一般,省略第一维的定义时,第一维的大小按如下规则确定:初值个数能被第二维整除,所得的商就是第一维的大小;若不能整除,则第一维的大小为商再加1。例如,inta3=1,2,3,4;等价于:inta23=1,2,3,4;例如:inta33=1,2,3,4,5,6,7,8,9;可以等价为:inta3=1,2,3,4,5,6,7,8,9;4、数组是一种构造类型的数据。二维数组可以
5、看作是由一维数组的嵌套而构成的。设一维数组的每个元素都又是一个数组,就组成了二维数组。当然,前提是各元素类型必须相同。根据这样的分析,一个二维数组也可以分解为多个一维数组。语言允许这种分解。如二维数组a34,可分解为三个一维数组,其数组名分别为:a0a1a2对这三个一维数组不需另作说明即可使用。这三个一维数组都有4个元素,例如:一维数组a0的元素为a00,a01,a02,a03。必须强调的是,在定义了a为二维数组以后,a0,a1,a2是对应行的数组名,是三个一维数组。考点二:二维数组的初始化考点三:二维数组元素的使用二维数组的元素也称为双下标变量,其表示的形式为:下标表达式1下标表达式2其中下
6、标为整型常量或整型表达式,表示该元素在数组中的位置,且行、列下标都是从0开始编号,行下标和列下标的最在值无比定义的行数、列数少1。例如:inta45;则a34表示a数组第三行第四列的元素。说明:(1)数组必须先定义后引用,并且只能引用数组元素而不能一次引用整个数组。(2)对二维数组的所有元素进行处理(数组元素的输入输出),常与循环语句相配合,进行逐行逐列扫描控制,一般分为两层,外层循环控制行的扫描,设置行下标为循环变量,内层循环控制行内列的扫描,设置列下标变量作为循环变量,完成行内每列元素的控制。【例1】一个学习小组有5个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。考点
7、三:二维数组元素的使用解析:解析:可设一个二维数组a53存放五个人三门课的成绩。再设一个一维数组v3存放所求得各分科平均成绩,设变量average 为全组各科总平均成绩。编程如下:张王李赵周Math8561598576C7565638777Html9271709085main()int i,j;float s=0,average,v3,a53;printf(input scoren);for(i=0;i3;i+)for(j=0;j5;j+)scanf(%f,&aji);s=s+aji;/求总分 vi=s/5;/求平均成绩,并把平均成绩放入数组V中 s=0;/下个学生的总分要从0开始 avera
8、ge=(v0+v1+v2)/3;printf(math:%fn c languag:%fnhtml:%fn,v0,v1,v2);printf(total:%fn,average);考点三:二维数组元素的使用运行结果为:input score80 61 59 85 7675 65 63 87 7792 71 70 90 85math:72.199997c languag:73.400002html:81.599998total:75.733330【例2】数组元素的转置问题:形成一个3行4列数组,将一个3行4列数组转置后输出。考点三:二维数组元素的使用main()inta34,b43;inti,j
9、;for(i=0;i3;i+)for(j=0;j4;j+)scanf(%d,&aij);bji=aij;printf(数组a:n);for(i=0;i3;i+)for(j=0;j4;j+)printf(%4d,aij);printf(n);printf(数组b:n);for(i=0;i4;i+)for(j=0;j3;j+)printf(%4d,bij);printf(n);【例3】在二维数组a中选出各行最大的元素组成一个一维数组b。a=(31687654321110810251237)b=(8710837)考点三:二维数组元素的使用本题的编程思路是,在数组A的每一行中寻找最大的元素,找到之后把
10、该值赋予数组B相应的元素即可。程序如下:main()inta4=3,16,87,65,4,32,11,108,10,25,12,27;intb3,i,j,k;for(i=0;i=2;i+)k=ai0;for(j=1;jk)k=aij;bi=k;printf(narraya:n);for(i=0;i=2;i+)for(j=0;j=3;j+)printf(%5d,aij);printf(n);printf(narrayb:n);for(i=0;i=2;i+)printf(%5d,bi);printf(n);案例分析 交流提升PART 03【例1】、分析以下程序的运行后的输出结果#includema
11、in()staticintm,n,k,b66;b01=1;for(m=1;m6;m+)for(n=1;n=m;n+)bmn=bm-1n-1+bm-1n;printf(%-5d,bmn);printf(n);【例2】、分析以下程序的运行后输出结果#includemain()inta66,i,j;for(i=1;i6;i+)for(j=1;j6;j+)aij=(i/j)*(j/i);for(i=1;i6;i+)for(j=1;j6;j+)printf(%2d,aij);printf(n);getch();仿真演练,体验探索PART 041、以下能对二维数组a进行正确初始化的语句是()。A)inta
12、2=1,0,1,5,2,3;B)inta3=1,2,3,4,5,6;C)inta24=1,2,3,4,5,6;D)inta3=1,0,1,1,1;2、)以下能正确定义二维数组的是()A)inta3;B)inta3=2*3;C)inta3=;D)inta23=1,2,3,4;3、以下程序运行后的输出结果是_。main()inta44=1,2,3,4,5,6,7,8,11,12,13,14,15,16,17,18;inti=0,j=0,s=0;while(i+4)if(i=2|i=4)continue;j=0;dos+=aij;j+;while(j4);printf(%dn,s);4、有以下程序#
13、includemain()intnum44=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,i,j;for(i=0;i4;i+)for(j=1;j=i;j+)printf(%4c,);for(j=;j4;j+)printf(%4d,numij);printf(n);若要按以下形式输出数组右上半三角1234678111216则在程序下划线处应填入的是()A)i-1B)iC)i+1D)4-i5、阅读以下程序,其输出结果是()。#includemain()inti,j,a3=1,2,3,4,5,6,7,8,9;for(i=0;i3;i+)for(j=i+1;j3;j+)
14、aji=0;for(i=0;i3;i+)for(j=i+1;j3;j+)printf(%d,aij);printf(n);6、以下程序是求矩阵a,b的乘积,结果存放在矩阵C中并按矩阵形式输出,请填空使程序完整。提示:提示:分析:两个矩阵相乘的条件是前一个矩阵的列数和后一个矩阵的行数相等,乘积仍然是矩阵。即若A矩阵有m行p列,B矩阵有p行n列,则它们的乘积C矩阵有m行n列。设A、B、C矩阵用3个2维数组表示:A数组有3行2列,B数组有2行3列,则C数组有3行3列。如:C00=A00*B00+A01*B10;C01=A00*B01+A01*B11;C02=A00*B02+A01*B12;C10=A
15、10*B00+A11*B10;依次类推即可求出C矩阵其它元素的值。从以上算法可以看出,需要3重循环(i、j、k)才能计算C矩阵的各元素。#includemain()inta32=1,2,3,4,5,6,b23=7,8,9,10,11,12;inti,j,k,s,c33;for(i=0;i3;i+)for(j=0;j3;j+)s=0;for(k=0;k2;k+)s+=aik*bkj;cij=s;for(i=0;i3;i+)for(j=0;j3;j+)printf(%6d,cij);printf(n);编程填空练习:【例1】求一个矩阵主辅对角线元素之和。以4*4矩阵为例,参考源程序如下:main(
16、)inti=0,j=0,a44,s1,s2;for(i=0;i4;i+)for(j=0;j4;j+)scanf(%d,&aij);s1=+;s2=+;printf(s1=%d,s2=%dn,s1,s2);【例2】求34矩阵的最小值,及其所在的位置(行号和列号)。main()inta4=2,-8,20,0,9,5,-38,-34,10,32,4,-3;inti,j,row,col,min;min=a00;row=0;col=0;for(i=0;i3;i+)for(j=0;jaij)min=aij;printf(min=%d,row=%d,col=%d,min,row,col);运行结果:min=-38,row=1,col=2【例3】计算44阶矩阵的周边元素值之和。main()inta44,i,j,sum;sum=0;for(i=0;i4;i+)for(j=0;j4;j+)scanf(%d,);/*输入左图示数据*/for(i=0;i4;i+)for(j=0;j4;j+)if()sum+=aij;printf(sum=%dn,sum);运行结果:sum=1021 2 3 45 6 7 89 10 11 1213 14 15 16