(1)在C语言中,变量类型除了几种基本类型之外,还有另外一些复杂类型,合称为构造类型。
(2)构造类型:是由基本类型构造而成的(如数组、结构体、共同体、枚举型)。
(3)构造类型的每一个分量是一个变量,它可以是一个简单类型或者构造类型。
(4)构造类型的分量的使用方法与简单变量相同
(5)构造类型的分量占用相邻的存储空间。
(6)对于构造类型的变量来说,重点是访问其分量的方法。
(1)用一符号名(数组名)来表示这一组数
(2)用数组名后跟下标来唯一地确定数组中的元素
(3)数组的首地址、数组元素的类型和个数(数组长度)
定义方式: 数据类型 数组名[常量表达式]
【1】数组的命名规则和简单变量名相同
【2】数组名后只能用方括弧括起来的常量表达式(常量和符号常量)
【3】常量表达式的值确定数组元素的个数(数组尺寸)
c编译程序中用连续的内存单元存放 各个元素
保存数组所需内存量与数组元素的基本类型和数组大小有关
总字节数 = sizeof (基本类型) * 数组元素个数
数组必须先定义,后引用
只能逐个引用数组元素,不能一次引用整个数组。
引用一维数组元素的一般形式: 数组名 [下标]
其中:下标可以是整型常量或整型表达式
注:标准C只有静态存储(static)数组和外部存储(extern)数组才能初始化,但Turbo C和Microsoft C的编译系统中,中的数组与外部存储数组均可以进行初始化。
注:对static数组不赋初值,系统会对所有数组元素自动赋以0值
注意:编译系统根据初值个数确定数组大小,若被定义数组长度与提供初值的个数不相同,则数组长度不能省略。
ps:起泡法的思路是:将相邻两个数比较,将小的调到前头
1.要排序的数必须放入数组中2.用二重循环控制排序过程 1)外循环j控制比较趟数(n-1趟) 2)内循环i控制一趟比较的次数(n-j次)
在C语言中,数组的元素还可以是数组,这样就构成二维数组,所以二维数组可以看成是“数组的数组”,依此类推,还可以构成三维数组,思维数组(称多维数组)等等,二维数组是多维数组中最简单,最常用的数组,它代表多维数组的基本特征。
定义方式: 类型说明符 数组名[常量表达式][常量表达式]
二维数组从概念上可理解为行-列矩阵,但存储器是一维的,需按一定规则转换,在内存中:二维数组中元素排列的顺序是——按行存放。
数组元素的实际存放顺序是右边下标比左边下标变化的快
形式: 数组名[下标][下标]
注意:
【1】下标是整型或字符型的常量,变量或表达式。(定义时不能使用变量)如: a[1][2] a[i][j]
【2】数组元素可出现在表达式中,如: a[1][2]=a[2][2]/2
【3】使用数组元素时,应注意不要超出其定义的范围,即要注意数组定义和数组元素引用的区别。
如: int a[2][3]; a[2][3]=5; -->a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
注:不能省略第二维的长度
一般二维数组的处理用二重循环来实现,用循环变量的值控制数组元素的下标,外循环控制行,内循环控制列。
转置的算法:
1.a数组初始化(或赋值)并输出2.用二重循环进行转置 b[j][i]=a[i][j]3.输出b数组
在C语言中,没有专门的字符串变量,而是将字符串存入字符数组来处理,即用一个一维数组来存放一个字符串,每个元素存放一个字符,字符数组是数组的一个特殊情况,它的定义方法与一般的数组类似,引用方法可以相同,但也有其独特的引用方法。
形式: char 数组名[常量表达式] 一维字符数组:存放一个字符串(每个数组元素存放一个字符)
char 数组名[常量表达式][常量表达式] 二维字符数组:存放多个字符串(行数是字符串的个数)
常量表达式:整数、字符、符号常量
注:可以用整型数组存放字符型数据,但浪费存储空间
注:
[1] static char c[10]; 则c[0]……c[9]初值均为‘\0’。 但若 char c[10]; 则c[0]……c[9]初值是未知的
[2] 在C语言中,将字符串作为字符数组来处理,即用一个一维数组来存放一个字符串。
[3] 为了测定实际字符串长度,C语言规定了一个“字符串结束标志”,即‘\0’。即遇到字符 ‘\0’时,表示字符串结束。
注:以字符串方式赋值时,必须保证数组元素个数>=字符个数+1(字符串后面自动加上一个‘\0’)
数组初始化后,剩余的元素均为\0
数组未初始化,则static数组 元素的值为\0,否则元素值是随机的
注:[1] 用字符串给字符数组赋初值,系统自动加上空字符‘\0’(终结符)
[2] ‘ ’——空格字符,ASCII编码值为32
[3] ‘\0’——空字符,ASCII编码值为0
[4] 两者均无法直接打印
对于字符数组,在程序中既可以逐个引用字符串中的单个字符(数组元素),也可以一次引用整个字符串(数组)
其它注意事项:
0_1>数组中有多个‘\0’时, 遇第一个结束
0_2>scanf中%s输入时,用字符数组名,不要加&,遇空格或回车结束,自动加‘\0’
从键盘输入一个字符串(以回车结束)放到数组中,并且得到一个函数值,该函数值是字符数组的起始地址
如:get (str)
将数组中的字符串(以‘\0’结束的字符序列)输出到终端上,输完换行
将字符串 / 字符数组2的字符串拷贝到字符数组1中
注:
(1)字符数组1的长度 >= 字符数组2(字符串)的长度
(2)拷贝时连同‘ \0 ’一起拷贝
(3)不能把字符串或字符数组直接赋给一个字符数组
将字符串或字符数组2,连接到字符串1的后面,并放在字符数组1中
注:数组1要足够大
功能:比较两个字符串,1>2->正数,1=2->0,1<2->负数
注意:对两个字符串的比较,不能用以下形式(str1==str2或str1>str2或str1<str2)
只能用 strcmp(str1,str2) >0 或 ==0 或 <0来判断