C 二维数组

1. 二维数组不部分初始化问题

char data[][10] = {"hello","world"}; // 二维数组初始化时,列信息可以不给定,行信息必须给定

列信息可以根据实际的字符串个数确定,但是行信息中每个字符串的长度是不确定的,所以不完全初始化时必须给定

2. 求数组占空间大小(sizeof()关键字求变量或类型占空间的大小)

#define N 10
char a[][N] = {"hello","world!"};

int len = 0; 
len = sizeof(a); //数组占空间大小
int row = 0;
row = sizeof(a) / sizeof(char) / N; //有多少行数

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++)
     { 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;
}

---恢复内容结束---

猜你喜欢

转载自www.cnblogs.com/electronic/p/10792264.html