第五章 循环结构课后反思
一.本章重点、难点:
- 本章主要讨论了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,如果不是这样的话,还不能运行出正确的图案。我觉得多动手操作还是很有帮助的,许多之前难以理解的部分现在感觉更理解了些,也发现很多地方可以用同样的方法去写代码。而且,很多同学的博客写得很好,看了他们的博客之后我学到了很多东西。