c语言题目-打印杨辉三角形的前十行

题目

打印出杨辉三角形的前十行
第1行: 1
第2行: 1 1
第3行: 1 2 1
第4行: 1 3 3 1
第5行: 1 4 6 4 1
第6行: 1 5 10 10 5 1
第7行: 1 6 15 20 15 6 1
第8行: 1 7 21 35 35 21 7 1
第9行: 1 8 28 56 70 56 28 8 1
第10行: 1 9 36 84 126 126 84 36 9 1

我的代码

#include

int main(){
	int yangh[10][11];
	int i,j;
	for(i=0;i<10;i++){
		for(j=0;j<11;j++){
			yangh[i][j] = 0;
		}
	}
    for(i=0;i<10;i++){
			yangh[i][0] = 1;//先确保每一行的开头和末尾都是1
			yangh[i][i] = 1;
		for(j=0;j<10;j++){
			if(i>0){
				yangh[i][j+1] = yangh[i-1][j] + yangh[i-1][j+1];//发现每一行的数值除了开头和末尾就是上一行的数值两两相加
			}
		}
	}
	for(i=0;i<10;i++){
		for(j=0;j<11;j++){
			if(j<i+1){ //这里还可以直接在for循环里改,j
				printf("%d\t",yangh[i][j]);
			}
		}
		printf("\n");
	}
	return 0;
}

改进代码

#include 
 
int main(int argc, char *argv[])
{
        int a[10][10] = {{0}};
        int i, j;
 
        for (i = 0; i < 10; i++) {
                a[i][0] = 1;
                for (j = 1; j <= i; j++)
                        a[i][j] = a[i-1][j-1] + a[i-1][j];
        }
 
        for (i = 0; i < 10; i++)  {
                for (j = 0; j <= i; j++)
                        printf("%-8d ", a[i][j]);
                putchar('\n');
        }
 
        return 0;
}

输出结果

1	
1	1	
1	2	1	
1	3	3	1	
1	4	6	4	1	
1	5	10	10	5	1	
1	6	15	20	15	6	1	
1	7	21	35	35	21	7	1	
1	8	28	56	70	56	28	8	1
1	9	36	84	126	126	84	36	9 1	

问题和解决

1、编写过程中由于没有在一开始就初始化,所以出现了很多随机数,在这中间可能是出现了垃圾值,导致我第一行一直输出两个1(实际上是一个1):
c语言题目-打印杨辉三角形的前十行_第1张图片
后面初始化并改写输出格式以后结果就正确了。

2、在for循环时,要学会更改循环结束的位置以简化循环过程,比如我这次写的代码里:

for(j=0;j<10;j++){
			if(i>0){
				yangh[i][j+1] = yangh[i-1][j] + yangh[i-1][j+1];//发现每一行的数值除了开头和末尾就是上一行的数值两两相加
			}

其实这里的j<10可以改为j

3、在编写输出格式时可以用上类似于%-8d这种让输出结果变得美观的符号,%-8d 中的 - 表示左对齐,8 表示输出的最小宽度为 8 个字符(包括数字和可能的负号),如果数字不足 8 位,会在右侧填充空白字符使其达到宽度。

你可能感兴趣的:(c语言,java,算法)