1.程序代码:
# include<stdio.h>
main()
{
    int i,j,k,n=7;
    for (i=1;i<=5;i++)
    {
        for (j=i;j<5;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=i;k<=(n-i+1);k++)
            printf("*");
        printf("\n");
            
    }
    
}运行结果:

分析:
我把这个图形分成了上五行与下四行两个三角形,并参照书中92页的程序进行编写代码。我一开始没有打出空格,还把n的值写成了9,所以没有运行出正确的图案。再看了几遍之后,才发现了问题所在。
2.程序代码:
#include<stdio.h>
main()
{
    int i,j;
    for (i=1;i<=5;i++)
    {
        for (j=1;j<=(2*i-1);j++)
            printf("*");
        printf("\n");
    }
    for (i=1;i<=4;i++)
    {
        for (j=1;j<=(9-2*i);j++)
            printf("*");
        printf("\n");
    }
}运行结果:

分析:
把这个图形分成上五行与下四行两个直角三角形,可以仿照书上代码去写,值得注意的是下面的直角三角形中应该是“j<=(9-2*i)”,其中2(5-i)-1=9-2i。
3.程序代码:
#include<stdio.h>
main()
{
    int i,j,k;
    for (i=1;i<=5;i++)
    {
        for (j=1;j<=(10-2*i);j++)
            printf(" ");
        for (k=1;k<=(2*i-1);k++)
            printf("*");
        printf("\n");
    }
    for (i=1;i<=4;i++)
    {
        for (j=1;j<=2*i;j++)
            printf(" ");
        for (k=1;k<=(9-2*i);k++)
            printf("*");
        printf("\n");
    }
}运行结果:

分析:
4.程序代码:
# include<stdio.h>
main()
{
    int i,j,k,n=9;
    for (i=1;i<=5;i++)
    {
        for (j=1;j<i;j++)
            printf(" ");
        for (k=i;k<=(n-i+1);k++)
            printf("*");
        printf("\n");
    }
    for(i=2;i<=5;i++)
    {
        for(j=i;j<5;j++)
            printf(" ");
        for(k=1;k<=(2*i-1);k++)
            printf("*");
        printf("\n");    
    }   
}运行结果:

分析:
把图案分成上五行的等腰三角形和下四行的等腰梯形。下部分梯形中的i从2开始,且小于等于5、而且"j=i"而不是"j=1"。
5.程序代码:
#include<stdio.h>
main()
{
    int i,j,k;
    for(i=1;i<=5;i++)
    {
        for(j=1;j<=i;j++)
           printf(" ");
        for(k=1;k<=7;k++)
           printf("*");
        printf("\n");
    }
    for(i=1;i<=4;i++)
    {
        for(j=1;j<=(5-i);j++)
            printf(" ");
        for(k=1;k<=7;k++)
            printf("*");
        printf("\n");   
    }
}运行结果:

分析:
把图案分成上五行与下四行两个平行四边形,根据输出空格与星号的数量确定规律。每行都输出7个星号,而空格数是从1到4。下面的平行四边形中应该是“5-i”。
6.程序代码:
#include<stdio.h>
main()
{
    int i,j,k;
    for(i=1;i<=5;i++)
    {
        for(j=1;j<=(5-i);j++)
            printf(" ");
        for(k=1;k<=7;k++)
            printf("*");
        printf("\n");
            
    }
    for(i=1;i<=4;i++)
    {
        for(j=1;j<=i;j++)
           printf(" ");
        for(k=1;k<=7;k++)
           printf("*");
        printf("\n");
    }
}运行结果:

分析:
这道题与上一道题类似,可以直接改变条件表达式的值。
7.程序代码:
#include<stdio.h>
main()
{
    int i,j,k;
    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<=2;i++)  
        {
            for(j=1;j<=9;j++)     //中间两行*号 
                printf(" * ");
                printf("\n");
        }
        for (i=1;i<=5;i++)   
        {   
        for(j=1; j<=(5-i);j++)   // 下面左边三角形
               printf(" * "); 
        for(k=1;k<=(2*i-1);k++)
               printf("   "); 
        for(j=1;j<=(5-i);j++)  
               printf(" * ");  //下面右边三角形
               printf("\n");   
        }   
    }运行结果:

把图案分成四个部分,上五行的三角形、矩形、下面左边的三角形和下面右边的三角形,再分块编写代码。
做了一些输出几何图案的练习后,我对于这种问题更熟练了些,但是有些细节方面还是不太懂。比如,有些题目中是i赋值给j,而有的却是把1赋值给j,如果不是这样的话,还不能运行出正确的图案。我觉得多动手操作还是很有帮助的,许多之前难以理解的部分现在感觉更理解了些,也发现很多地方可以用同样的方法去写代码。而且,很多同学的博客写得很好,看了他们的博客之后我学到了很多东西。
原文:https://www.cnblogs.com/youthyee/p/10701416.html