数组
数组是存储数的容器,必须先定义后使用
一维数组
定义格式
元素类型名 数组名[元素数]={元素}
- 元素类型名定义该数组存放的元素类型
- 方括号内是元素个数
例如
int a[10]={1,2,3,4,5,6,7,8,9,10}
表示该数组中有十个元素,a[0].a[1]…a[9]
数组是从0开始
如果捆好内不写元素数,系统也会根据花括号内的元素个数自动确定元素数
不可以对数组整体赋值
用输入函数对数组赋值时,必须要加&
#include<stdio.h>
main()
{
int i,a[10];
for(i=0;i<10;i++)
{
printf("请输入第%d个数",i);
scanf("%d",&a[i]);
}
}
二维数组
二维数组的定义
格式
元素类型名 数组名[行数][列数]={元素初值}
- 元素类型名同一维
- 数组名同标识符
- 行数 列数 元素初值自行定义
int a[2] [3]={{1,2,3},{4,5,6}}
int a[2] [3]={1,2,3,4,5,6}
上述两种表达的效果一样为2行3列的二维数组,花括号里面的花括号是按行进行赋值,如果不分组则系统会根据自行赋值
初值不够时,系统自动加0
定义时,行数可以省略,系统会根据初值判断行数
二维数组是优先按行存放
二维数组的引用
与一维数组的引用一样,下标从0开始排列,在引用数组变量之前,必须先定义该数组,不可整体给数组赋值
字符型数组
字符型数组的定义与使用
定义格式
char 数组名[元素数]={元素初值列表}
- 初始化时如果元素初值列表给出的字符数小于定义的元素数,则后面会自动补齐ASCII码为0的字符‘\0’,在字符串处理中字符‘\0’作为字符串结束符
- 可以去掉定义时的元素数,用元素初值列表中的元素个数来定义元素数,这种情况下后面不会自动加字符串结束符
- 定义的元素数一定要大于实际使用的长度
字符数组的输入与输出
用scanf()和printf()输入和输出字符数组时,有如下两种格式符:
%c–逐个元素输入和输出字符(char)
%s–整体一次性输入和输出字符串(string)
用%c逐个输入与输出
这种方式进行输入时,元素下标在循环中不断变化,逐个输入与输出,输入时要加地址符&
这种方法输入时系统不会自动加‘\0’,也不会检测
用%s整体输入字符串
char c[10];
scanf("%s",c);
- 数组名本身代表该数组的首地址(0号元素地址),所以不加地址符
- 整体输入,系统会在字符串的末尾自动加‘\0’
- 输入多个字符串,用空格隔开。
char a1[10],a2[10],a3[10];
scanf("%s",a1,a2,a3);
如果输入:I am happy!
则三个数组中分别存放 I am happy!
正因为scanf()中空格是多个字符串的分隔符,所以用输入函数输入带空格的字符串时,只有第一个空格前的字符串有效
用%s整体输出字符串
如果数组长度大于字符串长度,则遇到\0结束
如果数组中有多个\0,则遇到第一个就结束
入宫数组中没有\0,则输出时会输出该数组之后的内容,直到遇到第一个\0为止
==只有字符数组可以整体输入与输出,其他类型的数组都不可以
常用字符串处理函数
字符串整行输入函数
-
gets(字符数组)
从键盘将带空格的字符序列全部输入到指定的字符数组中,并自动加字符串结束符。该函数的返回值是字符数组的首地址
char str[20];
gets(str);
字符串整体输出函数
- puts(字符串)
将指定的字符串作为一行输出到终端
char a[ ]={"I am happy"};
puts(a);
puts()输出完自动换行
测字符串长度函数
- strlen(字符串)
返回字符串有效长度,不包括\0
char a[20]={123456};
strlen(a);
长度为5
字符串比较函数
- strcmp(字符串1,字符串2)
字符串比较,返回比较结果。对1和2中的字符从左向右逐个按ASCII码值进行比较,直到字符值不相等或遇到\0结束。如果相等,则返回整数0;1大,则返回正整数;2大,返回负整数。
大写字母比相应小写字母ASCII值小32
字符串复制函数
- strcpy(字符数组1,字符串2)
将字符串2包括\0全部复制到1中,字符串2可以是字符串常量或字符数组名,而1只能是字符数组名。此函数返回的是字符数组1的首地址
字符数组1要有足够的长度,以便存放字符串2
不能用=赋值
char a[20];
strcpy(a,"happy");
puts(a);
输出happy
字符串连接函数
- strcat(字符数组1,字符串2)
将字符串2连接到字符数组1后面,字符串2可以是字符串常量或字符数组名,而1只能是字符数组名。此函数返回的是字符数组1的首地址
字符数组1要有足够的长度,以便存放字符串2
连接时1后的\0被覆盖,两个字符串连接为一个,在字符数组中只保留新字符串后的\0
char a[20]={I am very};
puts(strcat(a,"happy"););
输出I am very happy
加油