摘要:作者多年從事計(jì)算機(jī)應(yīng)用技術(shù)研究和教學(xué),在C語(yǔ)言程序設(shè)計(jì)的教學(xué)過(guò)程中,作者一直在探索激發(fā)學(xué)生學(xué)習(xí)興趣、降低課程難度、提高學(xué)習(xí)成績(jī)的有效途徑,并提出自己的一些做法供同行們參考。
關(guān)鍵詞:C語(yǔ)言;教法;計(jì)算機(jī)
正文:
源程序:
#include<stdio.h>
#include<stdlib.h>
void main()
{// 嘗試計(jì)算圓周率小數(shù)點(diǎn)后300位
// 格里高利公式:pi=1-1/3+1/5-1/7+... ...
// 設(shè)置變量
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(?。╯0/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 ? ?");}
程序說(shuō)明:
這個(gè)程序里用一個(gè)整型數(shù)組來(lái)存放π的計(jì)算結(jié)果,通過(guò)程序的講解,我們可以初步理解用數(shù)組存放和打印大數(shù)據(jù)的方法,這也是用C語(yǔ)言進(jìn)行科學(xué)計(jì)算的一個(gè)使用例子,為學(xué)生們打開(kāi)程序設(shè)計(jì)的一面窗戶。
整個(gè)程序結(jié)構(gòu)上很實(shí)用,語(yǔ)言上很簡(jiǎn)練,算法也簡(jiǎn)單。
相關(guān)知識(shí):
這個(gè)例子里用數(shù)組存放大數(shù)據(jù),大致可以分兩步,第一步是數(shù)組里每一個(gè)元素中數(shù)據(jù)的計(jì)算,第二步是數(shù)組中每一個(gè)元素中數(shù)據(jù)的進(jìn)位。
相關(guān)練習(xí):
(1) π的另一種計(jì)算方法,這是網(wǎng)上流傳很廣的一個(gè)程序,已經(jīng)找不到出處了,經(jīng)過(guò)驗(yàn)證是可以運(yùn)行的,大家可以嘗試分析一下其算法原理。
#include<stdio.h>
#include<stdlib.h>
Int main()
{system("title 圓周率計(jì)算");
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) 選擇排序法排序,這是一個(gè)簡(jiǎn)單的排序法練習(xí),頭文件里有time.h,大家可以嘗試使用隨機(jī)數(shù)來(lái)給數(shù)組賦值。
#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個(gè)數(shù):\n\n ? ? ");
for(i=0;i<10;i++)
{scanf("%d",&m[i]);}
printf("\n您輸入的數(shù)組—————\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排序后的數(shù)組—————\n");
for(k=0;k<10;k++)
printf("%5d",m[k]);
printf("\n\n");
getchar();}
總結(jié):
C語(yǔ)言程序設(shè)計(jì)是一門(mén)非常注重實(shí)踐的課程,無(wú)論課堂教學(xué)還是上機(jī)實(shí)踐,教師的童心和發(fā)散思維,都是學(xué)生們突破學(xué)習(xí)難點(diǎn)、提高學(xué)習(xí)興趣和建立良好的學(xué)習(xí)習(xí)慣的強(qiáng)有力的助力和催化劑。
參考文獻(xiàn)
[1]. 《C程序設(shè)計(jì)》(第三版),譚浩強(qiáng) 著,清華大學(xué)出版社,2005年7月
[2]. C程序設(shè)計(jì)題解與上機(jī)指導(dǎo)》(第三版),譚浩強(qiáng)著,清華大學(xué)出版社,2005年7月
[3]. 《C語(yǔ)言程序設(shè)計(jì)習(xí)題指導(dǎo)與練習(xí)》,劉宏著,清華大學(xué)出版社,2009年1月
作者簡(jiǎn)介:楊英翔(1964.06-),男,漢族,副教授,就職于沈陽(yáng)建筑大學(xué)。