版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五章 数组,5.1 问题的提出 5.2 一维数组 5.3 二维数组 5.4 字符串与字符串函数,5.1 问题的提出,第一个问题是:输入100个学生的“C 程序设计”课程的成绩,将这100个分数从 小到大输出。 第二个问题是输入100个学生的“C程 序设计”课程的期中和期末成绩,算出总评 成绩,总评成绩为“30%期中成绩 +70%期末成绩”,计算总评成绩的分数 段情况。,什么构造类型? 所谓构造类型是指由基本类型数据按一定的规则组成的,是用户自己按规则定义的,数组是构造类型之一。 什么是数组? 在数学中我们学过数列、矩阵的概念, 数列通常表示为:a1 、a2 、a3、.、an 矩阵通常表示为:
2、,在C语言中表示数组和矩阵的方法是: 数组:a0、a1、a2、a3、a4、a5 其中 a :称为数组名。 方括号中的数:称为下标 下标是一个数时,也就是数列,称为一维数组。 下标是两个数时,也就是矩阵,称为二维数组。还有三维数组、四维数组等。,例如:有五名学生的一组学号: 2004035012、2004035013、2004035014、2004035015、2004035016。 如果用数组来表示的话可以用统一的数组名比如:num,用下标区别每个变量。 即 num0、num1、num2、num3、num4,5.2 一维数组,5.2.1 一维数组的定义 数组是具有相同数据类型的变量集,并拥 有
3、共同的名字。 从概念上来说,数组是一组变量,这组变量 应该满足下列条件: (1) 具有有相同的名字 (2) 具有相同的数据类型 (3) 在存储器中连续存放,每个变量称为数组的一个“数组单 元”,保存在其中的数据值称为“数组元 素”,不论是数组单元,还是数组元素, 在不引起混淆的情况下,可以简称为元 素。数组对象的整体有一个名称,这个 名称表示整个数组。,每个数组在使用之前都需要定义。 定义数组的语法是: 数据类型说明符 数组名数组长度; 注意:数组长度只能是常量。,定义数组中元素的取值类型,定义数组中元素的个数,例如: int data5; 说明整型数组data,有5个元素。 float b1
4、0,c20; 说明单精度浮点型数组b,有10个元素;单 精度浮点型数组c,有20个元素。 char string20; 说明字符型数组string,有20个元素。,一维数组在内存的存储形式:例 long num4 ;,一组变量,表示num数组包含五个元素分别是: num0、num1、num2、num3、num4,num 就是数组存储区域的首地址,即 num=200 。,注意: (1) 数组的数据类型定义的是每个数组元素的取值类型。对于一个数组来说,所有数组元素的数据类型应该都是相同的。 (2) 数组名要符合用户定义字的书写规则,也就是与普通变量一样。 (3) 在C语言的一个函数中,数组名不能与
5、本函数的其它变量名同名。 (4)数组长度不能是变量,也不能是或包含变 量的表达式,可以是常量或常量表达式。并且 常量表达式应是整型数,不能是小数 。,程序段一: #define Size 5 main() int aSize,bSize+10; /*正确 */ 程序段二: main() int n=5; int datan; /*错误 */ ,5.2.2 一维数组的引用 引用数组单元的一般形式为: 数组名下标 数组下标从0开始,可以是整型变量或整型表达式,但不能是浮点型的变量或浮点型表达式;并且下标不能大于数组长度-1,因为超过部分没有被定义过,是不能正确使用的。 例如:data4、datai
6、+j、datai+都是合法的引用方式。,数组必须先定义,后使用 只能逐个引用数组元素,不能一次引用整个数组 其中:下标可以是常量、变量或表达式,但最终值必须是整型数。,例 int a10; scanf(“%d”,a) ; (),必须 int a10; for(j=0;j10;j+) scanf(“%d”, ,数组的定义与引用中下标用法的区别,在数组的定义中:下标必须是整型常量,例如 int a100; 也就是说在定义数组的个数的时候必须给定元素的个数。下面的定义不正确: int n=5; int an; () n不是常量,是变量。 下面的写法也是正确的: #define size 5 main
7、( ) int asize,bsize+5; (),在数组的引用中: 下标可以是常量,可以是变量,对于上面的例子,有: a0a99都可以用,还可以像如下这种方式用:i=2; ai=34; ai+; ai-; a+i; a-i;,5.2.3 一维数组元素值的输入与输出 例如 : main() int i , a10; for(i=0 ; i10 ; i+) scanf(“%d” , ,使用数组定义和数组元素时的几点注意: 1、把数组定义时方括号中的数和元素下标值区别开 方括号中的数表示数组含有的元素个数 元素下标值是标识具体的数组元素的 2、数组元素的下标可以是常量, 也可以是变量, 其值必须是
8、整数。 3、数组必须先定义后使用。 4、系统不检查数组元素下标的越界问题。 5、一维数组元素的输入、输出使用单层循环语句。,例5.1用数组方式读入5个整数,并求和。 #include stdio.h main() int i,data5,sum=0; printf(nPlease enter 5 integer:); for (i=0;i5;i+) scanf(%d, ,在语言中只能逐个地使用每个数组单元 进行操作,而不能一次引用整个数组。 例如,不能用printf(“%d”,data);来代替下 面的语句: for(i=0; i=4; i+) printf(%d,datai); 因为,C语言
9、规定数组名本身代表数组的首 地址。printf(“%u”,data);语句输出的是数组的 首地址,而不是数组单元的内容。,5.2.4 一维数组的初始化 初始化是指在数组定义时给数组元素赋予 初值。 一维数组初始化的一般形式是: 数据类型说明符 数组名数组长度=数值,数 值,. 数值;,int data5=1,2,3,4,5; 注意: (1) 允许初始化一部分元素,而不是全部。 int data5=1,2; (2) 初始化数组时,允许省略数组的长度。 int data=1,2,3,4,5; 与int data5=1,2,3,4,5;是完全等价的。 (3) 初始化数组时,不能对整个数组初始化。 例
10、如,int data5=1;,数组的初始化和赋值的区别,数组的初始化:是指在定义数组的时候进行的,例如: int a 3=1,2,3; /* 初始化 */ 数组元素的赋值: int a3; /* 定义整型数组 */ . a1=1; a2=2; /* 数组元素赋值 */ a3=3,例【1】学校举行知识竞赛,有10个学生参 赛,请协助老师编写一个程序把成绩打印出 来。 解题步骤: 1、定义一个一维数组存放成绩 2、输出成绩。,5.2.4程序举例,代码实现 #include”stdio.h” main() int i; int student10=90,78,67,98,34,56,75,80,50
11、,92; for(i=0;i10;i+) printf(“%d”, studenti); ,例【2】将例【1】中的10个学生的竞赛成绩从键盘输入,计算出平均分,将平均分输出到屏幕上。 #include”stdio.h” #define SIZE 10 main() int i,studentSIZE,sum=0,AVG; for(i=0;iSIZE;i+) scanf(“%d”, ,例 3读10个整数存入数组,找出其中最大值和最小值,步骤: 1. 输入:for循环输入10个整数 2. 处理: (a) 先令max=min=x0 (b) 依次用xi和max,min比较(循环) 若maxxi,令mi
12、n=xi 3. 输出:max和min,#include #define SIZE 10 main() int xSIZE,i,max,min; printf(Enter 10 integers:n); for(i=0;ixi) min=xi; printf(Maximum value is %dn,max); printf(Minimum value is %dn,min); ,例4用数组方式解决Fibonacci数列问题,求出 Fibonacci数列的前20项存储在数组中,并将数 组内容输出。,分析:定义一个含有20个元素的数组f ,即 int f20 ; 其中 f0=1,f1=1, fn=
13、fn-1+fn-2 (n2) 用一个循环结构:让循环变量n从 2到 20 ,循环体为 fn=fn-1+fn-2,#include stdio.h void main() int i,fib20=1,1; /*初始化 */ printf(n); for (i=2;i20;i+) fibi=fibi-1+fibi-2; for (i=1;i=20;i+) printf(%10d,fibi-1); if (i%5=0) printf(n); /*换行,每行输出5个 */ ,例 5用冒泡法对 8 个数排序(输入时数据无次序,输出按升序),排序过程:首先把八个数放到数组a9 中。 a1 =38、a2=4
14、9、a3=65、a4=76、a5=13、a6=27、a7=30、a8=97 。 (1)比较第一个数与第二个数,若为逆序a1a2,则交换值;然后比较第二个数与第三个数,若为逆序a2a3,则交换值;依次类推,直至第7个数和第8个数比较为止第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上,即在a8中。 (2)对前7个数进行第二趟冒泡排序,结果使次大的数被安置在第7个元素位置,即在a7中 。 (3)重复上述过程,共经过7趟冒泡排序后,排序结束。,例,38,49,76,97,13,97,27,97,30,97,13,76,76,76,27,30,13,65,27,65,30,65,13,13,49
15、,49,30,49,27,38,27,38,30,38,#include main() int a11,i,j,t; printf(Input 10 numbers:n); for(i=1;iai+1) t=ai; ai=ai+1; ai+1=t; printf(The sorted numbers:n); for(i=1;i11;i+) printf(%d ,ai); ,1、 输入10个整数,求出最小的数以及第一个最小的数在数组中的下标。 2、用初始化方法,把某学习小组10名学生的“C语言”成绩课程的考试成绩存储在数组中,再从键盘输入一个分数,查找该分数是否在数组中,如果是,则输出它是第几名学生。 3、输入一个学生的成绩,将该学生的成绩插入到
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 粮食部门财务制度
- 建筑服务业财务制度
- 金店员工运营处罚制度
- 高尔夫球学院财务制度
- 教室卫生制度规定
- 生活区卫生奖罚责任制度
- 外勤机械工复试考核试卷含答案
- 刨插工安全培训效果评优考核试卷含答案
- 玻璃制品手工成型工安全宣传强化考核试卷含答案
- 海盐采收工班组建设竞赛考核试卷含答案
- 音乐场所卫生管理制度
- 2026云南昭通市搬迁安置局招聘公益性岗位人员3人备考题库及答案详解(考点梳理)
- 标书财务制度
- 四川发展控股有限责任公司会计岗笔试题
- 2026中国电信四川公用信息产业有限责任公司社会成熟人才招聘备考题库及一套答案详解
- 2025-2030心理健康行业市场发展分析及趋势前景与投资战略研究报告
- 技术副总年终总结
- 《马年马上有钱》少儿美术教育绘画课件创意教程教案
- 天津市专升本高等数学历年真题(2016-2025)
- 2025山西焦煤集团所属华晋焦煤井下操作技能岗退役军人招聘50人笔试参考题库带答案解析
- 儿童骨科主任论儿童骨科
评论
0/150
提交评论