C第八课一维数组.ppt
- 文档编号:565676
- 上传时间:2022-10-11
- 格式:PPT
- 页数:26
- 大小:432.47KB
C第八课一维数组.ppt
《C第八课一维数组.ppt》由会员分享,可在线阅读,更多相关《C第八课一维数组.ppt(26页珍藏版)》请在冰豆网上搜索。
一维数组,第8课,怎样用以学过知识解决下列问题,输入N个数,要求反向输出这N个数.例如:
输入545391输出19354,分析,在解决这个问题时,要把很多数据保存下来,如果用以前的方法定义变量很麻烦,我们可以批量定义变量。
最常用的方法是定义数组来解决。
inta10;a是数组名,10表示有10个变量,分别是a0、a1、a9,且每个值取整型。
例1:
输入N(N10)个数,要求反向输出这N个数.例如:
输入545391输出19354,定义数组:
inta10;,输入:
cinn;for(i=0;iai;,输出:
for(i=n-1;i=0;i-)coutai;,一维数组的初始化,在定义数组时对数组元素赋以初值。
例如:
inta10=0,1,2,3,4,5,6,7,8,9;可以只给一部分元素赋初值。
例如:
inta10=0,1,2,3,4;在对全部数组元素赋初值时,可以不指定数组长度。
例如:
inta=1,2,3,4,5两个数组转存,要用循环一一导入,不能直接赋值。
for(i=0;in;i+)ai=bi;,例2求不达均分的人数(P1057)输入n个(n=10)学生的成绩,统计有多少人的分数低于平均分。
样例:
输入:
4n=4,表示有4个人的成绩80884490输出:
1只有1个人的分数低于平均分,1、先定义数组ai用来存放n个人的分数。
存入总分、均分的变量。
2、输入部分:
在输入的过程中可以顺便统计一下总分。
3、计算均分4、统计低于均分的人数。
5、输出。
P1072陶陶摘苹果,第一个应用:
进制转换,例3将一个十进制整数转化为二进制数.分析:
例如将十进制数12转化为二进制数,方法如下:
把十进制数除以2,用一个数组a来存放余数,将商作为新的数继续除以2,反复进行,一直除到商为0时停止。
输出:
将a组数反向输出,cinx;k=0;while()k=k+1;/K是数组的下标指针ak=x%2;x=x/2;for()coutai;,P1098十六进制中10用A表示,11用B.P1099,第二个应用:
选择排序例4:
选择排序:
将n个整数按由小到大的顺序输出。
样例:
输入:
6表示有6个数574386输出:
345678,假设6个数据是:
a=574386,我们把1号位放最小数,就从2号位开始,一一与1号位比较,如果比它小,则交换,这样做到6号位,就使得1号位存放一个最小的数,下面再把2号位放次小的数,从3号位开始比较,以此类推,直至n-1号位。
如:
a1a2a3a4a5a6574386574386a1与a2比较,不交换574386a1与a3比较,交换475386a1与a4比较,交换375486a1与a5比较,不交换a1与a6比较,不交换这时,a1就是最小的一个数,下面再进行确定a2,方法同样,最后确定a5,a6不必确定。
参考程序如下:
cinn;intan+5;/多定义几个for(i=1;iai;for(i=1;iaj)swap(ai,aj);for(i=1;i=n;i+)coutai“;,使用swap交换函数必须使用头文件#include使用sortmaxmincount函数也要使用这个头文件。
直接用sort函数排序如果数组a0-an-1sort(a,a+n)如果数组a1-ansort(a+1,a+n+1),sort(a+1,a+n+1),排序练习,P1102排序默认的是由小到大排序,查名次的时候应该从后往前。
for(i=n;i=1;i-)if(ai=x)break;cout?
;,P1124最好不使用sort排序,选择排序比较的时候要注意两种情况都交换:
a数组存编号b数组存值,比较的时候:
if(biaj)输出的时候,每行要输出三个数。
基数排序,例7:
将n个小于100的不同的正整数进行从小到大排序。
样例:
输入:
543561输出:
13456采用选择排序的运算次数是n2,可以采用另外一种方法:
cinn;for(i=1;ix;ax=1;for(i=1;i0)couti“;,如果有相同的,则做一些改动:
ax+;在输出的时候当ai1的时候,必须全部输出。
优点:
时间复杂度O(n)。
弱点:
必须要知道数据的范围,且是整数。
练习P1097明明的随机数分析:
如果采用一般的模拟方法来做,很麻烦,直接使用基数排序法。
P1096用上述类似的方法。
数组的值开始都是0;移走的,将数组的值变成1。
最后统计还有多少个值是0。
基数排序的运用,P1101P1096数组定义在函数外,默认值为0读一对数,将数组中的这一部分变为1最后统计数组中还有多少个数是0.,P1129十个数的操作ax输入三种情况:
(1)输出NO:
if(x=a10)elsefor(i=1;i=x)break;/第i位数有可能等于或大于if(ai=x)第
(2)种情况else第(3)种情况,第
(2)种情况:
将第i位删除方法:
从i位到n-1位,前面一位取后面一位的值。
for(j=i;j=i+1;j-)aj=aj-1;for(i=1;i=11;i+)coutai;,约瑟夫问题:
设有N个人依次围成一圈,从第1个人起开始报数,报到M的人出列,下一个人再从1起报数,报到M的人出列,下一个人再从1起报数,如此继续,直到所有人均出列为止.设N个人的编号为1,2,.,N,打印出出列的次序。
例如:
输入:
N=6,M=3,则输出出列的顺序是:
364251,inti=0;ai初始化为1;/ai=1表示i在圈上。
for(j=1;jn)i=1;p=p+ai;while(p!
=m);/报一轮的模拟ai=0;couti“;/输出,同时将这个人出圈,P1125,高精度算法P1870,a100=1;b100=1;a数组作为1!
,b数组存放和for(i=2;i=n;i+)求i的阶乘:
a*i,结果用a数组存放;求a+b,结果用b数组存放;输出:
b数组的结果。
1239596979899100,+,1,1,1,0,0,加法过程g=0;进率初始为0for(i=maxn;i=1;i-)s=ai+bi+g;ai=s%10;g=s/10;,0,a,s,g,输出部分:
i=1;while(ai=0,高精度*单精度,输入时的第一个数用数组存放,而第二个数直接用一个整型变量存放。
12979899100,a,b,*,S,乘法过程g=0;进率初始为0for(i=maxn;i=1;i-)s=ai*b+g;ai=s%10;g=s/10;,a数组存放被减数,b数组存放减数,结果仍用a数组存放。
for(i=maxn;i=1;i-)if(aibi)ai-1=ai-1-1;ai=ai+10;ai=ai-bi;,高精度减法,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第八 课一维 数组