大家好,很高兴我们又见面了。在初识C语言11中我们有简单的探讨过三种循环语句,前面两个篇章我们分别深入探讨了while循环语句和for循环语句,今天咱们将继续探讨最后一个循环语句do while语句,废话不多说,咱们直接进入正题吧。
do……while语句
1.语句结构
//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的阶乘。
//计算n!方法1——循环
int main()
{
int a, b= 1;
for (a = 1; a < 10; a++)
{
b = b * a ;
printf("%d!=%d\n",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!=%d\n", 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!=%d\n", a, n);
return 0;
}
2.计算1!+2!+3!+……+10!
//计算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!=%d\n", 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!=%d\n", 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!=%d\n", a, n);
return 0;
}
这两题我分别用了循环、函数和宏的三种思路来编写代码,当然肯定还有其他的编写方式,有兴趣的朋友可以尝试一下,如果可以的话各位朋友,你们可以将你编写好的内容分享出来,供大家参考你的编写思路,咱们在分享的过程中可以相互进步。
今天的内容到这里就结束了,希望这篇内容对大家在运用循环、函数和宏相关的知识点上会有帮助,后面随着学习的深入,我会继续给大家分享我在学习过程中的感受,感谢大家的翻阅,咱们下一篇见。