第7章 用数组保存数据.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第7章 用数组保存数据.ppt》由用户(最好的沉淀)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第7章 用数组保存数据 数组 保存 数据
- 资源描述:
-
1、第第7章章 算法和数据结构基础算法和数据结构基础用数组保存数据用数组保存数据哈尔滨工业大学哈尔滨工业大学为什么使用数组为什么使用数组(Array)?n读入两个学生的成绩,求其平均分读入两个学生的成绩,求其平均分 int score1,score2;scanf(%d,&score1);scanf(%d,&score2);aver=(score1+score2)/2;n问题:一批数据来了怎么办?问题:一批数据来了怎么办?int score1,score2,score100;scanf(%d,&score1);scanf(%d,&score2);scanf(%d,&score100);int sco
2、re100,i;for(i=0;i100;i+)scanf(%d,&scorei);保存大量同类保存大量同类型的相关数据型的相关数据 int score,i,sum=0;for(i=0;i100;i+)scanf(%d,&score);sum=sum+score;aver=sum/100;7.1 数组的定义、引用和初始化数组的定义、引用和初始化n数组(数组(ArrayArray)一组具有相同类型的变量的集合。由于数组是聚合了一组相同类一组具有相同类型的变量的集合。由于数组是聚合了一组相同类型的变量,因此数组是一种构造数据类型。型的变量,因此数组是一种构造数据类型。一副扑克牌可以看成一个一维数组
3、,将一副扑克牌按照花色和牌面分开摆一副扑克牌可以看成一个一维数组,将一副扑克牌按照花色和牌面分开摆放,那么就可以看成一个二维数组。若将放,那么就可以看成一个二维数组。若将5252张牌按花色排就是一个张牌按花色排就是一个4 4行行1313列的二维数组,按牌面排就是一个列的二维数组,按牌面排就是一个1313行行4 4列的二维数组。列的二维数组。就像用梁山好汉称呼就像用梁山好汉称呼水浒传水浒传中的一百单八将一样,对于数组中的一百单八将一样,对于数组中的这一组相同类型的数据,我们会使用一个统一的名字来标识中的这一组相同类型的数据,我们会使用一个统一的名字来标识它们,这个名字就称为数组名。它们,这个名字
4、就称为数组名。构成数组的每个数据项称为数组元素(构成数组的每个数据项称为数组元素(ElementElement)。)。n 一维一维数组的定义数组的定义 a9a8a7 a1a0n定义一个有定义一个有10个个int型元素的一维数组型元素的一维数组在内存中分配连续的存储在内存中分配连续的存储空间给此数组空间给此数组n为什么数组下标从为什么数组下标从0开始?开始?使编译器的实现简化一点,且下标的运算速度少量提高使编译器的实现简化一点,且下标的运算速度少量提高基类型基类型(Base Type)数组长度数组长度数组元素的下标从数组元素的下标从0 0开始开始数组名数组名a a代表首地址代表首地址7.1 数组
5、的定义、引用和初始化数组的定义、引用和初始化n如果希望下标从如果希望下标从1到到10而非从而非从0到到9,怎么办?,怎么办?a9a8a7 a1a0n最好用宏定义最好用宏定义#define N 10 int aN;a10#define N 11 int aN;7.1 数组的定义、引用和初始化数组的定义、引用和初始化7.1 数组的定义、引用和初始化数组的定义、引用和初始化n一维数组一维数组用用1 1个下标个下标表示数组元素表示数组元素n二维数组二维数组用用2 2个下标个下标表示数组元素表示数组元素n三维数组三维数组用用3 3个下标个下标表示数组元素表示数组元素 声明一个有声明一个有8个元素的一维数
6、组:个元素的一维数组:#define N 8int aN;声明一个有声明一个有2行行4列的二维数组:列的二维数组:#define M 2#define N 4int bMN;声明一个有声明一个有2*2*2的三维数组:的三维数组:#define M 2#define N 2#define L 2int bLMN;7.1 数组的定义、引用和初始化数组的定义、引用和初始化n数组在内存中的物理存储结构数组在内存中的物理存储结构按行线性存储按行线性存储 7.1 数组的定义、引用和初始化数组的定义、引用和初始化n访问(引用)数组中的元素访问(引用)数组中的元素 for(i=0;i2;i+)/行下标值变化行
7、下标值变化 for(j=0;j4;j+)/列下标值变化列下标值变化 scanf(%d,&aij);for(i=0;i2;i+)/行下标值变化行下标值变化 for(j=0;j4;j+)/列下标值变化列下标值变化 printf(%4d,aij);printf(n);/输出换行输出换行n未初始化的数组元素值是什么?未初始化的数组元素值是什么?静态静态数组和数组和全局全局数组自动初始化为数组自动初始化为0 0值,否则,是随机数值,否则,是随机数n一维数组的初始化一维数组的初始化 int a5=62,74,56,88,90;int a5=62,74;int a=62,74,56,88,90;n更高效的数
8、组初始化方法更高效的数组初始化方法 memset(a,0,sizeof(a);memcpy(a,b,sizeof(a);用用sizeof(a)来获得数组来获得数组a所占的内存字节数所占的内存字节数#include int a5=62,74,0,0,0;7.1 数组的定义、引用和初始化数组的定义、引用和初始化n参数的传递方式有两种:参数的传递方式有两种:按值传递(按值传递(Pass-by-value)按引用传递(按引用传递(Pass-by-reference)7.2.1传值调用与模拟传引用调用传值调用与模拟传引用调用7.2.2一维数组的参数传递一维数组的参数传递以筛法求素数为例以筛法求素数为例n
9、【例例7.17.1】请编写程序,用筛法计算并输出请编写程序,用筛法计算并输出1n1n之间的所有素数之和。之间的所有素数之和。void SiftPrime(int a,int n)for(int i=2;i=n;+i)ai=i;for(int i=2;i=sqrt(n);+i)for(int j=i+1;j=n;+j)if(ai!=0&aj!=0&aj%ai=0)aj=0;7.2.2一维数组的参数传递一维数组的参数传递以筛法求素数为例以筛法求素数为例n【例例7.17.1】请编写程序,用筛法计算并输出请编写程序,用筛法计算并输出1n1n之间的所有素数之和。之间的所有素数之和。#include#in
10、clude#define N 100void SiftPrime(int a,int n);int SumofPrime(int n);int main(void)int n;printf(Input n:);scanf(%d,&n);printf(sum=%dn,SumofPrime(n);return 0;void SiftPrime(int a,int n)for(int i=2;i=n;+i)ai=i;for(int i=2;i=sqrt(n);+i)for(int j=i+1;j=n;+j)if(ai!=0&aj!=0&aj%ai=0)aj=0;int SumofPrime(int
展开阅读全文