所有理解都在代码注释中标明
问题一:实现打印特殊图案
代码如下:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
void tu_an(int);
int main(int argc, char *argv[]) {
//当输入n,实现输入输入n行等腰三角形;
//思考步骤:第一步:实现每行输出一个'*';
// 第二步:实现每行输出的'*'个数进行递增;
// 第三步:加入每行'*'前的空格,实现图案形状;
int n;
printf("请输入图案的长度:");
scanf("%d",&n);
tu_an(n);
return 0;
}
void tu_an(int n){
int i;
int j=1;
for(i=1;i<=n;i++){ //实现行数;
// int j=1; //第二次循环j的值又被赋予为3,所以根本没有发生改变;
int k;
int m;
m=i;
while(n-m){
printf(" ");
m++;
}
// int m=1; //实现每行的空格输出;出现的问题:输出的空格不是阶梯形,而是都依据第一行的格式输出;所以还需要for循环;
// while(n-m){
// printf(" ");
// m++;
// }
for(k=1;k<=j;k++){
printf("*");
}
printf("\n");
j+=2;
}
}
运行结果如下:
问题二:实现打印杨辉三角形
代码如下:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
//实现输出杨辉三角形:根据杨辉三角形的特点可以看出,
// 1,杨辉三角形的每一行的第一个数都是1;
// 2,第几行有几个数;
// 3,第三行的第二个数是第二行前两个数的和;第四行的第二个数是第三行前两个数的和,第三个数是第三行第二个第三个数的和,规律以此类推;
//思考:1,如果每行的元素直接有联系,个人认为应该用数组实现每行元素的存储;
// 2,定义二维数组对于每行元素的存储较有利;二维数组的行数代表杨辉三角形的行数;
// 3,依据刚刚分析特点3进行数组的赋值;
int m,n,i,j,k,c,b;
printf("请输入杨辉三角形的阶数:");
scanf("%d",&n);
int a[n+1][n+1];
for(i=0;i<=n;i++){ //定义二维数组,首末置1;
a[i][0]=1;
a[i][i]=1;
}
for(m=2;m<=n;m++){ //杨辉三角形特点3
for(k=1;k<m;k++)
a[m][k]=a[m-1][k-1]+a[m-1][k];
}
for(c=0;c<=n;c++){
int g=c;
while(n-g){ //改变三角形形状
printf(" ");
g++;
}
for(b=0;b<=c;b++){
printf("%d ",a[c][b]);
}
printf("\n");
}
return 0;
}
运行结果: