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

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;
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值