《photoshop图形图像处理3.1 数组电子教案 中职c语言程序设计基础.ppt》由会员分享,可在线阅读,更多相关《photoshop图形图像处理3.1 数组电子教案 中职c语言程序设计基础.ppt(50页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、photoshop 图形图像处理3.1 数组电子教案 中职 高教版 c 语言程序设计基础了解数组的基本概念,正确地定义一个一维数组对一维数组进行初始化,正确引用一维数组了解字符数组和字符串数组的区别与联系能力目标:在程序中简单运用数组任务一 考察数组1观察下面程序,该程序的功能是求3个同学的平均成绩,并回答问题。#include stdio.hmain()int k0,k1,k2;float aver;k0=100;k1=97;k2=98;aver=(k0+k1+k2)/3.0;printf(平均值为%f,aver);任务一 考察数组1.这几个变量相同点和 不同点?类型相同名字相同下标不同下标
2、从0开始2.如果定义100个这样的 变量应该怎么办?定义数组u数组就是一组有序的、类型相同的数据集合,这组数据具有相同的名字、不同的下标的变量。u数组可以用来表示数据类型相同的,具有相同性质的多个变量。如:100个学生的成绩 c1 c2 c3 国家名字“china”“japan”评委为选手打的分数 p1 p2 p3 数组的基本概念:2上面的程序可以写成下面的C程序,找出数组定义的方法,数组元素的表示方法。#include stdio.hmain()int a3;printf(请为数组输入3个数n);scanf(%f%f%f,&a0,&a1,&a2);printf(“这3个数分别是%f,%f,%
3、f,a0,a1,a2);u一维数组的定义格式 类型标识符 数组名整型常量表达式 1.数组名后是用方括号,不能用圆括号。2.方括号中的表达式只能是整型常量表达式。3.数组名代表数组在内存中的首地址,如int a10 数组名a表示该数组的首地址和&a 0相当。4.号里的值表示数组中元素的个数。即数组长度。数组长度应该能够存储下所需的数。一维数组的定义:5.C语言不允许对数组的大小做动态定义,即定义时 里面不能是变量。如:int n;scanf(%d,&n);int an;n是一个变量,C语言是不允许用变量来确定数组大小的,因为在编译时,C编译器不能根据已知数组大小分配内存空间。例1 定义一个数组,
4、存储50 个学生的成绩。float c50;练习:1.定义一个数组,存储20 个整数 int a20;2.定义一个数组,存储26 个英文字母。char ch26;3.定义一个数组,存储中国的英文名称。char c6;4.定义数组存储自己的姓名。char name16;注意:定义数组存储字符串时,引用数组元素的格式:数组名下标注意:1.下标变量又称为数组元素,2.下标的作用是指出某个数组元素在数组中的位置。3.下标可以是常量也可以是变量,但必须为整型。4.C语言中,数组元素下标默认从0开始,数组元素相当于一个变量。一维数组的引用(使用):如:int a3;该数组有3个数组元素,用下标变量表示每个
5、元素。不同下标的下标变量为a0、a1、a2 一维数组的引用(使用):例:已知int b4;写出该数组中的数组元素。b0 b1 b2 b3练习:完成下列各题。1.已知float c2;交换这两个数。r=c0;c0=c1;c1=r;2.已知Int ab3;求这三个数的和。s=ab0+ab1+ab2;3.#include N 5 int aN;写出这5个元素。a0 a1 a2 a3 a4已知C编译器根据定义数组长度分配内存空间。求下列数组在内存中占据的字节数。1.Int a5;10字节2.Char ch5;5字节3.Float a5;20字节1分析下列数组元素的值各是多少?找出初始化数组的方法,为数
6、组元素依次赋值的方法。程序1:#include stdio.hmain()int a5,I;for(I=0;I5;I+)aI=I+10;for(I=0;I5;I+)printf(a%d=%d,I,aI);三、给数组赋初值:1.若依次输入1,9,2,8,3,写出该数组中的元素。2.根据输入,写出程序执行的结果。a0 a1 a2 a3 a4 10 11 12 13 14 a0=10,a1=11,a2=12,a3=13,a4=14,3总结给数组元素赋值的方法。用循环方式为数组元素依次赋值。三、给数组赋初值:注意:用循环方式给数组元素赋值,循环变量初值从0开始,小于()数组元素个数,一般和scanf(
7、)结合用。常用于大量数据的输入。例:给数组输入10个整数。int a10,i;for(i=0;i10;i+)scanf(“%d”,&ai);三、给数组赋初值:练习:给数组输入100个字符。char a100,i;for(i=0;i100;i+)scanf(“%c”,&ai);练习:将你名字的汉语拼音存储在数组中。char a9,i;for(i=0;i9;i+)scanf(“%c”,&ai);2分析下列数组元素的值各是多少?找出初始化数组的方法。程序2:#includestdio.hmain()int a5=5,6,7,8,9;for(I=0;I5;I+)printf(a%d=%d,I,aI);
8、1.该数组中元素的值分别为多少?三、给数组赋初值:2.写出程序执行的结果。a0 a1 a2 a3 a4 5 6 7 8 93总结给数组元素赋值的方法。定义的同时用赋值方式为数组元素赋值。格式:类型 数组名长度=初始值列表;三、给数组赋初值:注意:1.用赋值方式给数组元素赋值,具体的值用 括起来,值之间用逗号分隔。2.千万注意数组长度应该大于等于(=)元素个数 3.可以直接将字符串赋值给数组。例:将字符串“china”赋值给数组。char a5=c,h,I,n,a;char a6=“china”;三、给数组赋初值:练习:将你的各科成绩赋值给数组。int a4=100,140,118,247;练习
9、:将你的姓名拼音赋值给数组。char a5=h,u,k,a,i;疑问:如果数组长度元素个数,多余的部分值为多少?对于数值型:后面的值为0 对于字符型:后面的值为0char a6=“hukai”;三、给数组赋初值:特例:说出下列数组的长度。1.int a=100,140,118,247;2.int a10=100,140,118,247;3.char a=a,b,c,d;4.char a=“abcd”;长度为:4长度为:10长度为:4长度为:5一维数组初始化的一般格式:类型标识符 数组名整型常量表达式=初值表;初始化:在定义数组的同时指定初始值,编译器把初值赋给数组元素。依次为数组元素赋值的方法
10、:1.在C语言中,数组作为一种存放若干相同类型数据的集合是一个整体,是不允许当作变量来赋值的。例如:int a10;a=5;这样的写法在C语言中是不允许的,因为a是一个数组,不能当作变量来使用。2.对于为数组元素赋值就简单得多,因为数组元素可以当做变量来使用,可以直接使用“=”赋值。我们完全可以用一个循环语句来依次为每个数组元素赋值,这里,只需要把数组元素的下标做为循环控制变量即可。这也是为数组赋值常用的方法。知识盘点:数组元素的引用:知识盘点:数组是用来存放类型相同的一组数据,怎么获得存放的这些数据呢?我们可以通过对数组元素的引用来完成。C语言规定:不能整体引用数值数组,只能逐个引用数组元素
11、。元素引用方式:数组名下标表达式 例如:a0=a5+a7-a2*3“下标表达式”可以是任何非负整型数据。u当程序不给数组指定初始值时,编译器做如下处理:部分元素初始化,编译器自动为没有初始化的元素初始化为0。数值数组如果只定义不初始化,编译器不为数组自动指定初始值,即初值为一些随机值(值不确定)。u切记初始化数据的个数不能超过数组的长度。例如,下例是错误的:int a3=1,2,3,4,5;u只有在进行带初始化的数组说明时才允许省略长度。在仅进行说明而没有初始化时,省略长度是错误的,因为编译器无法知道这个数组究竟有多大。u一般初始化,例如:int a10=3,10,5,3,4,5,6,7,8,
12、9;int array5=2,3,4,5,6;其结果是给每一个数组元素都指定了初值。u部分元素初始化,其余元素均为零。例如:int a10=7,8,9,67,54;仅给前5个元素赋初值,后5个元素初值为0。u全部元素均初始化为1。int a10=1,1,1,1,1,1,1,1,1,1;不允许简写为 int a10=1;或int b10=1*10;想一想,上述定义a和b数组后,初始化结果是什么?u如果全部元素均指定初值,定义中可省略元素的个数。例如:int a5=9,28,3,4,5;可以写为:int a=9,28,3,4,5;一维数组的初始化应注意的问题:知识盘点:1运行结果。程序1:#inc
13、lude stdio.hmain()int a5=1,2,3,4,5;int b=1,2,3,4,5;int i;for(i=0;i5;i+)printf(%d,ai);printf(%d,bi);四、数组的运用:程序2:#include stdio.hmain()int c10=1,2,3,4,5;int i;for(i=0;i10;i+)printf(%d,ci);四、数组的运用:1求100个学生的平均成绩。#include stdio.h#define N 100main()float a N,i;float ave;float s=0;for(i=0;iN;i+)scanf(%f,&a
14、 i);for(i=0;iN;i+)s=s+a i;ave=s/100.0;printf(100个学生的平均成绩为%f,aver);四、数组的运用:1求100个学生的最高分。#include stdio.h#define N 100main()int a N,i,max;for(i=0;iN;i+)scanf(%f,&a i);max=a0;for(i=1;iN;i+)if(max=ai);max=ai;printf(“100个学生的最高分为%f,max);四、数组的运用:1求100个学生的最低分。#include stdio.h#define N 100main()float a N,i,m
15、in;for(i=0;iN;i+)scanf(%f,&a i);min=a0;for(i=1;i=ai);min=ai;printf(“100个学生的最低分为%f,min);四、数组的运用:1输入20个同学的成绩保存在一个数组中,输出其中的最高分与最低分,并求20个同学的总分和平均分。#include stdio.hmain()float a 20;float max,min,i;float ave;flost s=0.0;for(i=0;i 20;i+)scanf(“%f”,&a i);max=min=s=a 0;for(i=1;i 20;i+)s=s+ai;if(max=ai)min=ai
16、;ave=sum/20.0;printf(最高分为%fn“,max);printf(最低分为%fn,min);printf(“总分为%f n,sum);printf(平均分为%fn“,ave);u在求极值的过程中,先将第1个同学的成绩做为最高分和最低分的初值。u在循环结构的比较过程中,当满足判断条件后,就为保存最高分或最低分的变量重新赋值。眼下留神:2日常生活中,常常会遇到数据的统计问题,现在我们来观察下面这个程序:某班50名同学参加C语言考试,要求统计出各分数段的人数。100分为一个分数段,其余每10分一个分数段。请观察下面的程序。#include stdio.hmain()int a11,
17、i,k,s;float cj;接下页 for(i=0;i 11;i+)/*为数组赋初值*/ai=0;for(i=0;i 50;i+)printf(请输入第%d个同学的成绩,i+1);scanf(%f,&cj);k=cj/10;/*根据输入分数确定数组下标*/ak=ak+1:/*统计各分数段人数*/for(i=0;i 11;i+)printf(%d,ai);u数组能对同类型的大量数据进行处理。仅仅使用一个数组名,就可以利用下标,将这些数据有序地存放在一起,方便我们处理,减轻了程序书写的工作量。u在使用数组时,一般都利用循环结构,利用数组的下标来充当循环控制变量,完成对数组元素的处理。一维数组在程
18、序中使用的优点:知识盘点:任务三 用字符数组存储、处理字符串 前面我们学习了字符变量,它能处理单个的字符,但在日常生活中常常会遇到字符串的处理问题,而C语言没有字符串类型。怎么来处理字符串呢?请通过下面的活动来找出处理字符串的方法。1请上机运行下面的程序,找出一维字符数组初始化的一般格式及处理字符串的方法。程序1:#include stdio.hmain()char a5=h,e,l,l,o;int I;for(I=0;I5;I+)printf(%c,aI);程序2:#include stdio.hmain()char b6=hello;int I;for(I=0;I6;I+)printf(%
19、c,bI);任务三用字符数组存储、处理字符串眼下留神:指定初值时,若未指定数组长度,则长度等于初值个数。char c=I,a,m,h,a,p,p,y;数组长度为10,包括2个空格。不指定数组长度,逐个元素初始化和字符串常量初始化在内存中的存储情况是不一样的。例如:char ch1=c,h,i,n,a;在内存中占5个字节。char ch2=china;在内存中占6个字节。因为字符常量末尾自动带上一个0,所以字符串常量china 占用内存空间6个字节,而逐个赋值的ch1占用5个字节。使用字符串常量给字符数组赋初值时,可以省略。u通过前面的学习我们知道,字符分为字符常量和字符变量,我们还知道C语言有
20、字符串常量,没有字符串变量类型,字符串变量是借助于字符数组来实现的。u字符数组的定义:字符数组:存放字符数据的数组,每一个元素存放一个字符。字符数组定义的格式:例如:char c10;/*定义c为字符数组*/u字符数组的初始化 逐个元素赋值初始化。char ch10=C,h,i,n,a;初始化数据小于数组长度,多余元素自动为0(0,二进制0)。还可以用字符串常量给字符数组赋初值。例如:char ch6=china;字符数组的定义及初始化:知识盘点:u引用一个元素,得到一个字符,因此可以用循环来实现对字符串的输出。u利用循环结构,我们可以向数组逐个输入字符来实现对字符串的输入,但必须注意,最后一
21、个输入的字符必须是0。利用数组来处理字符串的一般方法:知识盘点:2上机运行下面的程序,总结出利用数组处理字符串的一般方法。1#include stdio.h 2 void main()3 4 char c10=I am a boy;5 int i;6 for(i=0;i10;i+)7 printf(%c,ci);8 printf(n);9 3观察下面的C源程序,总结出字符串数据的输入输出的方法。该程序实现从键盘输入一字符串,并将其输出的功能。1#include stdio.h 2 void main()3 4 char ch10;5 printf(请输入一字符串:);6 scanf(%s,ch
22、);/*输入字符串*/7 printf(n);8 printf(%sn,ch);/*输出字符串*/9 眼下留神:输入时系统会自动在字符串末尾加上0;输出时,遇到第1个0结束,且输出字符中不包含0。%s格式输出字符串时,scanf()函数的输入项为字符数组名,且不要加&字符;printf()函数的输出项是字符数组名,而不是元素名。“%s”格式输出时,即使数组长度大于字符串长度,遇0也结束。例:char c10=China;printf(%s,c);/*只输出5个字符,而不是10个字符*/scanf()函数输入一个字符串时,以空格作为字符串的结束标志。例:scanf(%s,ch);printf(%
23、s,ch);如果输入的是:How are you,输出结果为:How,后面的are you不能送入到ch中。C语言中,数组名代表该数组的起始地址,因此,scanf()函数中不需要地址运算符&。眼下留神:u字符数组的输入/输出有两种方法:用%c格式符逐个输入输出。用%s格式符按字符串输入输出。第1种方法和前面所讲的数值数组的输入与输出方法相似。第2种方法是使用%s格式字符对字符数组进行整体输入输出,这一点是数值性数组所不具备的,即数值性数组不能进行整体输入输出。字符数组的输入输出:知识盘点:4除了使用上面的方法来输入输出字符串,还可以使用字符串处理函数来进行处理。请观察下面的程序,找出字符串处理
24、函数的使用方法。#include stdio.hmain()char a20;/*定义20个元素的字符数组a*/gets(a);/*输入字符串给数组a*/puts(a);/*从数组a中输出相应的字符串*/u字符串处理函数在调用字符串处理函数时,在程序前面必须设置一个相关的文件包含预处理命令,即include 字符串输出函数(puts())功能:输出字符串(以0结尾的字符序列)。例如:char c6=China;puts(c);/*不需要格式控制符,且自动换行*/上述函数调用与下面的函数调用等价。printf(%sn,c);/*需要格式控制符%s*/利用字符串处理函数来完成字符数组的输入/输出:
25、知识盘点:知识盘点:字符串输入函数(gets())功能:输入字符串到相应的字符数组中。例如:char str12;gets(str);如果输入How are you,gets函数可以将其全部送入以str为首址的内存中,以回车做为结束符。5怎样利用数组来处理实际问题呢?请观察下面的程序,听教师的分析,写出程序运行的结果。分析:单词的数目由空格出现的次数决定,应逐个检测每一个字符是否为空格。如果测出某一个字符为非空格,则表示“新的单词开始了“,此时用num表示单词数(初值为0)。word=0表示前一字符为空格,word=1表示前一字符不是空格,word初值为0。如果前一字符是空格,当前字符不是空格,说明出现新单词,num加1。#include stdio.h/*gets()函数在该头文件定义*/void main()char string81;int i,num=0,word=0;char c;gets(string);for(i=0;(c=stringi)!=0;i+)if(c=)word=0;else if(word=0)word=1;num+;printf(There are%d words in the linen,num);