重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#include
创新互联主营临海网站建设的网络公司,主营网站建设方案,APP应用开发,临海h5小程序制作搭建,临海网站营销推广欢迎临海等地区企业咨询
int
func(int
i);
//函数的原型定义
int
main(void)
{
int
n;
float
y;
scanf_s("%d",n);
//n没有被初始化,为任意值,此时是读取一个值给n,删去,直接给n初始化为5也可以
scanf_s是vs2013编译器专用的,请自行改成scanf
y
=
func(n);
/*函数的调用*/
printf("%d!=%f",
n,
y);
/*for语句多余*/
return
0;
}
int
func(int
i)
{
int
sum=0;
if
((i
==
0)
||
(i
==
1))
sum
=
1;
else
sum
=
func(i-1)
*
i;
//
i的值没有变化,一直都是读入的值,不会终止递归。
return
sum;
}
由外到内,逐层完成,for循环的方法你应该知道了吧,我就不一一说了。
首先进行最外面的循环,第一次
i=1
,进入循环体,由于他的循环体是另一个循环,也就是执行另一个循环,
首先由
j=0
开始,然后有进入循环体。。。也就是执行第三层循环,在你上面的程序来说
,完成第三个循环一共要循环
7次
,k
从
2
到
10
(等于10的时候跳出去,实际执行9次)。
然后,第二层循环进行了
1
次
,j
由
变成
1
,继续循环,也就是从新开始
第三层循环。这样一直下去,知道
j=10
跳出了第二层循环
,第一个循环才
完成了
1次
,i
由1变成
2,继续又进入到第二层,第三层循环,在一层一层跳出来,直到跳出最外层循环为止。
用一句话来说就是
逐层进入,逐层完成,逐层跳出。
C语言的三种循环是可以互相嵌套的。但是必须要注意的是,他们是完整的嵌套而不可以发生交叉的现象。
循环的过程是先执行第一个大循环for(i=0;i3;i++),此句中先给i赋值0,在判断条件i3是否成立赋值后的i=0了,所以条件成立,成立则做下面一条语句,就是for(j=0;j4;j++),同样这个循环还是先赋值j=0,在进行判断j4是否成立,成立就再做下一句。
此时scanf语句后面已经没有语句了,所以程序就会跳上去到第二个循环中,即for(j=0;j4;j++)这句话中,可能你会问为什么不是第一句
(因为在循环嵌套中只有循环体执行完成所以的任务后才执行下面的语句,就是for(j=0;j4;j++)
要全部执行完毕才能执行后面的语句。即j4条件为假时跳出)跳到for(j=0;j4;j++)这个循环体以后。就会自动加一,就是执行j++(注:在这个for里面的j=0不再执行),这个赋值过程只在开始时执行。所以
j
这个循环要执行到条件不满足时停止,即最后j的值要=4.。
这样
j
这个循环就结束了。结束后又跳到了第一句。因为第二个for是包含在第一个for
里的。只有第一个for
里包含的语句全部执行完后第一个for就再一次执行i++,i
变成了2,判断条件i3成立,就再执行下一句,所以下面的for(j=0;j4;j++)又要再一次执行。执行完后就在回到第一个for执行。
原理:
i=0,j
执行4次,给a[0][0],a[0][1],a[0][2],a[0][3]赋值
i=1,j
执行4次,给a[1][0],a[1][1],a[1][2],a[1][3]赋值
i=2,j
执行4次,给a[2][0],a[2][1],a[2][2],a[2][3]赋值
i=3跳出.
还有不懂再问
根据C99标准,数据块允许的嵌套层数为127层
,也就是说c语言最多允许循环嵌套使用127层。