當前位置:首頁 » 編程語言 » c語言提高教程
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言提高教程

發布時間: 2022-12-19 04:22:22

c語言學習教程入門

學習C語言不是一朝一夕的事情,但也不需要花費十年時間才能精通。
1、要讀就讀好書,否則不如不讀
所有初學者面臨的第一個問題便是:如何選擇教材,好的開始是成功的一半,選擇一本優秀的教材是事半功倍的關鍵因素。不幸的是,學校通常會指定一本很差勁的C語言課本;而幸運的是,你還可以再次選擇,比如:
《C語言程序設計》
《C程序設計語言》
《C語言參考手冊》
《C和指針》
《Pointers on C》
2、初學者應該以Visual C++ 6.0(不是VisualC++ .NET)或者Dev C++作為主要的學習環境,而且千萬不要在IDE的使用技巧上過多糾纏,因為今後一定要轉向Unix環境的。
Visual C++ 6.0使用很方便,調試也很直觀,但其默認的編譯器對C標準的支持並不好,而Dev C++使用gcc編譯器,對C99的標准都支持良好。
3、書已選定,環境配置完成,正所謂萬事俱備,只欠自己的努力了。
請從書的前言開始,仔細地閱讀手頭的教材,很多人看書喜歡直接從第一章開始看,這是錯誤的做法。前言是作者對整本書的大體介紹,作者一般會告訴你需要什麼基礎才能夠順利閱讀本書,這可以幫助你檢驗自己的基礎知識是否已經具備。看完前言,還要瀏覽一下目錄,了解一下書的整體結構,順便給自己安排一下學習計劃。
4、學習C語言,必需注意每一個細節,書上的例子代碼一定要自己親自敲一遍,編譯執行輸出都跟書上說的一致才能算是學完了一個例子,如果不一致,就要仔細找原因。出了書本上有的例子,自己還要「創造」一些例子,比如學習運算符優先順序的時候,可以寫幾個相同的表達式,在不同的位置加上括弧,看看有哪些不同的行為,比如*p++和(*p)++,又比如a = b == c、(a = b) == c和a = (b == c)等等。自己抄的書上的例子以及改造之後的例子,還有自己「創造」的例子,都應該仔細地歸類保存,並且要在源代碼中寫上簡短的注釋,闡述這個例子的意圖。
5、仔細讀書、認真抄寫源代碼、獨立完成習題外加更進一步的實驗,最後將所有的代碼留下,成為自己的經驗和財富,絕對的辛苦,也絕對的事半功倍。當然,這種方式只適合學習需要精通的技術,如果不是學習C語言,你還要具體情況具體分析。
6、最後,還有非常非常重要的一點沒有提及──代碼風格,從最開始學習就必須強迫自己模仿最優秀的代碼風格。

❷ C語言高精度教程

