2015軟考程序設(shè)計(jì)知識(shí)點(diǎn)(8)

字號(hào):

格式輸出函數(shù)
    格式輸出函數(shù)printf()的作用是將輸出項(xiàng)接指定的格式排版輸出到標(biāo)準(zhǔn)設(shè)備上(通常是終端顯示屏)。調(diào)用printf()函數(shù)的一般形式為
    printf(格式控制字符串,表達(dá)式,表達(dá)式,……)
    其中格式控制字符率是字符串表達(dá)式,通常是由用一對(duì)雙引號(hào)括起來(lái)的字符串常量。它包含三類字符:普通字符、轉(zhuǎn)義字符和格式轉(zhuǎn)換說(shuō)明,它們的作用分別如下:
    (l)普通字符,要求按原樣輸出。
    (2)轉(zhuǎn)義字符,要求技轉(zhuǎn)義字符的意義輸出,如‘\n’,表示輸出時(shí)回車換行,‘\b’表示退格等。
    (3)格式轉(zhuǎn)換說(shuō)明,以字符%開(kāi)頭至格式符結(jié)束的字符列組成,其一般形式為
    %[-」「+」「」[#」「W][。p][h/l/L]輸出格式符
    其中用方括號(hào)括住的內(nèi)容是格式修飾說(shuō)明,可以缺省(不出現(xiàn)),如“%d”、“% 7.5f”等。每個(gè)格式轉(zhuǎn)換說(shuō)明對(duì)應(yīng)一個(gè)輸出項(xiàng),輸出項(xiàng)可以是常量、變量或表達(dá)式。格式轉(zhuǎn)換說(shuō)明的作用是將對(duì)應(yīng)輸出項(xiàng)的內(nèi)容按格式符要求產(chǎn)生出字符列,并按格式修飾說(shuō)明排版輸出。
    輸出格式符共有16個(gè),有12種不同的格式,考試大綱只要求九種。
    常用輸出格式符表
    格式符 意 義
    d或i 整型數(shù)據(jù)以十進(jìn)制形式輸出
    o 無(wú)符號(hào)整型數(shù)據(jù)以八進(jìn)制形式輸出
    X 無(wú)符號(hào)整型數(shù)據(jù)以十六進(jìn)制形式輸出
    U 元符號(hào)整型數(shù)據(jù)以十進(jìn)制形式輸出
    C 字符的ASCll碼數(shù)據(jù),輸出對(duì)應(yīng)的字符
    S 輸出字符串
    f 以“整數(shù)部分。小數(shù)部分”形式輸出實(shí)型數(shù)據(jù)
    e 以[-]n.nnnnne±xx輸出實(shí)型數(shù)據(jù)
    g 以f或e格式輸出
    說(shuō)明:(1)x格式符同。格式符一樣,把符號(hào)位作為數(shù)的一部分輸出。對(duì)于x格式,用字符a、b、c、d、e、f(或A、B、C、D、E、F)表示9之后的六個(gè)十六進(jìn)制數(shù)字符。
    (2)一個(gè)整數(shù),只要它的位在0-255范圍內(nèi),也可以用字符形式輸出,輸出以該整數(shù)為ASCII代碼的字符。反之,一個(gè)字符數(shù)據(jù)也可以用整數(shù)形式輸出,輸出該字符的ASCII代碼值。
    (3)f、e和g格式符用于輸出實(shí)型數(shù)據(jù),格式轉(zhuǎn)換時(shí)有四舍五人處理。對(duì)于f格式,小數(shù)點(diǎn)后的數(shù)字個(gè)數(shù)可由格式修飾說(shuō)明p指定,若p為0,不顯示小數(shù)點(diǎn)。用e格式輸出時(shí),對(duì)于非0實(shí)數(shù),小數(shù)點(diǎn)前有一位非零數(shù)字,輸出格式中的有效位數(shù)可由格式修飾說(shuō)明p指定;字符e(或E)之后是指數(shù),指數(shù)部分至少包含兩個(gè)數(shù)字。若輸出值的絕對(duì)值不小于 1E+100,則指數(shù)部分多于兩位數(shù)字。
    g格式能根據(jù)表示數(shù)據(jù)所需字符的多少自動(dòng)選擇f格式或e(或E) 格式輸出實(shí)數(shù),選擇是以輸出時(shí)所需字符數(shù)多少為標(biāo)準(zhǔn)。
    格式修飾說(shuō)明有七種,教材只介紹其中四種,它們的意義分別說(shuō)明如下:
    (1)W域?qū)捳f(shuō)明,W是一個(gè)十進(jìn)制整數(shù),表示輸出字段的字符數(shù)。若轉(zhuǎn)換后需要的字符個(gè)數(shù)比給出的W多,則以實(shí)際需要為準(zhǔn);若轉(zhuǎn)換后需要的字符數(shù)比W少,就在左邊用填充字符補(bǔ)足(若給出左邊對(duì)齊標(biāo)志(-),則在右邊補(bǔ)填充字符人通常用空白符作填充字符,若十進(jìn)制整數(shù)W之前有前導(dǎo)0(此0不表示以八進(jìn)制數(shù)給出字段寬度),則以字符0作填充字符。
    (2)- 左對(duì)齊標(biāo)志,當(dāng)轉(zhuǎn)換后字符個(gè)數(shù)少于W時(shí),在W所限定的字段寬度內(nèi),轉(zhuǎn)換所得字符列左對(duì)齊,右邊補(bǔ)填充符。缺省時(shí),右對(duì)齊,左邊補(bǔ)填充符。
    (3)。p,其中p也是十進(jìn)制整數(shù)。
    對(duì)于g或e格式輸出,p指明輸出精度(有效數(shù)字位數(shù)),可以缺省,缺省值依賴于系統(tǒng)的規(guī)定(下面的例子設(shè)p的缺省值為6)。
    對(duì)于f格式輸出,p指明輸出字符列的小數(shù)點(diǎn)之后的數(shù)字個(gè)數(shù),可以缺省。
    對(duì)于S格式輸出,p指明最多輸出字符率的前p個(gè)字符,多余截?cái)唷H笔r(shí),字符串的內(nèi)容全部輸出。
    對(duì)于d.i、O、u、x和X,表示至少出現(xiàn)的數(shù)字個(gè)數(shù)。
    同域?qū)捳f(shuō)明一樣,p也可以是字符*,而實(shí)際值由后面一個(gè)輸出項(xiàng)的整數(shù)值給出,若該值為負(fù)值,相當(dāng)于沒(méi)有給出p.
    (4) l指明輸出項(xiàng)的類型。
    長(zhǎng)度修飾符l用于格式符d、i、o、u、X,表示對(duì)應(yīng)的輸出項(xiàng)是長(zhǎng)整型或無(wú)符號(hào)長(zhǎng)整型。
    以下是格式輸出的一些例子。例如,int i=1234; long j=1234567L;
    printf(“%d,%+6d,%06d,%-6d, %5ld”,i,i,i,i,j)
    將輸出:1234,+1234,00l234,1234,1234567
    注意:對(duì)于long型數(shù)據(jù)輸出,必須在格式符之前有長(zhǎng)度修飾符l,表明輸出long型數(shù)據(jù)。
    若 int k=045;long p=-1L;printf(“%#o,%4o,%6lo”,k,k,p)
    將輸出:045, 45, 37777777777
    而printf(“%#x,%4x,%6lx”,k,k,p)將輸出:0x25, 25, FFFFFFFF
    若 unsigned int u= 65535u;prinif(“%d,%4u,%ln‘,u,u,p)
    將輸出:-l, 65535, 4294967295
    若 char ch1= 045, ch2=‘a(chǎn)’;printf(“%c,%-3c,%2c”,ch1,ch2,ch2)
    將輸出:%,a, a
    若 char s[]==“ABCDEF‘;printf(”%3s,%4.2s,%-7.4s,%.5s“,s,s,s,s)
    將輸出:ABCDEF, AB, ABCD, ABCDE
    若 float f=123.4567f; double d=123.456789;
    printf(“%。4f,%8.3f,%-7.2f,%。7f”,f,f,f,d)
    將輸出:123.4567, 123.457, 123.46, 123.4567890
    而 printf(“%。6e,%10.2e,%-10.2e,%.2e,%.9e”,f,f, f,f,d)
    將輸出:1.23457e+02, 1.2e+02,1.2e+02,l.2e+02, 1.23456789e+02
    注意:實(shí)型數(shù)據(jù)的有效位數(shù),不要以為凡是打印(顯示)的數(shù)字都是準(zhǔn)確的。一般地,float型只有7位有效數(shù)字,double型有15位有效數(shù)字。實(shí)際上,因計(jì)算過(guò)程中的誤差積累,通常不能達(dá)到所說(shuō)的有效位數(shù)。]
    另外,要注意%g格式的特殊性,當(dāng)它選擇“整數(shù)部分。小數(shù)部分”形式時(shí),因格式修飾說(shuō)明。p在e格式中的意義是指明精度,所以p的值是整數(shù)部分位數(shù)與小數(shù)部分位數(shù)之和(不是f格式中的小數(shù)位數(shù))。如有
    float g1=12.34f,g2=0.0f;
    double d=123.456789, g=123456.789;
    printf(“%g,%G”,g1,g2);
    printf(“%f,%g,%g,%g,%.8g”‘,g1,g1,d,g,g)
    將輸出:
    12.34,0
    12.340000,12.34,123.457,123457,123456.79
    選擇結(jié)構(gòu)
    選擇結(jié)構(gòu)有單分支選擇結(jié)構(gòu)、雙分支選擇結(jié)構(gòu)和多分支選擇結(jié)構(gòu)。C語(yǔ)言提供相應(yīng)的if語(yǔ)句和switCh語(yǔ)句分別用來(lái)描述這些選擇結(jié)構(gòu)。
    1.單分支選擇語(yǔ)句
    單分支選擇語(yǔ)句有以下形式:
    if(表達(dá)式)
    語(yǔ)句
    這種形式的語(yǔ)句執(zhí)行過(guò)程是:
    (l)計(jì)算表達(dá)式的值;
    (2)測(cè)試表達(dá)式的值。若表達(dá)式的值非0,則執(zhí)行它的成分語(yǔ)句,并結(jié)束單分支選擇的執(zhí)行;若表達(dá)式的值為0,則立即結(jié)束單分支選擇的執(zhí)行。
    2.雙分支選擇語(yǔ)句
    漢分支選擇語(yǔ)句有以下形式:
    if(表達(dá)式)
    語(yǔ)句1
    else
    語(yǔ)句2
    雙分支選擇語(yǔ)句根據(jù)給定的選擇條件表達(dá)式值為非0或?yàn)?兩種情況,從兩個(gè)供選擇的成分語(yǔ)句中自動(dòng)選取一個(gè)成分語(yǔ)句執(zhí)行。雙分支選擇語(yǔ)句的執(zhí)行過(guò)程是:
    (1)計(jì)算表達(dá)式的值;
    (2)測(cè)試表達(dá)式的值并選擇執(zhí)行語(yǔ)句。若表達(dá)式的值非0,則執(zhí)行語(yǔ)句1,并結(jié)束雙分支選擇語(yǔ)句;否則執(zhí)行語(yǔ)句2,并結(jié)束雙分支選擇語(yǔ)句。
    注意;無(wú)論條件表達(dá)式的值為何值,只能執(zhí)行語(yǔ)句1或語(yǔ)句2中的一個(gè)。當(dāng)雙分文選擇語(yǔ)句中的else之后的語(yǔ)句2為空語(yǔ)句時(shí),就變成單分支選擇語(yǔ)句。
    單分文選擇語(yǔ)句和雙分支選擇語(yǔ)句統(tǒng)稱且語(yǔ)句。在if語(yǔ)句中的語(yǔ)句、語(yǔ)句1和語(yǔ)句2可以是任何語(yǔ)句。當(dāng)它們中的某一個(gè)需用語(yǔ)句序列描述時(shí),必須將這語(yǔ)句序列寫成復(fù)合語(yǔ)句。當(dāng)它們中的某一個(gè)又是if語(yǔ)句時(shí),就呈現(xiàn)嵌套的if語(yǔ)句形式。這時(shí)應(yīng)注意else與if的對(duì)應(yīng)關(guān)系。C語(yǔ)言約定else總是與它前面最接近的if對(duì)應(yīng)。
    為正確書寫if語(yǔ)句,特別說(shuō)明以下幾點(diǎn):
    (1)若if語(yǔ)句中的語(yǔ)句、語(yǔ)句1、語(yǔ)句2是一個(gè)簡(jiǎn)單語(yǔ)句,則這些簡(jiǎn)單語(yǔ)句之后會(huì)有一個(gè)分號(hào),這是C語(yǔ)言對(duì)這些簡(jiǎn)單語(yǔ)句的要求。
    (2)若if語(yǔ)句中的語(yǔ)句、語(yǔ)句l、語(yǔ)句2要用語(yǔ)句序列(即為順序結(jié)構(gòu))來(lái)實(shí)現(xiàn),則必須將它們改寫成復(fù)合語(yǔ)句,即邏輯上把它們變成一個(gè)語(yǔ)句。
    (3) 在if語(yǔ)句中,每個(gè)else總要與它前面的if對(duì)應(yīng),不可能出現(xiàn)沒(méi)有對(duì)應(yīng)if的else.