(演示)计算机程序设计基础(c语言)-第6章+数组.ppt_第1页
(演示)计算机程序设计基础(c语言)-第6章+数组.ppt_第2页
(演示)计算机程序设计基础(c语言)-第6章+数组.ppt_第3页
(演示)计算机程序设计基础(c语言)-第6章+数组.ppt_第4页
(演示)计算机程序设计基础(c语言)-第6章+数组.ppt_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、1,第6章 数组,2,内容提要,数组类型; 向函数传递一维数组和二维数组; 常用算法:排序、查找、求最大最小值等; 用字符数组存取字符串; 使用字符串处理函数处理字符串,3,数组的定义和引用,数组的概念 概念引入 用基本数据类型可以解决所有问题吗? 例如:对某班学生的成绩按由高到底的次序进行排序。,30 名?,4 名?,见 程序示例,4,数组的概念,数组是具有一定顺序关系的若干相同类型变量的集合 ,组成数组的变量称为该数组的元素。 用统一的数组名和下标来唯一地确定数组中的元素 数组属于构造类型。,5,一维数组,定义 类型说明符 数组名 常量表达式 ;,int a10; 定义一个有10个元素的数

2、组,每个元素的类型均为int 使用a0、a1、a2、a9这样的形式访问每个元素。它们与普通变量没有任何区别 系统会在内存分配连续的10个int空间给此数组 直接对a的访问,就是访问此数组的首地址,6,一维数组的引用,引用方式 数组名 下标 ; 必须先定义,后使用。 只能逐个引用数组元素,而不能一次引用整个数组。 对数组每个元素的使用与普通变量无异。 可以用任意表达式作为下标,动态决定访问哪个元素。 for (i=0; iSIZE; i+) ai = 2 * i; 下标越界是大忌!使用大于最大下标的下标,将访问数组以外的空间。那里的数据是未知的,可能带来严重后果。,7,一维数组的初始化,数组定义

3、后的初值仍然是随机数,需要初始化 在定义数组时对数组元素赋以初值 int a5 = 12, 34, 56 ,78 ,9 ; 可以只给一部分元素赋初值 int a5 = 0,1,2 ; 在对全部数组元素赋初值时,可以不指定数组长度。 int a = 11, 22, 33, 44, 55 ; 数组大小定义好后,将永远不变,8,一维数组的存储,数组元素在内存中顺次存放,它们的地址是连续的。 例如:具有10个元素的整型数组 A,在内存中的存放次序如下:,数组名字 是数组首元素的内存地址。 数组名是一个常量,不能被赋值。,A,9,只能逐个对数组元素进行操作(字符数组例外),输入方法:,int a10,i

