最早的版本:#include <stdio.h> int main(){ int k1 = 5 , k2 = 1; int i,j; do { for (i=1 ; i <= k1-1 ; i++) printf (" "); for (j=1 ; j <= k2 ; j++) printf("*"); printf("\n"); k1=k1-1; //每行*号前的空格相差1个 k2+=2; // 每行的*号个数相差2个 } while (k1 >1 ); //注释:下 /* 原先之所以输出 * ***** *** * 这样,是因为将判断条件错误的写为k1<=0,于是第一次循环执行了k1=k1-1后,K值为2不满足k1<=0 于是结束了循环 */ int k3=1, k4 =5; int i2 , j2; do { for (i2=1; i2 <= k3+1 ; i2++ ) printf (" "); for (j2=1 ; j2 <= k4 ; j2++ ) printf ("*"); printf ("\n"); k3++; k4-=2; } while (k3 <=3); getchar(); return 0;} 改进后的:#include<stdio.h>int main(){ int i,j,n; printf("请输入需要打印菱形的行数(奇数)\n"); scanf("%d",&n); for (i=1;i<=n;i++) { for (j=1;j<=n/2+i;j++) //n/2+i 表示第i行要打印的内容个数,包括空格 { if (j<=(n+1)/2-i||j<=i-(n+1)/2) printf(" "); if (j>(n+1)/2-i&&i<=(n+1)/2) printf("*"); if (j>i-(n+1)/2&&i>(n+1)/2&&j<=n-(i-(n+1)/2)) printf("*"); } printf("\n"); } getchar(); getchar(); return 0;}输出数字菱形: #include <stdio.h> int main(){ int i,ch,n; for (i=1;i<=5;i++) { n=0; for (ch=1;ch<=i+2;ch++) { if (ch<=3-i||ch<=i-3) printf(" "); if (ch>3-i&&ch<=3&&i<=3) printf("%d",++n); if (ch>3&&ch<=5-(3-i)&&i<=3) printf("%d",--n); if (i>3&&ch>i-3&&ch<=3&&ch<=5-(i-3)) printf("%d",++n); if (i>3&&ch>i-3&&ch>3&&ch<=5-(i-3)) printf("%d",--n); } printf("\n"); } getchar(); return 0; }

评论