C程序設(shè)計(jì)語言(第二版習(xí)題解答)_第1頁
C程序設(shè)計(jì)語言(第二版習(xí)題解答)_第2頁
C程序設(shè)計(jì)語言(第二版習(xí)題解答)_第3頁
C程序設(shè)計(jì)語言(第二版習(xí)題解答)_第4頁
C程序設(shè)計(jì)語言(第二版習(xí)題解答)_第5頁
已閱讀5頁,還剩130頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

目錄CPROGRAMMINGLANGUAGE

—導(dǎo)者i

第2*

類型、運(yùn)算符與表達(dá)式27

3學(xué)

控制施:37

4童

函數(shù)與程序結(jié)構(gòu).

第5

章指針與數(shù)蛆61

第6

章結(jié)構(gòu)

第799

電8輸入與輸出1H

:

UNK系統(tǒng)接口123

、*?sdwt

導(dǎo)言

2*?*t

練習(xí)1-1(《C程序設(shè)計(jì)語言(第2版?新版)》即教材第3頁)

在你自己的系統(tǒng)中運(yùn)行"hello,world”程序,再有意去掉程序中的部分內(nèi)容,看看

會(huì)得到什么出錯(cuò)信息。

"include<stdio.h>

maxnC>

printf(Mhello,world");

>

上面這個(gè)例子省略了換行符(\n),這將使光標(biāo)停留在輸出信息的末尾。

/include<stdio.h>

main()

printf(uhe1io>world'n"】

>

第二個(gè)例子省略了print*)后面的分號(hào)“C程序的語句必須以分號(hào)結(jié)尾(參見教材第5

頁)。因此,對于本例,編譯器將識(shí)別出少了一個(gè)分號(hào)并給出相應(yīng)的出借信息C

/includetdio.h>

mainO

\

M

printfChei1o7wor1d\n*);

在第三個(gè)例子里,\n后面的雙引號(hào)”被錯(cuò)寫為單引號(hào),于是,這個(gè)單引號(hào)及其后面的右

括號(hào)和分號(hào)將被看做是整個(gè)輸出字符串的一部分:編譯器將把這種情況視為一個(gè)錯(cuò)誤,會(huì)報(bào)

告說缺失了一個(gè)雙引號(hào);在右花括號(hào)前缺失了一個(gè)右圓括號(hào);字符串過長;字符串中帶有換

行符C

練習(xí)1-2(教材第3頁)

做個(gè)實(shí)驗(yàn),當(dāng)printf函數(shù)的參數(shù)字符串中包含\c(其中c是上面的轉(zhuǎn)義字符序列中未曾

列出的某一個(gè)字符)時(shí),觀察一下會(huì)出現(xiàn)什么情況?

2第

?include<atdio.h>

(noin(>

(,

MM

printf(hel1oTworld\y);

printf(??hello,world\70):

M

printf(hel1otwor;

)

參考手冊(參見教材第169頁)中提到:“如果'后面緊跟的字符不在以上指定的字符中,

則行為是未定義的?!?/p>

上面這段代碼的執(zhí)行結(jié)果與具體的編譯器相關(guān)。一種可能出現(xiàn)的結(jié)果是:

hello,woridyhel1o,world<BELL>hellotworld7

其中,<BELL>是ASCII值等于7的字符所產(chǎn)生的一聲短蜂鳴。在'的后面,可以用最多3個(gè)

八進(jìn)制數(shù)字(參見教材第29頁)來代表一個(gè)字符,而巾在ASCII字符集中代表的是一聲短蜂

鳴。

練習(xí)1-3(教材第8頁)

請修改溫度轉(zhuǎn)換程序,使之能在轉(zhuǎn)換表的頂部打印一個(gè)標(biāo)題。

/include<stdio?h>

/<printFahrenheit*Celsiustable

forfahr,0.20>???,300;floating-pointversion?/

ffiainC)

(

floatfahr,celalua;

intlower,uppertstep;

lower?0;/?lowerlimitoftemperaturetable*/

upper?300;/?upperlimit?/

step-20;八stepsize■/

printf<uFahrCels1uaXn1*);

fabr,lower;

while(fahr<-upper!<

celaiua■45.0/9.0)?(fahr-32-0):

printfCHX3.OfX6,If\nM,fahr,celsms);

fahr,fahr?step;

在循環(huán)語句之前增加的printf「FahrCelsius'n");語句將在溫度轉(zhuǎn)換表的頂部產(chǎn)

生一個(gè)表頭。為了讓輸出內(nèi)容與這個(gè)表頭對齊,我們還在%3.Of和%6.If之間增加了兩個(gè)空

格。上面這個(gè)程序中的其余語句與教材第6頁中給出的代碼完全一致。

練習(xí)1-4(教材第8頁)

編寫一個(gè)程序打印攝氏溫度轉(zhuǎn)換為相應(yīng)華氏溫度的轉(zhuǎn)換表。

^include<9tdio.h>

/?printCelaius-Fehrenheittable

t

forCelsius=0,20,...,300;floating-pointversion</

main()

|

floatfahr>Celsius;

intlower,upper)step;