高 精 度 算 法
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <malloc.h>
int an,bn,fa=1,fb=1; /* 把an,bn,k設為全局變數,an紀錄第一個高精度數組的位數,bn紀錄第二個高精度數組的位數,k紀錄輸出結果的位數*/
char b1[250], b2[250]; /*紀錄需要計算的兩個高精度數據 */
void input(int a1[],int a2[]) /*函數input為輸入函數,用來紀錄兩個待計算的高精度數據,以數組首地址為參數.以實現返回兩個高精度數據*/
{
int i,ai=1,bi=1;
scanf ( "%s%s", b1, b2 ); /*輸入兩個高精度數據 */
an = strlen( b1 ); /*an紀錄b1的位數 */
bn = strlen( b2 ); /*bn紀錄b2的位數 */
if(b1[0]==45) { an--; fa=-1;ai=0;} /*判斷數組的符號 */
if(b2[0]==45) { bn--; fb=-1;bi=0;}
for (i=0; i<an; i++,ai++) {a1[i]=b1[an-ai]-'0'; printf("%d",a1[i]);} /*把字元形數據b1轉為整數形數據,同樣用數組紀錄 */
for (i=0; i<bn; i++,bi++) a2[i]=b2[bn-bi]-'0'; /* 同上 */
return;
}
void addition(int a[],int b[],int q) /*高精度加法運算*/
{
int i,c[251]={0},k;
if(fa*fb>0||q)
{
if(an>bn) k=an;
else k=bn; /*用k紀錄結果的最小位數*/
for(i=0;i<k;i++)
{
c[i]=a[i]+b[i]+c[i];
c[i+1]=(int)c[i]/10;
c[i]=(int)c[i]%10;
} /*高精度加法運算過程*/
if(c[k]) k++; /*判斷最後結果的位數*/
if(fa<0&&q||fa<0) printf("-");
for(i=k-1;i>=0;i--) printf("%d",c[i]); /*輸出結果*/
return;
}
return;
}void subtraction(int a[],int b[],int q) /*高精度減法運算*/
{
int i,f=0,c[251]={0},k;
if(fa*fb>0||q)
{
if(an>bn) k=an;
else /*用k紀錄結果的最大位數*/
{ k=bn;
for(i=k;a[i]<=b[i]&&i>=0;i--)
if(a[i]<b[i]) f=1; /*f紀錄結果符號*/
} if(!f) /*高精度減法運算過程*/
for(i=0;i<k;i++)
{
if(a[i]<b[i])
{ a[i+1]--;
a[i]+=10;
}
c[i]=a[i]-b[i];
}
else /*當a<b時的處理*/
for(i=0;i<k;i++)
{
if(b[i]<a[i])
{ b[i+1]--;
b[i]+=10;
}
c[i]=b[i]-a[i];
}
while(!c[k-1]&&k>1) k--; /*判斷最後結果的位數*/
if(q&&(fa>0&&f||fa<0&&!f)||fa>0&&(fb>0&&!f||f&&!q)) printf("-"); /*如果f為真是輸出負號*/
for(i=k-1;i>=0;i--) printf("%d",c[i]);
return;
}
} void multiplication( int a[], int b[]) /*高精度乘法運算*/
{
int i, j, c[501] = {0},k;
k = an + bn - 1; /*用k紀錄結果的最大位數*/
for(i = 0; i < an; i++) /*高精度乘法運算過程*/
for(j = 0;j < bn; j++)
{
c[i+j] = a[i] * b[j] + c[i+j];
c[i+j+1] = c[i+j] / 10 + c[i+j+1];
c[i+j] = c[i+j] % 10;
}
while(!c[k]) k--; /*判斷最後結果的位數*/
if(fa*fb<0) printf("-");
for(i = k; i >= 0; i--) printf("%d",c[i]); /*輸出結果*/
}
main()
{
int a[250]={0},b[250]={0};
input(a,b);
printf("\n%s+%s=",b1,b2);addition(a,b,0);
printf("\n%s-%s=",b1,b2);subtraction(a,b,0);
printf("\n%s*%s=",b1,b2);multiplication(a,b);
getchar();
}
1、 高精度除以低精度;
演算法:按照從高位到低位的順序,逐位相除。在除到第j位時,該位在接受了來自第j+1位的余數後與除數相除,如果最高位為零,則商的長度減一。源程序如下:
#include <stdio.h>
#define N 500
main()
{
int a[N] = {0}, c[N] = {0};
int i, k, d, b;
char a1[N];
printf("Input 除數:");
scanf("%d", &b);
printf("Input 被除數:");
scanf("%s", a1);
k = strlen(a1);
for(i = 0; i < k; i++) a[i] = a1[k - i - 1] - '0';
d = 0;
for(i = k - 1; i >= 0 ; i--)
{
d = d * 10 + a[i];
c[i] = d / b;
d = d % b;
}
while(c[k - 1] == 0 && k > 1) k--;
printf("商=");
for(i = k - 1; i >= 0; i--) printf("%d", c[i]);
printf("\n余數=%d", d);
} 2、高精度乘以高精度(要求用盡可能少的存儲單元);
演算法:用數組保存兩個高精度數,然後逐位相乘,注意考慮進位和總位數。源程序如下:
#include <stdio.h>
main()
{
int a[240] = {0}, b[240] = {0}, c[480] = {0};
int i, j, ka, kb, k;
char a1[240], b1[240];
gets(a1);
ka = strlen(a1);
gets(b1);
kb = strlen(b1);
k = ka + kb;
for(i = 0; i < ka; i++) a[i] = a1[ka-i-1] - '0';
for(i = 0; i < kb; i++) b[i] = b1[kb-i-1] - '0';
for(i = 0; i < ka; i++)
for(j = 0; j < kb; j++)
{
c[i + j] = c[i + j] + a[i] * b[j];
c[i + j +1] = c[i + j +1] + c[i + j]/10;
c[i + j] = c[i + j] % 10;
}
if(!c[k]) k--;
for(i = k-1; i >= 0; i--) printf("%d", c[i]);
} 3、高精度除以高精度(要求用盡可能少的存儲單元);
演算法:用計算機模擬手算除法,把除法試商轉化為連減。
#include <stdio.h>
#define N 500
int bj(int a[], int b[], int k1, int k2) /*比較大小函數*/
{
int i, t, flag; /*flag作標志位*/
if(k1 < k2)
flag = 0; /*被除數小於除數返回0*/
else if(k1 > k2)
flag = 1; /*被除數大於除數返回1*/
else
{ /*被除數和除數位數相等則逐位進行比較*/
i = k1;
t = 0;
while(t == 0 && i > 0)
{
if(a[i] > b[i]) {t = 1; flag = 1;}
else if(a[i] == b[i]) i--;
else {t = 1; flag = 0;}
}
if(i == 0 && t == 0) flag = 2; /*被除數等於除數返回2*/
}
return flag;
}
int jf(int a[], int b[], int k1, int k2) /*減法運算*/
{
int i, k, d[N];
for(i = 0; i < k2; i++) d[i] = b[i]; /*把除數賦給數組d*/
for(i = k2; i < N; i++) d[i] = 0; /*d數組無數據的高位置0*/
k = k1 - k2 - 1; /*計算減法起始位置*/
if(k < 0) k = 0;
if(k > 0)
{
for(i = k2 - 1; i >= 0; i--) d[i + k] = d[i]; /*移動減數位數與被減數對齊*/
for(i = 0; i < k; i++) d[i] = 0; /*移動後的其餘位置0*/
}
for(i = 0; i < k1; i++)
{
if(a[i] >= d[i]) a[i] -= d[i];
else
{
a[i + 1] = a[i + 1] - 1;
a[i] = 10 + a[i] - d[i];
}
}
return k;
}
main()
{
int a[N] = {0}, b[N] = {0}, c[N] = {0}, d[N] = {0};
int i, ka, kb, m, t, t1, t2, k, x, kd, kk;
char a1[N], b1[N];
printf("Input 被除數:");
scanf("%s", a1);
ka = strlen(a1);
for(i = 0; i < ka; i++) a[i] = a1[ka - i -1] - '0';
printf("Input 除數:");
scanf("%s", b1);
kb = strlen(b1);
for(i = 0; i < kb; i++) b[i] = b1[kb - i -1] - '0';
kd = ka; /*保存被除數位數 */
t2 = bj(a, b, ka, kb);
m = 0;
do
{
while(a[ka - 1] == 0) ka--;
t = bj(a, b, ka, kb);
if(t >= 1)
{
k = jf(a, b, ka, kb);
c[k]++;
if(k > m) m = k;
t1 = 0;
for(i = k; i <= m; i++)
{
x = c[i] + t1;
c[i] = x % 10;
t1 = x / 10;
}
if(t1 > 0) {m++; c[m] = t1; }
}
}while(t == 1);
if(t2 == 0)
{
printf("商=0");
printf("\n余數=");
for(i = kd - 1; i >= 0; i--) printf("%d", a[i]);
exit(1);
}
if(t2 == 2)
{
printf("商 = 1");
printf("\n余數 = 0");
exit(1);
}
kk = kd;
while(!c[kd - 1]) kd--;
printf("商 = ");
for(i = kd - 1; i >= 0; i--) printf("%d", c[i]);
while(!a[kk]) kk--;
printf("\n余數 = ");
if(kk < 0)
{
printf("0");
exit(1);
}
for(i = kk; i >= 0; i--) printf("%d", a[i]);
}
4、 N!,要求精確到P位(0〈P〈1000〉。
演算法:結果用數組a保存,開始時a[0]=1,依次乘以數組中各位,注意進位和數組長度的變化。源程序如下:
#include <stdio.h>
#define M 1000
main()
{
int a[M], i, n, j, flag = 1;
printf("n=");
scanf("%d",&n);
printf("n!=");
a[0] = 1;
for(i = 1; i < M; i++) a[i] = 0;
for(j = 2; j <= n; j++)
{
for(i = 0; i < flag; i++) a[i] *= j;
for(i = 0; i < flag; i++)
if(a[i] >= 10)
{
a[i+1] += a[i]/10;
a[i] = a[i] % 10;
if(i == flag-1) flag++;
}
}
for(j = flag - 1; j >= 0; j--)
printf("%d", a[j]);
}

❸ C語言高級教程

學習編程,可不僅僅是語言的事情。

基本上所有的新手都不知道自己需要什麼。

我的建議是,你找一些你將來想開發的項目的源碼來看,一邊看,一邊查資料,一邊學習,這樣的效率是非常高的。

而且,基本所有的骨灰程序員都是這么過來的。

另外說一下,如果你想成為一名優秀的程序員,以下幾個部分是必不可少的。

1. mfc,這個你要是搞不清楚是做什麼的,你的c也只能考考試了。
2. 學會用MSDN,沒看過MSDN的C編程者,完全是不入流的學生。
3. 其他計算機編程基礎課程。如:數據結構,軟體工程,編譯原理等等.這些課程學了,可能覺得沒什麼用。可要是不學,那就是你自己沒什麼用了。
4. 進階課程,作為一名計算機編程從業人員,還是要學一點諸如 正則表達式 等工具課程,還是非常有用的。
5. 數學,真的想成為高手?那麼你就不能僅僅停留在編程的水平上,計算機的本質就是數學,沒有數學,想成為一代宗師,簡直痴心妄想。 但是哥們,你得知道的是我說的可不是 高等數學 這種小兒科東西,如果你真的去研究計算機相關的數學,就會知道,這還是很大的一部分內容。

另外,再介紹一點相關的學習經驗吧。

首先,編程開始的時候我個人建議,一定要寫個文檔。除了要寫你的編程思想以外,里邊要詳細說明你要完成的程序的功能,輸入、輸出。 所使用的演算法、定義的全局變數。 個別情況,你甚至可以吧代碼完全寫在紙上,並且詳細注釋。

其次,真正的代碼編寫,實際上就是把你寫在紙上的東西用鍵盤敲進編譯環境而已,這一部分基本沒什麼難度,就是打字員。

然後,改錯的過程是要佔30%的工作量的,通常專業一點就叫做調試過程。

最後,程序完成了以後,要把它保存好,並且再寫上一個用戶文檔,里邊要詳細說明,你這個程序的調用方法或者使用方法,參數等等,這也是必須的。

你必須明白,那些高手們坐在電腦前邊一陣子敲打就搞定一個高難程序的原因是:他們經過無數次訓練早已把以上幾個步驟韻熟於心了!
但是作為一個新手,必須一步一步的來,這是專業規范,不能偷懶的。

還有一點經常被老鳥們忽視的是,新手學習C或者其他語言的時候,有必要學習一個 命名規則,這是看別人代碼和自己編寫高水平程序的一個必須過程,有一本書叫做 微軟C精品編程 的書吧,我記不太清楚了,這個是專門說如何通過一種規則的命名以及布局等方式來減少編程過程中所出現的錯誤的。老鳥的嘔心之作,必須讀!

基本就這樣吧,要知道想學好編程,要做的可遠遠不止這些,努力吧!
有問題可以給我發信,祝成功!

❹ 如何高效的學好C 語言啊

美河提供.C.精髓.軟體工程方法.pdf,免費下載

鏈接:https://pan..com/s/17Q0JIVCI98FVDaRaisgA3A

提取碼:ikzw

C++是一種大型而復雜的語言,其設計目標是作為一種通用的工程語言。 本書分4個部分共19章,不僅詳細介紹了C++語言的基本語法,而且講解了 C++的高級應用(如虛函數、模板、異常等),並通過大量詳盡的代碼表達了有關軟體工程及維護的觀點。

❺ 學習C語言技巧

所有初學者面臨的第一個問題便是:如何選擇教材。好的開始是成功的一半,選擇一本優秀的教材是事半功倍的關鍵因素。不幸的是,學校通常會幫你指定一本很差勁的C語言課本;而幸運的是,你還可以再次選擇。

大名鼎鼎的譚浩強教授出了一本《C語言程序設計》,據說發行量有超過400萬,據我所知,很多學校都會推薦這本書作為C語言課本。雖然本人的名字(譚浩宇)跟教授僅僅一字之差,但我是無比堅定地黑他這本書的。這本書不是寫給計算機專業的學生的,而是給那些需要考計算機等級考試的其它專業學生看的。這本書的主要缺點是:例子程序非常不專業,不能教給你程序設計應該掌握的思考方式;程序風格相當地不好,會讓你養成亂寫代碼的惡習;錯誤太多,曾經有人指出過這本書的上百個錯誤,其中不乏關鍵的概念性錯誤。好了,這本書我也不想說太多了,有興趣大家可以網路一下:)

