C语言程序设计第四版PPT_谭浩强

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

冒泡排序 对数组元素a[0]-a[5]升序排序 比较a[5]和a[4],若顺序不符则交换; 比较a[4]和a[3],若顺序不符则交换; 比较a[3]和a[2],若顺序不符则交换; 比较a[2]和a[1],若顺序不符则交换; 比较a[1]和a[0],若顺序不符则交换。
冒泡排序
=》结果:最小的数被换到了a[0]中。 =》对a[1]-a[5]重复上述步骤,将其中最 小的数换到a[1]中。 =》重复上述步骤直至完成排序。
选择排序
for (i=0;i<5;i++)
{ imin=i;min=a[i]; /*求a[i]之后元素的最小值*/
for (j=i+1;j<=5;j++)
if (a[j]<min)
{ min=a[j]; /*变量min记录最小值 */
imin=j;
/*变量imin记录最小值的下标 */
}
temp = a[i];
例:在一维数组中查找给定数据及下标
这是顺序查找法。 还有一种常用的折半 查找法,数据量大且 有序时使用,效率更 高。
折半查找
一维数组的定义和引用
例:排序算法
算法演示 •冒泡排序 •选择排序 •插入排序 •快速排序
冒泡排序
基本思路:依次将数组中相邻两元 素比较,并按要求的顺序交换,从而 将最大/最小的数推至最前或最后;对 余下的数重复上述步骤,最终获得所 需的顺序
一维数组的定义和初始化
一维数组的定义和初始化
一维数组的定义和初始化
int a[5],i; for(i=0;i<5;i++)
printf("%d\n",a[i]);
一维数组的定义、初始化和引用
例:显示Fibonacci数列前40项。
int i, fibo[40]={1,1}; for (i=2;i<40;i++)
if (imin!=i) { t=a[i];
a[i]=a[imin]; a[imax]=t; } /* 当imin=i时无需交换 */ }
二维数组的定义
类型说明 数组名[常量][常量] 功能:定义一个二维数组的名称、类
型、元素个数
二维数组的定义和存放
shorห้องสมุดไป่ตู้ int a[3]; a[2]=6;
存储单元
a[0]
a[1]
数组元素
a[2]
2000
2002
说明:不能动态定义数组,
见P.143说明(3)
2004
存储地址
一维数组元素的引用
定义后的数组可分别引用各个元素 数组名[下标]
下标是整型常量或表达式 注意:引用的是数组中的元素,而不
是整个数组;C编译系统对下标越界 的引用不给出错误提示
第6章 数组
课程内容
Ch1 创建一个C语言程序 Ch2 算法的重要性及表达 Ch3-5 基本程序结构, 数据及运算 Ch6 数组——成批数据如何处理? Ch7 函数——大型的程序如何划分? Ch8 指针——变量在内存的存储与访问 Ch9 结构体——较为复杂的数据结构 Ch10 文件——持久保存数据 补充 位运算
一维数组的定义和引用-阅读程序
int a[5],i; for (i=0;i<=3;i++) a[i]=2*i; a[4]=100; for (i=0;i<=4;i++)
printf("a[%d]=%d\n",i,a[i]); a[i]=20; printf("a[%d]=%d\n",i,a[i]);
习题5.4 统计一串英文字符中的 大写字母、小写字母、数字、空 格、其他字符的个数。
问题扩展:输入一句英文,统计并 输出每个字母使用的频数和频率
例5.8 Fibonacci数列
问题:如何使用数学中的下标变量 x1,x2,…xn,…形式表示一组相关的数 据
例5.8 Fibonacci数列用数组解决
for (i=0;i<6;i++) printf("%d\n",a[i]);
选择排序
基本思路:在一列数中找到最小/最 大值,与指定位置的数交换;对余下 的数重复上述步骤,最终获得所需的 顺序。
选择排序
对数组元素a[0]-a[5]升序排序 找a[0]至a[5]的最小值,与a[0]交换其值 找a[1]至a[5]的最小值,与a[1]交换其值 找a[2]至a[5]的最小值,与a[2]交换其值 找a[3]至a[5]的最小值,与a[3]交换其值 找a[4]至a[5]的最小值,与a[4]交换其值
int i,fibo[40]; fibo[0]=fibo[1]=1; for (i=2;i<40;i++)
fibo[i]=fibo[i-1]+fibo[i-2]; for (i=0;i<40;i++) { printf("%10d",fibo[i]);
if ((i+1)%5==0) printf("\n"); }
a[i] = a[imin];
a[imin] = temp; /*最小值与a[i]交换*/
}
选择排序
对选择排序法进行改进
for (i=0;i<5;i++) { imin=i;
for (j=i+1;j<=5;j++) if (a[j]<a[imin]) imin=j;
/*只记录最小值的下标imin,最小值就是a[imin] */
数组的概念
有序数据的集合 用同一名称表示一组相同类型的相
关数据 用下标区分各个元素 相当于数学中的下标变量,如
x1 , x2 , ... a11 , a12 , ... , a21 , ...
一维数组的定义
定义: 类型说明 数组名[常量] 定义一个数组的名称、类型、元素
个数
一维数组的定义
fibo[i]=fibo[i-1]+fibo[i-2]; for (i=0;i<40;i++) {
printf("%10d",fibo[i]); if ((i+1)%5==0) printf("\n"); }
一维数组的定义和引用 例:求一维数组最大值及下标
一维数组的定义和初始化
一维数组的定义和引用
冒泡排序
int a[6],i,j,t; for (i=0;i<6;i++)
scanf("%d",&a[i]); printf("\n");
for (i=1;i<6;i++) for (j=5;j>=i;j--) if (a[j]<=a[j-1]) { t=a[j]; a[j]=a[j-1]; a[j-1]=t; }
相关文档
最新文档