| 導購 | 订阅 | 在线投稿
分享
 
 
 

編程者說之C語言

來源:互聯網  2008-06-01 01:57:44  評論

談及C語言,我想凡是學過它的朋友都有這樣一種感覺,那就是「讓我歡喜讓我憂。」歡喜的是,C語言功能非常強大、應用廣泛,一旦把握了後,你就可以理直氣壯地對他人說「我是電腦高手!」,而且以後若是再自學其他語言就顯得輕而易舉了。

憂慮的是,C語言如同「少林武功」一般博大精深,太難學了。其實就筆者認爲C語言並非是「difficult(困難)」的,只要你能理清思路,把握它的精髓,那麽自學C語言是一件非常輕易且又其樂無窮的事。今天本人就與大家一起談談如何學習C語言或者說學習C語言應從哪幾方面著手。

了解一些基本知識

一.C語言的背景

就個人感慨,無論學習哪門語言首先應該了解一下自己所學語言的背景,也可以說它的發展史。

C語言屬于高級程序語言的一種,它的前身是「ALGOL」。其創始人是布朗·W·卡尼漢和丹尼斯·M·利奇。C語言問世時是帶有很大的局限性,因爲它只能用于UNIX系統上。然而隨著科學技術的進步,計算機工業的發展,C語言逐漸脫離UNIX。1987年美國標准化協會制定了C語言的國際標准,簡稱「ANSI C」,從此以後它便成爲一種廣泛使用的程序語言。C語言的優點很多,主要的有如下四點:

1.兼備高級語言與低級語言的優點,屬于一種中間語言。

2.它是一種結構化程序設計語言,非常適合結構化程序設計。

3.有較豐富的數據類型、運算符以及函數供以選用。

4.直接與內存打交道,使修改、編輯其他程序與文檔變得輕松,簡單。

二.二大語系二種不同的學習方法

筆者學習過很多程序語言,例如:C,C++(C語言的擴展),QBASIC,VB(BASIC的可視化),javascript,JSCRIPT ,VBSCRIPT,Java,asp,FOXPRO,PERL等等,就本人實踐所得,其實高級程序語言分爲兩大語系。一路是以C爲主的程序語言,例如:Javascript,JAVA等,這類語言在函數的調用,程序語句的書寫,循環的控制都極爲相似。另一路是以BASIC爲首的程序語言,例如:FOXPRO,VBSCRIPT等,此類語言同樣具有相似的函數調用,程序語句書寫以及循環控制,但與C語系是不同的。因此若是您以前是從QBASIC起家的,那麽在學習C語言前最好是先洗洗腦,千萬不要把學習BASIC的方法以及思路用在C身上。

講到這裏,我想大家對C語言一定有了感性熟悉吧!下面讓我們再升華一下,全方位親密接觸它。學習C語言必須從以下四點入手,也就是說,只要你能把握這四點的內容,那麽基本上就大功告成了。

編程者說之C語言
更多內容請看C/C++進階技術文檔 Java編程開發手冊專題,或

親密接觸C語言

一.輸入輸出

C語言的輸入輸出是非常嚴格的,或許在其他程序語言中我們可以不關心這個問題,但在C語言中,我們必須要徹底了解它。由于篇幅有限,因此筆者不能詳談,有愛好的朋友可以參考由聞名程序語言教授譚浩強先生主編,由清華大學出版社出版的《C程序設計第二版》。不過這裏筆者還是有幾點要談一下。

1.二維浮點數數組的輸入

二維浮點數數組的輸入(即:通過鍵盤給二維浮點數數組賦值)在很多專業書中都沒有具體講過這個問題。在給二維浮點數數組賦值時一定要先聲明一個變量,接著把數值賦予這個變量,最後把變量數值賦予二維浮點數數組賦值。實例如下:

# include "stdio.h"

main()

{

float a[2][3],x ;

int i,j;

for(i=0;i<2;i++)

for(j=0;j<3;j++)

{scanf("%f",&x);

a[i][j]=x;}

}

不能寫成:

# include "stdio.h"

main()

{

float a[2][3] ;

int i,j;

for(i=0;i<2;i++)

for(j=0;j<3;j++)

scanf("%f",&a[i][j]);

}

同樣道理,在結構性浮點數組變量中也一定要按照這種格式輸入。實例如下:

# include "stdio.h"

strUCt student

{float b[3];

int x;

}a[2];

main()

{

float x ;

int i,j;

for(i=0;i<2;i++)

for(j=0;j<3;j++)

{scanf("%f",&x);

a[i].b[j]=x;}

}

2.注重輸出格式中「%」後的字符

C語言的輸出說複雜不複雜,因爲常用的都很簡單。可說不複雜也未必,記得曾在一次等級考前輔導我們C語言的教授講道:「假如C語言要考得很難的話,根本不用考什麽指針,只要專考輸出格式,我想百分之九十九的學生都不及格。」當時我們無不認同。從這則事例中可以看出C語言的輸出格式之複雜程度。因此大家在學習它時千萬要學會辨別輸出格式中「%」後的字符,每個字符都有其意義,也都有其作用。

二.優先級

說道優先級,有很多朋友都不是很了解或說很模糊。爲此筆者想先通過一個例子讓各位有個概念。什麽叫優先級?比方說,我們在公交車終點站排座隊時總會碰到70歲以上的老人不需要排隊就能上車的情景,這就是優先級的涵義。C程序在運行時也象排隊坐車一樣,首先照顧那些優先級高的運算符,若是優先級相同,那麽就象碰到兩位(或兩位以上)70歲以上的老人那樣,讓他們依次上車。但是C語言中的優先級的運算並不是千篇一律的,只能說是在大多數情況下,有些運算符的優先級有其自己的特點,因此這點大家要注重。例如條件表達式:條件?結果1:結果2,這種表達式很多朋友都知道,它的作用與IF…ELSE…條件判定語句很雷同,它運算時的優先級就不是按照C語言的規則來完成的。所以說對于優先級各位編程愛好者一定靈活把握,不要死記硬背。

三.指針

就個人認爲,C語言中的指針是最有特色的,當然也是最難學的。指針說穿了,其實是變量的一種表現形式,只不過這種變量記載的不是數值而是地址。就象一個人可以用姓名來表示自己,也可以用身份證號碼來表示自己一樣。筆者涉足編程已經有三年多了,在這期間曾經收到過很多網友的電子郵件詢問學習指針的方法。就本人感慨,學習指針最好是先學些計算機硬件工作的原理,例如:直接尋址,間接尋址等,只有了解了這些內容以後,你再學指針就比較輕易理會,究竟C語言是一門介于機器語言與高級語言中間的語言,沒有一些硬件工作知識是很難領悟它的真谛的。然而事事並非絕對,假如你沒有這些知識也不要緊,只要清楚知道以下筆者總結的二點再加上多練習便可:

1.指針是地址變量:它的值有兩種:其一是地址,其二是內容。不同的表達方式可以取不同的值,這有點象一個家庭地址在不同的場合標識的人物也不同。例如:父母親在他們的單位所登記的家庭地址就代表他們自己,而你在學校中登記的同樣的家庭地址就代表你自己。

2.指針是可以運算的,它的運算法則與變量是一致的。

另外,在編寫一個程序時,除非萬不得已,一般不要使用指針變量。因爲指針是比較複雜的,用不好就「當機」。所以筆者建議各位對于指針只要能看懂就行,當然假如你是預備參加考試的就另當別論了。

編程者說之C語言
更多內容請看C/C++進階技術文檔 Java編程開發手冊專題,或

四.函數