Kernighan和Ritchie的《The C Programming Language》(中譯名《C程序設計語言》)堪稱經典中的經典,不過舊版的很多內容都已過時,和現在的標准C語言相去甚遠,大家一定要看最新的版本,否則不如不看。另外,即使是最經典最權威的書,也沒有辦法面面俱到,所以手邊常備一本《C語言參考手冊》是十分必要的。《C語言參考手冊》就是《C Reference Manual》,是C語言標準的詳細描述,包括絕大多數C標准庫函數的細節,算得上是最好的標准C語言的工具書。順便提一句,最新的《C程序設計語言》是根據C89標准修訂的,而《C語言參考手冊》描述的是C99標准,二者可能會有些出入,建議按照C99標准學習。還有一本《C和指針》,寫得也是相當地不錯,英文名是《Pointers on C》,特別地強調指針的重要性,算是本書的一個特點吧。不過這本書並不十分適合初學者,如果你曾經學過C語言,有那麼一些C語言的基礎但又不是很扎實,那麼你可以嘗試一下這本書。我相信,只要你理解了指針,C語言便不再神秘。

如果你已經啃完了一本C語言教材,想要更進一步,那麼有兩本書你一定要看。首先是《C Traps and Pitfalls》(中譯名《C陷井與缺陷》),很薄的一本小冊子,內容非常非常地有趣。要注意一點,這本書是二十多年前寫成的,裡面提到的很多C語言的缺陷都已被改進,不過能夠了解一些歷史也不是什麼壞事。然後你可以挑戰一下《Expert C Programming》(中譯名《C專家編程》),書如其名,這本書頗具難度,一旦你仔細讀完並能透徹理解,你便可以放心大膽地在簡歷上寫「精通C語言」了。

