第一篇:C语言运用一维数组和二维数组输出杨辉三角
C语言——运用一维数组和二维数组输出杨辉三角
**********一维数组**********
#include
#define n 10
int main()
{
}
int a[n]={1,1},i,j;printf(“%5dn%5d%5dn”,1,a[0],a[1]);for(i=1;i **********二维数组********** #include int main() { int a[30][30]={0},i,j,n=10; for(i=0;i<=n-1;i++) a[i][0]=1; for(i=1;i<=n-1;i++) for(j=1;j<=i;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i<=n-1;i++) { for(j=0;j<=i;j++) printf(“%5d”,a[i][j]); printf(“n”); } return 0; } 讲授 9.6二维数组和指针 2课时 掌握二维数组的地址表示方法 掌握指向数组元素的指针变量 掌握指向数组元素的指针变量 掌握用指向由m个元素组成的一维数组的指针变量 指向一维数组的指针变量 无 作业见后 一、二维数组的地址 例:定义二维数组int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}}; 则二维数组a是数组的数组,由3个一维数组所组成的,即3个元素:a[0],a[1],a[2]。而每个元素又是一个一维数组。 二、指向二维数组元素的指针变量 1、指向数组元素的指针变量 例1 用指向元素的指针变量输出二维数组元素的值 #include { int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int *p; for(p=a[0];p {if((p-a[0])%4==0)printf(″\n″); printf(″%4d″,*p); } }用指向由m个元素组成的一维数组的指针变量 例2 输出二维数组任一行任一列元素的值 #include int(*p)[4],i,j; p=a; scanf(“i=%d,j=%d”,&i,&j); printf(“a[%d,%d]=%d\n”,i,j,*(*(p+i)+j)); } 注意: 指向一维数组的指针变量的定义格式应写成:基类型(*p)[N] 上述语句int(*p)[4],代表p是一个指针变量,它指向包含4个整型元素的一维数组。*p两侧的小括号不可少,如果写成*p[4],由于[]运算级别高于*,*p[4]是指针数组。 p=a;表明p指向数组a中的第0行,此时p+1不是指向a[0][1],而是指向a[1],p的增值以一维数组的长度为单位,p+1地址就增加了8个字节。*(p+i)+j是a[i][j]的地址,这里的i是以一维数组的长度为单位,j则是以数组元素的长度为单位的。 复习 新授 讲授 复习默写 1、选择排序的基本思想 2、从键盘输入5个整数,使用选择法从小到大排序,编程实现。 一、二维数组的地址 例:定义二维数组int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}}; 则二维数组a是数组的数组,由3个一维数组所组成的,即3个元素:a[0],a[1],a[2]。而每个元素又是一个一维数组。设二维数组的首行的首地址为202_,则: 二、指向二维数组元素的指针变量 1、指向数组元素的指针变量 例1 用指向元素的指针变量输出二维数组元素的值 #include { int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int *p; for(p=a[0];p {if((p-a[0])%4==0)printf(″\n″); printf(″%4d″,*p); } } 注意:上例中如果对p赋值p=a[0];不能写成 p=a;因为此时a 是行指针,而p是列指针只能指向一个整型变量,a[0]是第0行的数组名,即第0行的首地址就是a[0][0]的地址。请学生思考上述赋值语句还可以写成什么? p=*a;p=&a[0][0];用指向由m个元素组成的一维数组的指针变量 例2 输出二维数组任一行任一列元素的值 #include int(*p)[4],i,j; p=a; scanf(“i=%d,j=%d”,&i,&j); printf(“a[%d,%d]=%d\n”,i,j,*(*(p+i)+j)); } 注意: 指向一维数组的指针变量的定义格式应写成:基类型(*p)[N] 上述语句int(*p)[4],代表p是一个指针变量,它指向包含4个整型元素的一维数组。*p两侧的小括号不可少,如果写成*p[4],由于[]运算级别高于*,*p[4]是指针数组。 小结 作业 p=a;表明p指向数组a中的第0行,此时p+1不是指向a[0][1],而是指向a[1],p的增值以一维数组的长度为单位,p+1地址就增加了8个字节。*(p+i)+j是a[i][j]的地址,这里的i是以一维数组的长度为单位,j则是以数组元素的长度为单位的。 例3: int(*t)[4],a[3][4]={{1,3,5,7}, {11,13,15,17},{21,23,25,27}};t = a;printf(“%d,%d”, **t, t[1][2]);t++;t++;printf(“%d”, **t); 运行结果:1,1521 【课堂小练习】 1、[202_.3.27]若有:int(*p)[3];则正确的是(D)A)定义了基类型为int的三个指针变量 B)p是基类型为int的具有三个元素的指针数组 C)定义了名为*p,具有三个元素的整型数组 D)定义了一个名为p的指针变量,它可以指向每行有三个整数元素的二维数组 2、输入:1 2 3<回车>,则输出结果是 int a[3][2]={0},(*p)[2],i,j;p=a;for(i=0;i<2;i++){ scanf(“%d”,p);p++;} for(i=0;i<3;i++)for(j=0;j<2;j++)printf(“%d”,a[i][j]); 1、二维数组的地址 2、指向数组元素的指针变量 3、指向一维数组的指针变量 1、整理课堂笔记 2、完成深入研究整型指针练习题 《二维数组》说课稿 一、教学目标 1、通过本次课教学,学生能进一步理解二维数组的定义,二维数组的引用的方法; 2、掌握二维数组的初始化 3、技能目标:培养学生逻辑思维能力、综合运用知识的能力和自主学习能力; 二、教材分析 选用教材为李腾编著的《编程语言基础——C语言》,该教材由国防科技大学出版社出版,教材特点如下: 1、在内容上体现科学性、时代性、实用性,编排上面向应用,理论与实践有机结合; 2、采用案例教学法等教学手段,各章节均有案例,贯穿整个课程进行难点讲解,以实际应用作为突破口,使学生能够真实体验到知识的实际应用,提高兴趣,促进理解;教学与项目开发融为一体,浅显易懂,符合中职学生认知规律。 3、实验实训环节结合教学内容,实验项目丰富。课程设计中案例学生熟悉。本节课教学内容参考教材第4章的4.2节:二维数组。 三、学生分析 本课程的教学对象是中职学生,他们文化基础较差,计算机专业知识薄弱,C语言程序设计是他们学习的第一门计算机语言类课程,学习时较困难,入门较慢。本次课的教学内容中数组的概念他们容易理解,简单的一维数组对他们不太难,但涉及二维数组的编程较为困难。 另外,中职学生对于上机实际操作要比学习理论知识更为有兴趣;简单的实验项目都能完成,但解决实际应用问题的能力也较差。因此,在教学中通过演示让学生有感性认识,提高学习兴趣;通过提出问题让学生讨论议一议,主动思考如何解决;通过一个教学任务让学生动手做一做。 四、教学重点、难点及解决办法 1、本次课教学重点 1)二维数组的定义; 2)二维数组元素的引用; 在教学过程的叙述中,要抓住教学的重点、最能体现教学理念的内容和最能展示教学艺术的环节,作较为详细的叙述。 2、本次课教学难点 1)二维数组的初始化 2)二维数组的实际应用 3、难点解决办法 1)通过演示让学生有感性认识,并从一维数组入手,逐步引入二维数组的概念,弱化实用性不强的细节; 2)围绕字符数组进行难点讲解,以实际应用作为突破口,使学生能理解二维数组在实际中的应用,提高学习兴趣; 3)针对难点设置上机实际操作内容,进一步掌握二维数组程序设计方法。4)在实验实训过程中布置任务项目,通过实践环节进一步理解和掌握重点难点,达到学习目的。 五、教学理念、方法及手段 本次课采用理(论)实(践)一体化教学理念通过任务驱动(项目教学)、讲练结合等教学手段。 1、任务驱动:通过书上实例这一任务,掌握二维数组程序设计认方法。并掌握相应知识点,突出重点,分解难点。 2、讲练结合:授课地点为计算机实验室,采用边讲边练的教学互动形式。教学过程中,适当安排学生在计算机上进行进行实际程序设计,通过运行调试自己设计的程序,让学生亲自观察和体验程序设计的成功感受,加深知识的理解。 六、教学设计(时间分配) 1、任务提出,演示成果程序,明确目标,提出要求。(3分钟)(1)演示程序成果,在屏幕上输入源程序,并运行。 (2)任务分析:完成本次课的任务所需知识―――二维数组的应用。 2、知识回顾(3分钟) 数组的概念,一维数组的定义,一维数组元素的引用,一维数组的初始化,注意事项。 3、上机实训1(3分钟) 简单程序:用一维数组编程,实现在屏幕上显示1,2,3……10。 (上机技能训练的操作、指导、辅导过程,以学生实际操作动手为主,教师进行辅导指导、师生共同探讨完成,应充分体现学生的主体地位)思考提问:如何输出一个表格。 4、导入新课(6分钟) (1)通过练习1,分析在屏幕上输出中存在的问题。(2)二维数组的定义,引用与初始化。 5、上机实训2,(6分钟)输出一个二维表: 1 5 9 11 12 6、上机实训3:4.6编程将数组a[3][4]转置(8分钟)(1)调试程序时要注意观察程序运行情况。程序出错原因,提醒以后编程时注意。 7、上机实训4,从键盘输入年、月、日,计算该日是这一年的第几天(10分钟) 8、课堂小结及作业(5分钟) 9、Question & Answer(1-2分钟) 七、学法指导 1、鼓励学生自主探索和合作交流。引导学生自主地从事观察、分析、交流等活动,使学生形成对计算机语言知识有效的学习策略。 2、鼓励与提倡解决问题的多样性,引导学生在与他人的交流中去选择合适的策略,丰富自己的思维方式,获得成功的体验和不同的发展。 3、引导学生将所学计算机知识应用到其他学科中去,使学生觉得计算机有很用,同时也培养了学生逻辑思维能力。 实验九 数组 一、一维数组 1、编写程序,测试下列数组的定义方式是否正确(1)main(){ int n;scanf(“%d”,&n);int a[n];//…….}(2)main(){ int n=10;int a[n];a[0] = 1;//......}(3)#include 2、运行下面的C程序,根据运行结果,可以说明什么? #include 3、调试下列程序,使之具有如下功能:输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值。写出调试过程。main(){ int i,n,a[10],av; for(i=0;i for(i=0;i if(i%3= =0)printf(“n”); } for(i=0;i!=n;i++)av+=a[i]; printf(“av=%fn”,av); } //尤其注意最后一次循环 上面给出的程序是完全可以运行的,但是运行结果是完全错误的。调试时请注意变量的初值问题、输出格式问题等。请使用前面实验所掌握的调试工具,判断程序中的错误并改正。在程序运行过程中,可以使用 5、编写程序,任意输入10个整数的数列,先将整数按照从大到小的顺序进行排序,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。分析讨论 通过实验,分析定义与引用数组的区别。二、二维数组 1.写出程序输出结果(1)#include”stdio.h” main(){ int i, j, t, a[4][4]={11,22,33,44,1,2,3,4,10,20,30,40,12,22,32,42};for(i=0;i<4;i++)for(j=0;j for(j=0;j<4;j++)printf(“%d”,a[i][j]); } }(2)#include”stdio.h” main(){int i,j,m,n,a[3][4]={43,32,22,13,11,22,33,44,44,11,32,31};m=n=0;for(i=0;i<3;i++)for(j=0;j<4;j++)if(a[m][n]>a[i][j]){m=i;n=j;} printf(“a[m][n]=%d,m=%d,n=%d”,a[m][n],m,n);} 3、操作符&用以求一个变量的地址,这在函数scanf 中已经使用过了。现在要你设计一个程序,返回一个3 * 5 的二维数组各元素的地址,并由此说明二维数组中各元素是按什么顺序存储的。 4、输入4×4的数组,编写程序实现: ⑴ 求出对角线上各元素的和; ⑵ 求出对角线上行、列下标均为偶数的各元素的积; ⑶ 找出对角线上其值最大的元素和它在数组中的位置。 三、字符数组 1.验证程序输出结果 #include”stdio.h” main(){char a[ ]=“ab12cd34ef”;int i, j;for(i=j=0;a[i ];i++)if(a[ i]>=’a’&&a[ i]<=’z’)a[ j++ ]=a[ i ];a[ j ]=’’; printf(“%sn”,a);} 2、编写程序,输入若干个字符串,求出每个字符串的长度,并打印最长一个字符串的内容。以“stop”作为输入的最后一个字符串。3、1983 年,在ACM图林奖颁奖大会上,杰出的计算机科学家,UNIX 的鼻祖,C语言的创始人之一,图林大奖得主,Ken Thompson 上台的第一句话是:“我是一个程序员,在我的1040表上我自豪地写上了我的职业。作为一个程序员,我的工作就是写程序,今天我将向大家提供一个我曾经写过的最精练的程序。”这个程序如下: #include 1.以下为一维整型数组a的正确说明是_________.a)int a(10);b)int n=10,a[n];c)int n;d)#define SIZE 10;scanf(”%d“,&n);int a[SIZE];int a[n];2.以下对二维数组a的正确说明是________.a)int a[3][];b)float a(3,4); c)double a[1][4] d)float a(3)(4);3.若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为______.(假设a[0][0]位于数组的第一个位置上。)a)i*m+j b)j*m+i c)i*m+j-1 d)i*m+j+1 4.若二维数组a有m列,则在a[i][j]前的元素个数为________.a)j*m+i b)i*m+j c)i*m+j-1 d)i*m+j+1 5.若有以下程序段: int a[]={4,0,2,3,1},i,j,t;for(i=1;i<5;i++){t=a[i];j=i-1;while(j>=0&&t>a[j]){a[j+1]=a[j];j--;} a[j+1]=t;}......则该程序段的功能是_________.a)对数组a进行插入排序(升序)b)对数组a进行插入排序(降序)c)对数组a进行选择排序(升序)d)对数组a进行选择排序(降序)6.有两个字符数组a、b,则以下正确的输入语句是_______.a)gets(a,b);b)scanf(”%s%s“,a,b);c)scanf(”%s%s“,&a,&b);d)gets(”a“),gets(”b“);7.下面程序段的运行结果是_________.char a[7]=”abcdef“; #include a)SSW* b)SW* c)SW*A d)SW 二、填空题 1. 若有定义:double x[3][5];则x数组中行下标的下限为____0___,列下标的上限为___4____.2.下面程序以每行4个数据的形式输出a数组,请填空。 #define N 20 main(){int a[N],i;for(i=0;i main(){ int a[3][3]={1,3,5,7,9,11,13,15,17},sum=0,i,j;for(i=0;i<3;i++)for(j=0;j<3;j++)if(i==j_____)sum=sum+_a[i][j]______;printf(”sum=%dn“,sum);} 4.当从键盘输入18并回车后,下面程序的运行结果是_____10010___.main(){int x,y,i,a[8],j,u,v;scanf(”%d“,&x);y=x;i=0;do {u=y/2; a[i]=y%2;i++;y=u;}while(y>=1)for(j=i-1;j>=0;j--)printf(”%d“,a[j]); main(){int a[5]={4,7,2,5,1};int i,j,m;for(i=1;i<5;i++){m=a[i];j=i-1_; while(j>=0&&m>a[j]){a[j+1]=a[j]_______;j--;} a[j+1]_______=m;} for(i=0;i<5;i++)printf(”%d“,a[i]);printf(”n“);} 6.下面程序的功能是在三个字符串中找出最小的,请填空。#include 第一部分:了解数组公式 在开始讲数组公式之前,我们先来认识几个必要的概念。 1、数组 什么是数组?仁者见仁,智者见智。 我个人的感觉是:数组是具有某种联系的多个元素的组合。某班级里有50个学生,这里,如果班级是数组,50个学生就是数组里的50个元素。当然,班级里的元素是可变的,可以是20个,可以是30个,也可以是60个。放到Excel里,班级就相当于工作表,而学生就相当于工作表里的单元格数值。所以,Excel里的数组,我还把它理解是为多个单元格数值的组合。 2、公式 如果你在使用Excel,如果你说你还没听过“公式”这个名词,我只能说:“你太OUT了!” 什么是公式?我的理解是:在Excel里,凡是以半角符号“=”开始的、具有计算功能的单元格内容就是所谓的Excel公式。如:=SUM(B2:D2),=B2+C2+D2这些都是公式。 3、数组公式 数组公式是相对于普通公式而言的。普通公式(如上面的=SUM(B2:D2),=B2+C2+D2等),只占用一个单元格,只返回一个结果。 而数组公式可以占用一个单元格,也可以占用多个单元格。它对一组数或多组数进行多重计算,并返回一个或多个结果。 集合在教室外面的学生,老师把他们叫进教室。老师说:“第一组第一桌的同学进教室。”于是第一组第一桌的同学走进教室。老师接着叫:“第一组第二桌的同学进教室。”然后是第二桌的同学进教室。老师再叫:“第一组第三桌的同学进教室。”然后第三桌的同学走进教室。接着是第四桌,第五桌……,就这样一个学生一个学生的叫,这就是普通公式的做法,学生回到座位,就像数值回到工作表的单元格里,一个座位叫一次,就像一个单元格输入一个公式。 如果老师说:“第一组的全部进教室。”学生听到命令后,第一桌的同学走进去,然后是第二桌,第三桌……,老师不用再下第二个命令,这是数组公式的处理方法。 4、数组公式的标志 在Excel中数组公式的显示是用大括号对“{}”来括住以区分普通Excel公式。如图: (1)数组公式: (2)普通公式: 输入数组公式:用Ctrl+Shift+Enter结束公式的输入。 特别提醒:这是最关键的,这相当于用户告诉Excel:“我不是一般人,爷我是数组公式,你得对我特别关照。”于是,Excel明白了,不能用常规的逻辑来对待这位大爷。当你按下三键后,Excel会自动给公式加上“{}”以和普通公式区别开来,不用用户输入“{}”,但如是是想在公式里直接表示一个数组,就需要输入“{}”来把数组的元素括起来。如: =IF({1,0},D2:D8,C2:C8)这个公式里的数组{1,0}的括号就是用户自己输入的。 5、数组的维数 “维数”是数组里的又一个重要概念。数组有一维数组,二维数组,三维数组,四维数组…… 在公式里,我们更多接触到的只是一维数组和二维数组。 一维数组我们可以简单地看成是一行的单元格数据集合,比如A1:F1。一维数组的各个元素间用英文的逗号“,”隔开(如果是单独的一列时,用英文分号“;”隔开)。 {1,2,3,4,5,6},这就是一个有6个元素的一维数组,或者说,只有一行的数组。数组的各个元素间用逗号“,”分隔。如果想把这个数组输入到工作表的单元格里,同时选中同一行里相领的六个单元格,输入:={1,2,3,4,5,6}后,三键结束公式,你就可以看到这个一维数组被输入到工作表的单元格里了。自己动手试一试。 二维数组可以看成是一个多行多列的单元各数据集合,也可以看成是多个一维数组的组合。如单元格A1:D3,就是一个三行四列的二维数组。我们可以把它看成是A1:D1、A2:D2与A3:D3这三个一维数组的组合。二维数组里同行的元素间用逗号“,”分隔,不同的行用分号“;”分隔。我们可以用上面的方法,在A1:D3区域输入数据,并引用地址,按F9来查看。 可以看到在数组里,换行的时候,元素间的分隔符是“;”,所以,要判断一个数组是几行几列的数组,只需要看里面的逗号和分号就知道了。 如果需要把数把数组返回到单元格区域里,首先得看数组是几行几列,然后再选择相应的单元格区域,输入数组,三键结束。 对了,是哪三键你还不要忘记了:Ctrl+Shift+Enter 记住: (1)一维数组是单独的一行或一列。二维数组是多行多列。 (2)数组里的元素,同一行内的各元素用英文逗号“,”分开,用英文分号“;”将各行分开。(3)二维数组的元素按先行后列的顺序排列。总是这样:{第一行的第一个,第一行的第二个,第一行的第三个……;第二行的第一个,第二行的第二个,第二行的第三个……;第三行的第一个……} 第二部分:数组公式的初步认识 在对数组公式有了一个简单的了解之后,这贴我们将通过一些简单的例子来进一步认识数组公式。问题1:在D2:D4求出商品的销售金额。 现在你解决这个问题会用什么办法呢? 我知道很小儿科,千万不要在心里骂我拿这种简单的问题来考你。是的,很简单,在D2单元格输入公式“=B2*C2”,下拉公式即可。 在这里,D2:D4三个单元格输入了三个普通公式,分别返回了三个值在三个单元格里。这就是老师在点学生进教室,第一组第一桌的同学进教室入座,第一组第二桌的同学进教室入座„„ 我们试着用数组公式来解决这个问题,老师嗓子不好,让他叫一次我们就乖乖进教室去得了。 选中D2:D4输入公式“=B2:B4*C2:C4”,三键结束输入数组公式,即可得到同样的结果。 这就是一个多单元格的数组公式,多单元格数组公式是进行批量计算,可节省计算的时间,同时,它还有一个特点。当你输入完数组公式后,请你尝试修改公式区域里其中一个单元格的公式,看看会有什么结果。 是的,你已经发现了,会弹出一个对话框,提醒你:不能修改数组的某一部分。 这就是多单元格数组公式的一个重要的特点:保证公式集合的完整性不被修改。这可以防止用户在操作时无意间修改到表格的公式。这是不是会安全得多? 当然,如果你要修改公式的话,必须得选中公式所在的所有单元格。 问题2:在F1求出商品的销售总金额 这一题如果你用普通公式又怎么解决呢?我想象中可能有两种方法: A、插入辅助列,先求出各商品的销售额,然后再求总和。 B、直接在F1输入公式“=SUM(B2*C2,B3*C3,B4*C4)”,这样看上去不错,可是,如果有100行数据,一千行号数据呢?先不考虑单元格能容纳多少字符的问题,就光输入公式,累也得把你累趴下,显然是行不通的。 这时候就需要用数组公式来完成了。 选中F1单元格,输入公式“=SUM(B2:B4*C2:C4)”,三键确认输入即可。 这是一个单个单元格的数组公式,B2:B4*C2:C4是两个一维数组相乘,返回一个新的一维数组,最后用SUM函数对返回的数组进行了求和。这里,用一个数组公式代替了多个公式的方式来完成了数据的计算。 做了这个问题,总结一下,什么时候会用到数组公式? 是的,当运算中存在着一些只有通过复杂的中间运算过程才会等到结果的时候,就需要使用数组公式了。这一贴的内容非常简单,记住几点:(1)三键输入数组公式。 (2)数组公式同时进行多个计算,可返回一个或多个结果。 (3)多单元格数组公式需选区多个单元格进行输入,多单元格数组公式具有保护公式的作用。(4)数组公式可以完成复杂的中间运算得到最终想要的运算结果 v 第三部分:数组公式的计算 学习继续,在对数组有了基本的认识后,这贴我们将通过一些例子来讲一讲数组公式是怎么计算的。 1、行列数相同数组的运算 数组1+数组2,这是一个多单元格的数组公式,第一个数组的第一个元素与第二个数组的第一个元素相加,结果作为数组公式结果的第一个元素,然后第一个数组的第二个元素与第二个数组的第二个元素相加,结果作为数组公式结果的第二个元素,接着是第三个元素„„直到第N个。 这是横向的一维数组的计算,原理同上。 这是二维数组与二维数组进行计算,生成一个新的二维数组的多单元格数组公式。同样的计算过程,第一个数组的第一行的第一个元素与第二个数组的第一行的第一个元素相乘,结果为数组公式的结果的数组的第一行的第一个元素,接着是第二个,第三个„„直到第N个。 规律很简单:两个同行同列的数组计算是对应元素间进行运算,并返回同样大小的数组。正如穿鞋要穿合脚的才走得了路一样,在公式或函数中使用数组时,运算对象或参数的数组维数要匹配,否则计算会出错。教室里,第一排的有8个同学,第二排有9个同学,老师说:“第一排和第二排的同学交换作业,互相检查。”第二排的第9个同学和谁交换?这就是数组的不匹配。数组不匹配时,工作就不能完成了。你可以试着改一改数组的参数试试。 2、数组与单一的数据的运算 这相当于在E42单元格输入公式=A42*$C$42,然后下拉复制公式实现。 等同于在B56输入公式“=B52+$B$54”,然后右拉复制公式实现。 等同于在C67单元格输入公式“=A60+$E$60”然后右拉下拉复制公式实现。 不难看出:一个数组与一个单一的数据进行运算,是将数组的每一元素均与那个单一数据进行计算,并返回同样大小的数组。 3、单列数组与单行数组的计算 两个数组相加,查看结果是几行几列:在任意单元格输入公式“=A80:A83+B87:E87”,抹黑公式,按F9键,可看到公式的计算结果为数组“{110,210,310,410;120,220,320,420;130,230,330,430;140,240,340,440}”通看看分号与逗号,我们知道这是一个四行四列的数组,选择一个四行四列的单元格,输入公式“=A80:A83+B87:E87”,三键结束,可看到返回的结果为: 相当于在E80输入公式“=$A80+B$87”右拉下拉复制公式的结果。单列数组与单行数组的计算: A、计算结果返回一个多行列的数组; B、返回数组的行数同单列数组的行数相同、列数同单行数组的列数相同。 C、返回数组中第R行第C列的元素是单列数组的第R个元素和单行数组的第C个元素运算的结果。 4、行数(或列数)相同的单列(或单行)数组与多行多列数组的计算(1)单列数组的行数与多行多列数组的行数相同时: (2)单行数组的列数与多行多列数组的列数相同时: 计算规律同单行单列的数组计算的规律大同小异: A、计算结果返回一个多行列的数组; B、返回数组的行、列数与多行多列数组的行列数相同; C、单列数组与多行多列数组计算时,返回的数组的第R行第C列的数据等于单列数组的第R行的数据与多行多列数组的第R行第C列的数据的计算结果; D、单行数组与多行多列数组计算时,返回的数组的第R行第C列的数据等于单行数组的第C列的数据与多行多列数组的第R行第C列的数据的计算结果。 =======留给你的思考题======= 讲到这里,我们可以暂停一下进度。课间休息,插播一段广告: 你可以喝杯水,听听音乐,然后我们来看几个例子: 图1: 图2: 图3: 上面的三张图,第一个公式是我们前面讲的例子,第二个公式是在第一个公式的基础上对参与计算的数组区域进行了修改,但是,两个不同参数的公式,返回的结果却都是一样的。这里我只是举了三个例子,你可以把前面我们讲过的公式里的数组参数都修改修改,什么情况下,会返回相同的结果呢?它们又有什么共同的地方?知识总是光顾那些善于总结和发现的人。否则,踩着别人的脚印走,想要看到别人没看到的风景,你要等到猴年马月? 好了,我也仿小学老师的口气问问大家:“为什么两个不同的公式,返回的结果都是一样的呢?从上面的图,你发现了什么?把你的发现说给你的伙伴听一听。” 这就是你今天的作业,如果你是真心想想学数组公式的,记得跟贴回复! 5、行、列数不相等的数组计算 (1)行数不相等的单列数组与与多行列数组的计算 (2)列数不相等的单行数组与多行多列数组的计算 (3)行、列数不相同的两个多行多列数组的计算 有了对前面例子的分析,再来看这三个例子就相对简单了。它们的计算规则和前面都是一样的,不难看出: A、公式返回一个多行多列数组; B、返回数组的行数与参与计算的两个数组中行数较大的数组的行数相同,列数与较大的列数的数组相同; C、返回数组的大于较小行数数组行数、大于较大列数数组列数的区域的元素均为#N/A。有效元素为两个数组中对应数组的计算结果。 需要提醒一点的是,对会返回#N/A的数组,在进行再计算和处理时,考虑对#N/A值作相应的处理! 比如我们想对上面数组与数组2相加后的结果进行求和: 正确的公式(数组):=SUM(IF(ISNA(A213:B216+D213:F215),0,A213:B216+D213:F215))通过ISNA函数对返回的数组里的各个元素进行了判断和处理,把把有的#N/A值替换成数值0,最后再用SUM函数对所有数值进行求和。 我们说,数组计算时,得注意行列数的匹配,其实如果了解了数组的计算原理后,能正确处理那些返回的#N/A值的话,很多时候,并不会出错的 第四部分:数组扩充 这一贴的内容相对比较简单,主要是对第三部分,数组的计算里提出的思考问题作出回复。昔日关云长温酒斩华雄的故事听过吧?如果你已认真读了前面的贴子,且用心总结了下,再来看此贴,相信你也会有“云长提华雄之头,掷于地上,其酒尚温”的豪气。 呵呵„„嫌我唐僧了吧?那端上一杯热茶,快快进入主题,当读完贴后,你的茶是否喝完? 读完上一贴,了解了数组公式的计算规律后,我们知道,数组与数组计算,返回一个新的数组。返回的数组的行数与参与计算的数组中行数较大的数组的行数相同,列数与列烽较大的数组的列数相同。 但“为什么两个不同的公式,返回的结果却相同呢?”,这就是我们今天要讲的一个新概念——数组扩充。 数组计算时,参与计算的两个数组得具有相同的维数,也就是得注意行列数的匹配。 对于行列数不匹配的数组,在计算时Excel会将数组对象进行扩展,以符合计算需要的维数。每一个参与计算的数组的行数必须与行数最大的数组的行数相同,列数必须与列数最大的数组的列数相同。 例1: 公式:=SUM({10,20,30,40}*10)里,第一个参数{10,20,30,40}是一行四列的数组,第二个参数不是数组,只是一个数值,为了让第二个数值能与第一个数组进行专题片,这时,Excel会自动将第二参数的10扩充成一个一行四列的数组{10,10,10,10}与第一参数匹配。所以,SUM({10,20,30,40}*10)最后是使用SUM({10,20,30,40}*{10,10,10,10})进行计算,得到的结果是10*10,20*10,30*10,40*10的和。 例2: 公式:={10;20;30;40}+{100,200}的第一个参数{10;20;30;40}是一个四行一列的数组,{100,200}是一个一行二列的数组,在计算时,Excel会将第一个数组自动扩充为一个四行二列的数组{10,10;20,20;30,30;40,40},也会将第二个数组扩充为一个四行二列的数组{100,200;100,200;100,200;100,200},所以={10;20;30;40}+{100,200}这个公式最后是使用公式={10,10;20,20;30,30;40,40}+{100,200;100,200;100,200;100,200}进行计算。公式最后返回的数组也是一个四行二列的数组,数组的第R行第C列的元素等于扩充后的两个数组的第R行第C列的元素的计算的结果。 好了,在这一贴要讲的已经讲完了。“数组扩充”这个华雄是否已被你斩于马下?也不知道你手里的茶喝完了没?我希望听到你回答的是:“华雄已斩,茶没喝完,还温着呢。”有兴趣,记得跟贴告诉我一声。呵呵„„ 继续喝茶,休息。顺便听我再给你唠叨几句。 班里有50个学生,为了让每个学生都有座位,需要预备50套课桌椅。如果只有30套课桌椅,那最后进教室的20个同学将没有座位,如果有60套课桌椅,将会有10套课桌椅空在教室里而别的班级需要课桌椅的同学又不能使用。浪费啊„„ 学生就像数组里的元素,输入数组公式返回数组的元素就像叫学生进教室,我们得给他们准备好合适的座位。所以输入多单元格数组公式时,应先选中需要返回数据的单元格区域,选中的单元格区域的行、列数应与返回数组的行、列数相同。否则,如果选中的区域小于数组返回的行列数,站在教室里,我们只能看到占了座位的这群学生。如果选择的区域大于数组返回的行列数,那超出的区域将会没有学生去坐而返回#N/A值。 第五部分:公式的解读 有人说,不喜欢数组公式。原因是太复杂,看不懂。 所以,先讲一讲公式的解读,对初学的人来说,应该是很有必要的。对于公式的解读,论坛上已经有很多的例子了,所以,我也没有什么新的东西可以跟大家讲。在这里,我把前辈们的经验总结一下,和大家分享。 1、利用F9键 这好像是大家在解读公式的时候用得最多的一个功能了。想知道某段公式的运行结果是什么?在编辑里,用鼠标选中需要进行计算的某段公式,将其抹黑,然后按F9键,就得到了公式的计算结果。这个功能我们在前面讲数组维数的时候已经用到了,这里不再多讲。需要提醒的是:当你对公式按F9键进行求值后,返回的时候记得按Esc键,或者点编辑栏左侧的“取消”按钮。否则公式就变成你求值后的样子了。 2、利用公式求值 要看懂复杂的公式,公式审核的的帮助是很大的。选择需要公式求值的单元格,点击“工具—>公式审核—>公式求值”,调出公式求值对话框。 点击“求值”铵钮,可以逐步对公式进行计算,将公式每一步的运算结果展示出来。 3、利用插入函数 对于复杂公式的结构分析、分段理解,使用插入函数功能是很方便的。 点鼠标左键,将光标定位到编辑栏里公式的某个地方。点击“插入——>函数”菜单命令: 这时,弹出函数参数的对话框,它会对我们的公式进行分段解析。 当然,你也可以直接点击编辑栏左边的插入函数命令按钮来调出对话框。第二篇:c语言 二维数组与指针 教案
第三篇:C语言《二维数组》说课稿(小文档网整理)
第四篇:C语言数组
第五篇:Excel数组公式及运用