个人主页:天寒雨落的博客_CSDN博客-C,CSDN竞赛,python领域博主
💬 刷题网站:一款立志于C语言的题库网站蓝桥杯ACM训练系统 - C语言网 (dotcpp.com)
特别标注:该博主将长期更新c语言内容,初学c语言的友友们,订阅我的《初学者入门C语言》专栏,关注博主不迷路!
目录
类型说明符 数组名[常量表达式][常量表达式];
例如:
int n[2][3];
表示定义了一个两行三列的数组a,分别是n[0][0]、n[0][1]、n[0][2]、n[1][0]、n[1][1]、n[1][2],跟一维数组一样,行列下标都是从0开始的,比如元素a[1][2]表示的是二行三列的元素。
int n[2][3]={1,2,3,4,5,6};
对比int n[3];我们可以把二维数组理解为一维数组的数组,一维数组只有一行,二维数组有多行,a[2][3]可以看为两个元素,每个元素都是长度为3的一维数组,所以n[2][3]的赋值可以写成
int n[2][3]={{1,2,3},{4,5,6}}
{}里的每一个{}都是一个一维数组。
当然,一维数组里的元素不一定全部赋值,二维数组里的一维数组也是如此,可以只对其部分元素赋值,例如:
int n[2][3]={{1,2},{3}};
另外,二维数组行的常量表达式是可以省略,也就是
int n[][3]={1,2,3,4,5,6};
等价于
int n[2][3]={1,2,3,4,5,6};
一维数组只有一行只需要用一个for循环控制列就可以而二维数组有多行,需要用两个for循环分别控制行和列
代码:
- #include "stdio.h"
-
- int main() {
- int n[2][3] = {1, 2, 3, 4, 5, 6};
-
- for (int i = 0; i < 2; i++) {
- for (int j = 0; j < 3; j++) {
- printf("%-2d", n[i][j]);
- }
- }
-
- return 0;
- }
执行结果:
前面说过%3d:输出所占的格子(向右对齐),比如输出数字,前面就空3-1=2个空格。
那么%-2d就输出所占的格子(向左对齐),空2-1=1个空格
输出n行杨辉三角
行数与列数相等,所以在控制列数的循环变量小于等于行数循环变量即可输出我们想要的(行数循环变量小于n)。
j==0和i==j时为1,其他位置的数都为上面的数+左上的数,在两个for循环语句里增加一个if语句判断其是否满足j==0和i==j这个条件如果满足就赋值1,如果不满足就赋值其上面的数+左上的数。
需要注意的是一行循环完了需要换行,则就需要在两个for循环语句之间,最后面加一个换行语句。
- #include "stdio.h"
-
- int main() {
- int n;
- scanf("%d", &n);
- int a[n][n];
-
- for (int i = 0; i < n; i++) {
- for (int j = 0; j <= i; j++) {
- if (j == 0 || i == j) {
- a[i][j] = 1;
- printf("%-3d", a[i][j]);
- } else {
- a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
- printf("%-3d", a[i][j]);
- }
- }
-
- printf("\n");
- }
-
- return 0;
- }
数组的长度只能是常数或常量表达式不能是变量,数组是通过下标给元素标号的,行列下标初始值均为0,二维数组的本质就是一维数组,把一维数组掌握了,二维数组也就自然会了!
各位C语言的初学者有问题随时都可以问我,随时为您解惑!!!
👍+✏️+⭐️是对博主最大的鼓励与支持!!!