切記一個原則,不要讀自己目前還看不懂的書,那是浪費生命。如果你看不懂,那你一定是缺失了某些必需基礎知識。此時,你要仔細分析自己需要補充哪些內容,然後再去書店尋找講述的這些內容的書籍。把基礎知識補充完畢再回頭來學習,才會真正的事半功倍。

Unix/Linux還是Windows,這是個很大的問題

不同的編程環境會造就出不同思維的程序員。Windows的程序員大多依賴集成開發環境,比如Visual Studio,而Unix程序員更加鍾愛Makefile與控制台。顯而易見,集成開發環境更容易上手,在Windows上學習C語言,只需要會按幾個基本的Visutal C++工具欄按鈕就可以開始寫Hello, World!了,而在Unix下,你需要一些控制台操作的基本知識。有人也許認為Unix的環境更簡潔,但習慣的力量是很大的,大家都很熟悉Windows的基本操作,而為了學習C語言去專門裝一個Unix系統,似乎有點不劃算。

對於一個只懂得Windows基本操作、連DOS是什麼都不知道的新手而言,盡快做一些有趣而有意義的事情才是最重要的。用C語言寫一個小程序遠比學習ls、cat等命令有趣,況且我們要專注於C語言本身,就不得不暫時忽略一些東西,比如編譯鏈接的過程、Makefile的寫法等等等等。

