尝试用C语言计算π的小数点后300位C语言趣味课堂练习
2021-06-07杨英翔
摘要:作者多年从事计算机应用技术研究和教学,在C语言程序设计的教学过程中,作者一直在探索激发学生学习兴趣、降低课程难度、提高学习成绩的有效途径,并提出自己的一些做法供同行们参考。
关键词:C语言;教法;计算机
正文:
源程序:
#include<stdio.h>
#include<stdlib.h>
void main()
{// 尝试计算圆周率小数点后300位
// 格里高利公式:pi=1-1/3+1/5-1/7+... ...
// 设置变量
int a[20000]={0};int s=1,s0;int v=1;int i,j,k,m;
for(i=1;i<50000000;i++)
{j=0;s0=s;
while(!(s0/v))
{j++;s0*=10;}
for(k=1;k<=300;k++)
{a[j]+=s0/v;s0=(s0%v)*10;j++;}m=j;
for(j=m;j>=1;j--)
{a[j-1]=a[j-1]+a[j]/10;
a[j]=a[j]%10;
if(a[j]<0)
{a[j-1]=a[j-1]-1;
a[j]=10+a[j];}}s=-1*s;v=v+2;}
for(j=0;j<=m;j++)
a[j]=a[j]*4;
for(j=m;j>=1;j--)
{a[j-1]=a[j-1]+a[j]/10;a[j]=a[j]%10;
if(a[j]<0)
{a[j-1]=a[j-1]-1;a[j]=10+a[j];}}
printf("\n\n PI=\n ");
for(j=0;j<=m;j++)
{printf("%d",a[j]);
if((j+1)%4==0)
printf(" ");}
/*FILE * p;
p=fopen("圆周率.doc","w");
fprintf(p,"\n\n PI=\n ");
for(j=0;j<=m;j++)
{fprintf(p,"%d",a[j]);
if((j+1)%4==0)
fprintf(p," ");}
fprintf(p,"\n\n ");
fclose(p);*/
printf("\n\n Game Over\n\n ");
system("pause");
printf("\n ");}
程序说明:
这个程序里用一个整型数组来存放π的计算结果,通过程序的讲解,我们可以初步理解用数组存放和打印大数据的方法,这也是用C语言进行科学计算的一个使用例子,为学生们打开程序设计的一面窗户。
整个程序结构上很实用,语言上很简练,算法也简单。
相關知识:
这个例子里用数组存放大数据,大致可以分两步,第一步是数组里每一个元素中数据的计算,第二步是数组中每一个元素中数据的进位。
相关练习:
(1) π的另一种计算方法,这是网上流传很广的一个程序,已经找不到出处了,经过验证是可以运行的,大家可以尝试分析一下其算法原理。
#include<stdio.h>
#include<stdlib.h>
Int main()
{system("title 圆周率计算");
system("color 2f");
long a=10000,b=0,c=3500,d=0,e=0,f=0,g[3501];
for( ;b-c; )
g[b++]=a/5;
for( ;d=0,f=c*2;c-=14,printf( "%.4d ",e+d/a),e=d%a)
for(b=c;d+=g[b]*a,g[b]=d%--f,d/=f--,--b;d*=b);
printf("\n\n ");}
(2) 选择排序法排序,这是一个简单的排序法练习,头文件里有time.h,大家可以尝试使用随机数来给数组赋值。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
main()
{system("color 2f");
system("title ---选择排序法");
system("mode con cols=130 lines=40");
int m[256],i,j,t,k,s;
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++)
{t=i;for(j=i+1;j<=9;j++)
{if(m[t]>m[j])t=j;}
s=m[t];m[t]=m[i];m[i]=s; }
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-),男,汉族,副教授,就职于沈阳建筑大学。