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

    C语言程序设计教程一维数组应用.pptx

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

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

    C语言程序设计教程一维数组应用.pptx

    根据以上信息,编译器决定分配多大的存储空间给该数组使用。例如:int a10;这里a是数组的名称,方括号中的10表明数组一共有10个元素,下标应该从0开始到9结束;类型名int限定数组a的每个元素中只能存放整型数。根据这一定义,系统将为数组a开辟能容纳10个整型数的连续存储单元。第2页/共50页第1页/共50页一维数组定义语句的语法形式为:类型名 数组名常量表达式,;说明(1)“类型名”决定了数组中可以存放的数据的类型。(2)“数组名”和变量名相同,必须遵循标识符的命名规则。第3页/共50页第2页/共50页(3)“常量表达式”代表的是数组元素的个数,也就是数组的长度。它必须是无符号整型常量,不允许是0、负数和浮点数,也不允许是变量。(4)C语言中规定:每个数组第一个元素的下标固定为0,称为下标的下界;最后一个元素的下标为元素个数减1,称为下标的上界。第4页/共50页第3页/共50页(5)数组的定义可以和普通变量的定义出现在同一个定义语句中。例如:float k,x5,y20;以上语句在定义单精度变量k的同时,定义了两个单精度型的一维数组x和y。数组x共有5个元素,下标的使用范围是04;数组y共有20个元素,下标的使用范围是019。第5页/共50页第4页/共50页8.1.3一维数组元素的引用数组一经建立,在内存中就占据着一串连续的存储单元。8.1.4一维数组的初始化第6页/共50页第5页/共50页8.2 一维数组的简单应用一维数组的简单应用例8.1 编写程序,在数组x中存储自然数120,然后按以下要求输出数据:按逆序分两行输出元素值。在一行上输出所有下标为偶数的数组元素。在一行上输出所有值为偶数的数组元素。问题分析第7页/共50页第6页/共50页本例题涉及的是对数组元素进行操作的基本算法。对一维数组各元素的访问,通常是在单重循环中实现。通过循环变量与循环体内语句的配合,可以灵活地、有选择地访问指定元素。读者在阅读以下程序时,应理解数组元素下标与数组元素值的区别;掌握如何用循环变量控制数组元素的下标;以及如何在连续输出的过程中控制输出换行。第8页/共50页第7页/共50页源程序如下:main()int x20,i;for(i=0;i=0;i)/*控制从数组尾部开始输出*/第9页/共50页第8页/共50页 printf(%3d,xi);if(i%10=0)printf(n);/*控制每输出10个元素后换行*/printf(输出下标为偶数的元素:n);for(i=2;i20;i+=2)printf(%3d,xi);printf(n);第10页/共50页第9页/共50页 printf(输出值为偶数的元素:n);for(i=0;i20;i+)if(xi%2=0)printf(%3d,xi);printf(n);第11页/共50页第10页/共50页程序的运行结果如下:分两行逆序输出:20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1输出下标为偶数的元素:3 5 7 9 11 13 15 17 19输出值为偶数的元素:2 4 6 8 10 12 14 16 18 20第12页/共50页第11页/共50页8.3 利用地址和指针访问数组元素利用地址和指针访问数组元素8.3.1数组名、元素地址及指针的关系通过前面的知识积累和本节的进一步介绍,读者应该建立起如下概念。(1)数组是一种构造数据类型。数组名代表着这个数组所占连续存储空间的起始地址。第13页/共50页第12页/共50页这个地址是在定义数组时由系统所分配的,不可以人为改变。因此,可以认为数组名是一个地址常量。如有定义:int x5,y5,m=3;则语句:x=&m;x=y;y+;第14页/共50页第13页/共50页都是错误的。数组名x和y作为地址常量可以使用,不可以重新赋值。而表达式:x+1、y+2则是合法的。它们表示以数组名为首地址增加一个偏移量后的地址值。第15页/共50页第14页/共50页(2)就整体而言,每个数组元素都是数组这个集合中的一分子,由于数组所占地址空间是连续的,通过数组名这个首地址就可以找到数组中的所有元素;就个体而言,每个数组元素都可以看作是一个带下标的变量,它完全可以像普通变量一样进行求地址运算。因此,用数组名表示的地址与数组元素的地址之间就有如下关系:x+1等价于&x1、y+2等价于&y2第16页/共50页第15页/共50页(3)指针变量是用来存放地址值的,它可以通过加、减一个整数在一串连续的存储单元中移动,并可以利用间接访问运算符得到指针所指单元的内容。因此,数组名、数组元素和指针变量之间可以通过数组元素的地址建立起关系。若有如下定义:int a6=1,2,3,4,5,6,*p;则语句:p=a;等价于 p=&a0;第17页/共50页第16页/共50页都使指针变量p中存放了数组a的首地址,即p指向了数组a的第一个元素a0。在这一前提下,表达式:*p 等价于*a都代表数组的第一个元素a0。而:*(p+2)等价于*(a+2)都代表数组的第三个元素a2。第18页/共50页第17页/共50页语句:p+;表示将指针p移动一个位置,指向数组a的第二个元素a1。但语句:a+;则是非法的,因为a是常量。第19页/共50页第18页/共50页由此可见:数组名是地址常量;指针是存放地址的变量,它们都可以用来描述数组元素的地址,进而可以得到元素的内容。所以,我们不仅可以直接用带下标的变量形式来访问数组元素,还可以通过数组的首地址(数组名)和指针来访问数组元素,从而大大地增加了数组使用的灵活性,但也同时增加了初学者全面掌握C语言的难度。第20页/共50页第19页/共50页8.3.2通过数组首地址访问数组元素设有如下定义:int x10,i;通过上一节的叙述已知:数组名是数组的首地址,从而有:第21页/共50页第20页/共50页 x+0 等价于&x0 x+1 等价于&x1 x+i 等价于&xi在得到地址后,可以通过间接访问运算符来引用地址所在的存储单元。因此有:第22页/共50页第21页/共50页*(x+0)或*x 等价于*&x0 即x0 *(x+1)等价于*&x1 即x1 *(x+i)等价于*&xi 即xi如果要利用数组首地址对x数组的所有元素逐个输入输出,则可由以下程序段实现:第23页/共50页第22页/共50页 for(i=0;i10;i+)scanf(%d,x+i);for(i=0;i10;i+)printf(%3d,*(x+i);注意:在上面的程序段中,我们只是使用了代表数组首地址的数组名x,并没有(也不允许)改变它的值。第24页/共50页第23页/共50页8.3.3通过指针访问数组元素通过地址常量数组名可以访问数组元素,显然,通过存放地址的变量指针也可以访问数组元素,而且更具灵活性。若有如下定义:int x10,*p,i;在执行了语句:p=x;或p=&x0;后,指针p中存放的是数组x的首地址。第25页/共50页第24页/共50页如果不移动指针,也可以采用首地址+位移量的形式逐个输入输出数组元素:p=x;for(i=0;i10;i+)scanf(%d,p+i);for(i=0;i10;i+)printf(%3d,*(p+i);第26页/共50页第25页/共50页在上一小节的讨论中,我们曾经得出结论:*(x+i)等价于xi。细心的读者可能会问:在这里*(p+i)是否也等价于pi呢?确实如此。事实上方括号 也是一种运算符。概括起来,如果有如下定义和语句:int x10,*p,i;p=x;第27页/共50页第26页/共50页则表示数组x中的元素可以有以下四种形式:xi *(x+i)*(p+i)pi当然,这里的i必须满足条件:0i10,否则下标就越界了。与数组名不同,指针是变量,它可以通过赋值语句移动位置。因此可以采用以下方法,通过顺序移动指针来逐个输入输出数组元素:第28页/共50页第27页/共50页p=x;for(i=0;i10;i+)scanf(%d,p);p+;p=x;for(i=0;i10;i+)printf(%3d,*p);p+;注意:由于在输入时移动了指针,输出前还应通过赋值操作使指针再次指向数组的第一个元素。第29页/共50页第28页/共50页8.4 与一维数组有关的参数传递与一维数组有关的参数传递8.4.1数组元素作实参数组元素就是带下标的变量。所以,数组元素作实参与简单变量作实参一样,对应的形参应该是同类型的简单变量。第30页/共50页第29页/共50页例8.3 编写程序:利用随机函数产生6个50以内的整数存入数组a中,然后调用自定义函数isodd依次判断数组a中的元素是否为奇数。程序如下#include stdlib.hint isodd(int x)/*形参是与实参相同类型的普通变量x*/if(x%2=1)return 1;else return 0;第31页/共50页第30页/共50页main()int a6,i;for(i=0;i6;i+)ai=rand()%50;printf(%4d,ai);printf(n);第32页/共50页第31页/共50页 for(i=0;i6;i+)if(isodd(ai)/*数组元素ai作实参*/printf(a%d is odd.n,i);else printf(a%d is not odd.n,i);第33页/共50页第32页/共50页运行结果如下:46 30 32 40 6 17a0 is not odd.a1 is not odd.a2 is not odd.a3 is not odd.a4 is not odd.a5 is odd.第34页/共50页第33页/共50页8.4.2数组名作实参数组名作为实参传递时,传送给形参的是数组的首地址。因此,对应的形参必须是基类型相同的指针变量。例8.4 编写程序:利用自定义函数ArrIn和ArrOut实现数组元素的输入和输出。第35页/共50页第34页/共50页源程序如下:#define N 100void ArrIn(int*x,int n)/*对应的形参x是指针变量*/int i;for(i=0;in;i+)scanf(%d,x+i);第36页/共50页第35页/共50页void ArrOut(int*x,int n)int i;for(i=0;in;i+)printf(%4d,*(x+i);if(i+1)%5=0)printf(n);/*控制输出5个元素后换行*/第37页/共50页第36页/共50页main()int aN;ArrIn(a,20);/*数组名a作实参*/ArrOut(a,10);第38页/共50页第37页/共50页主函数中调用ArrIn和ArrOut函数时,都将数组名a作为实参传递给了形参指针x,使x得到了主函数中所定义的数组a的首地址,仍旧遵循了“按值”传递这惟一的参数传递原则。接下来,在自定义函数中,通过指针x所操作的就是主函数中的数组a。第39页/共50页第38页/共50页另外,在主函数中定义的数组a一共可以容纳100个整数,但在调用ArrIn函数时,将常量20传给了形参n,因此只给数组的前20个元素输入了数据。调用ArrOut函数时,则只输出了数组a的前10个元素。第40页/共50页第39页/共50页需要说明的是:当数组名作为实参时,对应的形参应该是指针,但还允许其他表示形式。以ArrIn函数为例,对于调用语句:ArrIn(a,20);,相应的函数首部允许是以下三种形式:void ArrIn(int*x,int n)void ArrIn(int x,int n)void ArrIn(int xN,int n)无论表示形式如何,C编译器都将x按指针处理。第41页/共50页第40页/共50页8.4.3数组元素的地址作实参数组元素的地址作实参,与数组名作实参一样,传递的也是地址值,所以对应的形参也应当是基类型相同的指针变量。但这种方式带给了程序设计者更大的灵活度。我们在不改变例题8.4中自定义函数的前提下,通过传递数组元素的地址,可以实现对主函数中数组a的任意一段连续空间中数组元素的输入和输出。第42页/共50页第41页/共50页例如:#define N 100void ArrIn(int*x,int n)int i;for(i=0;in;i+)scanf(%d,x+i);第43页/共50页第42页/共50页main()int aN;ArrIn(&a10,10);/*调用函数为a10a19输入数据*/ArrIn(&a50,5);/*调用函数为a50a54输入数据*/第44页/共50页第43页/共50页结合主函数中的调用语句ArrIn(&a10,10);可以看出:(1)第1个实参&a10是数组元素a10的地址,将它对应传给函数ArrIn中的形参x,使x指向了数组元素a10,用来控制输入数据时存放的起始地址;第45页/共50页第44页/共50页(2)第2个实参10对应传递给了函数ArrIn的形参n,用来控制为10个元素输入数据;(3)在函数ArrIn中,由于指针变量x初始指向的是数组元素a10,所以当i=0时,scanf语句中的x+0就是a10的地址;当i=1时,scanf语句中的x+1就是a11的地址;从而实现为a10a19这10个元素输入数据的目的。第46页/共50页第45页/共50页8.5 一维数组操作中的常用算法介绍一维数组操作中的常用算法介绍8.5.1查找查找是数据处理中最基本且重要的操作之一。最常用的算法有“找最大(小)值”、“顺序查找”指定值和“二分法查找”指定值等。第47页/共50页第46页/共50页8.5.2插入插入是数组的基本操作之一。在实际应用中,有时要求“在某一数值前(或后)插入一个元素”;有时则需要“在有序表中插入一个元素,插入后仍保持表有序”。不论是哪一种情况,都首先要找到应插入的位置,这一操作可通过前面介绍的查找算法实现。因此,插入操作的关键应该是如何实现“在指定位置上插入一个元素”。第48页/共50页第47页/共50页8.5.3删除删除也是一维数组的基本操作之一。常见的应用有“删除值为x的元素”、“删除数组中值相同的元素(去偶)”等。和插入相似,删除也应先查找到待删元素的位置,下一步的关键就是“删除指定位置上的元素”。第49页/共50页第48页/共50页8.5.4排序排序是计算机程序设计中的一种重要操作,其功能是将一个无序的数据序列调整为有序。在计算机系统中,花在排序上的时间,在CPU的运行时间中占有很大比重,应用十分广泛,也因此而产生了很多比较成熟的算法。常见的有:比较交换法、冒泡法、选择法、插入法、希尔法以及快速排序等。第50页/共50页第49页/共50页感谢您的欣赏!第50页/共50页

    注意事项

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

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




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

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

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

    收起
    展开