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

下载本文档

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

文档简介

数据的组织结构—数组第四章一、一维数组二、一维数组的编程实例三、字符数组与字符串四、二维数组1数据的组织结构--一维数组共48页,您现在浏览的是第1页!数组类型的应用背景同时存在若干个用来描述同一性质且不同个体的数据将这些数据组织在一起形成批量数据,共同参与处理,很多操作才具有实际意义2数据的组织结构--一维数组共48页,您现在浏览的是第2页!例如:输入100名学生的成绩,要求输出高于平均分的所有成绩。单一数据考虑:用100个变量(a1,a2,,a100)存放学生成绩,与平均成绩(ave)进行判断, if(a1>ave)printf(“%f\n”,a1); if(a2>ave)printf(“%f\n”,a2);

用数组:for(i=1;i<=100;i++) if(a[i]>ave)printf(“%f\n”,a[i]);数组是一种用来组织批量数据的数据类型。3数据的组织结构--一维数组共48页,您现在浏览的是第3页!说明:若数组长度为n,下标的下限从0开始,上限到n-1。注意下标不要越界,否则将产生不可预料的运行结果,C语言并不检验下标是否越界C语言规定,数组名是一个地址常量,代表所分配的内存区域的起始地址4数据的组织结构--一维数组共48页,您现在浏览的是第4页!一维数组初始化在定义数组时对数组元素赋以初值

inta[10]={0,1,2,3,4,5,6,7,8,9};在对全部数组元素赋初值时,数组长度可以省略

inta[]={0,1,2,3,4,5,6,7,8,9};只给一部分赋值,未设定初值的自动被设定为0,数组长度不能省略

inta[10]={0,1,2,3,4};intdigit[10]={0};有几个初值,数组默认大小就是多大5数据的组织结构--一维数组共48页,您现在浏览的是第5页!某个公司计划由职工推选一名办公室主任。假设有10名候选人准备参与竞选。编写一个程序,输入一组选举人的投票信息,统计每个候选人的得票数目及选举结果。

实例1根据条件对数据进行筛选二、一维数组的编程实例[P81,例4-1]6数据的组织结构--一维数组共48页,您现在浏览的是第6页!数据对象每位候选人的得票数量intvote[10]投票时输入的编码intcode最高得票数量intwinner约束条件假设投票时以0作为输入的结束标志输入无效编码的检验7数据的组织结构--一维数组共48页,您现在浏览的是第7页!#include<stdio.h>#defineNUM10 /*候选人人数*/main(){intvote[NUM]={0}; intcode,i,winner;

/*职工投票*/printf("\nEnteryourselection<0end>:\n");

do{scanf("%d",&code);if(code<0||code>NUM){ /*检验输入的编码是否有效*/ printf("\nInvalidvote.");}else{if(code!=0) vote[code-1]=vote[code-1]+1; /*累加票数*/}

}while(code!=0);程序代码8数据的组织结构--一维数组共48页,您现在浏览的是第8页!为了满足特定的需要,对一组数据的某些特征进行统计是一项经常遇到的基本操作例如统计一段文本中某个字符出现的频率统计学生考试的平均成绩……在C程序中,参与统计操作的批量数据可以用一维数组来组织,具体统计过程可以通过逻辑判断、累计、算术运算等基本操作手段实现根据需求对数据进行统计9数据的组织结构--一维数组共48页,您现在浏览的是第9页!算法描述

开始

ch=getchar()

输出统计结果

相应计数器加1

结束

是大写

是小写

相应计数器加1

ch!=‘\n’Y

N

Y

N

N

Y

10数据的组织结构--一维数组共48页,您现在浏览的是第10页!实例2:

大奖赛

每年中央电视台都要举办青年歌手大奖赛。假设有13位评委参与评分工作。计算每位歌手最终得分的方法是:首先去掉一个最高分和一个最低分,然后计算剩余11个分数的平均值,所得结果就是选手的最终得分。希望编写一个程序,帮助工作人员计算每个歌手的分数。11数据的组织结构--一维数组共48页,您现在浏览的是第11页!算法描述

12数据的组织结构--一维数组共48页,您现在浏览的是第12页!/*找出最高分、最低分,并同时累加13个分数的总和*/minValue=score[0];maxValue=score[0];sum=score[0];for(i=1;i<NUM;i++){if(score[i]<minValue) minValue=score[i];if(score[i]>maxValue) maxValue=score[i];sum=sum+score[i];}

/*计算并输出歌手的最终得分*/sum=(sum-minValue-maxValue)/(NUM-2);printf("\nFinalscoreis%6.2f",sum);}13数据的组织结构--一维数组共48页,您现在浏览的是第13页!

题目用简单选择法对从键盘输入的10个整数由小到大排序(升序)。实例3选择排序P93例4-6数据对象考虑应保存10个整数,设置数组a[10]每个元素存一个数个数保存在a[0]中14数据的组织结构--一维数组共48页,您现在浏览的是第14页!选择排序过程:P93原始数据:[23163295667863]minimini第一趟后:6[1632956237863]minmin第二趟后:69[321656237863]imin15数据的组织结构--一维数组共48页,您现在浏览的是第15页!最小值下标minValue0i

