第五章 循环结构

循环结构是结构化程序设计中的基本结构之一。循环结构在程序设计中的应用很普遍,几乎所有具有使用价值的应用程序中都包含着循环结构。循环结构的特点是,可以完成有规律的、需要重复计算或处理的任务。虽然重复执行的语句相同,但语句中一些变量的值也发生着变化,当达到循环次数或满足一定条件时,循环会结束。

5.1  引例

假设今年我国人口总数为13亿,若按每年%2增长,计算从现在开始10内每年人口的数量。

 

 编写程序,计算1-1/4+1/7-1/10+1/13-1/16+···的和,直到某一项的绝对值小于10的-6次方为止。

 

 5.2  使用for语句实现循环结构

for语句是C语言提供的功能强大、使用广泛的一种循环结构,不仅可以解决循环次数未知的循环问题,特别适合解决循环次数已知的问题。

5.2.1  for语句的基本语法

for语句的一般形式为:

for(表达式1;表达式2;表达式3)                                                                                                                       循环体语句;

for语句的执行过程如下:

(1)首先计算表达式1。

(2)判断表达式2,若其值为真(非0),则执行循环体语句,然后执行第3步若为假(0),结束循环,跳转到第5步执行。

(3)计算表达式3.

(4)返回第2步继续执行。

(5)循环结束,继续执行for语句的下一条语句。

大部分情况下,循环体语句为一复合语句

1.  可以用于计数型的循环

格式如下:

for(循环变量赋初值;循环条件;循环变量增量)                                                                                     循环体语句;

说明:循环语句赋初值是一个赋值语句,用于给循环变量赋初值;循环条件是一个关系表达式,决定何时终止循环(即确定循环的终值);循环变量增量决定循环变量在完成一次循环后如何变化。三个部分以“;”隔开。

输入一个正整数n,求1+2+3+4+···+n的值

 

 输入一个正整数n,求n!。

 

2.  for语句的一般形式中省略表达式1 

格式如下:

                                                     for(;表达式2;表达式3)                                                                                                                                     循环体语句;

说明:省略表达式1时,可以将循环变量放在for之前。注意,此时不能省略第一个“;”。

如:

for(i=1;i<=n;i++)                       /*循环执行n次*/
   sum=sum+i;                           /*累加器,反复累加i的值*/

等价于:

i=1;
for(;i<=n;i++)                             /*循环执行n次*/
    sum=sum+i;                            /*累加器,反复累加i的值*/                  

3.  for语句的一般形式中省略表达式2

格式如下:

                                                      for(表达式1;;表达式3)                                                                                                                                    循环体语句;

说明:省略表达式2时,表示不对循环进行控制,这是如果没有其他处理的话,会形成死循环。应避免使用这样的for结构。

4.  for语句的一般形式中省略表达式3

格式如下:

                                                     for(表达式1;表达式2;)                                                                                                                                      循环体语句;

说明:省略表达式3时,可以在循环体语句中加入修改循环变量的值的语句。

如:

for(i=1;i<=n;i++)                        /*累计执行n次,计算n!*/
    factorial=factorial*i;               /*累乘器n!*/

等价于:

for(i=1;i<=n;)                         /*累计执行n次,计算n!*/
  {  factorial=factorial*i;            /*累乘器n!*/
    i++;}                              /*循环增加量*/

5.  for语句的一般形式中表达式1和表达式3也可以是逗号表达式

如:

sum=0;                                  /*置累加和sum的初值为0*/
for(i=1;i<=n;i++)                        /*累计执行n次*/
    sum=sum+i;                           /*累加器,反复累加i的值*/

等价于:

for(sum=0,i=1;i<=n;i++)                          /*累计执行n次,计算n!*/
    sum=sum+i;                                   /*累加器,反复累加i的值*/

6.  for语句的一般形式中表达式2的值只要非0,就执行循环体

如:

for(;(ch=getchar())!='\n';)
     printf("%c",ch);

7.   for语句的一般形式中循环体语句可以省略

如:

for(i=1;i<=n;i++)                       /*循环执行n次*/
   sum=sum+i;                           /*累加器,反复累加i的值*/

等价于:

for(i=1;i<=n; sum=sum+i,i++)                       /*循环执行n次,并实现累加*/

   从以上7种应用中可以看出,C语言中的for循环控制结构功能强大,在解决实际问题中起着非常重要的作用。

5.2.2  for循环使用示例

