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 + w1xhdg(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;
}
}