c/c++学习笔记:五大循环

来源:互联网 发布:搜狐网络大厦一层图片 编辑:程序博客网 时间:2024/06/06 19:40

c/c++的五大循环,分别是:while,do…while,for,if…goto,函数递归。不同的循环适用于不同的场合,每种用法都应该掌握。

各个循环的用法

while

while(/*条件*/){    /*语句*/;}

当条件满足或者条件表达式不为0的时候,进入循环,执行完毕后再进行条件判断;
当条件满足或者条件表达式不为0的时候,再次进入循环……如果条件不满足或者条件表达式为0的时候,不再进入循环,而执行循环外的语句。

dowhile

do{    /*语句*/;}while(/*条件*/);

与while类似,dowhile是先执行一次循环体,然后进行条件判断,当条件满足或者条件表达式不为0的时候,才进入循环,否则退出循环,执行下面的语句。

for

for(/*语句1*/;/*语句2*/;/*语句3*/){    /*语句*/;}

语句1通常是定义和赋值循环变量的初值,在循环中运行一次。
语句2通常是循环条件的判断,每次循环都要运行。
语句3通常是循环变量的步长计数,每次循环都要运行。
格式完整,用法多样,比较常用的一种循环。

ifgoto

A:  if (/*条件*/)    {        /*语句*/;         goto A;    }
A:  /*语句*/;     if ((/*条件*/)    {        goto A;    }

ifgoto原理就是根据条件判断语句if与goto语句的特性来构成的一种循环。与while和dowhile类似,根据判断条件的先后运行,可分为两种情况,先判断条件后运行循环体,先运行循环体,后判断条件。

函数递归

int function(int n){    if (n == 1)    {        return 1;    }    else    {        return function(n - 1);    }}

这块内容我理解的也不是很好,简单的说就是自己调用自己。函数的参数有一个必然是循环计数的变量,就是通过对这个变来控制调用自己的次数以及操作,调用到最后,一定要想办法退出,如果不退出就成了死循环,这样一层一层结果累加到一起。

特点

每个循环的共同特点都是需要一个循环变量来记录循环次数,以及配合构成循环条件,可以是int型数据来计数,或者指针和字符串配合。

五个问题

下面从以下四个问题来研究这五大循环:
1.计算1+2+3+……+n的结果
2.用指针循环扫描打印字符串常量
3.求字符串长度
4.求x^y
5.求数组中最大的数

1.计算1+2+3+……+n的结果

输入一个数字n,计算1+2+3+……+n的结果。

while

int w1while(int n){    int sum = 0;    while (n > 0)    {        sum += n;        n--;    }    return sum;}

返回值为int型数据,用于返回总和。
传入参数传入最后一项。
定义的int型数据sum用于存储总和。

dowhile

int w1dowhile(int n){    int sum = 0    do    {        sum += n;        n--;    } while (n > 0);    return sum;}

for

int w1for(int n){    int sum = 0;    for (; n > 0; n--)    {        sum += n;    }    return sum;}

ifgoto

int w1ifgoto(int n){    int sum = 0;A:  if (n > 0)    {        sum += n;        n--;        goto A;    }    return sum;}
int w1ifgoto1(int n){    int sum = 0;A:  sum += n;    n--;    if (n > 0)    {        goto A;    }    return sum;}

函数递归

int w1xhdg(int n){    if (n == 1)    {        return 1;    }    else    {        return n + xhdg(n - 1);    }}

2.用指针循环扫描打印字符串常量

用指针循环扫描的方式打印字符串常量。

while

void w2while(char *p){    while (*p)    {        printf("%c,%x\n", *p, p);        p++;    }}

dowhile

void w2dowhile(char *p){    do    {        printf("%c,%x\n", *p, p);        p++;    } while (*p);}

for

void w2for(char *p){    for (; *p; p++)    {        printf("%c,%x\n", *p, p);    }}

ifgoto

void w2ifgoto(char *p){    A:if (*p)    {        printf("%c,%x\n", *p, p);        p++;        goto A;    }}

函数递归

void w2hsdg(char *p){    if (*p == '\0')    {        return;    }    else    {        printf("%c,%x\n", *p, p);        w2hsdg(++p);        return;    }}