编写程序,输入一个整数n,计算1-1/4+1/7-1/10+1/13-1/16+···的前n项的和。

 

 编写程序,输入10个数,输出其中的最大值。

 

 如果不把第一个初值赋值给max,则程序可修改如下:

 编写程序,输出所有的水仙花数。

 

 编写一个程序,由键盘输入一个整数,判断该数是否为完数。

 

 

统计由键盘输入若干个字符中,大写字母,小写字母,数字字符和其他字符的个数。

 

 任意输入一行小写字母,将它们转换成大写字母后输出。

 

 若省略变量i

 由键盘输入3个数字,将其组合成一个整型数并输出。

 

 编写程序,由键盘输入一个正整数,判断其是否为素数。

 

 

 5.3  使用while语句实现循环结构

在C语言中,使用while语句完成不定次数的循环。如果满足循环条件,则反复执行循环体语句,当循环条件不满足时退出循环。

5.3.1  while语句的基本语法

while语句在使用时,总是先要判断一个条件,所以可以用while语句实现“当型”循环。while语句一般形式如下:

while(表达式)                                                                                                                                                循环体;

第一步:计算表达式的值,若表达式的值为“真”,则执行第二步;若表达式的值为“假”,则转到第四步。

第二步:执行循环体语句。

第三步:返回第一步。

第四步:结束循环,执行while语句的下一条语句。

注意,while语句的特点是先判断循环条件,后执行循环体。

5.3.2  while语句使用示例

计算sum=1+2+3+4+5+···+100的值

 

 输入正整数n,计算n!。

 由键盘输入一串字符,分别统计输入字符中数字字符、字母字符及其他字符的个数。

 

使用while语句时,应注意以下几点:

1.while后面的括号不可省略。

2.语句中的表达式可以是任意类型的表达式,若表达式的值为非0,则表示循环条件为“真”,执行循环体语句;若表达式的值为0,则表示循环条件为“假”,不执行循环体语句,结束循环,执行循环结构的下一条语句。如果表达式的值一开始就为“假”(0),则循环体一次也不执行,直接执行循环体后面的语句。

3.循环体语句可以是复合语句,即循环体有多条语句构成时,必须使用一对大括号将这些语句括起来,形成复合语句。

4.为使循环能正常结束,循环体中应对表达式进行修正,是表达式的值趋近于“假”,避免出现死循环。

5.4  使用do-while语句实现循环结构

 在C语言中,do-while语句也可以用于完成不定次数的循环控制。与while语句不同的是,do-while语句首先执行一次循环体,然后判断循环条件,如果满足,则反复执行循环体语句;否则结束循环。

5.4.1  do-while语句的基本语法

do-while语句在使用时,首先执行循环体语句,然后再判断条件。所以可以用do-while语句实现“直到型”循环。do-while语句的一般形式如下:

do                                                                                                                                                          循环体                                                                                                                                              while(表达式);

第一步:执行循环体语句。

第二步:计算表达式的值,若表达式的值为“真”(非0),返回第一步;若表达式的值为“假”(0)执行第三步。

第三步:结束循环,执行do-while语句的下一条语句。

5.4.2  do-while循环使用示例

使用do-while语句计算sum=1+2+3+4+5+···+100的值。

 

 求两个自然数的最大公约数和最小公倍数。

 

 输入一个整数,统计该数的位数。

 

 5.5  改变循环结构的跳转语句;

在前面介绍的3种循环语句,即for循环、while循环语句及do-while循环语句中,控制循环是通过循环达到设定的次数或者循环的判断条件为“假”时结束循环,这种循环控制方式在实际程序设计中是不够的。许多时候当循环结构中出现多个循环时,要求当某个条件满足时会立即结束循环,或者循环结构中根据条件会跳过某些语句继续循环,这就要在循环结构中配合使用break语句和continue语句。

5.5.1  break语句

break语句用在循环语句和Switch语句中。在Switch语句中的用法第4章已经介绍,这里介绍其在循环语句中的用法。

break语句的一般形式如下:

                                                      break;

当break语句用于循环语句中时,可使程序终止循环而转去执行循环语句后的语句,通常break语句总是与if语句配合使用,及满足条件时跳出循环。

 

 编写程序,由键盘输入一个正整数,判断其是否为负数。

 

 

 从键盘输入一批学生成绩(以负数作为结束标志),计算平均分,并统计不及格的个数。

 5.5.2  continue语句

continue语句的作用是跳出循环体中continue后面的语句,继续下一次循环。continue语句只能用在循环语句中,常与if语句一起使用。

continue语句一般形式如下:

                                                  continue;

把1~100之间能被7整除的数,以每行5个的形式在屏幕上输出。

 

 

 

 5.5.3  goto语句

