c语言程序设计4(数组、字符串).ppt





《c语言程序设计4(数组、字符串).ppt》由会员分享,可在线阅读,更多相关《c语言程序设计4(数组、字符串).ppt(59页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第4 4章章 数据的组织结构(一)数据的组织结构(一)4.3 4.3 字符串的组织字符串的组织 4.2 4.2 利用一维数组组织数据的应用实例利用一维数组组织数据的应用实例 4.1 4.1 数组类型数组类型 4.4 4.4 常用的字符串标准函数及应用实例常用的字符串标准函数及应用实例 4.1 4.1 数组类型数组类型数组数组名字相同、类型相同的一组数据名字相同、类型相同的一组数据(1 1)同时存在若干个用来描述同一性质且不同个体的数据。)同时存在若干个用来描述同一性质且不同个体的数据。(2 2)只只有有将将这这些些数数据据组组织织在在一一起起形形成成批批量量数数据据,共共同同参参与与处理,很
2、多操作才具有实际意义。处理,很多操作才具有实际意义。一维数组类型的定义一维数组类型的定义定义格式:定义格式:元素类型元素类型 数组名数组名元素个数元素个数;整型常量整型常量例如:例如:int vote10;下标从下标从0开始,因此,表示这开始,因此,表示这10个数据的下标为个数据的下标为0 9,这这10个元素是:个元素是:vote0,vote9 变量一经定义,系统就要为它分配相应的存储变量一经定义,系统就要为它分配相应的存储空间。在空间。在C C程序中,系统将为每个数组分配一段连程序中,系统将为每个数组分配一段连续的存储空间,所需要分配的存储空间总数将取决续的存储空间,所需要分配的存储空间总数
3、将取决于包含的元素个数和每个元素需要的存储空间大小。于包含的元素个数和每个元素需要的存储空间大小。数组中的各个元素将按照下标从小到大的顺数组中的各个元素将按照下标从小到大的顺序依次连续的存储在该存储空间中。序依次连续的存储在该存储空间中。scorescore0=9.2,scorescore1=9.1,scorescore2=8.7,scorescore3=9.1 score4=8.5score4=8.5 一维数组的初始化一维数组的初始化元素类型元素类型 数组名数组名 元素个数元素个数=初值初值1 1,初值,初值2,.,初值,初值n;例如:例如:float score5=9.2,9.1,8.7,
4、9.1,8.5;float score5=9.2,9.1,8.7,9.1,8.5;说明:说明:1 1)对数组全部元素赋初值时,可以省略方括号内的数组元素)对数组全部元素赋初值时,可以省略方括号内的数组元素数量。元素个数由初值个数自动确定。数量。元素个数由初值个数自动确定。例如:例如:floatscore=9.2,9.1,8.7,9.1,8.5;2 2)可以只给前面若干个元素赋予初值,未赋初值的元素自动可以只给前面若干个元素赋予初值,未赋初值的元素自动赋缺省值。赋缺省值。如:如:inta5=1,3,5;相当于:相当于:a0=1 a1=3 a2=5 a3=0 a4=0a0=1 a1=3 a2=5
5、a3=0 a4=03 3)使数组的全部元素赋予初值)使数组的全部元素赋予初值0。此时,可以使用下面这种此时,可以使用下面这种简化的书写形式:简化的书写形式:intvote10=0;1.1.数组元素的引用数组元素的引用数组变量名数组变量名 下标表达式下标表达式 注意:下标不能越界注意:下标不能越界,逐个引用逐个引用2.2.数组的赋值数组的赋值利用赋值语句为数组赋值利用赋值语句为数组赋值 for(i=0;i10;i+)for(i=0;i10;i+)votei=0;votei=0;调用标准输入函数为数组赋值调用标准输入函数为数组赋值 for(i=0;i13;i+)for(i=0;i13;i+)sca
6、nf(scanf(“%f%f”,&scorei);,&scorei);3.3.数组的输出数组的输出 for(i=0;i10;i+)for(i=0;i10;i+)printf(printf(“%5d%5d”,votei);,votei);一维数组元素的引用及基本操作一维数组元素的引用及基本操作例如:例如:main()main()intint i,a10;i,a10;for(i=0;i=9;i+)for(i=0;i=0;i-)for(i=9;i=0;i-)printf(“%d”,aiprintf(“%d”,ai););结果:结果:9 8 7 6 5 4 3 2 1 09 8 7 6 5 4 3 2
7、 1 0按照条件对数据进行筛选按照条件对数据进行筛选 在遇到的许多问题中,经常需要从众多的数据中挑在遇到的许多问题中,经常需要从众多的数据中挑选出来满足一定条件的数据,这就是数据的筛选操选出来满足一定条件的数据,这就是数据的筛选操作。在作。在C程序中,参与筛选操作的批量数据可以采程序中,参与筛选操作的批量数据可以采用一个一维数组型变量组织,筛选的条件用逻辑表用一个一维数组型变量组织,筛选的条件用逻辑表达式表示。达式表示。4.2 4.2 利用一维数组组织数据的应用实例利用一维数组组织数据的应用实例P85 P85 例例1 1:在某个公司中,计划由职工们推选一名在某个公司中,计划由职工们推选一名办公
8、室主任。假设有办公室主任。假设有1010名候选人准备参与竞选。希名候选人准备参与竞选。希望编写一个程序,输入一组选举人的投票信息,统望编写一个程序,输入一组选举人的投票信息,统计每个候选人的得票数目及选举结果。计每个候选人的得票数目及选举结果。问题分析问题分析 用一维数组记录每位候选人的得票数量,数组下标用一维数组记录每位候选人的得票数量,数组下标0 9分分别对应别对应10位候选人位候选人。投票通过循环输入介于投票通过循环输入介于110之间的整型数值来模拟。例如,之间的整型数值来模拟。例如,输入输入3代表编码为代表编码为3(下标为(下标为2)的候选人得票。)的候选人得票。0作为输入的结作为输入
9、的结束标志。束标志。找出最多的得票数量之后,从所有的候选人中筛选出得票找出最多的得票数量之后,从所有的候选人中筛选出得票数量与最高得票数量相同的人。数量与最高得票数量相同的人。显示每位候选人的得票数量。显示每位候选人的得票数量。算法描述算法描述#include#defineNUM10/*候候选选人人数人人数*/main()intvoteNUM=0;intcode,i,winner;/*职职工投票工投票*/printf(nEnteryourselection:n);doscanf(%d,&code);if(codeNUM)/*检验输检验输入的入的编码编码是否有效是否有效*/printf(nInv
10、alidvote.);elseif(code!=0)votecode-1=votecode-1+1;/*累加票数累加票数*/while(code!=0);程程序序代代码码/*输输出出选选票票*/printf(nTheamountofvotesis:);for(i=0;iNUM;i+)printf(%4d,votei);/*计计算最高得票数量算最高得票数量*/winner=0;/*记录记录得票数量最多的候得票数量最多的候选选人下人下标标*/for(i=1;ivotewinner)winner=i;/*输输出得票最高的所有候出得票最高的所有候选选人人*/printf(nThewinner:);fo
11、r(i=winner;iNUM;i+)if(votei=votewinner)printf(%3d,i+1);根据需求对数据进行统计根据需求对数据进行统计 为了满足特定的需要,对一组数据的某些特征为了满足特定的需要,对一组数据的某些特征进行统计是一项经常遇到的基本操作。例如,统计进行统计是一项经常遇到的基本操作。例如,统计一段文本中某个字符出现的频率;统计学生考试的一段文本中某个字符出现的频率;统计学生考试的平均成绩等等都属于统计操作。统计操作的结果往平均成绩等等都属于统计操作。统计操作的结果往往是通过对所有数据进行扫描、判断或综合加工得往是通过对所有数据进行扫描、判断或综合加工得到的。在到的
12、。在C C程序中,参与统计操作的批量数据可以程序中,参与统计操作的批量数据可以用一维数组来组织,具体统计过程可以通过逻辑判用一维数组来组织,具体统计过程可以通过逻辑判断、累计、算术运算等基本操作手段实现。断、累计、算术运算等基本操作手段实现。问题分析问题分析l用用一一维维数数组组构构造造2626个个用用于于记记录录每每个个字字母母出出现现次次数数的的累累加器。加器。l依依次次读读入入字字符符,判判别别其其是是否否为为英英文文字字母母,是是则则进进行行统统计,该字母对应的计数器(数组中的对应元素)加计,该字母对应的计数器(数组中的对应元素)加1 1。P87 P87 例例2 2:在一段文本中,可能
13、会出现各式各样的字在一段文本中,可能会出现各式各样的字符。编写一个程序,从键盘读入一行文本,完成统计每符。编写一个程序,从键盘读入一行文本,完成统计每个英文字母出现的频率的操作。个英文字母出现的频率的操作。开始 ch=getchar()输出统计结果 相应累加器加1结束 是大写 是小写 相应累加器加1ch!=n Y N Y N N Y 算法描述算法描述#include#defineNUM26main()intletterNUM=0;/*对应对应26个字母计数器的一维数组,初值为个字母计数器的一维数组,初值为0*/charch;inti;printf(nEntertextlinen);while(
14、ch=getchar()!=n)if(A=ch&ch=Z)/*检测是否为大写字母检测是否为大写字母*/letterch-A=letterch-A+1;elseif(a=ch&ch=z)/*检测是否为小写字母检测是否为小写字母*/letterch-a=letterch-a+1;for(i=0;iNUM;i+)/*输出每个英文字母出现的次数输出每个英文字母出现的次数*/printf(n%c:%d,A+i,letteri);程程序序代代码码P89 P89 例例3 3:每年中央电视台都要举办青年歌手大奖每年中央电视台都要举办青年歌手大奖赛。假设有赛。假设有1313位评委参与评分工作。计算每位歌手位评委
15、参与评分工作。计算每位歌手最终得分的方法是:首先去掉一个最高分和一个最最终得分的方法是:首先去掉一个最高分和一个最低分,然后计算剩余低分,然后计算剩余1111个分数的平均值,所得结果个分数的平均值,所得结果就是选手的最终得分。希望编写一个程序,帮助工就是选手的最终得分。希望编写一个程序,帮助工作人员计算每个歌手的分数。作人员计算每个歌手的分数。问题分析问题分析l用一维数组存储用一维数组存储 1313位评委给出的分数位评委给出的分数l寻找最高分和最低分寻找最高分和最低分l计算剩余计算剩余1111个分数的平均分个分数的平均分 算法描述算法描述程程序序代代码码#include#defineNUM13
16、main()floatscoreNUM;/*保存保存13位评委给分的一维数组位评委给分的一维数组*/inti,minValue,maxValue;floatsum;printf(nEnter13score:);/*输入输入13位评委给出的分数位评委给出的分数*/for(i=0;iNUM;i+)scanf(%f,&scorei);minValue=score0;/*找出最高分、最低分,并同时累加找出最高分、最低分,并同时累加13个分数的总和个分数的总和*/maxValue=score0;sum=score0;for(i=1;iNUM;i+)if(scoreimaxValue)maxValue=s
17、corei;sum=sum+scorei;sum=(sum-minValue-maxValue)/(NUM-2);/*计算并输出歌手的最终得分计算并输出歌手的最终得分*/printf(nFinalscoreis%6.2f,sum);l所所谓谓查查找找是是指指根根据据某某个个给给定定的的条条件件,在在一一组组数数据据中中搜搜索索是是否否存存在在满满足足该该条条件件的的数数据据的的过过程程。如如果果存存在在,则则表表示示查查找找成成功功,给给出出成成功功的的标标志志;否否则则表表示示查查找找不不成成功功,给给出出失失败败的的标标志志。在在程程序序中中,查查找找操操作作的的结结果果经经常常被被用用来
18、来作作为为是是否否执执行行某某项项后后续续操操作作的的决决策策依据。依据。查找问题查找问题P91 P91 例例4 4:已知某个班级:已知某个班级3535名学生的某门课程名学生的某门课程的考试成绩。请编写一个程序,查看在这个的考试成绩。请编写一个程序,查看在这个班级中是否存在不及格的学生。班级中是否存在不及格的学生。问题分析问题分析l用用一一维维数数组组记记录录每每位位学学生生的的考考试试成成绩绩,下下标标表表示示每每个个学生的编号,元素内容表示考试成绩。学生的编号,元素内容表示考试成绩。l查查找找可可以以通通过过从从前前往往后后依依次次查查看看每每个个元元素素内内容容的的过过程程实现。实现。顺
19、序查找顺序查找 开始 结束 顺序查找不及格的学生 显示35名学生的成绩 存在不及格学生 输出Not all pass 输出All pass 随机产生35名学生的成绩 Y N 算法描述算法描述程程序序代代码码#include#include/*含含random()的原型声明的原型声明*/#defineNUM35/*学生人数学生人数*/main()intscoreNUM;inti;/*随机随机产产生生35个考个考试试成成绩绩*/randomize();/*随机数种子随机数种子发发生器生器*/for(i=0;iNUM;i+)scorei=random(100);/*产产生生0到到100-1之之间间的
20、随机整型数的随机整型数*/*显显示示35名学生的考名学生的考试试成成绩绩*/for(i=0;iNUM;i+)printf(nNo.%d:%d,i+1,scorei);for(i=0;iNUM;i+)/*顺顺序序查查找是否存在不及格的学生找是否存在不及格的学生*/if(scorei60)break;/*输输出出查查找找结结果果*/if(iNUM)printf(nNotallpass.);elseprintf(Allpass.);问题分析问题分析适合于有序排列的数列适合于有序排列的数列l二分查找是指每次二分查找是指每次用用keykey与位于查找区间中央位置的元素进行比较,与位于查找区间中央位置的元
21、素进行比较,比较结果将会产生下面三种情形之一:比较结果将会产生下面三种情形之一:1.如果相等,说明查找成功。如果相等,说明查找成功。2.如果如果keykey小于中央位置的元素,说明如果存在这样的元素,应小于中央位置的元素,说明如果存在这样的元素,应该位于查找区间的前半部分。此时可以将查找区间缩减为原来该位于查找区间的前半部分。此时可以将查找区间缩减为原来的一半,并在这一半的区间中继续用相同的方式查找。的一半,并在这一半的区间中继续用相同的方式查找。3.如果如果keykey大于中央位置的元素,说明如果存在这样的元素,应大于中央位置的元素,说明如果存在这样的元素,应该位于查找区间的后半部分。同样可
22、以将查找区间缩减为原来该位于查找区间的后半部分。同样可以将查找区间缩减为原来的一半,并在这一半的区间中继续用相同的方式查找。的一半,并在这一半的区间中继续用相同的方式查找。l可以看出,用可以看出,用keykey与当前查找区间中央位置的元素比较后,不是找与当前查找区间中央位置的元素比较后,不是找到了,就是将查找区间缩小了一半。直到查找区间不存在了,说明到了,就是将查找区间缩小了一半。直到查找区间不存在了,说明没有要找的没有要找的keykey。P93 P93 例例5 5:已知一个按非递减有序排列的整型数列已知一个按非递减有序排列的整型数列(12,23,30,45,48,50,67,82,91,10
23、312,23,30,45,48,50,67,82,91,103)。请编写一个程序,查)。请编写一个程序,查找其中是否存在与给定找其中是否存在与给定keykey相等的数值。相等的数值。开始 结束 二分查找key 输入key 存在key 输出成功信息 输出失败信息 构造非递减数列 Y N 算法描述算法描述 中央位置mid 0lowNUM-1 high low=high valuemidkey valuemid=key mid+1low mid-1high Y Y Y N N N#include#defineNUM10main()intvalueNUM=12,23,30,45,48,50,67,82
24、,91,103;/*递递增增数列数列*/intlow,high,mid,key;printf(nEnterakey:);/*输输入入查查找的数找的数值值*/scanf(%d,&key);low=0;high=NUM-1;while(low=high)mid=(low+high)/2;if(valuemid=key)break;if(valuemidkey)low=mid+1;elsehigh=mid-1;if(low=high)printf(n%disfoundat%d.,key,mid);/*确确认认break出口出口*/elseprintf(n%disnotfound.,key);/*确确
25、认认循循环环正常出口正常出口*/程程序序代代码码排序问题排序问题 将一组无序的数列重新排列成非递减或非递将一组无序的数列重新排列成非递减或非递增的顺序是一种经常需要的操作。例如,在管理学增的顺序是一种经常需要的操作。例如,在管理学生成绩的应用程序中,可以用一个数列表示一个班生成绩的应用程序中,可以用一个数列表示一个班级的学生成绩,并按照从高到低的顺序重新排列,级的学生成绩,并按照从高到低的顺序重新排列,以便确定获得奖学金的学生。以便确定获得奖学金的学生。P96 P96 例例6 6:假设用户通过键盘输入一个整型数列。请假设用户通过键盘输入一个整型数列。请编写一个程序,将其按照从小到大的顺序重新排
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 数组 字符串

限制150内