c语言回顾7——循环语句

  1. 基本工作方式:通过条件表达式判定是否运行循环体。
  2. Do,while,for的区别:
  1. do先执行后判断,循环体至少执行一次;
  2. while先判断后执行,可能一次都不执行。
  3. for先判断后执行,比while更简洁
  1. 各种循环回顾:

(1)do——while:

格式:(先do在判断条件,至少使用一次)

do

{

    //loop

}

while(condition)

 

(2)while

while(condition)

{

    //loop

}

 

 

(3)for

for(i=0;condition;i++)

{

    //loop

}

4.分别用三个办法实现累加从0到n的功能

考虑问题的全面性!!!!!

考虑正负问题:正数正常操作,负数输出

(1)do-while

#include<stdio.h>

int f1(int n)

{

    int ret=0;

    if(n>0)//n大于0才执行

    {

       do

       {

           ret=ret+n;

           n--;

       }

       while(n>=0);//注意为小括号,非大括号

    }

    return ret;

}

 

int main()

{

    printf("%d",f1(-2));

    getchar();

    return 0;

}

 

结果:-2输入, ,也正确

发现,在do外还需要添加if语句,较为复杂

(2)while

int f1(int n)

{

    int ret=0;

    while(n>0)

    {

       ret=ret+n;

       n--;

    }

    return ret;

}

无需插入if语句,while相对于do-while更合适

(3)for循环

int f1(int n)

{

    int ret,i;

    for(ret=0,i=0;i<=n;i++)

    {

       ret=ret+i;

    }

    return ret;

}

 

 

5.break和continue的区别

1)Break表示终止循环的执行

Continu表示终止本次循环,进入下一次循环

Switch能否用continue?:不可以!!只能用在循环语句中

2)实例分析:do与break的妙用,工程中重要作用

#include<stdio.h>

#include<malloc.h>//malloc,向系统申请分配指定size个字节的内存空间

 

int func(int n)

{

    int i=0;

    int ret=0;

    int *p=(int*)malloc(sizeof(int)*n);//指针p动态的指向一堆空间,堆空间大小为传进来的n

 

    do

    {

       if(NULL==p) break;

       if(n<5) break;

       if(n>100) break;

       for(i=0;i<n;i++)

       {

           p[i]=i;

           printf("%d\n",p[i]);

       }

       ret=1;

    }while(0);//循环条件为0,表示只执行一次循环体!do-while循环的作用:有些break之后,强制执行free,释放空间

 

    free(p);//break后进入,释放p指针

    return ret;

}

 

int main()

{

    if(func(10))

    {

       printf("ok");

    }

    else

    {

       printf("error");

    }

    getchar();

    return 0;

}

与下一代码进行比较!!

#include<stdio.h>

#include<malloc.h>//malloc,向系统申请分配指定size个字节的内存空间

 

int func(int n)

{

    int i=0;

    int ret=0;

    int *p=(int*)malloc(sizeof(int)*n);//指针p动态的指向一堆空间,堆空间大小为传进来的n

 

    //do

    //{

       if(NULL==p) ret;

       if(n<5) return ret;

       if(n>100) return ret;

       for(i=0;i<n;i++)

       {

           p[i]=i;

           printf("%d\n",p[i]);

       }

       ret=1;

    //}while(0);//循环条件为0,表示只执行一次循环体!do-while循环的作用:有些break之后,强制执行free,释放空间

    printf("free p");

    free(p);//break后进入,释放p指针

    return ret;

}

 

int main()

{

    if(func(1))

    {

       printf("ok");

    }

    else

    {

       printf("error");

    }

    getchar();

    return 0;

}

输入1,结果:

发现没有printf(“free p”),没有释放指针空间,造成内存的泄露!!!

所以说:do-while是很好的防止内存泄露的方法。

 

小结:

  1. for循环先进行判断,在进行循环
  2. for适用于循环次数固定的场景
  3. while先进行判断在进入循环体执行。
  4. while适用于循环次数不固定的场合
  5. do-while先执行后判断,至少执行一次
  6. do-while(0),break结构,运用于防止内存泄露!!!!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值