雖說很多程序語言都有函數這一內容,但筆者覺得C語言的函數是最有魅力的。假如你能完全把握C語言的函數,那麽學習C++就不成問題了(C++是一門建立在C語言上,但又不同于C語言的高級程序語言,它增添了很多函數。)。

學習函數的方法是比較簡單的,只有兩個字「牢記」,即:牢記函數的功能,牢記函數的用途以及如何輸入輸出。有些朋友認爲,程序語言中的函數沒有多大用處,其實這並不正確,函數從本質上講是一段通用程序,用它可以幫助我們節約很多編程的時間,一個聰明的編程者在編寫程序前往往總是先找自己所編寫的程序中有多少是可以用函數來代替的。筆者曾經作過一個比較字符串的實驗,用C語言中的strcmp()函數只要一句話,而自己編寫的話30句話都擺不平,可想而知函數是多麽實用呀!

寫到這裏筆者該告一段落了,下面送一個本人自己用C 語言編寫的注冊表比較程序給諸位。此段程序的注釋請看「/*…*/」後的文字,程序運行時(在DOS模式下)輸入的方式如下:compare xx1.reg xxx2.reg xxx3.txt,注重字段與字段之間是有空格的。(compare是程序名)

程序代碼:

# include "stdio.h" /*定義頭文件或說包含文件*/

main(argc,argv) /*定義帶參數的主函數*/

int argc; /*定義參數類型*/

char *argv[]; /*定義第二參數類型*/

{ FILE *fp1,*fp2,*fp3; /*定義文件指針*/

char a,b; /*定義字符變量*/

if((fp1=fopen(argv[1],"r"))==NULL)

/*打開第一的注冊表備份文件,假如不存在則跳出程序並顯示「The file don`t open!」*/

{ printf("The file don`t open!");

exit(0); }

if((fp2=fopen(argv[2],"r"))==NULL) /*打開第二的注冊表備份文件,假如不存在則跳出程序並顯示「The file don`t open!」*/

{ printf("The file don`t open!");

exit(0);}

if((fp3=fopen(argv[3],"w"))==NULL) /*建立新的文本文件,用于存放比較結果。

*/

{printf("The file don`t open!");

exit(0);}

rewind(fp1); /*規定文件指針fp1指向第一個注冊表文件頭部*/

rewind(fp2); /*規定文件指針fp2指向第二個注冊表文件頭部*/

while(!feof(fp1)!feof(fp2)) /*開始比較*/

{ a=fgetc(fp1); /*讀取第一個注冊表文件內容並賦予給字符變量a*/

b=fgetc(fp2); /*讀取第二個注冊表文件內容並賦予給字符變量b*/

if(a!=b) fputc(b,fp3);

/*字符變量a與b不相同的話,那麽把不同之處寫入新建的文本文件中*/

if(feof(fp1)) fputc(b,fp3);

/*假如第一個注冊表文件已經讀完,第二個文件還有未讀取部分,那麽把第二個文件的剩余部分全部寫入新建文件中*/

if(feof(fp2)) fputc(a,fp3);} /*假如第二個注冊表文件已經讀完,第一個文件還有未讀取部分,那麽把第一個文件的剩余部分全部寫入新建文件中*/

fclose(fp1); /*關閉第一個注冊表文件*/

fclose(fp2); /*關閉第二個注冊表文件*/

fclose(fp3); /*關閉新建文件*/

}

對于高深莫測的C語言來說,寥寥3千字並不能說清楚的什麽問題。但只要您看了此文後,我想對于您學習此語言一定有很大的幫助,同時也能了知曉如何用最短的時間學會C語言以及把握C語言的精髓所在。另外,此文中所涉及的知識點都是筆者通過實踐得出的,因此若是其他專業書籍沒有講到過的問題可以參考本文。最後祝大家學習C語言順利!

