#includeint main() { int n; int i,j,k; scanf("%d",&n);//此时输入的是上半部分的行数 下半部分的行数比下半部分少一行 故下半部分可以表示为n-1 for(i=1;i<=n;i++)//代表每一行的情况 { for(j=1;j<=n-i;j++)//按照行数依次可知前面空格的个数与行数成 n-i 的关系 printf(" "); for(k=1;k<=2*i-1;k++)//由隔行的*号可知若输出的为实心菱形则*号的个数和 行数成2*i-1的关系 { if(k==1||k==2*i-1)//如果输出的为实体菱形则此时在k所指示的循环里可以直接写输出*号不需要其它条件 但此时输出的为空心菱形 故由图可知 *号在每一行的位置恰好为 k==1 和 k==2*i-1这两个位置上 printf("*"); else//故在实体类型中应该用*填补的这剩下的地方因为要空心故用空格填补 printf(" "); } printf("n");//因为一行一个输出方式 故在第一行输出完后 要i记得换行进行下一行的操作 } for(i=n-1;i>=1;i--)//这个是一个菱形的下半部分 行数为n-1 这个由于是到着来 原理和上述差不多 { for(j=1;j<=n-i;j++)//这和上述的就是一样的意思了 printf(" "); for(k=1;k<=2*i-1;k++) { if(k==1||k==2*i-1) printf("*"); else printf(" "); } printf("n");//换行切记 } return 0; }
这个的程序的每一步和空心菱形都只有一点改变 故可以参考上方所写
#includeint main() { int n,a,b,c; int i,j,k; scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=n-i;j++) printf(" "); for(j=1;j<=2*i-1;j++) printf("*"); printf("n"); } for(i=n-1;i>=1;i--) { for(j=1;j<=n-i;j++) printf(" "); for(j=1;j<=2*i-1;j++) printf("*"); printf("n"); } return 0; }
总结:要注意像这种图像的编程题 要切记看图找到规律后再开始尝试
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)