收藏 分享(赏)

C语言程序设计_课件_第六章(适于清华谭浩强版).ppt

上传人:精品资料 文档编号:10921711 上传时间:2020-01-21 格式:PPT 页数:51 大小:490.50KB
下载 相关 举报
C语言程序设计_课件_第六章(适于清华谭浩强版).ppt_第1页
第1页 / 共51页
C语言程序设计_课件_第六章(适于清华谭浩强版).ppt_第2页
第2页 / 共51页
C语言程序设计_课件_第六章(适于清华谭浩强版).ppt_第3页
第3页 / 共51页
C语言程序设计_课件_第六章(适于清华谭浩强版).ppt_第4页
第4页 / 共51页
C语言程序设计_课件_第六章(适于清华谭浩强版).ppt_第5页
第5页 / 共51页
点击查看更多>>
资源描述

1、第6章 数组,6.1 问题的提出 6.2 一维数组 6.3 二维数组 6.4 字符串与字符串函数,6.1 问题的提出,第一个问题是:输入100个学生的“C 程序设计”课程的成绩,将这100个分数从 小到大输出。第二个问题是输入100个学生的“C程 序设计”课程的期中和期末成绩,算出总评 成绩,总评成绩为“30%期中成绩 +70%期末成绩”,计算总评成绩的分数 段情况。,6.2 一维数组,6.2.1 一维数组的定义从概念上来说,数组是一组变量,这组变量应该满足下列条件: (1) 具有有相同的名字 (2) 具有相同的数据类型 (3) 在存储器中连续存放,每个变量称为数组的一个“数组单 元”,保存在

2、其中的数据值称为“数组元 素”,不论是数组单元,还是数组元素, 在不引起混淆的情况下,可以简称为元 素。数组对象的整体有一个名称,这个 名称表示整个数组。,每个数组在使用之前都需要定义。 定义数组的语法是:数据类型说明符 数组名数组长度;数据类型说明符是C语言提供的任何一种基本数据类型或构造数据类型。数组名是用户定义的标识符。方括号中的数组长度是一个常量表达 式,它表示了数组单元的个数。注意:数 组长度只能是常量。,例如: int data5; 说明整型数组a,有5个元素。 float b10,c20; 说明单精度浮点型数组b,有10个元素;单 精度浮点型数组c,有20个元素。 char st

3、ring20; 说明字符型数组string,有20个元素。,注意 (1) 数组的数据类型定义的是每个数组 元素的取值类型。对于一个数组来说,所 有数组元素的数据类型应该都是相同的。 (2) 数组名要符合用户定义字的书写规 则,也就是与普通变量一样。 (3) 在C语言的一个函数中,数组名不能 与本函数的其它变量名同名。 (4)数组长度不能是变量,也不能是或包含变 量的表达式,可以是常量或常量表达式。并且 常量表达式应是整型数,不能是小数 。,程序段一: #define Size 5 main() int aSize,bSize+10; /*正确 */ 程序段二: main() int n=5;i

4、nt datan; /*错误 */ ,6.2.2 一维数组的引用引用数组单元的一般形式为:数组名下标数组下标可以是整型变量或整型表达式, 但不能是浮点型的变量或浮点型表达式;并且 下标不能大于数组长度-1,因为超过部分没 有被定义过,是不能正确使用的。图。例如:data4、datai+j、datai+都是 合法的引用方式。,例6.1用数组方式读入5个整数,并求和。 /* sum of 5 interger */ #include “stdio.h“ void main() int i,data5,sum=0;printf(“nPlease enter 5 integer:“);for (i=0

