编写程序,求出1到n之间所有奇数的阶乘值。
输入格式:
从键盘输入正整数n的值(不超过12)。
输出格式:
按输出样例的形式输出计算的结果。
![](https://img-blog.csdnimg.cn/img_convert/84bb76be8a3d686893c952c647ad9e5e.png)
代码如下:
#include<stdio.h>
//一个求阶乘的函数
int F(int x)
{
int i = 0;
int j = 1;
for (i = 1; i <= x;i++) {
j = j * i;
}//用for循环算阶乘值
return j;//返回阶乘值
}
int main()
{
int n;
int i = 0;
int m = 0;
scanf("%d",&n);//键盘输入正整数n
for (i = 1; i <= n;i++) {
//判断是否是奇数
if (i%2 != 0) {
//如果是奇数求其阶乘值,我们可以定义一个函数来算阶乘值
m = F(i);
printf("%d! = %d\n",i,m);
}
}//遍历1~n之间的数。
return 0;
}
也可以用嵌套循环来做。不过这里面要注意m定义的地方,由于局部变量生命周期的缘故,它必须定义在第一个for循环内部,不然结果会出错!推荐大家在做的时候可以先跑一下把m定义在for循环外部的结果,对比正确答案很容易发现为什么把m定义在for循环外部会出错。
#include<stdio.h>
int main()
{
int n;
int i = 0;
int j = 1;
scanf("%d",&n);//键盘输入正整数n
for (i = 1; i <= n;i++) {
//这里m必须定义在第一个for循环内,因为它的生命周期应该是从进for循环开始出for循环结束
//如果定义在for循环外部那么上一次输出的m值就会作为下一次for循环开始的初始值,导致结果错误
//在做的时候可以自己验证一下,定义在for循环外会输出什么结果。
int m = 1;
//判断是否是奇数
if (i%2 != 0) {
//直接嵌套一个for循环求阶乘值
for (j = 1; j <= i; j++) {
m = m * j;
}
printf("%d! = %d\n", i, m);
}
}//遍历1~n之间的数。
return 0;
}