C语言程序设计 第2版 工业和信息化普通高等教育“十二五”规划教材立项项目 教学课件 ppt 作者 姚琳 C语言程序设计_第5章_数组

上传人:E**** 文档编号:89345932 上传时间:2019-05-23 格式:PPT 页数:81 大小:606KB
返回 下载 相关 举报
C语言程序设计 第2版  工业和信息化普通高等教育“十二五”规划教材立项项目  教学课件 ppt 作者  姚琳 C语言程序设计_第5章_数组_第1页
第1页 / 共81页
C语言程序设计 第2版  工业和信息化普通高等教育“十二五”规划教材立项项目  教学课件 ppt 作者  姚琳 C语言程序设计_第5章_数组_第2页
第2页 / 共81页
C语言程序设计 第2版  工业和信息化普通高等教育“十二五”规划教材立项项目  教学课件 ppt 作者  姚琳 C语言程序设计_第5章_数组_第3页
第3页 / 共81页
C语言程序设计 第2版  工业和信息化普通高等教育“十二五”规划教材立项项目  教学课件 ppt 作者  姚琳 C语言程序设计_第5章_数组_第4页
第4页 / 共81页
C语言程序设计 第2版  工业和信息化普通高等教育“十二五”规划教材立项项目  教学课件 ppt 作者  姚琳 C语言程序设计_第5章_数组_第5页
第5页 / 共81页
点击查看更多>>
资源描述

《C语言程序设计 第2版 工业和信息化普通高等教育“十二五”规划教材立项项目 教学课件 ppt 作者 姚琳 C语言程序设计_第5章_数组》由会员分享,可在线阅读,更多相关《C语言程序设计 第2版 工业和信息化普通高等教育“十二五”规划教材立项项目 教学课件 ppt 作者 姚琳 C语言程序设计_第5章_数组(81页珍藏版)》请在金锄头文库上搜索。

1、1,第5章 数 组,北京科技大学,C 语言程序设计,2019/5/23,第5章 数组,本章重点介绍 : 一维数组 二维数组 字符数组与字符串,2019/5/23,5.1概述,1用案例说明为什么使用数组 【例5-1】设计一个程序,将n个人某门课程的成绩输入计算机,求平均成绩和高于平均成绩的人数。 如果不使用数组,以5个人的成绩为例,使用a1、a2、a3、a4、a5来存放5个成绩,程序代码如下:,2019/5/23,程序代码:,#include “stdio.h“ void main() int n=0; float s,ave,a1,a2,a3,a4,a5; scanf(“%f%f%f%f%f“

2、, ,如果要统计10个人的成绩呢?,2019/5/23,#include “stdio.h“ void main() int n=0,i; float s=0,ave,a10; for(i=0;iave) n+; printf(“平均成绩为:%.1fn高于平均成绩的人数为:%dn“,ave, n); ,使用数组来存储10个人的数据,用循环结构实现! 程序代码如下:,2019/5/23,5.1概述(续),2数组与数组元素的概念 数组:是用一个名字表示的一组相同类型的数据的集合,这个名字就称为数组名。 如定义:float a10; a是数组名。 下标变量(或数组元素):数组中的数据分别存储在用下标

3、区分的变量中,这些变量称为下标变量或数组元素。 如:a0、a1ai。 每个下标变量相当于一个简单变量,数组的类型也就是该数组的下标变量的数据类型。 数组属于构造类型。构造类型的数据是由基本类型数据按一定规则构成的。,2019/5/23,5.2 一维数组,例如: int a10; float score5; “数据类型”: 是数组元素的数据类型。 “数组名”: 遵循C语言标识符规则。 “常量表达式”:表示数组中有多少个元素,即数组的长度。它可以是整型常量、整型常量表达式或符号常量。,5.2.1 一维数组的定义,数据类型 数组名常量表达式;,2019/5/23,以下数组定义是正确的: #defin

