数组的定义
一组数据的集合,用于储存大批量相同数据类型的数据
一维数组
基本格式
数据类型 数组名 [数组大小]
使用
数组名[下标]
int score[50];
score[0] = 80;
score[1] = 85;
//……
score[49] = 75;
//score[50]:数组访问越界,从0开始,个数为50个
float f[10];
f[1] = 1.1;
f[2] = 2.2;
特点
- 是一组有序数据的集合
- 用一个数组名和下标来唯一地表示数组中的每个元素
- 数据中的每个元素都是属于同一数据类型。不能把不同数据类型的数据放在同一个数组
数组的初始化
int score1 = 80;//初始化赋值
int score2 = 83;
int score3 = 76;
int score6;
score6 = 66;//赋值
//int score……;
printf("%d\n", score1);
int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
//使用初始化列表方式给数组初始化赋值
printf("%d\t%d\t%d\t", arr1[0], arr1[1], arr1[9]);
int arr2[8] = { 0,1,2,3,4,5 };
//可以只给部分元素初始化赋值,从下标为0开始赋值,没有赋值元素默认为0
printf("%d\t%d\t%d\t", arr2[0], arr2[1], arr2[9]);
int arr3[] = { 1,2,3,4,5,6 };
//int arr3[];
//定义数组时必须给定数组大小
//int arr4[n];//给定的数组大小必须为整型常量,不能是变量,也不能是小数
int arr5[] = { 1,2,3,4,5,6 };
//初始化列表方式给定数组大小,根据列表数据个数决定数组大小
输入输出
int arr6[10] = { 0 };
//所有数组元素初始化为0,
// 没有初始化的数组,元素储存的是乱数据
//可以循环输入输出数组元素
for (int i = 0; i < 10; i++)
{
printf("%d\t", arr6[i]);//使用循环变量i控制数组下标改变
}
putchar('\n');
for (int i = 0; i < 10; i++)
{
scanf("%d", &arr6[i]);
}
for (int i = 0; i < 10; i++)
{
printf("%d\t", arr6[i]);//使用循环变量i控制数组下标改变
}
putchar('\n');
二维数组
基本格式
数据类型 数组名 数据行列
/二维数组:相当于多个一维数组的组合
float f[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
//定义一个3行4列二维数组f,并给每个元素赋值
printf("%f\t%f\t%f\t%f\n", f[0][0], f[0][1], f[1][0], f[2][3]);//1,2,5,12
//二维数组内存大小=单个数组元素大小*行数*列数
printf("%d\t", sizeof(f));//48
赋值
int arrs1[4][5] = { 0 };//全部赋值
int arrs2[3][4] = { 1,2,3,4,5 };//给部分元素赋值
int arrs3[3][4] = { {1,2,3,4},
{5,6,7,8},//每一行分别赋值
{9,10} };//每一行部分元素赋值
int arrs5[][4] = { {1,2,3,4},
{5,6,7,8}, {9,10} };//初始赋值行下标可省略,列下标不能省略
双重循环输入
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; i++)
{
scanf("%d\t", f[i][j]);//双重循环输入
}
}
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; i++)
{
printf("%d\t", f[i][j]);//双重循环输出
}
putchar('\n');
}
字符数组
用来存储字符数据的数组,一个元素存放一个数组
//字符数组:字符类型数组
char ch [10] = { 'a','h',',','\\','1','5' };
ch [8] = 's';
char s[20] = "abcdefg123456!@#";
s[10] = '\n';//把第10个改为回车
for (int i = 0; i < 20; i++)
{
//printf("%c", s[i]);
putchar(s[i]);
}
printf("%s", s);//以%s格式整体输出整个字符串
scanf("%s", s);//以%s格式输入整个字符串
//以字符串格式输入不用带&
printf("%s", s);//以%s格式整体输出整个字符串
//以字符串格式输出不用带&
gets(s);//gets为字符串输入函数
puts(s);//puts为字符串输出函数
//char str[10] = "abcdefghij";所以要少一位
char str[10] = "abcdefghi";
puts(str);
char strl[6] = "";//"\0"初始化为空字符串
//字符串需要以'\0'作为结束标志(ASCLL码为0)
// 字符串处理总是会以'\0'作为结束
//二维字符数组
char strs[5][10] = { "abcdefg","123456","!@#$%^","_+()" };
for (int i = 0; i < 5; i++)
{
puts(strs[i]);
}
//一个中文占两个字符位置
常用字符串处理函数
/strlen:求字符串长度函数
printf("%d\n", strlen(strl));//6
printf("%d\n", sizeof(strl));//20
printf("%d\n", strlen("abcdefg"));//7
printf("%d\n", sizeof("abcdefg"));//8
//strlen只计算有效字符的个数,不会计算'\0'
//sizeof计算所有字符个数,会计算'\0'
//strcat:字符串连续函数
char str1[20] = "abcdefg", str2[10] = "123456";
puts(str1);
puts(str2);//将str2连接到str1中
strcat(str1,str2);
puts(str1);
puts(str2);
//strcpy:字符串拷贝函数(复制字符串)
char str1[10] = "", str2[10] = "";
gets(strl);
gets(str2);
puts(strl);
puts(str2);
strcpy(str1, str2);
puts(strl);
puts(str2);
//strcmp:字符串比较函数(比较两个字符串的大小)
char str1[10] = "", str2[10] = "";
gets(strl);
gets(str2);
puts(strl);
puts(str2);
printf("%d\n", strcmp(str1, str2));
/*
比较规则:
第一个大于第二个 返回1
第一个小于第二个 返回-1
等于 0
比较原理:ASCLL码字符大小
第一个不同的字符的比较大的字符串就大,反之小
*/