C语言程序设计应用教程 教学课件 ppt 作者 许勇 第4章 数组和字符串

上传人:E**** 文档编号:89190594 上传时间:2019-05-21 格式:PPT 页数:55 大小:231.50KB
返回 下载 相关 举报
C语言程序设计应用教程 教学课件 ppt 作者 许勇 第4章 数组和字符串_第1页
第1页 / 共55页
C语言程序设计应用教程 教学课件 ppt 作者 许勇 第4章 数组和字符串_第2页
第2页 / 共55页
C语言程序设计应用教程 教学课件 ppt 作者 许勇 第4章 数组和字符串_第3页
第3页 / 共55页
C语言程序设计应用教程 教学课件 ppt 作者 许勇 第4章 数组和字符串_第4页
第4页 / 共55页
C语言程序设计应用教程 教学课件 ppt 作者 许勇 第4章 数组和字符串_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《C语言程序设计应用教程 教学课件 ppt 作者 许勇 第4章 数组和字符串》由会员分享,可在线阅读,更多相关《C语言程序设计应用教程 教学课件 ppt 作者 许勇 第4章 数组和字符串(55页珍藏版)》请在金锄头文库上搜索。

1、第4章 数组和字符串,4.1 一维数组 4.2 二维数组 4.3 多维数组介绍 4.4 字符数组,先看一个例子:,例:给出一个学生10门功课的成绩,要求计算平均成绩 并打印出低于平均成绩的数值。,用变量来解决问题: main() int w1, w2, w3, w4, w5, w6, w7, w8, w9, w10; int t; scanf( “%d%d%d%d%d%d%d%d%d%d“,t=(w1+w2+w3+w4+w5+w6+w7+w8+w9+w10)/10; if( w1 t ) printf( “%dn“, w1 ); if( w2 t ) printf( “%dn“, w2 );

2、if( w3 t ) printf( “%dn“, w3 ); if( w4 t ) printf( “% dn“, w4 ); if( w5 t ) printf( “%dn“, w5 ); if( w6 t ) printf( “%dn“, w6 ); if( w7 t ) printf( “%dn“, w7 ); if( w8 t ) printf( “%dn“, w8 ); if( w9 t ) printf( “%dn“, w9 ); if( w10 t ) printf( “%dn“, w10 ); ,用数组来解决问题: main() int w10; /* 定义 1 个整型数组存

3、放成绩 */ int t, i; for( i=0; i10; i+ ) scanf( “%d“, ,数组及其相关概念,数组是一组有序的、类型相同的数据的集合,这些数据被称为数组的元素。,数组下标,每个数组都有一个名字,我们称之为数组名。 为标识数组中的每个元素,我们需要对它们进行编号,这种编号我们称之为数组元素的下标。,由于有了下标,元素在数组中的位置(或排列顺序)就被唯一地确定下来。我们用数组名加上下标就可以准确地访问数组中的某个元素了。,如:w0代表数组w中的第一个元素 w9代表数组w中的第十个元素,注意:C语言规定下标从0开始。,说明:数组名代表数组的起始地址。 数组元素在内存中是连续

4、存储的。,4.1 一维数组,4.1.1 一维数组的定义与引用,指明数组元素的数据类型,指明数组所含的元素个数,例如:int a10; /*定义的整型数组a含10个元素*/ float b20; /*定义的实型数组b含20个元素*/,说明:, 数组名的命名规则同变量名的命名规则一样;,数组名后用方括号 ,不能用(),常量表达式必须是大于0的整型常量表达式,不 能包含变量。即C语言不允许对数组的大小作动 态定义,即定义数组时,数组的长度必须是确 定的,其大小不依赖程序运行过程中变量的值。,int a(10);,例如:,int n; int an,char name0; float weight10

5、.3; float array-100;,例 数组元素的引用。 main() int a9; for(i=0;i=0;i-) printf(“%d”,ai);/*按下标的格式对数组元素引用*/ 运行结果: 8 7 6 5 4 3 2 1 0,4.1.2 一维数组的初始化与引用,1 .定义时初始化,在定义时赋予初值,如: int a5= 2 , 4 , 6 , 8 , 10 ;,存储形式:,存储单元,可知初始化的一般形式为: 类型说明符 数组名常量表达式=值,值,值;,可以只给部分元素赋值 例如: int a10=0,1,2,3,4; 这表示只给前5个元素赋值,后5个元素值全为0。 如果想给一个

6、数组中全部元素值为0,可以写成 int a10=0,0,0,0,0,0,0,0,0,0;或 int a10=0; 在对全部数组元素赋初值时,可以不指定数组长度。例如: int a5=1,2,3,4,5; 也可以写成 int a=1,2,3,4,5;,说明:,如果在定义一维数组时给出了全部元素的初值, 则数组的下标允许省略。此时编译系统将自动 根据初始化数据的个数来确定数组的长度。,如: int a = 2 , 4 , 6 , 8 , 10 ;,int a ; ,初始化的数据个数允许少于数组的长度,但不 能多于数组的长度。当初始化的数据个数(至 少要有一个)少于数组的长度时,未初始化部 分将被编

7、译系统自动用 0 赋值。,如:int a5= 2 , 4 ;,相当于:a0=2, a1=4, a2=0, a3=0, a4=0,int a5=1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ; ,2 .使用其它方法初始化,利用输入语句初始化 main() char as26; int i ; for(i=0; i26; i+) scanf(“%c“, . ,利用赋值语句初始化 main() char as26,ch; for(ch=A;ch=Z;ch+) asch-A=ch; . ,3. 一维数组的引用,数组元素类似于单个变量,可以自由地存取。但是,它与一般变量相比,有以下特殊之处

8、:, 数组元素是通过数组名加上该元素在数组中的位置(即数组元素的下标)来访问的。,如: a3,其中,下标可以是整型常量、整型变量或整型表达式。,如: int a10 ; float i=3 ; ai=10 ;, 数组元素的下标是从0开始的。,如:int a2; scanf(“%d,%d”, 数组元素的赋值是逐个元素进行的,不允许把一个数组作为一个整体赋给另一个数组。除了数组初始化外,也不允许用在花括号中列表的方式对数组整体赋值。,例1: int a5= 2 , 4 , 6 , 8 , 10 , b5 ; b5=a5 ;,例2 :int a5 ; a5= 2 , 4 , 6 , 8 , 10 ;

9、, 数组名a代表的是数组a在内存中的首地址,因此,可以用数组名a来代表数组元素a0的地址。,一维数组应用举例,例1:从键盘上输入10个实型数存入数组,然 后按输入顺序的逆序输出这10个数。,main() float a10; int i; for(i=0 ; i=0 ; i-) printf(“%10.2f”,ai); ,例:用数组来处理求斐波纳契数列: 1,1,2,3,5,8的前20个数。,main() int f20=1,1; for(i=2 ; i20 ; i+) /*f2是数组第3个元素*/ fi=fi-2+fi-1; for(i=0 ; i20 ; i+) printf(“%10d”

10、,fi); if(i%2=0) printf(“n”); /*每行打印2个数*/ ,数学表示:f(0)=f(1)=1, f(n)=f(n-2)+f(n-1),例:用冒泡法对10个数排序(由小到大)。,冒泡法的思路是:将相邻两个数比较,将小的 调到前头。,9 8 8 8 8 8 8 9 5 5 5 5 5 5 9 4 4 4 4 4 4 9 2 2 2 2 2 2 9 0 0 0 0 0 0 9,第一轮排序,比较了5次 ,获得第一次结果。,剩数 轮数 5 1 4 2 3 3 2 4 1 5,main() int a11, i , j , t ; printf(“Input 10 numbers

11、: n”); for(i=1 ; iai+1) t=ai; ai=ai+1; ai+1=t; for(i=1 ; i=10 ; i+) printf(“%d“,ai); ,4.2 二维数组,先看一个例子: 某校近三年招收各专业毕业生情况如下:,计算机 电子 管理 数学 1999 90 40 80 30 2000 100 50 90 40 2001 95 45 100 50,要把这些数据组织起来,可以有两种选择:,按从左到右从上到下的顺序存入一个一维数 组中。(查询困难),每年用一个一维数组,把这些数据分别存入 三个数组中。 (增加一年数据困难),4.2.1 二维数组的定义与引用,如: int

12、a34;,说明:,二维数组除了维数比一维数组多一维外, 其它性质与一维数组是全部类似的。,看看下面写法是否正确?, int a03;,用于定义数组长度的常量表达式的值必须是大于0的正整数。, int i=3 , j=4 ; int aij ;,定义数组元素的个数必须使用常量表达式,而不能使用变量。,二维数组的引用,与引用一维数组元素一样,是用下标法引用二维数组元素的。,例如:若有 int a2*53*4, i=15; 则使用 a3*30, a1i-5都是合法的。,说明:数组名a代表的是数组a在内存中的首地址, 因此,可以用数组名a来代表数组元 素 a00的地址。,4.2.2 二维数组的初始化,

13、这里主要介绍定义时初始化,其它方法初始化和一维数组类似。定义时初始化有两种方法:,分行初始化,例如:int a23=1 , 2 , 3 , 4 , 5 , 6 ;,线性初始化 即按数组元素在内存中排列的顺序赋初值。,例如:int a23=1 , 2 , 3 , 4 , 5 , 6 ;,(3)只对部分赋值 int a34=1,4,3,1,2; 这种赋值方法相当于: int a34=1,0,0,0,4,3,0,0,1,2,0,0; 系统自动将没有赋值的元素赋值成0。 int a34=1,4; 相当于 int a34=1,0,0,0,4,0,0,0,0,0,0,0; 对于没有大括号的,系统自动将此行

14、元素赋值为0。 (4)如果将数组的所有元素全部赋值的话,可以省掉第一维的长度。例如: int a4=1,2,3,4,5,6,7,8,9,10,11,12;,说明:, 在对二维数组初始化时,也可以只对部分数组元素初始化,未被初始化的数组元素将自动赋 0 。,在对二维数组初始化时,如果对全部元素都赋初值,或分行赋初值(每行至少一个数据),则可以省略第一维数组长度。但是,第二维数组长度不允许省略。,int a10=1,0; float f2=1.1,2.2;,4.2.3 二维数组应用举例,例1:使用数组保存“九九表”,然后输出。,main() int a991010, i, j ; for(i=1; i 10; i+) for(j=1; j=i; j+) a99ij=i*j; for(i=1; i10; i+) for(j=1;j=i; j+) printf(“%6d“,a99ij); printf(“n”); ,main() int a23=1,2,3,4,5,6; int b32, i,j; printf(“ array a:n“); for(i=0;i=1;i+) for(j=0;j=2;j+) printf(“%5d“,aij)

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

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

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