lesson9数据的组织结构一一维数组课件_第1页
lesson9数据的组织结构一一维数组课件_第2页
lesson9数据的组织结构一一维数组课件_第3页
lesson9数据的组织结构一一维数组课件_第4页
lesson9数据的组织结构一一维数组课件_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2022/12/19电气与信息工程学院计算机系制作Lesson9数据的组织2022/12/16电气与信息工程学院计算机系制作Lesso2022/12/19电气与信息工程学院计算机系制作学习目标:31学会使用数组处理程序中的数据2022/12/16电气与信息工程学院计算机系制作学习目标:2022/12/19电气与信息工程学院计算机系制作3数组概念2向量数学定义:一组既有大小又有方向的量例如:向量d:(1,3,4,6,5,2,0,8)向量b:(100,300,200,400)特点:1、是一组量2、有方向性,即每个数据在其中有位置2022/12/16电气与信息工程学院计算机系制作3数组概念2022/12/19电气与信息工程学院计算机系制作3数组概念2在C语言中,数组与向量对应,可以实现处理与向量相关的问题数组:若干类型相同的相关数据(变量)顺序排列在一起例如:向量d:(1,3,4,6,5,2,0,8)465208132022/12/16电气与信息工程学院计算机系制作3数组概念2022/12/19电气与信息工程学院计算机系制作3数组概念2数组类型的应用背景(处理向量问题)(1)同时存在若干个用来描述同一性质且不同个体的数据(向量)。(2)只有将这些数据组织在一起形成批量数据,使用循环进行处理。2022/12/16电气与信息工程学院计算机系制作3数组概念2022/12/19电气与信息工程学院计算机系制作3一维数组3类型数组名[长度]定义数组一般形式:intarray[10]例:floatf[100];charch[5];所有元素都是int数组名长度:10注意:必须是常量数组:array2022/12/16电气与信息工程学院计算机系制作3一维数组2022/12/19电气与信息工程学院计算机系制作3数组概念2数组名:d用位置(下标)表示。注:下标从0开始d[0]d[1]d[2]d[3]d[4]d[5]d[6]d[7]数组特性:1、有统一的名字,即数组名3、可通过变量在其中的位置来表示它2、多个变量有序的排列4、数组中的变量叫数组元素,它在其中的位置叫下标2022/12/16电气与信息工程学院计算机系制作3数组概念2022/12/19电气与信息工程学院计算机系制作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,2022/12/16电气与信息工程学院计算机系制作3一维数组2022/12/19电气与信息工程学院计算机系制作3一维数组3数组元素的引用<数组变量名>[<下标表达式>]例:d[3];#include<stdio.h>intmain(){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]d2022/12/16电气与信息工程学院计算机系制作3一维数组2022/12/19电气与信息工程学院计算机系制作3数组概念2例:从键盘输入一个数,按二进制形式输出分析:将一个数的所有二进制位看成一个向量例如:如果输入的是82则是(0,1,0,1,0,0,1,0)问题转换成如何求该向量2022/12/16电气与信息工程学院计算机系制作3数组概念2022/12/19电气与信息工程学院计算机系制作3数组概念2C语言中的数组可以表示向量则向量a(0,1,0,1,0,0,1,0)在C语言中就是01001001数组a因此问题转换成如果给数组a中的元素赋值提问:如何赋值,有没有规律?2022/12/16电气与信息工程学院计算机系制作3数组概念2022/12/19电气与信息工程学院计算机系制作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;2022/12/16电气与信息工程学院计算机系制作3数组概念2022/12/19电气与信息工程学院计算机系制作3数组概念2思路1、定义一个数组,长度为82、定义变量n,i,n放所要转换的数,i作为访问数组中变量的位置3、从第7个开始,往前逐个给数组中的变量赋值4、从第0个开始,往后逐个输出数组中的变量2022/12/16电气与信息工程学院计算机系制作3数组概念2022/12/19电气与信息工程学院计算机系制作流程图2022/12/16电气与信息工程学院计算机系制作流程图2022/12/19电气与信息工程学院计算机系制作3数组概念2#include<stdio.h> intmain(){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;}2022/12/16电气与信息工程学院计算机系制作3数组概念2022/12/19电气与信息工程学院计算机系制作3数组的妙用3例:输出数列1,1,2,3,5,8……的前20项11235813213455思路:将数列看成一向量1、定义一个长度20个的数组表示向量2、根据位置关系逐个计算每个变量(元素)的值2022/12/16电气与信息工程学院计算机系制作3数组的妙2022/12/19电气与信息工程学院计算机系制作#include<stdio.h>#defineNUM100 intmain(){intf[NUM],i;f[0]=1;f[1]=1;for(i=2;i<NUM;i++){f[i]=f[i-1]+f[i-2];}