i<N-1

minValue!=i

交换

Y

Y

NN

开始

输入待排序整数数列

i+1i

iminValue

显示排序后的结果

结束

算法描述显示整数数列16数据的组织结构--一维数组共48页,您现在浏览的是第16页!

for(i=0;i<N-1;i++)/*排序*/{min=i;for(j=i+1;j<N;j++) if(a[j]<a[min])min=j;if(i!=min){t=a[i];a[i]=a[min];a[min]=t;}}

printf("Thesortednumbers:\n");for(i=0;i<N;i++)/*显示排序后结果*/ printf("%d",a[i]);}17数据的组织结构--一维数组共48页,您现在浏览的是第17页!

随机数的产生

C语言的标准库提供了函数rand()和srand()。可实现如模拟和游戏等方面的应用。函数rand和srand的函数原型在stdlib.h中函数rand()产生一个在0到RAND_MAX之间的整数值(随机数)。RAND_MAX是符号常量,其值为32767。

调用形式:n=rand();18数据的组织结构--一维数组共48页,您现在浏览的是第18页!

intrandom(intnum)

返回一个0~num-1之间的数k=random(10);

voidrandomize()

初始化随机数发生器使用例:randomize();for(i=0;i<10;i++)/*产生随机数*/ a[i]=1+random(10);另一组随机函数:19数据的组织结构--一维数组共48页,您现在浏览的是第19页!实例4:请编写一个程序,查看在某班35名学生的某门课程的考试成绩中,是否存在不及格的学生问题分析用一维数组记录每位学生的考试成绩,下标表示每个学生的编号,元素内容表示考试成绩通过从前往后依次查看每个元素内容的过程实现查找20数据的组织结构--一维数组共48页,您现在浏览的是第20页!#include<stdio.h>#include<stdlib.h>#defineNUM35/*学生人数*/main(){intscore[NUM],i;randomize();for(i=0;i<NUM;i++)/*随机产生35个考试成绩*/score[i]=random(100);for(i=0;i<NUM;i++)/*输出35个考试成绩*/printf("\nNo.%d:%d",i+1,score[i]);for(i=0;i<NUM;i++)if(score[i]<60)break;if(i<NUM)printf("\nNotallpass.");elseprintf("Allpass.");}问题:找出(显示)所有不及格的学生的成绩,应如何修改21数据的组织结构--一维数组共48页,您现在浏览的是第21页!开始结束构造非递减数组value二分查找Key输入key存在Key输出成功输出失败NY22数据的组织结构--一维数组共48页,您现在浏览的是第22页!ST.elemST.length例如:key=20的查找过程如下:查找不成功的条件:low>highhighmidlow23数据的组织结构--一维数组共48页,您现在浏览的是第23页!#include<stdio.h>#defineNUM10main(){intvalue[NUM]={05,13,19,21,37,56,64,75,80,88};intlow,high,mid,key;printf("\nEnterakey:");scanf("%d",&key);//二分查找

;

//输出查找结果if(low<=high) printf("\n%disfoundat%d",key,mid);else printf("\n%disnotfound.",key);

}24数据的组织结构--一维数组共48页,您现在浏览的是第24页!顺序查找的特点优点是在查找前没有先决条件,在任何情况下都可以使用缺点是效率低若待查找的数据是有序的,则可以使用二分查找25数据的组织结构--一维数组共48页,您现在浏览的是第25页!一、一维数组一维数组:由若干具有相同类型的数据元素组成。每个元素仅使用一个序号(下标)唯一标识。一维数组定义<元素类型说明符><数组名>[长度];

inta[10];元素序号(下标)从0开始,即a[0]a[1]…a[9]长度即为元素的数量,必须给定数组名的命名与通常变量命名方式相同系统为它分配一片连续的存储空间数组元素的引用形式

数组名[下标]◆下标为整型表达式26数据的组织结构--一维数组共48页,您现在浏览的是第26页!数组的存储实现例如:inta[8];为a分配的存储空间如图:所占字节数:

sizeof(元素类型)×元素个数27数据的组织结构--一维数组共48页,您现在浏览的是第27页!一维数组的引用利用赋值语句为数组元素赋值

for(i=0;i<10;i++)a[i]=0;数组的输入

for(i=0;i<10;i++)scanf(“%f”,&score[i]);数组的输出

for(i=0;i<10;i++)printf(“%6.2f”,score[i]);28数据的组织结构--一维数组共48页,您现在浏览的是第28页!问题分析记录每位候选人的得票数量(一维数组)投票可通过循环输入1~10之间的整型数值来模拟,需对候选人进行编号。例如,输入3代表某个职工选举编码为3的候选人找出最多的得票数量再从所有的候选人中筛选出得票数量与最高得票数量相同的人(可能有多人)29数据的组织结构--一维数组共48页,您现在浏览的是第29页!算法描述

输入选票code选票合法?code<>0?code-1计数器加1输出错误信息code<>0?YNNYYN职工投票30数据的组织结构--一维数组共48页,您现在浏览的是第30页!/*输出选票*/printf("\nTheamountofvotesis:");for(i=0;i<NUM;i++){printf("%4d",vote[i]);}

