《C语言程序设计 谭浩强 第4版》:循环结构程序设计

一、程序中需要用循环结构

循环结构就是用来处理需要重复处理的问题的,所以又称为重复结构 

有两种循环:

  • 无休止的循环
  • 有终止的循环 

计算机只处理有条件的循环,算法的特征是有效性、确定性、有穷性 

构成一个有效的循环应指定两个部分 

  • 需要重复执行的操作,循环体
  • 循环结束的条件 

循环结构是结构化程序设计的基本结构之一,它和顺序结构、选择结构共同作为各种复杂程序的基本构成单元 

 

二、用 while 语句和 do……while 语句实现循环 

1、用 while 语句实现循环 

求 1+ 2 + 3 + 4 + …… + 100 

#include <stdio.h>
int main(){
    int i = 1.sum = 0;
    while(i < 100){
        sum = sum + i;
        i++;
    }
    printf("%d\n",sum);
    return 0;
}

运行结果:
5050 

while 语句特点: 先判断,后执行 

循环体如果包含一个以上的语句,应该用大括号括起来,以复合语句形式出现。如果不加大括号,则 while 语句的范围只到 while 后面第一个分号处 

在循环体中应有是循环趋向于结束的语句 

 

2、用 do……while 语句实现循环 

do……while 语句特点: 先执行,后判断 

求 1+ 2 + 3 + 4 + …… + 100 

#include <stdio.h>
int main(){
    int i = 1.sum = 0;
    do{
        sum = sum + i;
        i++;
    }while(i <= 100)
    printf("%d\n",sum);
    return 0;
}

运行结果:
5050 

 

三、用 for 语句实现循环 

1、for 语句的一般形式和执行过程 

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

 

2、for 循环程序举例 

据2012年末统计,我国人口约为13.54亿,如果人口的年增长率为1%,计算到哪年中国总人口超过 15 亿 

假设原来人口 p_{0},一年后的人口为 p 

其中 r 是年增长率 

#include <stdio.h>
int main(){
    double p = 1.354e9,r = 0.01;
    int year;
    for(year = 2012;p < 1.5e9; year++){
        p = p * (1 + r);
    }
    printf("year = %d,p = %e \n",year - 1,p);
    return 0;
}

运行结果:
year = 2023,p = 1.510615e+009 

 

四、循环的嵌套 

一个循环体内有包含另一个完整的循环结构,称为循环的嵌套 

内嵌的循环中还可以嵌套循环,这就是多层循环 

三种循环可以互相嵌套 

 

五、提前结束循环 

1、用 break 语句提前退出循环 

break 语句可以使流程跳出 switch 结构,继续执行 switch 语句下面的一个语句 

break 语句还可以用来从循环体内跳出循环体,提前结束循环 

break 语句不能用于循环语句和 switch 语句之外的任何其他语句中 

 

2、用 continue 语句提前结束本次循环 

作用:结束本此循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判断 

continue 与 break 的区别:

  • continue 语句只结束本次循环,而不是终止整个循环的执行
  • break 语句则是结束整个循环过程,不在判断执行循环的条件是否成立

 

六、几种循环的比较 

  • 三种循环都可以用来处理同一问题,一般情况下它们可以互相代替 
  • 在 while 循环和 do……while 循环中,只在 while 后面的括号内指定循环条件,因此为了使循环能正常结束,应在循环体中包含使循环趋于结束的语句。for 循环可以在 ”表达式3“ 中包含使循环趋于结束的操作,甚至可以将循环体中的操作全放到表达式 3 中(因为 for 语句的功能更强,凡是 while 循环能完成的,用 for 循环都能实现) 
  • 用 while 和 do……while 循环时,循环变量初始化的操作应在 whlie 和 do……while 语句之前完成 
  • while 循环、do……while 循环和 for 循环,都可以用 break 语句跳出循环,用 continue 语句结束本此循环 

 

七、循环程序综合举例 

给一个整数,判断它是否素数 

#include <stdio.h>
#include <math.h>

int main(){
    int m,i,k;
    printf("Please enter a integer number:");
    scanf("%d",&m);
    k = (int)sqrt(m);
    for(i = 2;i <= k; i++){
        if(m % i == 0){
            break;
        }
    }
    if(i > k){
        printf("%d is a prime number.\n",m);
    }else {
        printf("%d is not a prime number.\n",m);
    }
    return 0;
}

运行结果:
Please enter a integer number:17
17 is a prime number. 

 

八、提高部分 

1、while 和 do……while 循环的比较

while 循环循环体最少执行 0 次 

do……while 循环循环体最少执行 1 次 

 

2、for语句的各种形式 

一般形式: for(表达式1;表达式2;表达式3) 语句; 

  •  表达式1省略(分号不省略)
    • 此时应在 for 语句之前给循环变量赋初值
  • 表达式2省略,死循环
  • 表达式3省略
    • 此时应另外保证循环正常运行(如在循环体中编写使循环趋于结束的语句) 
  • 省略表达式1和表达式3(完全等同于 while 语句)
  • 3个表达式都省略,死循环
  • 表达式1可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式
    • 表达式3也可以是与循环控制无关的任意表达式
    • 表达式1 和表达式3可以是一个简单的表达式,也可以是逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔
  • 表达式一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只要其值为非 0 ,就执行循环体
    • 循环体为空语句时,把原来循环体中处理的内容放在表达式3中也可以一样的

 

九、习题 

1、输出所有”水仙花数“,所谓”水仙花数“是指一个 3 位数,其各位数字立方和等与该数本身 

153 = 1^{3} + 5^{3} + 3^{3} 

#include <stdio.h>
#include <math.h>
int main(){
    int i,j,k,n;
    printf("parcissus numbers are:\n");
    for(n = 100;n < 1000; n++){
        i = n / 100;
        j = n / 10 - i * 10;
        k = n % 10;
        if(n == pow(i,3) + pow(j,3) + pow(k,3)){
            printf("%d\t",n);
        }
    }
    printf("\n");
    return 0;
}

 运行结果:
parcissus numbers are:
153 370 371 407

 

一  叶  知  秋,奥  妙  玄  心

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QX_Java_Learner

祝老板生意兴隆,财源广进!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值