您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > lesson9数据的组织结构一一维数组
2019/9/10电气与信息工程学院计算机系制作Lesson9数据的组织2019/9/10电气与信息工程学院计算机系制作学习目标:31学会使用数组处理程序中的数据2019/9/10电气与信息工程学院计算机系制作3数组概念2向量数学定义:一组既有大小又有方向的量例如:向量d:(1,3,4,6,5,2,0,8)向量b:(100,300,200,400)特点:1、是一组量2、有方向性,即每个数据在其中有位置2019/9/10电气与信息工程学院计算机系制作3数组概念2在C语言中,数组与向量对应,可以实现处理与向量相关的问题数组:若干类型相同的相关数据(变量)顺序排列在一起例如:向量d:(1,3,4,6,5,2,0,8)465208132019/9/10电气与信息工程学院计算机系制作3数组概念2数组类型的应用背景(处理向量问题)(1)同时存在若干个用来描述同一性质且不同个体的数据(向量)。(2)只有将这些数据组织在一起形成批量数据,使用循环进行处理。2019/9/10电气与信息工程学院计算机系制作3一维数组3类型数组名[长度]定义数组一般形式:intarray[10]例:floatf[100];charch[5];所有元素都是int数组名长度:10注意:必须是常量数组:array2019/9/10电气与信息工程学院计算机系制作3数组概念2数组名:d用位置(下标)表示。注:下标从0开始d[0]d[1]d[2]d[3]d[4]d[5]d[6]d[7]数组特性:1、有统一的名字,即数组名3、可通过变量在其中的位置来表示它2、多个变量有序的排列4、数组中的变量叫数组元素,它在其中的位置叫下标2019/9/10电气与信息工程学院计算机系制作3一维数组3数组定义后的元素初值是随机数一般需要我们来初始化inta[10]={1,2,3,4,5,6,9,0,12,-1};inta[]={11,22,33,44,55};inta[5]={1};1234569012-1省略时,长度为5,2019/9/10电气与信息工程学院计算机系制作3一维数组3数组元素的引用数组变量名[下标表达式]例:d[3];#includestdio.hintmain(){intd[10]={1,0,4,2,3,4,5,6,30,40},s;s=d[0]+d[1]+d[4]+d[8];printf(“s=%d”,s);return0;}d[2]d[6]d2019/9/10电气与信息工程学院计算机系制作3数组概念2例:从键盘输入一个数,按二进制形式输出分析:将一个数的所有二进制位看成一个向量例如:如果输入的是82则是(0,1,0,1,0,0,1,0)问题转换成如何求该向量2019/9/10电气与信息工程学院计算机系制作3数组概念2C语言中的数组可以表示向量则向量a(0,1,0,1,0,0,1,0)在C语言中就是01001001数组a因此问题转换成如果给数组a中的元素赋值提问:如何赋值,有没有规律?2019/9/10电气与信息工程学院计算机系制作3数组概念2从键盘输入的是82d[7]=0d[6]=1d[5]=0d[4]=0d[3]=1d[2]=0d[1]=1d[0]=0最后按照顺序输出d[0]—d[7]的值d[7]=n%2;n=n/2;d[6]=n%2;n=n/2;d[5]=n%2;n=n/2;d[4]=n%2;n=n/2;d[3]=n%2;n=n/2;d[2]=n%2;n=n/2;d[1]=n%2;n=n/2;d[0]=n%2;n=n/2;2019/9/10电气与信息工程学院计算机系制作3数组概念2思路1、定义一个数组,长度为82、定义变量n,i,n放所要转换的数,i作为访问数组中变量的位置3、从第7个开始,往前逐个给数组中的变量赋值4、从第0个开始,往后逐个输出数组中的变量2019/9/10电气与信息工程学院计算机系制作开始定义数组d定义变量i,n输入ni=7i=0d[i]=n%2n=n/2i=i-1i=0i=7输出d[i]结束i=i+1是是否否流程图2019/9/10电气与信息工程学院计算机系制作3数组概念2#includestdio.hintmain(){intd[8],n,i;scanf(%d,&n);for(i=7;i=0;i--){d[i]=n%2;n=n/2;}for(i=0;i=7;i++){printf(%d,d[i]);}system(pause);return0;}2019/9/10电气与信息工程学院计算机系制作3数组的妙用3例:输出数列1,1,2,3,5,8……的前20项11235813213455思路:将数列看成一向量1、定义一个长度20个的数组表示向量2、根据位置关系逐个计算每个变量(元素)的值2019/9/10电气与信息工程学院计算机系制作#includestdio.h#defineNUM100intmain(){intf[NUM],i;f[0]=1;f[1]=1;for(i=2;iNUM;i++){f[i]=f[i-1]+f[i-2];}for(i=0;iNUM;i++){printf(“%d,”,f[i]);}return0;}lesson9_01.c2019/9/10电气与信息工程学院计算机系制作3数组的妙用:课堂练习3求S=1/1+1/2+2/3+3/5+5/8+8/13+……后面20项的和分析s=1/1+1/2+2/3+3/5+5/8+……式中各项都是11235813…数列中的值,将其求出来放在数组中,然后逐个相除2019/9/10电气与信息工程学院计算机系制作3一维数组的基本操作4数组的赋值利用赋值语句为数组赋值for(i=0;i10;i++){vote[i]=0;}调用标准输入函数为数组赋值for(i=0;i10;i++){scanf(“%d”,&vote[i]);}intvote[10];2019/9/10电气与信息工程学院计算机系制作3一维数组的基本操作4数组的输出for(i=0;i10;i++){printf(“%5d”,vote[i]);}intvote[10];2019/9/10电气与信息工程学院计算机系制作3数组应用5数组大小最好用宏来定义,以适应未来可能的变化#defineSIZE10inta[SIZE];注意:1、数组一旦定义,不能改变大小2、访问数组元素时,下标不能超过长度,即下标有效范围[0,len)3、数组间不能整体赋值2019/9/10电气与信息工程学院计算机系制作3数组应用6如果有数组inta[10]={1,2,4,5,3,6,7,8,9,0};intb[10];如果需要使数组b中元素的值与a的一样b=a(Ⅹ是错误的)正确做法for(i=0;i10;i++)b[i]=a[i];2019/9/10电气与信息工程学院计算机系制作3课堂练习6从键盘输入某班10位同学C语言学习成绩,输出最高分2019/9/10电气与信息工程学院计算机系制作3数组应用5例2:使用筛选法输出18内的所有素数23456789101112131415161712180000000030042019/9/10电气与信息工程学院计算机系制作#includestdio.h#includemath.h#defineNUM18intmain(){intdata[NUM],i,j,n;for(i=0;iNUM;i++)/*给数组的元素赋值*/data[i]=i+1;n=sqrt(NUM);for(i=1;in;i++)/*将数组中非素数置成0*/for(j=i+1;jNUM;j++)if(data[i]!=0&&data[j]%data[i]==0)data[j]=0;for(i=1;iNUM;i++)/*输出*/if(data[i]!=0)printf(%6d,data[i]);return0;}lesson9_02.c2019/9/10电气与信息工程学院计算机系制作3数组应用5例3:已知在一条铁路上有十个站:A,B,C,D,E,F,G,H,I,J,如下图所示127ABCDEFGHJI10020056131389875火车票费用计算规则:当乘车距离300公里时,每公里0.5元,=300公里时,超过部分每公里0.3元,设计一个程序,输入两个站的站名,计算其应付的火车票费用882019/9/10电气与信息工程学院计算机系制作3数组应用5问题分析使用数组保存相邻站之间的距离通过站名计算乘车距离计算火车票费用2019/9/10电气与信息工程学院计算机系制作#includestdio.h#defineNUM9/*段数*/intmain(){intline[NUM]={100,200,56,131,38,98,75,88,127},i,distance=0;floatvalue;charstart,end,ctn;while(1){printf(请输入乘车起点站\n);scanf(%c,&start);getchar();printf(请输入乘车终站\n);scanf(%c,&end);getchar();for(i=start-'A';iend-'A';i++){distance+=line[i];}if(distance300)value=0.5*distance;elsevalue=0.5*300+0.35*(distance-300);printf(%c站--%c站的火车票费用为%.2f元\n,start,end,value);printf(是否继续(Y/N));scanf(%c,&ctn);getchar();if(ctn!='Y')break;system(cls);}return0;}lesson9_03.c2019/9/10电气与信息工程学院计算机系制作3数组应用5根据需求对数据进行统计为了满足特定的需要,对一组数据的某些特征进行统计是一项经常遇到的基本操作。例如,统计一段文本中某个字符出现的频率;统计学生考试的平均成绩等等都属于统计操作。统计操作的结果往往是通过对所有数据进行扫描、判断或综合加工得到的。在C程序中,参与统计操作的批量数据可以用一维数组来组织,具体统计过程可以通过逻辑判断、累计、算术运算等基本操作手段实现。2019/9/10电气与信息工程学院计算机系制作例4:统计一段文本中每个英文字母出现的次数。分析:定义一个数组letter,存放英文字母出现的次数00000000letterA的次数B的次数C的次数循环字符数组,针对每个字母,找到其在数组letter中的对应位置,然后加13数组应用52019/9/10电气与信息工程学院计算机系制作00000000letterA的次数B的次数C的次数如何确定每个字母在letter中的位置呢?A对应letter[0]B对应letter[1]C对应letter[2]下标:0‘A’-’A’下标:1‘B’-’A’下标:2‘C’-’A’3数组应用52019/9/10电气与信息工程学院计算机系制作#includestdio.h#defineNUM26intmain(){intletter[NUM]={0};charch;inti;printf(\nEntertextline\n);while((ch=getchar())!='\n'){if('A'=ch&&ch='Z'){/*检测是否为大写字母*/letter[ch-'A']=letter[ch-'A']+1;}elseif('a'=ch&&ch='z')/*检测是否为小写字母*/letter[ch-'a']=letter[ch-'a']+1;}for(i=0;iNUM;i++){/*输出每个英文字母出现的次数*/printf(\n\'%c\':%d,'A'+i,letter[i]);}return0;}lesson9_04.c2019/9/10电气与信息工程学院计算机系制作3课后练习7将一个数组逆序。例如,输入12345678910输出10
本文标题:lesson9数据的组织结构一一维数组
链接地址:https://www.777doc.com/doc-841667 .html