軟件工程-C語(yǔ)言-C語(yǔ)言學(xué)習(xí)教程_第1頁(yè)
軟件工程-C語(yǔ)言-C語(yǔ)言學(xué)習(xí)教程_第2頁(yè)
軟件工程-C語(yǔ)言-C語(yǔ)言學(xué)習(xí)教程_第3頁(yè)
軟件工程-C語(yǔ)言-C語(yǔ)言學(xué)習(xí)教程_第4頁(yè)
軟件工程-C語(yǔ)言-C語(yǔ)言學(xué)習(xí)教程_第5頁(yè)
已閱讀5頁(yè),還剩93頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論