C语言程序设计第四谭浩强.pptx
《C语言程序设计第四谭浩强.pptx》由会员分享,可在线阅读,更多相关《C语言程序设计第四谭浩强.pptx(55页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、习题5.4 统计一串英文字符中的大写字母、小写字母、数字、空格、其他字符的个数。问题扩展:输入一句英文,统计并输出每个字母使用的频数和频率第1页/共55页例5.8 Fibonacci数列问题:如何使用数学中的下标变量x1,x2,xn,形式表示一组相关的数据第2页/共55页例5.8 Fibonacci数列用数组解决 int i,fibo40;fibo0=fibo1=1;for(i=2;i40;i+)fiboi=fiboi-1+fiboi-2;for(i=0;i40;i+)printf(%10d,fiboi);if(i+1)%5=0)printf(n);第3页/共55页数组的概念有序数据的集合用同
2、一名称表示一组相同类型的相关数据用下标区分各个元素相当于数学中的下标变量,如 x1,x2,.a11,a12,.,a21,.第4页/共55页一维数组的定义定义:类型说明 数组名常量 定义一个数组的名称、类型、元素个数第5页/共55页一维数组的定义short int a3;说明:不能动态定义数组,见P.143说明(3)200020022004a0a1a2存储地址数组元素存储单元0000000000000110a2=6;第6页/共55页一维数组元素的引用 定义后的数组可分别引用各个元素 数组名下标 下标是整型常量或表达式注意:引用的是数组中的元素,而不是整个数组;C编译系统对下标越界的引用不给出错误
3、提示第7页/共55页一维数组的定义和引用-阅读程序int a5,i;for(i=0;i=3;i+)ai=2*i;a4=100;for(i=0;i=4;i+)printf(a%d=%dn,i,ai);ai=20;printf(a%d=%dn,i,ai);第8页/共55页一维数组的定义和初始化 int a10=2,5,3,1,8,6,9,4,7,1;定义整型数组a并给a0-a9赋初值第9页/共55页一维数组的定义和初始化 int a10=2,5,3,1,8,6;定义整型数组a并给a0-a5赋初值,其余元素值为0第10页/共55页一维数组的定义和初始化int a5,i;for(i=0;i5;i+)p
4、rintf(%dn,ai);第11页/共55页一维数组的定义、初始化和引用例:显示Fibonacci数列前40项。int i,fibo40=1,1;for(i=2;i40;i+)fiboi=fiboi-1+fiboi-2;for(i=0;i40;i+)printf(%10d,fiboi);if(i+1)%5=0)printf(n);第12页/共55页一维数组的定义和引用例:求一维数组最大值及下标int a10=23,41,56,21,15,67,32,44,16,31;int i,max;max=a0;for(i=0;imax)max=ai;printf(最大值:%dn,max);第13页/共
5、55页一维数组的定义和初始化 int a=2,5,3,1,8,6;定义整型数组a并赋初值,该数组包含6个元素a0-a5第14页/共55页一维数组的定义和引用例:在一维数组中查找给定数据及下标int a10=23,41,56,21,15,67,32,44,16,31;int i,key,index=-1;printf(输入要查找的值:);scanf(%d,&key);for(i=0;i10;i+)if(key=ai)index=i;break;if(index=-1)printf(找不到n);else printf(找到,下标是:%dn,index);这是顺序查找法。还有一种常用的折半查找法,数
6、据量大且有序时使用,效率更高。第15页/共55页折半查找 int a11=5,13,19,21,37,56,64,75,80,88,92;int index=-1,key,low,high,middle;scanf(%d,&key);low=0;high=10;while(lowamiddle)low=middle+1;else high=middle-1;if(index!=-1)printf(Index:%d,index);else printf(Not found!);第16页/共55页一维数组的定义和引用例:排序算法算法演示冒泡排序选择排序插入排序快速排序第17页/共55页 基本思路:
7、依次将数组中相邻两元基本思路:依次将数组中相邻两元素比较,并按要求的顺序交换,从而素比较,并按要求的顺序交换,从而将最大将最大/最小的数推至最前或最后;对最小的数推至最前或最后;对余下的数重复上述步骤,最终获得所余下的数重复上述步骤,最终获得所需的顺序需的顺序冒泡排序第18页/共55页对数组元素对数组元素a0-a5升序排序升序排序比较比较a5和和a4,若顺序不符则交换;,若顺序不符则交换;比较比较a4和和a3,若顺序不符则交换;,若顺序不符则交换;比较比较a3和和a2,若顺序不符则交换;,若顺序不符则交换;比较比较a2和和a1,若顺序不符则交换;,若顺序不符则交换;比较比较a1和和a0,若顺序
8、不符则交换。,若顺序不符则交换。冒泡排序第19页/共55页=结果:最小的数被换到了结果:最小的数被换到了a0中。中。=对对a1-a5重复上述步骤,将其中最重复上述步骤,将其中最小的数换到小的数换到a1中。中。=重复上述步骤直至完成排序。重复上述步骤直至完成排序。冒泡排序第20页/共55页冒泡排序 int a6,i,j,t;for(i=0;i6;i+)scanf(%d,&ai);printf(n);for(i=1;i=i;j-)if(aj=aj-1)t=aj;aj=aj-1;aj-1=t;for(i=0;i6;i+)printf(%dn,ai);第21页/共55页 基本思路:在一列数中找到最小基
9、本思路:在一列数中找到最小/最最大值,与指定位置的数交换;对余下大值,与指定位置的数交换;对余下的数重复上述步骤,最终获得所需的的数重复上述步骤,最终获得所需的顺序。顺序。选择排序第22页/共55页对数组元素a0-a5升序排序找找a0至至a5的最小值,与的最小值,与a0交换其值交换其值找找a1至至a5的最小值,与的最小值,与a1交换其值交换其值找找a2至至a5的最小值,与的最小值,与a2交换其值交换其值找找a3至至a5的最小值,与的最小值,与a3交换其值交换其值找找a4至至a5的最小值,与的最小值,与a4交换其值交换其值选择排序第23页/共55页for(i=0;i5;i+)imin=i;min
10、=ai;/*求ai之后元素的最小值*/for(j=i+1;j=5;j+)if(ajmin)min=aj;/*变量min记录最小值*/imin=j;/*变量imin记录最小值的下标*/temp=ai;ai=aimin;aimin=temp;/*最小值与ai交换*/选择排序第24页/共55页选择排序for(i=0;i5;i+)imin=i;for(j=i+1;j=5;j+)if(ajaimin)imin=j;/*只记录最小值的下标imin,最小值就是aimin*/if(imin!=i)t=ai;ai=aimin;aimax=t;/*当imin=i时无需交换*/对选择排序法进行改进第25页/共55页
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 第四 谭浩强
限制150内