C 二维数组

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;
}
原文地址:https://www.cnblogs.com/electronic/p/10792264.html