合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻
一、定义一维数组 ⭐️
(一)、初识
格式 🌈:
数组元素类型 数组名[数组元素个数];
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列的二维数组a
int 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列的二维数组a
int 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; // 第一位为空格,单词数为0
for (i = 0; c[i] != '\0'; i++)
if (c[i] == ' ' && c[i + 1] != ' ' && c[i + 1] != '\0')
num++; // 单词数加1
/** 输出结果 */
printf("有%d个单词\n", num);
/** 程序正常运行结束 */
return 0;
}