第五章 循环结构课后反思
本章重点、难点:
- 本章重点讲了3种循环语句:for语句、while语句和do-while语句,另外还了解了if语句和goto语句组合构成的循环。
- 一般情况下,三种循环语句都可以用来处理同一类问题,但当循环次数是肯定的时候,for循环比较方便。
- while循环和for循环都要先判断条件再执行循环语句,所以,有可能一次也不执行循环体语句,而do-while循环不论怎样都会先执行一次循环语句。
- break语句既可用于switch语句结构,又可用于循环语句结构,其作用是跳出控制结构语句。而continue语句不会中止循环,而是在<循环语句体>没有执行完的情况下,结束当前循环,提前进入下一个循环。
- break语句和continue语句都会破坏程序的结构化,使程序变成非结构化的程序,在解决问题时应该尽量避免使用这两种语句。
- 循环体语句为复合语句,要加花括号。
- 不能使程序发生无限循环发生数据溢出。
- 不能混淆了break语句和continue语句的功能。
思考题:
1、
方法一:
#include<stdio.h>
main()
{
int i,j,k,n=9;
for(i=1;i<=5;i++)
{
for(j=1;j<=(2*i-1);j++)
printf("*");
for(k=1;k<=5;k++)
printf(" ");
printf("\n");
}
for(i=1;i<=5;i++)
{
for(j=1;j<=(2*(5-i)-1);j++)
printf("*");
for(k=1;k<=i+1;k++)
printf(" ");
printf("\n");
}
}
方法二:
#include<stdio.h>
main()
{
int i,j,k,n=9;
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<=n-2*i;j++)
printf("*");
printf("\n");
}
}
运行结果:
做这道题的时候因为刚上完课,脑子里都在想老师上课讲例题时教的空格和星号一起用的方法,所以我在做这个图案的时候一直在构思空格该用什么表达式来表示,后来推敲出了上面的部分应该用(2i-1),下面的部分用(n-2i)表示,室友看到了却说我想的太复杂了,其实用老师上课讲的第一第二个例子就可以解决了,完全不用考虑空格该怎么写表达式,转念一想好像有点道理,代码敲出来后一对比,我之前想的确实是过于复杂了。
2、
#include<stdio.h>
main()
{
int i,j,k,n=11;
for(i=1;i<=5;i++)
{
for(j=i;j<5;j++)
printf(" ");
for(k=1;k<=7;k++)
printf("*");
printf("\n");
}
for(i=1;i<=4;i++)
{
for(j=1;j<i+1;j++)
printf(" ");
for(k=1;k<=7;k++)
printf("*");
printf("\n");
}
}
运行结果:
做这个图案的时候其实我本来想做另外一个图案的,打完代码运行出来发现它的下面一部分和这个图案一模一样,所以临时决定做这个图案了。这个图案前五行分别是由四个空格、三个空格、两个空格、一个空格、0个空格和七个星号组成,所以空格的表达式我是用(j=i;j<5)来表示空格的,星号每一行都是七个,所以用的是(k=1;k<=7)表示;最后四行是由一个空格、两个空格、三个空格、四个空格和七个星号组成,刚好和前四行相反,便用(j=1;j<i+1)表示空格,(k=1;k<=7)表示星号。
分享交流:
我认为对我最大帮助的是黄志乾和戴求的博客,因为他们一个每次都很快就交了作业,一个写的非常的清晰明了,看完他们的作业之后让我对如何写作业有了一个大致的了解。