程序:求一个数的阶乘
什么是函数,为什么要用函数
个人理解:函数就是一个小的程序,我们可以用许多小的程序组成大程序,但是写一个main主函数里面肯定会造成程序冗长,阅读困难,不精炼等问题。把小程序分块话就会很好阅读,这就是所说的函数模块化设计。
变量的储存方式和生存周期
储存类型有四种:
自动的auto,调用函数时,系统自动给变量分配储存空间,函数调用结束就会自动释放储存空间
静态的statis, 变量的值在函数调用后不会消失,而且会保留原值,占有的储存单元也不会释放。以便下次调用
寄存器register,使变量的值放在cpu中的寄存器里,在固定多次调用的值(比如10000次)则可以用register,可以提高执行效率
外部的extern,即当前文件内可用,其他C程序也可使用这个变量
用两个函数进行比较
#include<stdio.h>
int A,B,C; //extern全局变量,调用函数的文件:extern int A,B,C;
//如果要将A,B,C限制在当前文件中则可以这样写:
//static int A,B,C;
int main()
{
int fac(int ); //i为形参故可以省略
int fac1(int );
auto int n; //auto局部变量也可不写
printf("请输入你想算的阶乘数:");
scanf("%d",&n);
for (int i = 1; i <= n; i++)
{
printf("fac1() 函数调用 :%d!的阶乘为:%d\n",i,fac1(i)); //将n从键盘获取的值传递给形参
}
printf("fac() 函数调用 :%d!的阶乘为:%d\n",n,fac(n));
return 0;
}
int fac(int i) //构建阶乘函数
{
int a = 1,b = 1; //局部变量
for (; b < i+1 ; b++)
{
a*=b;
}
return(a); //返回运算值
}
int fac1(int i)
{
static int a=1; //static局部变量,a会保留上次调用的值
a*=i; //在上次a的值上再乘i
return(a);
}