第五章 循环结构课后反思

循环结构与几何图案输出详解
本文详述了三种循环语句(for, while, do-while)的结构和使用,强调了避免无限循环和混淆break与continue语句的重要性。通过实例分析了几何图案输出的代码,探讨了不同条件设定对结果的影响,指出实践中多加练习和学习他人经验的价值。" 112066643,10542994,Python视频人脸追踪打马赛克实现,"['Python开发', '视频处理', '图像处理', 'moviepy库']

一.本章重点、难点:

  • 本章主要讨论了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");
            
    }
    
}

运行结果:
1620901-20190413154514194-15789410.png
分析:
我把这个图形分成了上五行与下四行两个三角形,并参照书中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");
    }
}

运行结果:
1620901-20190413183947473-129331796.png
分析:
把这个图形分成上五行与下四行两个直角三角形,可以仿照书上代码去写,值得注意的是下面的直角三角形中应该是“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");
    }
}

运行结果:
1620901-20190413193227254-49013971.png
分析:

  • 条件值的设定: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");    
    }   
}

运行结果:
1620901-20190413201056366-1702576567.png
分析:
把图案分成上五行的等腰三角形和下四行的等腰梯形。下部分梯形中的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");   
    }
}

运行结果:
1620901-20190413211711782-1595177238.png
分析:
把图案分成上五行与下四行两个平行四边形,根据输出空格与星号的数量确定规律。每行都输出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");
    }
}

运行结果:
1620901-20190413212404127-800224481.png
分析:
这道题与上一道题类似,可以直接改变条件表达式的值。
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");   
        }   
    }

运行结果:
1620901-20190414133638068-371159481.png
把图案分成四个部分,上五行的三角形、矩形、下面左边的三角形和下面右边的三角形,再分块编写代码。

四.分享交流:

做了一些输出几何图案的练习后,我对于这种问题更熟练了些,但是有些细节方面还是不太懂。比如,有些题目中是i赋值给j,而有的却是把1赋值给j,如果不是这样的话,还不能运行出正确的图案。我觉得多动手操作还是很有帮助的,许多之前难以理解的部分现在感觉更理解了些,也发现很多地方可以用同样的方法去写代码。而且,很多同学的博客写得很好,看了他们的博客之后我学到了很多东西。

转载于:https://www.cnblogs.com/youthyee/p/10701416.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值