2023-04-22 学习记录--C/C++-数组
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻
一、定义一维数组 ⭐️
(一)、初识
格式 🌈:
数组元素类型 数组名[数组元素个数];
example1:🎈
- 需求 🍉:定义一个包含
4
个整数
的数组a
- 代码 🍉:
int a[4];
- 收获 🍉:
- 1、数组的下标从
0
开始,所以通过a[0]
、a[1]
、a[2]
、a[3]
来访问数组中的每个整数;- 2、赋值和计算
a[0]=10;
// 将10赋值给数组的第一个元素
a[1]=20;
// 将20赋值给数组的第二个元素
int sum = a[0]+a[1];
// 计算数组中前两个元素的和example2:🎈
- 需求 🍉:定义一个含
2、4、6、8、10
这五位数的数组arr
- 代码 🍉:
int arr[5]={2,4,6,8,10};
- 注意 🍉:
- 1、各数组元素需用
大括号
包裹;- 2、各数组元素之间用
逗号
隔开。
(二)、举例
需求 🎀:对10个数组元素依次赋值为0、1、2、3、4、5、6、7、8、9,并按倒序输出。
/*** 需求:对10个数组元素依次赋值为0、1、2、3、4、5、6、7、8、9,并按倒序输出。*/#include <stdio.h>
int main()
{/** 定义一个一维数组arr */int arr[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};/** for语句 */for (int i = 9; i >= 0; i--)printf("%d\\t", arr[i]); // for语句里只有一行代码时,其大括号可以省略printf("\\n"); // 最后一个输出语句,一定要记得加上换行符(\\n)/** 程序正常运行结束 */return 0;
}
二、定义二维数组 ⭐️
(一)、初识
格式 🌈:
数组元素类型 数组名[数组行数][数组列数];
写法 ✍🏻:比如定义一个含2行3列
整数
的数组a
- 写法一【更推荐】、
int a[2][3]={{1,2,3},{4,5,6}};
- 写法二、
int a[2][3];
a[0][0]=1;
a[0][1]=2;
a[0][2]=3;
a[1][0]=4;
a[1][1]=5;
a[1][2]=6;
- 写法三、
int a[2][3]={1,2,3,4,5,6};
- 结果:👇🏻
- 1 2 3
4 5 6
(二)、举例
example1 🎈
#include <stdio.h>
int main()
{/** 使用变量/常量前必须先定义 */int a[2][3] = {{1, 2, 3}, {4, 5, 6}}; // 定义一个2行3列的二维数组aint b[3][2], i, j; // 定义一个3行2列的二维数组b/** for语句 */for (i = 0; i < 2; i++) // 因为数组a的行数是2,所以第一层循环2次for (j = 0; j < 3; j++) // 因为数组a的列数是3,所以第二层循环3次b[j][i] = a[i][j]; // 将a[i][j]的值赋值给b[j][i]/** 输出结果 */printf("数组b为:\\n");for (j = 0; j < 3; j++) // 因为数组b的行数是3,所以第一层循环3次{for (i = 0; i < 2; i++) // 因为数组b的列数是2,所以第二层循环2次printf("%d\\t", b[j][i]); // for语句里只有一行代码时,其大括号可以省略printf("\\n"); // 每一行内容后加个换行符(\\n)}/** 程序正常运行结束 */return 0;
}
example2 🎈
#include <stdio.h>
int main()
{/** 使用变量/常量前必须先定义 */int a[3][3] = {{1, 2, 3}, {9,8,7}, {-10,10,-5}}; // 定义一个3行3列的二维数组aint i,j,max;/** 赋值 */max = a[0][0]; // 将数组a的第一个元素赋值给max的初始值/** for语句 */for (i = 0; i < 3; i++) // 因为数组a的行数是3,所以第一层循环3次for (j = 0; j < 3; j++) // 因为数组a的列数是3,所以第二层循环3次if(a[i][j]>max)max=a[i][j];/** 输出结果 */printf("最大元素的值为:%d\\n",max); // 最后一个输出语句,一定要记得加上换行符(\\n)/** 程序正常运行结束 */return 0;
}
三、定义字符数组 ⭐️
1、定义格式同前面,只是里面的数组元素是
字符
。
2、比如:【注意:字符用单引号】
- 一维字符数组:
char c[3] = ['H',' ','i'];
// H i- 二维字符数组:
char c[3][3]={{'A',' ','B'},{'C',' ','D'},{'E',' ','F'}};
- A B
C D
E F
四、输出
字符数组 ⭐️
方法一、挨个输出【不推荐】🙅🏻♀️
格式 🌈:
printf("%c",字符);
缺点 💥:比较墨迹,需要搭配一个或多个for
语句,所以不推荐。
example:🎈
需求:定义一个字符串"spare no pains",然后输出这个字符串。
/*** 需求:定义一个字符串"spare no pains",然后输出这个字符串。*/#include <stdio.h>
int main()
{/** 使用变量/常量前必须先定义 */char c[14] = {'s', 'p', 'a', 'r', 'e', ' ', 'n', 'o', ' ', 'p', 'a', 'i', 'n', 's'};int i;/** for语句 */for (i = 0; i < 14; i++)printf("%c", c[i]);printf("\\n"); // 最后一个输出语句,一定要记得加上换行符(\\n)/** 程序正常运行结束 */return 0;
}
方法二、整体输出【推荐】
格式 🌈:
printf("%s",数组名);
或puts(数组名);
example:🎈
需求:定义一个字符串"spare no pains",然后输出这个字符串。
/*** 定义一个字符串"spare no pains",然后输出这个字符串。*/#include <stdio.h>
int main()
{/** 使用变量/常量前必须先定义 */char c[14] = {'s', 'p', 'a', 'r', 'e', ' ', 'n', 'o', ' ', 'p', 'a', 'i', 'n', 's'};/** 方法二、整体输出 */printf("%s\\n",c);// 或者puts(c);/** 程序正常运行结束 */return 0;
}
补充 👁
1、
printf
里,%c
是输出字符串里的某一个字符
;s%
是输出整个字符串
;
2、无论方法一还是方法二,遇到字符'\\0'
,该字符及其后面的内容都不会被输出来,比如:👇🏻
3、好习惯:定义字符数组时,最好在原字符上多加一位字符'\\0'
,目的是避免大项目中重复定义数组后未发现(虽然代码里若定义了同数组名,会有错误提示)。
五、输入
字符数组 ⭐️
方法一、挨个单词
输入【不推荐】🙅🏻♀️
格式 🌈:
scanf("%s%s...",数组名1,数组名2,...);
知识点 📚:scanf
里,当输入的是字符串
时,其前不用加&
符号。
方法二、整句输入【推荐】
格式 🌈:
gets(数组名);
example:🎈
需求:输入一行由空格和单词组成的字符(字符数在80以内),请统计有多少单词。
/*** 需求:输入一行由空格和单词组成的字符(字符数在80以内),请统计有多少单词。*/#include <stdio.h>
int main()
{/** 使用变量/常量前必须先定义 */char c[81]; // 定义一个长度为81的字符型数组(因为最后最好加一个'\\0')int i, num = 1;/** 引导用户输入 */printf("请输入一行由空格和单词组成的字符(字符数在80以内):\\n");gets(c); // 数组c通过用户输入得到/** 逻辑处理 */if (c[0] == ' ')num = 0; // 第一位为空格,单词数为0for (i = 0; c[i] != '\\0'; i++)if (c[i] == ' ' && c[i + 1] != ' ' && c[i + 1] != '\\0')num++; // 单词数加1/** 输出结果 */printf("有%d个单词\\n", num);/** 程序正常运行结束 */return 0;
}