C語言教程簡體_第1頁
C語言教程簡體_第2頁
C語言教程簡體_第3頁
C語言教程簡體_第4頁
已閱讀5頁,還剩109頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

C語言學(xué)習(xí)教程多數(shù)情況下,現(xiàn)下的編程高手都是從學(xué)習(xí)C語言入門的,在學(xué)校里,計算機(jī)相關(guān)專業(yè)中最基礎(chǔ)的課程也包括C語言,因此,掌握好這門課程對每一位立志成為優(yōu)秀程式員的初學(xué)人來說是大有裨益的!另外,對想透過參加全國計算機(jī)等級考試獲得證書的同學(xué)來說,學(xué)好C語言也非常關(guān)鍵。下面,是我整理出來的若干文章,總體上按照三個大的方向進(jìn)行分類,希望能好好閱讀,相信對你是很有幫助的!ー、基礎(chǔ)性問題(點擊下面文字鏈接即可打開頁面)1、C語言學(xué)習(xí):如何由dos向windows轉(zhuǎn)變2、二級C語言實例解答3、等級考試:C程式設(shè)計4、備戰(zhàn)C語言上機(jī)考試5、C語言程式設(shè)計技巧6、C語言初級講座7、寫好C程式的10條秘籍8、強(qiáng)大的語言一C入門之ー9、強(qiáng)大的語言ーC入門之二二、實例開發(fā)(點擊下面文字鏈接即可打開頁面)1、用C語言解決鬼谷算題2、用C語言實現(xiàn)的鬧鐘程式3、C程式開發(fā)經(jīng)典實例之一4、C程式開發(fā)經(jīng)典實例之ニ5、C程式開發(fā)經(jīng)典實例之三6、C程式開發(fā)經(jīng)典實例之四7、C程式開發(fā)經(jīng)典實例之五8、C程式開發(fā)經(jīng)典實例之六9、C程式開發(fā)經(jīng)典實例之七10、C程式開發(fā)經(jīng)典實例之八三、綜合提升(點擊下面文字鏈接即可打開頁面)1、C語言:黑客學(xué)員必修課之ー2、C語言:黑客學(xué)員必修課之ニ3、C程式設(shè)計基礎(chǔ)之ー4、C程式設(shè)計基礎(chǔ)之二5、C程式設(shè)計基礎(chǔ)之三6、C程式設(shè)計基礎(chǔ)之四7、C程式設(shè)計基礎(chǔ)之五8、C程式設(shè)計基礎(chǔ)之六9、C語言高效編程的的四大絕招(1)10、C語言高效編程的的四大絕招(2)C語言學(xué)習(xí):如何由dos向windows轉(zhuǎn)變很多大學(xué)C語言很長一段時間了,還不知C究竟能干什么,以為學(xué)習(xí)c語言沒什么用,純粹是為了應(yīng)付學(xué)校的考試.更有大說”學(xué)C語言?別做如此愚蠢的行為了!趕快學(xué)C++吧!”這種看法是不對的,不應(yīng)該把c跟C++之間劃起絕對的界限,過分看重C++而把c貶得一無是處,這是很片面的.C++功能雖然強(qiáng)大,但它畢竟是c的"超集",在C++里有哪ー處找不到c的影子呢?沒有c的支持,C++只能是無本之木。?般情況下,C++編程模式編寫的程式源代碼量小,但編譯后的代碼量較大,營運(yùn)的速度略低,不過開發(fā)時的工作量和工作難度較小;而c編程模式編寫的源代碼量較大,但可執(zhí)行的效率高.如果?些對速度要求高,尤其是對硬體操作較多的程式,大多數(shù)還是用c編程模式開發(fā)的(用C又比用匯編簡單,易于實現(xiàn)).另外,學(xué)Win32C程式設(shè)計還有助于更深入地了解Windows的內(nèi)幕和Win32APL任何的編程語言都是ー種工具,學(xué)習(xí)語言的目是要使用它來編寫出實際需要的軟體來,而軟體作為一個用戶程式,營運(yùn)時要倚賴作業(yè)系統(tǒng),大多數(shù)人使用什么作業(yè)系統(tǒng),我們就要編寫出基于哪ー種平臺上的程式來.這樣,軟體オ會有更大的市場?,F(xiàn)下市面上出現(xiàn)的有關(guān)c語言方面的書大多是教授DOS下的c,上機(jī)實習(xí)也是在TurboC2.0(簡稱Tc)環(huán)境下轉(zhuǎn)來轉(zhuǎn)去.編程環(huán)境的單調(diào)總使人感到不爽.這也沒辦法,dos下的c是最簡單的,初學(xué)人當(dāng)然要從最簡單的入門啦.連比較有名的計算機(jī)專家譚浩強(qiáng)編的書也都是贊成從dosド的c學(xué)起的.再說,ー個剛剛?cè)腴T的人想在windows這樣的多進(jìn)程,多線程的作業(yè)系統(tǒng)下用c編程,那似乎又不太現(xiàn)實.(那要了解在windows下,一個Win32程式大體上是怎樣執(zhí)行的.要對系統(tǒng)有比較多的了解才行,ー個初學(xué)人暫時還不具備那么多的知識)但我們的腳步又不能夠只停留在dos里,應(yīng)該積極地從dos向windows轉(zhuǎn)變.在dos的時代,我們可以對dos下的編程迷戀,但現(xiàn)下都是windows橫行霸道的時代了,我們就應(yīng)用c語言編寫windows平臺上的程式,因時而變,學(xué)以致用.是時代使然!如果現(xiàn)下還是dos雄霸天下的話,那我就不會寫這篇狗屁不通的文章來遺笑大方了,不被臭雞蛋扔死オ怪呢!"變法"是大勢所趨的了,關(guān)鍵是怎么變,不單單是學(xué)習(xí)c語言的人如此,就連學(xué)C++的大都這樣,筆者曾經(jīng)在QQ上碰到?個學(xué)了C++將近?年的小伙,居然問我,他想編一個windows窗ロ,該怎么下手,如果學(xué)ー門語言用了一年時間,只是學(xué)了一點語法知識,卻沒有編過一道程式,那實在是ー種悲哀.下面我談?wù)剰膁os向windows轉(zhuǎn)變的?些個人見解,(這純屬個大觀點,僅供參考,如果您已是高手,完全不必要在此浪費時間):一.拓寬視野,改變偏見別老以為c只是dos特有的東西,ー提到c語言就認(rèn)為c只能在dos下編程.其實,這是被tc束縛了意識,我們在學(xué)校里平時就只在dos的tc里面用c編程,很少用到“圖形模式",整天面對?quot;烏黑黑"的螢?zāi)?也難怪有些大一看到ー個用c語言描繪出來的像windows的窗口便以為是C++的手筆.其實,作為ー種語言,可以在任何一種平臺上編程,只是界面不同而已,只要找到適合該平臺的編程工具即可,c語言當(dāng)然也能在windows下大放異彩.眼界放寬點,改變偏見,必有精彩發(fā)現(xiàn).二.選擇優(yōu)秀的編程工具.“有好的工具,做起事來就事半功倍”.在dos下我們常用tc或bc(borlandc).在windows下可以用c++builder或者visualC++來編程,最好用visualc++畢竟是微軟的東西嘛!微軟?天不垮臺,編程者的飯碗就不會掉的啦ヘゴ.再說,windows作業(yè)系統(tǒng)是微軟出的,其內(nèi)幕微軟是最清楚不過的了,在應(yīng)用程式界面上,相信vc也是做得最好的.不過用vc++6來編c程式會恨煩的,大家要有心理準(zhǔn)備.同時可以選擇多種編程工具,例如匯編,可以加強(qiáng)對windows的了解,是成為高手的好方法。三.加強(qiáng)對windows的了解.可以說編ー個程式,就是用ー種語言的語法形式將數(shù)據(jù)架構(gòu)和表面的執(zhí)行過程描述出來.在不同的作業(yè)系統(tǒng)下,其程式的執(zhí)行過程是不同的.我們應(yīng)該對windows的系統(tǒng)機(jī)制最起碼有個大體的了解,オ有可能編寫windows的程式.dos是單進(jìn)程單線程的系統(tǒng),進(jìn)程從頭到尾的順序執(zhí)行,而windows是多進(jìn)程、多線程的作業(yè)系統(tǒng),是基于事件的,消息驅(qū)動的作業(yè)系統(tǒng).明白這些是在windows下編程必不可少的,多學(xué)學(xué)它,你會發(fā)現(xiàn)windows和dos有很多的不同之處。四.采取靈活多變的學(xué)習(xí)方法.在不同的時期,學(xué)習(xí)不同的東西?可是有些人學(xué)習(xí)像word,excel這類操作性極強(qiáng)的辦公軟體時,總是先看書,看到尾巴忘了頭,到上機(jī)時卻不知所措.這種學(xué)習(xí)模式是被動的,看這些軟體操作的書,里面說的都是具體的操作,不親手又怎能接受新知識?五.多進(jìn)行比較.dos和windows有許多共同和不同的地方,如果是從dos學(xué)過來的話,在學(xué)習(xí)過程中不妨多進(jìn)行比較,把不同的地方記下,相同的地方可以跳過,這可以快速地了解系統(tǒng)的不同之處,迅速地學(xué)到東西!學(xué)習(xí)程式設(shè)計,我主張"實踐ー>理論ー〉再實踐”的模式,在編程的初期,不管你會不會寫程式,都應(yīng)先實踐,(這里的實踐是指編程工具操作方面的實踐),學(xué)會操作編程工具.也許有些人會說:"廢話!沒有理論,乂怎么實踐?”不錯,當(dāng)你坐在一臺電腦面前不知所措時,你就會想方設(shè)法使自己學(xué)會操作它,主動看書,看線上幫助,請教別人,忙得個"不亦樂乎",這不是變”被動"為"主動"了嗎?邊學(xué)習(xí)邊操作,以實踐來帶動理論的學(xué)習(xí),接著達(dá)到"理論與實踐同步",就可闖過第一關(guān),學(xué)會了編程工具的基本操作,可以為以后上機(jī)實踐打下鋪墊.光學(xué)會操作像vc這類的工具還不行,工具是死的,人才是活的,不會編程只能是空操作,你還會說:"廢話!沒有理論,怎么實踐?"的,這時就要學(xué)習(xí)編程的真功夫了,也就是我說的第二階段一學(xué)"理論"階段,深入研究前輩們的著作,吸取前人的智慧精華為我所用,扎扎實實打好編程內(nèi)功,功夫到家了就應(yīng)該"再實踐",將學(xué)到的東西運(yùn)用于實際,編寫出我們需要的軟體來?學(xué)以致用嘛,呵呵??這種模式總比"先學(xué)好語法的條條框框,再上機(jī)實踐"的效果好得多啦.關(guān)于向windows轉(zhuǎn)變的個人觀點就只談這些,希望初學(xué)人早日踏hwindows的光明大道!由于我也是一個菜鳥,水準(zhǔn)有限,寫得不好,還請各位多多包涵!二級C語言實例解答C語言牽涉的概念比較復(fù)雜,規(guī)范繁多,使用靈活,容易出錯,不少初學(xué)人感到困難,下面透過幾個實例的分析來說明c語言學(xué)習(xí)中容易混淆的幾個問題,以期拋磚引玉,對初學(xué)人有所幫助。問題1:下面的程式inta=3,b=4;charstr=,c,;printfC*%d,%dM,a,b,str);執(zhí)行后,輸出結(jié)果為:(A)3,4,c(B)34c(C)3,4(D)程式出錯分析:在格式輸出時一般要求格式說明符與輸出項相一致,當(dāng)輸出項多余格式說明符時多余的輸出項不輸出,所以答案為C。問題2:有下面的程式段chara[3],b[]="china'';a=b;printf("%s",a);則輸出結(jié)果為:(A)營運(yùn)后輸出china(B)營運(yùn)后輸出ch(〇營運(yùn)后輸出chi(D)編譯出錯分析:這個題容易錯選a??實際答案為d,由于定義了字符數(shù)組后,數(shù)組名作為數(shù)組的首位址,是ー個常量,給ー個常量賦值的語句是錯誤的,換句話說,不能用賦值語句將一個字符常量或字符數(shù)組直接賦值給ー個字符數(shù)組,以答案選D。問題3:下列說明不正確的是:(A)chara[10]="china"(B)chara[10],??p=a;p="china" (C)char??p;p="china"(D)chara[10],??p;p=a="china";分析:此題易知A是正確的,D是錯誤的,對于B,C就很難選擇了。有人認(rèn)為p是ー個字符變量,以為把"china"賦給該字符變量是不對的,實際上它是ー個指針變量,只能指向一個字符變量或其他字符類型數(shù)據(jù),不是把"china"存放到p中(指針變量只存放位址),只是把"china"的苜位址賦給指針變量p,所以B,C也是正確的。問題4:下面的程式執(zhí)行結(jié)果是:main(){intx[5]={2,4,6,840},??p??????pp;p=x;pp=&&p;primf("%d",??(p++));printf("%d\n",????pp);(A)44(B)24(C)22(D)46分析:在此題中p++是后加模式,先輸出??P的值,P再自加,PP是二級指針,指向ー級指針p,執(zhí)行第一條輸出語句前后,存在下列指向關(guān)系:所以本題應(yīng)選b問題5:下列輸出語句執(zhí)行后結(jié)果為:inti=3;printf("%d”,-i++);(A)3(B)4(C)-3(D)-4分析:此題考査運(yùn)算符的優(yōu)先級,負(fù)號運(yùn)算符和++運(yùn)算符同優(yōu)先級,而結(jié)合方向為“自左至右“,即ーi++相當(dāng)于ー??i++??,所以先取出i的值3,輸出ーi的值ー3,然后i增值為4,而不是i先增值為4,然后輸出ー4,所以答案選擇C。問題6:設(shè)有以下語句,structst{intn;structst??next;);staticstructsta[3]={5,&&a[l],7,&&a[2],9,、〇’},??p:則以下表達(dá)式的值為6的是:(A)p++-n(B)p-n++(C)(??p).n++(D)++pfn分析:此題也是考查運(yùn)算符的優(yōu)先級,ー優(yōu)先級髙于++,結(jié)合方向為自左至右,而后者結(jié)合方向為自右至左,A答案相當(dāng)于??p++??-n??B答案相當(dāng)于??p-n??++??所以A、B、C表達(dá)式值均為5,D答案相當(dāng)于++??p-n????自加模式為前加模式,所以其值為6。上面是我在教學(xué)過程中學(xué)生一些比較集中的問題,只要認(rèn)真的體會和總結(jié),加強(qiáng)上機(jī)實踐,對自己C語言的學(xué)習(xí)會大有裨益。等級考試:C程式設(shè)計計算機(jī)等級考試改革后,三級考試由A、B兩類改為PC技術(shù)、數(shù)據(jù)庫技術(shù)、網(wǎng)路技術(shù)、訊息管理技術(shù)四類。其后三類的上機(jī)考試內(nèi)容均為C語言程式設(shè)計。三級上機(jī)不同于二級,它只有一道編程題,風(fēng)險更大。但只要能達(dá)到題目的要求,一般都能拿到3分。參加過考試的人都應(yīng)該知道一本書——南開大學(xué)出版的《全國計算機(jī)等級考試?上機(jī)考試習(xí)題集》,這本書基本上包含了所有的上機(jī)考試題目類型。這本書里一共有100道題,都很經(jīng)典。但也許有人會覺得太多了,沒時間看完所有的題目。下面我給大家介紹ー個復(fù)習(xí)技巧。簡化問題每道試題的程式都很長,而且涉及的知識點很多。實際上,在考試時看完全部程式并沒有必要。每次只用把主要精力放在次程序的編制上,認(rèn)真思考其“功能要求”。所以平時我們只用關(guān)注需要編制的次程序。試題歸類要學(xué)會找出題目之間的規(guī)律,復(fù)習(xí)起來就會事半功倍。在?百道題目中,實際上只需要仔細(xì)分析其中的二十多道題就足夠了,其他的只用看一下就行。因為大部分的題目都是類似的,總結(jié)出規(guī)律來之后,我們可以舉一反三。例如下面兩類題目:例!.(占題庫10%)已知在文件IN.DAT中存有100個產(chǎn)品銷售記錄,每個產(chǎn)品銷售記錄由產(chǎn)品代碼dm(字符型4位)、產(chǎn)品名稱me(字符型10位)、單價dj(整型)、數(shù)量si(整型)、金額je(長整型)幾部分組成。其中:金額=單價X數(shù)量可計算得出。函數(shù)ReadDat。的功能是讀取這100個銷售記錄并存入架構(gòu)數(shù)組sell中。請編制函數(shù)SortDat(),其功能要求:按產(chǎn)品代碼從大到小進(jìn)行排列,若產(chǎn)品代碼相同,則按金額從大到小進(jìn)行排列,最終排列結(jié)果仍存入架構(gòu)數(shù)組sell中,最后調(diào)用函數(shù)WriteDat。把結(jié)果輸出到文件OUT10.DAT中。程式:voidSortDat(){intI,J;PROxy;for(I=0;I<100;I++){if(strcmp(sell[I].dm,sell[J].dm)<O){xy=sell[I];sell[I]=sell[J];sell[J]=xy;}elseif(strcmp(sell[I].dm,sell[J].dm)==O)if(sell[I].je{xy=sell[I];sell[I]=sell[J];sell[J]=xy;}})分析:這類程式題H的關(guān)鍵部分在于、、三句上。它們的作用就是給出調(diào)換記錄次序的條件。與其類似的題目只是在功能要求上有所不同(例如把“從大到小”改為“從小到大”,把“產(chǎn)品代碼”換成“產(chǎn)品名稱”等),所以我們只需要修改這三句。如果我們抽到的題目是“金額從小到大,如相同,則產(chǎn)品名稱從大到小”,我們就將改為:if(sell[I].je>sell[JJ.je)改為:elseif(sell[I].je==sell[J].je)改為:if(strcmp(sell[I].mc,sell[J].mc)<O)而對于將記錄次序進(jìn)行調(diào)換的程式xy=sell[I]、sell[I]=se川J]、sell[J]=xy,我們只需要套用就行。例2.(占題庫10%)函數(shù)ReadDat()的功能是實現(xiàn)從文件ENGIN中讀取一篇英文文章,存入大字元串?dāng)?shù)組xx中;請編制函數(shù)encryptChar(),按給定的代替關(guān)系對數(shù)組xx中的所有字符進(jìn)行代替,仍存入數(shù)組xx的對應(yīng)的位置上,最后調(diào)用函數(shù)WriteDat()把結(jié)果xx輸出到文件PS1.DAT中。代替關(guān)系:f(p)=p*llmod256。其中p是數(shù)組xx中某ー個字符的ASCII值,f(p)是計算后的新字符的ASCII值,如果計算后f(p)的值小于等于32或大于130,則該字符不變,否則將f(p)所對應(yīng)的字符進(jìn)行代替。程式:voidencryptChar(){inti;char*pf;for(I=0;I{pf=xx[I];while(*pf!=0){if(*pf*11%256>130ll*pf*11%256<=32){pf++;continue;}*pf=*pf*ll%256;pf++;)))分析:這ー類題目較例1更為簡單.,其關(guān)鍵只有一句,它是對條件“如果計算后f(p)的值小于等于32或大于130”的描述。上機(jī)考試中類似的題目可能只對這個條件作少許變動。例如:“如果原字符是大寫字母或計算后f(p)的值小于等于32”,則只需把改為:if((*pf>='A'&&&&*pf<='Z')ll*pf*H%256<=32)其他試題也可以按照上述方法進(jìn)行總結(jié)。總而言之,對于三級上機(jī)考試,我們不僅要提升編程能力,還應(yīng)該注意分析試題,尋找規(guī)律,用更少的時間和精力解決更多的問題!備戰(zhàn)C語言上機(jī)考試C語言是目前最常用的軟體開發(fā)語言之一,其功能強(qiáng)大,具有悠久的歷史,從C、C++發(fā)展到現(xiàn)下的C#,不斷地得以更新繁衍。在全國計算機(jī)等級考試中有,五個類別使用C語言作為上機(jī)考試內(nèi)容,為各編程語言中應(yīng)用最多的。理論先行[被屏蔽廣告]雖是上機(jī)考試,仍需以理論知識為基礎(chǔ),所以必須將C語言教材從頭到尾學(xué)習(xí)一遍(應(yīng)選擇威權(quán)教材),對C語言的基本概況做到心中有數(shù)。學(xué)完教材后,選取ー些有代表性的編程范例,將其語句逐條理解透徹。同時還須注意一點,看的懂未必等于自己就會編寫,應(yīng)當(dāng)自己嘗試默寫,從而找出知識薄弱點、思惟盲點。要養(yǎng)成一些良好習(xí)慣,比如,代碼書寫格式使用規(guī)范的鋸齒形,盡量使用完整表達(dá)。如果采用簡化模式,雖然不一定影響運(yùn)算結(jié)果,但有的考試評分標(biāo)準(zhǔn)是按答題要點給分,所以還是不省為妙。以下是學(xué)習(xí)C語言過程中容易出現(xiàn)的問題:.函數(shù)、變量使用前未定義。.混淆“="和“=="。.語句后或預(yù)定義的函數(shù)名后漏掉分號。.將else拼寫成esle、continue拼寫成contiune0.括號搭配錯誤。.首位址理解為1。.p++與++p區(qū)別不清。.break、continue運(yùn)用不當(dāng)。.誤將單引號用于字元串常量,將雙引號用于字符常量。.else分句中巢狀條件語句時,漏掉了“if”。上機(jī)實踐雖然考點、培養(yǎng)訓(xùn)練點一般都提供類比上機(jī),但畢竟時間、地點受到限制,不能保證充分的練習(xí)時間,因此很多考生都希望能在自家電腦上進(jìn)行操作實踐,下面具體談?wù)勅绾螌崿F(xiàn)下個人電腦上進(jìn)行練習(xí)的方法。、簡易環(huán)境練習(xí)系統(tǒng)要求:Windows系統(tǒng)需用軟體:TurboC2.0TC軟體雖然不是標(biāo)準(zhǔn)的Windows程式,但在Windows環(huán)境下依然可以使用。為使軟體處于理想營運(yùn)狀態(tài),營運(yùn)tc.exe后需要做ー些設(shè)置:.按“漢”按鈕,否則會出現(xiàn)部分亂碼。.點擊屬性按鈕,在程式選項卡的“工作目錄”欄中根據(jù)上一命令行填入程式所在目錄,“營運(yùn)”欄選擇最大化,選擇“退出時關(guān)閉”。設(shè)置好后即可依照練習(xí)冊輸入習(xí)題,進(jìn)行編譯調(diào)試。編程中用到的處理數(shù)據(jù)一般需自建。為了提升效率,可從網(wǎng)上下載習(xí)題。這里應(yīng)留意一些下載習(xí)題中的問題,比如遺漏字符、錄入錯誤等,還有一些不易發(fā)現(xiàn)的情況,像雙引號的字體不標(biāo)準(zhǔn)、文件擴(kuò)展名前的句號成了逗號、甚至一些看似無內(nèi)容的空行中包含著某些ASCI!碼,都會影響編程結(jié)果。二、全真環(huán)境練習(xí)系統(tǒng)要求:DOS系統(tǒng)需用軟體:TurboC20、UCDOS、上機(jī)類比軟體經(jīng)過基礎(chǔ)階段學(xué)習(xí)后,再來進(jìn)行針對等級考試的練習(xí),這就需要用到類比軟體了。市面上類比軟體很容易買到,其操作界面與正式考試完全一樣,還往往匯集了豐富的題庫和答案、源程式、輸入數(shù)據(jù),并可進(jìn)行自我評分。有的還提供筆試題知識點查詢,介紹考試技巧等。使用類比軟體前,應(yīng)先安裝UCDOS(這與真實考試要求一樣,須選5.0以上版本,而且最好采用正式版,否則可能影響軟體使用)。通常情況下在Windows環(huán)境下是無法使用類比軟體的,經(jīng)過ー些專業(yè)設(shè)置后雖可實現(xiàn),但僅限于Windows9X作、ル系統(tǒng),而且設(shè)置不當(dāng)易使系統(tǒng)崩潰,所以筆者建議還是在純DOS環(huán)境下使用為妥。實戰(zhàn)心得筆者參加的今年上半年考試題目大意如下:要求將一篇英文文章中每個字符的ASCII值按公式f(p)=p17%256計算,如f(p)的ASCII值小于32或為奇數(shù),則原字符不變,否則予以替代。這道題目需要編寫的程式代碼沒幾行,我寫好后調(diào)試營運(yùn),一切正常,復(fù)查幾遍也看不出有哪兒不妥。正打算離開考場時,忽然覺得運(yùn)算結(jié)果值得懷疑,根據(jù)題意,經(jīng)過ASCI!值計算后的結(jié)果不大可能仍都是常規(guī)字符,因此回過頭來再逐字審查題目,反覆對照編好的程式,焦點集中在了存放f(p)值的變量定義上,難道應(yīng)將“char"改為"unsignedchar”?一試,結(jié)果果然不同。事后查知,char變量值的范圍為-128至+127,unsignedchar變量值的范圍為〇至255〇比如字符"x”的ASCI!值為120,按上述公式運(yùn)算后值為248,字符應(yīng)予以替代;如果存放f(p)值的變量定義為char型,值則轉(zhuǎn)換為ー8,字符因而不被替代,難怪剛オ運(yùn)算結(jié)果顯出全篇常規(guī)字符了。所以說,仔細(xì)嚴(yán)謹(jǐn)?shù)膽?yīng)考作風(fēng)能彌補(bǔ)?些技術(shù)上的不足,有助于臨場發(fā)揮。友情提示.由于使用UCDOS,當(dāng)螢?zāi)幌路斤@示其狀態(tài)條時,TurboC中的快捷鍵Alt+F9(調(diào)試編譯)、Alt+F5(查看營運(yùn)結(jié)果)等提示會被屏蔽抻,解決的辦法為按一下右Shift鍵,隱藏UCDOS狀態(tài)條后即可正常使用。值得一提的是,Alt+F9雖然是TurboC菜單中的Run/Run命令的快捷鍵,但兩者不完全相同:菜單命令包括自動編譯、連接和營運(yùn)程式;而快捷鍵模式卻不包括營運(yùn)程式,自然也就無運(yùn)算結(jié)果,所以即使程式代碼編寫正確,考試成績?nèi)杂锌赡転榱惴帧?雖然ー些類比軟體的習(xí)題也是從國家考試中心發(fā)行的《全國計算機(jī)等級考試上機(jī)考試習(xí)題集》中選取,但正式考試時如遇到練習(xí)過的題目,仍應(yīng)看仔細(xì),其中可能會有“小于”與“大于”之類的一字之別。C語言程式設(shè)計技巧在許多應(yīng)用軟體營運(yùn)時都帶有命令行參數(shù),其實這些命令行參數(shù)在C語言編寫的程式中也可以實現(xiàn),靈活地運(yùn)用命令行參數(shù)進(jìn)行處理可以有效地提升程式的營運(yùn)效率,收到事半功倍的效果。C語言中有關(guān)命令行參數(shù)涉及到程式的主函數(shù)main(intargc,char*argvU這樣兩個參數(shù),其中,intargc表示命令行參數(shù)的個數(shù)(包括可執(zhí)行程式名本身),char*argv[]表示每個參數(shù)的具體內(nèi)容,argv陽為命令行中可執(zhí)行程式名本身,argv⑴為命令行中第二個參數(shù)的內(nèi)容,依次類推。如下例輸出命令行參數(shù)的個數(shù)及參數(shù)的內(nèi)容:main(intargc,char*argv[],{intI;printf(”\n命令行中可執(zhí)行文件名為:%sn,argv[O]);printf("\n總共有%d個參數(shù):",argc);1=0;while(argc>=l){printf("%s",argv[l++]);argc ;})命令行參數(shù)用的最多還是在諸如DIRA:等之類帶有盤符、路徑或文件名這樣的命令行中,所以說靈活處理這ー類參數(shù)オ能有效地提升程式的營運(yùn)效果。譬如DIR命令,其后可以是盤符,可以是路徑,也可以是文件名,如何區(qū)分這ー?參數(shù)呢?請看下例(此程式類比DIR命令,程式要求在命令行輸入ー個參數(shù):盤符或路徑或文件名,若無參數(shù)或參數(shù)多于一個都將取默認(rèn)的參數(shù)功能:類比DIR命令進(jìn)行處理命令行參數(shù) ツincludeincludeincludeinchludeintj,num=0;charss[20],path[50],path2[50];voidmain(intargc,char*argv[])(structffblkf;intdone;if(argc==2) /?取命令行參數(shù)到數(shù)組中?/strcpy(ss,argv[l]);elsestrcpy(ss/*.*");/*給數(shù)組賦值缺省參數(shù)?/if(((ss[strlen(ss)—1]==*\\'II((ss[strlen(ss)—1]==:'))strcat(ss//*.?〃);/*若參數(shù)為路徑或盤符,則加上"*.*" */getcwd(path1,50);/?取當(dāng)前路徑?/if(chdir(ss)==0)/?判斷參數(shù)是否為路徑?/strcat(陷”\\?ナ);/*若路徑末沒有帶ヤ,,則加上"*.*”*/chdir(pathl);/*恢復(fù)原來路徑?/strcpy(path2,ss);for(j=strlen(path2);j>0;j )/?提取參數(shù)中的路徑到path2*/{if((path2UJ==,W))ll(path2[j]==Y)){path2|j+l]=、()';gotosenull;})path2[0]='\0';senull:if(strlen(path2)==0)/?若給出的參數(shù)中沒帶路徑,則取當(dāng)前路徑?/strcpy(path2,path1);printf("ヽn**類比DIR**\n命令目錄路徑%s”,path2);done=findfirst(ss,&f,55);/*查找第?個配匹的文件?/j=l;while(!done){if(f.ff_attrib!=Ox10)/?若文件屬性不是目錄?/printf(M\n%15s%201dH,f.ff_name,f.ff_fsize);elseprintf("\n&1Is”,f.ff_name);num++;j++;if(j==23)printf("\n More(按任意鍵繼續(xù)) ");getch();j=0;printf("\n(目錄路徑%s)”,path2);}done=findnext(&f);/?查找下?個配匹的文件*/)printf("\n當(dāng)前目錄中總共有%d個文件An”,num);C語言初級講座我們已經(jīng)看到程式中使用的各種變量都應(yīng)預(yù)先加以說明,即先說明,后使川。對變量的說明可以包括三個方面:?數(shù)據(jù)類型?存儲類型?作用域在本講中,我們只介紹數(shù)據(jù)類型說明。其它說明在以后陸續(xù)介紹。所謂數(shù)據(jù)類型是按被說明量的性質(zhì),表示形式,占據(jù)存儲空間的多少,構(gòu)造特點來劃分的。在C語言中,數(shù)據(jù)類型可分為:基本數(shù)據(jù)類型,構(gòu)造數(shù)據(jù)類型,指針類型,空類型四大類。.基本數(shù)據(jù)類型基本數(shù)據(jù)類型最主要的特點是,其值不可以再分解為其它類型。也就是說,基本數(shù)據(jù)類型是自我說明的。.構(gòu)造數(shù)據(jù)類型構(gòu)造數(shù)據(jù)類型是根據(jù)已定義的?個或多個數(shù)據(jù)類型用構(gòu)造的方法來定義的。也就是說,ー個構(gòu)造類型的值可以分解成若干個“成員”或“元素”。每個“成員”都是ー個基本數(shù)據(jù)類型或又是ー個構(gòu)造類型。在C語言中,構(gòu)造類型有以下幾種:?數(shù)組類型?架構(gòu)類型?聯(lián)合類型.指針類型指針是?種特殊的,同時乂是具有重要作用的數(shù)據(jù)類型。其值用來表示某個量在內(nèi)存儲器中的位址。雖然指針變量的取值類似于整型量,但這是兩個類型完全不同的量,因此不能混為ー談。4.空類型在調(diào)用函數(shù)值時,通常應(yīng)向調(diào)用者返回?個函數(shù)值。這個返回的函數(shù)值是具有一定的數(shù)據(jù)類型的,應(yīng)在函數(shù)定義及函數(shù)說明中給以說明,例如在例題中給出的max函數(shù)定義中,函數(shù)頭為:intmax(inta,intb);其中“int”類型說明符即表示該函數(shù)的返回值為整型量。乂如在例題中,使用了庫函數(shù)sin,由于系統(tǒng)規(guī)定其函數(shù)返回值為雙精度浮點型,因此在賦值語句s=sin(x);中,s也必須是雙精度浮點型,以便與sin函數(shù)的返回值?致。所以在說明部分,把s說明為雙精度浮點型。但是,也有一類函數(shù),調(diào)用后并不需要向調(diào)用者返回函數(shù)值,這種函數(shù)可以定義為’‘空類型"。其類型說明符為void。在本講中,我們先介紹基本數(shù)據(jù)類型中的整型、浮點型和字符型。其余類型在以后各講中陸續(xù)介紹。對于基本數(shù)據(jù)類型量,按其取值是否可改變又分為常量和變量兩種。在程式執(zhí)行過程中,其值不發(fā)生改變的量稱為常量,取值可變的量稱為變量。它們可與數(shù)據(jù)類型結(jié)合起來分類。例如,可分為整型常量、整型變量、浮點常量、浮點變量、字符常量、字符變量、枚舉常量、枚舉變量。在程式中,常量是可以不經(jīng)說明而直接引用的,而變量則必須先說明后使用。整型量整型量包括整型常量、整型變量。整型常量就是整常數(shù)。在c語言中,使用的整常數(shù)有八進(jìn)制、十六進(jìn)制和十進(jìn)制三種。整型常量.ハ進(jìn)制整常數(shù)八進(jìn)制整常數(shù)必須以0開頭,即以〇作為ハ進(jìn)制數(shù)的前綴。數(shù)碼取值為0?7。ハ進(jìn)制數(shù)通常是無符號數(shù)。以下各數(shù)是合法的ハ進(jìn)制數(shù):015(十進(jìn)制為13)0101(十進(jìn)制為65)0177777(十進(jìn)制為65535)以下各數(shù)不是合法的ハ進(jìn)制數(shù):256(無前綴0)03A2(包含了非ハ進(jìn)制數(shù)碼)-0127(出現(xiàn)了負(fù)號).十六進(jìn)制整常數(shù)十六進(jìn)制整常數(shù)的前綴為0X或Ox。其數(shù)碼取值為0?9,A?F或a?f。以下各數(shù)是合法的十六進(jìn)制整常數(shù):0X2A(十進(jìn)制為42) OXAO(十進(jìn)制為160) OXFFFF(十進(jìn)制為65535)以下各數(shù)不是合法的十六進(jìn)制整常數(shù):5A(無前綴OX) 0X3H(含有非十六進(jìn)制數(shù)碼).十進(jìn)制整常數(shù)十進(jìn)制整常數(shù)沒有前綴。其數(shù)碼為0?9。以下各數(shù)是合法的十進(jìn)制整常數(shù):237-568655351627以下各數(shù)不是合法的十進(jìn)制整常數(shù)023(不能有前導(dǎo)0)23D(含有非十進(jìn)制數(shù)碼)在程式中是根據(jù)前綴來區(qū)分各種進(jìn)制數(shù)的。因此在書寫常數(shù)時不要把前綴弄錯造成結(jié)果不正確。4.整型常數(shù)的后綴在16位字長的機(jī)器上,基本整型的長度也為16位,因此表示的數(shù)的范圍也是有限定的。十進(jìn)制無符號整常數(shù)的范圍為〇?65535,有符號數(shù)為ー32768?+32767。ハ進(jìn)制無符號數(shù)的表示范圍為0?0177777。十六進(jìn)制無符號數(shù)的表示范圍為0X0?OXFFFF或0x0?OxFFFF。如果使用的數(shù)超過了上述范圍,就必須用長整型數(shù)來表示。長整型數(shù)是用后綴“L”或“ド來表示的。例如:十進(jìn)制長整常數(shù)158L(十進(jìn)制為158)358000L(十進(jìn)制為ー358000)ハ進(jìn)制長整常數(shù)012L(十進(jìn)制為10)O77L(十進(jìn)制為63)0200000L(十進(jìn)制為65536)十六進(jìn)制長整常數(shù)0X15L(十進(jìn)制為2D0XA5L(十進(jìn)制為165)0X10000L(十進(jìn)制為65536)長整數(shù)158L和基本整常數(shù)158在數(shù)值上并無區(qū)別。但對158L,因為是長整型量,C編譯系統(tǒng)將為它分發(fā)4個位元組存儲空間。而對158,因為是基本整型,只分發(fā)2個位元組的存儲空間。因此在運(yùn)算和輸出格式上要予以注意,避免出錯。無符號數(shù)也可用后綴表示,整型常數(shù)的無符號數(shù)的后綴為“U”或"u”。例如:358u,0x38Au,235Lu均為無符號數(shù)。前綴,后綴可同時使用以表示各種類型的數(shù)。如0XA5LU表示十六進(jìn)制無符號長整數(shù)A5,其十進(jìn)制為!65〇寫好C程式的10條秘籍神乎其技,惟C程式,功到自成,十大建議!1、汝應(yīng)頻繁催動lint工具,據(jù)其語法聲明修習(xí)內(nèi)力,此事皆因lint之思慮決斷實遠(yuǎn)在君上。2,不可依隨NULL指針,如若不然,混沌癡顛必俟君于彼岸。3、縱有天賦大智慧,知曉其事無礙,汝亦當(dāng)盡數(shù)強(qiáng)制挪移函數(shù)參數(shù)為原型所期之?dāng)?shù)據(jù)類型,以免ー時疏忽,致使數(shù)據(jù)類型向汝討還血債。4、若頭文件未于函數(shù)原型之中聲明返回值類型,汝當(dāng)親為此事,更須謹(jǐn)慎再三,以防不測降臨汝身。5、汝須親核字元串、數(shù)組操作之越界與否。古之圣人有言:嘗祈門人對答“然也”,不意門人答日“吾了然于胸?zé)o須多慮盡請寬心他日趨庭必當(dāng)重謝”——所期者短,所獲者長,此于數(shù)組,實最險要處也。6、若函數(shù)聲明內(nèi)提及,于異常時將返回錯誤代碼云云,汝當(dāng)謹(jǐn)慎校核該返回值?;蛴行:苏Z句使汝之代碼增大數(shù)倍,令汝之手指因敲鍵而痛楚莫名之事,汝亦當(dāng)如此。不然,汝固以為此異常之事難得一見,上蒼亦必借此懲戒汝之傲慢。7、汝應(yīng)研習(xí)庫函數(shù),不當(dāng)親筆再寫之。如是,汝之代碼必短小易讀,汝之心境必清爽恬淡。8、縱汝不愿,汝亦應(yīng)借括號、縮進(jìn)之屬,使汝之代碼間架清晰,可為后者借鏡。汝之大智慧施于決疑解難則可,施于敷設(shè)謎團(tuán)、淆亂文體則萬萬不可。9、外部標(biāo)識符之前六字符當(dāng)與眾不同。此律法看似粗陋,和者寥寥,然其效用自能延續(xù)永遠(yuǎn)。汝若不從此言,他日,汝欲連接程式于舊作之上時,必抓耳撓腮、蓬頭垢面,野狼狽之相盡現(xiàn)矣。10、或有族類,大言炎炎,云“普天之下,莫非VAX”。于此等異端,汝當(dāng)期棄之、斷絕之、遠(yuǎn)避之。更有異人,篤信魔道,以為縱汝所用電腦頻繁換代,汝之程式亦能長久適用。汝亦不可與此類惡大來往,謹(jǐn)記謹(jǐn)記。強(qiáng)大的語言一C入門之ーヽC語言的特點C語言是美國的DennisRitchie在1972年設(shè)計發(fā)明的。它由早期的編程語言BCPL(BasicCombinedProgrammingLanguage)發(fā)展演變而來。C語言之所以發(fā)展迅速,成為最受歡迎的語言之一,主要因為它具有強(qiáng)大的功能。歸納起來,C語言具有下列特點:C語言是“中級語言”它把高階語言的基本架構(gòu)和語句與低級語言的實用性結(jié)合起來。c語言可以像組合語言ー樣對位、位元組和位址進(jìn)行操作,而這三者是計算機(jī)最基本的工作單yc〇C語言是架構(gòu)式語言所謂架構(gòu)式語言的顯著特點是代碼及數(shù)據(jù)的分隔化,即程式的各個部分除了必要的訊息交流外彼此獨立。這種架構(gòu)化模式可使程式層次清晰,便于使用、維護(hù)以及調(diào)試。C語言是以函數(shù)形式提供給用戶的,這些函數(shù)可方便地調(diào)用,并具有多種循環(huán)、條件語句控制程式流向,從而使程式完全架構(gòu)化。C語言功能齊全C語言具有各種各樣的數(shù)據(jù)類型,并引入了指針概念,可使程式效率更高。另外C語言也具有強(qiáng)大的圖形功能,支持多種顯示器和驅(qū)動器,而且計算功能、邏輯判斷功能也比較強(qiáng)大,可以實現(xiàn)決策目的。C語言適用范圍廣C語言還有一個突出的優(yōu)點就是適合多種作業(yè)系統(tǒng),如DOS、Windows,UNIX,也適用于多種機(jī)型。二、C語言基礎(chǔ)介紹隨著微型計算機(jī)的日益普及,出現(xiàn)了許多C語言版本。由于沒有統(tǒng)ー的標(biāo)準(zhǔn),使得這些C語言之間出現(xiàn)了一些不一致的地方。為了改變這種情況,美國國家標(biāo)準(zhǔn)研究所(ANSI)為C語言制定了?套ANS!標(biāo)準(zhǔn),成為現(xiàn)行的C語言標(biāo)準(zhǔn)。而在這里我們將主要以美國Borland公司的產(chǎn)品TurboC2.0作為介紹對象,簡要介紹一下C語言的基本知識。.數(shù)據(jù)類型在C語言中,每個變量在使用之前必須定義其數(shù)據(jù)類型。TurboC有以下幾種類型:整型(int)、浮點型(float)、字符型(char)、指針型(*)、無值型(void)以及架構(gòu)(struct)和聯(lián)合(union)。其中前五種是C語言的基本數(shù)據(jù)類型、后兩種數(shù)據(jù)類型(架構(gòu)和聯(lián)合)則是C語言的擴(kuò)展數(shù)據(jù)類型。.關(guān)鍵字和標(biāo)識符、運(yùn)算符所謂關(guān)鍵字就是已被C語言本身使用、不能作其它用途的字。例如關(guān)鍵字else,就再不能用作變量名、函數(shù)名等。所謂標(biāo)識符是指常量、變量、語句標(biāo)號以及用戶自定義函數(shù)的名稱。C標(biāo)識符的定義十分靈活。C的運(yùn)算符非常豐富,主要分為三大類:算術(shù)運(yùn)算符、關(guān)系與邏輯運(yùn)算符、按位運(yùn)算符。.變量C規(guī)定所有變量在使用前都必須加以說明。ー?條變量說明語句由數(shù)據(jù)類型和其后的?個或多個變量名組成,例如“intX”。變量可以在程式中三個地方說明:函數(shù)內(nèi)部、函數(shù)的參數(shù)定義中或所有的函數(shù)外部。根據(jù)所定義位置的不同,變量可分為局部變量、形式參數(shù)和全程變量。C像其它高階語言ー樣也使用數(shù)組變量。所謂數(shù)組就是指具有相同數(shù)據(jù)類型的變量集,并擁有共同的名字。數(shù)組中的每個特定元素都使用下標(biāo)來訪問。.控制流程語句C提供了豐富、靈活的控制流程語句,主要有:條件語句、循環(huán)語句和開關(guān)語句。條件語句的?般形式為if—else〇C提供三種基本的循環(huán)語句:for語句、while語句和do—while語句。而在編寫程式時,經(jīng)常會碰到按不同情況分轉(zhuǎn)的多路問題,這時可用巢狀if—else—if語句來實現(xiàn),但if—else—if語句使用不方便,并且容易出錯。對這種情況,C提供了一個switch開關(guān)語句。強(qiáng)大的語言一C入門之二上接:強(qiáng)大的語言ーーC入門之ー.指針(point)學(xué)習(xí)C語言,指針是較難理解的一個概念。我們知道變量在計算機(jī)內(nèi)占有一塊儲存區(qū)域(也就是有一個“位址”),變量的值就存放在這塊區(qū)域之中,在計算機(jī)內(nèi)部,透過訪問或修改這塊區(qū)域的內(nèi)容來訪問或修改相應(yīng)的變量。C語言中,對于變量的訪問形式之一,就是先求出變量的位址,然后再透過位址對它進(jìn)行訪問,這就是指針及指針變量。指針變量的一般定義為“類型標(biāo)識符?標(biāo)識符”,其中標(biāo)識符是指針變量的名字,標(biāo)識符前加了“*”號,表示該變量是指針變量,而最前面的“類型標(biāo)識符”表示該指針變量所指向的變量的類型。ー個指針變量只能指向同一種類型的變量,也就是說,我們不能定義ー個指針變量,既能指向?整型變量乂能指向雙精度變量。三、C程式設(shè)計初步C語言是ー種中級語言,用戶用C語言編寫的程式稱為源程式,源程式文件的后綴一般必須為“.c”。計算機(jī)硬體不能直接執(zhí)行源程式,必須將源程式翻譯成二進(jìn)制目標(biāo)程式。翻譯工作是由編譯程式完成的,翻譯的過程稱為編譯,編譯的結(jié)果稱為目標(biāo)程式,目標(biāo)程式文件后綴一般為“.OBJ”。程式翻譯成目標(biāo)程式后,便可進(jìn)行連接。“連接”的目的是使程式變成在計算機(jī)上可以執(zhí)行的最終形式。在這一階段,系統(tǒng)程式庫中的程式要與目標(biāo)程式連接,連接的結(jié)果稱為執(zhí)行程式,執(zhí)行程式文件名字一般以“.EXE”結(jié)尾。正如所有利用計算機(jī)語言所編寫的的第一個程式ー樣,下面,我們也試著建立一個名為“HELLO.C”的源程式,這個程式將在螢?zāi)簧厦娲蛴〕觥澳愫?,《電腦報》軟體世界!”這個短語。透過鍵盤輸入程式:includemain()printf("你好,《電腦報》軟體世界!\n");這個最簡單的程式,也包括了C語言的ー些基本的內(nèi)容,它有一個主函數(shù)main(),使用到了標(biāo)準(zhǔn)的輸出函數(shù)printf(),同時為了能夠讓程式營運(yùn)時包含這個標(biāo)準(zhǔn)函數(shù),我們首先要在程式的最開始寫上include,“stdio.h”是C語言提供的標(biāo)準(zhǔn)輸入輸出函數(shù)庫頭文件,我們可以直接引用里面的一些函數(shù),來完成我們所要實現(xiàn)的功能?,F(xiàn)下,讓我們來編譯、連接并營運(yùn)一下這個最簡單的程式,我們將看到,在螢?zāi)簧洗蛴〕隽恕澳愫?《電腦報》軟體世界!”四、參考資料首先是一些C語言相關(guān)的書籍:《C語言》譚浩強(qiáng),《C語言編程寶典》王大剛,《數(shù)據(jù)架構(gòu)馬算法——面向?qū)ο蟮腃++設(shè)計模式》BrunoR.Preiss,《C/C++語言與研究開發(fā)實踐》伍曉宇、辛勇,《BorlandC++Builder3.0/4.0類參考詳解》張濟(jì)、袁野、王秀娟,《BorlandC++Builder3.0/4.0高級類參考詳解》王秀娟、孫悅、黎華,《C++語言命令詳解(第二版)》BrianOverland,《C++程式設(shè)計實驗指導(dǎo)》錢能。二、實例開發(fā)用C語言解決鬼谷算題在鬼谷算題中有這樣ー個著名的題目:'‘今有物不知其數(shù),三三數(shù)之剩二,五五數(shù)之剩三,七七數(shù)之剩二,問物幾何?”這屬于高等數(shù)學(xué)中的數(shù)論。我國宋代學(xué)人對這類題目鉆研已頗為精深,總結(jié)出了‘’三人同行七十稀,五樹梅花廿ー枝,七子團(tuán)圓正半月,去百零五便得知。”這樣的口訣,意思是說“以三三數(shù)之,余數(shù)乘以七十;五五數(shù)之,余數(shù)乘以二十一;七七數(shù)之,余數(shù)乘十五。三者相加,如不大于ー百零五,即為答數(shù);否則須減去ー百零五或其倍數(shù)?!边@道算題的答案為23。計算起來比較繁瑣,但如果用我們所熟悉的C語言來編寫ー小段程式的話,很快就能解決。這段程式如下:#include〃stdio.h"mainintxforx=0x<100x++??ifx%3==2&&x%5==3&&x%7==2printf"Thisnumberis%d\n"x用C語言實現(xiàn)的鬧鐘程式#include<graphics.h>#include<conio.h>#include<math.h>#include<dos.h>#include<stdio.h>voidmain()(intgd=DETECT,gm;intx=320,y=240,r=200,i,h,m,s,thetamin,thetasec;structtimet;charn[l2][3]={“3“J2“Jド,“12“,“U10“;initgraph(&gd,&gm,”g:\\tc\\bgi”);〃圖形驅(qū)動器路徑,根據(jù)自己的系統(tǒng)更換。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]);elseouttextxy(x+(r-14)*cos(M_PI/6*i)-20,y-(r-14)*sin(M_PI/6*i)-26,n[i]);)gettime(&t);printf("Thecurrenttimeis:%2d:%02d:%02d.%02d\nu,t.ti_hour,t.ti_min,t.ti_sec,t.ti_hund);while(!kbhit())(setcolor(5);setfillstyle(l,5);circle(x,y,10);floodfill(x,y,5);gettime(&t);if(t.ti_min!=m)(setcolor(O);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))JO);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-l30)*cos(M_PI/6*h-((m/2)*(M_PI/180))),y-(r-l30)*sin(M_PI/6*h-((m/2)*(M_PI/180))),10);)if(t.ti_hour>12)tli_hour=Lti_hour-12;if(t.ti_hour<4)h=abs(t.ti_hour-3);else h=15-t.ti_hour;if(t.ti_min<=15)thetamin=(l5-tti_min)*6;elsethetamin=450-t.ti_min*6;if(t.ti_sec<=15)thetasec=(l5-Lti_sec)*6;elsethetasec=450-t.ti_sec*6;setcolor(4);line(x,y,x+(r-ll0)*cos(M_PI/6*h-((m/2)*(M_PI/180))),y-(r-ll0)*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(WOO);setcolor(O);line(x,y,x+(r-70)I}:cos(thetasec*(M_PI/l80)),y-(r-70):f:sin(thetasec*(M_PI/180)));})該程式已在TurboC++3.0中透過編譯.C程式開發(fā)經(jīng)典實例之?題目:有1、2、3、4個數(shù)字,能組成多少個互不相同且無重復(fù)數(shù)字的三位數(shù)?都是多少?.程式分析:可填在百位、十位、個位的數(shù)字都是1、2、3、4。組成所有的排列后再去掉不滿足條件的排列。.程式源代碼:main(){inti,j,k;printf("\n");for(i=l;i<5;i++) /?以下為三重循環(huán)?/for(j=l;j<5;j++)for(k=l;k<5;k++){if(i!=k&&i!=j&&j!=k) /?確保i、j、k三位互不相同?/printf("%d,%d,%d\n",i,j,k);|}【程式2】題目:企業(yè)發(fā)放的加菜金根據(jù)利潤提成。利潤⑴低于或等于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%提成,從鍵盤輸入當(dāng)月利潤I,求應(yīng)發(fā)放加菜金總數(shù)?.程式分析:請利用數(shù)軸來分界,定位。注意定義時需把加菜金定義成長整型。.程式源代碼:main(){longinti;intbonushbonus2tbonus4,bonus6,bonus10,bonus;scanf(f,%ldH,&i);bonus1=100000*0.1;bonus2=bonus1+100000*0.75;bonus4=bonus24-200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15;if(i<=100000)bonus=i*0.1;elseif(i<=200000)bonus=bonusl+(i-l00000)*0.075;elseif(i<=400000)bonus二bonus2+(i-200000)*0.05;elseif(i<=600000)bonus二bonus4+(i-400000)*0.03;elseif(i<=1000000)bonus=bonus6+(i-600000)*0.015;elsebonus=bonus10+(i-1000000)*0.01;printf("bonus二%d",bonus);}【程式3】題目:ー個整數(shù),它加上100后是ー個完全平方數(shù),再加上168又是ー個完全平方數(shù),請問該數(shù)是多少?1.程式分析:在10萬以內(nèi)判斷,先將該數(shù)加上100后再開方,再將該數(shù)加上268后再開方,如果開方后的結(jié)果滿足如下條件,即是結(jié)果。請看具體分析:2.程式源代碼:#include"math.h"main()longinti,x,y,z;for(i=l;i<100000;i++){x=sqrt(i+100); /*x為加上100后開方后的結(jié)果?/y=sqrt(i+268); /*y為再加上168后開方后的結(jié)果?/if(x*x==i+100&&y*y=i+268)/*如果一個數(shù)的平方根的平方等于該數(shù),這說明此數(shù)是完全平方數(shù)?/printf("\n%ld\n",i);【程式4】題目:輸入某年某月某日,判斷這一天是這一年的第幾天?.程式分析:以3月5日為例,應(yīng)該先把前兩個月的加起來,然后再加上5天即本年的第幾天,特殊情況,閏年且輸入月份大于3時需考慮多加一天。.程式源代碼:main()(intday,month,year,sum,leap;printf(H\npleaseinputyear,month,day\nu);scanf(H%d,%d,%d",&year,&month,&day);switch(month)/?先計算某月以前月份的總天數(shù)?/(casel:sum=0;break;case2:sum=31;break;case3:sum=59;break;case4:sum=90;break;case5:sum=120;break;case6:sum=151;break;case7:sum=181;break;case8:sum=212;break;case9:sum=243;break;case10:sum=273;break;case11:sum=304;break;case12:sum=334;break;default:printf(MdataerrorH);break;}sum=sum+day; /?再加上某天的天數(shù)?/if(year%400==0ll(year%4==0&&year%100!二0))/?判斷是不是閏年?/leap=l;elseleap=O;if(leap==l&&month>2)/?如果是閏年且月份大于2,總天數(shù)應(yīng)該加一天?/sum++;printf("Itisthe%dthday.”,sum);}【程式5】題目:輸入三個整數(shù)x,y,z,請把這三個數(shù)由小到大輸出。.程式分析:我們想辦法把最小的數(shù)放到x上,先將x與y進(jìn)行比較,如果x>y則將x與y的值進(jìn)行交換,然后再用x與z進(jìn)行比較,如果x>z則將x與z的值進(jìn)行交換,這樣能使x最小。.程式源代碼:main()(intx,y,z,t;scanf(',%d%d%d",&x,&y,&z);if(x>y){t=x;x=y;y=t;}/?交換x,y的值?/if(x>z){t=z;z=x;x=t;}/*交換x,z的值?/if(y>z){t=y;y=z;zヨ;}/?交換z,y的值?/printf(nsmalltobig:%d%d%d\nH,x,y,z);)【程式6】題目:用?號輸出字母C的圖案。.程式分析:可先用,*’號在紙上寫出字母C,再分行輸出。.程式源代碼:#include"stdio.h',main()(printf(nHelloC-world!\n");printf("****\n");prmtf(H-!T);printf(H*\n");printf("****\n”);)【程式7】題目:輸出特殊圖案,請在c環(huán)境中營運(yùn),看ー看,VeryBeautiful!.程式分析:字符共有256個。不同字符,圖形不ー樣。.程式源代碼:#include"stdio.h"main()(chara=176,b=219;printf(n%c%c%c%c%c\nM,b,a,a,a,b);printf("%c%c%c%c%c\n'\a,b,a,b,a);printf(n%c%c%c%c%c\n,,,a,a,b,a,a);printf("%c%c%c%c%c\nM,a,b,a,b,a);printf(,'%c%c%c%c%c\n,\bTa,a,a,b);}【程式8】.程式分析:分行與列考慮,共9行9列,i控制行,j控制歹リ。.程式源代碼:include"stdio.h"main(){intij,result;printfCAn1');for(i=l;i<10;i++){forG=l;j<10;j++)(result=i*j;printf("%d*%d=%-3d",i,j,result);/*-3d表示左對齊,占3位?/)printf("\n");/*每ー一行后換行?/)}【程式9】題目:要求輸出西洋棋棋盤。.程式分析:用i控制行,j來控制列,根據(jù)i+j的和的變化來控制輸出黑方格,還是白方格。.程式源代碼:#include"stdio.h"main()(inti,j;for(i=0;i<8;i++)for(j=0;j<8;j++)if((i+j)%2=0)printf(H%c%c';219,219);elseprinlf(い);printf("\n");)}【程式10]題目:打印樓梯,同時在樓梯上方打印兩個笑臉。.程式分析:用i控制行,j來控制列,j根據(jù)i的變化來控制輸出黑方格的個數(shù)。.程式源代碼:#include"stdio.h"main()(inti,j;printf("、八l\n");/?輸出兩個笑臉?/for(i=l;i<l1;i++){for(j=l;j<=i;j++)printf("%c%c",219,219);printf("\n");)}C程式開發(fā)經(jīng)典實例之二【程式11]題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數(shù)為多少?.程式分析:兔子的規(guī)律為數(shù)列1,1,2,3,5,8,13,21.....程式源代碼:main()longfl,f2;inti;fl=f2=l;for(i=l;i<=20;i+4-){printf(n%12ld%12ldn,fl,f2);if(i%2=0)printf("\n");/*控制輸出,每行四個?/fl二fl+f2;/*前兩個月加起來賦值給第三個月?/f2=fl+f2;/*前兩個月加起來賦值給第三個月?/【程式12]題目:判斷10L200之間有多少個素數(shù),并輸出所有素數(shù)。.程式分析:判斷素數(shù)的方法:用ー個數(shù)分別去除2到sqrt(這個數(shù)),如果能被整除,則表明此數(shù)不是素數(shù),反之是素數(shù)。.程式源代碼:#includenmath.humain()intm,i,k,h=O,leap=l;printf(”\n");for(m=101;m<=200;m++){k=sqrt(m+l);for(i=2;i<=k;i++){leap=O;break;}if(leap){printf(M%-4dH,m);h++;if(h%10=0)printf(,,\nM);}leap=l;printf(u\nThetotalis%du,h);【程式131題目:打印出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個三位數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如:153是一個“水仙花數(shù)”,因為153=1的三次方+5的三次方+3的三次方。.程式分析:利用for循環(huán)控制100-999個數(shù),每個數(shù)分解出個位,十位,百位。.程式源代碼:main(){inti,j,k,n;printf("'waterflower'numberis:");for(n=100;n<1000;n++)(i=n/100;/?分解出百位?/j=n”0%10;/?分解出十位*/k=n%10;/?分解出個位?/if(i*100+j*lO+k==i*i*i+j*j*j+k*k*k){printf("%-5d",n);printf("\n");}【程式14]題目:將一個正整數(shù)分解質(zhì)因數(shù)。例如:輸入90,打印出90=2*3*3*5。程式分析:對n進(jìn)行分解質(zhì)因數(shù),應(yīng)先找到ー個最小的質(zhì)數(shù)k,然后按下述步驟完成:(1)如果這個質(zhì)數(shù)恰等于n,則說明分解質(zhì)因數(shù)的過程已經(jīng)結(jié)束,打印出即可。⑵如果nok,但n能被k整除,則應(yīng)打印出k的值,并用n除以k的商,作為新的正整數(shù)你n,重復(fù)執(zhí)行第一步。(3)如果n不能被k整除,則用k+1作為k的值,重復(fù)執(zhí)行第一步。.程式源代碼:/*zhengintisdividedyinshu*/main()(intn,i;printf(n\npleaseinputanumber:\nM);scanf("%d,,,&n);printf(H%d=w,n);for(i=2;i<=n;i++)(while(n!=i)(if(n%i==0){printf(H%d*';i);n=n/i;}elsebreak;printf(',%d,,,n);}【程式15]題目:利用條件運(yùn)算符的巢狀來完成此題:學(xué)習(xí)成績>=90分的同學(xué)用A表示,60-89分之間的用B表示,60分以下的用C表示。.程式分析:(a>b)?a:b這是條件運(yùn)算符的基本例子。.程式源代碼:main(){intscore;chargrade;printf("pleaseinputascore\n");scanf("%d",&score);grade=score>=90?'A':(score>=60?'B':'C');printf("%dbelongsto%c",score,grade);}【程式16]題目:輸入兩個正整數(shù)m和n,求其最大公約數(shù)和最小公倍數(shù)。.程式分析:利用根除法。.程式源代碼:main(){inta,b,num1,num2,temp;printf(upleaseinputtwonumbers:\nH);scanf("%d,%d'\&numl,&num2);if(numl{temp=numl;numl=num2;num2=temp;}a=numl;b=num2;while(b!=O)/?利用輾除法,直到b為0為止?/{temp=a%b;a=b;b=temp;)printf(,'gongyueshu:%d\n,',a);printf(,'gongbeishu:%d\n,',num1*num2/a);)【程式17]題目:輸入一行字符,分別統(tǒng)計出其中英文字母、空格、數(shù)字和其它字符的個數(shù)。.程式分析:利用while語句,條件為輸入的字符不為ヘ江..程式源代碼:#include"stdio.h"main(){chare;intletters=0,space=0,digit=0,others=0;printf(upleaseinputsomecharacters\nM);while((c=getchar())!=*\n')(if(c>=,a,&&c<='z,llc>='A'&&c<=,Z')letters++;elseif(c=='*)space++;elseif(c>=<0,&&c<=,9,)digit++;elseothers++;}printf(uallinall:char=%dspace=%ddigit=%dothers=%d\nM,letters,space,digit,others);}【程式18]題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數(shù)字。例如2+22+222+2222+22222(此時共有5個數(shù)相加),幾個數(shù)相加有鍵盤控制。.程式分析:關(guān)鍵是計算出每ー項的值。.程式源代碼:main()(inta,n,count=l;longintsn=0,tn=0;printf("pleaseinputaandn\nM);scanf(H%d,%dH,&a,&n);printf(',a=%d,n=%d\n',,a,n);while(count<=n)(tn=tn+a;sn=sn+tn;a=a*I0;++count;printf(Ha+aa+...=%ld\nH,sn);【程式!9]題目:一個數(shù)如果恰好等于它的因子之和,這個數(shù)就稱為“完數(shù)”。例如6=1+2+3.編程找出1000以內(nèi)的所有完數(shù)。.程式分析:請參照程式ぐ一上頁程式14..程式源代碼:main(){staticintk[10];intij,n,s;for(j=2;j<1000;j++)(n=-l;S=j;for(i=l;i{if((j%i)==0){n++;s=s-i;k[n]=i;}}if(s==0)(printf(M%disawanshuM,j);for(i=0;iprintf(M%d,M,k[i]);printfC%d\n';k[n]);))【程式20]題目:一球從100米高度自由落下,每次落地后反跳回原高度的一半:再落下,求它在第10次落地時,共經(jīng)過多少米?第10次反彈多高?.程式分析:見下面注釋.程式源代碼:main()(floatsn=100.0,hn=sn/2;intn;for(n=2;n<=1〇;n++)(sn=sn+2*hn;/*第n次落地時共經(jīng)過的米數(shù)?/hn=hn/2;/?第n次反跳高度?/)printf("thetotalofroadis%t\n",sn);printf("thetenthis%fmeter\n",hn);)C程式開發(fā)經(jīng)典實例之三【程式21]題目:猴子吃桃問題:猴子第一天摘下若干個桃子,當(dāng)即吃了一半,還不癮,又多吃了一個,第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以后每天早上都吃了前一天剩下的一半零一個。到第10天早上想再吃時,見只剩下ー個桃子了。求第一天共摘了多少。.程式分析:采取逆向思惟的方法,從后往前推斷。.程式源代碼:main()intday,xl,x2;day=9;x2=l;while(day>0){xl=(x2+l)*2;/*第一天的桃子數(shù)是第2天桃子數(shù)加1后的2倍?/x2=xl;day—;)printf("thetotalis%d\n'\xl);【程式22]題目:兩個桌球隊進(jìn)行比賽,各出三人。甲隊為a,b,c三人,乙隊為x,y,z三人。已抽簽決定比賽名単。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請編程式找出三隊賽手的名單。.程式分析:判斷素數(shù)的方法:用ー個數(shù)分別去除2到sqrt(這個數(shù)),如果能被整除,則表明此數(shù)不是素數(shù),反之是素數(shù)。.程式源代碼:main()(chari,j,k;/*i是a的對手,j是b的對手,k是c的對手?/for(i='x,;i<=z,;i++)for(j='x,;j<=,z';j++)(if(i!=j)for(k='x';k<=,z*;k++){if(i!=k&&j!=k){if(i!='x'&&k!='x,&&k!=,z')printff'orderisa—%c\tb—%c\tc—%c\n'\i,j,k);【程式23]題目:打印出如下圖案(菱形)********.程式分析:先把圖形分成兩部分來看待,前四行ー個規(guī)律,后三行ー個規(guī)律,利用雙重for循環(huán),第一層控制行,第二層控制列。.程式源代碼:main(){inti,j,k;for(i=0;i<=3;i++)(for(j=0;j<=2-i;j++)printf(HM);for(k=0;k<=2*i;k++)printf(n*H);printf(^^\n,^);}for(i=0;i<=2;i++)(for(j=0;j<=i;j++)printf(nM);for(k=0;k<=4-2*i;k++)printf(,,*n);printf(”ヽn))}【程式24]題目:有一分?jǐn)?shù)序列:2",3/2,5/3,8/5,13/8,21/13...求出這個數(shù)列的前20項之和。.程式分析:請抓住分子與分母的變化規(guī)律。.程式源代碼:main(){intn,t,number=20;floata=2,b=l,s=0;for(n=l;n<=number;n++){s=s+a/b;t=a;a=a+b;b=t;/?這部分是程式的關(guān)鍵,請讀者猜猜t的作用?/)printf("sumis%9.6f\n",s);}【程式25]題目:求1+2!+3!+...+20!的和.程式分析:此程式只是把累加變成了累乘。.程式源代碼:main()floatn,s=0,t=l;for(n=l;n<=20;n++)(t*=n;s+=t;)printf(Hl+2!+3!...+20!=%e\n\s);}【程式26]題目:利用遞歸方法求5!。L程式分析:遞歸公式:fn=fn」?4!.程式源代碼:#include"stdio.h"main(){inti;intfact();for(i=0;i<5;i++)printf(M\40:%d!=%d\n'\i,fact(i));)intfact(j)intj;(intsum;ifO==0)sum=l;elsesum=j*fact(j-l);returnsum;【程式27]題目:利用遞歸函數(shù)調(diào)用模式,將所輸入的5個字符,以相反順序打印出來。.程式分析:.程式源代碼:#include"stdio.h"main()(inti=5;voidpalin(intn);printfCMO:'1);palin(i);printfCXn'1);}voidpalin(n)intn;{charnext;if(n<=l)(next=getchar();printf(n\n\0:n);putchar(next);)else(next=getchar();palin(n-l);putchar(next);【程式28]題目:有5個人坐在ー起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數(shù),他說比第3個人大2歲。問第三個人,又說比第2人大兩歲。問第2個人,說比第一個人大兩歲。最后問第一個人,他說是10歲。請問第五個人多大?.程式分析:利用遞歸的方法,遞歸分為回推和遞推兩個階段。要想知道第五個人歲數(shù),需知道第四人的歲數(shù),依次類推,推到第一人

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論