数组
一.数组概念的引出
1.数组
(1)定义:就是有序的元素序列。把有限个类型相同的变量用一个名字命名,用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标
(2)数组元素:组成数组的元素,由数组名和下标进行标识
(3)数组分类:数值数组、字符数组、指针数组、结构体数组等
(4)特点:
a.定长:规定可以存放多少个元素
b.可以用相同的名字加下标的形式引用一系列变量,用下标设计循环
c,数组是顺序存放,但可以随机使用
2.数组的类型
(1)一维数组
例如:int a【10】;
注:长度为10,下标从0到9
(2)二维数组
例如:int a【3】【4】;
注:3行4列,共12个元素,下标从0行0列到2行3列
(3)多维数组
二.一维数组定义和初始化
1,定义形式:数据类型 数组名【元素个数】
注:元素个数不能为变量
2.存储方式:一维数组在定义之后按顺序方式储存
3.数组元素的引用
(1)下标值:从0开始到 元素个数-1 之间的整数
(2)引用形式:数组名【下标值】
注:对元素的引用其下标值不能超过元素个数-1
4.一维数组元素的输入和输出
(1)输入语句:
for(i=0;i<n;i++)
scanf(“%d”,&a[i]);
注:n为数组的元素个数
a[i]每个数组元素可以像变量一样使用
(2)输出语句
for(i=0;i<n;i++)
printf(“%d”,a[i]);
5.一维数组的初始化
(1)对全部元素赋初值
int a[5]={12,34,45,56,67};
等价于:int a[]={12,34,45,56,67};
注:数组所赋初值如果可以决定数组元素的个数,数组的长度在定义时可以省略
(2)给部分元素赋初值
int a[10]={12,4,56};
注:部分元素赋初值数组长度不能省,未赋初值的元素整型为0,字符型为\\0
三.二维数组的定义和使用
1.二维数组的定义形式
数组名【行数】【列数】
说明(1)二维数组的元素个数为行数列数,定义时行数列数只能是整型的常量或常量表达式
(2)二维数组所占空间:行数列数*sizeof
2.二维数组的存储方式
二维数组在c语言中采用行优先存储
3.二维数组元素的引用
(1)引用方式
数组名[行下标][列下标];
(2)行列下标的变化范围
行下标:0到行数-1
列下标:0到列数-1
(3)举例:
若int arr[3][4];
合法:arr[0][1],arr[2][1]等
非法:arr[3][4],arr[1],arr[1][ ]
4.二维数组的数组的输入和输出
循环嵌套
(1)赋初值
eg:int array[2][3]={{45,67,-37},{28,10,92}};
注:每行用大括号括起来,大括号用逗号隔开
eg:int array[2][3]={45,67,-34,28,10,92}
注:所有元素都放在一对大括号中,分行赋值
eg:对每行部分元素赋初值
int array[2][3]={{45},{-34,28}};
注:按行给部分元素赋初值,未赋值的元素为该类型的默认值
eg:提供全部初始值时,行数可以省略
int array[ ][3]={45,67,-34,28,10,92};
注:这种方法的行数需要通过元素的个数和列元素进行测量
不可省略列数
四.字符数组定义和初始化
1.字符数组的定义和初始化
(1)一维字符数组的定义格式:
char 数组名【常量表达式】
(2)一维字符数组的初始化
char str1[10]={‘h’,’e’,’l’,’l’,’o’,’ ‘,’!’};
注:大括号内利用单引号括起来的单个字符方式为数组赋初值,逗号分隔,空格也需要赋值
char str2[10]={“hello!”};
注:大括号内,利用双引号括起来字符串放在大括号中的方式为数组赋初值
char str3[10]=”hello!”;
注:直接利用双引号括起来字符串的方式为数组赋初值
一维字符数组利用字符个数决定长度情况
注:双引号括起来的字符串,系统默认会在最后加一个‘\\0‘,利用%s输出字符数组时是否有’\\0‘输出结果是不同的
2.二维字符数组的定义和初始化
(1)一维数组的定义格式
char str[2][10]={“hello!”,”world!”};
char str[2][10]={{“hello”},{world!”}};
char str[2][10]={{‘a’,’\\0’},{‘b’,’\\0’}};
注;一维数组和二维数组都不能在定义后在进行整体赋值,可以对单个数组元素赋值
例如:char str[10];str=”abc”;不能这么写
3.字符数组的输入和输出
(1)利用printf()和scanf()和%c进行字符数组的输入和输出
for(i=0;i<N;i++)
scanf(“%c”,&s[i]);
for(i=0;i<N;i++)
printf(“%c”,s[i]);
注:接受回车、空格、tab等隐形分隔符,必须输入足够的个数才能结束
(2)利用printf()和scanf()和%s进行字符数组的输入和输出
printf(“input 字符串,回车结束:\\n”);
scanf(“%s”,s);
printf(“字符串输出为:\\n”);
printf(“%s”,s);
注:输入可以接受空格、tab隐形分隔符,但是回车会被处理成’\\0’,表示%s对应的字符数组和字符串输入结束,数组长度的意义不大
(3)利用putchar()和getchar()和%s进行字符数组的输入和输出
printf(“input 字符串,回车结束:\\n”);
while((s[i]=getchar())!=’\\n’)
i++;
printf(“字符串输出为:\\n”);
for(i=0;s[i]!=’\\n’;i++)
putchar(s[i]);
注:人为规定输入输出的结束标志,或者用i的个数变化控制输入输出的结束,可以接受和输出隐形分隔符
(4)利用puts()和gets()和%s进行字符数组的输入和输出(字符串专用)
printf(“请输入字符串,以回车结束:\\n”);
gets(s);
printf(“字符串输出为:\\n”);
put(s);
注:数组长度意义不大


