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] = {{'\0'}}; //数组初始化
/* 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)