C语言程序设计案例教程课件-6第六章-数组.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C语言程序设计案例教程课件-6第六章-数组.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 案例 教程 课件 第六 数组
- 资源描述:
-
1、C C语言程序设计语言程序设计、语言中控制结构有几种?、循环结构有几种?、for循环语句的格式?for循环语句的执行顺序?6.1用冒泡法对10个数排序6.2 一维数组6.3 二维数组6.4 字符数组6.16.1 用冒泡法对用冒泡法对1010个数排序个数排序 任务描述任务描述 数据查找与排序是编写程序时经常数据查找与排序是编写程序时经常遇到的问题。现在假设一个班有遇到的问题。现在假设一个班有1010名名同学,要求编写程序对他们在一次考同学,要求编写程序对他们在一次考试中的数学成绩由高到低进行排序。试中的数学成绩由高到低进行排序。6.16.1 用冒泡法对用冒泡法对1010个数排序个数排序 任务描述
2、任务描述 数据查找与排序是编写程序时经常数据查找与排序是编写程序时经常遇到的问题。现在假设一个班有遇到的问题。现在假设一个班有1010名名同学,要求编写程序对他们在一次考同学,要求编写程序对他们在一次考试中的数学成绩由高到低进行排序。试中的数学成绩由高到低进行排序。问题分析:问题分析:第第1 1步,将待排序的数据按照随机顺序排列,将第一个数与第二个步,将待排序的数据按照随机顺序排列,将第一个数与第二个数进行比较,若第一个较大,则将两数交换位置;反之,保持两数数进行比较,若第一个较大,则将两数交换位置;反之,保持两数原来的位置不变。这样,经过第原来的位置不变。这样,经过第1 1步处理后就能保证第
3、二个位置是步处理后就能保证第二个位置是大数。大数。第第2 2步,将新顺序数据中的第二个数与第三个数进行比较,采用第步,将新顺序数据中的第二个数与第三个数进行比较,采用第1 1步介绍的方法进行数据的再次排序步介绍的方法进行数据的再次排序经过经过n-1n-1步的处理,可以将步的处理,可以将最大的数排到第最大的数排到第n n个位置。将除去最大数后剩下的个位置。将除去最大数后剩下的n-1n-1个数按照前述个数按照前述的方法进行排序,经过的方法进行排序,经过n-2n-2步处理后,可以将第二大的数据排到第步处理后,可以将第二大的数据排到第n-1n-1个位置个位置如此,经过如此,经过n-1n-1轮的排序,便
4、可将所有轮的排序,便可将所有n n个数据按由个数据按由小到大的顺序排好。小到大的顺序排好。6.16.1 用冒泡法对用冒泡法对1010个数排序个数排序 数据需求数据需求 1 1、问题输入、问题输入 an;/an;/*存放成绩数据存放成绩数据*/2 2、问题输出、问题输出 an;/an;/*存放排列好的数据存放排列好的数据*/6.16.1 用冒泡法对用冒泡法对1010个数排序个数排序 流程图流程图 6.1 6.1 用冒泡法对用冒泡法对1010个数排序个数排序6.16.1 用冒泡法对用冒泡法对1010个数排序个数排序#include#includemain()main()int a10;int a1
5、0;int i,j,temp;int i,j,temp;printf(put 10 numbers:n);printf(put 10 numbers:n);for(i=0;i10;i+)for(i=0;i10;i+)scanf(%d,&ai);scanf(%d,&ai);printf(n);printf(n);for(j=0;j9;j+)for(j=0;j9;j+)for(i=0;i9-j;i+)for(i=0;iai+1)if(aiai+1)temp=ai;ai=ai+1;ai+1=temp;temp=ai;ai=ai+1;ai+1=temp;printf(The sorted number
6、s is:n);printf(The sorted numbers is:n);for(i=0;i10;i+)for(i=0;i10;i+)printf(%d,ai);printf(%d,ai);printf(n);printf(n);思考从键盘输入名同学的语言程序设计的月考成绩,请编程输出这名同学的成绩。、如果输出全班同学的成绩呢?、如果输出全学院语言程序设计课程的成绩呢?学习目标熟悉一维数组的定义、引用和初始化方法引用和初始化方法能够用一维数组解决一些实际问题:冒泡算法冒泡算法重点难点 数组就是一组具有相同数据类型的数据的有序集合。是一种构造数据类型。定义格式类型说明符 数组名数组长度举例
7、int a;数据元素:a0,a1,a2,a3说明1.数组名的命名规则应遵循标识符的命名规则。2.数组名后是方括号,而非圆括号。整型表达式,表达式中可以使用符号常量。.常量表达式或数据长度可以包含常量和符号常量,不能包含变量。标识符只能由字母、数字、下划线组成。且第一个字符 必须为字母或下划线。#define N 10main()int aN,bN+10,C2+3;总字节数=每个数据元素占用的字节数*数组长度一维数组:float mark100;mark0mark1mark2mark3.mark9986.592.077.552.0.94.0低地址 高地址总字节数=sizeof(float)*数组
8、长度注意事项注意事项数组名遵循标识符的命名规则。一个数组中的元素下标必须从0开始。所以定义数组时,数组长度为n时,数组元素下标范围只能是0n-1。“数组长度”可能包含常量,但不能包含变量。也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。格式数组名下标说明1.数组必须先定义,后使用。2.数组元素只能逐个引用,而不能一次引用整个数组。void main()int i,a;for(i=0;i=0;i-)printf(“%d”,ai);getch();3.当逐个使用数组中的每一个元素时,通常借助for循环语句。此程序的功能是什么?如果输入是,和,程序运行结果?
9、基本形式在C语言中,对数组的访问(存、取)通常是通过对数组元素的引用来实现的。61,67,74,86从键盘输入10个数,分别按正序和逆序将其输出。实例分析#include#include int main()int main()int i,a10;int i,a10;printf(Input 10 numbers:n);printf(Input 10 numbers:n);for(i=0;i=9;i+)for(i=0;i=9;i+)scanf(%d,&a i);scanf(%d,&a i);for(i=0;i=9;i+)for(i=0;i=0;i-)for(i=9;i=0;i-)printf(
10、%2d,a i);printf(%2d,a i);printf(n);printf(n);return 0;return 0;运行结果如下:运行结果如下:Input 10 numbers:Input 10 numbers:0 1 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 99 8 7 6 5 4 3 2 1 09 8 7 6 5 4 3 2 1 0思考?编写程序实现从键盘任意输入10个整数,找出其中的最大值?例6-2 用数组来求10以内阶乘。#include main()int i,n,a10;
11、long temp=1;printf(Input the number:n);scanf(%d,&n);/*输入待求阶乘的整数*/for(i=0;in;i+)ai=i+1;for(i=0;in;i+)temp=temp*ai;printf(%d!=%ldn,n,temp);举例举例1.定义数组时,对数组元素赋初值。2.可以只给一部分数组元素赋初值。3.要想使数组中全部元素数据为0,则采用如下形式。int a10=1,2,3,4,5,6,7,8,9,10;int a10=0,1,2,3,4;int a10=0,0,0,0,0,0,0,0,0,0;或int a10=0;4.在对全部数组元素赋初值时
12、,可以不指定数组长度。int a=0,1,2,3,4;类型说明符 数组名数组长度=常量表达式0,常量表达式n-1;格式格式注意事项对数组中的所有元素赋初值,数组长度与数组中元素的个数相同。对数组中的部分元素赋初值,未指定值的数组元素自动为“零值”,即数值类型的元素为0,字符型的元素为0字符。除了在定义数组时可用初值列表为数组整体赋值外,不能对数组作整体赋值。不能同时定义两个相同的数组。冒泡排序排序的方法有多种,冒泡排序法是其中之一,一般分为“上浮法”和“下沉法”两种。本题采用“下沉法”完成数据的排序。基本思想是:基本思想是:从第一个数开始,对相邻的两个数进行比较,通过交换使较大的数在后,直到最
13、后两个数比较完毕。完成一遍这样的比较过程(称为一趟排序称为一趟排序),就找到了这组数据中的最大值最大值并且下沉到最后一个位置最后一个位置。对余下的数据重复这个比较过程,当只有一个剩余数据时就完成了排序工作。a0a1a2a390768565初使数据76908565一趟排序7685906576856590a0a1a2a3初使数据768565二趟排序76856590766585657685三趟排序#include#includeint main()int main()int i,a4,temp,j;int i,a4,temp,j;for(i=0;i=3;i+)for(i=0;i=3;i+)scanf
14、(%d,&ai);scanf(%d,&ai);for(i=0;i3;i+)for(i=0;i3;i+)for(j=0;j3-i;j+)for(j=0;jaj+1)if(ajaj+1)temp=aj;temp=aj;aj=aj+1;aj=aj+1;aj+1=temp;aj+1=temp;for(i=0;i=3;i+)for(i=0;i=3;i+)printf(%d ,ai);printf(%d ,ai);return 0;return 0;编写一个程序,对给定的整数数组编写一个程序,对给定的整数数组a a采用冒泡采用冒泡排序法进行从小到大排序。(给定的数据初值为排序法进行从小到大排序。(给定的数
15、据初值为:6,3,9,8,1,5,4,10,2,76,3,9,8,1,5,4,10,2,7)#include#include int main()int main()int a10=6,3,9,8,1,5,4,10,2,7;int a10=6,3,9,8,1,5,4,10,2,7;int i,j,t;int i,j,t;printf(The array before sort:);printf(The array before sort:);for(i=0;i10;i+)for(i=0;i10;i+)printf(%d ,ai);printf(%d ,ai);printf(n);printf(
16、n);for(i=0;i9;i+)for(i=0;i9;i+)for(j=0;j9-i;j+)for(j=0;jaj+1)if(ajaj+1)t=aj;aj=aj+1;t=aj;aj=aj+1;aj+1=t;aj+1=t;printf(The array after sort:);printf(The array after sort:);for(i=0;i 10;i+)for(i=0;i 10;i+)printf(%d ,ai);printf(%d ,ai);return 0;return 0;运行结果如下:The array before sort:6 3 9 8 1 5 4 10 2 7
17、The array after sort:1 2 3 4 5 6 7 8 9 10课程课程小结小结v 数组中的每一个元素都属于数组中的每一个元素都属于同一数据类型同一数据类型。v 用一个统一的用一个统一的数组名数组名和和下标下标唯一地确定数组中的元素。唯一地确定数组中的元素。v 一维数组的定义:一维数组的定义:类型说明符类型说明符 数组名数组名 常量表达式常量表达式。如:如:int a10;int a10;v 一维数组元素的引用:类型说明符一维数组元素的引用:类型说明符 数组名数组名 下标下标。v 一维数组的初始化:一维数组的初始化:int a10=0,1,2,3,4,5,6,7,8,9;in
18、t a10=0,1,2,3,4,5,6,7,8,9;int a10=0,1,2,3,4;int a10=0,1,2,3,4;int a=0,1,2,3,4;int a=0,1,2,3,4;作业作业1.1.将一个数组中的值按逆序重新存放。例如原来顺序为:将一个数组中的值按逆序重新存放。例如原来顺序为:8 8,6 6,5 5,4 4,1 1,要求改为:,要求改为:1 1,4 4,5 5,6 6,8 8。2.2.有一组数有一组数12,56,45,78,90,80,23,16,8,6312,56,45,78,90,80,23,16,8,63,保存在一个数组中,保存在一个数组中,从键盘任意接收一个数,并
19、在数组中查找该数,给出是否,从键盘任意接收一个数,并在数组中查找该数,给出是否找到的信息。如果找到了,要求输出该数在数组中所处的位找到的信息。如果找到了,要求输出该数在数组中所处的位置;如果找不到,输出置;如果找不到,输出“没有找到!没有找到!”3 3创建一创建一C C程序,从键盘上输入程序,从键盘上输入1010个学生的考试成绩存入一个学生的考试成绩存入一维数组中,求该数组中成绩的最高分、最低分及平均分。维数组中,求该数组中成绩的最高分、最低分及平均分。4 4从键盘上任意接收从键盘上任意接收1010个整数存入一维数组中(无序),个整数存入一维数组中(无序),利用冒泡排序将该数组元素由小到大进行
20、排序,并输出排序利用冒泡排序将该数组元素由小到大进行排序,并输出排序后数组。后数组。5.5.有一组数有一组数23,3423,34,45,60,67,88,96,45,60,67,88,96,保存在一个数组中,向这保存在一个数组中,向这个数组中插入一个数,使得插入后的数组元素依然保持有序个数组中插入一个数,使得插入后的数组元素依然保持有序。6.1用冒泡法对10个数排序6.2 一维数组6.3 二维数组6.4 字符数组课程回顾课程回顾、数组的定义?格式是什么?、数组的定义?格式是什么?、数组如何引用?格式是什么?、数组如何引用?格式是什么?4 4、下列程序的运行结果是(、下列程序的运行结果是()#i
21、nclude#include void main()void main()int a6,i;int a6,i;for(i=1;i6;i+)for(i=1;i3)%5;(i3)%5;printf(“%2d”,ai);printf(“%2d”,ai);A A-4 0 4 0 4 B-4 0 4 0 4 B-4 0 4 0 3-4 0 4 0 3C C-4 0 4 4 3 D-4 0 4 4 3 D-4 0 4 4 0-4 0 4 4 0 3 3、下列对一维数组、下列对一维数组a a的说明正确的是(的说明正确的是()A Aint a(10);Bint a(10);Bint n=10,an;int n
22、=10,an;C Cint n;Dint n;D#define SIZE 10#define SIZE 10scanf(“%d”,&n);scanf(“%d”,&n);int aSIZE;int aSIZE;int an;int an;5 5、下列程序的运行结果是(、下列程序的运行结果是()#include#include void main()void main()char str=”SSSWLIA”,c;char str=”SSSWLIA”,c;int k;int k;for(k=2;(c=strk)!=0;k+)for(k=2;(c=strk)!=0;k+)switch(c)switch
23、(c)case I:+k;break;case I:+k;break;case L:continue;case L:continue;default:putchar(c);continue;default:putchar(c);continue;putchar(putchar(*););A ASSWSSW*B BSWSW*C CSWSW*A DA DSW SW 学习目标熟悉二维数组的定义、引用和初始化方法能够用二维数组解决一些实际问题:矩阵应用重点难点格式类型说明符 数组名常量表达式 常量表达式举例float a23,b45;说明1.二维数组中元素的排列顺序是:先行后列。因此,可以把二维数组看
24、成是一个矩阵。2.二维数组元素仍然是从a00开始。a00,a01,a02 a10,a11,a12 二维数组的定义:表示行数表示列数float a23;?每个数据元素占用的字节数,就是基类型的字节数一个元素占4个字节二维数组:float a23;a0 0a0 1a0 2a1 0a1 1a1 286.592.077.552.065.094.0低地址低地址高地址高地址元素个数是多少呢?元素个数是多少呢?总字节数是多少呢?总字节数是多少呢?a00a00,a01a01,a02a02a10a10,a11a11,a12a12二维数组中的数组元素的个数=行数列数,存储一个二维数组所需要的内存字节数可以用下列方
25、式来计算:总字节数总字节数 =sizeof(=sizeof(类型类型)行数行数 列数列数几点说明举例float a23;定义了一个行列的float型数组a,=个数组元素,存储数组a所需的内存空间为sizeof(float)2 3=24个字节。int b45;?格式数组名下标1 下标2说明1.数组必须先定义,后使用。2.数组元素只能逐个引用,而不能一次引用整个数组。数组元素的引用与同类型的一般变量使用方式一样。int a23;a01=10;a02=a01*5;printf(“%d,%d”,a01,a02;int i,j;int i,j;float a45;float a45;for(i=0;i=
展开阅读全文