lower、0;/?iowerlimitoftemperataretab1e?/

upper、300;/*upperlimit?/

stepu20;/*stepsize?/

printf<HCelsiusF己hr\n”);

celsiu5、lower;

whileCce1sius<=upper){

febr*(9.0*celsiu5)/5,0?32.0;

printf(UX3.Of%G.If\n'\celsian>fahr>;

celsius?Celsius+5tep;

>

}

本程序?qū)⑤敵鲆粋€(gè)攝氏溫度(0~300)到華氏溫度的轉(zhuǎn)換表,華氏溫度是用以下語句計(jì)

算得到的:

fdhr?(9r0?ceisius)/5-0?32?0

本題的解題思路與打印華氏溫度到攝氏溫度的對照表程序(見教材第6頁)是相同的,整

型變量lows、upper.step分別對應(yīng)于變量celsius的下限、上限、步長,程序先把變

量ceLsius初始化為它的下限,再在while循環(huán)中把對應(yīng)的華氏溫度計(jì)算出來。然后,程序

打印出這組攝氏溫度和華氏溫度的值,并按步長遞增變量Celsius的值,while循環(huán)將一直

執(zhí)行直到變量Celsius超出其上限為止。

練習(xí)1-5(教材第9頁)

修改溫度轉(zhuǎn)換程序,要求以逆序(即按照從3。0度遞減到。度的順序)打印溫度轉(zhuǎn)換表“

ndude<5tdio.h>

/?printFahrenheit-Cel3iustableinreverseorder?

moin<)

<

intfahr;

for<fahr*300;fahr>?0;fahr"fahr-20)

printfLZ3d%6.if\n"ifahr,<S.0/9,0>?Cfehr-32));

惟一的修改之處是:

forCfahr*300;fahr>?0;fahr-fahr-20)

這條for語句的第一部分:

fehr■300

負(fù)責(zé)把華氏溫度變量(fahr)初始化為它的上限;for語句的第二部分(即for循環(huán)的控制

條件):

4第1

fehr?=0

負(fù)責(zé)檢查變量fahr是否大于或等于它的下限——只要這個(gè)檢查的結(jié)果為真,for語句就將繼

續(xù)循環(huán)執(zhí)行;for語句的第三部分(即步長表達(dá)式):

fehr,fahr?20

負(fù)責(zé)對變量fahr按步長進(jìn)行遞減操作。

練習(xí)1-6(教材第11頁)

驗(yàn)證布爾表達(dá)式getchar()!=EOF的取值是0還是1。

■include<gtdio-h>

mein()

kntc;

while(c?getchar(yI-EOF)

HM

printf(Xd\ntc);

printf(MXd-etEOF\nM?c〉i

>

根據(jù)教材第11頁的論述,表達(dá)式

c■getcherC!-EOF

相當(dāng)于

c"(getcher()!"EOF>

本程序從系統(tǒng)的標(biāo)準(zhǔn)輸入讀取字符并使用了上面的表達(dá)式。當(dāng)有字符可讀時(shí),getcharS不

會(huì)返回文件結(jié)束符(即EOF),所以

getchart)!"EOF

的取值為真,變量c將被賦值為1。當(dāng)程序遇到文件結(jié)束符時(shí),表達(dá)式取值為假,此時(shí),變量c

將被賦值為0,程序?qū)⒔Y(jié)束運(yùn)行。

練習(xí)1-7(教材第11頁)

請編寫一個(gè)打印EOF值的程序。

/include<?tdlo*h>

main()

(

prlntf(MEOFisXd'n",EOF);

}

符號(hào)常量EOF是在頭文件vstdio.h>中定義的。在上面這個(gè)程序中,printf()語句中

雙引號(hào)外的EOF將被替換為頭文件vstdio.h>中緊跟在

/defineEOF

之后的文本。在我們的系統(tǒng)中,EOF被定義為-1,但在其他系統(tǒng)中,EOF可能被定義為其他

導(dǎo)t5

的值c這正是使用EOF等標(biāo)準(zhǔn)符號(hào)常量能夠增加程序可移植性的原因所在

練習(xí)1-8(教材第13頁)

編寫一個(gè)統(tǒng)計(jì)空格、制表符和換行符個(gè)數(shù)的程序.

,】nc1ude<stdio.h>

/?countblanks,tabs,andnew]ines./

main<)

intc,nb,nt,nl;

nb-0;八numberofblanks?/

nt?0;八numberoftabs?/

nl■0;/*numberof1inea*/

