数组和C风格字符串.doc_第1页
数组和C风格字符串.doc_第2页
数组和C风格字符串.doc_第3页
数组和C风格字符串.doc_第4页
数组和C风格字符串.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本章主要内容如下:C语言数组:一维、二维C语言风格字符串:字符串处理函数1.1 数组的引入C语言中的数据类型除了前面的章节我们介绍的基本类型(如整型、字符型等)外,还有一种称为构造类型。数组就是构造类型的一种,它是由一组数目固定、类型相同的若干个数据构成的有序集合,在内存中连续存放。数组中的每一个数据称为一个元素,通过数组名和下标来访问。那么为什么需要数组?在解决一些实际的问题中,我们往往需要面对成批的数据。如:要求输入全班50个学生某一门课程的成绩,计算并输出全班学生的平均成绩,同时统计并输出低于平均成绩的人数。在解决这类问题时,如果仍然用基本数据类型来处理,由于在计算平均成绩时要用到每个学生的成绩,在统计低于平均成绩的学生人数时,又要用到每个学生的成绩,这样就必须定义50个变量来保存50个学生的成绩。这样无疑增加了程序的复杂度和代码量。所以我们需要引入数组,它是学生成绩的集合,可以用数组名和下标访问每一个学生的成绩。1.2 一维数组概念:一维数组也称向量,用以组织具有一维顺序关系的一组同类型数据定义格式:类型 数组名常量表达式; 类型可以是int, float, char以及后面的指针、结构体、共用体等。Eg: int age10; 这样,编译器将一次性开辟10个存放int类型的连续的内存空间,就不用定义10个int类型的变量。初始化:类型 数组名常量表达式=值1,值2,值3.值n; eg: int age10 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10;使用:一维数组中元素的引用方式:数组名下标。下标的值表示元素在数组中的位置。C语言规定任何数组的下标都是从0开始的。Eg:int age5;表示age有5个元素,这5个元素分别为age0、age1、age2、age3、age4。不要去访问age5,因为会出现下标越界的错误。通常针对数组进行操作时,最有效的途径是使用循环结构。(参见代码Example1)注意事项:除了在定义数组时可以用初始化列表为数组整体赋值之外,其他地方不能对数组整体赋值。在对数组的所有元素赋初值时,可以在定义数组的时候不指定元素的个数。Eg:int a5 = 3, 0, 4, 9, 6; 等价于int a = 3, 0, 4, 9, 6;系统在编译程序时,根据初值的个数确定元素的个数,并为它分配相应大小的空间。如果没有为数组变量赋初值,则在定义数组变量的时候不能省略数组的大小。Eg: int a;这是错误的。对数组的部分元素赋初值,常量表达式的个数小于数组中元素的个数,未指定的数组元素自动变为0。eg: int a5 = 3, 4, 5; 等价于 int a5 = 3, 4, 5, 0, 0;1.3 二维数组概念:二维数组的数据结构是一个二维表,相当于数学中的矩阵。定义格式:数据类型 数组名常量表达式1常量表达式2; eg: int a34;表示3行4列的矩阵,总共12个元素,每一个元素都是整型数据。二维数组在内存中是按行的顺序存储的,即先存放第0行的各列数据,再存放第1行的,以此类推。初始化:eg: int a34 = 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 = 2, 5, 6, 14, 0, 12; 等价于 int a34 = 2, 5, 0, 0, 6, 0, 0, 0, 14, 0, 12, 0; 还可以省略一维大小int a23 = 3, 4, 5, 6, 8, 9; 等价于 int a3 = 3, 4, 5, 6, 8, 9;第二维的大小不能省略。使用:数组名下标1下标2;下标1为行下标,下标2为列下标。(参见代码Example2)1.4 字符数组字符数组是用来存储字符型数据的数组,数组的每一个元素存储一个字符型数据。字符数组的定义并初始化:char a5 = C, h, i, n, a;字符数组在定义时只对部分元素进行初始化,则未赋初值的元素默认的初值是0。(参见代码Example3)1.5 C风格字符串在C语言中没有字符串变量的概念,我们通常是利用字符数组或者指针来存储字符串。编译器把每个字符串理解为一个以0(ASCII为)为结束符的一维字符数组,这种类型的字符数组常被称为C风格字符串。声明一个C风格字符串,其内容为“I Love C+!”,代码如下:char str=I, ,L,o,v,e, ,C,+,+,!,0;上述代码在声明数组时没有指定大小,这样,编译器就会自行计算决定数组的大小。对于C风格字符串的声明,推荐采用这种方式,免去了程序员自行计数的麻烦,如果由程序员指定的数组太小,编译器会报错,太大的话就浪费空间。但若在声明语句中无初始化表达式,则应该指出该字符数组的大小。可以看出,存储一个字符串所需字节数比该串的字符数多1,如存储“Hello”,该串有5个字母,但C风格字符串需要6个字节。而且,上述声明方式看上去很麻烦,要一个字母一个字母地用单引号包裹起来,还要记着后面的0,实际上,C还提供了另一种声明C风格字符串的方法使用字符串常量,如:char str=”I Love C+!”;等价于 char str = “I Love C+!”;字符串的输入:scanf()函数:不能输入包含空格的句子。Eg:char str20; scanf(“%s”, str);当输入How are you时,只能接收到Howgets()函数:能输入完整的句子,弥补了scanf函数不能输入包含空格的句子的不足。输入一行字符时,以Enter键作为结束符。在向字符数组赋值时,自动将n转化为0,作为字符串的结束标志。Eg:char str30; gets(str); 当输入How are you时,可以接受全部。字符串的输出:printf()函数:依次输出字符串中的每个字符直到遇到字符串结束符0。若printf()函数输出项的字符数组中不止一个0,则输出时遇到第一个0就结束。输出字符串后不会自动换行。Eg:char str = “China”; printf(“%s”, str);puts()函数:将一个字符串(以0结束的字符序列)输出到终端。在输出时,将字符串的结束符0自动转化为n, 即输出完字符串之后自动换行。Eg:char str = “China”; puts(str);在使用这些函数的时候,要注意输入缓冲区的问题,详情请参考scanf()getchar()和gets()等函数的注意事项.doc.1.6 C语言风格字符串处理函数头文件包含 #include 1. 字符串复制函数strcpy()char *strcpy( char *to, const char *from );功能:复制字符串from 中的字符到字符串to,包括空值结束符,返回值为指针to。会覆盖掉以前to中的内容。to中一定要能够容纳的下from。2. 字符串连接函数strcat()char *strcat( char *str1, const char *str2 );功能:函数将字符串str2 连接到str1的末端,并返回指针str1。在调用strcat的时候要确保str1的大小能够容纳的下连接完成后生成的新字符串。3. 字符串比较函数strcmp()int strcmp( const char *str1, const char *str2 );功能:比较字符串str1 和 str2。一个字符一个字符的比较。如果str1大于str2,返回值大于0;如果str1等于str2,返回值为0;如果str1小于str2,返回值小于0。4. 求字符串长度函数strlen()size_t strlen( char *str );功能:函数返回字符串str 的长度( 即空值结束符之前字符数目)。注意与sizeof的区别。(strlen求字符串的长度。sizeof求字符串所占用的内存空间

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论