版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C語(yǔ)言學(xué)習(xí)教程.txt43風(fēng)帆,不掛在桅桿上,是一塊無(wú)用的布;桅桿,不掛上風(fēng)帆,是一根
平常的柱;理想,不付諸行動(dòng)是虛無(wú)縹緲的霧;行動(dòng),而沒有理想,是徒走沒有盡頭的路。
44成功的門往往虛掩著,只要你勇敢去推,它就會(huì)豁然洞開。C語(yǔ)言學(xué)習(xí)教程
多數(shù)情況下,現(xiàn)在的編程高手都是從學(xué)習(xí)C語(yǔ)言入門的,在學(xué)校里,計(jì)算機(jī)相關(guān)專業(yè)中
最基礎(chǔ)的課程也包括C語(yǔ)言,因此,掌握好這門課程對(duì)每一位立志成為優(yōu)秀程序員的初學(xué)者
來(lái)說(shuō)是大有裨益的!另外,對(duì)想通過(guò)參加全國(guó)計(jì)算機(jī)等級(jí)考試獲得證書的同學(xué)來(lái)說(shuō),學(xué)好C語(yǔ)
言也非常關(guān)鍵。
卜.面,是我整理出來(lái)的若干文章,總體上按照三個(gè)大的方向進(jìn)行分類,希望能好好閱讀,
相信對(duì)你是很有幫助的!
一、基礎(chǔ)性問(wèn)題(點(diǎn)擊下面文字鏈接即可打開頁(yè)面)
1、C語(yǔ)言學(xué)習(xí):如何由dos向windows轉(zhuǎn)變
2、二級(jí)C語(yǔ)言實(shí)例解答
3、等級(jí)考試:C程序設(shè)計(jì)
4、備戰(zhàn)C語(yǔ)言上機(jī)考試
5、C語(yǔ)言程序設(shè)計(jì)技巧
6、C語(yǔ)言初級(jí)講座
7、寫好C程序的10條秘籍
8、強(qiáng)大的語(yǔ)言一一C入門之一
9、強(qiáng)大的語(yǔ)言---C入門之二
二、實(shí)例開發(fā)(點(diǎn)擊下面文字鏈接即可打開頁(yè)面)
1、用C語(yǔ)言解決鬼谷算題
2、用C語(yǔ)言實(shí)現(xiàn)的鬧鐘程序
3、C程序開發(fā)經(jīng)典實(shí)例之一
4、C程序開發(fā)經(jīng)典實(shí)例之二
5、C程序開發(fā)經(jīng)典實(shí)例之三
6、C程序開發(fā)經(jīng)典實(shí)例之四
7、C程序開發(fā)經(jīng)典實(shí)例之五
8、C程序開發(fā)經(jīng)典實(shí)例之六
9、C程序開發(fā)經(jīng)典實(shí)例之七
10sC程序開發(fā)經(jīng)典實(shí)例之八
三、綜合提升(點(diǎn)擊下面文字鏈接即可打開頁(yè)面)
1、C語(yǔ)言:黑客學(xué)員必修課之一
2、C語(yǔ)言:黑客學(xué)員必修課之二
3、C程序設(shè)計(jì)基礎(chǔ)之一
4、C程序設(shè)計(jì)基礎(chǔ)之二
5、C程序設(shè)計(jì)基礎(chǔ)之三
6、C程序設(shè)計(jì)基礎(chǔ)之四
7、C程序設(shè)計(jì)基礎(chǔ)之五
8、C程序設(shè)計(jì)基礎(chǔ)之六
9、C語(yǔ)言高效編程的的四大絕招(1)
10、C語(yǔ)言高效編程的的四大絕招(2)
C語(yǔ)言學(xué)習(xí):如何由dos向windows轉(zhuǎn)變
很多人學(xué)C語(yǔ)言很長(zhǎng)一段時(shí)間了,還不知C究竟能干什么,以為學(xué)習(xí)c語(yǔ)言沒什么用,純粹
是為了應(yīng)付學(xué)校的考試.更有人說(shuō)”學(xué)C語(yǔ)言?別做如此愚蠢的行為了!趕快學(xué)C++吧!”這種看
法是不對(duì)的,不應(yīng)該把c跟C++之間劃起絕對(duì)的界限,過(guò)分看重C++而把c貶得一無(wú)是處,這是
很片面的.C++功能雖然強(qiáng)大,但它畢竟是c的''超集",在C++里有哪一處找不到c的影子呢?沒
有c的支持,C++只能是無(wú)本之木。
一般情況下,C++編程方式編寫的程序源代碼量小,但編譯后的代碼量較大,運(yùn)行的速度略
低,不過(guò)開發(fā)時(shí)的工作量和工作難度較小;而c編程方式編寫的源代碼量較大,但可執(zhí)行的效
率高.如果一些對(duì)速度要求高,尤其是對(duì)硬件操作較多的程序,大多數(shù)還是用c編程方式開發(fā)
的(用C又比用匯編簡(jiǎn)單,易于實(shí)現(xiàn)).另外,學(xué)Win32C程序設(shè)計(jì)還有助于更深入地了解
Windows的內(nèi)幕和Win32API,
任何的編程語(yǔ)言都是一種工具,學(xué)習(xí)語(yǔ)言的目是要使用它來(lái)編寫出實(shí)際需要的軟件來(lái),而
軟件作為一個(gè)用戶程序,運(yùn)行時(shí)要依賴操作系統(tǒng),大多數(shù)人使用什么操作系統(tǒng),我們就要編寫
出基于哪一種平臺(tái)上的程序來(lái).這樣,軟件才會(huì)有更大的市場(chǎng)。
現(xiàn)在市面上出現(xiàn)的有關(guān)c語(yǔ)言方面的書大多是教授DOS下的c,上機(jī)實(shí)習(xí)也是在TurboC
2.0(簡(jiǎn)稱Tc)環(huán)境下轉(zhuǎn)來(lái)轉(zhuǎn)去.編程環(huán)境的單調(diào)總使人感到不爽.這也沒辦法,dos下的c是最
簡(jiǎn)單的,初學(xué)者當(dāng)然要從最簡(jiǎn)單的入門啦.連比較有名的計(jì)算機(jī)專家譚浩強(qiáng)編的書也都是贊成
從dos下的c學(xué)起的.再說(shuō),一個(gè)剛剛?cè)腴T的人想在windows這樣的多進(jìn)程,多線程的操作系
統(tǒng)下用c編程,那似乎又不太現(xiàn)實(shí).(那要了解在windows下,一個(gè)Win32程序大體上是怎樣執(zhí)
行的.要對(duì)系統(tǒng)有比較多的了解才行,?個(gè)初學(xué)者暫時(shí)還不具備那么多的知識(shí))但我們的腳步
又不能夠只停留在dos里,應(yīng)該積極地從dos向windows轉(zhuǎn)變.在dos的時(shí)代,我們可以對(duì)dos
下的編程迷戀,但現(xiàn)在都是windows橫行霸道的時(shí)代了,我們就應(yīng)用c語(yǔ)言編寫windows平臺(tái)
上的程序,因時(shí)而變,學(xué)以致用.是時(shí)代使然!如果現(xiàn)在還是dos雄霸天下的話,那我就不會(huì)寫
這篇狗屁不通的文章來(lái)遺笑大方了,不被臭雞蛋扔死才怪呢!
"變法''是大勢(shì)所趨的了,關(guān)鍵是怎么變,不單單是學(xué)習(xí)c語(yǔ)言的人如此,就連學(xué)C++的人都
這樣,筆者曾經(jīng)在QQ上碰到一個(gè)學(xué)了C++將近一年的小伙,居然問(wèn)我,他想編一個(gè)windows窗
口,該怎么下手,如果學(xué)一門語(yǔ)言用了一年時(shí)間,只是學(xué)了一點(diǎn)語(yǔ)法知識(shí),卻沒有編過(guò)一道程序,
那實(shí)在是一種悲哀.下面我談?wù)剰膁os向windows轉(zhuǎn)變的一些個(gè)人見解,(這純屬個(gè)人觀點(diǎn),僅
供參考,如果您已是高手,完全不必要在此浪費(fèi)時(shí)間):
拓寬視野,改變偏見
別老以為C只是dos特有的東西,一提到C語(yǔ)言就認(rèn)為C只能在dos下編程.其實(shí),這是被
tc束縛了意識(shí),我們?cè)趯W(xué)校里平時(shí)就只在dos的tc里面用C編程,很少用到“圖形模式",整天
面對(duì)?quot;烏黑黑”的屏幕,也難怪有些人一看到一個(gè)用c語(yǔ)言描繪出來(lái)的像windows的窗口
便以為是C++的手筆.其實(shí),作為一種語(yǔ)言,可以在任何一種平臺(tái)上編程,只是接口不同而已,
只要找到適合該平臺(tái)的編程工具即可,c語(yǔ)言當(dāng)然也能在windows下大放異彩.眼界放寬點(diǎn),改
變偏見,必有精彩發(fā)現(xiàn).
二.選擇優(yōu)秀的編程工具.
“有好的工具,做起事來(lái)就事半功倍”.在dos下我們常用tc或be(borlandc).在windows
下可以用c++builder或者visualc++來(lái)編程,最好用visualc++畢竟是微軟的東西嘛!
微軟?天不垮臺(tái),編程者的飯碗就不會(huì)掉的啦,,再說(shuō),windows操作系統(tǒng)是微軟出的,其內(nèi)
幕微軟是最清楚不過(guò)的了,在應(yīng)用程序接口上,相信vc也是做得最好的.不過(guò)用vc++6來(lái)編c
程序會(huì)恨煩的,大家要有心理準(zhǔn)備.同時(shí)可以選擇多種編程工具,例如匯編,可以加強(qiáng)對(duì)
windows的了解,是成為高手的好方法。
三.加強(qiáng)對(duì)windows的了解.
可以說(shuō)編?個(gè)程序,就是用?種語(yǔ)言的語(yǔ)法形式將數(shù)據(jù)結(jié)構(gòu)和表面的執(zhí)行過(guò)程描述出來(lái).
在不同的操作系統(tǒng)下,其程序的執(zhí)行過(guò)程是不同的.我們應(yīng)該對(duì)windows的系統(tǒng)機(jī)制最起碼有
個(gè)大體的了解,才有可能編寫windows的程序.dos是單進(jìn)程單線程的系統(tǒng),進(jìn)程從頭到尾的順
序執(zhí)行,而windows是多進(jìn)程、多線程的操作系統(tǒng),是基于事件的,消息驅(qū)動(dòng)的操作系統(tǒng).明
白這些是在windows下編程必不可少的,多學(xué)學(xué)它,你會(huì)發(fā)現(xiàn)windows和dos有很多的不同
之處。
四.采取靈活多變的學(xué)習(xí)方法.
在不同的時(shí)期,學(xué)習(xí)不同的東西?可是有些人學(xué)習(xí)像word,excel這類操作性極強(qiáng)的辦公
軟件時(shí),總是先看書,看到尾巴忘了頭,到上機(jī)時(shí)卻不知所措.這種學(xué)習(xí)方式是被動(dòng)的,看這些
軟件操作的書,里面說(shuō)的都是具體的操作,不親手又怎能接受新知識(shí)?
五.多進(jìn)行比較.
dos和windows有許多共同和不同的地方,如果是從dos學(xué)過(guò)來(lái)的話,在學(xué)習(xí)過(guò)程中不
妨多進(jìn)行比較,把不同的地方記下,相同的地方可以跳過(guò),這可以快速地了解系統(tǒng)的不同之
處,迅速地學(xué)到東西!
學(xué)習(xí)程序設(shè)計(jì),我主張“實(shí)踐->理論->再實(shí)踐”的方式,在編程的初期,不管你會(huì)不會(huì)寫程
序,都應(yīng)先實(shí)踐,(這里的實(shí)踐是指編程工具操作方面的實(shí)踐),學(xué)會(huì)操作編程工具.也許有些
人會(huì)說(shuō):“廢話!沒有理論,又怎么實(shí)踐?”不錯(cuò),當(dāng)你坐在一臺(tái)電腦面前不知所措時(shí),你就會(huì)想方
設(shè)法使自己學(xué)會(huì)操作它,主動(dòng)看書,看聯(lián)機(jī)幫助,請(qǐng)教別人,忙得個(gè)〃不亦樂(lè)乎”,這不是變''被動(dòng)
"為"主動(dòng)"了嗎?邊學(xué)習(xí)邊操作,以實(shí)踐來(lái)帶動(dòng)理論的學(xué)習(xí),接著達(dá)到"理論與實(shí)踐同步”,就可
闖過(guò)第一關(guān),學(xué)會(huì)了編程工具的基本操作,可以為以后上機(jī)實(shí)踐打下鋪墊.
光學(xué)會(huì)操作像vc這類的工具還不行,工具是死的,人才是活的,不會(huì)編程只能是空操作,
你還會(huì)說(shuō):〃廢話!沒有理論,怎么實(shí)踐?”的,這時(shí)就要學(xué)習(xí)編程的真功夫了,也就是我說(shuō)的第二
階段一學(xué)"理論”階段,深入研究前輩們的著作,吸取前人的智慧精華為我所用,扎扎實(shí)實(shí)打好
編程內(nèi)功,功夫到家了就應(yīng)該"再實(shí)踐”,將學(xué)到的東西運(yùn)用于實(shí)際,編寫出我們需要的軟件來(lái).
學(xué)以致用嘛,呵呵”這種方式總比"先學(xué)好語(yǔ)法的條條框框,再上機(jī)實(shí)踐”的效果好得多啦.
關(guān)于向windows轉(zhuǎn)變的個(gè)人觀點(diǎn)就只談這些,希望初學(xué)者早日踏上windows的光明大道!
由于我也是一個(gè)菜鳥,水平有限,寫得不好,還請(qǐng)各位多多包涵!
二級(jí)C語(yǔ)言實(shí)例解答
C語(yǔ)言牽涉的概念比較復(fù)雜,規(guī)范繁多,使用靈活,容易出錯(cuò),不少初學(xué)者感到困難,
下面通過(guò)幾個(gè)實(shí)例的分析來(lái)說(shuō)明c語(yǔ)言學(xué)習(xí)中容易混淆的幾個(gè)問(wèn)題,以期拋磚引玉,對(duì)初學(xué)
者有所幫助。
問(wèn)題1:下面的程序
inta=3,b=4:
charstr=,c';
printf("%d,刎”,a,b,str);
執(zhí)行后,輸出結(jié)果為:
(A)3,4,c(B)34c
(C)3,4(D)程序出錯(cuò)
分析:在格式輸出時(shí)一般要求格式說(shuō)明符與輸出項(xiàng)相一致,當(dāng)輸出項(xiàng)多余格式說(shuō)明符時(shí)多余
的輸出項(xiàng)不輸出,所以答案為C。
問(wèn)題2:有下面的程序段
chara[3],b[]="china";
a=b;
printf("%s",a);
則輸出結(jié)果為:
(A)運(yùn)行后輸出china(B)運(yùn)行后輸出ch(C)運(yùn)行后輸出chi(D)編譯出錯(cuò)
分析:這個(gè)題容易錯(cuò)選a??實(shí)際答案為d,由于定義了字符數(shù)組后,數(shù)組名作為數(shù)組的首地址,
是一個(gè)常量,給一個(gè)常量賦值的語(yǔ)句是錯(cuò)誤的,換句話說(shuō),不能用賦值語(yǔ)句將一個(gè)字符常量
或字符數(shù)組直接賦值給一個(gè)字符數(shù)組,以答案選D。
問(wèn)題3:下列說(shuō)明不正確的是:
(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是錯(cuò)誤的,對(duì)于B、C就很難選擇了。有人認(rèn)為p是一個(gè)字符
變量,以為把“china”賦給該字符變量是不對(duì)的,實(shí)際上它是一個(gè)指針變量,只能指向一個(gè)
字符變量或其他字符類型數(shù)據(jù),不是把“china”存放到p中(指針變量只存放地址),只是
把
“china”的首地址賦給指針變量p,所以B,C也是正確的。
問(wèn)題4:下面的程序執(zhí)行結(jié)果是:
main()
{intx[5]={2,4,6,8,10),??p??????pp;
p=x;
pp=&&p;
printf(“%d”,??(p++));
printf(w%d\nM,????pp);
}
(A)44(B)24(C)22(D)46
分析:在此題中p++是后加方式,先輸出??p的值,p再自加,pp是二級(jí)指針,指向一級(jí)指
針P,執(zhí)行第一條輸出語(yǔ)句前后,存在下列指向關(guān)系:
所以本題應(yīng)選b
問(wèn)題5:卜列輸出語(yǔ)句執(zhí)行后結(jié)果為:
inti=3;
printf(a%dn,-i++);
(A)3(B)4(C)-3(D)-4
分析:此題考查運(yùn)算符的優(yōu)先級(jí),負(fù)號(hào)運(yùn)算符和++運(yùn)算符同優(yōu)先級(jí),而結(jié)合方向?yàn)椤白宰?/p>
至右“,即一i++相當(dāng)于一??i++??,所以先取出i的值3,輸出一i的值一3,然后i增值
為4,而不是i先增值為4,然后輸出一4,所以答案選擇C。
問(wèn)題6:設(shè)有以下語(yǔ)句,
structst
{intn;
structst??next;
);
staticstructsta[3]={5,7,9,'\0'),??p;
則以下表達(dá)式的值為6的是:
(A)p++fn(B)p->n++(C)(??p),n++(D)++p-*n
分析:此題也是考查運(yùn)算符的優(yōu)先級(jí),一優(yōu)先級(jí)高于++,結(jié)合方向?yàn)樽宰笾劣遥笳呓Y(jié)
合方向?yàn)樽杂抑磷螅珹答案相當(dāng)于??p++??-n??B答案相當(dāng)于??p->n??++??所以A、B、C
表達(dá)式值均為5,D答案相當(dāng)于++??p-n????自加方式為前加方式,所以其值為6。
上面是我在教學(xué)過(guò)程中學(xué)生一些比較集中的問(wèn)題,只要認(rèn)真的體會(huì)利總結(jié),加強(qiáng)上機(jī)實(shí)
踐,對(duì)自己C語(yǔ)言的學(xué)習(xí)會(huì)大有裨益。
等級(jí)考試:C程序設(shè)計(jì)
計(jì)算機(jī)等級(jí)考試改革后,三級(jí)考試由A、B兩類改為PC技術(shù)、數(shù)據(jù)庫(kù)技術(shù)、網(wǎng)絡(luò)技術(shù)、
信息管理技術(shù)四類。其后三類的上機(jī)考試內(nèi)容均為C語(yǔ)言程序設(shè)計(jì)。
三級(jí)上機(jī)不同于二級(jí),它只有一道編程題,風(fēng)險(xiǎn)更大。但只要能達(dá)到題目的要求,一般
都能拿到3分。
參加過(guò)考試的人都應(yīng)該知道一本書一一南開大學(xué)出版的《全國(guó)計(jì)算機(jī)等級(jí)考試?上機(jī)考試
習(xí)題集》,這本書基本上包含了所有的上機(jī)考試題目類型。這本書里一共有100道題,都很經(jīng)
典。但也許有人會(huì)覺得太多了,沒時(shí)間看完所有的題目。下面我給大家介紹?個(gè)復(fù)習(xí)技巧。
簡(jiǎn)化問(wèn)題
每道試題的程序都很長(zhǎng),而且涉及的知識(shí)點(diǎn)很多。實(shí)際匕在考試時(shí)看完全部程序并沒
有必要。每次只用把主要精力放在子程序的編制上,認(rèn)真思考其''功能要求:所以平時(shí)我們
只用關(guān)注需要編制的子程序。
試題歸類
要學(xué)會(huì)找出題目之間的規(guī)律,復(fù)習(xí)起來(lái)就會(huì)事半功倍。在一百道題目中,實(shí)際上.只需要
仔細(xì)分析其中的二十多道題就足夠了,其他的只用看一下就行。因?yàn)榇蟛糠值念}目都是類似
的,總結(jié)出規(guī)律來(lái)之后,我們可以舉一反三。例如下面兩類題目:
例1.(占題庫(kù)10%)已知在文件IN.DAT中存有100個(gè)產(chǎn)品銷售記錄,每個(gè)產(chǎn)品銷售記錄
由產(chǎn)品代碼dm(字符型4位)、產(chǎn)品名稱me(字符型10位)、單價(jià)dj(整型)、數(shù)量si(整型)、
金額je(長(zhǎng)整型)幾部分組成。其中:金額=單價(jià)X數(shù)量可計(jì)算得出。函數(shù)ReadDatO的功能
是讀取這100個(gè)銷售記錄并存入結(jié)構(gòu)數(shù)組sell中。請(qǐng)編制函數(shù)SortDatO,其功能要求:按
產(chǎn)品代碼從大到小進(jìn)行排列,若產(chǎn)品代碼相同,則按金額從大到小進(jìn)行排列,最終排列結(jié)果
仍存入結(jié)構(gòu)數(shù)組sell中,最后調(diào)用函數(shù)WriteDatO把結(jié)果輸出到文件0UT10.DAT中。
程序:voidSortDat()
{intI,J;
PROxy;
for(I=0;K100;I++)
{if(strcmp(sell[I],dm,sell[J].dm)<0)①
{xy=sell[I];
sell[l]=sell[jh
sell[J]=xy;}
elseif(strcmp(sell[I].dm,sell[j].dm)=0)(2)
if(sell[I].je
{xy=sell[I];
sell[I]=sell[Jh
sell[J]=xy;}
)
)
分析:這類程序題目的關(guān)鍵部分在于①、②、③三句上。它們的作用就是給出調(diào)換記錄
次序的條件。與其類似的題目只是在功能要求上有所不同(例如把“從大到小”改為“從小到
大”,把“產(chǎn)品代碼”換成“產(chǎn)品名稱”等),所以我們只需要修改這三句。如果我們抽到的
題目是“金額從小到大,如相同,則產(chǎn)品名稱從大到小”,我們就將
①改為:if(selltlLje>sell[J].je)
②改為:elseif(sell[I].je==sell[J].je)
③改為:if(strcmp(sell[I],me,sell[J].mc)<0)
而對(duì)于將記錄次序進(jìn)行調(diào)換的程序xy=sell[lLsell[I]=sell[J],sell[J]=xy,我們
只需要套用就行。
例2.(占題庫(kù)10%)函數(shù)ReadDat()的功能是實(shí)現(xiàn)從文件ENG.IN中讀取一篇英文文章,
存入大字符串?dāng)?shù)組xx中;請(qǐng)編制函數(shù)encryptCharO,按給定的代替關(guān)系對(duì)數(shù)組xx中的所
有字符進(jìn)行代替,仍存入數(shù)組xx的對(duì)應(yīng)的位置上,最后調(diào)用函數(shù)WriteDatO把結(jié)果xx輸出
到文件PS1.DAT中。
代替關(guān)系:f(p)=p*llmod256?其中p是數(shù)組xx中某一個(gè)字符的ASCII值,f(p)是計(jì)
算后的新字符的ASCH值,如果計(jì)算后f(p)的值小于等于32或大于130,則該字符不變,
否則將f(p)所對(duì)應(yīng)的字符進(jìn)行代替。
程序:voidencryptChar()
{intI;
char*pf;
for(1=0;I
{pf=xx[I];
while(*pf!=0)
{if(*pf*ll%256>130||*pf*ll%256<=32)①
{pf++;
continue;}
*pf=*pf*ll%256;
pf++;
)
}
)
分析:這一類題目較例1更為簡(jiǎn)單,其關(guān)鍵只有①一句,它是對(duì)條件''如果計(jì)算后f(p)
的值小于等于32或大于130”的描述。上機(jī)考試中類似的題目可能只對(duì)這個(gè)條件作少許變動(dòng)。
例如:“如果原字符是大寫字母或計(jì)算后f(p)的值小于等于32”,則只需把①改為:if
((*pf>='A'&&&&*pf<='Z')I|*pf*ll%256<=32)
其他試題也可以按照上述方法進(jìn)行總結(jié)。總而言之,對(duì)于三級(jí)上機(jī)考試,我們不僅要提
高編程能力,還應(yīng)該注意分析試題,尋找規(guī)律,用更少的時(shí)間和精力解決更多的問(wèn)題!
備戰(zhàn)C語(yǔ)言上機(jī)考試
C語(yǔ)言是目前最常用的軟件開發(fā)語(yǔ)言之一,其功能強(qiáng)大,具有悠久的歷史,從C、C++發(fā)
展到現(xiàn)在的C#,不斷地得以更新繁衍。在全國(guó)計(jì)算機(jī)等級(jí)考試中有,五個(gè)類別使用C語(yǔ)言作
為上機(jī)考試內(nèi)容,為各編程語(yǔ)言中應(yīng)用最多的。
理論先行
[被屏蔽廣告]
雖是上機(jī)考試,仍需以理論知識(shí)為基礎(chǔ),所以必須將C語(yǔ)言教材從頭到尾學(xué)習(xí)一遍(應(yīng)選
擇權(quán)威教材),對(duì)C語(yǔ)言的基本概況做到心中有數(shù)。
學(xué)完教材后,選取—些有代表性的編程范例,將其語(yǔ)句逐條理解透徹。同時(shí)還須注意一
點(diǎn),看的懂未必等于自己就會(huì)編寫,應(yīng)當(dāng)自己嘗試默寫,從而找出知識(shí)薄弱點(diǎn)、思維盲點(diǎn)。
要養(yǎng)成一些良好習(xí)慣,比如,代碼書寫格式使用規(guī)范的鋸齒形,盡量使用完整表達(dá)。如
果采用簡(jiǎn)化方式,雖然不一定影響運(yùn)算結(jié)果,但有的考試評(píng)分標(biāo)準(zhǔn)是按答題要點(diǎn)給分,所以
還是不省為妙。
以下是學(xué)習(xí)C語(yǔ)言過(guò)程中容易出現(xiàn)的問(wèn)題:
1.函數(shù)、變量使用前未定義。
2.混淆“=”和“=
3.語(yǔ)句后或預(yù)定義的函數(shù)名后漏掉分號(hào)。
4.將else拼寫成esle、continue拼寫成contiune。
5.括號(hào)搭配錯(cuò)誤。
6.首地址理解為lo
7.p++與++p區(qū)別不清。
8.break、continue運(yùn)用不當(dāng)。
9.誤將單引號(hào)用于字符串常量,將雙引號(hào)用于字符常量。
10.else分句中嵌套條件語(yǔ)句時(shí),漏掉了“if”。
上機(jī)實(shí)踐
雖然考點(diǎn)、培訓(xùn)點(diǎn)?般都提供模擬上機(jī),但畢竟時(shí)間、地點(diǎn)受到限制,不能保證充分的
練習(xí)時(shí)間,因此很多考生都希望能在自家電腦上進(jìn)行操作實(shí)踐,下面具體談?wù)勅绾螌?shí)現(xiàn)在個(gè)
人電腦上進(jìn)行練習(xí)的方法。
一、簡(jiǎn)易環(huán)境練習(xí)
系統(tǒng)要求:Windows系統(tǒng)
需用軟件:TurboC2.0
TC軟件雖然不是標(biāo)準(zhǔn)的Windows程序,但在Windows環(huán)境下依然可以使用。為使軟件處
于理想運(yùn)行狀態(tài),運(yùn)行tc.exe后需要做一些設(shè)置:
1.按“漢”按鈕,否則會(huì)出現(xiàn)部分亂碼。
2.點(diǎn)擊屬性按鈕,在程序選項(xiàng)卡的“工作目錄”欄中根據(jù)上一命令行填入程序所在目錄,
“運(yùn)行”欄選擇最大化,選擇“退出時(shí)關(guān)閉”。
設(shè)置好后即可依照練習(xí)冊(cè)輸入習(xí)題,進(jìn)行編譯調(diào)試。編程中用到的處理數(shù)據(jù)一般需自建。
為了提高效率,可從網(wǎng)上下載習(xí)題。這里應(yīng)留意一些下載習(xí)題中的問(wèn)題,比如遺漏字符、錄
入錯(cuò)誤等,還有一些不易發(fā)現(xiàn)的情況,像雙引號(hào)的字體不標(biāo)準(zhǔn)、文件擴(kuò)展名前的句號(hào)成了逗
號(hào)、甚至一些看似無(wú)內(nèi)容的空行中包含著某些ASCII碼,都會(huì)影響編程結(jié)果。
二、全真環(huán)境練習(xí)
系統(tǒng)要求:DOS系統(tǒng)
需用軟件:TurboC2.0、UCDOS、上機(jī)模擬軟件
經(jīng)過(guò)基礎(chǔ)階段學(xué)習(xí)后,再來(lái)進(jìn)行針對(duì)等級(jí)考試的練習(xí),這就需要用到模擬軟件了。布面
上模擬軟件很容易買到,其操作界面與正式考試完全一樣,還往往匯集了豐富的題庫(kù)和答案、
源程序、輸入數(shù)據(jù),并可進(jìn)行自我評(píng)分。有的還提供筆試題知識(shí)點(diǎn)查詢,介紹考試技巧等。
使用模擬軟件前,應(yīng)先安裝UCDOS(這與真實(shí)考試要求一樣,須選5.0以上版本,而且最
好采用正式版,否則可能影響軟件使用)。通常情況下在Windows環(huán)境下是無(wú)法使用模擬軟件
的,經(jīng)過(guò)?些專業(yè)設(shè)置后雖可實(shí)現(xiàn),但僅限于Windows9X操作系統(tǒng),而且設(shè)置不當(dāng)易使系統(tǒng)
崩潰,所以筆者建議還是在純DOS環(huán)境下使用為妥。
實(shí)戰(zhàn)心得
筆者參加的今年上半年考試題目大意如下:要求將一篇英文文章中每個(gè)字符的ASCII值
按公式f(p)=p17%256計(jì)算,如f(p)的ASCH值小于32或?yàn)槠鏀?shù),則原字符不變,否則予
以替代。這道題目需要編寫的程序代碼沒幾行,我寫好后調(diào)試運(yùn)行,一切正常,復(fù)查幾遍也
看不出有哪兒不妥。正打算離開考場(chǎng)時(shí),忽然覺得運(yùn)算結(jié)果值得懷疑,根據(jù)題意,經(jīng)過(guò)ASCII
值計(jì)算后的結(jié)果不大可能仍都是常規(guī)字符,因此回過(guò)頭來(lái)再逐字審查題目,反復(fù)對(duì)照編好的
程序,焦點(diǎn)集中在了存放f(p)值的變量定義上,難道應(yīng)將“char”改為“unsignedchar”?
一試,結(jié)果果然不同。
事后查知,char變量值的范圍為-128至+127,unsignedchar變量值的范圍為。至255。
比如字符“x”的ASCII值為120,按上述公式運(yùn)算后值為248,字符應(yīng)予以替代;如果存放
f(p)值的變量定義為char型,值則轉(zhuǎn)換為-8,字符因而不被替代,難怪剛才運(yùn)算結(jié)果顯出全
篇常規(guī)字符了。所以說(shuō),仔細(xì)嚴(yán)謹(jǐn)?shù)膽?yīng)考作風(fēng)能彌補(bǔ)一些技術(shù)上的不足,有助于臨場(chǎng)發(fā)揮。
友情提示
1.由于使用UCDOS,當(dāng)屏幕下方顯示其狀態(tài)條時(shí),TurboC中的快捷鍵Alt+F9(調(diào)試編譯)、
Alt+F5(查看運(yùn)行結(jié)果)等提示會(huì)被屏蔽掉,解決的辦法為按?下右Shift鍵,隱藏UCD0S狀
態(tài)條后即可正常使用。值得一提的是,Alt+F9雖然是TurboC菜單中的Run/Run命令的快捷
鍵,但兩者不完全相同:菜單命令包括自動(dòng)編譯、連接和運(yùn)行程序;而快捷鍵方式卻不包括
運(yùn)行程序,自然也就無(wú)運(yùn)算結(jié)果,所以即使程序代碼編寫正確,考試成績(jī)?nèi)杂锌赡転榱惴帧?/p>
2.雖然一些模擬軟件的習(xí)題也是從國(guó)家考試中心發(fā)行的《全國(guó)計(jì)算機(jī)等級(jí)考試上機(jī)考試
習(xí)題集》中選取,但正式考試時(shí)如遇到練習(xí)過(guò)的題目,仍應(yīng)看仔細(xì),其中可能會(huì)有“小于”
與“大于”之類的一字之別。
C語(yǔ)言程序設(shè)計(jì)技巧
在許多應(yīng)用軟件運(yùn)行時(shí)都帶有命令行參數(shù),其實(shí)這些命令行參數(shù)在C語(yǔ)言編寫的程序中
也可以實(shí)現(xiàn),靈活地運(yùn)用命令行參數(shù)進(jìn)行處理可以有效地提高程序的運(yùn)行效率,收到事半功
倍的效果。
C語(yǔ)言中有關(guān)命令行參數(shù)涉及到程序的主函數(shù)main(intargc,char*argv□這樣兩個(gè)參
數(shù),其中,intargc表示命令行參數(shù)的個(gè)數(shù)(包括可執(zhí)行程序名本身),char*argv口表示每
個(gè)參數(shù)的具體內(nèi)容,argv[0]為命令行中可執(zhí)行程序名本身,argv[l]為命令行中第二個(gè)參數(shù)
的內(nèi)容,依次類推。如下例輸出命令行參數(shù)的個(gè)數(shù)及參數(shù)的內(nèi)容:
main(intargc,char*argv[],
{intI;
printf("\n命令行中可執(zhí)行文件名為:%s”,argv[0]);
printf("\n總共有%d個(gè)參數(shù):”,argc);
1=0;
while(argc>=l)
{printf("%s”,argv[l++]);
argc---;}
)
命令行參數(shù)用的最多還是在諸如DIRA:等之類帶有盤符、路徑或文件名這樣的命令行
中,所以說(shuō)靈活處理這一類參數(shù)才能有效地提高程序的運(yùn)行效果。譬如DIR命令,其后可以
是盤符,可以是路徑,也可以是文件名,如何區(qū)分這一參數(shù)呢?請(qǐng)看下例(此程序模擬DIR命
令,程序要求在命令行輸入一個(gè)參數(shù):盤符或路徑或文件名,若無(wú)參數(shù)或參數(shù)多于一個(gè)都將
取默認(rèn)的參數(shù))o
功能:模擬DIR命令進(jìn)行處理命令行參數(shù)
-----------------------------------------*/
#include
#include
#include
#inchlude
intj,num=O;
charss[20],path[50],path2[50];
voidmain(intargc,char*argv[])
(
structffblkf;
intdone;
if(argc==2)/*取命令行參數(shù)到數(shù)組中*/
strcpy(ss,argv[l]);
else
strcpy(ss,;/*給數(shù)組賦值缺省參數(shù)*/
if(((ss[strlen(ss)—1]==,\\'II((ss[strlen(ss)—1]==,/))
strcat(ss,");/*若參數(shù)為路徑或盤符,則加上"*.*"*/
getcwd(pathl,50);/*取當(dāng)前路徑*/
if(chdir(ss)==0)/*判斷參數(shù)是否為路徑*/
strcat(ss,〃\\*.*");/*若路徑末沒有帶〃\〃,則加上“*.*〃*/
chdir(pathl);/*恢復(fù)原來(lái)路徑*/
strcpy(path2,ss);
for(j=strlen(peith2);j>0;j---)/*提取參數(shù)中的路徑到path2*/
{if((path2[j]==,W))||(path2[j]==:')){
path2[j+l]=>\0";
gotosenull;}
)
path2[0]=,\0>;
senull:
if(strlen(path2)=0)/*若給出的參數(shù)中沒帶路徑,則取當(dāng)前路徑*/
strcpy(path2,pathl);
printf(〃\n**模擬DIR**\n命令目錄路徑%s〃,path2);
done=findfirst(ss,&f,55);/*查找第一個(gè)配匹的文件*/
j=l;
while(!done)
{if(f.ff_attrib!=0xl0)/*若文件屬性不是目錄*/
printf(z/\n%15s%201d/,,f.ff_name,f.ff_fsize);
else
printf(w\n&Ils",f.ffname);
num++;
j++;
if(j==23)
printf(,z\n----------------More(按任意鍵繼續(xù))-------");
getch();
j=0;
printf(w\n(目錄路徑%s)",path2);}
done=findnext(&f);/*查找下一->t?配匹的文件*/
}
printf(w\n當(dāng)前目錄中總共有%d個(gè)文件.\n",num);
C語(yǔ)言初級(jí)講座
我們一經(jīng)看到程序中使用的各種變量都應(yīng)預(yù)先加以說(shuō)明,即先說(shuō)明,后使用。對(duì)變量的
說(shuō)明可以包括三個(gè)方面:
?數(shù)據(jù)類型
?存儲(chǔ)類型
?作用域
在本講中,我們只介紹數(shù)據(jù)類型說(shuō)明。其它說(shuō)明在以后陸續(xù)介紹。所謂數(shù)據(jù)類型是按被
說(shuō)明量的性質(zhì),表示形式,占據(jù)存儲(chǔ)空間的多少,構(gòu)造特點(diǎn)來(lái)劃分的。在C語(yǔ)言中,數(shù)據(jù)類
型可分為:基本數(shù)據(jù)類型,構(gòu)造數(shù)據(jù)類型,指針類型,空類型四大類。
1.基本數(shù)據(jù)類型
基本數(shù)據(jù)類型最主要的特點(diǎn)是,其值不可以再分解為其它類型。也就是說(shuō),基本數(shù)據(jù)類
型是自我說(shuō)明的。
2.構(gòu)造數(shù)據(jù)類型構(gòu)造數(shù)據(jù)類型
是根據(jù)已定義的一個(gè)或多個(gè)數(shù)據(jù)類型用構(gòu)造的方法來(lái)定義的。也就是說(shuō),一個(gè)構(gòu)造類型
的值可以分解成若干個(gè)“成員”或“元素”。每個(gè)“成員”都是一個(gè)基本數(shù)據(jù)類型或又是一個(gè)
構(gòu)造類型。在C語(yǔ)言中,構(gòu)造類型有以下幾種:
?數(shù)組類型
?結(jié)構(gòu)類型
?聯(lián)合類型
3.指針類型
指針是一種特殊的,同時(shí)又是具有重要作用的數(shù)據(jù)類型。其值用來(lái)表示某個(gè)量在內(nèi)存儲(chǔ)
器中的地址。雖然指針變量的取值類似于整型量,但這是兩個(gè)類型完全不同的量,因此不能
混為一談。4.空類型在調(diào)用函數(shù)值時(shí),通常應(yīng)向調(diào)用者返回一個(gè)函數(shù)值。這個(gè)返回的函數(shù)值
是具有一定的數(shù)據(jù)類型的,應(yīng)在函數(shù)定義及函數(shù)說(shuō)明中給以說(shuō)明,例如在例題中給出的max
函數(shù)定義中,函數(shù)頭為:intmax(inta,intb);其中“int”類型說(shuō)明符即表示該函數(shù)的
返回值為整型量。又如在例題中,使用了庫(kù)函數(shù)sin,由于系統(tǒng)規(guī)定其函數(shù)返回值為雙精度
浮點(diǎn)型,因此在賦值語(yǔ)句5=5簡(jiǎn)(x);中,s也必須是雙精度浮點(diǎn)型,以便與sin函數(shù)的返回
值一致。所以在說(shuō)明部分,把s說(shuō)明為雙精度浮點(diǎn)型。但是,也有類函數(shù),調(diào)用后并不需
要向調(diào)用者返回函數(shù)值,這種函數(shù)可以定義為“空類型”。其類型說(shuō)明符為void。在本講中,
我們先介紹基本數(shù)據(jù)類型中的整型、浮點(diǎn)型和字符型。其余類型在以后各講中陸續(xù)介紹。
對(duì)于基本數(shù)據(jù)類型量,按其取值是否可改變又分為常量和變量?jī)煞N。在程序執(zhí)行過(guò)程中,
其值不發(fā)生改變的量稱為常量,取值可變的量稱為變量。它們可與數(shù)據(jù)類型結(jié)合起來(lái)分類。
例如,可分為整型常量、整型變量、浮點(diǎn)常量、浮點(diǎn)變量、字符常量、字符變量、枚舉常量、
枚舉變量。在程序中,常量是可以不經(jīng)說(shuō)明而直接引用的,而變量則必須先說(shuō)明后使用。
整型量
整型量包括整型常量、整型變量。整型常量就是整常數(shù)。在C語(yǔ)言中,使用的整常數(shù)有
八進(jìn)制、十六進(jìn)制和十進(jìn)制三種。
整型常量
1.八進(jìn)制整常數(shù)八進(jìn)制整常數(shù)必須以0開頭,即以0作為八進(jìn)制數(shù)的前綴。數(shù)碼取值為
0?7。八進(jìn)制數(shù)通常是無(wú)符號(hào)數(shù)。
以下各數(shù)是合法的八進(jìn)制數(shù):
015(十進(jìn)制為13)0101(十進(jìn)制為65)0177777(十進(jìn)制為65535)
以下各數(shù)不是合法的八進(jìn)制數(shù):
256(無(wú)前綴0)03A2(包含了非八進(jìn)制數(shù)碼)-0127(出現(xiàn)了負(fù)號(hào))
2.十六進(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(無(wú)前綴OX)0X3H(含有非十六進(jìn)制數(shù)碼)
3.十進(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ù)前綴來(lái)區(qū)分各種進(jìn)制數(shù)的。因此在書寫常數(shù)時(shí)不要把前綴弄錯(cuò)造成結(jié)果
不正確。4.整型常數(shù)的后綴在16位字長(zhǎng)的機(jī)器上,基本整型的長(zhǎng)度也為16位,因此表示的
數(shù)的范圍也是有限定的。十進(jìn)制無(wú)符號(hào)整常數(shù)的范圍為0-65535,有符號(hào)數(shù)為-32768?
+32767。八進(jìn)制無(wú)符號(hào)數(shù)的表示范圍為0-0177777。十六進(jìn)制無(wú)符號(hào)數(shù)的表示范圍為0X0?
OXFFFF或0x0?OxFFFF。如果使用的數(shù)超過(guò)了上述范圍,就必須用長(zhǎng)整型數(shù)來(lái)表示。長(zhǎng)整型
數(shù)是用后綴“L”或“1”來(lái)表示的。例如:
十進(jìn)制長(zhǎng)整常數(shù)158L(十進(jìn)制為158)358000L(十進(jìn)制為-358000)
八進(jìn)制長(zhǎng)整常數(shù)012L(十進(jìn)制為10)077L(十進(jìn)制為63)0200000L(十進(jìn)制為65536)
十六進(jìn)制長(zhǎng)整常數(shù)0X15L(十進(jìn)制為21)0XA5L(十進(jìn)制為165)0X10000L(十進(jìn)制為
65536)
長(zhǎng)整數(shù)158L和基本整常數(shù)158在數(shù)值上并無(wú)區(qū)別。但對(duì)158L,因?yàn)槭情L(zhǎng)整型量,C編
譯系統(tǒng)將為它分配4個(gè)字節(jié)存儲(chǔ)空間。而對(duì)158,因?yàn)槭腔菊停环峙?個(gè)字節(jié)的存儲(chǔ)
空間。因此在運(yùn)算和輸出格式上要予以注意,避免出錯(cuò)。無(wú)符號(hào)數(shù)也可用后綴表示,整型常
數(shù)的無(wú)符號(hào)數(shù)的后綴為“U”或"u”。例如:358u,0x38Au,235Lu均為無(wú)符號(hào)數(shù)。前綴,后
綴可同時(shí)使用以表示各種類型的數(shù)。如0XA5LU表示十六進(jìn)制無(wú)符號(hào)長(zhǎng)整數(shù)A5,其十進(jìn)制為
165。
寫好C程序的10條秘籍
神乎其技,惟C程序,功到自成,十大建議!
1、汝應(yīng)頻繁催動(dòng)lint工具,據(jù)其語(yǔ)法聲明修習(xí)內(nèi)力,此事皆因lint之思慮決斷實(shí)遠(yuǎn)在
君上。
2、不可依隨NULL指針,如若不然,混沌癡顛必俟君于彼岸。
3、縱有天賦大智慧,知曉其事無(wú)礙,汝亦當(dāng)盡數(shù)強(qiáng)制挪移函數(shù)參數(shù)為原型所期之?dāng)?shù)據(jù)類
型,以免一時(shí)疏忽,致使數(shù)據(jù)類型向汝討還血債。
4、若頭文件未于函數(shù)原型之中聲明返回值類型,汝當(dāng)親為此事,更須謹(jǐn)慎再三,以防不
測(cè)降臨汝身。
5、汝須親核字符串、數(shù)組操作之越界與否。古之圣人有言:嘗祈門人對(duì)答“然也”,不
意門人答曰“吾了然于胸?zé)o須多慮盡請(qǐng)寬心他日趨庭必當(dāng)重謝”一一所期者短,所獲者長(zhǎng),
此于數(shù)組,實(shí)最險(xiǎn)要處也。
6、若函數(shù)聲明內(nèi)提及,于異常時(shí)將返回錯(cuò)誤代碼云云,汝當(dāng)謹(jǐn)慎校核該返回值?;蛴行?/p>
核語(yǔ)句使汝之代碼增大數(shù)倍,令汝之手指因敲鍵而痛楚莫名之事,汝亦當(dāng)如此。不然,汝固
以為此異常之事難得一見,上蒼亦必借此懲戒汝之傲慢。
7、汝應(yīng)研習(xí)庫(kù)函數(shù),不當(dāng)親筆重寫之。如是,汝之代碼必短小易讀,汝之心境必清爽恬
淡。
8、縱汝不愿,汝亦應(yīng)借括號(hào)、縮進(jìn)之屬,使汝之代碼間架清晰,可為后者借鑒。汝之大
智慧施于決疑解難則可,施于敷設(shè)謎團(tuán)、淆亂文體則萬(wàn)萬(wàn)不可。
9、外部標(biāo)識(shí)符之前六字符當(dāng)與眾不同。此律法看似粗陋,和者寥寥,然其效用自能延續(xù)
永遠(yuǎn)。汝若不從此言,他日,汝欲連接程序于舊作之上時(shí),必抓耳撓腮、蓬頭垢面,狼狽之
相盡現(xiàn)矣。
10、或有族類,大言炎炎,云“普天之下,莫非VAX”。于此等異端,汝當(dāng)摒棄之、斷絕
之、遠(yuǎn)避之。更有異人,篤信魔道,以為縱汝所用電腦頻繁換代,汝之程序亦能長(zhǎng)久適用。
汝亦不可與此類惡人來(lái)往,謹(jǐn)記謹(jǐn)記。
強(qiáng)大的語(yǔ)言C入門之一
一、c語(yǔ)言的特點(diǎn)
C語(yǔ)言是美國(guó)的DennisRitchie在1972年設(shè)計(jì)發(fā)明的。它由早期的編程語(yǔ)言
BCPL(BasicCombinedProgrammingLanguage)發(fā)展演變而來(lái)。C語(yǔ)言之所以發(fā)展迅速,成
為最受歡迎的語(yǔ)言之一,主要因?yàn)樗哂袕?qiáng)大的功能。歸納起來(lái),C語(yǔ)言具有下列特點(diǎn):
1.C語(yǔ)言是“中級(jí)語(yǔ)言”
它把高級(jí)語(yǔ)言的基本結(jié)構(gòu)和語(yǔ)句與低級(jí)語(yǔ)言的實(shí)用性結(jié)合起來(lái)。C語(yǔ)言可以像匯編語(yǔ)言
一樣對(duì)位、字節(jié)和地址進(jìn)行操作,而這三者是計(jì)算機(jī)最基本的工作單元。
2.C語(yǔ)言是結(jié)構(gòu)式語(yǔ)言
所謂結(jié)構(gòu)式語(yǔ)言的顯著特點(diǎn)是代碼及數(shù)據(jù)的分隔化,即程序的各個(gè)部分除了必要的信息
交流外彼此獨(dú)立。這種結(jié)構(gòu)化方式可使程序?qū)哟吻逦阌谑褂?、維護(hù)以及調(diào)試。C語(yǔ)言是
以函數(shù)形式提供給用戶的,這些函數(shù)可方便地調(diào)用,并具有多種循環(huán)、條件語(yǔ)句控制程序流
向,從而使程序完全結(jié)構(gòu)化。
3.C語(yǔ)言功能齊全
C語(yǔ)言具有各種各樣的數(shù)據(jù)類型,并引入了指針概念,可使程序效率更高。另外C語(yǔ)言
也具有強(qiáng)大的圖形功能,支持多種顯示器和驅(qū)動(dòng)器,而且計(jì)算功能、邏輯判斷功能也比較強(qiáng)
大,可以實(shí)現(xiàn)決策目的。
4.C語(yǔ)言適用范圍廣
C語(yǔ)言還有一個(gè)突出的優(yōu)點(diǎn)就是適合多種操作系統(tǒng),如DOS、Windows.UNIX,也適用于
多種機(jī)型。
二、C語(yǔ)言基礎(chǔ)介紹
隨著微型計(jì)算機(jī)的日益普及,出現(xiàn)了許多C語(yǔ)言版本。由于沒有統(tǒng)一的標(biāo)準(zhǔn),使得這些
C語(yǔ)言之間出現(xiàn)了一些不一致的地方。為了改變這種情況,美國(guó)國(guó)家標(biāo)準(zhǔn)研究所(ANSI)為c
語(yǔ)言制定了一套ANSI標(biāo)準(zhǔn),成為現(xiàn)行的C語(yǔ)言標(biāo)準(zhǔn)。而在這里我們將主要以美國(guó)Borland公
司的產(chǎn)品TurboC2.0作為介紹對(duì)象,簡(jiǎn)要介紹一下C語(yǔ)言的基本知識(shí).
1.數(shù)據(jù)類型
在C語(yǔ)言中,每個(gè)變量在使用之前必須定義其數(shù)據(jù)類型。TurboC有以下幾種類型:整
型(int)、浮點(diǎn)型(float),字符型(char)、指針型(*)、無(wú)值型(void)以及結(jié)構(gòu)(struct)
和聯(lián)合(union)o其中前五種是C語(yǔ)言的基本數(shù)據(jù)類型、后兩種數(shù)據(jù)類型(結(jié)構(gòu)和聯(lián)合)則
是C語(yǔ)言的擴(kuò)展數(shù)據(jù)類型。
2.關(guān)鍵字和標(biāo)識(shí)符、運(yùn)算符
所謂關(guān)鍵字就是已被C語(yǔ)言本身使用、不能作其它用途的字。例如關(guān)鍵字else,就再不
能用作變量名、函數(shù)名等。所謂標(biāo)識(shí)符是指常量、變量、語(yǔ)句標(biāo)號(hào)以及用戶自定義函數(shù)的名
稱。C標(biāo)識(shí)符的定義十分靈活。
C的運(yùn)算符非常豐富,主要分為三大類:算術(shù)運(yùn)算符、關(guān)系與邏輯運(yùn)算符、按位運(yùn)算符。
3.變量
C規(guī)定所有變量在使用前都必須加以說(shuō)明。?條變量說(shuō)明語(yǔ)句由數(shù)據(jù)類型和其后的一個(gè)
或多個(gè)變量名組成,例如“intx”。變量可以在程序中三個(gè)地方說(shuō)明:函數(shù)內(nèi)部、函數(shù)的參
數(shù)定義中或所有的函數(shù)外部。根據(jù)所定義位置的不同,變量可分為局部變量、形式參數(shù)和全
程變量。C像其它高級(jí)語(yǔ)言一樣也使用數(shù)組變量。所謂數(shù)組就是指具有相同數(shù)據(jù)類型的變量
集,并擁有共同的名字。數(shù)組中的每個(gè)特定元素都使用下標(biāo)來(lái)訪問(wèn)。
4.控制流程語(yǔ)句
C提供了豐富、靈活的控制流程語(yǔ)句,主要有:條件語(yǔ)句、循環(huán)語(yǔ)句利開關(guān)語(yǔ)句。條件語(yǔ)
句的-,般形式為if—else。C提供三種基本的循環(huán)語(yǔ)句:for語(yǔ)句、while語(yǔ)句和do—while
語(yǔ)句。而在編寫程序時(shí),經(jīng)常會(huì)碰到按不同情況分轉(zhuǎn)的多路問(wèn)題,這時(shí)可用嵌套if-else
-if語(yǔ)句來(lái)實(shí)現(xiàn),但if-else-if語(yǔ)句使用不方便,并且容易出錯(cuò)。對(duì)這種情況,C提供了
一個(gè)switch開關(guān)語(yǔ)句。
5.指針(point)
學(xué)習(xí)C語(yǔ)言,指針是較難理解的一個(gè)概念。我們知道變量在計(jì)算機(jī)內(nèi)占有一塊存貯區(qū)域
(也就是有一個(gè)“地址”),變量的值就存放在這塊區(qū)域之中,在計(jì)算機(jī)內(nèi)部,通過(guò)訪問(wèn)或修
改這塊區(qū)域的內(nèi)容來(lái)訪問(wèn)或修改相應(yīng)的變量。C語(yǔ)言中,對(duì)于變量的訪問(wèn)形式之一,就是先
求出變量的地址,然后再通過(guò)地址對(duì)它進(jìn)行訪問(wèn),這就是指針及指針變量。指針變量的般
定義為“類型標(biāo)識(shí)符*標(biāo)識(shí)符”,其中標(biāo)識(shí)符是指針變量的名字,標(biāo)識(shí)符前加了號(hào),
表示該變量是指針變量,而最前面的“類型標(biāo)識(shí)符”表示該指針變量所指向的變量的類型。
一個(gè)指針變量只能指向同一種類型的變量,也就是說(shuō),我們不能定義一個(gè)指針變量,既能指
向一整型變量又能指向雙精度變量。
三、C程序設(shè)計(jì)初步
C語(yǔ)言是一種中級(jí)語(yǔ)言,用戶用C語(yǔ)言編寫的程序稱為源程序,源程序文件的后綴一般
必須為“.c”。計(jì)算機(jī)硬件不能直接執(zhí)行源程序,必須將源程序翻譯成二進(jìn)制目標(biāo)程序。翻譯
工作是由編譯程序完成的,翻譯的過(guò)程稱為編譯,編譯的結(jié)果稱為目標(biāo)程序,目標(biāo)程序文件
后綴一般為“.OBJ"。程序翻譯成目標(biāo)程序后,便可進(jìn)行連接?!斑B接”的目的是使程序變成
在計(jì)算機(jī)上可以執(zhí)行的最終形式。在這階段,系統(tǒng)程序庫(kù)中的程序要與目標(biāo)程序連接,連
接的結(jié)果稱為執(zhí)行程序,執(zhí)行程序文件名字一般以EXE”結(jié)尾。正如所有利用計(jì)算機(jī)
語(yǔ)言所編寫的的第一個(gè)程序一樣,下面,我們也試著建立一個(gè)名為“HELLO.C”的源程序,這
個(gè)程序?qū)⒃谄聊簧厦娲蛴〕觥澳愫茫峨娔X報(bào)》軟件世界!”這個(gè)短語(yǔ)。
通過(guò)鍵盤輸入程序:
include
main()
printf(w你好,《電腦報(bào)》軟件世界!\n");
}
這個(gè)最簡(jiǎn)單的程序,也包括了C語(yǔ)言的一些基本的內(nèi)容,它有一個(gè)主函數(shù)main。,使用
到了標(biāo)準(zhǔn)的輸出函數(shù)printfO,同時(shí)為了能夠讓程序運(yùn)行時(shí)包含這個(gè)標(biāo)準(zhǔn)函數(shù),我們首先要
在程序的最開始寫上include,“stdio.h”是C語(yǔ)言提供的標(biāo)準(zhǔn)輸入輸出函數(shù)庫(kù)頭文件,我
們可以直接引用里面的??些函數(shù),來(lái)完成我們所要實(shí)現(xiàn)的功能。
現(xiàn)在,讓我們來(lái)編譯、連接并運(yùn)行一下這個(gè)最簡(jiǎn)單的程序,我們將看到,在屏幕上打印
出了“你好,《電腦報(bào)》軟件世界!”
四、參考資料
首先是一些C語(yǔ)言相關(guān)的書籍:
《C語(yǔ)言》譚浩強(qiáng),《C語(yǔ)言編程寶典》王大剛,《數(shù)據(jù)結(jié)構(gòu)與算法一一面向?qū)ο蟮腃++
設(shè)計(jì)模式》BrunoR.Preiss,《C/C++語(yǔ)言與研究開發(fā)實(shí)踐》伍曉宇、辛勇,《BorlandC
++Builder3.0/4.0類參考詳解》張濟(jì)、袁野、王秀娟,《BorlandC++Builder3.0/4.0
高級(jí)類參考詳解》王秀娟、孫悅、黎華,《C++語(yǔ)言命令詳解(第二版)》BrianOverland,
《C++程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)》錢能。
用C語(yǔ)言解決鬼谷算題
在鬼谷算題中有這樣一個(gè)著名的題目:“今有物不知其數(shù),三三數(shù)之剩二,五五數(shù)之剩三,
七七數(shù)之剩二,問(wèn)物幾何?”這屬于高等數(shù)學(xué)中的數(shù)論。我國(guó)宋代學(xué)者對(duì)這類題目鉆研已頗為
精深,總結(jié)出了“三人同行七十稀,五樹梅花廿一枝,七子團(tuán)圓正半月,去百零五便得知?!?/p>
這樣的口訣,意思是說(shuō)“以三三數(shù)之,余數(shù)乘以七十;五五數(shù)之,余數(shù)乘以二十一;七七數(shù)
之,余數(shù)乘十五。三者相加,如不大于一百零五,即為答數(shù);否則須減去一百零五或其倍數(shù)?!?/p>
這道算題的答案為23。計(jì)算起來(lái)比較繁瑣,但如果用我們所熟悉的C語(yǔ)言來(lái)編寫一小段程序
的話,很快就能解決。
這段程序如下:
ttinclude"stdio.hM
main
intx
forx=0x<100x++??
ifx%3==2&&x%5==3&&x%7==2
printf"Thisnumberis%d\nfzx
看一看,是不是很簡(jiǎn)單?。?/p>
用C語(yǔ)言實(shí)現(xiàn)的鬧鐘程序
#include
#include
ttinclude
#include
Sinclude
voidmain()
(
intgd=DETECT,gm;
intx=320,y=240,r=200,i,h,m,s,thetamin,thetasec;
structtimet;
charn[12][3]={"3","2","1","12","11","10","9","8","7","6","5","4"};
initgraph(&gd,&gm,〃g:\\tc\\bgi〃);〃圖形驅(qū)動(dòng)器路徑,根據(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(MPI/6*i)-26,n[i]);
else
outtextxy(x+(r-14)*cos(M_PI/6*i)-20,y-(r-14)*sin(MPI/6*i)-26,n[i]);
)
gettime(&t);
printf(Z/Thecurrenttimeis:%2d:%02d:%02d.%02d\nz,,t.ti_hour,t.ti_min,
t.ti_sec,t.tihund);
while(!kbhit())
(
setcolor(5);
setfillstyle(l,5);
circle(x,y,10);
floodfill(x,y,5);
gettime(&t);
if(t.timin!=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-l10)*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_P1/18O))),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.
if(t.ti_min<=15)
thetamin=(15-t.ti_min)*6;
else
thetamin=450-t.
if(t.ti_sec<=15)
thetasec=(15-t.ti_sec)*6;
else
thetasec=450-t.ti_sec*6;
setcolor(4);
1ine(x,y,x+(r-110)*cos(M_PI/6*h-((m/2)*(M_PI/180))),y-(r-HO)*sin(M_PI/6*h
-((m/2)*(MPI/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)*(MPI/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*(MPI/180)),y-(r-70)*sin(thetasec*(MPI/180
)));
delay(1000);
setcolor(0);
line(x,y,x+(r-70)*cos(thetasec*(MPI/180)),y-(r-70)*sin(thetasec*(MPI/180
)));
}
}
該程序已在TurboC++3.0中通過(guò)編譯.
C程序開發(fā)經(jīng)典實(shí)例之一
【程序1】
題目:有1、2、3、4個(gè)數(shù)字,能組成多少個(gè)互不相同且無(wú)重復(fù)數(shù)字的三位數(shù)?都是多少?
1.程序分析:可填在百位、十位、個(gè)位的數(shù)字都是1、2、3、4o組成所有的排列后再去
掉不滿足條件的排列。
2.程序源代碼:
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(/z%d,%d,%d\n”,i,j,k);
)
)
【程序2】
題目:企業(yè)發(fā)放的獎(jiǎng)金根據(jù)利潤(rùn)提成。利潤(rùn)⑴低于或等于10萬(wàn)元時(shí),獎(jiǎng)金可提10%;
利潤(rùn)高于10萬(wàn)元,低于20萬(wàn)元時(shí),低于10萬(wàn)元的部分按10%提成,高于10萬(wàn)元的部分,
可可提成7.5%;20萬(wàn)到40萬(wàn)之間時(shí),高于20萬(wàn)元的部分,可提成5%;40萬(wàn)到60萬(wàn)之間時(shí)
高于40萬(wàn)元的部分,可提成3%;60萬(wàn)到100萬(wàn)之間時(shí),高于60萬(wàn)元的部分,可提成1.5%,
高于100萬(wàn)元時(shí),超過(guò)100萬(wàn)元的部分按1%提成,從鍵盤輸入當(dāng)月利潤(rùn)I,求應(yīng)發(fā)放獎(jiǎng)金總
數(shù)?
1.程序分析:請(qǐng)利用數(shù)軸來(lái)分界,定位。注意定義時(shí)需把獎(jiǎng)金定義成長(zhǎng)整型。
2.程序源代碼:
mainO
(
longinti;
intbonus1,bonus2,bonus4,bonus6,bonuslO,bonus;
scanf&i);
bonusl=lOOOOO^.1;bonus2=bonu
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度窗簾清洗消毒服務(wù)合同范本3篇
- 二零二五版建筑工程測(cè)量分包合同樣本2篇
- 二零二五年度美發(fā)店員工績(jī)效考核及晉升合同4篇
- 2025年鎳礦運(yùn)輸與環(huán)保設(shè)施改造升級(jí)合同3篇
- 二零二五版大型活動(dòng)臨時(shí)設(shè)施安裝服務(wù)合同2篇
- 2025年分期付款家居裝修合同
- 2025年度傳媒機(jī)構(gòu)視頻剪輯師勞動(dòng)合同4篇
- 2025年度鮮奶運(yùn)輸企業(yè)節(jié)能環(huán)保項(xiàng)目投資合同3篇
- 二零二五年度互聯(lián)網(wǎng)平臺(tái)催款服務(wù)合同4篇
- 二零二五年度祠堂旅游紀(jì)念品設(shè)計(jì)與生產(chǎn)合同3篇
- 帶狀皰疹護(hù)理查房課件整理
- 年月江西省南昌市某綜合樓工程造價(jià)指標(biāo)及
- 奧氏體型不銹鋼-敏化處理
- 作物栽培學(xué)課件棉花
- 交通信號(hào)控制系統(tǒng)檢驗(yàn)批質(zhì)量驗(yàn)收記錄表
- 弱電施工驗(yàn)收表模板
- 絕對(duì)成交課件
- 探究基坑PC工法組合鋼管樁關(guān)鍵施工技術(shù)
- 國(guó)名、語(yǔ)言、人民、首都英文-及各地區(qū)國(guó)家英文名
- API SPEC 5DP-2020鉆桿規(guī)范
- 組合式塔吊基礎(chǔ)施工專項(xiàng)方案(117頁(yè))
評(píng)論
0/150
提交評(píng)論