第五章 循环结构课后反思

妖精的绣舞 提交于 2020-02-06 04:05:09

一.本章重点、难点:

  • 本章主要讨论了3种循环结构语句:for语句、while语句和do-while语句,还了解了if语句和goto语句组合构成的循环。
  • for语句的一般形式:
    for(;;)
    {

    }
  • while语句的一般形式:
    while()
    {
    循环语句
    循环变量表达式
    }
  • do-while语句的一般形式:
    do
    {

    }while();
  • break语句既可用于switch语句结构,又可用于循环语句结构,其作用是跳出控制结构语句。而continue语句不会中止循环,而是在没有执行完的情况下,结束当前循环,提前进入下一个循环。
  • break语句和continue语句都会破坏程序的结构化,使程序变成非结构化的程序,在解决问题时应该尽量避免使用这两种语句。
  • 循环体语句为复合语句,要加花括号。
  • 不能使程序发生无限循环发生数据溢出。
  • 不能混淆了break语句和continue语句的功能。
  • 重点内容是3种循环语句的结构和使用条件。
  • 难点是确定循环结构中的条件,有时候一些细微的差别也会导致运行不出结果。

二.课内反思:

  • 3种循环都可嵌套以构成各种混合嵌套结构。while循环和for循环都要先判断条件再执行循环体语句,有可能一次也不执行循环体语句,而do-while循环不论怎样都会先执行一次循环体语句。
  • 使用循环结构时要注意避免以下几个方面的问题:1.循环体语句为复合语句,但没有使用花括号;2.使程序发生无限循环;3.混淆了break语句与continue语句的功能。
  • 经过这章的学习,我掌握了一些几何图案的输出,但是有时还是会搞不清楚一些条件值的设定,还需要再多加练习。

三.几何图案输出:

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");
    }
}

运行结果:

分析:

  • 条件值的设定:9-2(2i-1)=10-2i;奇数:2i-1;偶数:2i;2(5-i)-1=9-2i。
  • 代码中应该是“j=1”,而不是“j=i”(不能运行出正确图案)。

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,如果不是这样的话,还不能运行出正确的图案。我觉得多动手操作还是很有帮助的,许多之前难以理解的部分现在感觉更理解了些,也发现很多地方可以用同样的方法去写代码。而且,很多同学的博客写得很好,看了他们的博客之后我学到了很多东西。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!