初学编程的时候(学到循环)遇到一个比较典型的问题:就是如何打印菱形,如下图:  
   
          *  
   
        ***  
   
      *****  
   
    *******  
   
  *********  
   
    *******  
   
      *****  
   
        ***  
   
          *  
   
  我们当然不能用printf来一行行打印,这样多笨,再说也为了理解for循环的意思,我   们干脆用for   循环来打印菱形。我们先来思考一个简单点的问题,比如要打印:  
   
  *  
   
  **  
   
  ***  
   
  ****  
   
  *****  
   
  我们怎么用for来实现呢?可以用一个for循环来打印多少行,一个for来打印星号就可以了。给出源程序如下:  
   
  #include   <stdio.h>  
   
  //#include   <conio.h>  
   
     
   
  main()  
   
  {  
   
        int   i,j;  
   
     
   
        //clrscr();  
   
        for(i=1;i<=5;i++){  
   
              for(j=1;j<=i;j++)  
   
              printf("*");  
   
              printf("\n");}  
   
  }  
   
    也就是说一个for做了一件事情,虽然我们的菱形复杂得多,但我们认真在纸上划划分析一下,就不难发现规律:从第一行到第5行,星号得数目一直在增加,而到了第6行却开始减少。而且星号和两边的空格减少都是有规律可循的。再分析一下,我们要打印每   行星号前面的空格不难,打印后面的空格却麻烦,但我们可以通过打印前面的空格和控   制好星号的数目来完成菱形的打印(忽略每行星号后的空格),眉头一皱,计上心来:)   完成这个任务分两步:一是打印前5行,用两个for来控制星号和空格;二是打印后4行,   同样是用两个for来控制星号和空格。一共是6个for!   进一步缕清思路,在前5行,i   from   1   to   5(用来控制行),j   from   4   to   0(用来控制   空格,因为要先打印空格),k   from   1   to   9(用来控制星号,变化规律是从1到9);再来写后面的4行:m   from   1   to   4,n   from   1   to   4,o   from   7   to   1。再求精:前5行,分   析变化规律:  
   
     
   
  i                         j                       k  
   
  1                         4                       1  
   
  2                         3                       3  
   
  3                         2                       5  
   
  4                         1                       7  
   
  5                         0                       9  
   
     
   
                                   
   
  我们要找,当i=1时,j=4,k=1......再用数学的方法思考:使当i等于1的时候j等于4,   i等于2的时候j等于3......i等于5的时候,j等于0。比如我们可以用2n+2=4(n=1),下个呢?因为我们要找递归关系(所以习惯用n   )2n+2-3=3(n=2),2n+2-6=2(n=3),2n+2-9=1   (n=4),2n+2-12=0(n=5)满足了i和j的关系!再发现:(2n+2)后的每个数都是有规律的!   0,3,6,9,12!都是3的倍数!我们终于找到了递归关系:(2n+2)-3(n-1),n属于[1,   5],化简得5-n。以此类推,完成了所有的递归关系!你疑惑地问,我不用2n+2找递归   关系,用n+3找,或者用3n+1,或用4n,你可以试试,结果都是一样地,那用哪个最方便?当然是(n+3)-2(n-1)   n属于[1,5],记住咱们地推论了!费那么大工夫,终于完成   了如下的源程序:  
   
  main()  
   
  {  
   
        int   i,j,k,m,n,o;  
   
     
   
        clrscr();  
   
     
   
        for(i=1;i<=5;i++){                            
   
              for(j=1;j<=5-i;j++)  
   
                      printf("   ");  
   
              for(k=1;k<=2*i-1;k++)  
   
                      printf("*");  
   
              printf("\n");}  
   
     
   
        for(m=1;m<=4;m++){  
   
              for(n=1;n<=m;n++)  
   
                      printf("   ");  
   
              for(o=1;o<=9-2*m;o++)  
   
                      printf("*");  
   
              printf("\n");}  
   
  }  
   
     
   
  我们看变量的定义多了,去掉m,n,o:    
   
  #include   <stdio.h>  
   
  //#include   <conio.h>  
   
  main()  
   
  {  
   
        int   i,j,k;  
   
     
   
        //clrscr();  
   
     
   
        for(i=1;i<=5;i++){  
   
              for(j=1;j<=5-i;j++)  
   
                      printf("   ");  
   
              for(k=1;k<=2*i-1;k++)  
   
                      printf("*");  
   
              printf("\n");}  
   
     
   
        for(i=1;i<=4;i++){  
   
              for(j=1;j<=i;j++)  
   
                      printf("   ");  
   
              for(k=1;k<=9-2*i;k++)  
   
                      printf("*");  
   
              printf("\n");}  
   
  }  
   
     
   
  *****************上面所有的源程序在turbo   c   2.0编译下通过!***********************************   我当初学的时候可是迷茫了很久啊,现在终于懂了!对于打印菱形什么的,我再也不会迷茫了!   总结:我们通过这个程序学到了什么?  
   
  一是不要看老谭(谭浩强)写的程序而非要和他   写的一模一样!我们要自己动脑找规律。不要迷信他人,我们自己慢慢也能写出程序!以后读任何人的程序都是一样,先自己想程序的要实现的功能,自己写写看,实在不行   再看他的程序,如果一次理解不了就多来几回!一直到我们自己对这个程序的思想能把   握了为止!