while((c-getcharO)!-EOF){

if<c,??

??nb;

if<c,■'\t')

??nt;

if<c??*\n*)

?*nl;

>

printf(MXdXd%八力”,nb?nt,nl);

)

整型變量nbnt和nl分別用來統(tǒng)計(jì)空格、制表符和換行符的個(gè)數(shù)。這3個(gè)變量的初值都是仇

在while循環(huán)的循環(huán)體內(nèi),出現(xiàn)在輸入中的每一個(gè)空格、制表符和換行符都將被記錄,

while循環(huán)中的3條if語句在每次循環(huán)中都將被執(zhí)行。如果程序讀到的字符不是空格、制表

符或換行符,就不執(zhí)行任何操作,如果程序讀到的字符是這三個(gè)符號(hào)之一,就對相應(yīng)的計(jì)數(shù)

器加1。當(dāng)while循環(huán)終止(即getchar返回EOF)B寸,本程序?qū)芽崭?、制表符和換行符的

統(tǒng)計(jì)結(jié)果打印出來.

對if-else語句的介紹最早出現(xiàn)于教材第14頁,下面是使用了這一語法結(jié)構(gòu)的實(shí)現(xiàn)方

法:

nclude<stdio.h>

/?countblanks,tabs,andnewlines?/

main(>

<

intc,nbTnt>n1;

nb,0>/?numberofblanks?/

nt*0;/?numberoftabs?/

n1?0;/?numberofnewlines?/

whlie((c■getchar())!?E0F>

if<c.?

??nb;

el^eif<c=='\t')

??nt;

elseif(c-=/O

??nl:

6第I章

printf(uXdXdXd\nM>nb?nt?nl);

>

練習(xí)1-9(教材第13頁)

編寫一個(gè)將輸入復(fù)制到輸出的程序,并將其中連續(xù)的多個(gè)空格用一個(gè)空格代替。

?include<std*o.h>

/defineNONBLANK'a'

/*replacestringofblankswithasinglebl&nfc?/

main()

intc?lastc>

lastcuNONBLANK;

while((c-geteharC))f?EOF){

ifCc!?'')

putchar(c);

if<c--'

if(lestc!"'9)

putcharCcl;

leatc?c;

}

?

整型變量c負(fù)責(zé)記錄當(dāng)前輸入字符的ASCII值,而整型變量lastc則記錄著前一個(gè)輸人字

符的ASCII值。符號(hào)常量NONBLANK負(fù)責(zé)把變量lastc初始化為一個(gè)任意的非空格字符。

while循環(huán)體中的第一條if語句輸出非空格字符;第二條if語句處理空格字符,而第三

條if語句用于檢查當(dāng)前的空格字符究竟是一個(gè)單個(gè)的空格符還是一串空格中的第一個(gè)空格。

最后,對變量lastc進(jìn)行刷新。以上操作將一直重復(fù)到while循環(huán)終止(即getchar返回

EOF)為止。

對if-else語句的介紹最早出現(xiàn)于教材第14頁,下面是使用了這一語法結(jié)構(gòu)的實(shí)現(xiàn)方法:

<IncludeCstdio,h>

/defineNONBLANK

/#replacestringofblankswithas1ngleblanlc■'

main<)

<

intc,lastc;

lastc?NONBLANK;

while(<c?getcharf))I?EOF)(

if<c!?<^)

putchartc);

elseif(lastc,??9)

putcharCc);

lastc■c;

導(dǎo)言7

對邏輯或(OR)操作符II的介紹也最早出現(xiàn)于教材第14頁,F(xiàn)面是使用「這一知識(shí)的實(shí)

現(xiàn)方法:

#1nc1ude<5tdio.h>

#defmeNONBLANK‘3''

/■replacestringofblankswithssingleblank

ma1n(>

<

intc,lastc;

lastc■NONBLANK;

while<(c■getchar()>EOF)<

if(c?-'?:Ilastc!”'

putchar<c);

lastc?c;

練習(xí)1-10(教材第13頁)

編寫一個(gè)將輸入復(fù)制到輸出的程序,并將其中的制表符替換為\j把回退符替換為\b,

把反斜杠替換為\\,這樣可以將制表符和回退符以可見的方式顯示出來。

?include<stdio.h>

/?replacetabsandbackspaceswithvisiblecharacters?/

ma1n()

<

mtc;

while<Cc?getcharC))!?EOF)<

if€c??

printf(??Wf1);

if(c--'\b'】

printf

if<C?""'中

pr

if<c?-''b')

if<c!**\t

ifCc?-?、、?)

putchar(c);

?

)

輸入的字符可以是一個(gè)制表符、一個(gè)回退符、一個(gè)反斜杠或者其他任何字符。如果輸入

是一個(gè)制表符,我們就把它替換為\t;如果輸入是一個(gè)回退符,我們就把它替換為\b;如果

輸入是一個(gè)反斜杠,我們就把它替換為\\;其他字符則按原樣輸出。

在C語言中,反斜杠是用飛「來表示的。因此,如果我們想輸出兩個(gè)反斜杠,就必須把字

符串"\\\\"傳遞給printf函數(shù)-

對if-else語句的介紹最早出現(xiàn)于教材第14頁,下面是使用了這一語法結(jié)構(gòu)的實(shí)現(xiàn)方

法:

/include<stdio.h>

/?replacetabsendbadspaceswithvisiblecheroctens?/

maxn()

{

intc;

while(<c■getcharO)!?EDF)

if<c--

printf

elseifCc

printf

elseif(c?=

else

putchar(c);

練習(xí)1-11(教材第15頁)

你準(zhǔn)備如何測試單詞計(jì)數(shù)程序?如果程序中存在某種錯(cuò)誤,那么什么樣的物入最可能發(fā)

現(xiàn)這類錯(cuò)誤呢?

單詞計(jì)數(shù)程序的測試工作首先要從沒有任何輸入的情況開始。此時(shí),該程序的輸出結(jié)果

應(yīng)該是“000”,即零行、零單詞、零字符。

接下來測試輸入單字符單詞的情況。此時(shí),該程序的輸出結(jié)果應(yīng)該是“1I2”,郎一行、

一個(gè)單詞、兩個(gè)字符(一個(gè)字母加上一個(gè)換行符)。

再測試一個(gè)由兩個(gè)字符組成的單詞。此時(shí),該程序的輸出結(jié)果應(yīng)該是“113”,即一行、

一個(gè)單詞、三個(gè)字符(二個(gè)字母加上一個(gè)換行符)。

然后,再測試兩個(gè)單字符單詞的情況。首先,兩個(gè)單詞出現(xiàn)在同一行,此時(shí)的輸出結(jié)果

應(yīng)該是“124”;然后,兩個(gè)單詞各占一行,此時(shí)的輸出結(jié)果應(yīng)該是“224”。

那些滿足邊界條件的輸入情況最有助于發(fā)現(xiàn)單詞計(jì)數(shù)程序中的錯(cuò)誤。這些邊界條件包括:

——沒有輸入

——沒有單詞(只有換行符)

——沒有單詞(只有空格、制表符和換行符)

——每個(gè)單詞各占一行的情況(沒有空格和制表符)

——單詞出現(xiàn)于文本行行首的情況

——單詞出現(xiàn)于一串空格之后的情況

練習(xí)1-12(教材第15頁)

編寫一個(gè)程序,以每行一個(gè)單詞的形式打印其輸入。

*include<atdlo.h>

*defineIN1/?insideaword?/

Hi

t9

?defineOUT0/?outsideaword

/<printInputonewordperline

main<)

<

intc,state;

state-OUT;

while<(c-getcharO)!?EDF)<

if<c?■*■?Ic,■'\n’3;C7'){

1f(state■■IH><

putcharC*\n*);/?finishtheword?/

state■OUT;

>

>el^eif(stateOUT)<

state■IN;/?beginn1ngofword?/

putchar<c);

>e)9e/?insideaword?/

putcharCc>;

整型變量state是一個(gè)布爾量,用于記錄程序的處理過程是否正處于某個(gè)單詞的內(nèi)部。

在程序剛開始運(yùn)行的時(shí)候,變量state將被初始化為OUT,表明尚未處理任何數(shù)據(jù)。

第一條if語句

ifqc??''IIc-?'\n'IIc--'\t')

判斷變量c是否是一個(gè)單詞分隔符。如果是,則第二條if語句

ifCatate**IN)

將判斷這個(gè)單詞分隔符是否表示某個(gè)單詞結(jié)束。如果是,就輸出一個(gè)換行符并修改變量

state的值;如果不是,則不進(jìn)行任何操作。

如果c不是一個(gè)單詞分隔符,那么,它將或者是某單詞的第一個(gè)字符、或者是一個(gè)單詞中

除第一個(gè)字符之外的其他字符。對于第一種情況(c是某單詞的第一個(gè)字符〉,程序?qū)⑿薷淖?/p>

量state的值并輸出這個(gè)字符;時(shí)于第二種情況(c是某個(gè)單詞中的其他字符),程序直接輸

出這個(gè)字符。

練習(xí)1-13(教材第17頁)

編寫一個(gè)程序,打印輸入中單詞長度的直方圖。水平方向的直方圖比枝容易繪制,垂直

方向的直方圖則要困難些。

nclude<atdlo.h>

/defineMAXHISTIS/?maxlengthofhistogram*/

*def1neMAXWORD11/?maxlengthofaword■/

*defmeJN1/?insideaword*/

*defineOUT0/*outsideaword?/

/#pr1nthorizonta1histogram?/

main<)

10第1步

intc>11nc,state;

intlen;/*lengthofeachbar

intmaxvalue;/?maximumvalueforwl(]

intovflow;/?numberofoverflowwords

intwl[MAXNORDJ;/#wordlengthcounters

stete?OUT;

nc■0;/?numberofcharainaword*/

ovflow?0;/<numberofwords>?MAXWORD*/

for<i?0;1<MAXWORD;

wl[1]-0;

while(Cc-geteharO>!-EOF){

ifCc■"''I:c-*/\n/\\c*?/\t*><

state-OUT;

if<nc>0>

1/<nc<MAXWORD)

**wl(nc];

else

??□vflow;

nc?0;

>elseif(atate??OUT)<

state■IN;

nc,1;/?beginningofanewword■/

>else

?*nc;/*insideaword?/

}

maxvalue-0;

for(i-1;i<MAXNORD:

if(wlIi1>maxvalue)

mexvAlue?wl〔U;

for<1-1;i<MAXWORD;?+!)<

prirtf<HXSd-XSd:",i,wHx));

if<wl[13>0)<

if(<len?wl(il?MAXH1ST/maxvalue)<*0>

len-1;

}else

len-0;

while<1en>0>{

putchar

--1?力;

>

putchart*\n*);

if(ovf1ow>0)

printf<uThereareXdwords>*ovflow>MAXWORD);

空格、換行符或制表符標(biāo)志著單詞的結(jié)束。如果有一個(gè)單詞(口c>0)且它的長度小于允

許的單詞最大長度(nc<MAXWORD),這個(gè)程序?qū)ο鄳?yīng)的單詞長度計(jì)數(shù)器加1(++皿[nc])0

如果單詞的長度超出了允許的單詞最大長度(nc>=MAXWORD),這個(gè)程序?qū)ψ兞縪vflow

加1以記錄長度大于或等于MAXWORD的單洞的個(gè)數(shù)。

在讀入全部單詞之后,我們的程序?qū)⒄页鰯?shù)組w1中的最大值(maxvalue)n

言11

變量len是根據(jù)MAXHIST和maxvalue的值計(jì)算得出的wl[i)所對應(yīng)的直方圖長度。

如果wl[i]大于零,就至少要打印出一個(gè)星號(hào)。

/include<5tdio?h>

?/

/def1neMAXHIST15/?maxlengthofhistogram

/def1neMAXUI0RD11/?maxlengthofaword*/

/defineIN1/?insideaword*/

*defineOUT0/?out9ideeword*/

/*printverticalhi9togram■/

meinO

intmaxvalue;/?maximumvalueforwlC]*/

irtQVf10W;/?numberofoverflowwords?/

irtwKMAXWORDJ;/?wordlengthcounters*/

state■OUT;

nc益°;/?numberofcbarsinwward《

ovflow?05/?numberofwords)■HAXWORD<

forCi*0;i<MAXWDRD;

wl[1]-0;

while(Cc-getcher())!?EOFI《

if(c?-**Mc??,\n?1tc<

state-OUT;

ifCnc>0>

if(nc<MAXH0RD>

??3line】;

else

?*ovflow;

nc?0;

>elseif(state?■DUT><

state■IN;

力c?1;/?beginningofanewword?/

}else

??nc;/?insideaword

}

maxvalue■0;

for(i>1;1<MAXWORD;**i)

if(wltiJ>maxvalue)

mexvalue■wl(i];

forCi-MAXHIST;i>0;-7)《

for(j-1;j<MAXNORD;■))

