(中职)计算机程序设计(C语言)第六章第2节教学课件工信版.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《(中职)计算机程序设计(C语言)第六章第2节教学课件工信版.ppt》由会员分享,可在线阅读,更多相关《(中职)计算机程序设计(C语言)第六章第2节教学课件工信版.ppt(35页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、YCF(中职)计算机程序设计(C语言)第六章第2节教学课件工信版6.2 6.2 二维数组二维数组6.2.1 二维数组的定义与初始化二维数组的定义与初始化1二维数组的定义和存储方式二维数组的定义和存储方式一般形式:一般形式:类型说明符类型说明符 数组名数组名常量表达式常量表达式1常量表达式常量表达式2例如:例如:int a34;该数组的下标变量共有该数组的下标变量共有34个,即:个,即:a00,a01,a02,a03 a10,a11,a12,a13 a20,a21,a22,a23 二维数组初始化也是在类型说明时给各下标变量二维数组初始化也是在类型说明时给各下标变量赋以初值。二维数组可按行分段赋值
2、,也可按行连续赋以初值。二维数组可按行分段赋值,也可按行连续赋值。赋值。例如例如:对数组对数组a53:按行分段赋值可写为按行分段赋值可写为:int a53=80,75,92,61,65,71,59,63,70,85,87,90,76,77,85;按行连续赋值可写为按行连续赋值可写为:int a53=80,75,92,61,65,71,59,63,70,85,87,90,76,77,85;这两种赋初值的结果是完全相同的。这两种赋初值的结果是完全相同的。2二维数组的初始化二维数组的初始化一维存储器中存放二维数组,有两种方式:一维存储器中存放二维数组,有两种方式:1.按行排列按行排列:即放完一行之后
3、顺次放入第二行;即放完一行之后顺次放入第二行;2.按列排列按列排列:放完一列之后再顺次放入第二列。放完一列之后再顺次放入第二列。在在C语言中,二维数组是按行排列的。即,先语言中,二维数组是按行排列的。即,先存放存放a0行,再存放行,再存放a1行,最后存放行,最后存放a2行。每行。每行中有四个元素也是依次存放。由于数组行中有四个元素也是依次存放。由于数组a说明为说明为int类型,该类型占两个字节的内存空间,所以每类型,该类型占两个字节的内存空间,所以每个元素均占有两个字节。个元素均占有两个字节。(1)可以只对部分元素赋初值,未赋初值的元)可以只对部分元素赋初值,未赋初值的元素自动取素自动取0值。
4、值。(2)如对全部元素赋初值,则第一维的长度可)如对全部元素赋初值,则第一维的长度可以不给出。以不给出。(3)数组是一种构造类型的数据。二维数组可)数组是一种构造类型的数据。二维数组可以看作是由一维数组的嵌套而构成的。设一维数以看作是由一维数组的嵌套而构成的。设一维数组的每个元素又都是一个数组,就组成了二维数组的每个元素又都是一个数组,就组成了二维数组。当然,前提是各元素类型必须相同。根据这组。当然,前提是各元素类型必须相同。根据这样的分析,一个二维数组也可以分解为多个一维样的分析,一个二维数组也可以分解为多个一维数组。对这三个一维数组不需另作说明即可使用。数组。对这三个一维数组不需另作说明即
5、可使用。说明:说明:#include“stdio.h”main()int i,j,s=0;float average,v3,int 53=80,75,92,61,65,71,59,63,70,85,87,90,76,77,85;for(i=0;i3;i+)for(j=0;j5;j+)s=s+aji;vi=s/5.0;s=0;average=(v0+v1+v2)/3.0;printf(math:%fnc languag:%fndFoxpro:%fn,v0,v1,v2);printf(total:%fn,average);【例【例6.13】求各科平均分和总成绩平均分。】求各科平均分和总成绩平均分。
6、【例【例6.14】一个学】一个学习习小小组组有有5个人,每个人有个人,每个人有三三门课门课的考的考试试成成绩绩,成,成绩绩如表如表6-2-1所示。求所示。求全全组组分科的平均成分科的平均成绩绩和各科和各科总总平均成平均成绩绩。【分析】可【分析】可设设一个二一个二维维数数组组a53存放五个人三存放五个人三门课门课的成的成绩绩。再。再设设一个一一个一维维数数组组v3存放所求得各分科平存放所求得各分科平均成均成绩绩,设变设变量量average 为为全全组组各科各科总总平均成平均成绩绩。表表6-2-1 5个人三门课考试的成绩表个人三门课考试的成绩表#include main()int i,j,s=0;
7、float average,v3,a53;printf(input scoren);for(i=0;i3;i+)for(j=0;j5;j+)scanf(%d,&aji);s=s+aji;vi=s/5.0;s=0;average=(v0+v1+v2)/3.0;printf(math:%fnc languag:%fndbase:%fn,v0,v1,v2);printf(total:%fn,average);程序代码如下:程序代码如下:二维数组的元素也称为双下标变量,其表示的形二维数组的元素也称为双下标变量,其表示的形式为:式为:数组名数组名下标下标下标下标其中下标应为整型常量或整型表达式。其中下标
8、应为整型常量或整型表达式。例如:例如:a34 表示表示a数组三行四列的元素。数组三行四列的元素。下标变量和数组的比较:下标变量和数组的比较:说明在形式中有些相似,但这两者具有完全说明在形式中有些相似,但这两者具有完全不同的含义。数组说明的方括号中给出的是某一维不同的含义。数组说明的方括号中给出的是某一维的长度,即可取下标的最大值;而数组元素中的下的长度,即可取下标的最大值;而数组元素中的下标是该元素在数组中的位置标识。前者只能是常量,标是该元素在数组中的位置标识。前者只能是常量,后者可以是常量,变量或表达式。后者可以是常量,变量或表达式。6.2.2 二维数组的引用二维数组的引用6.2.3 二维
9、数组的应用二维数组的应用极点与鞍点问题极点与鞍点问题【例【例6.15】随机产生】随机产生20个两位数存入数组个两位数存入数组int a45中,求二中,求二维数组维数组a中所有元素的最大值、最小值及其所在的位置。中所有元素的最大值、最小值及其所在的位置。#include#include#include void main()srand(unsigned)time(NULL);for(i=0;i4;i+)for(j=0;j5;j+)aij=rand()%90+10;for(i=0;i4;i+)for(j=0;j5;j+)printf(%5d,aij);printf(n);/求极值及其位置求极值及其
10、位置 min=max=a00;minh=minl=maxh=maxl=0;for(i=0;i4;i+)for(j=0;jmax)max=aij;maxh=i;maxl=j;if(aijmin)min=aij;minh=i;minl=j;/打印极值及其位置打印极值及其位置 printf(max=a%d%d=%dn,maxh,maxl,max);printf(min=a%d%d=%dn,minh,minl,min);#include#include#include main()int mat66,i,j;int h,l;srand(unsigned)time(NULL);for(i=0;i6;i+
11、)for(j=0;j6;j+)matij=rand()%90+10;printf(%4d,matij);printf(n);【例【例6.16】随机产生】随机产生36个两位数存入数组个两位数存入数组int mat66中中,找出二维数组找出二维数组mat中的极点和鞍点。中的极点和鞍点。分析:若某元素在所在行相邻两点中与所在列相邻两点中分析:若某元素在所在行相邻两点中与所在列相邻两点中均为最大或最小,则该点为极点。均为最大或最小,则该点为极点。若某元素在所在行(或列)相邻两点中为最大,同时该元若某元素在所在行(或列)相邻两点中为最大,同时该元素在所在列(或行)相邻两点中为最小,则该点为鞍点。素在所在
12、列(或行)相邻两点中为最小,则该点为鞍点。for(i=1;i5;i+)for(j=1;jmatij-1&matijmatij+1)/比左右还大比左右还大 h=3;else if(matijmatij-1&matijmati-1j&matijmati+1j)/比上下都大比上下都大 l=3;else if(matijmati-1j&matijmati+1j)/比上下都小比上下都小 l=1;else /一大一小一大一小 l=0;switch(h+l)case 6:printf(极大值点极大值点=%d,row=%d,col=%dn,matij,i,j);break;case 2:printf(极小值点
13、极小值点=%d,row=%d,col=%dn,matij,i,j);break;case 4:printf(鞍点鞍点=%d,row=%d,col=%dn,matij,i,j);break;【例【例6.176.17】编编程打印如程打印如图图6-2-16-2-1所示的所示的图图形:形:1 2 3 4 5 1 2 3 4 5 2 3 4 5 1 2 3 4 5 1 3 4 5 1 2 3 4 5 1 2 4 5 1 2 3 4 5 1 2 3 图图6-2-16-2-1程序代程序代码码如下:如下:#include#include main()main()int i,j,a45;int i,j,a45;
14、for(j=0;j5;j+)/for(j=0;j5;j+)/对对第一行元素第一行元素赋值赋值 a0j=j+1;a0j=j+1;for(i=1;i4;i+)/for(i=1;i4;i+)/对对第二第二 四行元素四行元素赋值赋值 for(j=0;j5;j+)for(j=0;j5;j+)aij=ai-1(j+1)%5;aij=ai-1(j+1)%5;for(i=0;i4;i+)/for(i=0;i4;i+)/打印二打印二维维数数组组 for(j=0;j5;j+)for(j=0;j5;j+)printf(%2d,aij);printf(%2d,aij);printf(n);printf(n);6.2.
15、4 二维数组的应用二维数组的应用图形打印图形打印【分析】本题中第二行起每一行元素的值都是上一【分析】本题中第二行起每一行元素的值都是上一行元素循环左移一个元素后的结果。行元素循环左移一个元素后的结果。【例【例6.186.18】编编程打印如程打印如图图6-2-26-2-2所示的所示的图图形:形:AAAAAAAAAAAAAAABBBBBAABBBBBAABCCCBAABCCCBAABCDCBAABCDCBAABCCCBAABCCCBAABBBBBAABBBBBAAAAAAAAAAAAAAA图图6-2-26-2-2程序代程序代码码如下:如下:#include#include main()main()
16、int i,j,k;int i,j,k;char a77;char a77;for(k=0;k=7/2;k+)for(k=0;k=7/2;k+)for(i=k;i7-k;i+)for(i=k;i7-k;i+)for(j=k;j7-k;j+)for(j=k;j7-k;j+)aij=65+k;aij=65+k;for(i=0;i7;i+)/for(i=0;i7;i+)/打印二打印二维维数数组组 for(j=0;j7;j+)for(j=0;j7;j+)printf(%c,aij);printf(%c,aij);printf(n);printf(n);【分析】本题可用复盖法实现,首先将所有元素【分析】
17、本题可用复盖法实现,首先将所有元素置为字符置为字符A,然后第二圈置为字符,然后第二圈置为字符B,从而从而实现所有元素的赋值。实现所有元素的赋值。1 1 1 1 1 1 1 2 1 1 2 1 1 3 3 1 1 3 3 1 1 4 6 4 1 1 4 6 4 1 图图6-2-36-2-3【分析】二【分析】二维维数数组赋值组赋值情况如表情况如表6-2-26-2-2所示:所示:1 11 11 11 12 21 11 13 33 31 11 14 46 64 41 1表表6-2-26-2-2ai-1j+ai-1j-1 (ai-1j+ai-1j-1 (其它其它)【例【例6.19】编程打印如图】编程打印
18、如图6-2-3所示的杨辉三角形。所示的杨辉三角形。由表可见:由表可见:aij=1 (j=0和和j=i)1 11 11 11 12 21 11 13 33 31 11 14 46 64 41 1表表6-2-26-2-2#include stdio.hmain()int a55,i,j;for(i=0;i5;i+)for(j=0;j=i;j+)if(j=0|i=j)aij=1;else aij=ai-1j+ai-1j-1;for(i=0;i5;i+)for(j=0;j40-4*i;j+)printf();for(j=0;j=i;j+)printf(%-9d,aij);/%-9d表示输出结果左对齐表
19、示输出结果左对齐 printf(n);程序代码如下:程序代码如下:【例【例6.19】编编程打印如程打印如图图6-2-4所示的所示的5阶阶魔方。魔方。17241815235714164613202210121921311182529【分析】所【分析】所谓谓“奇数奇数阶阶魔方魔方阵阵”是指是指n n为为不小不小于于3 3的奇数的魔方的奇数的魔方阵阵。我。我们们不不难发现难发现魔方魔方阵阵的的特点:所填入的特点:所填入的n n 2 2个不同整数依次个不同整数依次为为1 1、2 2、3 3、n n 2 2;各行、列和;各行、列和对对角角线线上的数字上的数字虽虽各不各不相同,但其和却是相同的;数字在相同
20、,但其和却是相同的;数字在阵阵列中的次列中的次序,并没有遵从序,并没有遵从阵阵列列单单元的行、列下元的行、列下标标的的顺顺序,序,但数字但数字“1”“1”却始却始终终出出现现在在阵阵列第一行的正中列第一行的正中间间位置,而数字位置,而数字“n“n 2 2”也始也始终终出出现现在在阵阵列第列第n n行的行的正中正中间间位置,位置,这说这说明明阵阵列中的数字排列列中的数字排列应该应该是是有一定有一定规规律的。律的。通过对奇数阶魔方阵的分析,其中的数字排列有如下的规律:通过对奇数阶魔方阵的分析,其中的数字排列有如下的规律:(1)自然数)自然数1出现在第一行的正中间;出现在第一行的正中间;(2)若填入
21、的数字在第一行(不在第)若填入的数字在第一行(不在第n列),则下一个数字在第列),则下一个数字在第n行(最后一行)行(最后一行)且列数加且列数加1(列数右移一列);(列数右移一列);(3)若填入的数字在该行的最右侧,则下一个数字就填在上一行的最左侧;)若填入的数字在该行的最右侧,则下一个数字就填在上一行的最左侧;(4)一般地,下一个数字在前一个数字的右上方(行数少)一般地,下一个数字在前一个数字的右上方(行数少1,列数加,列数加1););(5)若应填的地方已经有数字或在方阵之外,则下一个数字就填在前一个数字)若应填的地方已经有数字或在方阵之外,则下一个数字就填在前一个数字的下方。(一般地,的下
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 程序设计 语言 第六 教学 课件 工信版
![提示](https://www.deliwenku.com/images/bang_tan.gif)
限制150内