数组的定义
一组数据的集合,用于储存大批量相同数据类型的数据
一维数组
基本格式
数据类型 数组名 [数组大小]
使用
数组名[下标]
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'); } 2.
字符数组
用来存储字符数据的数组,一个元素存放一个数组
//字符数组:字符类型数组 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码字符大小 第一个不同的字符的比较大的字符串就大,反之小 */