数组
一、数组定义
一维数组:类型说明符 数组名[常量表达式];例如:int a[10]
二维数组:类型说明符 数组名[常量表达式][常量表达式];例如:float[3][4]
多维数组:例如:float a[2][3][4]
字符数组:与一维数组类似
说明
1.不允许对数组的大小做动态定义,即数组的大小不依赖于程序运行过程中变量的值;
2.二维数组中元素排列的顺序是按行存放的,即在内存中先顺序存放第一行的元素,再存放第二行的元素;
3.多维数组元素在内存中的排列顺序:第一维的下标变化最慢,最右边的下标变化最快;
4.字符串作为字符数组来处理,以‘\0’作为字符串结束标志;系统依靠检测‘\0’的位置来判断字符串是否结束;
5.数组名代表该数组的起始地址
二、数组引用
一维数组:数组名[下标]。例如:a[0] = a[5]+a[7]-a[2*3];
二维数组:数组名[下标][下标]。例如:b[1][2] = a[2][3]/2;
字符数组:利用循环来获取。
三、数组的初始化
一维数组
在定义数组时对数组元素赋予初值或部分赋初值
int a[10] = {0,1,2,4,5}
经典例子:Fibonacci数列问题(黄金分割数列或斐波那契数列)
斐波那契数列:从第三项开始,每一项等于前两项的和
二维数组
分行给二维数组赋初值
int a[3][4] = {{1,2,3,4},{5,6,7,8}.{9,10,11,12}}
字符数组初始化
逐个字符赋给数组中各元素
char c[10] = {'I',' ','A','m','','h','a','p','p','y','\0'};或char c[] = "I am happy";(长度为11)
四、字符数组的输入输出
4.1 逐个字符输入输出。(%c)
4.2 将整个字符串一次输入或输出。(%s)
说明
1.输出字符不包括结束字符'\0';
2.用”%s“输出时,printf函数中输出项时字符数组名。例如:char c[] = {"China"}; printf("%s",c);
3.如果一个字符数组中包含多个'\0',则遇第一个'\0'时输出就结束;
4.用scanf函数输入一个字符串。例如:scanf("%s",c);输入多个字符串(char str1[5],str2[2],str3[5];scanf("%s,%s,%s",str1,str2,str3);)
5.如果scanf输入项时字符串数组名,则不用再加地址符&
五、字符串处理函数
5.1 puts函数(可以用printf函数替代,实际使用不多)
puts(字符数组):将一个字符串(以‘\0’结束的字符序列)输出到终端。
5.2 gets函数
gets(字符数组):从终端输入一个字符串到字符数组,并且得到一个函数值(字符数组的起始地址)。
5.3 strcat函数*
strcat(字符数组1,字符数组2):连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的起始地址;
5.4 strcpy和strncpy函数
strcpy(字符数组1,字符数组2):字符串复制函数,将字符数组2 复制到字符数组1中。
strncpy(字符数组1,字符数组2,2):将字符串2中前面n个字符复制到字符数组1中(n=2,但n不能多于字符数组1中的字符个数);
5.5 strcmp函数
strcmp(字符串1,字符串2):比较字符串1和字符串2。对两个字符串自左至右逐个字符相比(按ASCII码值大小比较,直到遇到不同的字符或遇到'\0'为止)。结果如相等,则为0;如大于则为正整数;如小于则为负整数;
5.6 strlen函数
strlen(字符数组):测试字符串长度的函数。函数的值为字符串中的实际长度。
5.7 strlwr和strupr函数:
strlwr(字符串):将字符串中大写字母换成小写字母;
strupr(字符串):将字符串中小写字母换成大写字母;