c语言程序设计课件第5章数组.ppt
《c语言程序设计课件第5章数组.ppt》由会员分享,可在线阅读,更多相关《c语言程序设计课件第5章数组.ppt(135页珍藏版)》请在三一办公上搜索。
1、第5章 数组,例题链接,编写程序,输入100名学生的成绩,求平均分并统计高于平均值的人数。main()int s0,s2,s99,count=0;float ave;scanf(“%d%d”,main()int s100,k,count=0,sum=0;float ave;for(k=0;kave)count+;printf(“ave=%f,count=%dn”,ave,count);,常用于处理大批量数据;数据特点:存在内在联系;数组具有相同数据类型的变量集合;这些变量都有相同名字,但下标不同;称这些变量为数组元素;只有一个下标的数组一维数组;具有两个下标的数组二维数组。,本章将介绍的内容,
2、5.1 一维数组 5.2 字符串 5.3 二维数组,例题链接,例题链接,例5.1,例5.2,例5.3,例5.4,例5.6,例5.7,例5.8,例5.9,例5.5,例5.10,例5.11,例5.12,例5.13,例3.14,例5.15,例5.16,例5.17,例5.18,例5.19,例5.20,例5.21,例5.22,5.1 一维数组,5.1.1 一维数组的定义和引用 5.1.2 一维数组的初始化 5.1.3 一维数组程序举例,P129,5.1.1 一维数组的定义和引用,【例5.1】一维数组示例。#define N 10 main()int i=0,a3;float bN;a0=2;a1=4;a
3、2=a0+a1;for(i=0;iN;i+)scanf(%f,N为符号常量,定义数组a和 b,给数组a的元素赋值,P129,运行结果:,1 2 3 4 5 6 7 8 9 10,2 4 6,1 2 3 4 5 6 7 8 9 10,数组a的元素值,数组b的元素值,int a3;表示:a为一维数组名a的长度为3,即含3个元素元素为a0、a1、a2 元素类型均为整型,说明:,每个元素都是变量,下标:02,float bN;表示:数组名为bb数组的长度为N元素为b0、b1、b2、bN-1各元素的类型为单精度型,不能含变量,数组元素代表内存中的一个存储单元数组元素像普通变量一样使用数组元素用下标形式表
4、示常用循环对数组进行输入输出操作,为a数组分配3个连续的存储单元(2字节3=6个字节)为b数组分配N个连续的存储单元(4字节N),用#define N 10 定义符号常量N,方便修改程序 例如:要将数组b的长度改为20,只 需把命令行改为#define N 20 其他部分无需改动,【例5.2】存放字符的数组示例。#include main()int i=0;char ch4;ch0=G;ch1=o;ch2=o;ch3=d;for(i=0;i4;i+)putchar(chi);,运行结果:Good,ch0,ch1,ch2,ch3,ch,ch数组的存储单元,一维数组的一般定义形式:类型名 数组名1
5、 常量表达式1,数组名2 常量表达式2,;例如,int a5,b6+3;,引用数组元素的形式:数组名 下标 例如:a2,bi,bi+1是合法引用下标可以是常量、变量或表达式其值必须确定、且是整型系统不做下标越界检查,【例5.3】输入10名学生的成绩,计算其平均成绩,并统计不低于平均分 的学生人数。,编程点拨,为了统计不低于平均分的学生人数,先把学生成绩存起来,等到计算平均成绩后,再与平均分比较如果使用普通变量,过程就会很繁琐选用数组简化程序,for(i=0;i10;i+)scanf(“%d”,for(i=0;i=ave)count+;,输入并计算平均分,统计高于平均分人数,printf(%f,
6、%d,ave,count);,main()int a10,i,count,total=0;float ave;,请思考:,本题如果改为:输入若干名学生的成绩,用负数结束输入,如何改写程序?,#define N 40 main()int i=0,n=0,count=0;float score,total=0,aN,ave;printf(data:n);scanf(%f,学生人数不能多于40,a中存放成绩,ave=total/n;for(i=0;i=ave)count+;printf(ave=%f,count=%d,ave,count);,运行结果:data:55 66 77 88 99 100
7、1ave=80.833336,count=3,计算平均成绩,统计不低于平均分人数,5.1.2 一维数组的初始化,【例5.4】一维数组的初始化示例。,int i=0;int a5=1,2,3,4,5;for(i=0;i5;i+)printf(%5d,ai);,等价于,P132,int i=0;int b5=2,3,4;for(i=0;i5;i+)printf(%5d,bi);,等价于,int b5=2,3,4,0,0;,【例5.4】一维数组的初始化示例。,5.1.2 一维数组的初始化,P132,int i=0;int c=3,4,5,6,7;for(i=0;i5;i+)printf(%5d,ci
8、);,等价于,int c5=3,4,5,6,7;,【例5.4】一维数组的初始化示例。,5.1.2 一维数组的初始化,P132,int i=0;int d5=0;for(i=0;i5;i+)printf(%5d,di);,等价于,int d5=0,0,0,0,0;,【例5.4】一维数组的初始化示例。,5.1.2 一维数组的初始化,P132,int i=0;int e5;for(i=0;i5;i+)printf(%5d,ei);,未初始化,不能写成 int e;,输出不确定值,【例5.4】一维数组的初始化示例。,5.1.2 一维数组的初始化,P132,int i=0;int f5=1,2,3,4,
9、5,6,7,8;,提供数据过多,报错,定义数组的同时,给数组元素赋初值数组的初始化,【例5.4】一维数组的初始化示例。,5.1.2 一维数组的初始化,P132,【例5.5】存放字符的数组初始化示例。#include main()int i=0;char a4=G,o,o,d;char b4=G;char c4=0;for(i=0;i4;i+)printf(%c,ai);printf(n);for(i=0;i4;i+)printf(%c,bi);printf(n);for(i=0;i4;i+)printf(%c,ci);,等价于,0,运行结果:GoodG,0在屏幕上无显示 0的ASCII码值为0
10、,讨论题5.1,如果将含有10个元素的数组按顺序和逆序输出,应如何编写程序?,#include main()int i;int a10=1,2,3,4,5,6,7,8,9,10;for(i=0;i=0;i-)printf(%4d,ai);printf(n);,运行结果:1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1,【例5.6】定义含有10个元素的数组,并将数组中的元素按逆序重新存放后输出。,a,a,值变化,逆序输出和逆序存放不同,a,b,按逆序将a数组的值赋给b数组,按顺序将b数组的值赋给a数组,a,方法1:开辟另一个数组,for(i=0;i10;i+)b
11、i=a10-i-1;,for(i=0;i10;i+)ai=bi;,#include main()int i,a10=1,2,3,4,5,6,7,8,9,10,b10;for(i=0;i10;i+)printf(%4d,ai);printf(n);for(i=0;i10;i+)bi=a10-i-1;for(i=0;i10;i+)ai=bi;for(i=0;i10;i+)printf(%4d,ai);printf(n);,运行结果:1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1,方法2:只开辟一个存储单元t,1 2 3 4 5 6 7 8 9 10,a,通过,交
12、换,通过,交换,t,通过,交换,通过,交换,通过,交换,for(i=0;i10/2;i+),t=ai;ai=a10-i-1;a10-i-1=t;,#include main()int i=0,t=0,a10=1,2,3,4,5,6,7,8,9,10;for(i=0;i10;i+)printf(%4d,ai);printf(n);for(i=0;i10/2;i+)t=ai;ai=a10-i-1;a10-i-1=t;for(i=0;i10;i+)printf(%4d,ai);printf(n);,能改成i10?,5.1.3 一维数组程序举例,【例5.7】观察运行情况,P135,int i=0,t=
13、0,a10=1,2,3,4,5,6,7,8,9,10;,t=a0;,for(i=0;i9;i+)ai=ai+1;,a9=t;,for(i=0;i10;i+)printf(%4d,ai);,1,2,3,4,5,6,7,8,9,10,1,向左移动,int i=0,t=0,b10=1,2,3,4,5,6,7,8,9,10;,t=b9;,for(i=9;i0;i-)bi=bi-1;,b0=t;,for(i=0;i10;i+)printf(%4d,bi);,10,2,3,4,5,6,7,8,9,10,1,向右移动,改为bi+1=bi;,应改为?,for(i=8;i=0;i-),讨论题5.4,数组元素中的
14、值往前或往后移动两个位置时,应如何改写程序?,【例5.8】数组中已存互不相同的10 个整数,从键盘输入一个整数,输出与该值相同的数组元素下标。,编程点拨:,使用循环将输入的数和数组元素逐个进行比较如果找到相等的元素,用k记住该元素下标值输出k的值,#include main()int i=0,x=0,a10=1,2,3,4,5,6,7,8,9,10;for(i=0;i10;i+)printf(%4d,ai);printf(n);,if(k!=-1)printf(下标值=%dn,k);,printf(Input x:);scanf(%d,for(i=0;i10;i+),if(x=ai)k=i;,
15、输入需查找的数,若找到,用k记下标值,k=-1,else printf(没找到%dn,x);,程序编写过程:,不能赋09之间的值,逐个查找数,若有多个元素与x相等,则k中存的是第1个还是最后一个元素的下标?,运行过程:,第1次运行:Input x:6 1 2 3 4 5 6 7 8 9 10下标值=5第2次运行:Input x:12 1 2 3 4 5 6 7 8 9 10没找到 12,优化程序:,main()int i=0,x=0,k=-1,a10=1,2,3,4,5,6,7,8,9,10;printf(Input x:);scanf(%d,break;,i10,i,若有多个元素与x相等,则
16、k中存的是第1个还是最后一个元素的下标?,【例5.9】从键盘输入10个互不相同的整数并存放在一维数组中,找出值最大的元素,并输出最大值所在的元素下标。,编程点拨,不必用max记住最大值,只要用k记住最大值所在的元素下标,#include main()int i=0,k=0,a10=0;printf(Input data:);for(i=0;i10;i+)scanf(%d,a,k,k=0;,if(aka1),k=1;,真,执行,0,1,2,3,4,5,6,7,8,9,if(aka2),k=2;,假,不执行,if(aka3),k=3;,真,执行,下标=,k=0;for(i=1;i10;i+)if(
17、akai)k=i;,a,#include main()int i,k,a10;printf(Input data:);for(i=0;i10;i+)scanf(%d,输出结果:max:a3=10,【例5.10】从键盘输入10个互不相同的整数并存放在一维数组中,删除其中下标为4的元素。,编程点拨,只要从下标为4的元素开始将其后面元素中的值依次前移一个位置即可,for(i=0;i9;i+)printf(%4d,ai);printf(n);,最先,a 4=a 4+1;,最后,a8=a8+1;,k8,for(i=k;i9;i+)ai=ai+1;,a,k,k,讨论题5.6,本题如果改为输入要删除的元素下
18、标k的值,应如何修改程序?当k的值为9时,程序还成立吗?,讨论题5.7,要删除最大值所在的元素,应如何改写本题中的程序?,【例5.11】在数组中找出最小元素,并与第1个元素对调。,第1步:求最小值所在元素下标,k=0;for(j=1;jaj)k=j;,编程点拨,第2步:最小元素与第1个元素对调 temp=a0;a0=ak;ak=temp;,#include main()int j=0,k=0,temp=0,a10=0;for(j=0;j10;j+)scanf(%d,k=0;for(j=0+1;jaj)k=j;,8,1,temp=a0;a0=ak;ak=temp;,5,for(j=0;j10;j
19、+)printf(%4d,aj);,a,新的问题:,在后9个元素中,最小值与第2个元素对调,a,k=1;for(j=1+1;jaj)k=j;,9,2,temp=a1;a1=ak;ak=temp;,3,a,k=1;for(j=1+1;jaj)k=j;,10,3,temp=a2;a2=ak;ak=temp;,7,2,2,a,for(;i=;i+),k=3;for(j=3+1;jaj)k=j;,temp=a 3;a 3=ak;ak=temp;,i,i,或k+1,i=0 8,由小到大的顺序排序,a,i,i,8,9,4,【例5.12】将10个数按从小到大的顺序 排序。方法1:选择法排序,排序过程(N个数
20、据):将N个元素中的最小数与第1个元素对调;后N1个元素中的最小数与第2个元素对调;后N2个元素中的最小数与第3个元素对调;最后2个元素中的最小数与第N1个元素对调;此时最后一个元素(第N个)自然就是最大数。即N个数据已经按从小到大的顺序排序。,#define N 10main()int i,j,k,temp,aN;for(i=0;iaj)k=j;if(k!=i)temp=ai;ai=ak;ak=temp;for(i=0;iN;i+)printf(%4d,ai);,选择法排序,方法2:冒泡法排序,冒泡法排序过程:第1趟:在N个数中进行两两比较。(i=1)if(ajaj+1)aj与aj+1交换(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 课件 数组
链接地址:https://www.31ppt.com/p-6504190.html