4、e N 10 float score1N, score2N; int num10+N; char c26;,以下数组定义是不正确的: int array(10); int n; float scoren; char str ;,5.2.1 一维数组的定义(续),2019/5/23,数组在内存的存放,数组下标从0开始。 一维数组的数组元素在内存里按顺序存放。 数组名代表数组的首地址,即score的值与score0 的地址值(&score0 )相同。,score数组,2019/5/23,5.2.2 一维数组元素的引用,1一维数组元素的表示形式,例如:输入学生成绩 for(i=0;i5;i+) sc

5、anf(“%f“,例如:n=3; fibn=fibn-1+fibn-2;,其中: “下标表达式”:只能是整型常量或整型表达式。,数组名下标表达式 ,2019/5/23,5.2.2 数组元素的引用(续),2.说明 下标从0开始(下界为0),数组的最大下标(上界)是数组长度减1。 例如: int a10,i; scanf (“%d“, /* 下标越界 */,C编译系统不做越界检查。,2019/5/23,5.2.2 数组元素的引用(续), 是下标运算符,如:x= score2; (1)计算score2地址: 2000+2*4=2008 (2)取出2008的内容(67.5)赋给x,如果引用的数组元素超

6、出数组范围会破坏其他变量的值。,2019/5/23,5.2.3 一维数组的初始化,初始化:在定义数组时给数组元素赋初值。,1在定义数组时,对全部数组元素赋初值 例如:int a5=0,1,2,3,4; 此时可以省略数组长度,例如:int a =0,1,2,3,4; 2在定义数组时,对部分数组元素赋初值 例如:int a5=1,2,3;系统为其余元素赋 0 。 3当初值的个数多于数组元素的个数时,编译出错 例如: int a5=0,1,2,3,4,5;,2019/5/23,5.2.4 一维数组应用举例,【例5-2】设计一个程序,将n个人某门课程的成绩输入计算机后输出最高分和最低分。 思路:首先将

7、n个人的成绩输入到一个一维数组中。求若干个数的最大值或最小值常采用打擂台的方法: 首先指定某数为最大值或最小值的擂主: 如:max=a(0), min=a(0) 将其他各数依次与擂主进行比较(循环嵌套分支),当所有的数都比较完之后,输出max和min的值。,2019/5/23,程序如下:,#include “stdio.h“ #define N 5 void main( ) int aN,max,min,i; for(i=0; imax) max=ai; /* max存放最大值 */ printf(“最高分:%d 最低分:%d“,max,min); printf(“n“); ,程序运行情况如下

8、: 78 98 65 82 45 最高分:98 最低分:45,2019/5/23,5.2.4 一维数组应用举例(续),【例5-3】将5个数存放到一维数组中,再将这5个数按逆序存放在同一数组中并输出。,ai与an-1-i交换,2019/5/23,程序如下:,#define N 5 #include “stdio.h“ void main( ) int i,t,aN; for (i=0; iN; i+) scanf(“%d“, 输出数据 ,程序运行情况如下: 11 13 15 17 19 逆序存放后的结果是: 19 17 15 13 11,2019/5/23,5.2.4 一维数组应用举例(续),【

9、例5-4】用冒泡法(也称起泡法)对输入的一组成绩按从低分到高分的顺序排序并输出。 例如将6个数:4、7、5、6、8、1按从小到大顺序用冒泡法排序,方法如下: 第一趟排序情况如下: 4 7 5 6 8 1 第一次 4和7比较,不交换 4 7 5 6 8 1 第二次 7和5比较,交换 4 5 7 6 8 1 第三次 7和6比较,交换 4 5 6 7 8 1 第四次 7和8比较,不交换 4 5 6 7 8 1 第五次 8和1比较,交换 4 5 6 7 1 8,在第一趟排序中,6个数比较了5次,把6个数中的最大数8排在最后。,2019/5/23,冒泡法排序 (续),第二趟排序情况如下: 4 5 6 7

10、 1 8 第一次 4和5比较,不交换 4 5 6 7 1 8 第二次 5和6比较,不交换 4 5 6 7 1 8 第三次 6和7比较,不交换 4 5 6 7 1 8 第四次 7和1比较,交换 4 5 6 1 7 8 在第二趟排序中,最大数8不用参加比较,其余的5个数比较了4次,把其中的最大数7排在最后,排出7 8。 以此类推: 第三趟比较4次,排出 6 7 8 第四趟比较2次,排出 5 6 7 8 第五趟比较1次,排出 4 5 6 7 8,最后还剩下1个数1,不需再比较,得到排序结果: 1 4 5 6 7 8,2019/5/23,冒泡法排序 (续),从上述过程可以看到:n个数要比较n-1趟,而

11、在第j趟比较中,要进行n-j次两两比较。,冒泡法排序,2019/5/23,程序如下: #define N 6 #include “stdio.h“ void main( ) int aN; int i,j,t; printf(“请输入%d个成绩,用空格隔开:n“,N); for (i=0; iN; i+) scanf(“%d“,冒泡法排序 (续),2019/5/23,for (j=1; jai+1) t=ai;ai=ai+1;ai+1=t; printf(“成绩从低分到高分的顺序是:n“); for (i=0; iN; i+) printf(“%d “,ai); printf(“n“); ,程

12、序运行情况如下: 请输入6个成绩,用空格隔开: 78 56 96 83 72 88 成绩从低分到高分的顺序是: 56 72 78 83 88 96,冒泡法排序 (续),2019/5/23,以6个数:3、7、5、6、8、0为例,介绍选择法排序方法。思路: 第一趟:将第一个数(擂主)依次和后面的数比较,如果后面的某数小于第一个数,则两个数交换,比较结束后,第一个数则是最小的数。 第二趟:将第二个数(擂主)依次和后面的数比较,如果后面的某数小于第二个数,则两个数交换,比较结束后,第二个数则是次小的数; 。,【例5-5】用选择法对输入的一组成绩按从低分到高分的顺序排序并输出。,5.2.4 一维数组应用

13、举例(续),2019/5/23,【例5-5】选择法排序(续),2019/5/23,【例5-5】选择法排序(续),程序如下: #define N 6 #include “stdio.h“ void main( ) int aN; int i,j,t; printf(“请输入%d个成绩,用空格隔开:n“,N); for (i=0; iN; i+) scanf(“%d“,2019/5/23,for (j=0; jai) t=aj;aj=ai;ai=t; printf(“成绩从低分到高分的顺序是:n“); for (i=0; iN; i+) printf(“%d “,ai); printf(“n“);

14、 ,程序运行情况如下: 请输入6个成绩,用空格隔开: 78 56 96 83 72 88 成绩从低分到高分的顺序是: 56 72 78 83 88 96,【例5-5】选择法排序(续),2019/5/23,5.2.5 一维数组作函数参数,数组名作函数的实参,传递的是数组的首地址,此时形参也应定义为数组形式,但形参数组的长度可以省略。 例如,在主函数中调用sort函数,实现将整型数组a中的10个数据排序,调用语句如下: sort(a,10); sort函数定义如下: void sort(int b , int n) ,2019/5/23,void sort(int b ,int n); void

15、printarr(int b ); main( ) int a10 = 11,22,63,97,58,80,45, 32,73,36; printf(“Before sort:n“); printarr(a); sort(a,10); printf(“After sort:n“); printarr(a); ,void printarr(int b10) int i; for (i=0; i10; i+) printf(“%5d“,bi); printf(“n“);,void sort(int b , int n) int i,j,t; for (i=1; ibj+1) t=bj;bj=bj+1;bj+1=t; ,2019/5/23,2000,b,形参 b 实际是一个 可以存放地址的变量,a:2000,实参赋给形参,2019/5/23,5.3 二维数组,数据类型 数组名常量表达式1常量表达式2;,例如: float x23;,5.3.1 二维数组的定义,int a3,4,b(3,4),c ,d(3)(4);,2019/5/23,地址 值 数组元素,二维数组元

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号