ifCwHj]?MAXHIST/maxvalue>>i)

print””?

else

printfCif”;

putchart

>

for(1-1;1<MAXW口RD;**i)

printf<H%4dM,i);

putebor<'\n'>;

for<1-1;1<MAXUIORD;**i)

H

printf(X4d“,uHi])s

12第[章

putcharC);

if(ovf1ow>0)

prxntf(MThereare%dwords>*ovflow,MAXWORD);

>

這個(gè)實(shí)現(xiàn)方法將輸出一個(gè)垂直方向的直方圖。這個(gè)程序從開始直到求值maxvalue的過程與

前一個(gè)程序完全相同。然后,這個(gè)程序需要計(jì)算數(shù)組wl中的每一個(gè)元素并判斷是否需要在數(shù)

組元素的對應(yīng)位置上打印一個(gè)星號(hào)。這一判斷過程必不可少,因?yàn)榇怪狈较蛑狈綀D的所有直

方條是同步打印的。最后的兩個(gè)for循環(huán)用來輸出數(shù)組wl各元索的下標(biāo)和取值。

練習(xí)1-14(教材第17頁)

編寫一個(gè)程序,打聿輸入中各個(gè)字符出現(xiàn)頻度的直方圖。

^include<stdio.h>

*include<ctype.h>

