首页 c++基础知识

c++基础知识

举报
开通vip

c++基础知识C語言學習教程 C語言學習教程 多數情況下,現下的編程高手都是從學習C 語言入門的,在學校裡,計算機相關專業中最基礎的課程也包括C 語言,因此,掌握好這門課程對每一位立志成為優秀程式員的初學人來說是大有裨益的﹗另外,對想透過參加全國計算機等級考試獲得證書的同學來說,學好C 語言也非常關鍵。 下面,是我整理出來的若干文章,總體上按照三個大的方向進行分類,希望能好好閱讀,相信對你是很有幫助的﹗ 一、基礎性問題(點擊下面文字鏈接即可打開頁面) 1、C語言學習︰如何由dos向windows轉變 2、二級C語言實例解答 3、...

c++基础知识
C語言學習 教程 人力资源管理pdf成真迷上我教程下载西门子数控教程protel99se入门教程fi6130z安装使用教程 C語言學習教程 多數情況下,現下的編程高手都是從學習C 語言入門的,在學校裡,計算機相關專業中最基礎的課程也包括C 語言,因此,掌握好這門課程對每一位立志成為優秀程式員的初學人來說是大有裨益的﹗另外,對想透過參加全國計算機等級考試獲得證書的同學來說,學好C 語言也非常關鍵。 下面,是我整理出來的若干文章,總體上按照三個大的方向進行分類,希望能好好閱讀,相信對你是很有幫助的﹗ 一、基礎性問題(點擊下面文字鏈接即可打開頁面) 1、C語言學習︰如何由dos向windows轉變 2、二級C語言實例解答 3、等級考試︰C 程式設計 4、備戰C語言上機考試 5、C語言程式設計技巧 6、C語言初級講座 7、寫好C程式的10條秘籍 8、強大的語言──C入門之一 9、強大的語言──C入門之二 二、實例開發(點擊下面文字鏈接即可打開頁面) 1、用C語言解決鬼谷算題 2、用C語言實現的鬧鐘程式 3、C 程式開發經典實例之一 4、C 程式開發經典實例之二 5、C 程式開發經典實例之三 6、C 程式開發經典實例之四 7、C 程式開發經典實例之五 8、C 程式開發經典實例之六 9、C 程式開發經典實例之七 10、C 程式開發經典實例之八 三、綜合提升(點擊下面文字鏈接即可打開頁面) 1、C語言︰黑客學員必修課之一 2、C語言︰黑客學員必修課之二 3、C 程式設計基礎之一 4、C 程式設計基礎之二 5、C 程式設計基礎之三 6、C 程式設計基礎之四 7、C 程式設計基礎之五 8、C 程式設計基礎之六 9、C語言高效編程的的四大絕招(1) 10、C語言高效編程的的四大絕招(2) C語言學習︰如何由dos向windows轉變   很多人學C語言很長一段時間了,還不知C究竟能幹什麼,以為學習c語言沒什麼用,純粹是為了應付學校的考試.更有人說"學C語言?別做如此愚蠢的行為了!趕快學C++吧!"這種看法是不對的,不應該把c跟c++之間劃起絕對的界限,過分看重c++而把c貶得一無是處,這是很片面的.C++功能雖然強大,但它畢竟是c的"超集",在c++裡有哪一處找不到c的影子呢?沒有c的支持,c++只能是無本之木。   一般情況下,c++編程模式編寫的程式源代碼量小,但編譯后的代碼量較大,營運的速度略低,不過開發時的工作量和工作難度較小;而c編程模式編寫的源代碼量較大,但可執行的效率高.如果一些對速度要求高,尤其是對硬體操作較多的程式,大多數還是用c編程模式開發的(用C又比用彙編簡單,易于實現).另外,學Win32 C程式設計還有助于更深入地了解Windows 的內幕和Win32 API。   任何的編程語言都是一種工具,學習語言的目是要使用它來編寫出實際需要的軟體來,而軟體作為一個用戶程式,營運時要倚賴作業系統,大多數人使用什麼作業系統,我們就要編寫出基于哪一種平台上的程式來.這樣,軟體才會有更大的市場。   現下市面上出現的有關c語言方面的書大多是教授DOS下的c,上機實習也是在Turbo C 2.0(簡稱Tc)環境下轉來轉去.編程環境的單調總使人感到不爽.這也沒辦法,dos 下的c是最簡單的,初學人當然要從最簡單的入門啦.連比較有名的計算機專家譚浩強編的書也都是贊成從dos下的c學起的.再說,一個剛剛入門的人想在windows 這樣的多進程,多線程的作業系統下用c編程,那似乎又不太現實.(那要了解在windows下,一個win32程式大體上是怎樣執行的.要對系統有比較多的了解才行,一個初學人暫時還不具備那么多的知識)但我們的腳步又不能夠只停留在dos裡,應該積極地從dos向windows轉變.在dos的時代,我們可以對dos下的編程迷戀,但現下都是windows橫行霸道的時代了,我們就應用c語言編寫windows平台上的程式,因時而變,學以致用.是時代使然!如果現下還是dos雄霸天下的話,那我就不會寫這篇狗屁不通的文章來遺笑大方了,不被臭雞蛋扔死才怪呢!   "變法"是大勢所趨的了,關鍵是怎么變,不單單是學習c語言的人如此,就連學c++的人都這樣,筆者曾經在QQ上碰到一個學了c++將近一年的小伙,居然問我,他想編一個windows窗口,該怎么下手,如果學一門語言用了一年時間,只是學了一點語法知識,卻沒有編過一道程式,那實在是一種悲哀.下面我談談從dos向windows轉變的一些個人見解,(這純屬個人觀點,僅供參考,如果您已是高手,完全不必要在此浪費時間):   一.拓寬視野,改變偏見   別老以為c只是dos特有的東西,一提到c語言就認為c只能在dos下編程.其實,這是被tc束縛了意識,我們在學校裡平時就只在dos的tc裡面用c編程,很少用到"圖形模式",整天面對?quot;烏黑黑"的螢幕,也難怪有些人一看到一個用c語言描繪出來的像windows的窗口便以為是c++的手筆.其實,作為一種語言,可以在任何一種平台上編程,只是界面不同而已,只要找到適合該平台的編程工具即可,c語言當然也能在windows下大放異彩.眼界放寬點,改變偏見,必有精彩發現.   二.選擇優秀的編程工具.   “有好的工具,做起事來就事半功倍”.在dos下我們常用tc或bc(borland c).在windows下可以用c++builder 或者visual c++ 來編程,最好用visual c++ 畢竟是微軟的東西嘛!微軟一天不垮台,編程者的飯碗就不會掉的啦 ^_^ .再說,windows作業系統是微軟出的,其內幕微軟是最清楚不過的了,在應用程式界面上,相信vc也是做得最好的.不過用vc++6來編c程式會恨煩的,大家要有心理準備.同時可以選擇多種編程工具,例如彙編,可以加強對windows的了解,是成為高手的好方法。   三.加強對windows的了解.   可以說編一個程式,就是用一種語言的語法形式將數據架構和表面的執行過程描述出來.在不同的作業系統下,其程式的執行過程是不同的.我們應該對windows的系統機製最起碼有個大體的了解,才有可能編寫windows的程式.dos是單進程單線程的系統,進程從頭到尾的順序執行,而windows是多進程、多線程的作業系統,是基于事件的,消息驅動的作業系統.明白這些是在windows下編程必不可少的,多學學它,你會發現windows 和 dos有很多的不同之處。   四.採取靈活多變的學習方法.   在不同的時期,學習不同的東西?可是有些人學習像word,excel這類操作性極強的辦公軟體時,總是先看書,看到尾巴忘了頭,到上機時卻不知所措.這種學習模式是被動的,看這些軟體操作的書,裡面說的都是具體的操作,不親手又怎能接受新知識?   五.多進行比較.   dos和windows有許多共同和不同的地方,如果是從dos學過來的話,在學習過程中不妨多進行比較,把不同的地方記下,相同的地方可以跳過,這可以快速地了解系統的不同之處,迅速地學到東西﹗   學習程式設計,我主張"實踐->理論->再實踐"的模式,在編程的初期,不管你會不會寫程式,都應先實踐,(這裡的實踐是指編程工具操作方面的實踐),學會操作編程工具.也許有些人會說:"廢話!沒有理論,又怎么實踐?"不錯,當你坐在一台電腦面前不知所措時,你就會想方設法使自己學會操作它,主動看書,看線上幫助,請教別人,忙得個"不亦樂乎",這不是變"被動"為"主動"了嗎? 邊學習邊操作,以實踐來帶動理論的學習,接著達到"理論與實踐同步",就可闖過第一關,學會了編程工具的基本操作,可以為以後上機實踐打下鋪墊.   光學會操作像vc這類的工具還不行,工具是死的,人才是活的,不會編程只能是空操作,你還會說:"廢話!沒有理論,怎么實踐?"的,這時就要學習編程的真功夫了,也就是我說的第二階段--學"理論"階段,深入研究前輩們的著作,吸取前人的智慧精華為我所用,扎扎實實打好編程內功,功夫到家了就應該"再實踐",將學到的東西運用于實際,編寫出我們需要的軟體來.學以致用嘛,呵呵~~這種模式總比"先學好語法的條條框框,再上機實踐"的效果好得多啦.   關於向windows轉變的個人觀點就只談這些,希望初學人早日踏上windows的光明大道!由於我也是一個菜鳥,水準有限,寫得不好,還請各位多多包涵! 二級C語言實例解答 C語言牽涉的概念比較複雜,規範繁多,使用靈活,容易出錯,不少初學人感到困難,下面透過幾個實例的分析來說明c語言學習中容易混淆的幾個問題,以期拋磚引玉,對初學人有所幫助。 問題1︰下面的程式 int a=3,b=4; char str=’c’; printf(“%d,%d”,a,b,str); 執行后, 輸出結果為︰ (A)3,4,c (B)3 4 c (C)3,4 (D)程式出錯 分析︰在格式輸出時一般要求格式說明符與輸出項相一致,當輸出項多餘格式說明符時多餘的輸出項不輸出,所以答案為C。 問題2︰有下面的程式段 char a[3],b[]=“china”;   a=b;   printf(“%s”,a); 則輸出結果為︰ (A)營運后輸出china (B)營運后輸出ch (C) 營運后輸出chi (D)編譯出錯 分析︰這個題容易錯選a??實際答案為d,由於定義了字符數組后,數組名作為數組的首位址,是一個常量,給一個常量賦值的語句是錯誤的,換句話說,不能用賦值語句將一個字符常量或字符數組直接賦值給一個字符數組,以答案選D。 問題3︰下列說明不正確的是︰ (A)char a[10]=“china” (B)char a[10],??p=a;p=“china” (C)char ??p;p=“china”(D)char a[10],??p;p=a=“china”; 分析︰此題易知A是正確的,D是錯誤的,對于B、C就很難選擇了。有人認為p是一個字符變量,以為把”china”賦給該字符變量是不對的,實際上它是一個指針變量,只能指向一個字符變量或其他字符類型數據,不是把”china”存放到p中(指針變量只存放位址),只是把 “china”的首位址賦給指針變量 p,所以B,C也是正確的。 問題4︰下面的程式執行結果是︰ main() {int x[5]={2,4,6,8,10},??p??????pp;   p=x;   pp=&&p;   printf(“%d”,??(p++));   printf(“%d\n”,????pp);   }   (A)4 4 (B)2 4 (C)2 2 (D)4 6 分析︰在此題中p++是后加模式,先輸出??p的值,p再自加,pp是二級指針,指向一級指針p,執行第一條輸出語句前后,存在下列指向關係︰ 所以本題應選b 問題5︰下列輸出語句執行后結果為︰    int i=3;   printf(“%d”,-i++);   (A)3 (B)4 (C)-3 (D)-4 分析︰此題考查運算符的優先級,負號運算符和++運算符同優先級,而結合方向為“自左至右”,即-i++相當于-??i++??,所以先取出i的值3,輸出-i的值-3,然後i增值為4,而不是i先增值為4,然後輸出-4,所以答案選擇C。 問題6︰設有以下語句,    struct st   {int n;   struct st ??next;   };   static struct st a[3]={5,&&a[1],7,&&a[2],9,’\0’},??p; 則以下表達式的值為6的是︰ (A)p++→n (B)p→n++ (C)(??p).n++ (D)++p→n 分析︰此題也是考查運算符的優先級,→優先級高于++,結合方向為自左至右,而后者結合方向為自右至左,A答案相當于??p++??→n??B答案相當于??p→n??++??所以A、B、C表達式值均為5,D答案相當于++??p→n????自加模式為前加模式,所以其值為6。 上面是我在教學過程中學生一些比較集中的問題,只要認真的體會和總結,加強上機實踐,對自己C語言的學習會大有裨益。 等級考試︰C 程式設計   計算機等級考試改革后,三級考試由A、B兩類改為PC技術、數據庫技術、網路技術、訊息管理技術四類。其后三類的上機考試內容均為C語言程式設計。   三級上機不同于二級,它只有一道編程題,風險更大。但只要能達到題目的要求,一般都能拿到3分。   參加過考試的人都應該知道一本書──南開大學出版的《全國計算機等級考試‧上機考試習題集》,這本書基本上包含了所有的上機考試題目類型。這本書裡一共有100道題,都很經典。但也許有人會覺得太多了,沒時間看完所有的題目。下面我給大家介紹一個複習技巧。   簡化問題   每道試題的程式都很長,而且涉及的知識點很多。實際上,在考試時看完全部程式並沒有必要。每次只用把主要精力放在次程序的編製上,認真思考其“功能要求”。所以平時我們只用關注需要編製的次程序。   試題歸類   要學會找出題目之間的規律,複習起來就會事半功倍。在一百道題目中,實際上只需要仔細分析其中的二十多道題就足夠了,其他的只用看一下就行。因為大部分的題目都是類似的,總結出規律來之后,我們可以舉一反三。例如下面兩類題目︰   例1. (占題庫10%)已知在文件IN.DAT中存有100個產品銷售記錄,每個產品銷售記錄由產品代碼dm(字符型4位)、產品名稱mc(字符型10位)、單價dj(整型)、數量sl(整型)、金額je(長整型)幾部分組成。其中︰金額=單價×數量可計算得出。函數ReadDat()的功能是讀取這100個銷售記錄並存入架構數組sell中。請編製函數SortDat(),其功能要求︰按產品代碼從大到小進行排列,若產品代碼相同,則按金額從大到小進行排列,最終排列結果仍存入架構數組sell中,最後調用函數WriteDat()把結果輸出到文件OUT10.DAT中。   程式︰void SortDat( )    {int I,J;    PRO xy;    for (I=0;I<100;I++)    {if (strcmp(sell[I].dm,sell[J].dm)<0)    { xy=sell[I];    sell[I]=sell[J];    sell[J]=xy; }    else if (strcmp(sell[I].dm,sell[J].dm)==0)    if (sell[I].je    { xy=sell[I];    sell[I]=sell[J];    sell[J]=xy;}    }    }   分析︰這類程式題目的關鍵部分在于 、 、 三句上。它們的作用就是給出調換記錄次序的條件。與其類似的題目只是在功能要求上有所不同(例如把“從大到小”改為“從小到大”,把“產品代碼”換成“產品名稱”等),所以我們只需要修改這三句。如果我們抽到的題目是“金額從小到大,如相同,則產品名稱從大到小”,我們就將    改為︰if (sell[I].je>sell[J].je)    改為︰else if (sell[I].je= =sell[J].je)    改為︰if (strcmp(sell[I].mc,sell[J].mc)<0)   而對于將記錄次序進行調換的程式xy=sell[I]、sell[I]=sell[J]、sell[J]=xy,我們只需要套用就行。   例2. (占題庫10%)函數ReadDat()的功能是實現從文件ENG.IN中讀取一篇英文文章,存入大字元串數組xx中;請編製函數encryptChar(),按給定的代替關係對數組xx中的所有字符進行代替,仍存入數組xx的對應的位置上,最後調用函數WriteDat()把結果xx輸出到文件PS1.DAT中。   代替關係︰f(p)=p*11 mod 256。其中p是數組xx中某一個字符的ASCII值,f(p)是計算后的新字符的ASCII值,如果計算后f (p)的值小于等于32或大于130,則該字符不變,否則將f(p)所對應的字符進行代替。   程式︰void encryptChar()    { int I;    char *pf;    for (I=0;I    { pf=xx[I];    while(*pf!=0)    { if(*pf*11%256>130||*pf*11%256<=32)    { pf++;    continue;}    *pf=*pf*11%256;    pf++;    }    }    }   分析︰這一類題目較例1更為簡單,其關鍵只有 一句,它是對條件“如果計算后f(p)的值小于等于32或大于130”的描述。上機考試中類似的題目可能只對這個條件作少許變動。例如︰“如果原字符是大寫字母或計算后f(p)的值小于等于32”,則只需把 改為︰if ((*pf>=`A`&&&&*pf<=`Z`)||*pf*11%256<=32)   其他試題也可以按照上述方法進行總結。總而言之,對于三級上機考試,我們不僅要提升編程能力,還應該注意分析試題,尋找規律,用更少的時間和精力解決更多的問題﹗ 備戰C語言上機考試   C語言是目前最常用的軟體開發語言之一,其功能強大,具有悠久的歷史,從C、C++發展到現下的C#,不斷地得以更新繁衍。在全國計算機等級考試中有,五個類別使用C語言作為上機考試內容,為各編程語言中應用最多的。   理論先行 [被屏蔽廣告]   雖是上機考試,仍需以理論知識為基礎,所以必須將C語言教材從頭到尾學習一遍(應選擇威權教材),對C語言的基本概況做到心中有數。   學完教材后,選取一些有代表性的編程範例,將其語句逐條理解透徹。同時還須注意一點,看的懂未必等于自己就會編寫,應當自己嘗試默寫,從而找出知識薄弱點、思惟盲點。   要養成一些良好習慣,比如,代碼書寫格式使用規範的鋸齒形,盡量使用完整表達。如果採用簡化模式,雖然不一定影響運算結果,但有的考試評分標準是按答題要點給分,所以還是不省為妙。   以下是學習C語言過程中容易出現的問題︰   1.函數、變量使用前未定義。   2.混淆“=”和“= =”。   3.語句后或預定義的函數名后漏掉分號。   4.將else拼寫成esle、continue拼寫成contiune。   5.括號搭配錯誤。   6.首位址理解為1。   7. p++與++p區別不清。   8. break、continue運用不當。   9.誤將單引號用于字元串常量,將雙引號用于字符常量。   10. else分句中巢狀條件語句時,漏掉了“if”。   上機實踐   雖然考點、培養訓練點一般都提供類比上機,但畢竟時間、地點受到限制,不能保證充分的練習時間,因此很多考生都希望能在自家電腦上進行操作實踐,下面具體談談如何實現下個人電腦上進行練習的方法。   一、簡易環境練習   系統要求︰Windows系統   需用軟體︰Turbo C 2.0   TC軟體雖然不是標準的Windows程式,但在Windows環境下依然可以使用。為使軟體處于理想營運狀態,營運tc.exe后需要做一些設置︰   1.按“漢”按鈕,否則會出現部分亂碼。   2.點擊屬性按鈕,在程式選項卡的“工作目錄”欄中根據上一命令行填入程式所在目錄,“營運”欄選擇最大化,選擇“退出時關閉”。   設置好后即可依照練習冊輸入習題,進行編譯調試。編程中用到的處理數據一般需自建。為了提升效率,可從網上下載習題。這裡應留意一些下載習題中的問題,比如遺漏字符、錄入錯誤等,還有一些不易發現的情況,像雙引號的字體不標準、文件擴展名前的句號成了逗號、甚至一些看似無內容的空行中包含著某些ASCII碼,都會影響編程結果。   二、全真環境練習   系統要求︰DOS系統   需用軟體︰Turbo C 2.0、UCDOS、上機類比軟體   經過基礎階段學習后,再來進行針對等級考試的練習,這就需要用到類比軟體了。市面上類比軟體很容易買到,其操作界面與正式考試完全一樣,還往往匯集了豐富的題庫和答案、源程式、輸入數據,並可進行自我評分。有的還提供筆試題知識點查詢,介紹考試技巧等。   使用類比軟體前,應先安裝UCDOS(這與真實考試要求一樣,須選5.0以上版本,而且最好採用正式版,否則可能影響軟體使用)。通常情況下在Windows環境下是無法使用類比軟體的,經過一些專業設置后雖可實現,但僅限于Windows 9X作業系統,而且設置不當易使系統崩潰,所以筆者建議還是在純DOS環境下使用為妥。   實戰心得   筆者參加的今年上半年考試題目大意如下︰要求將一篇英文文章中每個字符的ASCII值按公式f(p)=p 17%256計算,如f(p)的ASCII值小于32或為奇數,則原字符不變,否則予以替代。這道題目需要編寫的程式代碼沒幾行,我寫好后調試營運,一切正常,複查幾遍也看不出有哪兒不妥。正打算離開考場時,忽然覺得運算結果值得懷疑,根據題意,經過ASCII值計算后的結果不大可能仍都是常規字符,因此回過頭來再逐字審查題目,反覆對照編好的程式,焦點集中在了存放f(p)值的變量定義上,難道應將“char”改為“unsigned char”?一試,結果果然不同。   事后查知,char變量值的範圍為-128至+127,unsigned char變量值的範圍為0至255。比如字符“x”的ASCII值為120,按上述公式運算后值為248,字符應予以替代;如果存放f(p)值的變量定義為char型,值則轉換為-8,字符因而不被替代,難怪剛才運算結果顯出全篇常規字符了。所以說,仔細嚴謹的應考作風能彌補一些技術上的不足,有助于臨場發揮。   友情提示   1.由於使用UCDOS,當螢幕下方顯示其狀態條時,Turbo C中的快捷鍵Alt+F9(調試編譯)、Alt+F5(查看營運結果)等提示會被屏蔽掉,解決的辦法為按一下右Shift鍵,隱藏UCDOS狀態條后即可正常使用。值得一提的是,Alt+F9雖然是Turbo C菜單中的Run/Run命令的快捷鍵,但兩者不完全相同︰菜單命令包括自動編譯、連接和營運程式;而快捷鍵模式卻不包括營運程式,自然也就無運算結果,所以即使程式代碼編寫正確,考試成績仍有可能為零分。   2.雖然一些類比軟體的習題也是從國家考試中心發行的《全國計算機等級考試上機考試習題集》中選取,但正式考試時如遇到練習過的題目,仍應看仔細,其中可能會有“小于”與“大于”之類的一字之別。 C語言程式設計技巧 在許多應用軟體營運時都帶有命令行參數,其實這些命令行參數在C語言編寫的程式中也可以實現,靈活地運用命令行參數進行處理可以有效地提升程式的營運效率,收到事半功倍的效果。   C語言中有關命令行參數涉及到程式的主函數main(int argc,char *argv[]這樣兩個參數,其中,int argc表示命令行參數的個數(包括可執行程式名本身),char *argv[]表示每個參數的具體內容,argv[0]為命令行中可執行程式名本身,argv[1]為命令行中第二個參數的內容,依次類推。如下例輸出命令行參數的個數及參數的內容︰ main (int argc,char *argv[], {int I;  printf("\n命令行中可執行文件名為︰%s",argv[0]);  printf("\n總共有%d個參數︰",argc);  I=0;  while(argc>=1)  {printf(〞%s  ",argv[I++]);   argc--;} }   命令行參數用的最多還是在諸如DIR A︰等之類帶有盤符、路徑或文件名這樣的命令行中,所以說靈活處理這一類參數才能有效地提升程式的營運效果。譬如DIR命令,其后可以是盤符,可以是路徑,也可以是文件名,如何區分這一參數呢?請看下例(此程式類比DIR命令,程式要求在命令行輸入一個參數︰盤符或路徑或文件名,若無參數或參數多于一個都將取默認的參數“*.*”)。 \*-------------------- 功能︰類比DIR命令進行處理命令行參數 --------------------*/ #include #include #include #inchlude int j,num=0; char ss[20],path[50],path2[50]; void main (int argc,char *argv[]) {  struct ffblk f;  int done;  if(argc==2)  /*取命令行參數到數組中*/   strcpy(ss,argv[1]);  else   strcpy(ss,〞*.*〞); /*給數組賦值缺省參數*/   if (((ss[strlen(ss)-1]==′\\′||((ss[strlen(ss)-1]==':'))    strcat(ss,〞*.*〞); /*若參數為路徑或盤符,則加上〞*.*〞 */   getcwd(path1,50); /*取當前路徑*/   if (chdir(ss)==0) /*判斷參數是否為路徑*/     strcat(ss,"\\*.*"); /*若路徑末沒有帶"\",則加上"*.*" */  chdir(path1); /*恢復原來路徑*/  strcpy(path2,ss);  for(j=strlen(path2);j>0;j--)/*提取參數中的路徑到path2 */   {if((path2[j]=='\\'))||(path2[j]==':')){    path2[j+1]='\0';    goto senull;}   }  path2[0]='\0';  senull:  if(strlen(path2)==0)  /* 若給出的參數中沒帶路徑,則取當前路徑*/   strcpy(path2,path1);  printf("\n**類比DIR**\n 命令目錄路徑%s",path2);  done=findfirst(ss,&f,55); /*查找第一個配匹的文件*/  j=1;  while(!done)  {if (f.ff_attrib!=0x10) /* 若文件屬性不是目錄 */    printf("\n %15s %20ld",f.ff_name,f.ff_fsize);   else    printf("\n &11s ",f.ff_name);   num++;   j++;   if(j==23)    printf("\n --------More (按任意鍵繼續)----");   getch();   j=0;   printf(〞\n (目錄路徑%s)〞,path2);}   done=findnext(&f); /*查找下一個配匹的文件*/  } printf(〞\n 當前目錄中總共有%d個文件.\n〞,num); C語言初級講座   我們已經看到程式中使用的各種變量都應預先加以說明,即先說明,后使用。對變量的說明可以包括三個方面︰   ‧數據類型   ‧存儲類型   ‧作用域   在本講中,我們只介紹數據類型說明。其它說明在以後陸續介紹。所謂數據類型是按被說明量的性質,表示形式,佔據存儲空間的多少,構造特點來劃分的。在C語言中,數據類型可分為︰基本數據類型,構造數據類型,指針類型,空類型四大類。   1.基本數據類型   基本數據類型最主要的特點是,其值不可以再分解為其它類型。也就是說,基本數據類型是自我說明的。   2.構造數據類型構造數據類型   是根據已定義的一個或多個數據類型用構造的方法來定義的。也就是說,一個構造類型的值可以分解成若干個“成員”或“元素”。每個“成員”都是一個基本數據類型或又是一個構造類型。在C語言中,構造類型有以下幾種︰   ‧數組類型   ‧架構類型   ‧聯合類型   3.指針類型   指針是一種特殊的,同時又是具有重要作用的數據類型。其值用來表示某個量在內存儲器中的位址。雖然指針變量的取值類似于整型量,但這是兩個類型完全不同的量,因此不能混為一談。4.空類型在調用函數值時,通常應向調用者返回一個函數值。這個返回的函數值是具有一定的數據類型的,應在函數定義及函數說明中給以說明,例如在例題中給出的max函數定義中,函數頭為︰ int max(int a,int b);其中“int ”類型說明符即表示該函數的返回值為整型量。又如在例題中,使用了庫函數 sin,由於系統規定其函數返回值為雙精度浮點型,因此在賦值語句s=sin (x);中,s 也必須是雙精度浮點型,以便與sin函數的返回值一致。所以在說明部分,把s說明為雙精度浮點型。但是,也有一類函數,調用后並不需要向調用者返回函數值, 這種函數可以定義為“空類型”。其類型說明符為void。在本講中,我們先介紹基本數據類型中的整型、浮點型和字符型。其餘類型在以後各講中陸續介紹。   對于基本數據類型量,按其取值是否可改變又分為常量和變量兩種。在程式執行過程中,其值不發生改變的量稱為常量,取值可變的量稱為變量。它們可與數據類型結合起來分類。例如,可分為整型常量、整型變量、浮點常量、浮點變量、字符常量、字符變量、枚舉常量、枚舉變量。在程式中,常量是可以不經說明而直接引用的,而變量則必須先說明后使用。   整型量   整型量包括整型常量、整型變量。整型常量就是整常數。在C語言中,使用的整常數有八進製、十六進製和十進製三種。   整型常量   1.八進製整常數八進製整常數必須以0開頭,即以0作為八進製數的前綴。數碼取值為0~7。八進製數通常是無符號數。   以下各數是合法的八進製數︰ 015(十進製為13) 0101(十進製為65) 0177777(十進製為65535)   以下各數不是合法的八進製數︰ 256(無前綴0) 03A2(包含了非八進製數碼) -0127(出現了負號)   2.十六進製整常數   十六進製整常數的前綴為0X或0x。其數碼取值為0~9,A~F或a~f。   以下各數是合法的十六進製整常數︰ 0X2A(十進製為42)  0XA0 (十進製為160)  0XFFFF (十進製為65535)   以下各數不是合法的十六進製整常數︰ 5A (無前綴0X)  0X3H (含有非十六進製數碼)   3.十進製整常數   十進製整常數沒有前綴。其數碼為0~9。   以下各數是合法的十進製整常數︰   237 -568 65535 1627   以下各數不是合法的十進製整常數︰ 023 (不能有前導0) 23D (含有非十進製數碼)   在程式中是根據前綴來區分各種進製數的。因此在書寫常數時不要把前綴弄錯造成結果不正確。4.整型常數的后綴在16位字長的機器上,基本整型的長度也為16位,因此表示的數的範圍也是有限定的。十進製無符號整常數的範圍為0~65535,有符號數為-32768~+32767。八進製無符號數的表示範圍為0~0177777。十六進製無符號數的表示範圍為0X0~0XFFFF或0x0~0xFFFF。如果使用的數超過了上述範圍,就必須用長整型數來表示。長整型數是用后綴“L”或“l”來表示的。例如︰   十進製長整常數 158L (十進製為158) 358000L (十進製為-358000)   八進製長整常數 012L (十進製為10) 077L (十進製為63) 0200000L (十進製為65536)   十六進製長整常數 0X15L (十進製為21) 0XA5L (十進製為165) 0X10000L (十進製為65536)      長整數158L和基本整常數158 在數值上並無區別。但對158L,因為是長整型量,C編譯系統將為它分發4個位元組存儲空間。而對158,因為是基本整型,只分發2 個位元組的存儲空間。因此在運算和輸出格式上要予以注意,避免出錯。無符號數也可用后綴表示,整型常數的無符號數的后綴為“U”或“u”。例如︰ 358u,0x38Au,235Lu 均為無符號數。前綴,后綴可同時使用以表示各種類型的數。如0XA5Lu表示十六進製無符號長整數A5,其十進製為165。 寫好C程式的10條秘籍   神乎其技,惟C程式,功到自成,十大建議﹗   1、汝應頻繁催動lint工具,據其語法聲明修習內力,此事皆因lint之思慮決斷實遠在君上。   2、不可依隨NULL指針,如若不然,混沌痴顛必俟君于彼岸。   3、縱有天賦大智慧,知曉其事無礙,汝亦當盡數強製挪移函數參數為原型所期之數據類型,以免一時疏忽,致使數據類型向汝討還血債。   4、若頭文件未于函數原型之中聲明返回值類型,汝當親為此事,更須謹慎再三,以防不測降臨汝身。   5、汝須親核字元串、數組操作之越界與否。古之聖人有言︰ 嘗祈門人對答“然也”,不意門人答曰“吾了然于胸無須多慮盡請寬心他日趨庭必當重謝”──所期者短,所獲者長,此于數組,實最險要處也。   6、若函數聲明內提及,于異常時將返回錯誤代碼雲雲,汝當謹慎校核該返回值。或有校核語句使汝之代碼增大數倍,令汝之手指因敲鍵而痛楚莫名之事,汝亦當如此。不然,汝固以為此異常之事難得一見,上蒼亦必借此懲戒汝之傲慢。   7、汝應研習庫函數,不當親筆重寫之。如是,汝之代碼必短小易讀,汝之心境必清爽恬淡。   8、縱汝不願,汝亦應借括號、縮進之屬,使汝之代碼間架清晰,可為后者借鏡。汝之大智慧施于決疑解難則可,施于敷設謎團、淆亂文體則萬萬不可。   9、外部標識符之前六字符當與眾不同。此律法看似粗陋,和者寥寥,然其效用自能延續永遠。汝若不從此言,他日,汝欲連接程式于舊作之上時,必抓耳撓腮、蓬頭垢面,野狼狽之相盡現矣。   10、或有族類,大言炎炎,雲“普天之下,莫非VAX”。于此等異端,汝當摒棄之、斷絕之、遠避之。更有異人,篤信魔道,以為縱汝所用電腦頻繁換代,汝之程式亦能長久適用。汝亦不可與此類惡人來往,謹記謹記。 強大的語言──C入門之一   一、C語言的特點   C 語言是美國的Dennis Ritchie在1972年設計發明的。它由早期的編程語言BCPL( Basic Combined Programming Language) 發展演變而來。C 語言之所以發展迅速,成為最受歡迎的語言之一,主要因為它具有強大的功能。歸納起來,C 語言具有下列特點︰   1.C語言是“中級語言”   它把高階語言的基本架構和語句與低級語言的實用性結合起來。C 語言可以像組合語言一樣對位、位元組和位址進行操作,而這三者是計算機最基本的工作單元。   2.C語言是架構式語言   所謂架構式語言的顯著特點是代碼及數據的分隔化,即程式的各個部分除了必要的訊息交流外彼此獨立。這種架構化模式可使程式層次清晰,便于使用、維護以及調試。C 語言是以函數形式提供給用戶的,這些函數可方便地調用,並具有多種循環、條件語句控制程式流向,從而使程式完全架構化。   3.C語言功能齊全   C 語言具有各種各樣的數據類型,並引入了指針概念,可使程式效率更高。另外C 語言也具有強大的圖形功能,支持多種顯示器和驅動器,而且計算功能、邏輯判斷功能也比較強大,可以實現決策目的。   4.C語言適用範圍廣   C 語言還有一個突出的優點就是適合多種作業系統,如DOS、Windows、UNIX,也適用于多種機型。   二、C語言基礎介紹   隨著微型計算機的日益普及,出現了許多C 語言版本。由於沒有統一的標準,使得這些C 語言之間出現了一些不一致的地方。為了改變這種情況,美國國家標準研究所(ANSI)為C 語言製定了一套ANSI標準,成為現行的C語言標準。而在這裡我們將主要以美國Borland 公司的產品Turbo C2.0作為介紹對象,簡要介紹一下C語言的基本知識。   1.數據類型   在C語言中,每個變量在使用之前必須定義其數據類型。Turbo C有以下幾種類型︰整型(int)、浮點型(float)、字符型(char)、指針型(﹡)、無值型(void)以及架構(struct)和聯合(union)。其中前五種是C語言的基本數據類型、后兩種數據類型(架構和聯合)則是C語言的擴展數據類型。   2.關鍵字和標識符、運算符   所謂關鍵字就是已被C語言本身使用、不能作其它用途的字。例如關鍵字else,就再不能用作變量名、函數名等。所謂標識符是指常量、變量、語句標號以及用戶自定義函數的名稱。C標識符的定義十分靈活。   C的運算符非常豐富,主要分為三大類︰算術運算符、關係與邏輯運算符、按位運算符。   3.變量   C規定所有變量在使用前都必須加以說明。一條變量說明語句由數據類型和其后的一個或多個變量名組成,例如“int x”。變量可以在程式中三個地方說明︰函數內部、函數的參數定義中或所有的函數外部。根據所定義位置的不同,變量可分為局部變量、形式參數和全程變量。C像其它高階語言一樣也使用數組變量。所謂數組就是指具有相同數據類型的變量集,並擁有共同的名字。數組中的每個特定元素都使用下標來訪問。   4.控制流程語句   C提供了豐富、靈活的控制流程語句,主要有:條件語句、循環語句和開關語句。條件語句的一般形式為if-else。C提供三種基本的循環語句︰for語句、while語句和do-while語句。而在編寫程式時,經常會碰到按不同情況分轉的多路問題, 這時可用巢狀if-else-if語句來實現,但if-else-if語句使用不方便,並且容易出錯。對這種情況,C提供了一個switch開關語句。 強大的語言──C入門之二 上接︰強大的語言──C入門之一   5.指針(point)   學習C語言,指針是較難理解的一個概念。我們知道變量在計算機內佔有一塊儲存區域(也就是有一個“位址”),變量的值就存放在這塊區域之中,在計算機內部,透過訪問或修改這塊區域的內容來訪問或修改相應的變量。C語言中,對于變量的訪問形式之一,就是先求出變量的位址,然後再透過位址對它進行訪問,這就是指針及指針變量。指針變量的一般定義為“類型標識符 ﹡標識符”,其中標識符是指針變量的名字,標識符前加了“﹡”號, 表示該變量是指針變量,而最前面的“類型標識符”表示該指針變量所指向的變量的類型。一個指針變量只能指向同一種類型的變量,也就是說,我們不能定義一個指針變量,既能指向一整型變量又能指向雙精度變量。   三、C程式設計初步   C語言是一種中級語言,用戶用C語言編寫的程式稱為源程式,源程式文件的后綴一般必須為“.c”。計算機硬體不能直接執行源程式,必須將源程式翻譯成二進製目標程式。翻譯工作是由編譯程式完成的,翻譯的過程稱為編譯,編譯的結果稱為目標程式,目標程式文件后綴一般為“.OBJ”。程式翻譯成目標程式后,便可進行連接。“連接”的目的是使程式變成在計算機上可以執行的最終形式。在這一階段,系統程式庫中的程式要與目標程式連接,連接的結果稱為執行程式,執行程式文件名字一般以“.EXE”結尾。   正如所有利用計算機語言所編寫的的第一個程式一樣,下面,我們也試著建立一個名為“HELLO.C”的源程式,這個程式將在螢幕上面打印出“你好,《電腦報》軟體世界﹗”這個短語。   透過鍵盤輸入程式︰     include     main()     {     printf(〞你好,《電腦報》軟體世界﹗\n〞);     }   這個最簡單的程式,也包括了C語言的一些基本的內容,它有一個主函數main(),使用到了標準的輸出函數printf(),同時為了能夠讓程式營運時包含這個標準函數,我們首先要在程式的最開始寫上include ,“stdio.h”是C語言提供的標準輸入輸出函數庫頭文件,我們可以直接引用裡面的一些函數,來完成我們所要實現的功能。   現下,讓我們來編譯、連接並營運一下這個最簡單的程式,我們將看到,在螢幕上打印出了“你好,《電腦報》軟體世界﹗”   四、參考資料   首先是一些C語言相關的書籍︰   《C語言》譚浩強,《C語言編程寶典》王大剛,《數據架構與算法──面向對象的C++設計模式》Bruno R. Preiss,《C/C++語言與研究開發實踐》伍曉宇、辛勇,《Borland C++ Builder 3.0/4.0類參考詳解》張濟、袁野、王秀娟,《Borland C++Builder 3.0/4.0高級類參考詳解》王秀娟、孫悅、黎華,《C++語言命令詳解(第二版)》Brian Overland,《C++程式設計實驗指導》錢能。 二、實例開發 用C語言解決鬼谷算題   在鬼谷算題中有這樣一個著名的題目︰“今有物不知其數,三三數之剩二,五五數之剩三,七七數之剩二,問物幾何?”這屬于高等數學中的數論。我國宋代學人對這類題目鑽研已頗為精深,總結出了“三人同行七十稀,五樹梅花廿一枝,七子團圓正半月,去百零五便得知。”這樣的口訣,意思是說“以三三數之,餘數乘以七十;五五數之,餘數乘以二十一;七七數之,餘數乘十五。三者相加,如不大于一百零五,即為答數;否則須減去一百零五或其倍數。”這道算題的答案為23。計算起來比較繁瑣,但如果用我們所熟悉的C語言來編寫一小段程式的話,很快就能解決。   這段程式如下︰ #include 〞stdio.h〞 main int x for x=0 x<100 x++?? if x%3==2&&x%5==3&&x%7==2 printf 〞This number is %d\n〞 x 用C語言實現的鬧鐘程式 #include #include #include #include #include void main() { int gd=DETECT,gm; int x=320,y=240,r=200,i,h,m,s,thetamin,thetasec; struct time t; char n[12][3]={"3","2","1","12","11","10","9","8","7","6","5","4"}; initgraph(&gd,&gm,"g:\\tc\\bgi");//圖形驅動器路徑,根據自己的系統更換。 circle(x,y,210); setcolor(4); settextstyle(4,0,5); for(i=0;i<12;i++) { if(i!=3) outtextxy(x+(r-14)*cos(M_PI/6*i)-10,y-(r-14)*sin(M_PI/6*i)-26,n[i]); else outtextxy(x+(r-14)*cos(M_PI/6*i)-20,y-(r-14)*sin(M_PI/6*i)-26,n[i]); } gettime(&t); printf("The current time is: %2d:%02d:%02d.%02d\n",t.ti_hour, t.ti_min, t.ti_sec, t.ti_hund); while(!kbhit()) { setcolor(5); setfillstyle(1,5); circle(x,y,10); floodfill(x,y,5); gettime(&t); if(t.ti_min!=m) { setcolor(0); line(x,y,x+(r-60)*cos(thetamin*(M_PI/180)),y-(r-60)*sin(thetamin*(M_PI/180 ))); circle(x+(r-80)*cos(thetamin*(M_PI/180)),y-(r-80)*sin(thetamin*(M_PI/180)) ,10); line(x,y,x+(r-110)*cos(M_PI/6*h-((m/2)*(M_PI/180))),y-(r-110)*sin(M_PI/6*h -((m/2)*(M_PI/180)))); circle(x+(r-130)*cos(M_PI/6*h-((m/2)*(M_PI/180))),y-(r-130)*sin(M_PI/6*h-( (m/2)*(M_PI/180))),10); } if(t.ti_hour>12) t.ti_hour=t.ti_hour-12; if(t.ti_hour<4) h=abs(t.ti_hour-3); else&n bsp; h=15-t.ti_hour; m=t.ti_min; if(t.ti_min<=15) thetamin=(15-t.ti_min)*6; else thetamin=450-t.ti_min*6; if(t.ti_sec<=15) thetasec=(15-t.ti_sec)*6; else thetasec=450-t.ti_sec*6; setcolor(4); line(x,y,x+(r-110)*cos(M_PI/6*h-((m/2)*(M_PI/180))),y-(r-110)*sin(M_PI/6*h -((m/2)*(M_PI/180)))); circle(x+(r-130)*cos(M_PI/6*h-((m/2)*(M_PI/180))),y-(r-130)*sin(M_PI/6*h-( (m/2)*(M_PI/180))),10); line(x,y,x+(r-60)*cos(thetamin*(M_PI/180)),y-(r-60)*sin(thetamin*(M_PI/180 ))); circle(x+(r-80)*cos(thetamin*(M_PI/180)),y-(r-80)*sin(thetamin*(M_PI/180)) ,10); setcolor(15); line(x,y,x+(r-70)*cos(thetasec*(M_PI/180)),y-(r-70)*sin(thetasec*(M_PI/180 ))); delay(1000); setcolor(0); line(x,y,x+(r-70)*cos(thetasec*(M_PI/180)),y-(r-70)*sin(thetasec*(M_PI/180 ))); } } 該程式已在Turbo C++3.0中透過編譯. C 程式開發經典實例之一 【程式1】 題目︰有1、2、3、4個數字,能組成多少個互不相同且無重複數字的三位數?都是多少? 1.程式分析︰可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列后再去掉不滿足條件的排列。 2.程式源代碼︰ main() { int i,j,k; printf("\n"); for(i=1;i<5;i++)    /*以下為三重循環*/  for(j=1;j<5;j++)  for (k=1;k<5;k++)  {   if (i!=k&&i!=j&&j!=k)    /*確保i、j、k三位互不相同*/   printf("%d,%d,%d\n",i,j,k);  } } 【程式2】 題目︰企業發放的加菜金根據利潤提成。利潤(I)低于或等于10萬元時,加菜金可提10%;利潤高于10萬元,低于20萬元時,低于10萬元的部分按10%提成,高于10萬元的部分,可可提成7.5%;20萬到40萬之間時,高于20萬元的部分,可提成5%;40萬到60萬之間時高于40萬元的部分,可提成3%;60萬到100萬之間時,高于60萬元的部分,可提成1.5%,高于100萬元時,超過100萬元的部分按1%提成,從鍵盤輸入當月利潤I,求應發放加菜金總數? 1.程式分析︰請利用數軸來分界,定位。注意定義時需把加菜金定義成長整型。       2.程式源代碼︰ main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1=100000*0.1;bonus2=bonus1+100000*0.75; bonus4=bonus2+200000*0.5; bonus6=bonus4+200000*0.3; bonus10=bonus6+400000*0.15;  if(i<=100000) bonus=i*0.1;  else if(i<=200000)    bonus=bonus1+(i-100000)
本文档为【c++基础知识】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_635317
暂无简介~
格式:doc
大小:347KB
软件:Word
页数:86
分类:生活休闲
上传时间:2011-06-30
浏览量:95