C程序数字资源分类-第6章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
前三个数组元素进行了初始化,C语言会自动将数组a中的后两
个数组元素赋值为0。
由此,若要对数组中全部数组元素初始化为0,可以使用以
下定义语句: int a[5] = { 0 };
6.2 一维数组
6.2.3 数组元素的引用 C语言中除了字符数组外均不能整体引用数组。也
就是说,不能一次性地读写数组中的所有元素,而只 能单独引用某个元素。
该程序段执行后,a数组中的5个元 素分别是a[0] = 1、a[1] = 1、a[2] = 2、 a[3] = 3、a[4] = 5。
6.2 一维数组
6.2.3 数组元素的引用 C语言中由于数组元素的下标可以是整型表达式,
因此上面程序段的功能可以用循环语句实现: int a[5], i; a[0] = 1; a[1] = 1; for (i = 2; i<5; i++ ) a[i] = a[i - 1] + a[i - 2];
对数组元素的引用形式为: 数组名[下标] 方括号中的下标必须是一个整型常量、整型变量或 整型表达式。
6.2 一维数组
6.2.3 数组元素的引用 例如,若以下数组定义语句:
int a[5] = { 5, 6, 7, 8, 9 }; 则数组中的五个元素分别是a[0] 、a[1]、a[2]、a[3]、a[4],它们的 值分别为5、 6、 7、 8、 9。数组a 在内存中的存储情况如图6-1一维 数组的存储结构所示。
6.2 一维数组
6.2.2 一维数组的初始化
也就是说:
3. 数组元素部分初始化
int a[5] = { 0, 1, 2 };
int a[5] = { 0, 1, 2, 0, 0}
C语言中可以只给一部分元素赋初等值价。例如:
int a[5] = { 0, 1, 2 };
这里定义了长度为5的一维整型数组a,并且只对数组中的
言标识符命名规则。
6.2Байду номын сангаас一维数组
6.2.1 一维数组的定义
例如,下面的语句:
例in如t a,rr下ay面[10的]; 程序段中对数组的定义是正确的: 定#义d了ef一in个e 名S为IZaErra1y0的数组,包含10个int型元素:
arrayi[n0]t~aarrrraayy[91][,S可IZ用E]于, 存ar储ra1y0[个SIiZntE型*数5据], 。array3[2 * 6]; 而说下明面:的程序段定义数组的方式是错误的: 1.数in组t m元=素1的0下; 标从0开始,最大下标为数组长度减一。
6.2 一维数组
6.2.3 数组元素的引用
若在程序中访问a[5]则会 导致下标越界,但系统并不会 报错,而是访问a[4]后面一个 整型存储空间中存放的数据, 如果不慎修改了该值,则有可 能造成严重后果。因此,一定 要注意避免下标越界的错误。
6.2 一维数组
6.2.3 数组元素的引用
C语言对数组元素的赋值和其他操作与对一般变量的操作类
6.2 一维数组
6.2.4 数组元素的输入与输出 算法设计:求解该问题需要以下3步,算法流程图
如图6-4所示。 1.对输入的10个数采用数组存储。 2.按照上面的分析,采用“打擂台”的方式求出最
大数,存于max变量中。 3.输出max的值。
6.2 一维数组
6.2.4 数组元素的输入与输出
图6-4 求最大数的算法流程图
似。例如: int a[5]; a[0] = 1; a[1] = 1; a[2] = a[1] + a[0]; a[3] = a[2] + a[1]; a[4] = a[3] + a[2];
这个程序段定义了一个长度为5的 整型数组,分别用五条语句对数组元 素进行了赋值,其中对后三个元素的 赋值用到了前面的数组元素。
矿泉水
瓶
可乐
瓶
牛奶
盒
橙汁
瓶
苏打水
瓶
牙膏
支
牙刷
支
毛巾
条
香皂
块
洗发水
瓶
单价(元) 1.00 3.00 5.00 3.50 5.00 8.00 5.00 6.00 4.50 28.00
6.1 引例
6.1.1 问题描述 假如某顾客买了三盒牛奶、两条毛巾和一块香皂。
编程打印下面的购物清单:
商品编号 商品名称
为了解决这种问题,C语言中运用了数组来存储大 批同类型数据。
6.2 一维数组
那么什么是数组呢? 数组是由若干个相同类型的数据项组成的有序数据 集合,在内存中占有一段连续的存储空间,数组名代 表数组的起始地址。数组中的数据项称为数组元素, 可以用数组名和不同的下标唯一确定数组中的每个元 素。 数组可分为一维数组和多维数组。 下面我们就来了解一维数组
计算思维 与C程序设计
第6章 多维批量数据处理
【本章要点】
一维数组 一维数组有关的常见算法 二维数组 字符数组 字符串处理函数 引例的实现
6.1 引例
6.1.1 问题描述 大家都去超市,超市里经营的商品种类成百上千,
很多时候我们会发现收银台处聚集着很多人等待结账, 想象一下如果没有一个简单计算机模拟程序来实现结 账,超市是什么样的,那么,如果让大家来做一个这 样的模拟程序,大家会如何定义这些商品的数据呢?
6.2 一维数组
6.2.1 一维数组的定义 在C语言中,数组必须先定义后使用。定义数组的
实质是为该数组分配连续的存储单元。定义一维数组 的格式是:
数据类型 数组名[常量表达式]; 确定了数组中每数个组元起素始的地类址(即首元指素定数组的长度, 型。可以是基本的数地据址类)型,,为一个地址即常数组中元素的个 也可以是构造数量据。类数型组。名应该遵循C语数。
接着再比较第二组相邻数5和3,5大于3,且5在前,不存在 逆序,不必交换,数列仍为6, 5, 3, 7, 9。
6.2 一维数组
6.2.4 数组元素的输入与输出
比较第三组相邻数3和7,3小于7,且3在7前,存在逆序, 需交换3和7的位置,交换后数列变为6, 5, 7, 3, 9。
比较第四组相邻数3和9,3小于9,且3在9前,存在逆序, 需交换,使数列变为6, 5, 7, 9, 3。
数据类型 数组名[常量表达式] = {初值表}; 其中,初值表列出了各数组元素的值,它们之间用逗号隔 开。 一维数组的初始化有以下几种情况:
6.2 一维数组
6.2.2 一维数组的初始化 1.数组元素全部初始化 例如下面的语句:
int a[5] = { 0, 1, 2, 3, 4 }; 定义的一维整型数组a中,元素a[0]~a[4]的初值依 次为0, 1, 2, 3, 4。
数组名为data,则数组元素data[i]中可存储第i个输入 的数(i=0,1,2,…,9)。设变量sum存储总和、变量 average存储平均值,则sum的初值应为0。平均值的 计算公式为sum/10。
6.2 一维数组
6.2.4 数组元素的输入与输出 算法设计:求解该问题可分成以下4步,算法流程
起泡法(又称为冒泡法)。
起泡法中的基本操作称为“起泡”,即将相邻的两
个数进行比较,存在逆序则交换。
6.2 一维数组
6.2.4 数组元素的输入与输出
例如,对5, 6, 3, 7, 9这5个数的第一趟“起泡”过程如下, 可参照图6-6加以理解。
首先比较第一组相邻数,即5和6比较,由于5小于6,且5在 6前,按降序要求则存在逆序,需要将5和6的位置交换,使数 列变为6, 5, 3, 7, 9。
6.2 一维数组
6.2.3 数组元素的引用 又如,对整型数组b[5]中的各个元素依次赋值1、2
、3、4、5,可以用下面的程序段实现: int b[5], i; for ( i = 0; i<5; i ++ ) b[i] = i + 1;
6.2 一维数组
6.2.4 数组元素的输入与输出
一般来说,只能对数组元素逐个进行输入输出(字符数组 例外)。对数组元素的输入可用scanf ( )函数实现,输出可用 printf ( )函数实现。
6.1 引例
6.1.1 问题描述 现在看这样一个简单模拟程序,它实现结帐和打印
清单的操作,为简化问题,假设超市里共有10种商品, 所有商品的价格列于表6-1中,商品的条形码用商品编 号代替。
6.1 引例
6.1.1
问题描述
商品编号 0 1 2 3 4 5 6 7 8 9
表6-1 商品信息
商品名称
计价单位
6.2 一维数组
6.2.4 数组元素的输入与输出 程序设计例6-2源代码 运行结果:程序运行结果如图6-5所示
6.2 一维数组
6.2.4 数组元素的输入与输出
例6-2 从键盘输入5个数,按从大到小的顺序排列
后输出。
扩展实例6-1选择排序
问题分析:排序算法有很多种,如起泡排序法、选
择排序法、插入排序法、希尔排序法等,此处只介绍
想一想: 如何将例 6-1中的 两个循环 合并成一 个循环。
说明:程序中数据输入与计算总和分别用两个循环 来实现,事实上可以合并为一个循环。
6.2 一维数组
6.2.4 数组元素的输入与输出
例6-2 从键盘输入10个数,求出其中的最大数。 问题分析:在10个数中求最大数可采用“打擂台”方式。 首先设数组data中第一个元素data[0]为“擂主”,即把data[0] 作为最大数存入变量max中,然后“挑战者” data[1]~ data[9] 逐个上台打擂。data[1]先和max比较,若data[1]>max,则挑 战成功,data[1]存入max成为新的擂主;否则挑战失败,擂主 不变。接着data[2]… data[9]依次进行“挑战”,最后的“擂 主”max就是10个数中的最大数。
例如:若有数组定义语句:
int a[5]; 则可以有下面的输入、输出语句: scanf (“%d”, & a[0]); /*输入数组元素a[0]的值*/ printf(“%d”, a[0]); /*输出数组元素a[0]的值*/
6.2 一维数组
6.2.4 数组元素的输入与输出 例6-1 从键盘输入10个数,计算其总和及平均值。 问题分析:键盘输入的10个数可采用数组存储,设
2
牛奶
7
毛巾
8
香皂
总计: 31.50 元
单位 盒 条 块
单价(元) 5.00 6.00 4.50
数量 3 2 1
6.1 引例
6.1.2 问题分析
对于本问题,要考虑以下三步: 1)把超市中销售的所有商品信息存储在计算机中; 2)根据顾客购买的商品编号和数量计算总价; 3)最后按照购物清单的格式把这些信息依次打印。
用这相2.当里数in于试组t 变a可图[量m以用。]看;变成量是确相定同类数型组变长量度的,集是合不,每正个确数的组。元素的作
3.数组定义中不能用变量表示数组长度。 4.数组一经定义,其长度在程序中不可改变。
6.2 一维数组
6.2.2 一维数组的初始化
刚定义的数组中每个数组元素的值并未确定。C语言允许在 定义数组的同时给数组元素赋初值,称为初始化。一维数组初 始化的格式如下:
6.2 一维数组
6.2.2 一维数组的初始化 2.数组元素全部初始化,省略数组长度 如果对数组中的全部元素进行初始化,则可省略数
组长度的定义,而由初值表中元素的个数自动确定。 下面两个数组的定义是等价的:
int a[ ] = { 0, 1, 2, 3, 4 }; int a[5] = { 0, 1, 2, 3, 4 };
根据问题描述可得,需要保存的商品信息有: 1)10类商品的编号与单价、名称、计价单位; 2)顾客购买商品的编号和购买数量。
而存取、计算、打印这数量繁多的信息,就需要掌握今天所 要学到的数组知识。
6.2 一维数组
我们都知道其实生活中有很多类型相同、操作也相 同的数据,就像超市中每种商品的价格。如果为每种 商品都单独定义每个变量,则需要大量不同的标识符 作变量名,而且这些变量在内存中也是随机存储的。 如果这样定义程序将不能很好地管理这些变量。
此时第一趟“起泡”完成,从图6-6中可以看出,最小的数 3在第一趟起泡后排在了数组的最后,这也是按由大到小顺序 排列后3应该在的位置。对于5个数形成的数列,用起泡法排序 ,第一趟“起泡”需要进行4组相邻数的比较,使得最小的数 到了最后。
图如图6-2所示。 1.输入数据。 2.计算总和sum:依次累加数组中各元素之值。 3.计算平均值average。 4.输出运算结果。
6.2 一维数组
6.2.4 数组元素的输入与输出
图6-2 数组求和求平均值算法流程图
6.2 一维数组
6.2.4 数组元素的输入与输出 程序设计例6-1源代码 运行结果:程序运行结果如图6-3所示