編程者說之C語言
更多內容請看C/C++進階技術文檔 Java編程開發手冊專題,或

  談及C語言,我想凡是學過它的朋友都有這樣一種感覺,那就是「讓我歡喜讓我憂。」歡喜的是,C語言功能非常強大、應用廣泛,一旦把握了後,你就可以理直氣壯地對他人說「我是電腦高手!」,而且以後若是再自學其他語言就顯得輕而易舉了。 憂慮的是,C語言如同「少林武功」一般博大精深,太難學了。其實就筆者認爲C語言並非是「difficult(困難)」的,只要你能理清思路,把握它的精髓,那麽自學C語言是一件非常輕易且又其樂無窮的事。今天本人就與大家一起談談如何學習C語言或者說學習C語言應從哪幾方面著手。   了解一些基本知識   一.C語言的背景   就個人感慨,無論學習哪門語言首先應該了解一下自己所學語言的背景,也可以說它的發展史。   C語言屬于高級程序語言的一種,它的前身是「ALGOL」。其創始人是布朗·W·卡尼漢和丹尼斯·M·利奇。C語言問世時是帶有很大的局限性,因爲它只能用于UNIX系統上。然而隨著科學技術的進步,計算機工業的發展,C語言逐漸脫離UNIX。1987年美國標准化協會制定了C語言的國際標准,簡稱「ANSI C」,從此以後它便成爲一種廣泛使用的程序語言。C語言的優點很多,主要的有如下四點:   1.兼備高級語言與低級語言的優點,屬于一種中間語言。   2.它是一種結構化程序設計語言,非常適合結構化程序設計。   3.有較豐富的數據類型、運算符以及函數供以選用。   4.直接與內存打交道,使修改、編輯其他程序與文檔變得輕松,簡單。   二.二大語系二種不同的學習方法   筆者學習過很多程序語言,例如:C,C++(C語言的擴展),QBASIC,VB(BASIC的可視化),javascript,JSCRIPT ,VBSCRIPT,Java,asp,FOXPRO,PERL等等,就本人實踐所得,其實高級程序語言分爲兩大語系。一路是以C爲主的程序語言,例如:Javascript,JAVA等,這類語言在函數的調用,程序語句的書寫,循環的控制都極爲相似。另一路是以BASIC爲首的程序語言,例如:FOXPRO,VBSCRIPT等,此類語言同樣具有相似的函數調用,程序語句書寫以及循環控制,但與C語系是不同的。因此若是您以前是從QBASIC起家的,那麽在學習C語言前最好是先洗洗腦,千萬不要把學習BASIC的方法以及思路用在C身上。   講到這裏,我想大家對C語言一定有了感性熟悉吧!下面讓我們再升華一下,全方位親密接觸它。學習C語言必須從以下四點入手,也就是說,只要你能把握這四點的內容,那麽基本上就大功告成了。 [url=/bbs/detail_1785087.html][img]http://image.wangchao.net.cn/it/1323424753516.gif[/img][/url] 更多內容請看C/C++進階技術文檔 Java編程開發手冊專題,或   親密接觸C語言   一.輸入輸出   C語言的輸入輸出是非常嚴格的,或許在其他程序語言中我們可以不關心這個問題,但在C語言中,我們必須要徹底了解它。由于篇幅有限,因此筆者不能詳談,有愛好的朋友可以參考由聞名程序語言教授譚浩強先生主編,由清華大學出版社出版的《C程序設計第二版》。不過這裏筆者還是有幾點要談一下。   1.二維浮點數數組的輸入   二維浮點數數組的輸入(即:通過鍵盤給二維浮點數數組賦值)在很多專業書中都沒有具體講過這個問題。在給二維浮點數數組賦值時一定要先聲明一個變量,接著把數值賦予這個變量,最後把變量數值賦予二維浮點數數組賦值。實例如下: # include "stdio.h" main() {  float a[2][3],x ;  int i,j;  for(i=0;i<2;i++)   for(j=0;j<3;j++)    {scanf("%f",&x);     a[i][j]=x;}    } 不能寫成: # include "stdio.h" main() {  float a[2][3] ;  int i,j;  for(i=0;i<2;i++)   for(j=0;j<3;j++)    scanf("%f",&a[i][j]); }   同樣道理,在結構性浮點數組變量中也一定要按照這種格式輸入。實例如下: # include "stdio.h"  strUCt student  {float b[3];   int x;  }a[2];  main()  {   float x ;   int i,j;   for(i=0;i<2;i++)    for(j=0;j<3;j++)     {scanf("%f",&x);      a[i].b[j]=x;}     }   2.注重輸出格式中「%」後的字符   C語言的輸出說複雜不複雜,因爲常用的都很簡單。可說不複雜也未必,記得曾在一次等級考前輔導我們C語言的教授講道:「假如C語言要考得很難的話,根本不用考什麽指針,只要專考輸出格式,我想百分之九十九的學生都不及格。」當時我們無不認同。從這則事例中可以看出C語言的輸出格式之複雜程度。因此大家在學習它時千萬要學會辨別輸出格式中「%」後的字符,每個字符都有其意義,也都有其作用。   二.優先級   說道優先級,有很多朋友都不是很了解或說很模糊。爲此筆者想先通過一個例子讓各位有個概念。什麽叫優先級?比方說,我們在公交車終點站排座隊時總會碰到70歲以上的老人不需要排隊就能上車的情景,這就是優先級的涵義。C程序在運行時也象排隊坐車一樣,首先照顧那些優先級高的運算符,若是優先級相同,那麽就象碰到兩位(或兩位以上)70歲以上的老人那樣,讓他們依次上車。但是C語言中的優先級的運算並不是千篇一律的,只能說是在大多數情況下,有些運算符的優先級有其自己的特點,因此這點大家要注重。例如條件表達式:條件?結果1:結果2,這種表達式很多朋友都知道,它的作用與IF…ELSE…條件判定語句很雷同,它運算時的優先級就不是按照C語言的規則來完成的。所以說對于優先級各位編程愛好者一定靈活把握,不要死記硬背。   三.指針   就個人認爲,C語言中的指針是最有特色的,當然也是最難學的。指針說穿了,其實是變量的一種表現形式,只不過這種變量記載的不是數值而是地址。就象一個人可以用姓名來表示自己,也可以用身份證號碼來表示自己一樣。筆者涉足編程已經有三年多了,在這期間曾經收到過很多網友的電子郵件詢問學習指針的方法。就本人感慨,學習指針最好是先學些計算機硬件工作的原理,例如:直接尋址,間接尋址等,只有了解了這些內容以後,你再學指針就比較輕易理會,究竟C語言是一門介于機器語言與高級語言中間的語言,沒有一些硬件工作知識是很難領悟它的真谛的。然而事事並非絕對,假如你沒有這些知識也不要緊,只要清楚知道以下筆者總結的二點再加上多練習便可:   1.指針是地址變量:它的值有兩種:其一是地址,其二是內容。不同的表達方式可以取不同的值,這有點象一個家庭地址在不同的場合標識的人物也不同。例如:父母親在他們的單位所登記的家庭地址就代表他們自己,而你在學校中登記的同樣的家庭地址就代表你自己。   2.指針是可以運算的,它的運算法則與變量是一致的。   另外,在編寫一個程序時,除非萬不得已,一般不要使用指針變量。因爲指針是比較複雜的,用不好就「當機」。所以筆者建議各位對于指針只要能看懂就行,當然假如你是預備參加考試的就另當別論了。 [url=/bbs/detail_1785087.html][img]http://image.wangchao.net.cn/it/1323424753544.gif[/img][/url] 更多內容請看C/C++進階技術文檔 Java編程開發手冊專題,或   四.函數   雖說很多程序語言都有函數這一內容,但筆者覺得C語言的函數是最有魅力的。假如你能完全把握C語言的函數,那麽學習C++就不成問題了(C++是一門建立在C語言上,但又不同于C語言的高級程序語言,它增添了很多函數。)。 學習函數的方法是比較簡單的,只有兩個字「牢記」,即:牢記函數的功能,牢記函數的用途以及如何輸入輸出。有些朋友認爲,程序語言中的函數沒有多大用處,其實這並不正確,函數從本質上講是一段通用程序,用它可以幫助我們節約很多編程的時間,一個聰明的編程者在編寫程序前往往總是先找自己所編寫的程序中有多少是可以用函數來代替的。筆者曾經作過一個比較字符串的實驗,用C語言中的strcmp()函數只要一句話,而自己編寫的話30句話都擺不平,可想而知函數是多麽實用呀!   寫到這裏筆者該告一段落了,下面送一個本人自己用C 語言編寫的注冊表比較程序給諸位。此段程序的注釋請看「/*…*/」後的文字,程序運行時(在DOS模式下)輸入的方式如下:compare xx1.reg xxx2.reg xxx3.txt,注重字段與字段之間是有空格的。(compare是程序名)   程序代碼:  # include "stdio.h" /*定義頭文件或說包含文件*/  main(argc,argv) /*定義帶參數的主函數*/   int argc; /*定義參數類型*/   char *argv[]; /*定義第二參數類型*/   { FILE *fp1,*fp2,*fp3; /*定義文件指針*/    char a,b; /*定義字符變量*/    if((fp1=fopen(argv[1],"r"))==NULL)     /*打開第一的注冊表備份文件,假如不存在則跳出程序並顯示「The file don`t open!」*/     { printf("The file don`t open!");      exit(0); }    if((fp2=fopen(argv[2],"r"))==NULL) /*打開第二的注冊表備份文件,假如不存在則跳出程序並顯示    「The file don`t open!」*/     { printf("The file don`t open!");      exit(0);}    if((fp3=fopen(argv[3],"w"))==NULL) /*建立新的文本文件,用于存放比較結果。 */     {printf("The file don`t open!");      exit(0);}    rewind(fp1); /*規定文件指針fp1指向第一個注冊表文件頭部*/    rewind(fp2); /*規定文件指針fp2指向第二個注冊表文件頭部*/    while(!feof(fp1)!feof(fp2)) /*開始比較*/     { a=fgetc(fp1); /*讀取第一個注冊表文件內容並賦予給字符變量a*/      b=fgetc(fp2); /*讀取第二個注冊表文件內容並賦予給字符變量b*/      if(a!=b) fputc(b,fp3);       /*字符變量a與b不相同的話,那麽把不同之處寫入新建的文本文件中*/       if(feof(fp1)) fputc(b,fp3);         /*假如第一個注冊表文件已經讀完,第二個文件還有未讀取部分,那麽把第二個文件的剩余部分全部寫入新建文件中*/       if(feof(fp2)) fputc(a,fp3);} /*假如第二個注冊表文件已經讀完,第一個文件還有未讀取部分,那麽把第一個文件的剩余部分全部寫入新建文件中*/       fclose(fp1); /*關閉第一個注冊表文件*/       fclose(fp2); /*關閉第二個注冊表文件*/      fclose(fp3); /*關閉新建文件*/ }   對于高深莫測的C語言來說,寥寥3千字並不能說清楚的什麽問題。但只要您看了此文後,我想對于您學習此語言一定有很大的幫助,同時也能了知曉如何用最短的時間學會C語言以及把握C語言的精髓所在。另外,此文中所涉及的知識點都是筆者通過實踐得出的,因此若是其他專業書籍沒有講到過的問題可以參考本文。最後祝大家學習C語言順利! [url=/bbs/detail_1785087.html][img]http://image.wangchao.net.cn/it/1323424753561.gif[/img][/url] 更多內容請看C/C++進階技術文檔 Java編程開發手冊專題,或
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有