> 文章列表 > 2023-04-22 学习记录--C/C++-数组

2023-04-22 学习记录--C/C++-数组

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、各数组元素之间用逗号隔开。

(二)、举例

2023-04-22 学习记录--C/C++-数组

需求 🎀:对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;
}

2023-04-22 学习记录--C/C++-数组

二、定义二维数组 ⭐️

(一)、初识

格式 🌈:数组元素类型 数组名[数组行数][数组列数];
写法 ✍🏻:比如定义一个含 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

(二)、举例

2023-04-22 学习记录--C/C++-数组

example1 🎈

2023-04-22 学习记录--C/C++-数组

#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;
}

2023-04-22 学习记录--C/C++-数组

example2 🎈

2023-04-22 学习记录--C/C++-数组

#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;
}

2023-04-22 学习记录--C/C++-数组

三、定义字符数组 ⭐️

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;
}

2023-04-22 学习记录--C/C++-数组

方法二、整体输出【推荐】

格式 🌈: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;
}

2023-04-22 学习记录--C/C++-数组

补充 👁

1、printf里,%c是输出字符串里的某一个字符s%是输出整个字符串
2、无论方法一还是方法二,遇到字符'\\0',该字符及其后面的内容都不会被输出来,比如:👇🏻
2023-04-22 学习记录--C/C++-数组
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;
}

2023-04-22 学习记录--C/C++-数组
2023-04-22 学习记录--C/C++-数组