/defineMAXHIST15/?maxlengthofhistogram

?defineMAXCHAR128/*maxdifferentcharacters

/?printhorizontalhlstoqramfreq,ofdifferentcherecters?/

fliain<)

<

Intc,i;

mtlen;/?lengthofeachbar*/

intmaxvalue;/?maximumvalueforcc(]*/

xntccCMAXCHAR];八charactercounters?/

for<i-0;i<MAXCHAR;??)1)

cc[iJ?0;

while€Cc?getcharC))1?EOF>

ifCc<MAXCHAR)

**cc[c);

maxvalue?0;

for(i?1;j<MAXCHAR;

xf<cc£x]>majtvalue)

maxvaiue*cc(1];

for<i-1;i<MAXCHAR;?*!)<

if(isprintC1))

printfCaXSd-%c-15d:M,i,i,cell]);

else

printf(MXSd--XSd:1>cell】);

ifCccCiJ>0){

if((1en?ccCi]?M科XHIST/maxve1ue><-0)

1en?1;

>else

len■0;

while<len>0){

putchar(,?■】;

--leu;

putcharC,\nr?

導(dǎo)言13

這個(gè)程序與練習(xí)1-13中的水平直方圖輸出程序很相似,但我們現(xiàn)在統(tǒng)計(jì)的是各個(gè)字符的

出現(xiàn)頻度。程序中使用了一個(gè)元素個(gè)數(shù)等于MAXCHAR的字符計(jì)數(shù)器數(shù)組,如果我們使用的字

符集中存在值大于或等于MAXCHAR的字符,則這些字符將被忽略。另一個(gè)區(qū)別是我們使用了

一個(gè)宏來判斷某個(gè)字符是否是一個(gè)可顯示字符。關(guān)于包含的頭文件VCtype.h>的討論出現(xiàn)于

教材第34頁,對isprint的介紹則出現(xiàn)于教材第227頁(附錄B)。

練習(xí)1-15(教材第19頁)

重新編寫L2節(jié)中的溫度轉(zhuǎn)換程序,使用函數(shù)實(shí)現(xiàn)溫度轉(zhuǎn)換計(jì)算。

/include<5tdio.h>

floatcelsius<float^ahr);

/<printFahrenheit-Celsiustable

forfahr-0,20,...,300;floating-pointversion,/

main()

(

floatfahr;

mt1ower,upper,step;

l0wer?0;/?lowerlimitoftemperaturetable?/

upper?300;/?upper1imit"

step-20;/?stepsize?/

fahr■1ower;

whi1e(fahr<*upper)<

,eM

printfC%3.0fX€.1f\ntfahr>ce1siustfahr));