5、;i5;i+)scanf(“%d“, ,在语言中只能逐个地使用每个数组单元 进行操作,而不能一次引用整个数组。例如,不能用printf(“%d”,data);来代替下 面的语句:for(i=0; i=4; i+)printf(“%d“,datai);因为,C语言规定数组名本身代表数组的首 地址。printf(“%u”,data);语句输出的是数组的 首地址,而不是数组单元的内容。,6.2.3 一维数组的初始化初始化是指在数组定义时给数组元素赋予 初值。需要注意的是,数组初始化是在编译阶 段进行的,而不是在程序开始运行以后,由可 执行语句完成的,因此不能将初始化的“=”与 赋值号混淆。一维数组初

6、始化的一般形式是: 数据类型说明符 数组名数组长度=数值,数 值,. 数值;,int data5=1,2,3,4,5; 注意 (1) 允许初始化一部分元素,而不是全部。int data5=1,2; (2) 初始化数组时,允许省略数组的长度。int data=1,2,3,4,5;与int data5=1,2,3,4,5;是完全等价的。 (3) 初始化数组时,不能对整个数组初始化。例如,int data5=1;,6.2.4 程序举例 例6.2用数组方式解决Fibonacci数列问题,求出 Fibonacci数列的前20项存储在数组中,并将数 组内容输出。,#include “stdio.h“ vo

7、id main() int i,fib20=1,1; /*初始化 */printf(“n“);for (i=2;i20;i+)fibi=fibi-1+fibi-2;for (i=1;i=20;i+) printf(“%10d“,fibi-1);if (i%5=0) printf(“n“); /*换行,每行输出5个 */ ,例6.3 输入100个整数,求出最小的数以及第一个最小的数在数组中的下标。 例6.4 输入100个整数,从小到大排列并输出 。选择排序 例6.5 输入100个学生的“C程序设计”课程的期 中和期末成绩,算出总评成绩,总评成绩为 “30%期中成绩+70%期末成绩”,计算总评 成

8、绩的分数段情况。本题要使用三个平行的数组才能解决问题。 这三个数组的第i个元素记录了一个学生的期中 成绩、期末成绩和总评成绩。,6.3 二维数组,如果一维数组的数组单元不是一个变量,而是另一个一维数组,就构成了二维数组。图。e_score是一个一维数组,它的每个数 组单元是一个变量,分别是e_score0、 e_score1、e_score2、e_score3、 e_score4。而stu_score的每个数组单元不 是一个变量,而是一个有三个变量的一维数 组,这就构成了二维数组。,stu_score有5个数组单元,每个数 组单元又有3个元素,我们称stu_score是 一个53的二维数组,该

9、二维数组行的 个数是5,列的个数是3。6.3.1 二维数组的定义 定义二维数组的语法是:数据类型说明符 数组名行数列数,例如: int data53;说明整型数组a,有5行3列共15个整型变量。 float b1020; 说明单精度浮点型数组b,有10行20 列共200个单精度浮点型变量。 char string2050; 说明字符型数组string,有20行50列共 1000个字符型变量。,地址二维数组在概念上是二维的,可以说 是数组的数组,二维数组的下标在行和列两个方 向变化。但是,计算机的内存是连续编址的,也 就是说存储器单元是按一维线性排列的。那么, 如何按照地址的顺序存放二维数组呢?

10、一般有两 种方式来存储二维数组,第一种称为按行排列, 方法是先存储完第一行中的每个元素,再存放下 一行的每个元素;第二种称为按列排列,方法是 先存储完第一列中的每个元素,再存放下一列的 每个元素。C语言的编译系统采用按行排列。,6.3.2 二维数组的引用 引用二维数组的一般形式为:数组名行下标列下标行下标不能大于行数-1,列下标不 能大于列数-1。如果有int stu_score53; stu_score00、stu_score12、 stu_score31都是正确的引用方式,但 是stu_score33是不正确的。,例6.7判断下面程序的运行结果: #include “stdio.h“ vo

11、id main() int i,j,a32; /* 定义 */for (i=0;i3;i+) /* 赋值 */for (j=0;j2;j+)aij=i+j;for (i=0;i3;i+) for (j=0;j2;j+)printf(“ %10d“,aij);printf(“n“); /*每输出一行换行 */ ,6.3.3 二维数组的初始化 二维数组初始化的一般形式是: 数据类型说明符 数组名行数列数=数 值,数值,. 数值,数值,数值,. 数 值; 或者 数据类型说明符 数组名行数列数=数 值,数值,. 数值;,第一种方法是按行分段初始化,即在 外面的花括号里面再嵌套花括号,里面的 每个花括号

12、分别为每行元素初始化,第二种方法则是按行连续初始化,不用加内嵌的花括号。这两种方法有时没有区别,有时区别却很大。,例如:对数组a32:int a32= 5,6,7,8,9,10; /*按行分段初始化*/ int a32= 5,6,7,8,9,10; /*按行连续初始化*/上面两种初始化的结果是完全相同的。,int a32= 5,7,9; /*按行分段初始化*/ int a32= 5,7,9; /*按行连续初始化*/ 则结果却完全不一样。,对于二维数组的全部元素进行初始 化,则行数可以省略,编译系统会自动计 算出行数。但是绝对不能省略列数。例如:int a32=4,5,6,7,8,9; 可以写为

13、:int a2=4,5,6,7,8,9;但是不 能写为:int a3=4,5,6,7,8,9;,6.3.4 程序举例 例6.8 将用二维数组a表示的矩阵转置存入b中,输出a和b。 例6.9 输入100个学生的“C程序设计”课程 的期中和期末成绩,算出总评成绩,总评 成绩为“30%期中成绩+70%期末成绩”,计 算总评成绩的分数段情况,要求用一个二维数 组存储期中成绩、期末成绩和总评成绩,。本题将使用二维数组的的第i个元素记 录一个学生的期中成绩、期末成绩和总评 成绩。,6.4 字符串与字符串函数,6.4.1 字符数组 字符数组就是定义一个数据类型是字符型的数组。字符数组的初始化: char s

14、tr10= H, e, l, l, o;例6.10 以$符号为终止符号接收一组字符, 并逆序输出这组字符。,#include “stdio.h“ void main() char c80;int i;puts(“Please input a string:“);for (i=0;(ci=getchar()!=$;i+); /*读入一组字符 */for (i-; i=0;i-) /*从最后一个字符开始逆向输出 */putchar(ci); ,6.4.2 字符串变量 C语言的字符串变量不是真正的字符串类型。C语言的字符串变量从形式上还是定义一个字符数组,但是,在概念上,字符串是带有字符串结束符0的

15、一组字符,不论它是常量还是变量。有了0标志以后,在处理字符数据时,就不必再用数组的长度来控制对字符数组的操作,而是用0来判断字符串的结束位置。 这是字符串变量与其它类型的数组(包括一般的字符数组)在操作上的根本区别。,字符串变量需要用字符串常量对其进行初始 化。例如: char str=“Hello“; 或 char str=“Hello“;用上面两种方式初始化str以后,str字符串 变量所占的内存空间是6字节,最后一个字节是 字符串结束标志0。,6.4.3 字符串变量的输入与输出 1、使用printf函数输出字符串变量的方式是:使用转换字符序列“%s”。 例6.11使用printf函数输出

16、字符串变量。 #include “stdio.h“ void main() char str=“Hello“;printf(“%s“,str); 运行结果: Hello,例6.12请判断下面程序的运行结果: #include “stdio.h“ void main() char str10= H, e, l, l, o, !,0, !;printf(“%s“,str); 运行结果: ?,2、使用scanf函数输入字符串给字符串变量也使用转换字符序列“%s”。 例6.13 使用scanf函数输入字符串给字符串变量。 #include “stdio.h“ void main() char str1

17、0;scanf(“%s“,str);printf(“%s“,str); ,2、使用scanf函数输入字符串给字符串变量也使用转换字符序列“%s”。 例6.13 使用scanf函数输入字符串给字符串变量。 #include “stdio.h“ void main() char str10;scanf(“%s“,str);printf(“%s“,str); 运行结果: Welcome you ?,3、puts()是字符串输出函数,其调用格式为: puts (字符串变量);它的功能是把字符串变量的内容(一定要 有0结束符)显示在屏幕上。 例6.14 使用puts()字符串输出函数。 #include

18、 “stdio.h“ void main() char str=“Hello“;puts(str); 运行结果: Hello,#include “stdio.h“ void main() char str=“Hello“;printf(“%s“,str);printf(“%s“,str); 运行结果 ?,#include “stdio.h“ void main() char str=“Hello“;puts(str);puts(str); 运行结果: ?,4、gets()是字符串输入函数,其调用格式为:gets (字符串变量); 它的功能是:从标准输入设备键盘上输入一个字符串。 例6.15 使

19、用gets()字符串输入函数。 #include “stdio.h“ void main() char str20;gets(str);puts(str); 若输入为 Welcome you 输出?,6.4.4 字符串函数 1. 字符串连接函数strcat其调用格式为:strcat (字符串变量1,字符串2)它的功能是:将字符串2的字符串连接 到字符串变量2中的字符串的后面,并删去字符 串变量1中的字符串结束符0。strcat的返回值 是字符串变量1的首地址。字符串变量1应定义足够的长度,以便能装入连接以后的字符串。,例6.16 字符串连接函数的使用。 #include “stdio.h“ #

20、include“string.h“ void main() char str130=“I am “;char str210= “a student“;strcat(str1,str2);puts(str1); 运行结果: I am a student,2. 字符串拷贝函数strcpy其调用格式为:strcpy (字符串变量1,字符串2)它的功能是:将字符串2的字符串复制到 到字符变量1中。字符串结束符0 也一起复制。 字符串2既可以是字符串常量也可以是字符串变量。strcpy函数要求字符串变量1有足够的长 度,以便能装入要复制的字符串。,例6.17使用函数strcpy将一个字符串的内容拷贝到另

21、一个字符串中。 #include “stdio.h“ #include“string.h“ void main() char str130=“I am “;char str210= “a student“;strcpy(str1,str2);puts(str1); 运行结果: a student,3. 字符串比较函数strcmp其调用格式为:strcmp(字符串1,字符串2)它的功能是:按照ASCII码顺序比较两个 数组中的字符串,并由函数返回值返回比较结 果。 若字符串1字符串2,返回值为0; 若字符串1 字符串2,返回值为一正整数; 若字符串1 字符串2,返回值为一负整数。 字符串1和字符

22、串2既可以是字符串常量也可以是字符串变量。,4. 求字符串长度函数strlen其调用格式为:strlen(字符串)它的功能是:计算字符串的实际长度(不含 字符串结束标志0 ),并将计算结果作为函数 值返回。字符串既可以是字符串常量也可以是 字符串变量。,例6.18 使用函数strlen计算字符串的长度并输出。 #include “stdio.h“ #include“string.h“ void main() char str=“I am a student“;printf(“The length of the string is %dn“,strlen(str); 运行结果: The leng

23、th of the string is 14,6.4.5 程序举例例6.19定义两个字符串变量,使用输入函数为其赋值,将两个字符串连接起来并输出(不用strcat函数)。 例6.20编写程序输入一个字符串和一个单个字符,在输入的字符串中删除所有的单个字符。 例6.21编写程序输入一个字符串,对该字符串中的字符从小到大排序并输出。,例6.22编写程序输入两个字符串,将在第一个字 符串中出现的但在第二个字符串未出现的字符存 放在第三个字符串变量中并输出。注意,允许第 三个字符串有重复的字符,例如,第一个字符串 是“ABACDEFGH”,第二个字符串是“BCD”, 则第三个字符串是“AAEFGH”。,例6.23输入若干个学生的姓名(以一个特殊的名 字*作为结束)、期中成绩和期末成绩,计算 出总评成绩,总评成绩为“30%期中成绩+70%期末成绩”,计算总评成绩的分数段情况。最后,从键盘输入一个学生的姓名,查询 该生的总评成绩。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报