【回顾】C程序设计第六章笔记
C程序设计(谭浩强第五版)第六章笔记

1.为什么采用数组?
①.因为利用数组可以处理批量数据。
②.避免定义很多数据的繁琐。
③.数组可以反映出这些数据间的内在联系
2.一维数组
格式:类型说明符 数组名[常量表达式]
例子:int a[10];
注意:
①.数组元素的下标从0开始,用“int a[10];”定义数组,则最大下标值为9,不存在数组元素a[10]
②.“下标”可以是整型常量或整型表达式。
初始化:
(1) 在定义数组时对全部数组元素赋予初值。
比如:int a[10]={0,1,2,3,4,5,6,7,8,9};
说明:将数组中各元素的初值顺序放在一对花括号内,数据间用逗号分隔。花括号内的数据就称为“初始化列表”。
(2) 可以只给数组中的一部分元素赋值。
比如:int a[10]={0,1,2,3,4};
说明:定义a数组有10个元素,但花括号内只提供5个初值,这表示只给前面5个元素赋初值,系统自动给后5个元素赋初值为0。
(3) 给数组中全部元素赋初值为0。
比如:int a[10]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0};或int a[10]={0};
说明:这里未赋值的部分元素自动设定为0
(4) 在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。
比如:int a[5]={1,2,3,4,5};或int a[ ]={1,2,3,4,5};
说明:如果数组长度与提供初值的个数不相同,则方括号中的数组长度不能省略。
3.二维数组
把二维数组写成行(row)和列(column)的排列形式,可以有助于形象化地理解二维数组的逻辑结构。
格式:类型说明符 数组名[常量表达式][常量表达式]
初始化:
(1)分行给二维数组赋初值。(最清楚直观)
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
(2)可以将所有数据写在一个花括号内,按数组元素在内存中的排列顺序对各元素赋初值。
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
(3)可以对部分元素赋初值。
①.int a[3][4]={{1},{5},{9}};
结构:
1 0 0 0
5 0 0 0
9 0 0 0
②.int a[3][4]={{1},{0,6},{0,0,11}};
1 0 0 0
0 6 0 0
0 0 11 0
③.int a[3][4]={{1},{5,6}};
1 0 0 0
5 6 0 0
0 0 0 0
④.int a[3][4]={{1},{},{9}};
1 0 0 0
0 0 0 0
9 0 0 0
(4)如果对全部元素都赋初值(即提供全部初始数据),则定义数组时对第1维的长度可以不指定,但第2维的长度不能省。
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};=int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
注意:在定义时也可以只对部分元素赋初值而省略第1维的长度,但应分行赋初值。
比如:int a[][4]={{0,0,3},{},{0,10}};
3.字符数组
用来存放字符数据的数组是字符数组。
字符数组的初始化:
对字符数组初始化,最容易理解的方式是用“初始化列表”,把各个字符依次赋给数组中各元素。
比如:char c[10]={′I′,′ ′ ,′a′,′m′,′ ′,′h′,′a′,′p′,′p′,′y′};
说明:把10个字符依次赋给c[0]~c[9]这10个元素
C语言规定了一个“字符串结束标志”,以字符′\0′作为结束标志。
字符数组的输入输出:
(1) 逐个字符输入输出。用格式符“%c”输入或输出一个字符。
(2) 将整个字符串一次输入或输出。用“%s”格式符,意思是对字符串(string)的输入输出。
使用字符串处理函数:
①.puts(字符数组),称作「输出字符串的函数」
作用:将一个字符串(以′\0′结束的字符序列)输出到终端。
注意:
(1).用puts函数输出的字符串中可以包含转义字符。
(2).在用puts输出时将字符串结束标志′\0′转换成′\n′,即输出完字符串后换行。
②.gets(字符数组),称作「输入字符串的函数」
作用:从终端输入一个字符串到字符数组,并且得到一个函数值。该函数值是字符数组的起始地址。
注意:用puts和gets函数只能输出或输入一个字符串。
③.strcat(字符数组1, 字符数组2),称作「字符串连接函数」
作用:作用:把两个字符数组中的字符串连接起来,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的地址。
注意:
(1).字符数组1必须足够大,以便容纳连接后的新字符串。
(2).连接前两个字符串的后面都有′\0′,连接时将字符串1后面的′\0′取消,只在新串最后保留′\0′。
④.strcpy(字符数组1, 字符串2),称作「字符串复制函数」
作用:将字符串2复制到字符数组1中去。
注意:
(1).字符数组1必须定义得足够大,以便容纳被复制的字符串2。字符数组1的长度不应小于字符串2的长度。
(2).“字符数组1”必须写成数组名形式,“字符串2”可以是字符数组名,也可以是一个字符串常量。
⑤.strcmp(字符串1, 字符串2),称作「字符串比较函数」
作用:比较字符串1和字符串2。
字符串比较的规则是: 将两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到′\0′为止。
(1) 如全部字符相同,则认为两个字符串相等;
(2) 若出现不相同的字符,则以第1对不相同的字符的比较结果为准。
规则:
比较的结果由函数值带回。
(1) 如果字符串1与字符串2相同,则函数值为0。
(2) 如果字符串1>字符串2,则函数值为一个正整数。
(3) 如果字符串1<字符串2,则函数值为一个负整数。
注意:
对两个字符串比较不能直接用str1>str2进行比较,因为str1和str2代表地址而不代表数组中全部元素,
而只能用 (strcmp(str1,str2)>0)实现,系统分别找到两个字符数组的第一个元素,然后顺序比较数组中各个元素
的值。
⑥.strlen(字符数组),称作「测字符串长度的函数」
作用:测试字符串长度的函数。函数的值为字符串中的实际长度(不包括′\0′在内)。
转换为大小写的函数:
⑦.strlwr(字符串),称作「转换为小写函数」
作用:将字符串中大写字母换成小写字母。
⑧.strupr(字符串),称作「转换为大写函数」
作用:将字符串中小写字母换成大写字母。
综合①~⑧:
以上介绍了常用的8种字符串处理函数,它们属于库函数。库函数并非C语言本身的组成部分,而是C语言编译系统为方便用户使用而提供的公共函数。不同的编译系统提供的函数数量和函数名、函数功能都不尽相同,使用时要小心,必要时查一下库函数手册。在使用字符串处理函数时,应当在程序文件的开头用#include <string.h>把string.h文件包含到本文件中。
第六章完!