for(i=0;i<NUM;i++){printf(“%d,”,f[i]);}return0;}lesson9_01.c2022/12/16电气与信息工程学院计算机系制作#incl2022/12/19电气与信息工程学院计算机系制作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…数列中的值,将其求出来放在数组中,然后逐个相除2022/12/16电气与信息工程学院计算机系制作3数组的妙2022/12/19电气与信息工程学院计算机系制作3一维数组的基本操作4数组的赋值利用赋值语句为数组赋值

for(i=0;i<10;i++){vote[i]=0;}调用标准输入函数为数组赋值

for(i=0;i<10;i++){scanf(“%d”,&vote[i]);}intvote[10];2022/12/16电气与信息工程学院计算机系制作3一维数组2022/12/19电气与信息工程学院计算机系制作3一维数组的基本操作4数组的输出

for(i=0;i<10;i++){printf(“%5d”,vote[i]);}intvote[10];2022/12/16电气与信息工程学院计算机系制作3一维数组2022/12/19电气与信息工程学院计算机系制作3数组应用5数组大小最好用宏来定义,以适应未来可能的变化#defineSIZE10

inta[SIZE];注意:1、数组一旦定义,不能改变大小2、访问数组元素时,下标不能超过长度,即下标有效范围[0,len)3、数组间不能整体赋值2022/12/16电气与信息工程学院计算机系制作3数组应用2022/12/19电气与信息工程学院计算机系制作3数组应用6如果有数组inta[10]={1,2,4,5,3,6,7,8,9,0};intb[10];如果需要使数组b中元素的值与a的一样b=a(Ⅹ是错误的)正确做法for(i=0;i<10;i++)b[i]=a[i];2022/12/16电气与信息工程学院计算机系制作3数组应用2022/12/19电气与信息工程学院计算机系制作3课堂练习6从键盘输入某班10位同学C语言学习成绩,输出最高分2022/12/16电气与信息工程学院计算机系制作3课堂练习2022/12/19电气与信息工程学院计算机系制作3数组应用5例2:使用筛选法输出18内的所有素数23456789101112131415161712180000000030042022/12/16电气与信息工程学院计算机系制作3数组应用2022/12/19电气与信息工程学院计算机系制作#include<stdio.h>#include<math.h>#defineNUM18 intmain(){intdata[NUM],i,j,n;for(i=0;i<NUM;i++)/*给数组的元素赋值*/data[i]=i+1;n=sqrt(NUM);for(i=1;i<n;i++)/*将数组中非素数置成0*/for(j=i+1;j<NUM;j++)if(data[i]!=0&&data[j]%data[i]==0)data[j]=0;for(i=1;i<NUM;i++)/*输出*/if(data[i]!=0)printf("%6d",data[i]);return0;}lesson9_02.c2022/12/16电气与信息工程学院计算机系制作#incl2022/12/19电气与信息工程学院计算机系制作3数组应用5例3:已知在一条铁路上有十个站:

A,B,C,D,E,F,G,H,I,J,如下图所示127ABCDEFGHJI10020056131389875火车票费用计算规则:当乘车距离<300公里时,每公里0.5元,>=300公里时,超过部分每公里0.3元,设计一个程序,输入两个站的站名,计算其应付的火车票费用882022/12/16电气与信息工程学院计算机系制作3数组应用2022/12/19电气与信息工程学院计算机系制作3数组应用5问题分析使用数组保存相邻站之间的距离通过站名计算乘车距离计算火车票费用2022/12/16电气与信息工程学院计算机系制作3数组应用2022/12/19电气与信息工程学院计算机系制作#include<stdio.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';i<end-'A';i++){ distance+=line[i]; } if(distance<300) value=0.5*distance; else value=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.c2022/12/16电气与信息工程学院计算机系制作#incl2022/12/19电气与信息工程学院计算机系制作3数组应用5根据需求对数据进行统计

为了满足特定的需要,对一组数据的某些特征进行统计是一项经常遇到的基本操作。例如,统计一段文本中某个字符出现的频率;统计学生考试的平均成绩等等都属于统计操作。统计操作的结果往往是通过对所有数据进行扫描、判断或综合加工得到的。在C程序中,参与统计操作的批量数据可以用一维数组来组织,具体统计过程可以通过逻辑判断、累计、算术运算等基本操作手段实现。

