如图
结果闺女买了两袋包子,一袋十二个,一共24个包子.为啥?4!=24.n!表示阶乘,n!=1*2*3*...*n如果我们要写一个程序,计算一个数n的阶乘并打印结果,要怎么设计呢? 变量:我们需要输入一个整数n.然后需要一个fac来记录n累乘得结果,最后一个整数i,来让他在fac累乘之后每次加1,在i大于n时退出循环.用我们学过的while循环来做,代码如下:
#include<stdio.h>
int main()
{
int fac=1;
int n;
scanf("%d",&n);
int i=1;
while(i<=n)
{
fac*=i;
i++;
}
printf("%d的阶乘为%d",n,fac);
}
我们看到在我们这个程序里,先是把i初始化,然后再进行判断,在循环的每一步我们让i++.如果我们写出了这样的循环,在c语言中,还有一种语句可以用来表示这种循环,那就是for.
for语句的结构
for(初始动作;循环条件;循环每轮要做的事情)
{
循环体
}
顺序:第一次执行 1 2 4 3 后面每次执行 2 4 3.
for循环就像一个计数循环:设定一个计数器,初始化它,然后在计数器到达某值之前,不断重复循环,而每执行一次循环,计数器的值都会以一定步进做调整,比如加一或者减一.
用for换成while,代码如下:
#include<stdio.h>
int main()
{
int fac=1;
int n;
scanf("%d",&n);
int i=1
for(i=1;i<=n;i++)
{
fac*=i;
}
printf("%d的阶乘为%d",n,fac);
}
变量i只参与了循环,那我们可以这样简化他.把
int i=1
for(i=1;i<=n;i++)
改成
for(int i=1;i<=n;i++)
我们还注意到,在第一次循环的时候,fac=1*1=1,可是fac本来的值就是1了,这样做不是无意义吗,那如果我们把i改为2呢.我们来看看当n=1时,特殊情况,刚刚好合适,因为一开始就不满足循环条件,直接跳过循环,最后刚好输出fac最开始的值1.
我们知道n!是从开始的,那我们可不可以反过来,从n开始呢?可以.改动如下:
int fac=1;
int n;
scanf("%d",&n);
for(int i=n;i>1;i--)
{
fac*=i;
}
printf("%d的阶乘为%d",n,fac);
既然i是等于n的,那我们可不可以直接用n来做循环?可以,n=n;但前面应该要有一个变量来存储n原始始的值,否则最后输出的结果会出错.同时,在for中,像是n=n;这样的初始条件可以省略.所以,最终可以表示为
int fac=1;
int n;
scanf("%d",&n);
int=n;
for(;n>1;n--)
{
fac*=n;
}
printf("%d的阶乘为%d",i,fac);
对于for循环来说,它的三个表达式是都可以省略的,但需要加上其他操作.
小套路:做求和的程序时,初始值应设为0;做求积的程序时,初始值应设为1.