4、;,输入第i个数组元素:,scanf(%d,输入整个数组元素:,for (i=0;i10;i+) scanf(%d,输出方法:,输出第i个数组元素:,printf(%d,ai);,输出整个数组元素:,for (i=0;i10;i+) printf(%d,ai);,一维数组的输入和输出,10,例:把0-9的数字放到数组中,并输出,main() int i,a10; for(i=0;i=9;i+) ai=i; printf(%d,ai); ,输出数组元素的语句对吗,for(i=0;i=9;i+) printf(%d,ai);,11,例6.2 打印最高分教材204页,从键盘输入某班学生某门课的成绩(

5、每班人数最多不超过40人,具体人数由键盘输入),试编程打印最高分及其学生的序号. 算法: 从键盘输入学生人数n; 从键盘输入所有学生的学号和成绩分别存入数组num和score 假设其中的一个学生成绩为最高maxScore = score0 对所有学生成绩进行比较,即 for (i=1; i maxScore 则修改maxScore值为scorei 打印最高分maxScore,见 程序示例,12,排序算法,在计算机领域,排序和查找时两种最基本的操作任务。排序是把一系列数据按升序或降序排列的过程,即将一个无序的数据调整为有序序列的过程。至今已经产生了许多比较成熟的排序算法,如交换法,选择法,插入排

6、序、冒泡法、快速排序算法。 本章中介绍交换排序算法。,13,排序算法:交换法排序,14,排序算法:交换法排序,15,例6.3 成绩排序教材205页,从键盘输入某班学生某门课的成绩(每班人数最多不超过40人,具体人数由键盘输入), 编程将分数按从高到低顺序进行排序输出.,使用交换法排序算法的关键步骤: for (i=0; i scorei) 交换成绩scorej和scorei, 交换学号numj和numi; 见 程序示例,16,查找算法,查找算法是程序设计中除排序算法外另一类较为常用的算法。包括在一批数据中查找最大值(最小值),顺序查找指定数据所在的位置、折半查找等。 顺序查找基本思想:利用循环

7、顺序扫描这个数组,依次将每个元素与待查找值进行比较;若找到,就停止循环,输出其位置值;若所有元素都比较后仍未找到指定的查找值,则循环结束后,输出“未找到”的提示信息。,17,查找算法:顺序查找,for (i=0; in; i+) /*在数组中查找值为x的元素*/ if (numi = x) pos=i; /*若numi等于x,则找到了该学生*/ break; ,从键盘任意输入一个学生的学号,在由高到低排序的某些课程分数排名表中查找具有该学号的的学生的名次,并打印其考试成绩。,见 程序示例,18,二维数组,定义: 数据类型 数组名常量表达式常量表达式,int a23;,a0 a1,a,- a00

8、 a01 a02,- a10 a11 a12,19,二维数组的存储结构,int a23;,存放顺序:按行存放 先顺序存放第0行的元素,再存放第1行的元素,第0行,第1行,第0列,第1列,第2列,数组a的逻辑存储结构,20,二维数组的初始化,分行给二维数组赋初值 例如:int a34=1,2,3,4,5,6,7,8,9,10,11,12; 将所有数据写在一个内,系统按顺序赋值 例如:int a34=1,2,3,4,5,6,7,8,9,10,11,12; 可以对部分元素赋初值 例如:int a34=1,0,6,0,0,11;,21,例:将一个二维数组行和列元素互换,存到另一个二维数组中。,main

9、() int a23=1,2,3,4,5,6; int b32,i,j; for(i=0;i=1;i+) for(j=0;j=2;j+) printf(%5d,aij); bji=aij; printf(n); for(i=0;i=2;i+) for(j=0;j=1;j+) printf(%5d,bij); printf(n); ,22,字符串(String)与字符数组,字符串 一串以0结尾的字符在C语言中被看作字符串 用双引号括起的一串字符是字符串常量,C语言自动为其添加0终结符 C语言并没有为字符串提供任何专门的表示法,完全使用字符数组和字符指针来处理 字符数组 每个元素都是字符类型的数组

10、 char string80;,23,字符数组的初始化和存储,用字符型数据对数组进行初始化 char str6 = C,h,i,n,a,0;,用字符串常量直接对数组初始化 char str6 = China; char str6 = China;,字符数组的存储,24,字符数组的输入输出,for (i=0; i10; i+) scanf(“%c”,char s10;,gets(s); puts(s);,scanf(%s,s); printf(%s,s);,单个字符逐个输入输出,整个字符串的输入输出,注意 输出字符不包括 0 用%s输出字符串时,输出项是字符数组名(不加 scanf(%s%s%s

11、,str1,str2,str3); 运行时输入数据: How are you?,若改为: char str13; scanf(%s,str); 运行时输入数据: How are you?,26,字符串处理函数,在中定义了若干专门的字符串处理函数 (教材233页表6-2) strcpy(目的字符串,源字符串);字符串复制 strcmp(字符串1,字符串2);字符串比较 当出现第一对不相等的字符时,就由这两个字符决定所在字符串的大小 返回其ASCII码比较的结果值 strlen(字符串);求字符串长度 返回字符串的实际长度,不包括0,27,例6.9 教材234页,从键盘任意输入5个学生的姓名,编程

12、找出并输出按字典顺序排在最前面的学生姓名 。 等价于求最小字符串,见 程序示例,28,函数与数组 教材208页,考虑程序结构的模块化,实现程序的“单一功能,单一模块”,我们常将程序设计中使用频率较高的算法编入一个函数封装起来。这样,以后再使用时不必重复书写这段程序代码。只要给定必要的入口参数即可。 前面我们已经介绍了用简单变量作为函数参数向被调函数传递数据值的方法。这章介绍用数组元素作为函数参数和用数组名作函数参数。,29,向函数传递一维数组,传递整个数组到另一个函数内,可以将数组的首地址作为参数传过去。 方法是用数组名作为函数参数,作用是将实参数组的起始地址传给形参数组,这样,两个数组就占同一段内存单元 只拷贝一个地址自然比拷贝全部数据效率高 在主调函数和被调函数中分别定义数组 形参数组可以不指定大小,即使指定大小,实际也是不起作用的。 如果需要记录数组的大小,可另设一个参数,例6.4用函数编程实现交换法排序成绩。 教材210页,见 程序示例,简单实例,30,向函数传递一维数组,#include void func(int b) int j; for(j=0;j10;j+) bj=j; main() int i;

温馨提示

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

评论

0/150

提交评论