2022/12/16电气与信息工程学院计算机系制作3数组应用2022/12/19电气与信息工程学院计算机系制作例4:统计一段文本中每个英文字母出现的次数。分析:定义一个数组letter,存放英文字母出现的次数00000000letterA的次数B的次数C的次数循环字符数组,针对每个字母,找到其在数组letter中的对应位置,然后加13数组应用52022/12/16电气与信息工程学院计算机系制作例4:统计2022/12/19电气与信息工程学院计算机系制作00000000letterA的次数B的次数C的次数如何确定每个字母在letter中的位置呢?A对应letter[0]B对应letter[1]C对应letter[2]下标:0‘A’-’A’下标:1‘B’-’A’下标:2‘C’-’A’3数组应用52022/12/16电气与信息工程学院计算机系制作000002022/12/19电气与信息工程学院计算机系制作#include<stdio.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;i<NUM;i++){/*输出每个英文字母出现的次数*/printf("\n\'%c\':%d",'A'+i,letter[i]);}return0;}lesson9_04.c2022/12/16电气与信息工程学院计算机系制作#incl2022/12/19电气与信息工程学院计算机系制作3课后练习7将一个数组逆序。例如,输入12345678910

输出10987654321从键盘输入10个数,求最大值和最小值的差2022/12/16电气与信息工程学院计算机系制作3课后练习2022/12/19电气与信息工程学院计算机系制作Lesson9数据的组织2022/12/16电气与信息工程学院计算机系制作Lesso2022/12/19电气与信息工程学院计算机系制作学习目标:31学会使用数组处理程序中的数据2022/12/16电气与信息工程学院计算机系制作学习目标:2022/12/19电气与信息工程学院计算机系制作3数组概念2向量数学定义:一组既有大小又有方向的量例如:向量d:(1,3,4,6,5,2,0,8)向量b:(100,300,200,400)特点:1、是一组量2、有方向性,即每个数据在其中有位置2022/12/16电气与信息工程学院计算机系制作3数组概念2022/12/19电气与信息工程学院计算机系制作3数组概念2在C语言中,数组与向量对应,可以实现处理与向量相关的问题数组:若干类型相同的相关数据(变量)顺序排列在一起例如:向量d:(1,3,4,6,5,2,0,8)465208132022/12/16电气与信息工程学院计算机系制作3数组概念2022/12/19电气与信息工程学院计算机系制作3数组概念2数组类型的应用背景(处理向量问题)(1)同时存在若干个用来描述同一性质且不同个体的数据(向量)。(2)只有将这些数据组织在一起形成批量数据,使用循环进行处理。2022/12/16电气与信息工程学院计算机系制作3数组概念2022/12/19电气与信息工程学院计算机系制作3一维数组3类型数组名[长度]定义数组一般形式:intarray[10]例:floatf[100];charch[5];所有元素都是int数组名长度:10注意:必须是常量数组:array2022/12/16电气与信息工程学院计算机系制作3一维数组2022/12/19电气与信息工程学院计算机系制作3数组概念2数组名:d用位置(下标)表示。注:下标从0开始d[0]d[1]d[2]d[3]d[4]d[5]d[6]d[7]数组特性:1、有统一的名字,即数组名3、可通过变量在其中的位置来表示它2、多个变量有序的排列4、数组中的变量叫数组元素,它在其中的位置叫下标2022/12/16电气与信息工程学院计算机系制作3数组概念2022/12/19电气与信息工程学院计算机系制作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,2022/12/16电气与信息工程学院计算机系制作3一维数组2022/12/19电气与信息工程学院计算机系制作3一维数组3数组元素的引用<数组变量名>[<下标表达式>]例:d[3];#include<stdio.h>intmain(){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]d2022/12/16电气与信息工程学院计算机系制作3一维数组2022/12/19电气与信息工程学院计算机系制作3数组概念2例:从键盘输入一个数,按二进制形式输出分析:将一个数的所有二进制位看成一个向量例如:如果输入的是82则是(0,1,0,1,0,0,1,0)问题转换成如何求该向量2022/12/16电气与信息工程学院计算机系制作3数组概念2022/12/19电气与信息工程学院计算机系制作3数组概念2C语言中的数组可以表示向量则向量a(0,1,0,1,0,0,1,0)在C语言中就是01001001数组a因此问题转换成如果给数组a中的元素赋值提问:如何赋值,有没有规律?2022/12/16电气与信息工程学院计算机系制作3数组概念2022/12/19电气与信息工程学院计算机系制作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;2022/12/16电气与信息工程学院计算机系制作3数组概念2022/12/19电气与信息工程学院计算机系制作3数组概念2思路1、定义一个数组,长度为82、定义变量n,i,n放所要转换的数,i作为访问数组中变量的位置3、从第7个开始,往前逐个给数组中的变量赋值4、从第0个开始,往后逐个输出数组中的变量2022/12/16电气与信息工程学院计算机系制作3数组概念2022/12/19电气与信息工程学院计算机系制作流程图2022/12/16电气与信息工程学院计算机系制作流程图2022/12/19电气与信息工程学院计算机系制作3数组概念2#include<stdio.h> intmain(){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;}2022/12/16电气与信息工程学院计算机系制作3数组概念2022/12/19电气与信息工程学院计算机系制作3数组的妙用3例:输出数列1,1,2,3,5,8……的前20项11235813213455思路:将数列看成一向量1、定义一个长度20个的数组表示向量2、根据位置关系逐个计算每个变量(元素)的值2022/12/16电气与信息工程学院计算机系制作3数组的妙2022/12/19电气与信息工程学院计算机系制作#include<stdio.h>#defineNUM100 intmain(){intf[NUM],i;f[0]=1;f[1]=1;for(i=2;i<NUM;i++){f[i]=f[i-1]+f[i-2];}

