文章目录

  • 静态变量求阶乘相加
  • 普通方法求阶乘相加

本篇仍然是C语言的相关知识,主要分析了用C语言的静态变量来求各个阶乘的和;当然也包括了阶乘和静态变量的相关分析

静态变量求阶乘相加

1、阶乘的概念:

From“科普中国”
一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。
亦即n!=1×2×3×…×(n-1)×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。

2、静态变量的概念:

From“科普中国”
静态变量(Static Variable)在计算机编程领域指在程序执行前系统就为之静态分配(也即在运行时中不再改变分配情况)存储空间的一类变量。与之相对应的是在运行时只暂时存在的自动变量(即局部变量)与以动态分配方式获取存储空间的一些对象,其中自动变量的存储空间在调用栈上分配与释放。

3、静态变量大白话:
(1)说白了静态变量就是作用域无法影响其值的变量,比如在C语言的函数中,形参都是临时变量,函数调用结束后,临时变量的内存空间就会被释放掉;
(2)可是静态变量就不会,它会一直存在,知道整个程序运行结束;
(3)如果你在函数中定义一个静态变量,该静态变量的内存空间也不会随着函数调用结束而消失;
(4)静态变量只能在定义它们的函数中引用,跳出该函数后其值不变,下一次再调用该函数时,其值仍为上次结束时的值
(5)在C语言中,静态变量是由static存储类声明的变量

4、题:
求1到n的阶乘相加

5、分析用静态变量求阶乘:
(1)原本求阶乘就是需要两个变量,一个用来保存每一项阶乘的值,一个用来保存各阶乘的和;
(2)求每一项阶乘中,又需要让前一项阶乘的值保持不变;所以这时候就可以用静态变量来处理;
(3)比如用s来做每一项的阶乘,n2表示该阶乘的下一项数字,则求阶乘的函数中应该用s= s*n2;来求下一项的阶乘;

//求阶乘
long factor(int n2)
{static long s= 1;     //定义静态变量s:静态变量只能在定义它们的函数中引用,跳出该函数后其值不变,下一次再调用该函数时***其值仍为上次结束时的值*** s= s*n2;return s;
}

(4)然后每次返回s的值,加到求和变量sum中,在循环条件下,n2的值会加1,一直加到我们指定的那个值才停,循环结束,求和完成

//求阶乘的和
long sum(int n1)
{int i;long sum= 0;for(i=1; i<=n1; i++){sum += factor(i);}return sum;
}

6、完整参考代码:

#include <stdio.h>
long factor(int n2);  //函数的声明,一个用静态变量求阶乘,一个用来求各个阶乘的和
long sum(int n1);void main()
{int n;long s;printf("请输入n的值:");scanf("%d",&n);s= sum(n);printf("结果为:%d",s);
}//求阶乘的和
long sum(int n1)
{int i;long sum= 0;for(i=1; i<=n1; i++){sum += factor(i);}return sum;
}//求阶乘
long factor(int n2)
{static long s= 1;     //定义静态变量s:静态变量只能在定义它们的函数中引用,跳出该函数后其值不变,下一次再调用该函数时***其值仍为上次结束时的值*** s= s*n2;return s;
}

6、参考结果:

这里的n值是6,算的就是1!+2!+3!+4!+5!+6!
总要算6次阶乘,再加6次
因为有了静态变量,我们就直接使用上一项阶乘的值,而不用重新定义变量,减少了循环,降低了时间复杂度

普通方法求阶乘相加

1、分析:
普通方法就需要用到循环,来求每一项的阶乘;

//求阶乘
long factor(int n2)
{int i;long s= 1;for(i=1; i<=n2; i++){s= s*i;}return s;
}

因为它没有一个变量来保存上一项阶乘的值

2、参考代码:

#include <stdio.h>
long factor(int n2);
long sum(int n1);void main()
{int n;long s;printf("请输入n的值:");scanf("%d",&n);s= sum(n);printf("结果为:%d",s);
}//求阶乘的和
long sum(int n1)
{int i;long sum= 0;for(i=1; i<=n1; i++){sum += factor(i);}return sum;
}//求阶乘
long factor(int n2)
{int i;long s= 1;for(i=1; i<=n2; i++){s= s*i;}return s;
}

3、参考结果:

