1. 二维数组不部分初始化问题
char data[][10] = {"hello","world"}; // 二维数组初始化时,列信息可以不给定,行信息必须给定
列信息可以根据实际的字符串个数确定,但是行信息中每个字符串的长度是不确定的,所以不完全初始化时必须给定
2. 求数组占空间大小(sizeof()关键字求变量或类型占空间的大小)
二维数组占空间:sizeof(数据类型) * 行数 * 列数 == sizeof(数组名);
#define N 10 char a[][N] = {"hello","world!"}; int len = 0; len = sizeof(a); //数组占空间大小 int row = 0; row = sizeof(a) / sizeof(char) / N; //有多少行数
char b[3][4] = {{' '}}; //数组初始化 /* b 表示这个二维数组的指针 b[0][0] b[0][1] b[0][2] b[0][3] ---- b[0] 表示第 0 行数据的指针 , &b[0][0] 是第一行第一列元素的指针 b[1][0] b[1][1] b[1][2] b[1][3] ---- b[1] 表示第 1 行元素的指针 b[2][0] b[2][1] b[2][2] b[2][3] ---- b[2] 表示第 2 行元素的指针 */
3.打印杨辉三角的前十行
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
分析:(1)首先是第一列全部为 1
(2)下标相等的为 1 ; i = j; a[i][j] = 1;
(3)下面的数是这个数上方的加上左上方的和 , a[i][j] = a[i-1][j-1]+a[i-1][j];
.......第一种方法:
#include <stdio.h> #define M 10 #define N 10 int main(int argc, const char *argv[]) { int i, j; int data[M][N]={{0}}; //给数组填数,按照杨辉三角格式 for(i = 0; i < M; i++) { data[i][0] = 1; for(j = 1; j <= i; j++) //i=j时,是对角线 { data[i][j] = data[i-1][j-1]+data[i-1][j]; } } //把二维数组中的内容打印出来(杨辉三角) 下三角打印内容 for(i = 0; i < M; i++)<br> for(j = 0; j <= i; j++) //打印对角线 { printf("%4d", data[i][j]); } putchar(10); } return 0; }
另一种方法:比较笨
#include <stdio.h> #define M 10 #define N 10 int main(int argc, const char *argv[]) { int i=0,j=0; int a[N][M] = {{0}}; a[0][0] = 1; //数组从第二行开始 for(i=1;i<N;i++) { a[i][0] = 1; for(j=1;j<M;j++) { if(i==j) //下标相等,直接赋值,并结束循环 { a[i][j] = 1; break; } a[i][j] = a[i-1][j-1] + a[i-1][j]; } } for(i=0;i<N;i++) { for(j=0;j<M;j++) { if(i==j) //遇到相等下标 { printf("%d ",a[i][j]); //下标相等的数据也要打印出来 break; } printf("%d ",a[i][j]); } putchar(10); } return 0; }