c語言高級編程及實例剖析
C語言功能強大,具有豐富靈活的控制與數據結構、簡潔而高效的語句表達、清晰的程序結構、良好的移植性、較小的空間開銷等優點,已被廣泛應用於系統軟體與應用軟體的開發中。.
本書以深化程序設計語言C語言為目的,以具體常見的計算機硬體與操作系統為背景,講述在微機上編寫精巧、美觀、友好的應用軟體。本書內容與實例並進,對C語言編程做了深入和具體的探討。涉及的知識面廣,從內存管理,到文本屏幕界面設計,再到文件操作、圖形圖像操作、中斷、通信技術、基本匯流排介面編程和游戲開發應用,幾乎涵蓋了C語言編程的方方面面。通過對本書的學習,讀者將對C語言高級編程有一個深刻的理解和掌握。
本書在內容安排上採用內容與實例並進的方式。每一章中,先講述相關內容,然後通過實例解析講述內容的具體應用。實例解析注重對實例的分析,對方法的詳細講解,以及對知識點的歸納總結。本書對各個實例以需求分析、源代碼解析、運行結果和歸納總結為主線進行剖析,通過實例來講解知識點,又通過相應的知識點來分析實例。通過研讀,讀者可以很快掌握此方面的知識,並較快將其應用到工程開發中。在結構安排上,充分考慮了層次性和內容上的循序漸進。
本書包括9章,主要內容如下。
第1章為內存管理,主要針對優化內存使用、提高內存的使用效率、提高程序運行速度。該章介紹了PC的存儲器結構和基本的堆管理函數,包括學生信息資料庫實例和巧用內存管理創建通信錄實例。通過本章的學習,讀者將對亡語言的內存管理有一個清晰的了解和認識。
第2章為文本屏幕界面設計,包括文本方式控制、窗口設置和文本屏幕輸出函數、清屏和游標操作函數、屏幕移動與存取函數、狀態查詢函數等內容。該章還詳細剖析了創建彈出式菜單實例、文本方式下拉式菜單和將屏幕分為兩個窗口進行對話的實例。通過本章的學習,讀者可以掌握如何對文本屏幕界面進行操作。..
第3章為文件高級操作,介紹標准文件的基本輸入輸出操作和一些實用的文件處理方法,包括文件的加密與解密、文件的分割與合並等。通過本章的學習,讀者將會逐步掌握一些實用的文件處理技巧。
第4章為圖形圖像,介紹如何使用Turbo C提供的圖形函數繪制基本的圖形(包括畫點、線、矩形和條形圖,畫圓、橢圓和扇形圖等)、對圖形的顏色控制函數、封閉圖形的填色函數及有關畫圖函數、屏幕操作函數、圖形方式下的文本輸出函數、動畫技術、菜單生成技術、圖形程序使用環境、直接存儲存取和SVGA編程,還介紹使用這些基本圖形的實際應用,圖形圖像綜合應用——用動畫演示排序演算法。通過本章的學習,讀者將逐步掌握如何使用C語言繪制圖形。
第5章為中斷,介紹中斷的基本概念、滑鼠中斷編程的應用、鍵盤中斷編程的應用和用中斷方式製作的菜單等。通過本章的學習,讀者將掌握對滑鼠和鍵盤的中斷控制。
第6章為通信技術,主要介紹Winsock編程基礎、Cscoket編程技術、串並口編程,雙機連接方法等,並通過雙機並口通信實例和網路通信編程實例的剖析講述了通信技術的實際應用。通過本部分的學習,讀者將逐步掌握通信技術。
第7章為基本匯流排介面編程,主要介紹ISA匯流排、PCI匯流排、PCI匯流排配置和採用中斷方式的信號採集程序。通過本章的學習,讀者將對匯流排介面編程有一定了解。
第8章為游戲開發,介紹DOS環境下的C語言游戲編程,是綜合實例。魔方游戲實例,實際上是對直接寫屏、中斷、多任務、內存技術、動畫技術、顯示技術和優化演算法等各種編程技術,及內存、音效卡、鍵盤、滑鼠等各種硬體原理和硬體編程的綜合應用。
第9章是綜合開發實例——信息管理系統。本部分將重點向讀者介紹如何採用模塊化程序設計思想來設計一個綜合的C程序,提高讀者編寫大型程序的能力。
本書主要針對C語言程序設計的高級讀者,適合已經熟悉和掌握了C語言的基礎知識,想用C語言開發更完美的軟體,更為深入地了解C語言的一些細節和使用技巧的讀者。本書可以使學習過C語言語法的初學者快速成長為C語言編程高手,也可以作為工程人員的參考手冊。
本書由王為青、劉變紅編著,參與本書編輯和修改的還有徐強、劉艷偉、吳洋、房明浩、嚴雨、王亮、梅樂夫、劉艷褘等同志。在此,對以上人員致以誠摯的謝意!
由於本書涉及的范圍比較廣泛,作者的經驗有限,書中難免有不足或錯誤之處,敬請各位讀者批評指正。
『貳』 C語言中遞歸調用的實例以及講解。
下面演示一個斐波那契數列前N項和#include <stdio.h>
#define COL 10 //一行輸出10個
long scan()
{ //輸入求fibonacci函數的第N項
int n;
printf("Input the N = ");
scanf("%d",&n);
return n;
}
long fibonacci(int n)
{ //fibonacci函數的遞歸函數
if (0==n||1==n) { //fibonacci函數遞歸的出口
return 1;
}
else {
return fibonacci(n-1)+fibonacci(n-2);
//反復遞歸自身函數直到碰到出口處再返回就能計算出第n項的值
}
}
int main(void)
{
int i,n;
n = scan();
printf("Fibonacci數列的前%d項\n", n);
for (i=0; i<n;) //輸出fibonacci函數前n項每項的值
{
printf("%-10ld",fibonacci(i++)); //調用遞歸函數並且列印出返回值
if(i%COL==0)
{ //若對COL取余等於0就換行,也就是控制每行輸出多少個,
//而COL=10就是每行輸出10個
printf("\n");
}
}
printf("\n");
return 0;
}
『叄』 哪本C語言入門的書比較好
如果你英語很棒,你完全可以看
Herbert
Schildt著
戴健鵬譯
《ANSI
C祥解》
Herbert
Schildt著
英文名《C
How
to
program,second
Edition》
這些都是很好的書,你能看懂就看吧
看不懂就譚浩強的吧,他也是參考這些書的,別說他的不好,他只是沒把難的寫出來,如果對一個新手直接給個幾萬行的代碼,你能認為你有信心學下去?
不用簡單的問題舉例,非要用很難實現的問題給你當例題講,你能聽懂?
你還有繼續學下去的勇氣么?
到時你什麼都聽不懂,你還想學么?
你能把他書後的各題完全搞懂,輕松搞定的話那就很不錯了,以後再想深入就不難了,沒有書能完全介紹C語言的,現在高級語言功能太強了,超過了C,所以C只當基礎來學,幾乎所有書後都有,其他函數如有需要,可查看函數手冊,所以除非你看懂外文書,否則還是老實點吧,別一口想吃成胖子,到時得不償失!
『肆』 C語言高級編程及實例剖析的介紹
本書結合實例,深入淺出地介紹了C語言在主要應用領域的編程技術。全書共9章,分別為內存管理、文本屏幕界面設計、文件高級操作、圖形圖像、中斷、通信技術、基本匯流排介面編程、游戲開發和綜合開發實例——信息管理系統。
『伍』 c語言計算機圖形編程的程序求各種實例(並說明一下啊)謝謝謝!!
1》DDA法畫直線的例子:void CMyView::OnDdaline()
{
CDC* pDC=GetDC();//獲得設備指針
int xa=100, ya=300, xb=300, yb=200,c=RGB(0,255,0);//定義直線的兩端點,直線顏色
int x,y;
float dx, dy, k;
dx=(float)(xb-xa), dy=(float)(yb-ya);
k=dy/dx, y=ya;
if(abs(k)<1)
{
for (x=xa;x<=xb;x++)
{pDC->SetPixel (x,int(y+0.5),c); <br> y=y+k;}
}
if(abs(k)>=1)
{
for (y=ya;y<=yb;y++)
{pDC->SetPixel (int(x+0.5),y,c); <br> x=x+1/k;}
}
ReleaseDC(pDC);
}
void CMyView::OnBresenhamline()
{
CDC* pDC=GetDC();
int x,y,i,e,dx,dy,t;
int x1=100,y1=200,x2=350,y2=100,c=RGB(0,0,255);
dx=abs(x2-x1),dy=abs(y2-y1),e=2*dy-dx;
x=x1,y=y2;
if(dx>dy)
{
for(i=0;i<=dx;i++)
{
pDC->SetPixel(x,y,c);
x++;
if(e>=0)
{y++;<br> e=e+2*dy-2*dx;}else e=e+dy;
}
}
else
{
t=dx;
dx=dy;
dy=t;
for(i=0;i<=dx;i++)
{
pDC->SetPixel(x,y,c);
x++;
if(e>=0)
{y++;<br> e=e+2*dy-2*dx;}else e=e+dy;
}
}
}2》中心畫圓法 做園 void CMyView::OnMidpointcircle()
{ CDC* pDC=GetDC();
int xc=100,int yc=200,float R=50,float alpha=1;
int i;
float sinalpha,cosalpha,xi,yi,xii,yii,steps;
sinalpha=sin(pi*alpha);
cosalpha=cos(pi*alpha);
xi=xc+R;
yi=yc;
steps=360;
for(i=0;i<steps;i++)//每隔45°確定一個園上的點。
{
xii=xc+(xi-xc)*cosalpha-(yi-yc)*sinalpha;//確定第一點xii,yii.其與圓心的連線和 xi,yi與圓心的連線夾角45°
yii=yc+(xi-xc)*sinalpha+(yi-yc)*cosalpha;
pDC->MoveTo(xi,yi);
pDC->LineTo(xii,yii);
xi=xii;
yi=yii;
}
}3》 bresenham法畫圓void CMyView::OnBresenhamcircle()
{
// TODO: Add your command handler code here
CDC* pDC=GetDC();
int xc=300, yc=300, r=40, c=RGB(0,0,255);
int x,y,p; x=0,y=r,p=3-2*r;
while(x<y)
{
pDC->SetPixel(xc+x, yc+y, c);
pDC->SetPixel(xc-x, yc+y, c);
pDC->SetPixel(xc+x, yc-y, c);
pDC->SetPixel(xc-x, yc-y, c);
pDC->SetPixel(xc+y, yc+x, c);
pDC->SetPixel(xc-y, yc+x, c);
pDC->SetPixel(xc+y, yc-x, c);
pDC->SetPixel(xc-y, yc-x, c);
if (p<0)
p=p+4*x+6;
else
{
p=p+4*(x-y)+10;
y-=1;
}
x+=1;
}
if(x==y)
pDC->SetPixel(xc+x, yc+y, c);
pDC->SetPixel(xc-x, yc+y, c);
pDC->SetPixel(xc+x, yc-y, c);
pDC->SetPixel(xc-x, yc-y, c);
pDC->SetPixel(xc+y, yc+x, c);
pDC->SetPixel(xc-y, yc+x, c);
pDC->SetPixel(xc+y, yc-x, c);
pDC->SetPixel(xc-y, yc-x, c);
ReleaseDC(pDC);
}與圖形相關的還有很多很多,掃描線填充法,種子填充法 等等想要真正了解的話 推薦一本書!《計算機圖形學》以上程序只能說明引用方法,畢竟很對關於以上程序的東西 都在自己做的頭文件里。