(篇四)C语言静态变量法,求各阶乘,的和相关推荐

  1. c语言中求定积分矩形法,C语言使用矩形法求定积分的通用函数

    本文为大家分享了C语言使用矩形法求定积分的通用函数,供大家参考,具体内容如下 要求: 写一个用矩形法求定积分的通用函数,分别求:sin(x),cos(x),e^x . 分析: 矩形法,学过高等数学就知 ...

  2. C语言静态变量static的分析

    对C语言静态变量static分析,解释了static为什么在局部变量里面定义的时候不会随着函数执行完毕而销毁,也稍微用解释了静态存储区和动态存储区的小知识 文章目录 学习static前要先认识 sta ...

  3. C语言:欧几里得算法求最大公约数

    文章目录 欧几里得算法 C语言:欧几里得算法求最大公约数 C语言:穷举法 欧几里得算法 举个例子说明欧几里得算法. 如图所示,用正方形地板砖,把这一块粉红色空地(长为xxx,宽为yyy,x>yx ...

  4. C语言——利用静态变量计算n的阶乘

    利用静态变量计算n的阶乘. **输入格式要求:"%d" 提示信息:"Input n:" **输出格式要求:"%d! = %ld\n" 程序运 ...

  5. c语言静态变量存在堆还是栈,c 类 static 函数 什么样是静态变量?嵌入式C语言的堆栈管理如何实现...

    C语言中静态变量是什么意思,有什么作用,static在数据类型前面表示什么 最近刚看了C存储类的章节.所以来说说. C语言为变量提供了⑤种不同的存储模型,或者说是存储类. ①个变量可以用存储时期描述, ...

  6. c语言用梯形法计算积分,c语言用梯形法求积分

    c语言用梯形法求积分 來源:互聯網  2009-12-29 11:56:13  評論 分類: 電腦/網絡 >> 程序設計 >> 其他編程語言 問題描述: #include fl ...

  7. 矩形法求定积分c语言流程图,矩形法求定积分其程序与程序框图的实现.doc

    矩形法求定积分及其程序与程序框图的实现 ――实例探索定积分思想,切实提高课堂效果 王亮 佛冈县第一中学 数学科 [摘 要]定积分"四部曲"思想,对高中生来说不易接受,教学上用计算机 ...

  8. 弦截法求方程根例题c语言,弦截法求方程根.ppt

    弦截法求方程根弦截法求方程弦截法求方程根弦截法求方程根 12 §3 迭代收敛的加速法 取g(x)=x3-1 , 则: 程序设计 function [f,k]= Steffensen(eps,x0) % ...

  9. C语言用矩形法求定积分的通用函数,分别求 sinx, cosx,e^x

    要求: 写一个用矩形法求定积分的通用函数,分别求:sin(x),cos(x),e^x . 分析: 矩形法,学过高等数学就知道化曲为直的思想.将定积分化为多个函数连续的和.基本思想是将区间[a,b]化成 ...

最新文章

  1. 字少事大|两张表格教你快速选择适合的MCU进行物联网开发
  2. 在vue中实现picker样式_基于Vue实现timepicker
  3. Portal-Basic Java Web 应用开发框架:应用篇(八) —— 整合 Freemarker
  4. ssm 项目cannot resolve package_前端工程化之创建项目
  5. 走近伏羲,谈5000节点集群调度与性能优化
  6. PySide: 信号、槽
  7. DB2一个嵌套循环的sql
  8. 为什么属龙的有二婚命_为什么属龙的有二婚命 一生婚姻运势详解
  9. Word高效指南 - WORD的自带模板
  10. android调整图片大小,Android图像调整大小并保留EXIF数据(方向,旋转等)
  11. linux 笔记本双显示器,Ubuntu设置笔记本电脑双显示器(linux)
  12. I Love ces(大小写字母转换 金马五校赛-上海大学)
  13. 教你自己训练的pytorch模型转caffe(二)
  14. Tensorflow-GPU使用时笔记本电脑声音过大的问题
  15. 呼叫中心坐席功能在职场中的应用
  16. 【Python量化】如何监测领涨板块,挖掘题材龙头股?
  17. 2021年,谁发现了边缘计算的赚钱生意?
  18. 1100亩烟台深耕水稻 国稻种芯·中国水稻节:山东盐碱地水稻
  19. mysql表collate冲突_数据库排序规则的冲突(理解collate Chinese_PRC_CI_AS)
  20. 批量上传视频到阿里云

热门文章

  1. java settitle 源码_在其他初始化方法中折叠工具栏的setTitle - java代码 - 源码查
  2. 联想服务器imm默认地址_命令下配置ip地址
  3. 液晶显示器的台式计算机耗电,电脑的显示器一开一关耗电量大么 注意 是显示器的开关...
  4. php table转json,html table表数据转Json格式示例代码分析
  5. java jtextfield 事件_java – 处理JTextField中的编辑事件
  6. mysql故障切换_MySQL故障切换笔记之应用无感知设计详解
  7. 5点击换gif_新媒体人,至少要会做这种切换式GIF
  8. mysql 最左_mysql索引最左匹配原则
  9. linux内存测试工具memtest,Linux-内存检测利器Memtest86+v1.70
  10. .net mysql 序号_MYSQL如何自动为查询数据的结果编上序号详解