所以我建議初學者應該以Visual C++ 6.0(不是VisualC++ .NET)或者Dev C++作為主要的學習環境,而且千萬不要在IDE的使用技巧上過多糾纏,因為今後你一定要轉向Unix環境的。Visual C++ 6.0使用很方便,調試也很直觀,但其默認的編譯器對C標準的支持並不好,而Dev C++使用gcc編譯器,對C99的標准都支持良好。使用順帶提一下,很多大學的C語言課程還在使用Turbo C 2.0作為實驗環境,這是相當不可取的,原因其一是TC 2.0對C標准幾乎沒有支持,其二是TC 2.0編譯得到的程序是16位的,這對今後理解32位的程序會造成極大的困擾(當然,用djgpp之類的東西可以使TC 2.0編譯出32位程序,不過那過於復雜了)。

等你學完一本C語言的教材,你一定要轉向Unix平台繼續學習,幾乎所有的C語言高級教程都是基於Unix平台的(比如《C專家編程》)。轉變的過程是痛苦的,你需要面對的是各種紛繁復雜的命令,完全不同於Windows平台的思考方式,但是這種痛苦是值得的。Unix與C是共生的,Unix的思考方式和習慣更加符合C語言的思考方式和習慣。在Unix下,你可以找到無數優秀的源代碼供你盡情閱讀,你可以方便地查看某個庫函數的聯機手冊,還可以看到最優秀的代碼風格
歸結起來就是一句話:初學C語言,建議使用Windows系統和集成開發環境,在准備向「高手」方向努力時,請先轉向Unix平台。

書已選定,環境配置完成,正所謂萬事俱備,只欠你自己的努力了。請從書的前言開始,仔細地閱讀手頭的教材,很多人看書喜歡直接從第一章開始看,這是錯誤的做法。前言是作者對整本書的大體介紹,作者一般會告訴你需要什麼基礎才能夠順利閱讀本書,這可以幫助你檢驗自己的基礎知識是否已經具備。看完前言,還要瀏覽一下目錄,了解一下書的整體結構,順便給自己安排一下學習計劃。

學習C語言,必需注意每一個細節,書上的例子代碼一定要自己親自敲一遍,編譯執行輸出都跟書上說的一致才能算是學完了一個例子,如果不一致,就要仔細找原因。出了書本上有的例子,自己還要「創造」一些例子,比如學習運算符優先順序的時候,可以寫幾個相同的表達式,在不同的位置加上括弧,看看有哪些不同的行為,比如*p++和(*p)++,又比如a = b == c、(a = b) == c和a = (b == c)等等。自己抄的書上的例子以及改造之後的例子,還有自己「創造」的例子,都應該仔細地歸類保存,並且要在源代碼中寫上簡短的注釋,闡述這個例子的意圖。

例子之後就是習題了,我建議初學者把所有的習題都獨立做一遍,然後對照答案的代碼,看看自己的代碼有那些不足,再試著修改自己的代碼。很多人不重視習題,這是極大的錯誤,因為作者通常會在習題中說明一些重要的道理,而不是單純地檢驗前面的知識。

也許你認為這樣學習太慢,其實不然。學得細致就不用走回頭路,等你學到後面才發現自己前面沒搞清楚,那才是真的得不償失。一般說來,整本書讀完,你應該完成數千行乃至上萬行的代碼,無論是原封不動照抄書上的,還是自己心血來潮寫就的,都是今後繼續學習的一筆財富。以我自己舉例,閱讀《Windows核心編程》時(我只閱讀了3/4的內容),除了抄書上的代碼,還自己寫了很多例子,一共有5574行(用unix下的wc工具統計),時隔多日,我早已記不清Windows的系統編程了,但只要花幾分鍾翻出以前的代碼看看,便會重新瞭然於胸。所謂好記性不如爛筆頭,就是這個道理。

仔細讀書、認真抄寫源代碼、獨立完成習題外加更進一步的實驗,最後將所有的代碼留下,成為自己的經驗和財富,絕對的辛苦,也絕對的事半功倍。當然,這種方式只適合學習需要精通的技術,如果不是學習C語言,你還要具體情況具體分析。

❻ 誰給推薦幾本C語言教程書(詳細的)

1.《The
C
Programming
Language》(《C程序設計語言》)
¥30

(美)Brian
W.Kernighan,Dennis
M.Ritchie
(K&R)著
機械工業出版社
http://www.china-pub.com/computers/common/info.asp?id=14975
2.《C
Primer
Plus》(中文版)
¥60

(美)Stephen
Prata

人民郵電出版社
3.《C語言入門經典》
¥55

(美)霍頓(Horton,I.)著
4.《Programming
in
C》(《C語言編程》)
¥59

(美)Stephen
Kochan

電子工業出版社
5.《Pointers
On
C》(《C指針》)
6.《Expert
C
Programming》(《C專家編程》)
7.《C
Traps
and
Pitfalls》(《C缺陷和陷阱》)
這些網上應該都能下到電子版的。其中1,7我都下載過。建議你著重看.《The
C
Programming
Language》(《C程序設計語言》)
這書相當好也適合初學者。

❼ 自學C語言教程

沒有基礎可以入門,通過努力可以達到初、中級程序員的程度,但再往上走,就比較困難了。後面需要不少演算法、英文和數學知識。
教程的話可以參考下面兩本教程:
譚浩強:《C語言程序設計》
李銘城 黃中豪 陳宇芬:《資料結構 C》

英文的話,進入初級之前都不怎麼需要。但是進入中級後,需要讀一些英文資料。不過現在翻譯比較厲害,絕大部分的資料都有翻譯。但是要進入高級,就必須要學習英文了,因為最新最核心的資料都是英文的,翻譯的往往都會有錯誤。
另外數學在早期影響不大,但是進入中級後就必須要了。因為估算演算法時間復雜度、空間復雜度、圖、樹等等,都涉及不少數學知識。當然如果只是做簡單應用或者驅動的話,這方面要求就不會太高。

最後給一個學習大概的路線圖:
入門級的學習,只要能夠掌握:代碼三大結構(循環、分支、順序)、流程圖、C語言關鍵字和語法、輸入輸出、文件操作、套接字操作。就算是初級滿級了。
初級程序員:數據結構和演算法(排序,查找)、了解軟體開發模型(瀑布模型、敏捷模型、原型模型等等)、了解UML、系統常用API、網路通信、編譯和SDK環境搭建
中級程序員:設計模式、多線程編程、網路通信(伺服器、客戶端)、面向對象編程、掌握UML、系統網路/文件/互斥/線程/事件/安全API、STL、相關法律法規、知道一些常用軟體架構(MVC等)

❽ 對c語言一竅不通……怎麼學從哪裡開始

C語言入門的話,譚浩強的《C語言教程》(第二版第三版都可以)就行了。

具體的學習方法:

  1. 一定要下載一個WIN-TC之類的C語言編譯環境。

  2. 按照《C語言教程》的章節順序學習。對於每一章,先將章節里的例子程序輸入到編譯環境,然後編譯運行看看效果。然後到課後題,自己嘗試著以例子程序為基礎東改一點西改一點,完成課後題。課後題一定要自己在編譯環境中寫代碼,實際編譯。

  3. 不要背誦任何東西。你需要記住的事情在第2步肯定都能記住。

  4. 不要做任何類似單選題填空題之類的題目。對考試或許有用,對學習C語言毫無用處。

  5. 計算機是最耐心、最准確的老師。如果對某個知識點不明確,比如不知道某種寫法是否符合規范,或者不知道某種寫法的效果,那就實際寫個簡單的小程序並編譯運行,讓計算機告訴你答案。