目录
一、一维数组
1、一维数组的定义和引用
1、一维数组的定义
一维数组用于存储一维数列中数据的集合。其一般形式如下:
类型说明符 数组标识符[常量表达式];
①类型说明符表示数组中所有元素的类型。
②数组标识符表示该数组型变量的名称,命名规则与变量名一致。
③常量表达式定义了数组元素的个数,即数组长度。例如 iArray[5] ,5表示数组中有5个元素,下标从0开始,到4结束。
例如,定义一个数组:
int iArray[5];
代码中的 int 为数组元素的类型,而 iArray 表示的是数组变量名,括号中的5表示的是数组中包含的元素个数。
在数组 iArray[5]中只能使用 iArray[0]、iArray[1]、iArray[2]、iArray[3]、iArray[4],而不能使用iArray[5],若使用iArray[5],则会出现下标越界的错误。
2、一维数组的引用
数组定义完成后,要使用该数组。可以通过引用数组元素的方式使用该数组中的元素。
数组元素的一般形式如下:数组标识符[下标]
例如,引用一个数组变量 iArray 中的第3个变量
iArray[2];
使用数组保存数据:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int iArray[5], index, temp; /*定义数组及变量为基本整型*/
printf("please enter a Array:\n");
for (index = 0; index < 5; index++) /*逐个输入数组元素*/
{
scanf("%d", &iArray[index]);
}
printf("Original Array is:\n");
for (index = 0; index < 5; index++) /*显示数组中的元素*/
{
printf("%d ", iArray[index]);
}
printf("\n");
for (index = 0; index < 2; index++) /*将数组中元素前后位置互换*/
{
temp = iArray[index]; /*元素互换的过充借助中间变量temp*/
iArray[index] = iArray[4 - index];
iArray[4 - index] = temp;
}
printf("Now Array is:\n");
for (index = 0; index < 5; index++) /*转换后的数组再次输出*/
{
printf("%d ", iArray[index]);
}
printf("\n");
return 0;
}
变量 temp 用来实现数据间的转换,index 用于控制循环的变量。
2、一维数组初始化
对于一维数组的初始化可以通过三种方法实现。
1、在定义数组时直接数组元素赋初值
int i,iArray[6]={1,2,3,4,5,6};
该方法是将数组中的元素值一次放在一对花括号中。经过上面的定义和初始化之后,数组中的元素 iArray[0]=1,iArray[1]=2,iArray[2]=3,iArray[3]=4,iArray[4]=5,iArray[5]=6。
#include<stdio.h>
int main()
{
int index; /*定义循环控制变量*/
int iArray[6] = { 0,1,2,3,4,5 }; /*对数组中的元素赋值*/
for (index = 0; index < 6; index += 2) /*隔位输出数组中的元素*/
{
printf("%d\n", iArray[index]);
}
return 0;
}
2、只给一部分元素赋值,未赋值的部分元素值为0
int iArray[6]={0,1,2};
数组变量 iArray 包含6个元素,不过在初始化时只给出3个值。于是数组中前3个元素的值对应括号中出的值,在数组中没有的到值的元素被默认赋值为0。
#include<stdio.h>
int main()
{
int index;
int iArray[6] = { 1,2,3 }; /*对数组中的部分元素赋初值*/
for (index = 0; index < 6; index++) /*输出数组中所有元素*/
{
printf("%d\n", iArray[index]);
}
return 0;
}
3、在对全部数组元素赋初值时可以不指定数组长度
之前在定义数组时,都在数组变量后指定了数组的元素个数。c语言还允许在定义数组时不必指定长度,系统就会根据给定的初始化元素值的个数来定义数组的长度,例如:
int iArray[]={1,2,3,4}
不指定数组的元素个数
#include<stdio.h>
int main()
{
int index;
int iArray[] = { 1,2,3,4,5 };
for (index = 0; index < 5; index++)
{
printf("%d\n", iArray[index]);
}
return 0;
}
3、一维数组的应用
使用数组保存学生姓名
#include<stdio.h>
int main()
{
char* ArrayName[5]; /*字符指针数组*/
int index; /*循环控制变量*/
ArrayName[0] = "WangJiasheng"; /*为数组元素赋值*/
ArrayName[1] = "LiuWen";
ArrayName[2] = "SuYuqun";
ArrayName[3] = "LeiYu";
ArrayName[4] = "ZhangMeng";
for (index = 0; index < 5; index++) /*使用循环显示名称*/
{
printf("%s\n", ArrayName[index]);
}
return 0;
}
二、二维数组
1、二维数组的定义和引用
1、二维数组的定义
二维数组的声明与一维数组相同,一般形式如下:数据类型 数组名[常量表达式1][常量表达式2];
其中,“常量表达式1”称为行下标,“常量表达式2”称为列下标。如果有二维数组 array[n][m],则二维数组的下标取值范围如下:
①行下标的取值范围为 0~n-1。
②列下标的取值范围为 0~m-1。
③二维数组的最大下标元素是 array[n-1][m-1]。
例如,定义一个3行4列的整型数组:
int array[3][4];
上述代码声明一个3行4列的数组,数组名为 array,其下标变量的类型为整型。该数组的下标变量一共有3x4个,即 array[0][0]、array[0][1]、array[0][2]、array[0][3]、array[1][0]、array[1][1]、array[1][2]、array[1][3]、array[2][0]、array[2][1]、array[2][2]、array[2][3]。
在C语言中,二维数组是按行排列排列,即按行顺序存放。
2、二维数组的引用
二维数组元素的引用的一般形式如下:数组名[下标][下标];
二维数组的下标可以是整型常量或整型表达式。
例如,对一个二维数组的元素进行引用:
array[1][2];
上述代码表示的是对 array 数组中第2行的第3个元素进行引用。
不管是行下标还是列下标,其索引都是从0开始的。
2、二维数组初始化
在给二维数组赋初值时,有4种情况:
①可以将所有数据写在一个大括号内,按照数组元素排列顺序对元素赋值。例如:
int array[2][2]={1,2,3,4};
如果大括号内的数据少于数组元素的个数,则系统将默认后面未被赋值的元素值为0.
②在为所有元素赋初值时,可以省略行下标,但是不能省略列下标。例如:
int array[][3]={1,2,3,4,5,6};
系统会根据数据的个数进行分配,一共有6个数据,而数组每行分为3列,可以确定数组为2行。
③也可以分行给数组元素赋值。例如:
int a[2][3]={
{1,2,3},{4,5,6}};
在分行赋值时,可以只对部分元素赋值,例如:
int a[2][3]={
{1,2},{4,5}};
在上述代码中,各个元素中的值为:a[0][0]值为1;a[0][1]值为2;a[0][2]值为0;a[1][0]值为4;a[1][1]值为5;a[1][2]值为0。
④二维数组也可以直接对数组元素赋值。例如:
int a[2][3];
a[0][0]=1;
a[0][1]=2;
使用二维数组保存数据
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a[2][3], b[3][2]; /*定义两个数组*/
int max, min; /*表示最大值和最小值*/
int h, l, i, j; /*用于控制循环*/
for (i = 0; i < 2; i++) /*通过键盘为数组元素赋值*/
{
for (j = 0; j < 3; j++)
{
printf("a[%d][%d]=", i, j);
scanf("%d", &a[i][j]);
}
}
printf("输出二维数组: \n"); /*信息提示*/
for (i = 0; i < 2; i++)
{
for (j = 0; j < 3; j++)
{
printf("%d\t", a[i][j]);
}
printf("\n"); /*使元素分行显示*/
}
/*求数组中的最大元素机器下标*/
max = a[0][0];
h = 0;
l = 0;
for (i = 0; i < 2; i++)
{
for (j = 0; j < 3; j++)
{
if (max < a[i][j])
{
max = a[i][j];
h = i;
l = j;
}
}
}
printf("数组中最大元素是:\n");
printf("max:a[%d][%d]=%d\n", h, l, max);
/*求数组中最小元素及其下标*/
min = a[0][0];
h = 0;
l = 0;
for (i = 0; i < 2; i++)
{
for (j = 0; j < 3; j++)
{
if (min > a[i][j])
{
min = a[i][j];
h = i;
l = j;
}
}
}
printf("数组中最小元素是:\n");
printf("min:a[%d][%d]=%d\n", h, l, min);
/*将数组a转换后存入数组b中*/
for (i = 0; i < 2; i++)
{
for (j = 0; j < 3; j++)
{
b[j][i] = a[i][j];
}
}
printf("输出转换后的二维数组:\n");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 2; j++)
{
printf("%d\t", b[i][j]);
}
printf("\n");
}
return 0;
}
①使用 “\t” 转换字符(横向跳到下一个制表位置)
②使用双重循环比较二维数组中的每一个元素。
③最后将数组转换成3行2列的数组,其中通过循环的控制,将一个数组中元素的数值赋值到转换后的数组中。
3、二维数组的应用
输入任意一个3行3列的二维数组,求对角元素之和。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a[3][3]; /*定义一个3行3列的数组*/
int i, j, sum = 0; /*定义循环控制变量和保存数据变量sum*/
printf("please input:\n");
for (i = 0; i < 3; i++) /*利用循环对数组元素进行赋值*/
{
for (j = 0; j < 3; j++)
{
scanf("%d", &a[i][j]);
}
}
for (i = 0; i < 3; i++) /*使用循环计算对角线的总和*/
{
for (j = 0; j < 3; j++)
{
if (i == j)
{
sum = sum + a[i][j]; /*进行数据的累加计算*/
}
}
}
printf("the result is :%d\n", sum); /*输出最后的结果*/
return 0;
}
三、字符数组
1、字符数组的定义和引用
1、字符数组的定义
字符数组的定义与其他数据类型的数组定义类似,一般形式如下:char 数组标识符[常量表达式]
例如定义一个数组 cArray:
char cArray[5];
其中,cArray 表示数组的标识符,5表示数组中包含5个字符型变量元素。
2、字符数组的引用
字符数组的引用与其他类型数据引用一样,也是使用下标的形式。例如,引用上面定义的数组 cArray 中的元素。
cArray[0]='H';
cArray[1]='e';
cArray[2]='l';
cArray[3]='l';
cArray[4]='o';
2、字符数组初始化
1、逐个字符赋给数组中各元素
这是最容易理解的初始化字符组的方式。例如,初始化一个字符数组:
char cArray[5]={'H','e','l','l','o'};
使用字符数组输出一个字符串。
#include<stdio.h>
int main()
{
char cArray[5] = { 'H','e','l','l','o' }; /*初始化字符数组*/
int i; /*循环控制变量*/
for (i = 0; i < 5; i++) /*进行循环*/
{
printf("%c", cArray[i]); /*输出字符数组元素*/
}
printf(&