c数组与字符串

上传人:san****019 文档编号:70834270 上传时间:2019-01-18 格式:PPT 页数:36 大小:422.01KB
返回 下载 相关 举报
c数组与字符串_第1页
第1页 / 共36页
c数组与字符串_第2页
第2页 / 共36页
c数组与字符串_第3页
第3页 / 共36页
c数组与字符串_第4页
第4页 / 共36页
c数组与字符串_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《c数组与字符串》由会员分享,可在线阅读,更多相关《c数组与字符串(36页珍藏版)》请在金锄头文库上搜索。

1、C语言程序设计-第6章,1,第6章 数组与字符串,C语言程序设计-第6章,2,前面所用到的数据称之为基本类型(整型、实型、字符型)。它们处理数据的能力非常有限。C语言提供了一种构造类型,它具有强有力的数据组织和数据表达能力。其中,数组是C语言组织和描述较复杂数据对象的基本工具之一,是一种应用极广的构造数据类型。,6.1 概述,C语言程序设计-第6章,3,数组:由一组有序数据(数组元素)组成。,例如,一组数据:a0,a1,a2,a99用数组表示: a0,a1, a2,a99,下标,它决定了元素在数组中的位置,数组特点: 1.一个数组由一个名字来标识; 2.数组大小必须确定,不许随机变动; 3.同

2、一数组中的元素其类型相同,不许混合类型,C语言程序设计-第6章,4,6.2 一维数组,如果数组元素在数组中的位置只需要用一个下标就能确定,这样的数组称为一维数组。,同变量一样,数组也必须先定义,后使用。,6.2.1 一维数组的定义,数组定义格式:,类型说明符 标识符整型常量表达式;,数组元素类型,数组名,元素个数。它只能是常量或由常量构成的表达式,不能含有变量,例: int a 20; float grades 100;,C语言程序设计-第6章,5,归纳几点:,1)C在语法上没有数组变量的概念,对数组的操作只能分解为对其元素的操作,数组作为一个整体不能参加运算。,2)定义中的的值决定了该数组的

3、元素个数,而不是该数组可用的最大下标。它可以是已定义的符号常量。,3)下标从0开始。下标可以是整型常量、字符、枚举型常量及其表达式。,4)数组名不是一个变量而是一个地址常量,它代表该数组所占存储空间的首地址,即该数组第一个元素所占空间的首址。,C语言程序设计-第6章,6,5)数组的存储结构:同一数组中的元素总是被分配在一片连续的空间,并根据数组的元素类型,为每一元素安排相同长度的存储单元。,C语言程序设计-第6章,7,6)数组元素的表示方法。有两种:,下标表示:,应是可求值的,例如:a = gradesi+j;,指针表示:也是一种常用的表示数组元素的方法,i和j已有确定的值,C语言程序设计-第

4、6章,8,6.2.2 数组名与指针,我们考虑下面的例子: int a100; int *p; 则下面两个赋值表达式不但是合法的,而且它们的结果也是一样的: p = &a0 p = a,(3)两者所能施加的运算也不尽相同。例如: a+ /* 非法 */ p+ /* 合法 */,(1)数组名a是一个常量,它表征的实体是一种数据结构;指针p是一个变量。,(2)数组名a的值不可改变,即数组名不是左值;指针p的值可以更新,即指针是左值。,C语言程序设计-第6章,9,6.2.3 一维数组的初始化,初始化规则: 依序枚举赋值; 剩余的元素被自动初始化为0。,int a5 = 1,3,5,7,9; float

5、 x100 = 0.0 ;,有些编译器允许用逗号表示相应数组元素的初值为0,就像下面的例子那样: int a5 = ,2,8;,考虑下面这几个定义语句: char aStr1 = “Hello“; char aStr2 = H, e, l, l, o, 0 ; char aStr3 = H, e, l, l, o ; char *psz = “Hello“;,C语言程序设计-第6章,10,6.2.4 引用数组元素,C语言对数组下标没有提供安全措施,程序员要承当起确保下标不越界的全部责任和因为下标越界所产生的一切后果。,int a5 = 1,2,3,4,5; for( k = 0; k 6; k

6、+ ) ak += ak; printf(“a%d = %dn“,k,ak); ,输出结果为: a0 = 2 a1 = 4 a2 = 6 a3 = 8 a4 = 10 a5 = 一个不确定的值,#include int main() float a = 22.2, 44.4, 66.6; float r = 11.1; printf(”r = %fn”,r); a3 = 88.8; /* a3不是数组a的元素 */ printf(”r=%fn”,r); ,这个程序的输出结果可能是: r=11.1 r=88.8,C语言程序设计-第6章,11,6.3 数组排序,简单选择排序(Simple Sele

7、ction Sort)法的排序过程如下:, 49 38 65 97 76 49 13 27, 13 38 65 97 76 49 49 27, 13 27 65 97 76 49 49 38, 13 27 38 97 76 49 49 65, 13 27 38 49 76 97 49 65, 13 27 38 49 49 97 76 65, 13 27 38 49 49 65 76 97, 13 27 38 49 49 65 76 97,C语言程序设计-第6章,12,简单选择排序的算法: E1:准备 将a0,a1,an-1置于数组a中,令i = 0; E2:判断排序是否完成 如果i = n-1

8、,则排序完成,算法结束; E3:选择第i个最小分量并交换位置 E3.1 从ai,ai+1,an-1中选择出最小分量,设为ak, E3.2 将ai与ak交换; E4:继续排序 i = i+1,转E2。,以上算法,可用如下程序段实现: for( i = 0; i n-1; +i ) k = i; for( j = i+1; j n; +j ) if( aj ak ) k=j; if( k!=i ) temp = ak; ak = ai;ai = temp; ,C语言程序设计-第6章,13,6.4 多维数组,维数大于1的数组称为多维数组。应用最广泛的是二维数组。,二维数组最根本的用途之一来自矩阵。考

9、虑以下的34矩阵: 5 8 16 60 10 0 -9 22 0 12 0 6,矩阵中的一个元素Mi,j,在C语言中,用Mij来表示,但行列的计数自动从0开始。,C语言程序设计-第6章,14,6.4.1 多维数组的存储结构,多维数组的定义与一维数组类似。例如: int a5; /* 一维,共5个元素 int b45; /* 二维,共45个元素 int c345; /* 三维,共345个元素,下面给出int a33各元素在逻辑空间和物理存储空间的位置。,C语言程序设计-第6章,15,int a33逻辑空间:,a00,a01,a02,a10,a11,a12,a20,a21,a22,a0,a1,a2

10、,a00,a01,a10,a02,a20,&a00,a1,a2,int a33物理存储空间(行主序原则):,a,a0,C语言程序设计-第6章,16,我们可以将a33看成是一个一维数组,它有三个元素a0、a1和a2,它们中的每一个又是一个一维数组。即把二维数组a33分解为三个一维数组,其中,a0,a1和a2是这三个一维数组的数组名,它们都是地址常量,分别代表这三个一维数组在存储空间的首地址。 根据以上分析,可推知: a = a0 = &a00 a1 = &a10 a2 = &a20,C语言程序设计-第6章,17,6.4.2 多维数组的初始化,1按行赋值。将每一行元素作为一个赋值单位,一对花括号内

11、的数据对应一行元素。例如; int a34=0,1,2,3,10,11,12,13,20,21,22,23;,初始化后各元素的值为: a00=0, a01=1, a02=2, a03=3; a10=10, a11=11, a12=12, a23=13; a20=20, a21=21, a22=32, a33=33.,2. 将所有数据写在一个花括号内,按数组元素排列的顺序对各元素赋值。例如: int a34=0,1,2,3,10,11,12,13,20,21,22,23; 其效果与上面的相同。,初始化方法:,C语言程序设计-第6章,18,3可以只对部分元素赋初值,无初值对应的元素自动取0值或空字

12、符。例如: int a34=1,10,11,20; 则a00=1; a10=10, a11=11; a20=20,其余元素取0值。,4如果给数组的全部元素或部分元素赋初值,可以不指定第一维的大小,但其它维的大小必须指定,第一维的大小由系统根据初值数目及其它维的大小决定。例如: int a3=1,2,3,4,5,6; 等价 int a23=1,2,3,4,5,6;,C语言程序设计-第6章,19,5. 如果需要对某行后面的一些元素赋初值,则必须给其前面的元素赋初值0。如果不需要对某一行赋初值却需要对此行后面的元素赋初值,则该行位置以一对空花括号表示。例如: int a34=0,1,0,0,5; 则

13、 a01=1, a22=5;其余元素为0。,以下程序的运行结果是什么? int main() int a3=1,2,3,4,5,6,0; clrscr(); printf(“%d,%d,%dn“,a11,a21,a31); ,结果:5,0,0,C语言程序设计-第6章,20,在书写多维数组时,一定要把各下标分别用一对方括号括起来。例如,不要误写成: a3,4 问题在于上面这个表达式是完全合法的,编译器不会提供任何信息以指出你的失误。那么它表示什么呢?它就是a4!因为编译器将这对方括号里的内容当作一个逗号表达式来计算。这类失误简直就是一个恶梦。,C语言程序设计-第6章,21,6.5 数组的应用,/

14、* 求Faibonacci数列的前N项 */,#include #define N 45 /* 设N = 45 */,int main() ,int i;,/* 定义循环控制变量 */,long aFibonacciN = 1,1; /* 初始化数列的前两项 */,for (i = 2; i N; i+),/* 生成其余N-2个Faibonacci数 */,aFibonaccii = aFibonaccii-2 + aFibonaccii-1;,for(i = 0; i N; i+) /* 输出结果,每行5个数 */ ,if(0 = i % 5) printf(“n“); printf( “%12ld“, aFibonaccii ); /* 域宽12,长整型ld */ ,C语言程序设计-第6章,22,例6.8 任意输入一个整数n(1n1000)。用筛选法求所有不大于n的全部素数。,具体做法可用如下算法描述:,E1:准备一个筛子aSieveN,预

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

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

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