《C语言程序设计教程》课件第6章
- 格式:pdf
- 大小:15.53 KB
- 文档页数:9
本文由792037130zd贡献 ppt文档可能在WAP端浏览体验不佳。
建议您优先选择TXT,或下载源文件到本机查看。
1 C 语言程序设计 第6章 数 组 第6章 数组 本章重点介绍 : 6.1 一维数组 6.2 二维数组 6.3 字符数组与字符串 2 2010-9-25 第6章 数组 3 一个人N门课的成绩怎样存储和处理? 一个人 门课的成绩怎样存储和处理? 门课的成绩怎样存储和处理 一个班N门课的成绩怎样存储和处理 门课的成绩怎样存储和处理? 一个班 门课的成绩怎样存储和处理?…… 这些数据的特点:具有相同的数据类型。
这些数据的特点:具有相同的数据类型。
为了方便地使用这些数据, 为了方便地使用这些数据,C语言提供了一 构造数据类型:数组。
种构造数据类型:数组。
例如:存储学生成绩用实型数组 例如:存储学生成绩用实型数组 score[5] 其中:score是数组名 该数组可以存放5个成绩, 是数组名。
其中:score是数组名。
该数组可以存放5个成绩, 分别用下标变量表示: 分别用下标变量表示: score[0],score[1],…score[4]。
score[0],score[1],…score[4]。
下标变量也称为数组元素。
也称为数组元素 下标变量也称为数组元素。
2010-9-25 6.1 一维数组 6.1.1 一维数组的定义 数组名[常量表达式 常量表达式]; 数据类型 数组名 常量表达式 例如: 例如: int a[10]; float score[5]; score[5]; “数据类型”: 是数组元素的数据类型。
数据类型” 是数组元素的数据类型。
“数组名”: 数组名”: 遵循C语言标识符规则 标识符规则。
遵循C语言标识符规则。
常量表达式” 表示数组中有多少个元素, “常量表达式”:表示数组中有多少个元素,即数 组的长度。
它可以是整型常量、 组的长度。
它可以是整型常量、整型常量表达式 或符号常量。
或符号常量。
4 2010-9-25 6.1.1 一维数组的定义(续) 一维数组的定义( 以下数组定义是正确的: 以下数组定义是正确的: #define N 10 …… float score1[N], score2[N]; int num[10+N]; char c[26]; 以下数组定义是不正确的: 以下数组定义是不正确的: int array(10); int n; float score[n]; double b['a'.. 'd']; char str[ ]; 5 2010-9-25 数组在内存的存放 数组下标从0开始。
数组下标从0开始。
一维数组的数组元素 低地址 在内存里按顺序存放。
按顺序存放 在内存里按顺序存放。
数组名代表数组的首 地址, score的值 地址,即score的值 与score[0] 的地址 值相同。
值相同。
高地址 score数组 6 91.5 34.5 67.5 72.0 84.0 score[0] score[1] score[2] score[3] score[4] 2010-9-25 6.1.2 数组元素的引用 格式: 格式: 7 数组名[下标表达式] 数组名[下标表达式] 例如: 例如:输入学生成绩 for(i=0;i<5 for(i=0;i<5;i++) scanf( %f" &score[i]); scanf("%f",&score[i]); 例如:fib[n]=fib[n-1]+fib[n-2]; 例如:fib[n]=fib[n-1]+fib[n下标表达式的值必须是整型表达式。
下标表达式的值必须是整型表达式。
的值必须是整型表达式 2010-9-25 6.1.2 数组元素的引用(续) 数组元素的引用( 说明: 说明: 下标从0开始 下界为0), 开始( ),数组的最大下标 ① 下标从 开始(下界为 ),数组的最大下标 上界)是数组长度减1。
(上界)是数组长度减 。
例如: 例如: int a[10]; scanf ("%d",&a[10]); /* 下标越界 */ C编译系统不做越界检查,如果引用的数组元素 编译系统不做越界检查, 编译系统不做越界检查 超出数组范围会破坏其他变量的值。
超出数组范围会破坏其他变量的值。
8 2010-9-25 6.1.2 数组元素的引用(续) 数组元素的引用( ② [ ]是下标运算符, 是下标运算符, 引用数组元素时, 引用数组元素时 数组元素 根据数组的首地址 根据数组的首地址 下标数 和下标数,计算出 该元素的实际地址, 该元素的实际地址, 取出该地址的内容 取出该地址的内容 进行操作。
进行操作。
如引用 score[2]: (1)计算 2000+2*4=2008 计算 (2)取出 取出2008的内容 取出 的内容 2000H 2004H 2008H 200CH 218CH 91.5 34.5 67.5 72.0 84.0 score[0] score[1] score[2] score[3] score[4] 9 2010-9-25 6.1.3 一维数组的初始化 初始化:在定义数组时给数组元素赋初值。
初始化:在定义数组时给数组元素赋初值。
1.在定义数组时,对全部数组元素赋初值 .在定义数组时, 例如: 例如:int a[5]={0,1,2,3,4}; 此时可以省略数组长度,例如: 此时可以省略数组长度,例如:int a[ ]={0,1,2,3,4}; 2.在定义数组时,对部分数组元素赋初值 .在定义数组时, 例如: 例如:int a[5]={1,2,3};系统为其余元素赋 0 。
系统为其余元素赋 3.当初值的个数多于数组元素的个数时,编译出错 .当初值的个数多于数组元素的个数时, 例如: 例如: int a[5]={0,1,2,3,4,5}; 10 2010-9-25 6.1.4 一维数组应用举例 11 【例6.1】将10个人的成绩输入计算机后按逆序显示。
6.1】 10个人的成绩输入计算机后按逆序显示。
个人的成绩输入计算机后按逆序显示 #define N 10 main( ) { int i;float score[N]; for (i=0; i<N; i++) scanf("%f",&score[i]); for (i=N-1; i>=0; i--) printf("%6.1f",score[i]); } 运行情况如下: 运行情况如下: 67 74 89 92 34 67 83 95 73 78 78.0 73.0 95.0 83.0 67.0 34.0 92.0 89.0 74.0 67.0 2010-9-25 12 2010-9-25 13 2010-9-25 【例6.4】冒泡法排序(从小到大)。
6.4】冒泡法排序(从小到大)。
以6个数:3、7、5、6、8、0为例。
个数: 为例。
第一趟排序情况如下: 第一趟排序情况如下: 375680 比较, 第一次 3和7比较,不交换 3 7 5 6 8 0 和 比较 比较, 357680 第二次 7和5比较,交换 和 比较 比较, 356780 第三次 7和6比较,交换 和 比较 比较, 第四次 7和8比较,不交换 3 5 6 7 8 0 和 比较 比较, 356708 第五次 8和0比较,交换 和 比较 在第一趟排序中, 个数比较了 个数比较了5次 在第一趟排序中,6个数比较了 次,把6个数中 个数中 的最大数8排在最后 排在最后。
的最大数 排在最后。
14 2010-9-25 冒泡法排序 (续) 第二趟排序情况如下: 第二趟排序情况如下: 356708 比较, 第一次 3和5比较,不交换 3 5 6 7 0 8 比较, 第二次 5和6比较,不交换 3 5 6 7 0 8 比较, 第三次 6和7比较,不交换 3 5 6 7 0 8 比较, 356078 第四次 7和0比较,交换 在第二趟排序中,最大数8不用参加比较,其余的5 在第二趟排序中,最大数8不用参加比较,其余的5个数比 较了4 把其中的最大数7排在最后,排出7 8。
较了4次,把其中的最大数7排在最后,排出7 8。
以此类推: 以此类推: 第三趟比较3 第三趟比较3次,排出 6 7 8 第四趟比较2 第四趟比较2次,排出 5 6 7 8 第五趟比较1 第五趟比较1次,排出 3 5 6 7 8 最后还剩下1个数0 不需再比较,得到排序结果: 最后还剩下1个数0,不需再比较,得到排序结果: 035678 15 2010-9-25 冒泡法排序 (续) 从上述过程可以看到: 个数要比较n 从上述过程可以看到:n个数要比较n-1趟,而 在第j趟比较中,要进行n 次两两比较。
在第j趟比较中,要进行n-j次两两比较。
for (i=0; i<N; i++) 输入a[i] 输入 for (j=1;j<N; j++) for (i=0; i<N-j; i++) a[i]>a[i+1] T a[i]与a[i+1]交换 与 交换 输出a[0] ̄a[N-1] 输出 冒泡法排序 16 F 2010-9-25 17 #define N 6 main( ) { int a[N]; 程序运行情况如下: 程序运行情况如下: 3 7 5 6 8 0 int i,j,t; 0 3 5 6 7 8 for (i=0; i<N; i++) scanf("%d",&a[i]); for (j=1; j<=N-1; j++) /*控制比较的趟数 */ j<=N控制比较的趟数 for (i=0; i<N-j; i++) /*两两比较的次数 */ i<N两两比较的次数 if (a[i]>a[i+1]) { t=a[i];a[i]=a[i+1];a[i+1]=t; } printf("The sorted numbers: \n"); …… } 2010-9-25 【例6.5】选择法排序(从小到大)。
6.5】选择法排序(从小到大)。
以6个数:3、7、5、6、8、0为例。
个数: 为例。
思路: 思路: 第一趟: 第一个数依次和后面的数比较 依次和后面的数比较, 第一趟:将第一个数依次和后面的数比较,如 果后面的某数小于第一个数 则两个数交换, 第一个数, 果后面的某数小于第一个数,则两个数交换,比较 结束后,第一个数则是最小的数 则是最小的数。
结束后,第一个数则是最小的数。
第二趟: 第二个数依次和后面的数比较, 第二趟:将第二个数依次和后面的数比较,如 依次和后面的数比较 果后面的某数小于第二个数 则两个数交换, 第二个数, 果后面的某数小于第二个数,则两个数交换,比较 结束后,第二个数则是次小的数 则是次小的数; 结束后,第二个数则是次小的数;…… 。