循环教案

一、什么是循环,为什么需要循环

引例1-计算数位

给定一个正整数29835797775515656,计算该数是几位数
可以从右边开始划(29835797775515656/10)
划完一个数后结果加一(cnt++)
通过以前的知识可以写出代码

#include<stdio.h>
long long a=29835797775515656;
int cnt=0;
int main()
{
    if(a>0)
    {
        a/=10;
        cnt++;
        if(a>0)
        {
            a/=10;
            cnt++;
            if(a>0)
            {
                a/=10;
                cnt++;
            }
            ...
            ...
            ...
        }
    }
    printf("%d",cnt);
    return 0;
}

由代码可以看出,当a>0时,需要不断地进行除以10和cnt++的操作
如果仅使用判断语句操作,会造成代码冗长,并且无法知道极限在哪里
这时就需要使用循环语句来进行操作

二、循环的种类

1、while循环

当判断语句已经解决不了引例1的问题时,这时就需要使用循环语句了
首先要试着使用while循环解决引例1的问题
while循环的本质是循环条件满足时,不断重复循环体内的语句,且先判断,后执行

在引例1中,一个判断语句分支是这样的

if(a>0)
{
	a/=10;
	cnt++;
}

现在只需要把 i f if if改成 w h i l e while while

while(a>0)
{
	a/=10;
	cnt++;
}

只要括号中条件为真,就可以循环执行这个判断语句,直到括号中条件为假,跳出循环
while循环流程图:
while循环流程图
在while循环中的循环体中要有改变条件的机会,否则会造成死循环!!!
如果要计算所有整数的数位,上面的代码还是有些问题的,聪明的你知道问题在哪吗?
{如果输入为0,输出0,可以进行特判,也可以使用后面讲的do-while循环}
Tips:$while循环多用于已知循环条件的循环,注意与接下来的for循环进行对比

2、do-while循环

不同于 w h i l e while while循环的先判断后执行, d o − w h i l e do-while dowhile循环的特点是先执行后判断
也就是说,在进入判断条件前会先执行循环体

do
{
	<循环体语句>
}while(<循环条件>);///注意有个分号

在这里插入图片描述
样就可以解决输入0答案错误的问题了

3、for循环

已知阶乘 n ! = n × ( n − 1 ) × ( n − 2 ) × . . . × 2 × 1 n!=n\times(n-1)\times(n-2)\times...\times2\times1 n!=n×(n1)×(n2)×...×2×1
如果我们要求出阶乘的值
用while循环可以这么写出代码

#include<stdio.h>

int main()
{
    int a=1,n;
    scanf("%d",&n);
    int i=1;
    while(i<=n)
    {
        a*=i;
        i++;
    }
    printf("%d\n",a);
    return 0;
}

如果写出了这样的循环,那么c语言中的for语句就可以代替while

#include<stdio.h>

int main()
{
    int a=1,n;
    scanf("%d",&n);
    int i;
    for(i=1;i<=n;i++)
    {
        a*=i;
    }
    printf("%d\n",a);
    return 0;
}

在for语句中,圆括号中有三个表达式
表达式用分号隔开
表达式1:初始动作
表达式2:循环继续的条件
表达式3:循环每轮要做的动作
特别的,for循环的三个表达式每一个都是可以省略的

for(表达式1;表达式2;表达式3)
{
	...;
}

T i p s Tips Tips做求和的程序,初值应赋值为0,求积应赋值为1

4、break与continue

当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句,通常break语句总是与if语句联在一起,即满足条件时便跳出循环。

continue语句的作用是跳过循环体中剩余的语句而强行执行下一次循环。continue语句只用在for、while、do-while等循环体中,常与if条件语句一起使用。

5、时间复杂度

时间复杂度即事先预估时间开销T与数据规模n之间的关系
计算时间复杂度时,常用O()表示
当i从1~n循环,时间复杂度为O(n)
如果是1~n的二重循环,时间复杂度为O( n 2 n^2 n2)
一般在计算时间复杂度时,只需考虑时间复杂度表达式的最高阶的时间开销
在算法竞赛中,通常1s可以执行1e8次循环,如果超过时间限制,则会返回TLE结果

三、如何选用循环

如果已知循环次数,一般选用for
如果必须做一次循环,使用do-while
其他情况使用while

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值