尝试用C语言计算大数阶乘C语言课堂趣味练习
2022-05-13杨英翔
摘要:作者多年从事计算机应用技术研究和教学,在C语言程序设计的教学过程中,作者一直在探索激发学生学习兴趣、降低课程难度、提高学习成绩的有效途径,并提出自己的一些做法供同行们参考。
关键词:C语言;教法;计算机
正文:
源程序:
#include
#include
#define N 2000 //可以是任意一个数的阶乘
int main( )
{system("title 求N的阶乘"); //设置标题
system("color 2f"); //设置颜色
int a[100000],b=0,i,j; //设置数组预备存放数据
for(i=0;i<100000;i++) //设置数组里每一位都是零
a[i]=0;
a[0]=1; //设置数组的第一位是1,就是第一个乘数是1
printf("\n\n %d!=",N); //打印等式的左侧N!=
for(i=2;i<=N;i++) //设置阶乘的乘数
{for(j=0;j<=b;j++) //设置阶乘的计算
a[j]*=i;
b+=16; //設置数值的每一个元素只保存一位整数
for(j=0;j
if(a[j]>9)
{a[j+1]+=a[j]/10;
a[j]%=10;}
while(a[b]==0) b--;}
for(i=b; i>=0; i--) //设置逆序打印
printf("%d", a[i]);
printf("\n ");
return 0;}
程序说明:
这个程序里用一个整型数组来存放N的阶乘的结果,通过程序的讲解,我们可以初步理解用数组存放和打印大数据的方法,这也是用C语言进行科学计算的一个使用例子,为学生们打开程序设计的一面窗户。
整个程序结构上很实用,语言上很简练,算法也简单。
相关知识:
这个例子里用数组存放大数据,大致可以分两步,第一步是数组里每一个元素中数据的计算,第二步是数组中每一个元素中数据的进位。打印数组中存放的大数据,使用逆序打印。
相关练习:
(1) N的阶乘的另一种方法,这是网上流传很广的一个程序,已经找不到出处了,经过验证是可以运行的,大家可以尝试分析一下其算法原理。
#include
#include
#define N 800 //设置阶乘的N值
long s[N]={1},n=10000,t=2,x,y,m;
int main()
{system("title 大数据的计算和显示");
system("color 2f");
printf("\n\n %d!=",N);
for(;x<=m||++t<=N&&(x=y=0,1);m==x++&&y&&m++)
s[x]=(y+=s[x]*t)%n,y/=n;
for(printf("%d",s[m]);m--;)
printf("%04d",s[m]);
printf("\n\n ");
return 0;}
(2)冒泡排序法,这是一个简单的排序法练习,头文件里有time.h,大家可以尝试使用随机数来给数组赋值。
#include
#include
#include
#include
main()
{system("color 2f");
system("title ---冒泡排序法");
system("mode con cols=130 lines=40");
int m[256],i,j,t,k;
printf("\n\n 输入10个数:\n\n ");
for(i=0;i<10;i++)
{scanf("%d",&m[i]);}
printf("\n您输入的数组—————\n");
for(i=0;i<10;i++)
{printf("%5d",m[i]);}
for(i=0;i<9;i++)
{for(j=0;j<9-i;j++)
{if(m[j]>m[j+1])
{t=m[j+1];
m[j+1]=m[j];
m[j]=t;}}}
printf("\n\n排序后的数组—————\n");
for(k=0;k<10;k++)
printf("%5d",m[k]);
printf("\n\n");
getchar();}
总结:
C语言程序设计是一门非常注重实践的课程,无论课堂教学还是上机实践,教师的童心和发散思维,都是学生们突破学习难点、提高学习兴趣和建立良好的学习习惯的强有力的助力和催化剂。
参考书籍
[1]. 《C程序设计》(第三版),谭浩强 著,清华大学出版社,2005年7月
[2]. C程序设计题解与上机指导》(第三版),谭浩强著,清华大学出版社,2005年7月
[3]. 《C语言程序设计习题指导与练习》,刘宏著,清华大学出版社,2009年1月
作者简介:杨英翔(1964.06-),男,汉族,副教授,就职于沈阳建筑大学。