尝试用C语言计算π的小数点后300位C语言趣味课堂练习

2021-06-07 15:59杨英翔
电子乐园·下旬刊 2021年5期
关键词:C语言教法计算机

摘要:作者多年从事计算机应用技术研究和教学,在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-),男,汉族,副教授,就职于沈阳建筑大学。

猜你喜欢
C语言教法计算机
能力本位的《网页前端框架》教法改革与探索
“C语言程序设计”课程混合教学探索
中国计算机报202007、08合刊
中国计算机报2019年48、49期合刊
中国古代的“计算机”
基于C语言的计算机软件编程技术探究
中职C语言单片机课堂教学中的趣味性探讨
新课改背景下高中数学教法的合理整合
计算机原理中C语言的应用价值
What kind of role should English teachers play in the intensive reading class