河南科技学院中等职业学校专业骨干教师国家级培训ppt课件_第1页
河南科技学院中等职业学校专业骨干教师国家级培训ppt课件_第2页
河南科技学院中等职业学校专业骨干教师国家级培训ppt课件_第3页
河南科技学院中等职业学校专业骨干教师国家级培训ppt课件_第4页
河南科技学院中等职业学校专业骨干教师国家级培训ppt课件_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1,河南科技学院中等职业学校专业骨干教师国家级培训PPT课件,课 题 一维数组(C语言) 专业:计算机及应用 姓名:周锦梅,2,课题 一维数组,本课要求:,1、掌握C语言数组在内存中的存储形式 2、掌握一维数组的定义及使用 3、了解与数组有关的基本算法(如排序、查找、插入、删除等)的程序设计,重点:,一维数组的定义与使用方法,,难点:,与数组有关的常用算法(排序、查找与插入等)。,3,数组,本课主要内容:,1 数组概述 2 一维数组 3 应用程序举例 本 章 小 结,4,1 数组概述,数组是各种计算机程序设计语言中很重要的一个概念,用于处理大量数据的问题。为了处理方便,把具有相同类型的若干数据按有序的形式组织起来,这些按序排列的同类数据元素的集合称为数组。在语言中,数组属于构造数据类型,一个数组元素可以是基本数据类型或是构造类型。,5,输入10个数,输出它们的平均值及大于平均值的那些数?,引例:,main() int n; float s=0,a, ave; for (n=1;n=10;n+) scanf(“%d”, ,6,例5-1:输入10个数,输出它们的平均值及大于平均值的那些数。,引例:,如果使用:a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,int n; float s, ave, a1, a2, a3,a4,a5,a6,a7,a8,a9, a10; scanf(“%d%d%d%d%d”, 实际程序是不能这样写,7,引例:,读者从上面的程序可以看到程序很冗长,如果不是10个数,而是100,1000,甚至是10000,此时按上面方法编写程序就非常冗长。 思考: 如果能使用ai ( i=1,2,10 ) 的形式? 使用循环来写程序 C语言中表示下标变量就是通过定义数组来实现的。 下面是使用数组来实现的程序:引例,8,在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。 在语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为: 数值数组、 字符数组、 指针数组、结构数组等各种类别。 按数组的维数可分为:一维数组、二维数组、多维数组。 数组在内存中占用一片连续的存储单元,最低地址对应于数组的第一个元素,最高地址对应于最后一个元素,数组可以是一维的,也可以是多维的。,.1 概 述,9,5.2 一维数组(以下的格式都可以用引例.txt文件来讲述),只有一个下标变量的数组,称为一维数组。 5.2.1 一维数组定义 一般形式为: 类型符 数组名 常量表达式,; 其中,类型说明符是任一种基本数据类型或构造数据类型, 数组名是用户定义的数组标识符; 方括号中的常量表达式表示数据元素的个数,也称为数组的长度。 例如:int a10; 说明整型数组a,有10个元素。 float b10,c20; 说明实型数组b,有10个元素,实型数组c,有20个元素。 char ch20; 说明字符数组ch,有20个元素。,10,说明: (1)数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。 (2) 数组名的书写规则应符合标识符的书写规定,数组名不能与同一函数中其它变量名相同。例如: int a; float a10; 是错误的。 (3)C语言中规定数组的下标从0开始,方括号中常量表达式表示数组元素的个数。 例如:int a5 表示数组a有5个元素。因下标从0开始计算。因此5个元素分别为a0,a1,a2,a3,a4。,5.2.1 一维数组的声明,11,(4)不能在方括号中用变量来表示元素的个数, 但是可以是符号常数或常量表达式。例如: #define FD 5 int a3+2,b7+FD; 是合法的。但是下述说明方式是错误的。 int n=5; int an;,5.2.1 一维数组的声明,(6)数组中各元素在内存占一片连续的存储空间,一维数组在内存中存放的顺序是下标大小的顺序。,(5)允许在同一个类型说明中,说明多个数组和多个变量。 例如: int a,b,c,d,k110,k220;,12,1、数组声明时初始化 数组初始化赋值是指在数组说明时给数组元素赋予初值。 数组初始化是在编译阶段进行的。这样将减少运行时间,提高效率。 数组初始化的一般形式为: 类型符 数组名常量表达式=值,值值; 其中: 在 中的各数据值即为各元素的初值,各值之间用逗号间隔。 例如: int a10= 0,1,2,3,4,5,6,7,8,9 ; 相当于a0=0; a1=1;. a9=9;,5.2.2 一维数组的初始化,13,语言对数组的初始赋值的几点规定: (1)可以只给部分元素赋初值。当 中值的个数少于元素个数时,只给前面部分元素赋值。 例如: int a10=0,1,2,3,4; 表示只给a0a45个元素赋值,而后5个元素自动赋0值。 (2)如果定义数组前加关键字static,表示是静态存储类型数组(有关静态存储的概念在本书6.6.2节介绍),对于数值类型数组,其元素初值系统自动全部赋值为0值。 (3)只能给元素逐个赋值,不能给数组整体赋值。 例如给十个元素全部赋1值,只能写为: int a10=1,1,1,1,1,1,1,1,1,1; 而不能写为: int a10=1;,5.2.2 一维数组的初始化,14,(4)如给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数。例如: int a5=1,2,3,4,5; 可写为: int a=1,2,3,4,5; (5)当 中值的个数多于元素个数时, 系统出错。 例如:,5.2.2 一维数组的初始化,int a5=1,2,3,4,5,1 ;,15,5.2.2 一维数组的初始化,2、使用赋值语句初始化,用赋值语句初始化是在程序执行过程中实现的。例如: int a3; a0=5;a1=8;a2=9; 对于数组的元素用赋值语句初始化,常常使用循环来完成,例如: int k,a10; for(k=1;k10;k+) ak=1; /*对数组中所有元素赋初值为1*/,16,数组元素是组成数组的基本单元,数组元素也是一种变量。引用数组元素有下标法和指针法。本小节介绍下标法,指针法将在5.5节中介绍。 使用下标法引用一维数组元素的一般形式为: 数组名下标 其中,的下标只能为整型常量或整型表达式。若为小数时,C编译将自动取整。 例如,a5,ai+j,ai+ 都是合法的数组元素。 a1=a2+b1+5; ai=bi; /* 将数组b的第i元素赋值给数组a的第i元素 */ bi+1=ai+2; /*将数组a的第i+2元素赋值给数组b的第i+1元素*/,5.2.3 数组元素的引用,17,注意: (1)数组元素的引用和数组声明在形式中有些相似,但这两者具有完全不同的含义。数组声明的方括号中给出的是某一维的长度,即表示元素的个数;而数组元素中的下标是该元素在数组中的位置标识。前者只能是常量,后者可以是常量,变量或表达式。 例如,int a10 这里有a10 只是声明数组有10元素。而在程序中引用数组元素a5表示数组中的第5个元素。但是引用中不能用a10,因为C语言中下标从0开始,数组a的最后一个元素是a9。,5.2.3 数组元素的引用,18,(2)C语言中对数组的引用不检验数组边界,即当引用时下标超界时(下标小于0或大于上界),C系统虽然不出错,但可能使其它变量的数组甚至程序代码被破坏,使得程序运行中断或输出错误的结果。 (3) 在语言中只能通过下标变量使用数组元素,而不能一次引用整个数组。 例如,输出有10 个元素的数组必须使用循环语句逐个输出各下标变量: for(i=0; i10; i+) printf(“%d“,ai); 而不能用一个语句输出整个数组,下面的写法是错误的: printf(“%d“,a);,5.2.3 数组元素的引用,19,1. 可通过循环给数组元素输入数据 int a10,i,; for(i=0;i10;i+) scanf(“%d”, 2求数组中最大元素及其下标,5.2.4 一维数组的基本操作,20,3一维数组的倒置 编程分析:将第0个元素与最后1个元素的交换、第1个元素与倒数第2个元素的交换、即第i个与第n-i-1个元素的交换,直到in/2。,5.2.4 一维数组的基本操作,21,5.2.5 一维数组的应用举例 (上机课时调试),例5-4 编程求某班20个学生某门课程考试的平均成绩及高于平均成绩的学生人数。 #define NUM 20 /* 声明代表班上学生人数的符号常量*/ main() int aNUM, i,n; float sum,aver; sum = 0; /* 给sum赋初值 */ printf(“Enter Student Scoren“); /* 提示用户输入学生成绩*/ for(i=0;iaver) n+; printf(“The Class Average Score is:%fn“ ,aver); printf(“The Total Number is:%dn“,n); ,22,5.2.5 一维数组的应用举例(课后编写源代码),例5-5 例5-4中如果还要统计09,1019,2029,.8089,9099分数段及100分的学生人。 编程分析:则可另用数组bn来存各分数段的人数,并用bn0存09分的人数,bn1存1019分的人数,bn9存9099分的人数,bn10存100分的人数。,23,例 5-28 输入20个整数,用选择法由小到大排序,将其以每行10个数据打印输出。(然后再用冒泡法试试) 数据的排序就是将一批数据由小大到(升序)或由大到小(降序)进行排列。常用的有选择法、冒泡法。 1选择法排序,算法 (升序 ) ( 设有n个数,存放在数组A(1)A(n)中) 1)第1遍:从中选出最小的数,与第 1个数交换位置; (演示),第五章 数 组,一维数组的应用举例:5.8.1 排序问题(课后思考题),24,2)第2遍:除第1 个数外,其余n-1个数中选最小的数,与第2个数交换位置; (演示),3)依次类推,选择了n-1次后,这个数列已按升序排列。,一维数组的应用举例:5.8.1 排序问题(教材P.166),25,选择法排序算法的流程图:,一维数组的应用举例:5.8.1 排序问题(教材P.166),26,2冒泡法排序(升序) 算法 :(将相邻两个数比较,大数交换到后面) 1)第 1 趟:将每相邻两个数比较,大数交换到后面,经n-1次两两相邻比较后,最大的数已交换到最后一个位置。,演示,2)第 2 趟:将前n-1个数(最大的数已在最

温馨提示

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

评论

0/150

提交评论