利用c語言編譯器做複雜的數值計算

2021-06-15 21:30:56 字數 1648 閱讀 9979

王師兄的程式,我覺得很有意思。對於數值運算,比如sin(sin(0.5)+con(0.5))+exp(2)。如果要我們計算出它的結果。顯然,非常的複雜。我們要寫乙個詞法分析器,還要建立乙個名詞表。要費上好大的勁才能完成。但是,實際上,c語言都有這樣的函式。在,而編譯的工作就是詞法分析。我們完全可以自己寫乙個程式,該程式生成乙個c程式,這樣,就可以充分利用c編譯器的功能了。

請看**:

這是乙個執行的程式,在這個程式中,又呼叫了乙個程式programforzxq,而這個程式生成了乙個動態的程式。

執行程式: example.exe :

//將字串轉換成表示式並求值

#include

#include

#include

#define g_resultfilename "c:"

#define g_maxcharnum 255

double eval(char *strexpression)

void main()

程式programforzxq:

#include

#include

#include

#include

#include

#define g_filename "c:"

#define g_execfilename "myprogram.exe"

#define g_objfilename "myprogram.obj"

#define g_resultfilename "c:"

#define g_maxcharnum 255

void main(int argc,char **strexpression)

pf=fopen(g_filename,"w");

sprintf(temp,"double d=%s;",tmpstrexpression);

fputs("#include /n",pf);

fputs("#include /n",pf);

fputs("#include /n",pf);

fputs("#include /n",pf);

fputs("void main()/n",pf);

fclose(pf);

memset(temp,0,g_maxcharnum);

sprintf(temp,"cl %s >>%s",g_filename,g_resultfilename);  

system(temp);

//system(g_execfilename);

memset(temp,0,g_maxcharnum);

sprintf(temp,"%s >   %s",g_execfilename,g_resultfilename);

system(temp);

deletefile(g_execfilename);

deletefile(g_objfilename);

}這個程式呼叫編譯器生成了乙個myprogram.exe。然後執行這個程式,並把執行結果儲存在result.txt.所以前面 的那個執行程式就只要顯示這個檔案的內容就可以了。

這樣,就可以很容易的實現了乙個功能相對比較強大的數值計算程式了。可以處理各種複雜 的數值計算。很方便。很好用。我打算把它移植到linux上。應該是乙個很好玩的事情。

C 語言 編譯器

c 語言是高階程式語言,人們在使用 c 語言工作的時候不必用數字碼表示指令,大大簡化了對於計算機底層暫存器的操作,人們可以把工作的重點放在 設計和具體功能的實現,編寫出更易讀易懂的 可是計算機的工作和人類正好相反,c 語言編寫的 對於計算機而言就好比是天書且沒有意義可言,因為計算機是識別機器語言的,...

C語言的編譯器

c語言的常用編譯器 目前最流行的c語言編譯器有以下幾種 gnu compiler collection 或稱 gcc microsoft c 或稱 ms c borland turbo c 或稱 turbo c 這些c語言版本不僅實現了ansi c標準,而且在此基礎上各自作了一些擴充,使之更加方便 ...

C語言編譯器哪個好 6款好用的C語言編譯器推薦

其實win tc是款很不錯的軟體。去用一下你就知道了,因為我自學c時就是用的那個軟體,真的向你推薦它!推薦使用vc 6.0中文版,因為國家考試用的就是那個,當然了還有turbo c這個也是以前國家考試用的,但是這些版本很老了,而且沒有現在的方便,比如你遇到了問題想去諮詢下別人,老版本的尤其是比較經典...