for(i=0;i<NUM;i++){printf(“%d,”,f[i]);}return0;}lesson9_01.c2022/12/16电气与信息工程学院计算机系制作#incl2022/12/19电气与信息工程学院计算机系制作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…数列中的值,将其求出来放在数组中,然后逐个相除2022/12/16电气与信息工程学院计算机系制作3数组的妙2022/12/19电气与信息工程学院计算机系制作3一维数组的基本操作4数组的赋值利用赋值语句为数组赋值

for(i=0;i<10;i++){vote[i]=0;}调用标准输入函数为数组赋值

for(i=0;i<10;i++){scanf(“%d”,&vote[i]);}intvote[10];2022/12/16电气与信息工程学院计算机系制作3一维数组2022/12/19电气与信息工程学院计算机系制作3一维数组的基本操作4数组的输出

for(i=0;i<10;i++){printf(“%5d”,vote[i]);}intvote[10];2022/12/16电气与信息工程学院计算机系制作3一维数组2022/12/19电气与信息工程学院计算机系制作3数组应用5数组大小最好用宏来定义,以适应未来可能的变化#defineSIZE10

inta[SIZE];注意:1、数组一旦定义,不能改变大小2、访问数组元素时,下标不能超过长度,即下标有效范围[0,len)3、数组间不能整体赋值2022/12/16电气与信息工程学院计算机系制作3数组应用2022/12/19电气与信息工程学院计算机系制作3数组应用6如果有数组inta[10]={1,2,4,5,3,6,7,8,9,0};intb[10];如果需要使数组b中元素的值与a的一样b=a(Ⅹ是错误的)正确做法for(i=0;i<10;i++)b[i]=a[i];2022/12/16电气与信息工程学院计算机系制作3数组应用2022/12/19电气与信息工程学院计算机系制作3课堂练习6从键盘输入某班10位同学C语言学习成绩,输出最高分2022/12/16电气与信息工程学院计算机系制作3课堂练习2022/12/19电气与信息工程学院计算机系制作3数组应用5例2:使用筛选法输出18内的所有素数23456789101112131415161712180000000030042022/12/16电气与信息工程学院计算机系制作3数组应用2022/12/19电气与信息工程学院计算机系制作#include<stdio.h>#include<math.h>#defineNUM18 intmain(){intdata[NUM],i,j,n;for(i=0;i<NUM;i++)/*给数组的元素赋值*/data[i]=i+1;n=sqrt(NUM);for(i=1;i<n;i++)/*将数组中非素数置成0*/for(j=i+1;j<NUM;j++)if(data[i]!=0&&data[j]%data[i]==0)data[j]=0;for(i=1;i<NUM;i++)/*输出*/if(data[i]!=0)printf("%6d",data[i]);return0;}lesson9_02.c2022/12/16电气与信息工程学院计算机系制作#incl2022/12/19电气与信息工程学院计算机系制作3数组应用5例3:已知在一条铁路上有十个站:

A,B,C,D,E,F,G,H,I,J,如下图所示127ABCDEFGHJI10020056131389875火车票费用计算规则:当乘车距离<300公里时,每公里0.5元,>=300公里时,超过部分每公里0.3元,设计一个程序,输入两个站的站名,计算其应付的火车票费用882022/12/16电气与信息工程学院计算机系制作3数组应用2022/12/19电气与信息工程学院计算机系制作3数组应用5问题分析使用数组保存相邻站之间的距离通过站名计算乘车距离计算火车票费用2022/12/16电气与信息工程学院计算机系制作3数组应用2022/12/19电气与信息工程学院计算机系制作#include<stdio.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';i<end-'A';i++){ distance+=line[i]; } if(distance<300) value=0.5*distance; else value=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.c2022/12/1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论