/*计算最高得票数量*/winner=0;for(i=1;i<NUM;i++){if(vote[i]>vote[winner]) winner=i;}

/*输出得票最高的所有候选人*/printf("\nThewinner:");for(i=winner;i<NUM;i++){if(vote[i]==vote[winner]) printf("%3d",i+1);}}问题:改为winner=0;for(i=1;i<NUM;i++){if(vote[i]>=vote[winner]) winner=i;}后面是否修改,如何修改31数据的组织结构--一维数组共48页,您现在浏览的是第31页!教材P84例4-2:编写一个程序,从键盘读入一行文本,统计每个英文字母出现的频率该题与上一章的3.5例5的方法类似基本方法用一维数组构造26个用于记录每个字母出现次数的计数器用数组下标来区分不同字母,且顺序一致输入的字符如果是字母,则按其在字母表中的顺序找到相应的计数器32数据的组织结构--一维数组共48页,您现在浏览的是第32页!#include<stdio.h>#defineNUM26main(){intletter[NUM]={0}; charch;inti;printf("\nEntertextline\n");while((ch=getchar())!='\n'){ if('A'<=ch&&ch<='Z'){ /*检测是否为大写字母*/letter[ch-'A']=letter[ch-'A']+1;}else{if('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]);}}问题:若只输出计数次数大于0的结果,应如何修改?33数据的组织结构--一维数组共48页,您现在浏览的是第33页!数据对象分析用一维数组存储13位评委给出的分数floatscore[13]寻找最高分和最低分floatmaxValue,minValue

计算剩余11个分数的平均分

floatsum

34数据的组织结构--一维数组共48页,您现在浏览的是第34页!#include<stdio.h>#defineNUM13

/*评委人数*/main(){floatscore[NUM];inti;floatminValue,maxValue,sum;

/*输入13位评委给出的分数*/printf("\nEnter13score:");for(i=0;i<NUM;i++){scanf("%f",&score[i]);}程序代码

35数据的组织结构--一维数组共48页,您现在浏览的是第35页!排序问题将一组无序的数列重新排列成非递减或非递增的顺序是一种经常需要的操作。例如,在管理学生成绩的应用程序中,可以用一个数列表示一个班级的学生成绩,并按照从高到低的顺序重新排列,以便确定获得奖学金的学生36数据的组织结构--一维数组共48页,您现在浏览的是第36页!算法思想:利用数组存放n个数据,并在此数组中进行排序针对一组n个数据a0、a1、…、an-1选出最小的数据,与个数据进行交换从剩余的n-1个数据中选出最小的数据,与剩余的n-1个数据的个数据进行交换进行n-1遍处理后,数组形成升序排列37数据的组织结构--一维数组共48页,您现在浏览的是第37页!算法:1、从键盘输入N个整数(即10个)。2、for(i=0;i<N-1;i++)2.1设第i个值为最小值(min)。2.2for(j=i+1;j<N;j++)如果第j个值比第min个值小,则minj2.3if(i!=min)a[i]a[min]3、输出。

流程图P94图4-938数据的组织结构--一维数组共48页,您现在浏览的是第38页!#include<stdio.h>#defineN10/*参与排序的数据个数*/main(){inta[N];/*存放参与排序的所有整数*/inti,j,min,t;/*通过键盘输入待排序的整型数列*/

printf("Input10numbers:\n");for(i=0;i<N;i++)scanf("%d",&a[i]);

(接下一页)arrsort.c程序实现39数据的组织结构--一维数组共48页,您现在浏览的是第39页!for(i=0;i<10;i++)/*产生随机数*/ a[i]=1+rand()%10;printf(“Therandnumbers:\n”);/*显示*/for(i=0;i<10;i++) printf("%d",a[i]);由随机函数产生10个数,放入数组中,需要#include<stdlib.h>数据产生待排序的数值通过随机数产生,以便模拟键盘输入。40数据的组织结构--一维数组共48页,您现在浏览的是第40页!可缩放和移动函数rand所产生的值,确定指定范围。一般方法:n=a+rand()%b;其中:a为移动值,所需的连续整数值范围内的个数;

b是比例因子,等于所需的连续整数值范围的宽度。函数srand使程序随机化。需要设置随机种子。

srand(time(NULL))函数time的函数原型time.h中。41数据的组织结构--一维数组共48页,您现在浏览的是第41页!查找问题查找是指根据某个给定的条件,在一组数据中搜索是否存在满足该条件的数据的过程查找有2种结果满足给定的条件的数据存在,即查找成功,给出成功的标志该数据不存在,即查找不成功,应给出失败的标志在程序中,查找操作的结果经常被用来作为是否执行某项后续操作的决策依据42数据的组织结构--一维数组共48页,您现在浏览的是第42页!算法描述开始

结束

顺序查找不及格的学生

显示35名学生的成绩

存在不及格学生

输出Notallpass

输出Allpass

随机产生35名学

温馨提示

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

评论

0/150

提交评论