《C语言程序设计(第三版)》-电子教案-丁亚涛 第6章 数组

上传人:E**** 文档编号:89400273 上传时间:2019-05-24 格式:PPT 页数:35 大小:351.50KB
返回 下载 相关 举报
《C语言程序设计(第三版)》-电子教案-丁亚涛 第6章 数组_第1页
第1页 / 共35页
《C语言程序设计(第三版)》-电子教案-丁亚涛 第6章 数组_第2页
第2页 / 共35页
《C语言程序设计(第三版)》-电子教案-丁亚涛 第6章 数组_第3页
第3页 / 共35页
《C语言程序设计(第三版)》-电子教案-丁亚涛 第6章 数组_第4页
第4页 / 共35页
《C语言程序设计(第三版)》-电子教案-丁亚涛 第6章 数组_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《《C语言程序设计(第三版)》-电子教案-丁亚涛 第6章 数组》由会员分享,可在线阅读,更多相关《《C语言程序设计(第三版)》-电子教案-丁亚涛 第6章 数组(35页珍藏版)》请在金锄头文库上搜索。

1、第6章 数组,21世纪高等学校精品规划教材,掌握一维数组、二维数组的定义、初始化和数组元素的引用 掌握字符数组的定义、初始化和数组元素的引用 掌握字符串的存储方法和应用 掌握有关处理字符串的系统函数的使用方法,【问题】从键盘接收10个数,求平均数并输出所有小于平均数的数。,【分析】从键盘接收10个数,求平均数很简单,可以采用边接收边求和的方法,最后根据总和求平均数。下面的程序可以做到: int a,i; float s; for(i=0,s=0;i10;i+) scanf(“%d“, ,6.1 数组的基本概念,所谓数组,就是一组类型相同的变量。 它用一个数组名标识,每个数组元素都是通过数组名和

2、元素的相对位置下标来引用的。 数组可以是一维的,也可以是多维的。 int a1,a2,a3,a10 int a10; = (a0,a1,a3,a9) 其中下标从0开始,和前面不同的是,这些变量统一共享一个数组名a。,6.2 一维数组,一维数组用于存储一行或一列的数据。定义方式如下: ; :简单类型或结构体、共用体等复杂类型。 :数组的标识、命名规则同变量名。 :用来定义数组的长度,因为数组也必须先定义再使用。 例如:int a10;char s100;,注意:,C语言不允许对数组的大小作动态定义,即定义行中的数组长度可以包括常量和符号常量,但不能包括变量。例如,下面的定义是错误的。 int n

3、=10; int an; /*因为n为变量*/ 而下面的定义是正确的: #define N 10 main() int aN; /*N为符号常量*/ 定义数组的同时可以对数组初始化。以下初始化的方法都是允许的: int a10=1,2,3,4,5,6,7,8,9,10;/完全初始化 int a=1,2,3,4,5,6,7,8,9,10; /完全初始化,可省略长度 int a10=1,2,4,5;/部分元素a0、a1、a3、a4初始化,注意:,数组元素的下标从0开始。 数组名不能像变量一样进行赋值操作。以下用法是错误的: int a10,b10; a=b; /*错误*/ 正确的定义: int a

4、10; /*定义整型数组a,它有10个元素*/ char s20; /*定义字符型数组s,它有20个元素*/ float f5,g10; /*定义实型数组f和g,f数组有5个元素,g数组有10个元素*/,【例6-1】编程求10个数中的最大值、最小值、平均值。输出所有小于平均值的数。,void main() int a10,i; int max,min; float s=0,aver; printf(“Input 10 numbers: “); for (i=0;imax) max=ai; else if (aimin) min=ai; s = s + ai; ,aver = s/10; pri

5、ntf(“max is %dn“,max); printf(“min is %dn“,min); printf(“average is %.2fn“,aver); for(i=0;i10;i+) if(aiaver) printf(“%4d“,ai); printf(“n“); ,6.3 二维数组和多维数组,二维数组用于存放矩阵形式的数据,如二维表格等数据。 定义二维数组的格式如下: ; 例如: int a34; /* 34的矩阵,共12个元素 */ float f510;,6.3 二维数组和多维数组,int a34 a00 a01 a02 a03 a10 a11 a12 a13 a20 a2

6、1 a22 a23,二维数组的初始化,完全初始化 int a34=1,2,3,4,5,6,7,8,9,10,11,12; 省略行的完全初始化 int a4=1,2,3,4,5,6,7,8,9,10,11,12; 分行完全初始化,可读性较好 int a34=1,2,3,4,5,6,7,8,9,10,11,12; 部分初始化 int a34=1,2,3,4;,【例6-2】演示二维数组的定义及元素引用,#include main() int i,j,k=0; int a34; for(i=0;i3;i+) /*变量i控制数组a的行下标*/ for(j=0;j4;j+) /*变量j控制数组a列下标*/

7、 aij=k; printf(“a%d%d=%dt“,i,j,aij); k+; printf(“n“); ,【例6-3】输入3位学生的计算机、数学成绩,计算每门课程的平均分。,#include main() float score32,average3,temp; char info210=“Computer“,“English“; int i,j; for( i = 0 ; i 3 ; i+ ) printf(“No:%dn“,i+1); for( j = 0 ; j 2 ; j+ ) printf(“%s:“,infoj); scanf(“%f“, ,for(i=0;i2;i+) tem

8、p = 0; for(j=0;j3;j+) temp = temp + scoreji; averagei = temp / 3; printf(“%s:%.2fn“, infoi,averagei); ,6.4 字符数组与字符串,6.4.1 字符数组的定义、初始化和引用 字符数组的定义和一般的数组一样,例如: char s10; char string310; 初始化的方法如下: char s10=H, e, l, l, o, , C, +, +, !; char s=H, e, l, l, o, , C, +, +, !; char s10=H, e, l, l, o, !; char s

9、11=“Hello C!“; char s11=“Hello C!“;,【例6-4】输入一串字符,将其按逆序输出。,#include #include main() char s100; int i=0; printf(“Input a string:“); gets(s); while(si != 0) i+; while(-i=0) putchar(si); putchar(n); ,6.4.2 字符串函数,strlen(字符串) 字符串长度函数 求字符串s中第一个结束符0前的字符个数。例如: char s100= “Hello World!“; /*长度是12 */ char t100=

10、 “12345067890“; /*长度是5*/ 实际上字符数组s和t实际存储长度都是100。 strcpy(字符串1, 字符串2) 字符串复制函数 函数将字符串s2复制到字符串s1。例如: char s120; char s2 = “Good luck“; strcpy(s1,s2); puts(s1); /*输出Good luck*/ strcpy函数可以将结束符一起复制过去,以上复制操作也可以直接写成:strcpy(s1, “Good luck“);,6.4.2 字符串函数,strcat(字符串1, 字符串2) 字符串连接函数 函数将字符串s2连接到字符串s1后面。很显然,s1也必须有足

11、够的空间来存储由原来的s1和s2构成的新s1字符串。例如: char s120= “Good luck“;char s2 = “ to you!“; strcpy(s1,s2);puts(s1); /*输出Good luck to you!* 连接后的s1的有效字符长度为17,包括结束符在内,s1至少需要18个字符长度,否则连接是错误的。,6.4.2 字符串函数,strcmp(字符串1, 字符串2) 字符串比较函数 函数比较s1和s2字符串的大小,并返回比较的结果。 若s1大于s2,则返回一个正整数。 若s1等于s2,则返回0。 若s1小于s2,则返回一个负整数。 字符串比较规则:自左向右按A

12、SCII码值大小进行比较,直至出现一对不同字符或者遇到结束符为止。例如: strcmp(“ABC“,“abc“) /*返回负整数,前面字符串小 */ strcmp(“ABC“,“ABC0abc“)/*返回0,二者相等*/ strcmp(“ABC“,“AB“) /*返回正整数,前面的大*/ strcmp(“AB“,“ABC“) /*返回负整数,前面的小*/,6.4.2 字符串函数,strlwr(字符串) 字符串大写变小写 将字符串s的所有大写字母转换成小写字母。 strupr(字符串) 字符串小写变大写 将字符串s的所有小写字母转换成大写字母。 除了上面的几个函数以外,经常使用的还有: strn

13、cpy(字符串1, 字符串2,字符个数) strncmp(字符串1, 字符串2,字符个数) strstr(字符串1, 字符串2) strncat(字符串1, 字符串2,字符个数),【例6-5】输出几个字符串中的最大串,#include #include void main() char s550= “Hello World!“, “Good luck to you!“, “How are you?“, “Moon River“, “I love this book.“; int i,max=0; for(i=1 ; i 0 ) max = i; printf(“max string is :%

14、sn“,smax); ,6.5 程序举例,【例6-6】将10个数排序输出(冒泡法排序) 【分析】对一系列数进行排序有很多种方法,冒泡法是其中比较容易理解的一种算法。所谓冒泡法,就是指找到的大数或者小数像气泡一样浮出水面被发现。为了理解算法,来看下面的例子。,【例6-6】将10个数排序输出,第1次查找,范围:7 2 9 1 8 第1步:72,将7和2交换位置,得到 2 7 9 1 8 第2步:71,将9和1交换位置,得到 2 7 1 9 8 第4步:98,将9和8交换位置,得到 2 7 1 8 9 第1次查找,将9作为最大数放在最后,结果为 2 7 1 8 9,【例6-6】将10个数排序输出,第

15、2次查找,范围:2 7 1 8 第1步:21,将7和1交换位置,得到: 2 1 7 8 9。 第3步:78,不交换。 第2次查找结果为: 2 1 7 8 9。,【例6-6】将10个数排序输出,第3次查找,范围:2 1 7 第1步:21,将2和1交换位置,得到: 1 2 7 8 9 第2步:27,不交换。 第3次查找结果为: 1 2 7 8 9,【例6-6】将10个数排序输出,第4次查找,范围:1 2 第1步:12,不交换。 第4次查找结果为: 1 2 7 8 9,【例6-6】将10个数排序输出,#include main() #define N 10 int aN = 7,2,8,9,1,6,0,4,5,3; int i,j,t; for(i = 0 ; i aj+1)t=aj;aj=aj+1;aj+1=t; for

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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

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