杨辉三角特点:(1)每行第一个元素及最后一个元素都为1;(2)中间元素都是上一行对应元素与对应元素前一元素之和。
程序思路:
(1)用一个循环给每行第一个元素赋值为1;
for (int i = 0; i < 7; i++) {
int j = 0;
a[i][j] = 1;
}
(2)用循环给每行最后一个元素赋值为1;
for (int i = 1; i < 7; i++) {
a[i][k] = 1;
k = i + 1;
}
(3)用循环计算其余中间元素的值;
for (int i = 2; i < 7; i++) {
for (int n = 1; n <i; n++) {
a[i][n] = a[i - 1][n - 1] + a[i - 1][n];
}
}
(4)最后循环打印杨辉三角;
for (int i = 0; i < 7; i++) {
for (int n = 0; n < i+1; n++) {
printf("%d ", a[i][n]);
}
printf("\n");
}
程序总的代码:
#include <stdio.h>
int main (){
int a[7][7];
int k = 1;
for (int i = 0; i < 7; i++) {
int j = 0;
a[i][j] = 1;
} //用循环给每行第一个元素赋值为1
for (int i = 1; i < 7; i++) {
a[i][k] = 1;
k = i + 1;
} //用循坏给每行最后一个元素赋值为1
for (int i = 2; i < 7; i++) {
for (int n = 1; n <i; n++) {
a[i][n] = a[i - 1][n - 1] + a[i - 1][n];
}
}
for (int i = 0; i < 7; i++) {
for (int n = 0; n < i+1; n++) {
printf("%d ", a[i][n]);
}
printf("\n");
}
return 0;
}
运行结果:
总结:(1)一开始想的是用七个一维数组,在定义的时候直接初始化为杨辉三角的值,然后直接输出,但这意味着要写七个printf函数。过于笨拙。(2)后来又想到用二维数组,同样在定义的时候初始化为杨辉三角值,然后循环输出。但是这样的话,如果行数较少也勉强可行,一旦行数过多同样会显得笨拙,而且后期更改维护也较为复杂。(3)最后决定不偷懒,老老实实写代码。用循环给各个元素赋值,再循环输出。也就是上述代码。(4)因为除了杨辉三角的值,其余数组元素是没有或者待定的。因为我一开始输出的是整个a[7][7]的值,即输出结果应该是一个七阶行列式,但是除了杨辉三角的值,其余值未知,所以产生溢出。然后我给其他未知部分用空格给他们赋值,结果还是溢出,原因很明显,我的数组定义的int型,空格属于字符型。最后灵机一动,为什么要输出整个数组呢,我需要的是杨辉三角,那便只输出杨辉三角部分即可。以上就是我对杨辉三角的全部思考。