摘要:作者多年從事計算機應用技術研究和教學,在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-),男,漢族,副教授,就職于沈陽建筑大學。04D6D49D-437D-4CE8-BB67-EDC0E584C8E4