欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第7章 用数组保存数据.ppt

    • 资源ID:89743423       资源大小:3.42MB        全文页数:22页
    • 资源格式: PPT        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第7章 用数组保存数据.ppt

    第第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 score100,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)一组具有相同类型的变量的集合。由于数组是聚合了一组相同类一组具有相同类型的变量的集合。由于数组是聚合了一组相同类型的变量,因此数组是一种构造数据类型。型的变量,因此数组是一种构造数据类型。一副扑克牌可以看成一个一维数组,将一副扑克牌按照花色和牌面分开摆一副扑克牌可以看成一个一维数组,将一副扑克牌按照花色和牌面分开摆放,那么就可以看成一个二维数组。若将放,那么就可以看成一个二维数组。若将5252张牌按花色排就是一个张牌按花色排就是一个4 4行行1313列列的二维数组,按牌面排就是一个的二维数组,按牌面排就是一个1313行行4 4列的二维数组。列的二维数组。就像用梁山好汉称呼就像用梁山好汉称呼水浒传水浒传中的一百单八将一样,对于数组中的一百单八将一样,对于数组中的这一组相同类型的数据,我们会使用一个统一的名字来标识中的这一组相同类型的数据,我们会使用一个统一的名字来标识它们,这个名字就称为数组名。它们,这个名字就称为数组名。构成数组的每个数据项称为数组元素(构成数组的每个数据项称为数组元素(ElementElement)。)。n 一维一维数组的定义数组的定义 a9a8a7 a1a0 int int a10;a10;n定义一个有定义一个有10个个int型元素的一维数组型元素的一维数组在内存中分配连续的存储空间给此数组在内存中分配连续的存储空间给此数组n为什么数组下标从为什么数组下标从0开始?开始?使编译器的实现简化一点,且下标的运算速度少量提高使编译器的实现简化一点,且下标的运算速度少量提高基类型基类型(Base Type)数组长度数组长度数组元素的下标从数组元素的下标从0 0开始开始数组名数组名a a代表首地址代表首地址7.1 数组的定义、引用和初始化数组的定义、引用和初始化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个元素的一维数组:个元素的一维数组:#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+)/行下标值变化行下标值变化 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更高效的数组初始化方法更高效的数组初始化方法 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【例例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#include#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 n)int m,sum=0;int aN+1;SiftPrime(a,n);for(sum=0,m=2;m=n;+m)if(am!=0)/素数判定素数判定 sum+=m;return sum;7.2.3 二维数组元素的参数传递二维数组元素的参数传递以杨辉三角形为例以杨辉三角形为例n【例例7.2】杨辉三角形。杨辉三角是中国数学史上的一个伟大成就,是中国古代数学的杰出研杨辉三角形。杨辉三角是中国数学史上的一个伟大成就,是中国古代数学的杰出研究成果之一,早在中国南宋数学家杨辉究成果之一,早在中国南宋数学家杨辉1261年所著的年所著的详解九章算法详解九章算法一书中就详细记载了一书中就详细记载了杨辉三角形表,书中还说明此表引自杨辉三角形表,书中还说明此表引自11世纪中叶(约公元世纪中叶(约公元1050年)贾宪的年)贾宪的释锁算术释锁算术,因,因此杨辉三角也被称为此杨辉三角也被称为“贾宪三角贾宪三角”。在欧洲,帕斯卡(。在欧洲,帕斯卡(16231662)于)于1654年才发现这一规年才发现这一规律,称其为帕斯卡三角形。帕斯卡的发现比杨辉要晚律,称其为帕斯卡三角形。帕斯卡的发现比杨辉要晚393年,比贾宪晚年,比贾宪晚600年,所以有些书上年,所以有些书上也称其为也称其为“中国三角形中国三角形”(Chinese triangle)。)。7.2.3 二维数组元素的参数传递二维数组元素的参数传递以杨辉三角形为例以杨辉三角形为例n【例例7.2】杨辉三角形杨辉三角形/函数功能:计算杨辉三角形前函数功能:计算杨辉三角形前n行元素的值行元素的值void CalculateYH(int aN,int n)for(int i=0;in;+i)ai0=1;aii=1;for(int i=2;in;+i)for(int j=1;j=i-1;+j)aij=ai-1j-1+ai-1j;#include#define N 20void CalculateYH(int aN,int n);void PrintYH(int aN,int n);int main(void)int aNN=0,n;printf(Input n(n20):);scanf(%d,&n);CalculateYH(a,n);PrintYH(a,n);return 0;/函数功能:以直角三角形形式输出杨辉三角形前函数功能:以直角三角形形式输出杨辉三角形前n行元素的值行元素的值void PrintYH(int aN,int n)for(int i=0;in;+i)for(int j=0;j=i;+j)printf(%-4d,aij);/输出结果左对齐输出结果左对齐 printf(n);7.2.3 二维数组元素的参数传递二维数组元素的参数传递以杨辉三角形为例以杨辉三角形为例n【例例7.2】杨辉三角形杨辉三角形/函数功能:计算杨辉三角形前函数功能:计算杨辉三角形前n行元素的值行元素的值void CalculateYH(int aN,int n)for(int i=0;in;+i)for(int j=0;j=i;+j)if(j=0|i=j)aij=1;else aij=ai-1j-1+ai-1j;/函数功能:以直角三角形形式输出杨辉三角形前函数功能:以直角三角形形式输出杨辉三角形前n行元素的值行元素的值void PrintYH(int aN,int n)for(int i=0;in;+i)for(int j=0;j=i;+j)printf(%-4d,aij);/输出结果左对齐输出结果左对齐 printf(n);#include#define N 20void CalculateYH(int aN,int n);void PrintYH(int aN,int n);int main(void)int aNN=0,n;printf(Input n(n20):);scanf(%d,&n);CalculateYH(a,n);PrintYH(a,n);return 0;7.2.3 二维数组元素的参数传递二维数组元素的参数传递以杨辉三角形为例以杨辉三角形为例n当形参被声明为二维数组时,可以不指定数组第一维的长度,用另当形参被声明为二维数组时,可以不指定数组第一维的长度,用另一个整型形参来指定数组第一维的长度,但是第二维的长度必须指一个整型形参来指定数组第一维的长度,但是第二维的长度必须指定,不能省略。为什么必须指定数组第二维的长度呢?定,不能省略。为什么必须指定数组第二维的长度呢?7.3.1 一维数组的下标越界实例分析一维数组的下标越界实例分析n【例例7.3】一维数组下标越界访问的程序示例。请运行下面程序,观察运行结果并一维数组下标越界访问的程序示例。请运行下面程序,观察运行结果并分析原因。分析原因。#include int main(void)int i,a=1,c=2,b5=0;printf(%p,%p,%pn,b,&c,&a);/打印数组打印数组b、变量、变量c和和a的首地址的首地址 for(i=0;i=8;i+)/让下标值越界访问数组的元素让下标值越界访问数组的元素 bi=i;printf(%4d,bi);printf(nc=%d,a=%d,i=%dn,c,a,i);return 0;7.3.2 二维数组的下标越界实例分析二维数组的下标越界实例分析n【例例7.4】二维数组下标越界访问的程序示例。请运行下面程序,观察运行结果并】二维数组下标越界访问的程序示例。请运行下面程序,观察运行结果并分析原因分析原因。#include int main(void)int i,j;int a23=0;for(i=0;i=2;i+)/行下标越界行下标越界 for(j=0;j=3;j+)/列下标越界列下标越界 printf(%dt,aij);printf(n);return 0;7.3.2 二维数组的下标越界实例分析二维数组的下标越界实例分析n【例例7.5】二维数组下标越界访问的另一个程序示例。请运行下面程序,观察运行二维数组下标越界访问的另一个程序示例。请运行下面程序,观察运行结果并分析原因结果并分析原因。#include int main(void)int i,j;int a23=0;a10=4;for(i=0;i2;i+)for(j=0;j3;j+)printf(%dt,aij);printf(n);a03=5;/a03与与a10实际是同一个元素实际是同一个元素 for(i=0;i2;i+)for(j=0;j3;j+)printf(%dt,aij);printf(n);return 0;7.4 安全编码规范安全编码规范n在使用数组时,需要注意以下安全编码规范:在使用数组时,需要注意以下安全编码规范:(1)外部数据作为数组索引时必须确保在数组大小范围内。)外部数据作为数组索引时必须确保在数组大小范围内。(2)不要使用变长数组类型,若使用,则必须确保变长数组的大小在有效范围)不要使用变长数组类型,若使用,则必须确保变长数组的大小在有效范围内。内。(3)声明一个带有外部链接的数组时,必须显式指定它的大小。)声明一个带有外部链接的数组时,必须显式指定它的大小。(4)若无需修改数组元素的值,则应使用)若无需修改数组元素的值,则应使用const对数组类型的函数形参进行限对数组类型的函数形参进行限定。定。本章知识树本章知识树Q&A

    注意事项

    本文(第7章 用数组保存数据.ppt)为本站会员(暗伤)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开