计算机小白的成长历程——分支与循环(5)

2023-10-13 10:16:42 浏览数 (1)

大家好,很高兴我们又见面了。在初识C语言11中我们有简单的探讨过三种循环语句,前面两个篇章我们分别深入探讨了while循环语句和for循环语句,今天咱们将继续探讨最后一个循环语句do while语句,废话不多说,咱们直接进入正题吧。

do……while语句

1.语句结构

代码语言:javascript复制
//do……while语句结构
对象语句;
do
{
	执行语句;
	递进语句;
} while (条件语句);

接下来我们看看do……while语句的执行流程;

2.执行流程

从这个流程图中我们可以看到,do……while语句跟while语句和if语句有一个最明显的不同,就是它的条件语句在后面,这样的流程有什么特点呢?

3.语句特点

从流程图中我们可以知道当程序开始运行时,相比于其它两个循环语句,do……while语句肯定会执行一次,这样就给此语句带来了局限性,所以不是经常使用。

4.与while语句的异同点

接下来我们通过流程图来看看do……while语句和while语句有哪些异同点:

相同点:

1.两者都是从对象语句之后进入循环;

2.两者的判断都是由while进行判断;

3.判断语句都是遵循0为假跳出循环,非0为真进入循环;

4.在执行语句中遇到break时,直接跳出循环执行循环外的执行语句;

5.在执行语句中遇到continue时,都有两种情况:(1)递进语句在执行语句后;(2)递进语句在执行语句前;

不同点:

1.语句逻辑不同:

(1)递进语句在执行语句后:

while语句:判断->执行->递进;

do……while语句:执行->递进->判断;

(2)递进语句在执行语句前:

while语句:判断->递进->执行;

do……while语句:递进->执行->判断;

2.执行语句遇到continue时,语句执行逻辑不同:

递进语句在执行语句后:

while语句:判断->执行->continue->判断;

do……while语句:执行->continue->判断->执行;

递进语句在执行语句前:

while语句:判断->递进->执行->continue->判断;

do……while语句:递进->执行->continue->判断->递进;

do……while语句的内容比较简单,这里我就不再编写代码举例来理解了,我相信各位在阅读完前面两章内容后对do……while语句的内容会很容易接受。接下来我们开始做几道题来巩固一下知识点吧。

练习题

1.计算n的阶乘。

代码语言:javascript复制
//计算n!方法1——循环
int main()
{
	int a, b= 1;
	for (a = 1; a < 10; a  )
	{
		b = b * a ;
		printf("%d!=%dn",a,b);
	}
	return 0;
}

//计算n!方法2——函数
int fac(int a, int b,int i)
{
	b = a;
	for (i = 1; i < a; i  )
	{
		b = b * (a - i);
	}
	return b;
}

int main()
{
	int x, y = 0, z = 0, n;
	scanf("%d", &x);
	n = fac(x, y, z);
	printf("%d!=%dn", x, n);
	return 0;
}

//计算n!方法3——定义宏
#define fac(x,y,z) (x>z?(y=y*(x-z)):(y=y*(x-z-1)))
int main()
{
	int a = 0, b, c = 0, n = 0;
	scanf("%d", &a);
	b = a;
	for (c = 1; c < a; c  )
	{
		 n = fac(a, b, c);		
	}
	printf("%d!=%dn", a, n);
	return 0;
}

2.计算1! 2! 3! …… 10!

代码语言:javascript复制
//计算1! 2! 3! …… 10!方法1——循环
int main()
{
	int a = 0, b = 1, c = 0;
	for (a = 1; a < 11; a  )
	{
		b = b * a;
		c = c   b;
		printf("sum%d!=%dn", a, c);
	}
	return 0;
}

//计算1! 2! 3! …… 10!方法2——函数
int fac(int a, int b,int c,int d)
{
	b = 1;
	for (c = 1; c < a   1; c  )
	{
		b = b * c;
		d = d   b;
	}
	return d;
}
int main()
{
	int x = 0, y = 0, z = 0, n = 0;
	scanf("%d", &x);
	int sum= fac(x, y, z, n);
	printf("sum%d!=%dn", x, sum);
	return 0;
}

//计算1! 2! 3! …… 10!方法3——宏
#define fac(x,y,z) (x>z?(y=y*z):(y=y*z))
int main()
{
	int a = 0, b, c = 0, n = 0;
	scanf("%d", &a);
	b = 1;
	for (c = 1; c < a 1; c  )
	{
		n = n   fac(a, b, c);
	}
	printf("sum%d!=%dn", a, n);
	return 0;
}

这两题我分别用了循环、函数和宏的三种思路来编写代码,当然肯定还有其他的编写方式,有兴趣的朋友可以尝试一下,如果可以的话各位朋友,你们可以将你编写好的内容分享出来,供大家参考你的编写思路,咱们在分享的过程中可以相互进步。

今天的内容到这里就结束了,希望这篇内容对大家在运用循环、函数和宏相关的知识点上会有帮助,后面随着学习的深入,我会继续给大家分享我在学习过程中的感受,感谢大家的翻阅,咱们下一篇见。

0 人点赞