除了前面介绍的3种循环控制语句,即for语句、while语句即do-while语句外,在C语言中,还有一种可以实现循环控制的语句,即goto语句。

goto语句用一般形式如下:

goto 语句标号;

说明:语句标号是一个有效的标识符,使用时在语句标号后面跟一个“:”出现在函数中某语句的前面。程序执行到goto语句时,会控制跳转到该语句标号处,达到控制循环的目的。

使用goto语句计算1+2+3+4+5+···+100的值。

 

 5.6  嵌套循环 

当一个循环的循环体内又包含了另一个完整的循环结构时,称为循环的嵌套或者二重循环。根据问题的需要,可以构成三重及以上的循环嵌套结构,但一般情况下最多使用到三重循环。

使用for语句、while语句及do-while语句相互嵌套有以下几种。

1.for语句中嵌套for语句

2.for语句中嵌套while语句

3.while语句中嵌套while语句

4.do-while语句中嵌套for语句

5.do-while语句中嵌套do-while语句

6.while语句中嵌套do-while语句

使用嵌套时,注意以下几点:

1.外循环执行一次,内循环要执行一轮。即外循环执行一次,内循环要一直执行到条件不满足是为一轮;再执行外循环一次,内循环又一直执行到条件不满足时为第二轮;如此重复执行,直到外循环条件不满足时,整个循环嵌套结束。

2.循环嵌套格式中的内外循环体不允许出现交叉,即外循环要完全包含内循环。

3.循环嵌套时,内循环体中使用break语句和continue语句,只影响包含它们的循环,与外循环无关。

求1!+2!+3!+···+10!

 

 编写程序,输出乘法口诀表。

 

 求100以内的素数。要求每行输出10个。

 

 将10~20之间正整数分解质因数。例如12可分解为2*2*3。

 

 5.7  典型算法举例

5.7.1  递推法

猴子吃桃问题:猴子第一天摘下了若干桃子,吃了一半,还觉得不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第十天早上时,只剩下一个桃子了。请问第一天一共摘了多少桃子。

 

 求sin(x)=x-pow(x,3)/3!+pow(x,5)/5!-pow(x,7)/7!+···的近似值要求精确到pow(10,-6)。

 

 5.7.2  迭代法

用牛顿迭代法求方程

 

 搬砖问题:36块砖,36人搬。男搬4,女搬3,两个小孩抬一砖,要求一次搬完,问男、女、小孩各若干?

 

 编写程序,判断由1、2、3、4四个数字能组成多少个互不相同且无重复数字的三位数?输出这些数。

 

 5.8  循环程序设计示例

编写输出如下图形:

 

 

 猜字游戏:由计算机随机产生一个10~80之间的数,然后由用户进行猜数,在5次之内猜中则成功,否则给出大小提示。猜5次后结束程序。

 

 编写程序输出100~1000内的回文素数。

 

 在所有三位整数中找出平方数中有连续的三位数是该数本身的数。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
循环结构是Python编程语言中非常重要的一部分。它允许我们重复执行一段代码,以达到更高效和简洁的编程。 在Python中,有两种常用的循环结构,分别是for循环和while循环。 for循环适用于已知循环次数的情况。它通过遍历一个可迭代对象(比如列表或字符串),依次取出其中的元素,并执行相应的代码块。例如,我们可以使用for循环来计算一个列表中所有元素的总和。代码如下: ```python numbers = [1, 2, 3, 4, 5] total = 0 for num in numbers: total += num print(total) # 输出:15 ``` while循环适用于未知循环次数的情况。它会根据一个条件判断的真假来决定是否继续循环执行代码块。当条件为真时,代码块会一直执行下去,直到条件为假时停止循环。例如,我们可以使用while循环来实现一个简单的倒数计时器。代码如下: ```python countdown = 10 while countdown > 0: print(countdown) countdown -= 1 print("倒计时结束!") ``` 上述代码会从10开始倒数,直到countdown变为0时,停止循环,并输出"倒计时结束!"。 无论是for循环还是while循环,我们在使用时都需要小心避免死循环的情况。如果循环条件一直为真,循环就会一直执行下去,导致程序无法正常结束。因此,在编写代码时,我们应该保证循环条件能够在一定条件下变为假,以防止出现死循环的情况。 循环结构在Python编程中具有重要作用,它可以帮助我们处理大量数据、重复任务和条件控制等问题,提高代码的灵活性和效率。熟练掌握循环结构的使用,对于编写高效的程序非常重要。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值