zoukankan      html  css  js  c++  java
  • 第五章 循环结构课后反思

    一.本章重点、难点:

    • 本章主要讨论了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("
    ");
    	}   
    	for(i=1;i<=4;i++)
    	{
    		for(j=1;j<=i;j++)
    		    printf(" ");
    		for(k=i;k<=(n-i+1);k++)
    		    printf("*");
    		printf("
    ");
    		    
    	}
    	
    }
    

    运行结果:

    分析:
    我把这个图形分成了上五行与下四行两个三角形,并参照书中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("
    ");
    	}
    	for (i=1;i<=4;i++)
    	{
    		for (j=1;j<=(9-2*i);j++)
    		    printf("*");
    		printf("
    ");
    	}
    }
    

    运行结果:

    分析:
    把这个图形分成上五行与下四行两个直角三角形,可以仿照书上代码去写,值得注意的是下面的直角三角形中应该是“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("
    ");
    	}
    	for (i=1;i<=4;i++)
    	{
    		for (j=1;j<=2*i;j++)
    		    printf(" ");
    		for (k=1;k<=(9-2*i);k++)
    		    printf("*");
    	    printf("
    ");
    	}
    }
    

    运行结果:

    分析:

    • 条件值的设定: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("
    ");
    	}
    	for(i=2;i<=5;i++)
    	{
    		for(j=i;j<5;j++)
    		    printf(" ");
    		for(k=1;k<=(2*i-1);k++)
    		    printf("*");
    		printf("
    ");    
    	} 	
    }
    

    运行结果:

    分析:
    把图案分成上五行的等腰三角形和下四行的等腰梯形。下部分梯形中的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("
    ");
        }
        for(i=1;i<=4;i++)
    	{
    		for(j=1;j<=(5-i);j++)
    		    printf(" ");
    		for(k=1;k<=7;k++)
    		    printf("*");
    		printf("
    ");   
    	}
    }
    

    运行结果:

    分析:
    把图案分成上五行与下四行两个平行四边形,根据输出空格与星号的数量确定规律。每行都输出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("
    ");
    		    
    	}
        for(i=1;i<=4;i++)
        {
            for(j=1;j<=i;j++)
               printf(" ");
            for(k=1;k<=7;k++)
               printf("*");
            printf("
    ");
        }
    }
    

    运行结果:

    分析:
    这道题与上一道题类似,可以直接改变条件表达式的值。
    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("
    "); 
             }       
            for (i=1;i<=2;i++)  
            {
                for(j=1;j<=9;j++)     //中间两行*号 
                    printf(" * ");
                    printf("
    ");
            }
            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("
    ");   
            }   
        }
    

    运行结果:

    把图案分成四个部分,上五行的三角形、矩形、下面左边的三角形和下面右边的三角形,再分块编写代码。

    四.分享交流:

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

  • 相关阅读:
    Codeforces 177G2 Fibonacci Strings KMP 矩阵
    Codeforces Gym100187C Very Spacious Office 贪心 堆
    Codeforces 980F Cactus to Tree 仙人掌 Tarjan 树形dp 单调队列
    AtCoder SoundHound Inc. Programming Contest 2018 E + Graph (soundhound2018_summer_qual_e)
    BZOJ3622 已经没有什么好害怕的了 动态规划 容斥原理 组合数学
    NOIP2016提高组Day1T2 天天爱跑步 树链剖分 LCA 倍增 差分
    Codeforces 555C Case of Chocolate 其他
    NOIP2017提高组Day2T3 列队 洛谷P3960 线段树
    NOIP2017提高组Day2T2 宝藏 洛谷P3959 状压dp
    NOIP2017提高组Day1T3 逛公园 洛谷P3953 Tarjan 强连通缩点 SPFA 动态规划 最短路 拓扑序
  • 原文地址:https://www.cnblogs.com/youthyee/p/10701416.html
Copyright © 2011-2022 走看看