fahr-fahr?step;

}

>

/?celsmstconvertfshrintoce19ius',

floatcelsiuaCflootfahr)

<

return(5.0/9.0)?<fahr-32<0}j

}

我們采用一個(gè)函數(shù)把華氏溫度轉(zhuǎn)換為攝氏溫度。這個(gè)函數(shù)名為celsius,它的輸入?yún)?shù)

是一個(gè)浮點(diǎn)數(shù),返回值也是一個(gè)浮點(diǎn)數(shù)。這個(gè)函數(shù)將通過return語句返回表達(dá)式的值。有時(shí),

表達(dá)式是一個(gè)簡單變量,例如power函數(shù)(參見教材第19頁);但有時(shí)我們也會(huì)使用一個(gè)比

較復(fù)雜的表達(dá)式,例如這里的Celsius函數(shù),因?yàn)檫@樣做可以使所有工作都在return語句

中完成。

因?yàn)楹瘮?shù)Celsius的輸入?yún)?shù)是一個(gè)浮點(diǎn)數(shù),它的返回值也是一個(gè)浮點(diǎn)數(shù),所以我們把

它聲明為如下的形式:.

fleetcelslusCfloetfahr>;

練習(xí)1-16(教材第22頁)

修改打印最長文本行的程序的主程序main,使之可以打印任意長度的輸入行的長度,并

14

盡可能多地打印文本。

/inc1ude<stdio.h>

*defineMAXLINE1000八maximuminput1inesite

intget1ineCcher1ine[]tintmax]1ne);

voidcopyCcharto[1vcharfrom[));

/*printlongestinputline?/

main()

<

intlen;

溫馨提示

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

評(píng)論

0/150

提交評(píng)論