




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、24位位圖格式解析每一行的圖素數等于該結構的bcWidth字段。每一行從最左邊的圖素開始,直到圖像的右邊。分別對應的B,G,R像素。每個像素占8位, 每列的寬度為bcWidth,必須為4的倍數,不足的用零填充。下面是讀取二十四位位圖的關鍵代碼:代碼1 BITMAPFILEHEADER * pbmfh ;2 BITMAPINFO * pbmi ;3 BYTE * pBits ;4 pbmfh = DibLoadImage (szFileName) ;5 pbmi = (BITMAPINFO *) (pbmfh + 1) ;6 pBits = (BYTE *) pbmfh + pbmfh-bfOf
2、fBits ;7 for( i=0; i 1024; i+)8 9 pPrintBlocki = (char*)malloc(216);10 memset(pPrintBlocki, 0, 216);11 1213 for(h = 0; h bmiHeader.biHeight; h+)14 15 for(w = 0; w bmiHeader.biWidth; w+)16 17 b1 = *pBits; /B18 b2 = *(pBits+1); /G19 b3 = *(pBits+2); /R20 if( (int)b1 != 255 & (int)b2 != 255 & (int)b3 !
3、= 255)21 22 index = w / 8;23 index = 1 (w%8);24 index = pPrintBlockhw / 8 | ( 1 (w%8) );25 pPrintBlockhw / 8 = pPrintBlockhw / 8 | ( 1 bmiHeader.biWidth *3 % 4 != 0)31 32 pBits += ( 4 - pbmi-bmiHeader.biWidth*3 % 4);33 34 c語言初學者環境選擇語言初學既要考慮學習的效果,還要考慮今后的使用和發展。所以我推薦幾個c語言的開發環境:1、kdevelop是linux下最好的開發環境之
4、一,也是linux下主要的開發軟件。有志于做linux開發的可在此環境下學習。學習順序為:c-c+-數據結構-操作系統原理-數據庫(orcale、mysql)-QT(GTK、gomn2、bcb是borlandc+builder非常經典的c&c+開發環境,在vc+和delphi對決江湖時,c+builder是一匹黑馬,學習難度小于vc+,但功能基本和vc+齊平,兼有跨平臺開發的本事(linux)3、vs2008是微軟搞的集成開發環境vb、c#、c+、j#等開發環境功能之強大嘆為觀止(可惜只能在windows下使用),可以開發窗口程序、網站、移動設備程序包括嵌入程序。以只是建議,僅供參考。C語言入
5、門必備手冊這里不是教你什么知識,而是給你澄清一些資料,只給對編程一竅不通的或者剛入門的人看。 如果你尚未學習或者才學習不夠一天,一定要看這手冊,這份手冊已經講述的知識,我們不會在版面給予回答 此手冊我會盡量保持準確,但如有不正確,請指正 我也會不斷更新此手冊一、什么都不懂Q:什么是C?A: 一門面向過程的計算機語言,發明至今已經差不多有三十年歷史,由于它相對其他高級語言高效,運行效率又比較接近低級語言,所以至今仍得到廣泛的引用,無論你用windows還是linux,你現在看到東西的底層都是用C寫的,而大部分的網絡協議都是用C實現的,畫面最漂亮的游戲用C實現的,工業控制程序也是用C實現的。C不是
6、萬能,也不是垃圾,只是一門某些方面適用,某些方面不適用的語言Q:什么是C+?A:一門面向對象的計算機語言,發明至今已經有二十多年了。由于面向對象編程對程序架構有較好的幫助,因為比較適合構建大型的系統(當然,學術界對此存在爭論),但無論如何,C+由于和C一樣接近底層,而且又面向對象,所以也得到廣泛的使用。C+不是萬能,也不是垃圾,只是一門某些方面適用,某些方面不適用的語言,不要向某一個笨蛋一樣認為c + 類 = c+ 。Q:TC,VC,BC,BCB是什么?有什么區別?誰好?A:它們都是開發C/C+的開發環境,是軟件。它們是不同時期由不同公司發行的軟件 Turbo C ,Borland公司在八十年
7、代末期發行的C語言的開發環境 Turbo C+,Borland公司在八十年代末九十年代初發行的C+語言的開發環境 Visual C+,Microsoft公司 在九十年代至今發行的C/C+開發環境 Borland C+,Borland公司 在九十年代中發行的C/C+開發環境 Borlan C+ Builder,Borland公司在九十年代后期至今開發的C/C+開發環境,與其他開發環境不用的是它屬于快速應用程序開發(RAD),可以讓你不寫代碼就能建立程序,當然它的運行效率見仁見智 沒有什么是萬能的,不同場合用不同的東西 而且C/C+還有很多開發環境,譬如gcc, watcom C+, Dev C/
8、C+Q:什么語言/開發環境最好?A:沒有最好,只有最適用某方面Q:需要什么基礎才能學C/C+A:至少學過幼兒園語文,小學英語,小學數學才能學,所以先確定你擁有小學學歷,然后就能學了 至于學習C+前是否需要學C,C+的發明者認為不用,但見仁見智Q:如何更有效的學習C/C+?A:不斷的看書+實踐,先把書上的練習題做完再說,務必記住不要鉆牛角尖,很多初學者經常犯這樣的錯誤,不要盲目的提出問題,現在看來是問題其實在以后的實踐和學習中都會慢慢理解的,任何東西都需要一個過程。萬萬不可浮躁。Q:TC能開發windows軟件嗎?A:不能,因為不同系統,生成的程序格式不同Q:要多久才能成為高手?A:當你不再問這
9、個問題的時候,總是會有比你技術高的人,也許你在你生活的環境中沒有,的確可以說你在這個小范圍是高手,但是再在別的地方一定會有比你厲害的人只是你沒有接觸到而已Q:學C/C+有什么用?A:先想想你為了什么而學,想不到就不要學Q:學完C/C+又能怎樣A:沒怎樣,學是為了使用服務的 只證明你會一門語言,但不等于你會開發軟件。就像學外語,為的是跟外國人交際,但如果你不懂交際,幾時精通英語,法語,日語,朝鮮語,阿拉伯語,西班牙語還是不會跟人交際 你應該繼續學習軟件開發的知識,包括數據結構,算法,軟件工程等等,還有要提高數學水平,譬如微積分,離散數學,矩陣,概率,統計,數值分析Q:我有很多不懂,怎么辦?A:查
10、幫助,搜索引擎。最著名的幫助文檔叫MSDN,我們主要使用其光盤發行版,D版可以從電腦城買,正版可以去微軟訂購,如果沒有光盤可以去查詢。二、開始學習了Q:我在TC看到缺少cos.obj的提示,為什么?A:路徑設置錯誤,在Options菜單-Directionary,分別TC里面1、設置含有很多.h文件的目錄,2、設置含有很多lib文件的目錄,3、設置生成可執行文件的目錄,4、設置TC本身所在的目錄。 記得最后要選Save OptionsQ:include A:Q:全角/半角 A:Q:使用VC看到不能連接_main或_WinMain的提示A:如果你需要用main做主函數,請新建Project-Wi
11、n32 Console Application 如果你需要用WinMain做主函數,請新建Project-Win32 ApplicationQ:使用TC/VC看不到輸出,或者一閃而過在 TC,按Alt+F5,或者在程序最后加上system(PAUSE), 或者加上getchar() 在VC,選擇Excute執行,或者在程序最后加上system(PAUSE), 或者加上getchar()C語言實現清屏操作子函數及演示程序:#include#include#includevoid goto_xy(int x,int y);void dcls(int x1,int x2,int y1,int y2)
12、;void bcls(int x1,int x2,int y1,int y2);void kcls(int x1,int x2,int y1,int y2);void recls(int x1,int x2,int y1,int y2);void zcls(int x1,int x2,int y1,int y2);void puta(void);/*-演示程序-*/main()puta();getch();dcls(0,4,0,79);getch();puta();getch();bcls(0,25,0,79);getch();puta();getch();zcls(0,25,0,79);ge
13、tch();/*center clear screen(中心清屏)*/void zcls(int x1,int x2,int y1,int y2)int x00,y00,x0,y0,i,d;if(y2-y1)(x2-x1)d=(x2-x1)/2;x0=(x1+x2)/2;y0=y1+d;y00=y2-d;for(i=0;i(d+1);i+)recls(x0-i),(x00+i),(y0-i),(y00+i);delay(10);elsed=(y2-y1)/2;y0=(y1+y2)/2;x0=x1+d;x00=x2-d;for(i=0;id+1;i+)recls(x0-i,x00+i,y0-i,
14、y00+i);delay(10);/* clear rectangle side(矩形邊清屏)*/void recls(int x1,int x2,int y1,int y2)int i,j;for(i=y1;iy2;i+)goto_xy(x1,i);putchar( );goto_xy(x2,i);putchar( );delay(10);for(j=x1;jx2;j+)goto_xy(i,y1);putchar( );goto_xy(j,y2);putchar( );delay(10);/*open screen clear(開屏式清屏)*/void kcls(int x1,int x2,
15、int y1,int y2)int t,s,i,j;t=s=(y1+y2)/2;for(;t=y2;t+,s-)for(j=x1;jx2;j+)goto_xy(j,t);putchar( );goto_xy(j,s);putchar( );delay(10);/*close screen clear*閉幕式清屏*/void bcls(int x1,int x2,int y1,int y2)int t,s,j;t=y1;s=y2;for(t=y1;t(y1+y2)/2;t+,s-)for(j=x1;jx1;j-)for(i=y1;iy2;i+)goto_xy(j,i);putchar( );de
16、lay(10);/*設置光標子函數*/void goto_xy(int x,int y)union REGS r;r.h.ah=2;r.h.dl=y;r.h.dh=x;r.h.bh=0;int86(0x10,&r,&r);/*在屏幕上打出一連串的a字母用于演示程序*/void puta(void)int i,j;for(i=0;i24;i+)for(j=0;j79;j+)goto_xy(i,j);printf(a);C語言學習要領1、計算機語言挺枯燥的,如何提起興趣答:首先要明確學習的目標,沒有明確的學習目標就沒有學習動力。給自己定一個目標,比如這次一定通過計算機等級考試,或者這個月學習完做個
17、東西出來等等。其次,確定了目標之后,要認真去做,多上機操作實踐,遇到不懂的要多跟教師和其他學員交流,千萬不能放棄。當自己編的一段小程序運行通過,或攻下一道難題,自己就會獲得一種成就感,可能還會很興奮,也就漸漸有了興趣。最后,要把所學的知識運用到實際問題當中,這樣既可以鞏固所學的知識,不至于完學了就忘,還可以根據實際需要拓展知識面。這樣良性循環,興趣也會越來越濃。2、有學員來信問到:我的電腦里安裝的TURBO?C(970K)不能正常的編譯,現象是:在編譯過程中,提示沒有錯誤也沒有警告,按任意鍵返回,可是在電腦上不能生成OBJ文件,有時提示:Unable to open input filecos
18、.obj,我的朋友從他們學校的PC上拷貝回來的程序也出現這個問題?!在他們學校卻很正常,這是怎么回事?這個問題一直在困擾我,使我的學習不能進行下去!請幫我解決。謝謝!答:這需要重新設置options-directories中的include目錄和lib目錄,設為你C的安裝目錄就可以了。記住要保存喲!3、#includemain()int m=7,n=4;float a=38.4,b=6.4,x;x=m/2+n*a/b+1/2;printf(%fn,x);這個程序的結果是27.為什么我一直算的是28.呢?請指教答:main()int m=7,n=4;float a=38.4,b=6.4,x;x=
19、m/2+n*a/b+1/2;printf(%fn,x);m/2=3;因為m是整形所以結果為整形不是3.5而是3同樣1/2不是0.5而是0。要改的話,x=(float)m/2+n*a/b+1.0/2.0;結果為28.00004、有些人說我的程序很難讓人看懂,請問如何將程序寫得規范、簡潔明了答:這是編程中重要的一點,要養成良好的編程習慣。請看一個例題:程序很簡單,是用TURBO C編一個時鐘程序。具體如下:/*Module:clock.cjust a test of my programming ability*/#includemath.h#includedos.h#includestdio.h
20、#includegraphics.hmain()char s30;int gdriver,gmode;int cosh,sinh,cosm,sinm,coss,sins;struct ;time t;char keydown=0;int x=300,y=160,r=40;clrscr();gdriver=9; gmode=1;initgraph(&gdriver,&gmode,a:);/*需要說明的是,第三個參數a:是egavga.bgi這個文件的路徑*/* install the graphic device.the third parameter is the path of the dr
21、iver*/setbkcolor(0);setcolor(WHITE);while(1)circle(x,y,r);/*paintthecircle*/line(x,y+r-10,x,y+r-12);line(x+r-4,y,x+r,y);line(x-r,y,x-r+4,y);line(x,y-r+10,x,y-r+10+2); /* draw the fout scales */gettime(&t);sprintf(s,The current time is %2d:%02d:%02dn,t.ti_hour,t.ti_min,t.ti_sec,t);outtextxy(0,0,s); /
22、* out put the current time */outtextxy(0,10,This clock is written by lijun); /*?show the auther */coss=(int)(r-10)*cos(t.ti_sec*3.14f/30-3.14f/2)+x);sins=(int)(r-10)*sin(t.ti_sec*3.14f/30-3.14f/2)+y);cosm=(int)(r-19)*cos(t.ti_min*3.14f/30-3.14f/2)+x);sinm=(int)(r-19)*sin(t.ti_min*3.14f/30-3.14f/2)+y
23、);cosh=(int)(r-28)*cos(t.ti_hour+(float)(t.ti_min)/60)*3.14f/6-3.14f/2)+x);sinh=(int)(r-28)*sin(t.ti_hour+(float)(t.ti_min)/60)*3.14f/6-3.14f/2)+y);/* calculate the position of the three points */setcolor(14);line(x,y,coss,sins);setcolor(13);line(x,y,cosm,sinm);setcolor(10);line(x,y,cosh,sinh);setco
24、lor(15);/* draw the points */sleep(1);clrscr(); keydown=kbhit();/* check whether key down */if(keydown)closegraph();/* close graphic device */exit(0);printf的實現原理在C/C+中,對函數參數的掃描是從后向前的。C/C+的函數參數是通過壓入堆棧的方式來給函數傳參數的(堆棧是一種先進后出的數據結構),最先壓入的參數最后出來,在計算機的內存中,數據有2塊,一塊是堆,一塊是棧(函數參數及局部變量在這里),而棧是從內存的高地址向低地址生長的
25、,控制生長的就是堆棧指針了,最先壓入的參數是在最上面,就是說在所有參數的最后面,最后壓入的參數在最下面,結構上看起來是第一個,所以最后壓入的參數總能被函數找到,因為它就在堆棧指針的上方,printf第一個被找到的參數就是那個字符指針,就是雙引號括起來的那一部分,函數通過判斷字符串里控制參數的個數來判斷參數個數及數據類型,通過這些就可算出個數據需要的堆棧指針的偏移量了,下面給出printf(%d,%d,a,b);(其中a,b都是int型的)匯編代碼.section .data string out=“%d,%d”push b;push a;push $outcall printf看到沒參數是最后
26、的先壓如,最先的后壓入,參數控制的那個字符串常量最后壓入,所以這個常量總是能被找到。名師談C語言的重要性和如何學習C語言很多人對學習C語言感到無從下手,經常問我同一個問題:究竟怎樣學習C語言?我是一個教師,已經開發了很多年的程序,和很多剛剛起步的人一樣,學習的第一個計算機語言就是C語言。經過這些年的開發,我深深的體會到C語言對于一個程序設計人員多么的重要,如果不懂C語言,你想寫底層程序這幾乎聽起來很可笑,不懂C語言,你想寫出優秀高效的程序,這簡直就是天方夜譚。為什么C語言如此重要呢?第一:C語言語法結構很簡潔精妙,寫出的程序也很高效,很便于描述算法,大多數的程序員愿意使用C語言去描述算法本身,
27、所以,如果你想在程序設計方面有所建樹,就必須去學它。第二:C語言能夠讓你深入系統底層,你知道的操作系統,哪一個不是C語言寫的?所有的windows,Unix,Linux,Mac,os/2,沒有一個里外的,如果你不懂C語言,怎么可能深入到這些操作系統當中去呢?更不要說你去寫它們的內核程序了。第三:很多新型的語言都是衍生自C語言,C+,Java,C#,J#,perl.哪個不是呢?掌握了C語言,可以說你就掌握了很多門語言,經過簡單的學習,你就可以用這些新型的語言去開發了,這個再一次驗證了C語言是程序設計的重要基礎。還有啊,多說一點:即使現在招聘程序員,考試都是考C語言,你想加入it行業,那么就一定要
28、掌握好C語言。那么究竟怎樣學習C語言呢?1:工欲善其事,必先利其器這里介紹幾個學習C語言必備的東東:一個開發環境,例如turbo C2.0,這個曾經占據了DOS時代開發程序的大半個江山。但是現在windows時代,用turbo C有感覺不方面,編輯程序起來很吃力,并且拖放,更沒有函數變量自動感應功能,查詢參考資料也不方便。建議使用Visual C+,這個東西雖然比較大塊頭,但是一旦安裝好了,用起來很方便。一本學習教程,現在C語言教材多如牛毛,但推薦大家使用C語言程序設計譚浩強主編 第二版 清華大學出版社,此書編寫的很適合初學者,并且內容也很精到。除此以外,現在有很多輔助學習的軟件,畢竟現在是W
29、indow時代了,學習軟件多如牛毛,不象我們當初學習,只有讀書做題這么老套。我向大家推薦一個“集成學習環境(C語言)”,里邊的知識點總結和例程講解都非常好,還有題庫測試環境,據說有好幾千題,甚至還有一個windows下的trubo C,初學者甚至不用裝其它的編譯器,就可以練習編程了,非常適合初學者。還有一個“C語言學習系統”軟件,不過感覺只是一個題庫系統,如果你覺得題做的不夠,不妨也可以試試。2:葵花寶典學習計算機語言最好的方法是什么?答曰:讀程序。沒錯,讀程序是學習C語言入門最快,也是最好的方法。如同我,現在學習新的J#,C#等其他語言,不再是抱著書本逐行啃,而是學習它們的例程。當然,對于沒
30、有學過任何計算機語言的初學者,最好還是先閱讀教程,學習完每一章,都要認真體會這一章的所有概念,然后不放過這一章中提到的所有例程,然后仔細研讀程序,直到每一行都理解了,然后找幾個編程題目,最好是和例程類似的或一樣的,自己試圖寫出這段已經讀懂的程序,不要以為例程你已經讀懂了,你就可以寫出和它一樣的程序,絕對不一定,不相信你就試一試吧,如果寫不出來,也不要著急,回過頭來再繼續研究例程,想想自己為什么寫不出來,然后再去寫這段程序,反反復復,直到你手到擒來為止,祝賀你,你快入門了。3:登峰造極寫程序的最高境界其實就是掌握各種解決問題的手段(數據結構)和解決問題的方法(算法)。是不是寫出底層程序就是程序設
31、計高手呢?非也,寫底層程序,無非是掌握了硬件的結構,況且硬件和硬件還不一樣,要給一個芯片寫驅動程序,無非就是掌握這塊芯片的各種寄存器及其組合,然后寫值讀值,僅此而已。這不過是熟悉一些io函數罷了。那么怎樣才算精通程序設計呢?怎樣才能精通程序設計呢?舉個例子:你面前有10個人,找出一個叫“張三”的人,你該怎么辦?第一種方法:直接對這10個人問:“誰叫張三”。第2種方法:你挨個去問“你是不是張三?”,直到問到的這個人就是張三。第三種方法:你去挨個問一個人“你認不認識張三,指給我看”。不要小看這個問題,你說當然會選第一種方法,沒錯恭喜你答對了,因為這個方法最快,效率最高,但是在程序設計中找到解決問題
32、的最優方法和你用的手段卻是考驗一個程序員程序設計水平的重要標志,而且是不容易達到的。剛才這個問題類似于數據結構和算法中的:Map數據結構,窮舉查找和折半查找。所以掌握好數據結構和一些常用算法,是登峰造極的必然之路。最后給大家推薦嚴尉敏的數據結構清華大學出版社,希望每一個想成為程序設計高手的人研讀此書。圖形模式下的漢字顯示#include void main()printf(我正在學習語言!);在圖形模式下顯示漢字就稍稍麻煩些。可幸的是有很多人從事這一問題的研究,并開發了一些用于漢字顯示的函數。這些函數不需要漢字系統的支持,但用到其中的字庫文件。如的HZK16。漢字顯示的第一步是打開字庫文件。函
33、數: int OpenHz(const char *Hz16Path); 功能:打開字庫文件Hz16Pathint handle; /*打開的字庫文件指針*/int OpenHz(const char *Hz16Path)return (handle=open(Hz16Path,O_RDONLY|O_BINARY); 打開字庫文件后,就可以用下面介紹的函數顯示16點陣的漢字。函數: int WrtHz16(int x,int y,int z,int color,char *p); 功能:在(x,y)用color顏色顯示漢字串p,漢字之間的空格數為z。intWrtHz16(int x, int y,int z,int color,char *p)unsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/int rec,i1,i2,i3; /*z:space between;*/long l; /*color:txt color*/char by32; /*p:HZ str*/if( handle0xa1)if(f=0)c1=(i-0xa1)&0x07f;f=1;elsec2=(i-0xa1)&0x07f;f=0;rec=c1*94+c2;l=rec*32L;l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45657-2025信息化教學環境視聽技術要求
- GB/T 33745-2025物聯網術語
- 港口與航道工程技術專業教學標準(高等職業教育專科)2025修訂
- 現代移動通信技術專業教學標準(高等職業教育專科)2025修訂
- 2025年中國顆粒酶行業市場全景分析及前景機遇研判報告
- 2025年中國靜電釋放安全鞋行業市場全景分析及前景機遇研判報告
- 2025年中國罐頭包裝市場運營趨勢分析及投資潛力研究報告
- 中國橡塑密封件行業市場調查研究及投資戰略咨詢報告
- 2025年中國車載通信系統行業市場運行現狀及未來發展預測報告
- 2025年中國剛性雙面板行業市場發展現狀及投資戰略咨詢報告
- 土地承包租賃合同書
- 2025年高壓電工作業考試國家總局題庫及答案(共280題)
- 2024年03月安徽省農業信貸融資擔保有限公司2024年招考筆試歷年參考題庫附帶答案詳解
- 國家開放大學《22019丨統計學原理(統設課)》機考題庫
- 門店規章制度守則范本
- 工地交通安全
- 【MOOC】多媒體技術與應用-同濟大學 中國大學慕課MOOC答案
- 高等數學基礎-002-國開機考復習資料
- 各氣象臺站區站號
- 2024年1月云南高中學業水平考試數學試卷真題(含答案詳解)
- 高教版2023年中職教科書《語文》(基礎模塊)下冊教案全冊
評論
0/150
提交評論