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

    工学C语言程序设计.pptx

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

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

    工学C语言程序设计.pptx

    会计学1工学工学C语言程序设计语言程序设计本章学习内容本章学习内容 对数组名特殊含义的理解对数组名特殊含义的理解 数组类型,数组的定义和初始化数组类型,数组的定义和初始化 向函数传递一维数组和二维数组向函数传递一维数组和二维数组 排序、查找、求最大最小值等常用算法排序、查找、求最大最小值等常用算法 第1页/共49页为什么使用数组为什么使用数组(Array)?【例8.1】要读入10人的成绩,然后求平均成绩 需定义10个不同名整型变量,需要使用多个scanf()int score1,score2,score10;int score1,score2,score10;scanf(%d,&score1);scanf(%d,&score1);scanf(%d,&score2);scanf(%d,&score2);.而用数组,可共用一个scanf()并利用循环语句读取 int score10,i;int score10,i;for(i=0;i10;i+)for(i=0;i10;i+)scanf(%d,&scorei);scanf(%d,&scorei);保存大保存大量同类量同类型的相型的相关数据关数据第2页/共49页8.1一维数组的定义和初始化一维数组的定义和初始化 一维数组的定义 存储类型存储类型 数据类型数据类型 数组名数组名 整数整数1 1 整数整数2 2 整数整数n;n;a9a8a7 a1a0数组首地址数组首地址intint a10;a10;定义一个有定义一个有定义一个有定义一个有1010个个个个intint型元素的数组型元素的数组型元素的数组型元素的数组 系统在内存分配连续的系统在内存分配连续的系统在内存分配连续的系统在内存分配连续的1010个个个个intint空间给此数空间给此数空间给此数空间给此数组组组组直接对直接对直接对直接对a a a a的访问,就是访问此数组的首地址的访问,就是访问此数组的首地址的访问,就是访问此数组的首地址的访问,就是访问此数组的首地址基类型基类型下标从下标从0开始开始第3页/共49页8.1一维数组的定义和初始化一维数组的定义和初始化a9a8a7 a1a0intint a10;a10;数组大小必须是值为正的常量,不能为变量数组大小必须是值为正的常量,不能为变量数组大小必须是值为正的常量,不能为变量数组大小必须是值为正的常量,不能为变量 一旦定义,不能改变大小一旦定义,不能改变大小一旦定义,不能改变大小一旦定义,不能改变大小数组大小最好用宏来定义,以适应未来可能的变化数组大小最好用宏来定义,以适应未来可能的变化数组大小最好用宏来定义,以适应未来可能的变化数组大小最好用宏来定义,以适应未来可能的变化#define#define SIZESIZE 10 10 intint a aSIZESIZE;一维数组的定义一维数组的定义一维数组的定义一维数组的定义 存储类型存储类型存储类型存储类型 数据类型数据类型数据类型数据类型 数组名数组名数组名数组名 整数整数整数整数1 1 1 1 整数整数整数整数2 2 2 2 整数整数整数整数n;n;n;n;第4页/共49页8.1一维数组的定义和初始化一维数组的定义和初始化 数组定义后的初值仍然是随机数数组定义后的初值仍然是随机数 一般需要我们来初始化一般需要我们来初始化 int a5=12,34,56,78,9;int a5=0;int a=11,22,33,44,55;第5页/共49页8.1一维数组的定义和初始化一维数组的定义和初始化 数组的引用数组的引用 数组名 下标 数组下标(index)都是从0 0开始 使用a0、a1、a2、a9这样的形式访问每个元素 下标既可是常量,也可是整型表达式,允许快速随机访问,如ai 可以像使用普通变量一样使用它们可以像使用普通变量一样使用它们第6页/共49页如何使两个数组的值相等?如何使两个数组的值相等?main()int a4=1,2,3,4,b4;b=a;解决方法解决方法方法方法1:1:逐个元素赋值逐个元素赋值 b0=a0;b1=a1;b2=a2;b3=a3;方法方法2:2:通过循环赋值通过循环赋值 int i;for(i=0;i4;i+)bi=ai;原因原因:数组名表示数组的首地址数组名表示数组的首地址,其值不可改变其值不可改变!第7页/共49页8.1一维数组的定义和初始化一维数组的定义和初始化【例8.2】编程实现显示用户输入的月份(不包括闰年的月份)拥有的天数 第8页/共49页8.1一维数组的定义和初始化一维数组的定义和初始化 下标越界是下标越界是大忌大忌!编译程序不检查是否越界编译程序不检查是否越界 下标越界,将访问数组以外的空间下标越界,将访问数组以外的空间 那里的数据是未知的,不受我们掌控,可能带那里的数据是未知的,不受我们掌控,可能带来严重后果来严重后果第9页/共49页bb00bb11bb22bb33bb44bb55bb66bb77bb88bb99c ca a【例例例例8.38.3】当下标值小于当下标值小于当下标值小于当下标值小于0 0或超过数组长度时或超过数组长度时或超过数组长度时或超过数组长度时 会出现什么情况?会出现什么情况?会出现什么情况?会出现什么情况?运行程序或单步执行观察变量变化情况可以看运行程序或单步执行观察变量变化情况可以看到,变量到,变量c c和和a a的值因数组越界而被悄悄破坏了的值因数组越界而被悄悄破坏了12345612078910114 40 04 44 44 48 84 4c c5 50 05 54 45 58 85 5c c6 60 06 64 46 68 86 6c c第10页/共49页8.2二维数组的定义和初始化二维数组的定义和初始化 一维数组一维数组 用一个下标确定各元素在数组中的顺序用一个下标确定各元素在数组中的顺序 可用排列成一行的元素组来表示可用排列成一行的元素组来表示 如如 int a5;int a5;二维数组二维数组 用两个下标确定各元素在数组中的顺序用两个下标确定各元素在数组中的顺序 可用排列成可用排列成i i行,行,j j列的元素组来表示列的元素组来表示 如如 int b23;int b23;n n维数组维数组 用用n n个下标来确定各元素在数组中的顺序个下标来确定各元素在数组中的顺序 如如 int c324;int c324;n3n3时,维数组无法在平面上表示其各元素的位置时,维数组无法在平面上表示其各元素的位置a0a0a1a1a2a2a3a3a4a4b00b00b01b01b02b02b10b10b11b11b12b12第11页/共49页【例例】以下程序的运行结果是什么?以下程序的运行结果是什么?int main()int main()int a3=1,2,3,4,5,6,0;int a3=1,2,3,4,5,6,0;printf(%d,%d,%dn,a11,a21,a31);printf(%d,%d,%dn,a11,a21,a31);return 0;return 0;1 2 34 5 06 0 00 0 0结果:结果:5,0,0【例例】若若int a 3=1,2,3,4,5,6,7,则则a数组的第一维大小是多少?数组的第一维大小是多少?1 2 34 5 67 0 0二维数组的初始化二维数组的初始化第12页/共49页数组的数据类型和存储类型数组的数据类型和存储类型 根据数组的根据数组的数据类型数据类型,为每一元素安排相同长度的存储单元,为每一元素安排相同长度的存储单元 根据数组的根据数组的存储类型存储类型,将其安排在内存的动态存储区、静态,将其安排在内存的动态存储区、静态存储区或寄存器区存储区或寄存器区 用用sizeofsizeof(a)(a)来获得数组来获得数组a a所占字节数所占字节数shortshort第13页/共49页short int a23;a0a1a10 a11a12a00 a01a02存放顺序:存放顺序:存放顺序:存放顺序:按行存放按行存放按行存放按行存放先顺序存放第先顺序存放第先顺序存放第先顺序存放第0 0 0 0行元素,再存放第行元素,再存放第行元素,再存放第行元素,再存放第1 1 1 1行元素行元素行元素行元素a00a01a02a10a11a12需知道数组每行列数才能从起始地址开始正确读出数组元素需知道数组每行列数才能从起始地址开始正确读出数组元素二维数组的存储结构二维数组的存储结构二维数组的存储结构二维数组的存储结构第14页/共49页二维数组实例二维数组实例 【例例8.48.4】从键盘输入某年某月(包括闰年),编程输出该年从键盘输入某年某月(包括闰年),编程输出该年的该月拥有的天数的该月拥有的天数第15页/共49页8.3向函数传递一维数组向函数传递一维数组 传递整个数组给另一个函数,可将数组的首地址作为参数传过去 用用数组名数组名作函数参数作函数参数 只复制一个地址只复制一个地址自然自然比复制全部数据效率比复制全部数据效率高高 由于首地址相同,故由于首地址相同,故实参数组与形参数组实参数组与形参数组占用同一段内存占用同一段内存 在该函数内,不仅可在该函数内,不仅可以以读读这个数组的元素,这个数组的元素,还可以还可以修改修改它们它们第16页/共49页 简单变量和数组作函数参数简单变量和数组作函数参数的区别的区别第17页/共49页【例例8.5】计算平均分计算平均分 计数控制的循环第18页/共49页【例例8.5】计算平均分计算平均分 计数控制的循环第19页/共49页【例例例例8.68.6】计算平均分计算平均分计算平均分计算平均分当输入负值时,表示输入结束当输入负值时,表示输入结束当输入负值时,表示输入结束当输入负值时,表示输入结束 标记控制的循环负值作为输入结束标记第20页/共49页【例例例例8.68.6】计算平均分计算平均分计算平均分计算平均分当输入负值时,表示输入结束当输入负值时,表示输入结束当输入负值时,表示输入结束当输入负值时,表示输入结束 标记控制的循环负值作为输入结束标记第21页/共49页【例例8.7】计算最高分计算最高分#include#define N 40int ReadScore(int score);int FindMax(int score,int n);int main()int scoreN,max,n;n=ReadScore(score);printf(Total students are%dn,n);max=FindMax(score,n);printf(The highest score is%dn,max);return 0;第22页/共49页max(i=0)max(i=2)max(i=3)计算最大值算法计算最大值算法计算最大值算法计算最大值算法第23页/共49页 假设其中的一个学生成绩为最高假设其中的一个学生成绩为最高maxScore=score0;maxScore=score0;对所有学生成绩进行比较,即对所有学生成绩进行比较,即 for(i=1;in;i+)for(i=1;i maxScorescorei maxScore则修改则修改maxScoremaxScore值为值为scoreiscorei 打印最高分打印最高分maxScoremaxScore【例例8.7】计算最高分计算最高分第24页/共49页【例例8.7】计算最高分计算最高分第25页/共49页8.4排序和查找排序和查找 排序(排序(SortingSorting)算法)算法 交换法排序交换法排序 选择法排序选择法排序第26页/共49页交换法交换法排序排序第27页/共49页交换法交换法排序排序第28页/共49页【例例8.8】交换法从高到低排序交换法从高到低排序交换法交换法排序排序 forfor(i=0;in-1;i+)(i=0;in-1;i+)forfor(j=(j=i+1i+1;jn;j+);j scorei)(scorej scorei)交换成绩scorej和scorei 第29页/共49页如何实现两数交换?如何实现两数交换?temp=scorej;temp=scorej;scorej=scorei;scorej=scorei;scorei=temp;scorei=temp;tempscorejscorei?7050705070第30页/共49页【例例8.8】交换法从高到低排序交换法从高到低排序void DataSort(int score,int n)/*交换法排序交换法排序*/int i,j,temp;for(i=0;in-1;i+)for(j=i+1;j scorei)/*从高到低从高到低*/temp=scorej;scorej=scorei;scorei=temp;第31页/共49页选择法选择法排序排序k=1k=2k=0k=1第32页/共49页选择法选择法排序排序k=3k=4k=3k=4第33页/共49页选择法排序选择法排序选择法排序 forfor(i=0;in-1;i+)(i=0;in-1;i+)k=i;k=i;forfor(j=i+1j=i+1;jn;j+);j score scorek k)记录此轮比较中最高分的元素下标记录此轮比较中最高分的元素下标 k=jk=j;若若k k中记录的最大数不在位置中记录的最大数不在位置i i,则,则 交换交换成绩成绩scorescorek k 和和scorescorei i,交换交换学号学号numknumk和和numinumi;第34页/共49页void DataSort(int score,long num,int n)/*选择法选择法*/int i,j,k,temp1;long temp2;for(i=0;in-1;i+)k=i;for(j=i+1;j scorek)k=j;/*记录最大数下标位置记录最大数下标位置*/if(k!=i)/*若最大数不在下标位置若最大数不在下标位置i*/temp1=scorek;scorek=scorei;scorei=temp1;temp2=numk;numk=numi;numi=temp2;第35页/共49页【例例8.8】成绩从高到低顺序成绩从高到低顺序第36页/共49页8.4排序和查找排序和查找 查找(查找(SearchingSearching)算法)算法 顺序查找顺序查找 折半查找折半查找第37页/共49页【例例8.10】顺序查找学号顺序查找学号intint LinSearch(LinSearch(longlong num,num,longlong x,x,intint n)n)intint i;i;forfor(i=0;in;i+)(i=0;in;i+)ifif(numi=x)(numi=x)return return(i);(i);returnreturn(-1);(-1);哈,找到了!哈,找到了!事先不必排序事先不必排序第38页/共49页【例例8.11】折半查找学号折半查找学号哈,找到了!哈,找到了!按升序排序按升序排序10122 10124 10126 10128 1013010122 10124 10126 10128 10130第39页/共49页【例例8.11】折半查找学号折半查找学号唉,没找到!唉,没找到!10122 10124 10126 10128 1013010122 10124 10126 10128 10130第40页/共49页intint BinSearch(BinSearch(longlong numnum,longlong x,x,intint n)n)intint low,high,mid;low,high,mid;low=0;low=0;high=n-1;high=n-1;whilewhile(low=high)(low nummid)(x nummid)low=mid+1;low=mid+1;elseelse ifif(x nummid)(x nummid)high=mid-1;high=mid-1;elseelse returnreturn(mid);(mid);returnreturn(-1);(-1);找到时返回找到时返回下标位置下标位置找不到时找不到时 返回返回-1-1若未按学号排序,若未按学号排序,则如何修改程序?则如何修改程序?第41页/共49页void DataSort(int score,long num,int n)/*选择法选择法*/int i,j,k,temp1;long temp2;for(i=0;in-1;i+)k=i;for(j=i+1;jn;j+)if(numj numk)k=j;/*记录最大数下标位置记录最大数下标位置*/if(k!=i)/*若最大数不在下标位置若最大数不在下标位置i*/temp1=scorek;scorek=scorei;scorei=temp1;temp2=numk;numk=numi;numi=temp2;按学号由小按学号由小到大排序到大排序第42页/共49页8.5向函数传递二维数组向函数传递二维数组a00a01a02a10a11a12a00a01a02a10a11a12实际传送的是数组第一个元素的地址实际传送的是数组第一个元素的地址short a23;short a23;第43页/共49页8.5向函数传递二维数组向函数传递二维数组 在声明二维数组形参时,不能省略数组第二在声明二维数组形参时,不能省略数组第二维的长度(列数),为什么?维的长度(列数),为什么?想想数组在内存中是如何分布的?想想数组在内存中是如何分布的?元素元素aijaij在数组在数组a a中的位置是:中的位置是:i*N+j 元素地址:元素地址:首地址首地址 +偏移量偏移量a00a01a02a10a11a12a00a01a02a10a11a12实际传送的是数组第一个元素的地址实际传送的是数组第一个元素的地址short aMN;short aMN;偏移偏移1*3+2第44页/共49页例例8.12 计算每门计算每门课程课程的总分和平均分的总分和平均分voidvoid AverforCourseAverforCourse(intint scoreCOURSE_N,scoreCOURSE_N,intint sum,sum,floatfloat aver,aver,intint n)n)intint i,j;i,j;forfor(j=0;(j=0;jCOURSE_NjCOURSE_N;j+);j+)sumsumj j=0;=0;forfor(i=0;(i=0;inin;i+);i+)sumsumj j=sum=sumj j+scoreij;+scoreij;averaverj j=(float)sum=(float)sumj j/n n;可省略数组第一维的长度可省略数组第一维的长度不能省略第二维的长度不能省略第二维的长度第45页/共49页例例8.12 计算每门计算每门学生学生的总分和平均分的总分和平均分voidvoid AverforStudAverforStud(intint scoreCOURSE_N,scoreCOURSE_N,intint sum,sum,floatfloat aver,aver,intint n)n)intint i,j;i,j;forfor(i=0;(i=0;inin;i+);i+)sumsumi i=0;=0;forfor(j=0;(j=0;jCOURSE_NjCOURSE_N;j+);j+)sumsumi i=sum=sumi i+scoreij;+scoreij;averaveri i=(float)sum=(float)sumi i/COURSE_NCOURSE_N;第46页/共49页例例8.12计算每门的总分和平均分计算每门的总分和平均分第47页/共49页 Questions and answers第48页/共49页感谢您的观看。感谢您的观看。第49页/共49页

    注意事项

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

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




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

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

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

    收起
    展开