目录
(2) 连续初始化(按数组排列的顺序将所有数据写在一个花括号{}内)
问题:什么是数组
数组是把具有相同类型的若干变量按有序的形式组织起来的集合
数组的分量(元素):组成数组的每个变量
数组必须先定义后使用
一维数组
1.一维数组的定义
类型说明符 数组名[常量表达式];
常量表达式为数组元素的个数,即数组大小
[ ]中可为普通常量或符号常量,不能为变量
例: int a[5]
1.它表示定义了一个整型的数组,数组名为 a。
2.数组名代表数组在内存中存放的首地址。
3.这里有5个int型的元素,而且它们在内存中所占用的存储空间是连续的
2.一维数组的引用
数组名 [下标]
下标:用来区分数组的每个元素的数字编号,下标必须从 0 开始;
例:数组 int a[10] 中10个元素的引用
a[0] a[1] a[2] a[3] ......a[9]
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
下标可以是常量、变量或者是表达式
例:
数组 int a[10] 中元素的引用
a[1] a[i] a[i+1]
3.一维数组的初始化
(1)给全部元素赋初值
例:
int a[i] ={0,1,2,3,4};
a[0]=0, a[1]=1, a[2]=2, a[3]=3, a[4]=4
(2) 只给部分元素赋初值
例:
int a[5]={0,2,4}; 即 int a[5]={1,2,4,0,0};
a[0]=0, a[1]=2, a[2]=4, a[3]=0, a[4]=0
例:求数组中元素的最大值
#include<stdio.h>
int main()
{
int i,a[5],max;
printf("input 5 numbers:\n");
for(i=0;i<=4;i++)
scanf("%d",&a[i]);
max=a[0];
for(i=1;i<=4;i++)
if(a[i]>max)
max=a[i];
printf("%2d",max);
}
运行结果如下:
二维数组
1.二维数组的定义
类型 数组名 [表达式1] [表达式2];
表达式1:行数
表达式2:列数
例:int a[3][4]
表示数组a 是一个三行四列的
注:
它是按行存放的,二维数组可看成特殊的一维数组
2.二维数组的引用
int a [2] [3];
a[1] [2] =a[0][2]/2 //下标值应在已定义的数组大小范围内
a[2][3] X // 这里下标的最大值分别为1、2, 所以不正确
3.二维数组的初始化
(1) 分行初始化
例:
int [2] [3]={
{1,2,3}
{4,5,6}
};
(2) 连续初始化
int a [2] [3] ={1,2,3,4,5,6}; //按数组排列的顺序将所有数据写在一个花括号{}内
等价于 int a[ ] [3] = {1,2,3,4,5,6};
(3)部分初始化
int a [2] [3] ={{1},{0,5}} ;
则该数组赋值后的各元素的值为:
1 0 0
0 5 0
//未赋值的元素会自动取0值
4.二维数组的输入输出
二维数组的输入输出是通过对二维数组的每个元素的输入输出实现的
二维数组的输入输出方法示例:
通过双重循环按行列逐个输入、输出
for (i=0;i<r;i++)
for (j=0;j<c;j++)
a [i] [j]
例:二维数组的输入输出
#include<stdio.h>
int main()
{
int i,j,a [3] [4];
printf("input array numbers:\n");
for(i=0;i<3;i++)
for (j=0;j<4;j++)
scanf("%d" ,&a [i] [j]);
printf("output array numbers:\n");
for (i=0;i<3;i++)
{
for (j=0;j<4;j++)
printf("%d ",a [i] [j]);
printf("\n");
}
return 0;
}
运行结果如下:
字符数组
1.字符数组的定义
char 数组名 [常量表达式]
如:char a[5]
该数组元素为: a[0],a[1],a[2],a[3],a[4]
每一个元素的值为一个字符,每一个存储单元为一个字节
2.字符数组的初始化
(1) 逐个元素初始化
例:
char c[10]={'a', 'b', 'a', 'n', 'd', 'o', 'n'};
这里元素个数不能大于数组长度,该数组中,这些字符被赋给数组中前面的元素,其余的元素则自动定为空字符,即'\0'
如下表:
a b a n d o n \0 \0 \0 如果元素个数=数组长度,则在定义时可省略数组长度
(2)用字符串来初始化字符数组
例:
char a[11]={ "Hello Word"}
H e l l o W o r d \0
(3)定义和初始化一个二维字符数组
char a [2] [2]={
{'a', 'b'},
{'b' ,'c'}};
3.字符数组的输入输出
(1)用格式符"%c"逐个输入和输出数组中的字符
例:
char a[10];
scanf("%c",&a[0]); //输入字符串
printf("%c",a[0]); //输出字符串
(2) 用格式符"%s"以字符串形式输入输出
例:
char a[5] ="12345";
printf("%s",a);
注:1.输入字符串时,遇到空格键或回车键结束输入,并且所读入的字符串不包含空格键或回车键,而是在字符串末尾添加'\0'
2.输入多个字符串,输入时应以空格键或回车键作为字符串间的分隔
例:
#include <stdio.h>
#include<string.h>
int main(){
char a[]="123\0\n";
char b[]="123\00abc\n";
printf("%s长度是%d占%d字节\n",a,strlen(a),sizeof(a));
printf("%s长度是%d占%d字节\n",b,strlen(b),sizeof(b));
return 0;
}
运行结果如下: