順序結(jié)構(gòu)程序設(shè)計(jì)課件_第1頁(yè)
順序結(jié)構(gòu)程序設(shè)計(jì)課件_第2頁(yè)
順序結(jié)構(gòu)程序設(shè)計(jì)課件_第3頁(yè)
順序結(jié)構(gòu)程序設(shè)計(jì)課件_第4頁(yè)
順序結(jié)構(gòu)程序設(shè)計(jì)課件_第5頁(yè)
已閱讀5頁(yè),還剩67頁(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)介

1、4.1 C語(yǔ)句概述語(yǔ)句概述4.2 程序的三種基本結(jié)構(gòu)程序的三種基本結(jié)構(gòu)4.3 賦值語(yǔ)句賦值語(yǔ)句4.4 數(shù)據(jù)輸入輸出的概念及在語(yǔ)言中的實(shí)現(xiàn)數(shù)據(jù)輸入輸出的概念及在語(yǔ)言中的實(shí)現(xiàn)4.5 字符數(shù)據(jù)的輸入輸出字符數(shù)據(jù)的輸入輸出4.6 格式輸入與輸出格式輸入與輸出4.7 順序結(jié)構(gòu)程序設(shè)計(jì)舉例順序結(jié)構(gòu)程序設(shè)計(jì)舉例習(xí)題習(xí)題第第4章章 最簡(jiǎn)單的最簡(jiǎn)單的c程序設(shè)計(jì)程序設(shè)計(jì)順序程序設(shè)計(jì)順序程序設(shè)計(jì)在上一章介紹了程序中用到的一些基本要素在上一章介紹了程序中用到的一些基本要素(常量、變量、運(yùn)算符、表達(dá)式等常量、變量、運(yùn)算符、表達(dá)式等),它們是,它們是構(gòu)成程序的基本成分。在第構(gòu)成程序的基本成分。在第1章中已經(jīng)介紹章中已經(jīng)介

2、紹了幾個(gè)簡(jiǎn)單的了幾個(gè)簡(jiǎn)單的c程序。本章將介紹為編寫簡(jiǎn)程序。本章將介紹為編寫簡(jiǎn)單的程序所必需的一些內(nèi)容。單的程序所必需的一些內(nèi)容。4.1 C語(yǔ)句概述語(yǔ)句概述 和其他高級(jí)語(yǔ)言一樣,和其他高級(jí)語(yǔ)言一樣,c語(yǔ)言的語(yǔ)句用來(lái)向計(jì)算機(jī)系統(tǒng)語(yǔ)言的語(yǔ)句用來(lái)向計(jì)算機(jī)系統(tǒng)發(fā)出操作指令。一個(gè)語(yǔ)句經(jīng)編譯后產(chǎn)生若干條機(jī)器指發(fā)出操作指令。一個(gè)語(yǔ)句經(jīng)編譯后產(chǎn)生若干條機(jī)器指令。一個(gè)實(shí)際的程序應(yīng)當(dāng)包含若干語(yǔ)句。應(yīng)當(dāng)指出,令。一個(gè)實(shí)際的程序應(yīng)當(dāng)包含若干語(yǔ)句。應(yīng)當(dāng)指出,c語(yǔ)句都是用來(lái)完成一定操作任務(wù)的。聲明部分的內(nèi)語(yǔ)句都是用來(lái)完成一定操作任務(wù)的。聲明部分的內(nèi)容不應(yīng)稱為語(yǔ)句。如:容不應(yīng)稱為語(yǔ)句。如:int a;不是一個(gè)不是一個(gè)c語(yǔ)句,

3、它不產(chǎn)語(yǔ)句,它不產(chǎn)生機(jī)器操作,而只是對(duì)變量的定義。從第生機(jī)器操作,而只是對(duì)變量的定義。從第1章已知,章已知,一個(gè)函數(shù)包含聲明部分和執(zhí)行部分,執(zhí)行部分即由語(yǔ)一個(gè)函數(shù)包含聲明部分和執(zhí)行部分,執(zhí)行部分即由語(yǔ)句組成。句組成。c程序結(jié)構(gòu)可以用圖程序結(jié)構(gòu)可以用圖4.1表示。即一個(gè)表示。即一個(gè)c程序可程序可以由若干個(gè)源程序文件以由若干個(gè)源程序文件(分別進(jìn)行編譯的文件模塊分別進(jìn)行編譯的文件模塊)組組成,一個(gè)源文件可以由若干個(gè)函數(shù)和預(yù)處理命令以及成,一個(gè)源文件可以由若干個(gè)函數(shù)和預(yù)處理命令以及全局變量聲明部分組成全局變量聲明部分組成(關(guān)于關(guān)于“全局變量全局變量”見(jiàn)第見(jiàn)第7章,章,“預(yù)編譯命令預(yù)編譯命令”見(jiàn)第見(jiàn)第8

4、章章),一個(gè)函數(shù)由數(shù)據(jù)定義部分,一個(gè)函數(shù)由數(shù)據(jù)定義部分和執(zhí)行語(yǔ)句組成。和執(zhí)行語(yǔ)句組成。圖圖4.1在第在第2章中已經(jīng)說(shuō)明,程序應(yīng)該包括數(shù)據(jù)描述章中已經(jīng)說(shuō)明,程序應(yīng)該包括數(shù)據(jù)描述(由聲由聲明部分來(lái)實(shí)現(xiàn)明部分來(lái)實(shí)現(xiàn))和數(shù)據(jù)操作和數(shù)據(jù)操作(由語(yǔ)句來(lái)實(shí)現(xiàn)由語(yǔ)句來(lái)實(shí)現(xiàn))。數(shù)據(jù)。數(shù)據(jù)描述主要定義數(shù)據(jù)結(jié)構(gòu)描述主要定義數(shù)據(jù)結(jié)構(gòu)(用數(shù)據(jù)類型表示用數(shù)據(jù)類型表示)和數(shù)據(jù)和數(shù)據(jù)初值。數(shù)據(jù)操作的任務(wù)是對(duì)已提供的數(shù)據(jù)進(jìn)行加初值。數(shù)據(jù)操作的任務(wù)是對(duì)已提供的數(shù)據(jù)進(jìn)行加工。工。C語(yǔ)句可以分為以下語(yǔ)句可以分為以下5類:類:(1) 控制語(yǔ)句,完成一定的控制功能??刂普Z(yǔ)句,完成一定的控制功能。c只有只有9種控種控制語(yǔ)句,它們是:制語(yǔ)句

5、,它們是: if()else(條件語(yǔ)句條件語(yǔ)句) for() (循環(huán)語(yǔ)句循環(huán)語(yǔ)句) hile() (循環(huán)語(yǔ)句循環(huán)語(yǔ)句) dohile() (循環(huán)語(yǔ)句循環(huán)語(yǔ)句) continue (結(jié)束本次循環(huán)語(yǔ)句結(jié)束本次循環(huán)語(yǔ)句) break (中止執(zhí)行中止執(zhí)行switch或循環(huán)語(yǔ)句或循環(huán)語(yǔ)句) sitch (多分支選擇語(yǔ)句多分支選擇語(yǔ)句) goto (轉(zhuǎn)向語(yǔ)句轉(zhuǎn)向語(yǔ)句) return (從函數(shù)返回語(yǔ)句從函數(shù)返回語(yǔ)句)上面上面9種語(yǔ)句中的括號(hào)種語(yǔ)句中的括號(hào)()表示其中是一個(gè)條件,表示其中是一個(gè)條件,表示內(nèi)嵌的語(yǔ)句。例如:表示內(nèi)嵌的語(yǔ)句。例如:“if()else”的具體的具體語(yǔ)句可以寫成:語(yǔ)句可以寫成: if(

6、xy) z=x;else z=y;(2) 函數(shù)調(diào)用語(yǔ)句。由一次函數(shù)調(diào)用加一個(gè)分號(hào)構(gòu)函數(shù)調(diào)用語(yǔ)句。由一次函數(shù)調(diào)用加一個(gè)分號(hào)構(gòu)成一個(gè)語(yǔ)句,例如:成一個(gè)語(yǔ)句,例如:printf(this is a c stateent);(3) 表達(dá)式語(yǔ)句。由一個(gè)表達(dá)式構(gòu)成一個(gè)語(yǔ)句,表達(dá)式語(yǔ)句。由一個(gè)表達(dá)式構(gòu)成一個(gè)語(yǔ)句,最典型的是,由賦值表達(dá)式構(gòu)成一個(gè)賦值語(yǔ)句。最典型的是,由賦值表達(dá)式構(gòu)成一個(gè)賦值語(yǔ)句。a=3是一個(gè)賦值表達(dá)式,而是一個(gè)賦值表達(dá)式,而a=3;是一個(gè)賦值語(yǔ)句。可以看到一個(gè)表達(dá)式的最后加一是一個(gè)賦值語(yǔ)句??梢钥吹揭粋€(gè)表達(dá)式的最后加一個(gè)分號(hào)就成了一個(gè)語(yǔ)句。一個(gè)語(yǔ)句必須在最后出個(gè)分號(hào)就成了一個(gè)語(yǔ)句。一個(gè)語(yǔ)句必

7、須在最后出現(xiàn)分號(hào),分號(hào)是語(yǔ)句中不可缺少的一部分現(xiàn)分號(hào),分號(hào)是語(yǔ)句中不可缺少的一部分(而不而不像像pascal語(yǔ)言那樣,分號(hào)只是語(yǔ)句間的分隔符號(hào)語(yǔ)言那樣,分號(hào)只是語(yǔ)句間的分隔符號(hào))。例如:例如:i=i+1(是表達(dá)式,不是語(yǔ)句是表達(dá)式,不是語(yǔ)句)i=i+1;(是語(yǔ)句是語(yǔ)句)任何表達(dá)式都可以加上分號(hào)而成為語(yǔ)句,例如任何表達(dá)式都可以加上分號(hào)而成為語(yǔ)句,例如i+;是一語(yǔ)句,作用是使是一語(yǔ)句,作用是使i值加值加1。又如。又如x+y;也是一;也是一個(gè)語(yǔ)句,作用是完成個(gè)語(yǔ)句,作用是完成x+y的操作,它是合法的,的操作,它是合法的,但是并不把但是并不把x+y的和賦給另一變量,所以它并無(wú)的和賦給另一變量,所以它并

8、無(wú)實(shí)際意義。實(shí)際意義。表達(dá)式能構(gòu)成語(yǔ)句是表達(dá)式能構(gòu)成語(yǔ)句是c語(yǔ)言的一個(gè)重要特色。其實(shí)語(yǔ)言的一個(gè)重要特色。其實(shí)“函數(shù)調(diào)用語(yǔ)句函數(shù)調(diào)用語(yǔ)句”也是屬于表達(dá)式語(yǔ)句,因?yàn)楹彩菍儆诒磉_(dá)式語(yǔ)句,因?yàn)楹瘮?shù)調(diào)用數(shù)調(diào)用(如如sin(x)也屬于表達(dá)式的一種。只是為了也屬于表達(dá)式的一種。只是為了便于理解和使用,我們把便于理解和使用,我們把“函數(shù)調(diào)用語(yǔ)句函數(shù)調(diào)用語(yǔ)句”和和“表達(dá)式語(yǔ)句表達(dá)式語(yǔ)句”分開(kāi)來(lái)說(shuō)明。由于分開(kāi)來(lái)說(shuō)明。由于c程序中大多程序中大多數(shù)語(yǔ)句是表達(dá)式語(yǔ)句數(shù)語(yǔ)句是表達(dá)式語(yǔ)句(包括函數(shù)調(diào)用語(yǔ)句包括函數(shù)調(diào)用語(yǔ)句),所以,所以有人把有人把c語(yǔ)言稱作語(yǔ)言稱作“表達(dá)式語(yǔ)言表達(dá)式語(yǔ)言”。(4) 空語(yǔ)句。下面是一個(gè)空語(yǔ)句

9、:空語(yǔ)句。下面是一個(gè)空語(yǔ)句:;即只有一個(gè)分號(hào)的語(yǔ)句,它什么也不做。有時(shí)用來(lái)即只有一個(gè)分號(hào)的語(yǔ)句,它什么也不做。有時(shí)用來(lái)做被轉(zhuǎn)向點(diǎn),或循環(huán)語(yǔ)句中的循環(huán)體做被轉(zhuǎn)向點(diǎn),或循環(huán)語(yǔ)句中的循環(huán)體(循環(huán)體是循環(huán)體是空語(yǔ)句,表示循環(huán)體什么也不做空語(yǔ)句,表示循環(huán)體什么也不做)。(5) 可以用可以用 把一些語(yǔ)句括起來(lái)成為復(fù)合語(yǔ)句,把一些語(yǔ)句括起來(lái)成為復(fù)合語(yǔ)句,又稱分程序。如下面是一個(gè)復(fù)合語(yǔ)句。又稱分程序。如下面是一個(gè)復(fù)合語(yǔ)句。z=x+y;t=z/100;printf(%f,t);注意:復(fù)合語(yǔ)句中最后一個(gè)語(yǔ)句中最后的分號(hào)不能注意:復(fù)合語(yǔ)句中最后一個(gè)語(yǔ)句中最后的分號(hào)不能忽略不寫忽略不寫(這是和這是和pascal不同的

10、不同的)。C語(yǔ)言允許一行寫幾個(gè)語(yǔ)句,也允許一個(gè)語(yǔ)句拆開(kāi)語(yǔ)言允許一行寫幾個(gè)語(yǔ)句,也允許一個(gè)語(yǔ)句拆開(kāi)寫在幾行上,書寫格式無(wú)固定要求寫在幾行上,書寫格式無(wú)固定要求(fortran、cobol有嚴(yán)格要求有嚴(yán)格要求)。4.2 程序的三種基本結(jié)構(gòu)程序的三種基本結(jié)構(gòu)為了提高程序設(shè)計(jì)的質(zhì)量和效率,現(xiàn)在普遍采用結(jié)為了提高程序設(shè)計(jì)的質(zhì)量和效率,現(xiàn)在普遍采用結(jié)構(gòu)化程序設(shè)計(jì)方法。結(jié)構(gòu)化程序由若干個(gè)基本結(jié)構(gòu)化程序設(shè)計(jì)方法。結(jié)構(gòu)化程序由若干個(gè)基本結(jié)構(gòu)組成。每一個(gè)基本結(jié)構(gòu)可以包含構(gòu)組成。每一個(gè)基本結(jié)構(gòu)可以包含 一個(gè)或若干個(gè)一個(gè)或若干個(gè)語(yǔ)句。有三種基本結(jié)構(gòu)語(yǔ)句。有三種基本結(jié)構(gòu):(1) 順序結(jié)構(gòu)順序結(jié)構(gòu),見(jiàn)圖見(jiàn)圖4.2。先執(zhí)行

11、。先執(zhí)行a操作操作,再執(zhí)行再執(zhí)行b操作操作,兩者是順序執(zhí)行的關(guān)系。圖中兩者是順序執(zhí)行的關(guān)系。圖中(b)是是ns結(jié)構(gòu)化流程結(jié)構(gòu)化流程圖圖(下同下同)。圖圖4.2圖圖4.3(2) 選擇結(jié)構(gòu)選擇結(jié)構(gòu),見(jiàn)圖見(jiàn)圖4.3。p代表一個(gè)條件代表一個(gè)條件,當(dāng)當(dāng)p條件成條件成立立(或稱為或稱為“真真”)時(shí)執(zhí)行時(shí)執(zhí)行a,否則執(zhí)行否則執(zhí)行b。注意。注意,只能只能執(zhí)行執(zhí)行a或或b之一。兩條路徑匯合在一起然后出口。之一。兩條路徑匯合在一起然后出口。(3) 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu),有兩種循環(huán)結(jié)構(gòu)有兩種循環(huán)結(jié)構(gòu): 當(dāng)型循環(huán)結(jié)構(gòu)當(dāng)型循環(huán)結(jié)構(gòu),見(jiàn)圖見(jiàn)圖4.4。當(dāng)。當(dāng)p條件成立條件成立(“真真”)時(shí)時(shí),反復(fù)執(zhí)行反復(fù)執(zhí)行a操作。直到操作。

12、直到p為為“假假”時(shí)才停止循環(huán)。時(shí)才停止循環(huán)。 直到型循環(huán)結(jié)構(gòu)直到型循環(huán)結(jié)構(gòu),見(jiàn)圖見(jiàn)圖4.5。先執(zhí)行。先執(zhí)行a操作操作,再判斷再判斷p是否為是否為“假假”,若若p為為“假假”,再執(zhí)行再執(zhí)行a,如此反復(fù)如此反復(fù),直直到到p為為“真真”為止。為止。圖圖4.4圖圖4.5由選擇結(jié)構(gòu)可以派生出另一種基本結(jié)構(gòu)由選擇結(jié)構(gòu)可以派生出另一種基本結(jié)構(gòu): 多分支選多分支選擇結(jié)構(gòu)擇結(jié)構(gòu),見(jiàn)圖見(jiàn)圖4.6。根據(jù)根據(jù)k的值的值(k1,k2,kn)不同而決定執(zhí)行不同而決定執(zhí)行a1,a2,an之一。之一。已經(jīng)證明已經(jīng)證明,由以上基本結(jié)構(gòu)組成的程序能處理任何由以上基本結(jié)構(gòu)組成的程序能處理任何復(fù)雜的問(wèn)題。上面圖復(fù)雜的問(wèn)題。上面圖4

13、.2圖圖4.7中方框中的中方框中的a,b,a1,an等可以是一個(gè)簡(jiǎn)單的語(yǔ)句等可以是一個(gè)簡(jiǎn)單的語(yǔ)句,也可以又也可以又是一個(gè)基本結(jié)構(gòu)。例如是一個(gè)基本結(jié)構(gòu)。例如,圖圖4.7是一個(gè)順序結(jié)構(gòu)是一個(gè)順序結(jié)構(gòu),它它由兩個(gè)操作順序組成。虛線框內(nèi)是一個(gè)當(dāng)型循環(huán)由兩個(gè)操作順序組成。虛線框內(nèi)是一個(gè)當(dāng)型循環(huán)結(jié)構(gòu)結(jié)構(gòu),可以用可以用“b”表示表示,因此圖因此圖4.7就可以理解為圖就可以理解為圖4.2(a)所示的順序結(jié)構(gòu)。所示的順序結(jié)構(gòu)。圖圖4.6 圖圖4.7關(guān)于三種基本結(jié)構(gòu)的特征以及結(jié)構(gòu)化程序設(shè)計(jì)方法關(guān)于三種基本結(jié)構(gòu)的特征以及結(jié)構(gòu)化程序設(shè)計(jì)方法,讀者可能已在學(xué)習(xí)其他高級(jí)語(yǔ)言程序設(shè)計(jì)時(shí)學(xué)習(xí)讀者可能已在學(xué)習(xí)其他高級(jí)語(yǔ)言程序設(shè)

14、計(jì)時(shí)學(xué)習(xí)過(guò)過(guò),在此不再重復(fù)。只是應(yīng)當(dāng)強(qiáng)調(diào)說(shuō)明在此不再重復(fù)。只是應(yīng)當(dāng)強(qiáng)調(diào)說(shuō)明,在今后的在今后的程序設(shè)計(jì)中應(yīng)當(dāng)采用結(jié)構(gòu)化程序設(shè)計(jì)方法。在本程序設(shè)計(jì)中應(yīng)當(dāng)采用結(jié)構(gòu)化程序設(shè)計(jì)方法。在本章中章中,我們將介紹幾種最基本的語(yǔ)句我們將介紹幾種最基本的語(yǔ)句,以及用它們以及用它們構(gòu)成順序結(jié)構(gòu)的程序。在第構(gòu)成順序結(jié)構(gòu)的程序。在第4、第、第5章介紹選擇結(jié)章介紹選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的程序設(shè)計(jì)。構(gòu)和循環(huán)結(jié)構(gòu)的程序設(shè)計(jì)。4.3 賦值語(yǔ)句賦值語(yǔ)句前已介紹,賦值語(yǔ)句是由賦值表達(dá)式加上一個(gè)分號(hào)前已介紹,賦值語(yǔ)句是由賦值表達(dá)式加上一個(gè)分號(hào)構(gòu)成。由于賦值語(yǔ)句應(yīng)用十分普遍,所以專門再構(gòu)成。由于賦值語(yǔ)句應(yīng)用十分普遍,所以專門再討論一下。討

15、論一下。C語(yǔ)言的賦值語(yǔ)句具有其他高級(jí)語(yǔ)言的賦值語(yǔ)句的語(yǔ)言的賦值語(yǔ)句具有其他高級(jí)語(yǔ)言的賦值語(yǔ)句的一切特點(diǎn)和功能。但也應(yīng)當(dāng)注意到它們的不同:一切特點(diǎn)和功能。但也應(yīng)當(dāng)注意到它們的不同:(1) C語(yǔ)言中的賦值號(hào)語(yǔ)言中的賦值號(hào)“=”是一個(gè)運(yùn)算符,在其他是一個(gè)運(yùn)算符,在其他大多數(shù)語(yǔ)言中賦值號(hào)不是運(yùn)算符。大多數(shù)語(yǔ)言中賦值號(hào)不是運(yùn)算符。(2) 關(guān)于賦值表達(dá)式與賦值語(yǔ)句的概念,其他多數(shù)關(guān)于賦值表達(dá)式與賦值語(yǔ)句的概念,其他多數(shù)高級(jí)語(yǔ)言沒(méi)有高級(jí)語(yǔ)言沒(méi)有“賦值表達(dá)式賦值表達(dá)式”一概念。作為賦值一概念。作為賦值表達(dá)式可以包括在其他表達(dá)式之中,例如:表達(dá)式可以包括在其他表達(dá)式之中,例如:if(a=b)0)t=a;按語(yǔ)法規(guī)

16、定按語(yǔ)法規(guī)定if后面的后面的()內(nèi)是一個(gè)條件,例如可以內(nèi)是一個(gè)條件,例如可以是:是:“if(x0)”?,F(xiàn)在在。現(xiàn)在在x的位置上換上一個(gè)賦的位置上換上一個(gè)賦值表達(dá)式值表達(dá)式“a=b”,其作用是:先進(jìn)行賦值運(yùn)算,其作用是:先進(jìn)行賦值運(yùn)算(將將b的值賦給的值賦給a),然后判斷,然后判斷a是否大于是否大于0,如大于,如大于0,執(zhí)行執(zhí)行t=a。在。在if語(yǔ)句中的語(yǔ)句中的“a=b”不是賦值語(yǔ)句而是不是賦值語(yǔ)句而是賦值表達(dá)式,這樣寫是合法的。如果寫成賦值表達(dá)式,這樣寫是合法的。如果寫成if(a=b;)0)t=a;就錯(cuò)了。在;就錯(cuò)了。在if的條件中不能包的條件中不能包含賦值語(yǔ)句。由此可以看到,含賦值語(yǔ)句。由此

17、可以看到,c把賦值語(yǔ)句和賦把賦值語(yǔ)句和賦值表達(dá)式區(qū)別開(kāi)來(lái),增加了表達(dá)式的種類,使表值表達(dá)式區(qū)別開(kāi)來(lái),增加了表達(dá)式的種類,使表達(dá)式的應(yīng)用幾乎達(dá)式的應(yīng)用幾乎“無(wú)孔不入無(wú)孔不入”,能實(shí)現(xiàn)其他語(yǔ)言,能實(shí)現(xiàn)其他語(yǔ)言中難以實(shí)現(xiàn)的功能中難以實(shí)現(xiàn)的功能.4.4 數(shù)據(jù)輸入輸出的概念及在數(shù)據(jù)輸入輸出的概念及在C語(yǔ)言中的實(shí)現(xiàn)語(yǔ)言中的實(shí)現(xiàn)(1) 所謂輸入輸出是以計(jì)算機(jī)主機(jī)為主體而言的。從所謂輸入輸出是以計(jì)算機(jī)主機(jī)為主體而言的。從計(jì)算機(jī)向外部輸出設(shè)備計(jì)算機(jī)向外部輸出設(shè)備(如顯示屏、打印機(jī)、磁盤如顯示屏、打印機(jī)、磁盤等等)輸出數(shù)據(jù)稱為輸出數(shù)據(jù)稱為“輸出輸出” ,從外部向輸入設(shè)備,從外部向輸入設(shè)備(如鍵盤、磁盤、光盤、掃描

18、儀等如鍵盤、磁盤、光盤、掃描儀等)輸入數(shù)據(jù)稱為輸入數(shù)據(jù)稱為“輸入輸入”。(2) C語(yǔ)言本身不提供輸入輸出語(yǔ)句,輸入和輸出操語(yǔ)言本身不提供輸入輸出語(yǔ)句,輸入和輸出操作是由函數(shù)來(lái)實(shí)現(xiàn)的。在作是由函數(shù)來(lái)實(shí)現(xiàn)的。在c標(biāo)準(zhǔn)函數(shù)庫(kù)中提供了一標(biāo)準(zhǔn)函數(shù)庫(kù)中提供了一些輸入輸出函數(shù),例如,些輸入輸出函數(shù),例如,printf函數(shù)和函數(shù)和scanf函數(shù)。函數(shù)。讀者在使用它們時(shí),千萬(wàn)不要誤認(rèn)為它們是讀者在使用它們時(shí),千萬(wàn)不要誤認(rèn)為它們是C語(yǔ)語(yǔ)言提供的言提供的“輸入輸出語(yǔ)句輸入輸出語(yǔ)句”。printf和和scanf不是不是C語(yǔ)言的關(guān)鍵字,而只是函數(shù)的名字。實(shí)際上完全語(yǔ)言的關(guān)鍵字,而只是函數(shù)的名字。實(shí)際上完全可以不用可以不

19、用printf和和scanf這兩個(gè)名字,而另外編兩個(gè)這兩個(gè)名字,而另外編兩個(gè)輸入輸出函數(shù),輸入輸出函數(shù), 用其他的函數(shù)名。用其他的函數(shù)名。C提供的函數(shù)以提供的函數(shù)以庫(kù)的形式存放在系統(tǒng)中,它們不是庫(kù)的形式存放在系統(tǒng)中,它們不是c語(yǔ)言文本中的組語(yǔ)言文本中的組成部分。成部分。在第在第1章中曾介紹,不把輸入輸出作為章中曾介紹,不把輸入輸出作為C語(yǔ)言提供的語(yǔ)語(yǔ)言提供的語(yǔ)句的目的是使句的目的是使C語(yǔ)言編譯系統(tǒng)簡(jiǎn)單,因?yàn)閷⒄Z(yǔ)句翻譯語(yǔ)言編譯系統(tǒng)簡(jiǎn)單,因?yàn)閷⒄Z(yǔ)句翻譯成二進(jìn)制的指令是在編譯階段完成的,沒(méi)有輸入輸成二進(jìn)制的指令是在編譯階段完成的,沒(méi)有輸入輸出語(yǔ)句就可以避免在編譯階段處理與硬件有關(guān)的問(wèn)出語(yǔ)句就可以避免

20、在編譯階段處理與硬件有關(guān)的問(wèn)題,可以使編譯系統(tǒng)簡(jiǎn)化,而且通用性強(qiáng),可移植題,可以使編譯系統(tǒng)簡(jiǎn)化,而且通用性強(qiáng),可移植性好,對(duì)各種型號(hào)的計(jì)算機(jī)都適用,便于在各種計(jì)性好,對(duì)各種型號(hào)的計(jì)算機(jī)都適用,便于在各種計(jì)算機(jī)上實(shí)現(xiàn)。各種版本的算機(jī)上實(shí)現(xiàn)。各種版本的C語(yǔ)言函數(shù)庫(kù)是各計(jì)算機(jī)廠語(yǔ)言函數(shù)庫(kù)是各計(jì)算機(jī)廠商商(或軟件開(kāi)發(fā)公司或軟件開(kāi)發(fā)公司)針對(duì)某一類型計(jì)算機(jī)的情況編寫針對(duì)某一類型計(jì)算機(jī)的情況編寫的,并且已編譯成目標(biāo)文件的,并且已編譯成目標(biāo)文件(.obj文件文件)。它們?cè)谶B接。它們?cè)谶B接階段與由源程序階段與由源程序 經(jīng)編譯而得到的目標(biāo)文件相連接,經(jīng)編譯而得到的目標(biāo)文件相連接,生成一個(gè)可執(zhí)行的目標(biāo)程序。如果在

21、源程序中有生成一個(gè)可執(zhí)行的目標(biāo)程序。如果在源程序中有printf函函數(shù),在編譯時(shí)并不把它翻譯成目標(biāo)指令,而是在數(shù),在編譯時(shí)并不把它翻譯成目標(biāo)指令,而是在執(zhí)行階段中調(diào)用已被連接的函數(shù)庫(kù)中的執(zhí)行階段中調(diào)用已被連接的函數(shù)庫(kù)中的printf函函數(shù)。由于數(shù)。由于c編譯系統(tǒng)與編譯系統(tǒng)與c函數(shù)庫(kù)是分別進(jìn)行設(shè)計(jì)的,函數(shù)庫(kù)是分別進(jìn)行設(shè)計(jì)的,因此不同的計(jì)算機(jī)系統(tǒng)所提供函數(shù)的數(shù)量、名字因此不同的計(jì)算機(jī)系統(tǒng)所提供函數(shù)的數(shù)量、名字和功能是不完全相同的。不過(guò),有些通用的函數(shù)和功能是不完全相同的。不過(guò),有些通用的函數(shù)(如如printf和和scanf等等),各種計(jì)算機(jī)系統(tǒng)都提供,各種計(jì)算機(jī)系統(tǒng)都提供,成為各種計(jì)算機(jī)系統(tǒng)的標(biāo)準(zhǔn)

22、函數(shù)。成為各種計(jì)算機(jī)系統(tǒng)的標(biāo)準(zhǔn)函數(shù)。c語(yǔ)言函數(shù)庫(kù)語(yǔ)言函數(shù)庫(kù)中有一批中有一批“標(biāo)準(zhǔn)輸入輸出函數(shù)標(biāo)準(zhǔn)輸入輸出函數(shù)” ,它是以標(biāo)準(zhǔn)的,它是以標(biāo)準(zhǔn)的輸入輸出設(shè)備輸入輸出設(shè)備(一般為終端設(shè)備一般為終端設(shè)備)為輸入輸出對(duì)象為輸入輸出對(duì)象的。其中有:的。其中有:putchar(輸出字符輸出字符),getchar(輸入輸入字符字符),printf(格式輸出格式輸出),scanf(格式輸入格式輸入), puts(輸出字符串輸出字符串),gets(輸入字符串輸入字符串)。在本章中。在本章中介紹前面介紹前面4個(gè)最基本的輸入輸出函數(shù)。個(gè)最基本的輸入輸出函數(shù)。(3) 在使用在使用c語(yǔ)言庫(kù)函數(shù)時(shí),要用預(yù)編譯命令語(yǔ)言庫(kù)函數(shù)

23、時(shí),要用預(yù)編譯命令“include”將有關(guān)的將有關(guān)的“頭文件頭文件” 包括到用戶源文件中。包括到用戶源文件中。在頭文件中包含了與用到的函數(shù)有關(guān)的信息。例如在頭文件中包含了與用到的函數(shù)有關(guān)的信息。例如使用標(biāo)準(zhǔn)輸入輸出庫(kù)函數(shù)時(shí),要用到使用標(biāo)準(zhǔn)輸入輸出庫(kù)函數(shù)時(shí),要用到“stdio.h”文件。文件。文件后綴文件后綴“h” 是是head的縮寫,的縮寫,#include命令都是放命令都是放在程序的開(kāi)頭,因此這類文件被稱為在程序的開(kāi)頭,因此這類文件被稱為“頭文件頭文件” 。在調(diào)用標(biāo)準(zhǔn)輸入輸出庫(kù)函數(shù)時(shí),文件開(kāi)頭應(yīng)有以下在調(diào)用標(biāo)準(zhǔn)輸入輸出庫(kù)函數(shù)時(shí),文件開(kāi)頭應(yīng)有以下預(yù)編譯命令:預(yù)編譯命令:#include 或或#

24、include studio.hstudioh是是standard input & output的縮寫,它包含了的縮寫,它包含了與標(biāo)準(zhǔn)與標(biāo)準(zhǔn)i/o庫(kù)有關(guān)的變量定義和宏定義庫(kù)有關(guān)的變量定義和宏定義(有關(guān)預(yù)編譯有關(guān)預(yù)編譯命令見(jiàn)第命令見(jiàn)第7章章)??紤]到??紤]到printf和和scanf函數(shù)使用頻繁,函數(shù)使用頻繁,系統(tǒng)允許在使用這兩個(gè)函數(shù)時(shí)可不加系統(tǒng)允許在使用這兩個(gè)函數(shù)時(shí)可不加#include命令。命令。4.5 字符數(shù)據(jù)的輸入輸出字符數(shù)據(jù)的輸入輸出我們先介紹我們先介紹c標(biāo)準(zhǔn)標(biāo)準(zhǔn)i/o函數(shù)庫(kù)中最簡(jiǎn)單的、也是最容易理函數(shù)庫(kù)中最簡(jiǎn)單的、也是最容易理解的字符輸入輸出函數(shù)解的字符輸入輸出函數(shù)putchar()

25、和和getchar(),再介紹,再介紹格式輸入輸出函數(shù)格式輸入輸出函數(shù)printf()和和scanf()函數(shù)。函數(shù)。 4.5.1 putchar函數(shù)函數(shù)(字符輸出函數(shù)字符輸出函數(shù))putchar函數(shù)的作用是向終端輸出一個(gè)字符:例如函數(shù)的作用是向終端輸出一個(gè)字符:例如putchar(c);它輸出字符變量;它輸出字符變量c的值。的值。c可以是字符型可以是字符型變量或整型變量。變量或整型變量。例例4.1輸出單個(gè)字符。輸出單個(gè)字符。 #include main() char a,b,c; a=b;b=o;c=y; putchar(a);putchar(b);putchar(c); 運(yùn)行結(jié)果:運(yùn)行結(jié)果:

26、boy也可以輸出控制字符,如也可以輸出控制字符,如putchar(n)輸出一個(gè)換輸出一個(gè)換行符,使輸出的當(dāng)前位置移到下一行的開(kāi)頭。如行符,使輸出的當(dāng)前位置移到下一行的開(kāi)頭。如果將例果將例4.1程序最后一行改為程序最后一行改為putchar(a);putchar(n);putchar(b);putchar(n);putchar(c); putchar(n);則輸出結(jié)果為:則輸出結(jié)果為:b o y也可以輸出其他轉(zhuǎn)義字符,如:也可以輸出其他轉(zhuǎn)義字符,如:putchar(101)(輸出字符輸出字符a) putchar() (輸出單引號(hào)字符輸出單引號(hào)字符) putchar(015) (輸出回車,不換行,

27、使輸出輸出回車,不換行,使輸出的當(dāng)前位置移到本行開(kāi)頭的當(dāng)前位置移到本行開(kāi)頭)4.5.2 getchar函數(shù)函數(shù)(字符輸入函數(shù)字符輸入函數(shù))此函數(shù)的作用是從終端此函數(shù)的作用是從終端(或系統(tǒng)隱含指定的輸入設(shè)或系統(tǒng)隱含指定的輸入設(shè)備備)輸入一個(gè)字符。輸入一個(gè)字符。getchar函數(shù)沒(méi)有參數(shù),其一函數(shù)沒(méi)有參數(shù),其一般形式為般形式為getchar()函數(shù)的值就是從輸入設(shè)備得到的字符。例如:函數(shù)的值就是從輸入設(shè)備得到的字符。例如:例例4.2輸入單個(gè)字符輸入單個(gè)字符#include main() charc; c=getchar(); putchar(c); 在運(yùn)行時(shí),如果從鍵盤輸入字符在運(yùn)行時(shí),如果從鍵盤

28、輸入字符a并按回車鍵,就會(huì)在并按回車鍵,就會(huì)在屏幕上看到輸出的字符屏幕上看到輸出的字符a。a(輸入輸入a后,按后,按“回車回車”鍵,字符才送到內(nèi)存鍵,字符才送到內(nèi)存) a (輸出變量輸出變量c的值的值a)請(qǐng)注意,請(qǐng)注意,getchar()只能接收一個(gè)字符。只能接收一個(gè)字符。getchar函數(shù)得到的函數(shù)得到的字符可以賦給一個(gè)字符變量或整型變量,也可以不賦給字符可以賦給一個(gè)字符變量或整型變量,也可以不賦給任何變量,作為表達(dá)式的一部分。例如,例任何變量,作為表達(dá)式的一部分。例如,例4.2第第4、5行行可以用下面一行代替:可以用下面一行代替:putchar(getchar();因?yàn)橐驗(yàn)間etchar(

29、)的值為的值為a,因此,因此putchar函數(shù)輸出函數(shù)輸出a。也。也可以用可以用printf函數(shù)輸出:函數(shù)輸出:printf(”%c,getchar();請(qǐng)不要忘記,如果在一個(gè)函數(shù)中;請(qǐng)不要忘記,如果在一個(gè)函數(shù)中(今為今為main函數(shù)函數(shù))要調(diào)用要調(diào)用getchar函數(shù),應(yīng)該在該函數(shù)的前函數(shù),應(yīng)該在該函數(shù)的前面面(或本文件開(kāi)頭或本文件開(kāi)頭)加上加上“包含命令包含命令”#include4.6.1 printf函數(shù)函數(shù)(格式輸出函數(shù)格式輸出函數(shù))在前面各章節(jié)中已用到在前面各章節(jié)中已用到printf函數(shù),它的作用是向函數(shù),它的作用是向終端終端(或系統(tǒng)隱含指定的輸出設(shè)備或系統(tǒng)隱含指定的輸出設(shè)備)輸出若

30、干個(gè)任輸出若干個(gè)任意類型的數(shù)據(jù)意類型的數(shù)據(jù)(putchar只能輸出字符,而且只能只能輸出字符,而且只能是一個(gè)字符,而是一個(gè)字符,而printf可以輸出多個(gè)數(shù)據(jù),且為可以輸出多個(gè)數(shù)據(jù),且為任意類型任意類型)。1. printf函數(shù)的一般格式為函數(shù)的一般格式為printf(格式控制,輸出格式控制,輸出表列表列) 如:如:printf(%d, %cn,i,c) 括弧內(nèi)包括兩部分:括弧內(nèi)包括兩部分:4.6 格式輸入與輸出格式輸入與輸出(1) “格式控制格式控制”是用雙引號(hào)括起來(lái)的字符串,也稱是用雙引號(hào)括起來(lái)的字符串,也稱“轉(zhuǎn)換控制字符串轉(zhuǎn)換控制字符串”,它包括兩種信息:,它包括兩種信息: 格式說(shuō)明,由

31、格式說(shuō)明,由“%”和格式字符組成,如和格式字符組成,如%d,%f等。它的作用是將輸出的數(shù)據(jù)轉(zhuǎn)換為指定的等。它的作用是將輸出的數(shù)據(jù)轉(zhuǎn)換為指定的格式輸出。格式說(shuō)明總是由格式輸出。格式說(shuō)明總是由“%”字符開(kāi)始的。字符開(kāi)始的。 普通字符,即需要原樣輸出的字符。例如上面普通字符,即需要原樣輸出的字符。例如上面printf函數(shù)中雙引號(hào)內(nèi)的逗號(hào)、空格和換行符。函數(shù)中雙引號(hào)內(nèi)的逗號(hào)、空格和換行符。(2) “輸出表列輸出表列”是需要輸出的一些數(shù)據(jù),可以是表是需要輸出的一些數(shù)據(jù),可以是表達(dá)式。達(dá)式。2. 格式字符格式字符對(duì)不同類型的數(shù)據(jù)用不同的格式字符。常用的有以對(duì)不同類型的數(shù)據(jù)用不同的格式字符。常用的有以下幾種

32、格式字符:下幾種格式字符:(1) d格式符。用來(lái)輸出十進(jìn)制整數(shù)。有以下幾種用格式符。用來(lái)輸出十進(jìn)制整數(shù)。有以下幾種用法:法:%d,按整型數(shù)據(jù)的實(shí)際長(zhǎng)度輸出。,按整型數(shù)據(jù)的實(shí)際長(zhǎng)度輸出。 %md, m為指定的輸出字段的寬度。如果數(shù)為指定的輸出字段的寬度。如果數(shù)據(jù)的位數(shù)小于據(jù)的位數(shù)小于m,則左端補(bǔ)以空格,若大于,則左端補(bǔ)以空格,若大于,則按實(shí)際位數(shù)輸出。如則按實(shí)際位數(shù)輸出。如printf(%4d,%4d,a,b);若若a=123,b=12345,則輸出結(jié)果為,則輸出結(jié)果為 123,12345 %ld,輸出長(zhǎng)整型數(shù)據(jù)。如,輸出長(zhǎng)整型數(shù)據(jù)。如longa=135790; printf(%ld,a);如果

33、用如果用%d輸出,就會(huì)發(fā)生錯(cuò)誤,因?yàn)檎蛿?shù)據(jù)的范圍為輸出,就會(huì)發(fā)生錯(cuò)誤,因?yàn)檎蛿?shù)據(jù)的范圍為-3276832767。對(duì)。對(duì)long型數(shù)據(jù)應(yīng)當(dāng)用型數(shù)據(jù)應(yīng)當(dāng)用%ld格式輸出。對(duì)長(zhǎng)格式輸出。對(duì)長(zhǎng)整型數(shù)據(jù)也可以指定字段寬度,如將上面整型數(shù)據(jù)也可以指定字段寬度,如將上面printf函數(shù)中的函數(shù)中的“%ld”改為改為“%8ld”,則輸出為:,則輸出為: 135790 8列列 一個(gè)一個(gè)int型數(shù)據(jù)可以用型數(shù)據(jù)可以用%d或或%ld格式輸出。格式輸出。(2) o格式符,以八進(jìn)制數(shù)形式輸出整數(shù)。由于是將內(nèi)存單格式符,以八進(jìn)制數(shù)形式輸出整數(shù)。由于是將內(nèi)存單元中的各位的值元中的各位的值(0或或1)按八進(jìn)制形式輸出,因

34、此輸出的數(shù)按八進(jìn)制形式輸出,因此輸出的數(shù)值不帶符號(hào),即將符號(hào)位也一起作為八進(jìn)制數(shù)的一部分值不帶符號(hào),即將符號(hào)位也一起作為八進(jìn)制數(shù)的一部分輸出。例如:輸出。例如: int a=-1; printf(%d,%o,a,a); -1在內(nèi)存單元中的存放形式在內(nèi)存單元中的存放形式(以補(bǔ)碼形式存放以補(bǔ)碼形式存放)如下:如下: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1輸出為輸出為 -1,177777不會(huì)輸出帶負(fù)號(hào)的八進(jìn)制整數(shù)。對(duì)長(zhǎng)整數(shù)不會(huì)輸出帶負(fù)號(hào)的八進(jìn)制整數(shù)。對(duì)長(zhǎng)整數(shù)(long型型)可以用可以用“%lo”格式輸出。同樣可以指定字段寬度,格式輸出。同樣可以指定字段寬度,如如printf(

35、“%8o”,a)輸出為輸出為177777。(3) x格式符,以十六進(jìn)制數(shù)形式輸出整數(shù)。同樣不格式符,以十六進(jìn)制數(shù)形式輸出整數(shù)。同樣不會(huì)出現(xiàn)負(fù)的十六進(jìn)制數(shù)。例如:會(huì)出現(xiàn)負(fù)的十六進(jìn)制數(shù)。例如: int a=-1; printf(%x,%o,%d,a,a,a); 輸出結(jié)果為輸出結(jié)果為ffff,177777,-1同樣可以用同樣可以用“%lx”輸出長(zhǎng)整型數(shù),也可以指定輸出輸出長(zhǎng)整型數(shù),也可以指定輸出字段的寬度,如字段的寬度,如“%12x”。(4) u格式符,用來(lái)輸出格式符,用來(lái)輸出unsigned型數(shù)據(jù),即無(wú)符號(hào)型數(shù)據(jù),即無(wú)符號(hào)數(shù),以十進(jìn)制形式輸出。數(shù),以十進(jìn)制形式輸出。一個(gè)有符號(hào)整數(shù)一個(gè)有符號(hào)整數(shù)(i

36、nt型型)也可以用也可以用%u格式輸出;反格式輸出;反之,一個(gè)之,一個(gè)unsigned型數(shù)據(jù)也可以用型數(shù)據(jù)也可以用%d格式輸出。格式輸出。按相互賦值的規(guī)則處理按相互賦值的規(guī)則處理(見(jiàn)第見(jiàn)第2章章2.9節(jié)節(jié))。unsigned型數(shù)據(jù)也可用型數(shù)據(jù)也可用%o或或%x格式輸出。格式輸出。例例4.3無(wú)符號(hào)數(shù)據(jù)的輸出。無(wú)符號(hào)數(shù)據(jù)的輸出。 main() unsigned int a=65535; int b=-2; printf(a=%d,%o,%x,%un,a,a,a,a); printf(b=%d,%o,%x,%un,b,b,b,b); 運(yùn)行結(jié)果為:運(yùn)行結(jié)果為: a=-1,177777,ffff,655

37、35 b=-2,177776,fffe,65534 請(qǐng)讀者自己分析。請(qǐng)讀者自己分析。(5) c格式符,用來(lái)輸出一個(gè)字符。如:格式符,用來(lái)輸出一個(gè)字符。如:charc=a; printf(%c,c); 輸出字符輸出字符a,請(qǐng)注意:,請(qǐng)注意:“%c”中的中的c是格式符,逗是格式符,逗號(hào)右邊的號(hào)右邊的c是變量名,不要搞混。是變量名,不要搞混。一個(gè)整數(shù),只要它的值在一個(gè)整數(shù),只要它的值在0255范圍內(nèi),也可以用范圍內(nèi),也可以用字符形式輸出,在輸出前,系統(tǒng)會(huì)將該整數(shù)作為字符形式輸出,在輸出前,系統(tǒng)會(huì)將該整數(shù)作為ascii碼轉(zhuǎn)換成相應(yīng)的字符;反之,一個(gè)字符數(shù)據(jù)碼轉(zhuǎn)換成相應(yīng)的字符;反之,一個(gè)字符數(shù)據(jù)也可以用

38、整數(shù)形式輸出。例也可以用整數(shù)形式輸出。例4.4字符數(shù)據(jù)的輸出。字符數(shù)據(jù)的輸出。main() char c=a; int i=97; printf(%c,%dn,c,c); printf(%c,%dn,i,i); 運(yùn)行結(jié)果為:運(yùn)行結(jié)果為:a,97 a,97 也可以指定輸出字?jǐn)?shù)寬度,如果有也可以指定輸出字?jǐn)?shù)寬度,如果有printf(%3c,c) 則輸出:則輸出:“ a”,即,即c變量輸出占變量輸出占3列,前列,前2列補(bǔ)空格。列補(bǔ)空格。(6) s格式符,用來(lái)輸出一個(gè)字符串。有幾種用法:格式符,用來(lái)輸出一個(gè)字符串。有幾種用法:%s,例如:,例如:printf(%s,china)輸出輸出“china”字

39、符串字符串(不包括雙引號(hào)不包括雙引號(hào))。%ms,輸出的字符串占列,如字符串本身長(zhǎng),輸出的字符串占列,如字符串本身長(zhǎng)度大于度大于m,則突破的限制,將字符串全部輸出。,則突破的限制,將字符串全部輸出。若串長(zhǎng)小于若串長(zhǎng)小于m,則左補(bǔ)空格。,則左補(bǔ)空格。%-ms,如果串長(zhǎng)小于,則在列范圍內(nèi),如果串長(zhǎng)小于,則在列范圍內(nèi),字符串向左靠,右補(bǔ)空格。字符串向左靠,右補(bǔ)空格。%mns,輸出占列,但只取字符串中左端,輸出占列,但只取字符串中左端n個(gè)字符。這個(gè)字符。這n個(gè)字符輸出在列的右側(cè),左補(bǔ)空個(gè)字符輸出在列的右側(cè),左補(bǔ)空格。格。%-mns,其中、,其中、n含義同上,含義同上,n個(gè)字符輸出個(gè)字符輸出在列范圍的左側(cè)

40、,右補(bǔ)空格。如果在列范圍的左側(cè),右補(bǔ)空格。如果n,則,則自動(dòng)取自動(dòng)取n值,即保證值,即保證n個(gè)字符正常輸出。個(gè)字符正常輸出。例例4.5字符串的輸出。字符串的輸出。main() printf(%3s,%7.2s,%.4s,%-5.3sn,china,china, china, china) 輸出如下:輸出如下:china, ch,chin,chi 其中第其中第3個(gè)輸出項(xiàng),格式說(shuō)明為個(gè)輸出項(xiàng),格式說(shuō)明為“%.4s”,即只指定,即只指定了了n,沒(méi)指定,自動(dòng)使,沒(méi)指定,自動(dòng)使=n=4,故占,故占4列。列。(7) f格式符,用來(lái)輸出實(shí)數(shù)格式符,用來(lái)輸出實(shí)數(shù)(包括單、雙精度包括單、雙精度),以,以小數(shù)形式

41、輸出。有以下幾種用法:小數(shù)形式輸出。有以下幾種用法:%f,不指定字段寬度,由系統(tǒng)自動(dòng)指定,使,不指定字段寬度,由系統(tǒng)自動(dòng)指定,使整數(shù)部分全部如數(shù)輸出,并輸出整數(shù)部分全部如數(shù)輸出,并輸出6位小數(shù)。應(yīng)當(dāng)位小數(shù)。應(yīng)當(dāng)注意,并非全部數(shù)字都是有效數(shù)字。單精度實(shí)數(shù)注意,并非全部數(shù)字都是有效數(shù)字。單精度實(shí)數(shù)的有效位數(shù)一般為的有效位數(shù)一般為7位。位。例例4.6輸出實(shí)數(shù)時(shí)的有效位數(shù)。輸出實(shí)數(shù)時(shí)的有效位數(shù)。 main()float x,y; x=111111111;y=222222222; printf(%f,x+y); 運(yùn)行結(jié)果為運(yùn)行結(jié)果為333333328125 顯然,只有前顯然,只有前7位數(shù)字是有效數(shù)字。千

42、萬(wàn)不要以為凡是打印位數(shù)字是有效數(shù)字。千萬(wàn)不要以為凡是打印出來(lái)的數(shù)字都是準(zhǔn)確的。出來(lái)的數(shù)字都是準(zhǔn)確的。雙精度數(shù)也可用雙精度數(shù)也可用%f格式輸出,它的有效位數(shù)一般為格式輸出,它的有效位數(shù)一般為16位,給出小數(shù)位,給出小數(shù)6位。位。例例4.7輸出雙精度數(shù)時(shí)的有效位數(shù)。輸出雙精度數(shù)時(shí)的有效位數(shù)。 main()double x,y; x=1111111111111.111111111; y=2222222222222.222222222; printf(%f,x+y); 輸出結(jié)果為輸出結(jié)果為3333333333333.333010 可以看到最后可以看到最后3位小數(shù)位小數(shù)(超過(guò)超過(guò)16位位)是無(wú)意義的。是

43、無(wú)意義的。%nf指定輸出的數(shù)據(jù)共占列,其中有指定輸出的數(shù)據(jù)共占列,其中有n位小數(shù)。如果數(shù)值長(zhǎng)度小于,則左端補(bǔ)空格。位小數(shù)。如果數(shù)值長(zhǎng)度小于,則左端補(bǔ)空格。%-nf與與%nf基本相同,只是使輸出基本相同,只是使輸出的數(shù)值向左端靠,右端補(bǔ)空格。的數(shù)值向左端靠,右端補(bǔ)空格。例例4.8輸出實(shí)數(shù)時(shí)指定小數(shù)位數(shù)。輸出實(shí)數(shù)時(shí)指定小數(shù)位數(shù)。main()float f=123.456;printf(%f %10f %10.2f %.2f %-10.2fn,f,f,f,f,f); 輸出結(jié)果如下:輸出結(jié)果如下:123.456001 123.456001 123.46 123.46 123.46 f的值應(yīng)為的值應(yīng)為1

44、23.456,但輸出為,但輸出為123.455994, 這是由于這是由于實(shí)數(shù)在內(nèi)存中的存儲(chǔ)誤差引起的。實(shí)數(shù)在內(nèi)存中的存儲(chǔ)誤差引起的。(8) e格式符,以指數(shù)形式輸出實(shí)數(shù)。可用以下形式:格式符,以指數(shù)形式輸出實(shí)數(shù)??捎靡韵滦问剑?%e不指定輸出數(shù)據(jù)所占的寬度和數(shù)字部分的小數(shù)不指定輸出數(shù)據(jù)所占的寬度和數(shù)字部分的小數(shù)位數(shù),有的位數(shù),有的c編譯系統(tǒng)自動(dòng)指定給出編譯系統(tǒng)自動(dòng)指定給出6位小數(shù),指數(shù)位小數(shù),指數(shù)部分占部分占5位位(如如e+002),其中,其中“e”占占1位,指數(shù)符號(hào)位,指數(shù)符號(hào)占占1位,指數(shù)占位,指數(shù)占3位。數(shù)值按規(guī)范化指數(shù)形式輸出位。數(shù)值按規(guī)范化指數(shù)形式輸出(即小數(shù)點(diǎn)前必須有而且只有即小數(shù)

45、點(diǎn)前必須有而且只有1位非零數(shù)字位非零數(shù)字)。例如。例如printf(%e,123456);輸出:輸出:1234560e+002。 6列列 5列列輸出的實(shí)數(shù)共占輸出的實(shí)數(shù)共占13列寬度。列寬度。(注:注: 不同系統(tǒng)的規(guī)定略不同系統(tǒng)的規(guī)定略有不同有不同) %m.ne和和%-m.ne。、。、n和和“-”字符含義與前字符含義與前相同。此處相同。此處n指擬輸出的數(shù)據(jù)的小數(shù)部分指擬輸出的數(shù)據(jù)的小數(shù)部分(又稱尾數(shù)又稱尾數(shù))的小數(shù)位數(shù)。若的小數(shù)位數(shù)。若f=123456,則:,則:printf(%e %10e %10.2e %.2e %-10.2e,f,f,f,f,f); 輸出如下:輸出如下: 1.234560

46、e+002 1.234560e+002 1.23e+002 1.23e+002 1.23e+002 13列列 13列列 10列列 9列列 10列列第第2個(gè)輸出項(xiàng)按個(gè)輸出項(xiàng)按%10e輸出,即只指定了輸出,即只指定了=10,未,未指定指定n,凡未指定,凡未指定n,自動(dòng)使,自動(dòng)使n=6,整個(gè)數(shù)據(jù)長(zhǎng),整個(gè)數(shù)據(jù)長(zhǎng)13列,超過(guò)給定的列,超過(guò)給定的10列,乃突破列,乃突破10列的限制,按實(shí)列的限制,按實(shí)際長(zhǎng)度輸出。第際長(zhǎng)度輸出。第3個(gè)數(shù)據(jù)共占個(gè)數(shù)據(jù)共占10列,小數(shù)部分占列,小數(shù)部分占2列。第列。第4個(gè)數(shù)據(jù)按個(gè)數(shù)據(jù)按“%2e”格式輸出,只指定格式輸出,只指定n=2,未指定,自動(dòng)使等于數(shù)據(jù)應(yīng)占的長(zhǎng)度,未指定,自

47、動(dòng)使等于數(shù)據(jù)應(yīng)占的長(zhǎng)度,今為今為9列。第列。第5個(gè)數(shù)據(jù)應(yīng)占個(gè)數(shù)據(jù)應(yīng)占10列,數(shù)值只有列,數(shù)值只有9列,由列,由于是于是“%-102e”,數(shù)值向左靠,右補(bǔ)一個(gè)空格。,數(shù)值向左靠,右補(bǔ)一個(gè)空格。(注:注: 有的有的c系統(tǒng)的輸出格式與此略有不同系統(tǒng)的輸出格式與此略有不同)(9) g格式符,用來(lái)輸出實(shí)數(shù),它根據(jù)數(shù)值的大小,自動(dòng)選格式符,用來(lái)輸出實(shí)數(shù),它根據(jù)數(shù)值的大小,自動(dòng)選f格式或格式或e格式格式(選擇輸出時(shí)占寬度較小的一種選擇輸出時(shí)占寬度較小的一種),且不輸出,且不輸出無(wú)意義的零。例如,若無(wú)意義的零。例如,若f=123468,則,則printf(“%f %e %g”,f,f,f);輸出如下:輸出如下

48、: 123.468000 1.234680e+002 123.468 10列列 13列列 10列列用用%f格式輸出占格式輸出占10列,用列,用%e格式輸出占格式輸出占13列,用列,用%g格式格式時(shí),自動(dòng)從上面兩種格式中選擇短者時(shí),自動(dòng)從上面兩種格式中選擇短者(今以今以%f格式為短格式為短),故占故占10列,且按列,且按%f格式用小數(shù)形式輸出,最后格式用小數(shù)形式輸出,最后3個(gè)小數(shù)位個(gè)小數(shù)位“0”為無(wú)意義的為無(wú)意義的0,不輸出,因此輸出,不輸出,因此輸出123.468,然后右補(bǔ),然后右補(bǔ)3個(gè)空格。個(gè)空格。%g格式用得較少。格式用得較少。在使用在使用printf函數(shù)時(shí),還有幾點(diǎn)要說(shuō)明:函數(shù)時(shí),還有幾

49、點(diǎn)要說(shuō)明:(1) 除了除了x,e,g外,其他格式字符必須用小寫字母,外,其他格式字符必須用小寫字母,如如%d不能寫成不能寫成%d。(2) 可以在可以在printf函數(shù)中的函數(shù)中的“格式控制格式控制”字符串內(nèi)包字符串內(nèi)包含第含第2章章2.5節(jié)節(jié)2.5.1段中的段中的“轉(zhuǎn)義字符轉(zhuǎn)義字符”,如,如“n”、“t”、“b”、“r”、“f”、“377”等。等。(3) 上面介紹的上面介紹的d、o、x、u、c、s、f、e、g等字符,等字符,如用在如用在“%”后面就作為格式符號(hào)。一個(gè)格式說(shuō)明后面就作為格式符號(hào)。一個(gè)格式說(shuō)明以以“%”開(kāi)頭,以上述開(kāi)頭,以上述9個(gè)格式字符之一為結(jié)束,個(gè)格式字符之一為結(jié)束,中間可以插

50、入附加格式字符中間可以插入附加格式字符(也稱修飾符也稱修飾符)。例如:。例如:第一個(gè)格式說(shuō)明為第一個(gè)格式說(shuō)明為“%c”而不包括其后的而不包括其后的f,第二,第二個(gè)格式說(shuō)明為個(gè)格式說(shuō)明為“%f”,不包括其后的,不包括其后的s,第三個(gè)格,第三個(gè)格式說(shuō)明為式說(shuō)明為%s。其他的字符為原樣輸出的普通字。其他的字符為原樣輸出的普通字符。符。(4) 如果想輸出字符如果想輸出字符“%”,則應(yīng)該在,則應(yīng)該在“格式控制格式控制”字符串中用連續(xù)兩個(gè)字符串中用連續(xù)兩個(gè)%表示,如表示,如:printf(%f%,10/3);輸出:輸出: 0333333%4.6.2 scanf函數(shù)函數(shù)(格式輸入函數(shù)格式輸入函數(shù))在第在第1

51、章中已初步接觸到了章中已初步接觸到了scanf函數(shù),在本節(jié)中再函數(shù),在本節(jié)中再作詳細(xì)介紹。作詳細(xì)介紹。1. 一般形式一般形式scanf(格式控制,地址表列格式控制,地址表列)“格式控制格式控制”的含義同的含義同printf函數(shù);函數(shù);“地址表列地址表列”是是由若干個(gè)地址組成的表列,可以是變量的地址,由若干個(gè)地址組成的表列,可以是變量的地址,或字符串的首地址?;蜃址氖椎刂贰@?.9用用scanf函數(shù)輸入數(shù)據(jù)。函數(shù)輸入數(shù)據(jù)。ain() int a,b,c; scanf(“%d%d%d”,&a,&b,&c); printf(%d,%d,%dn,a,b,c); 圖圖4.84.8運(yùn)行時(shí)按以下方式輸

52、入運(yùn)行時(shí)按以下方式輸入a、b、c的值:的值:3 4 5(輸入輸入a、b、c的值的值)3,4,5 (輸出輸出a、b、c的值的值)&a、&b、&c中的中的“&”是是“地址運(yùn)算符地址運(yùn)算符”,&a指指a在內(nèi)存中的地址。上面在內(nèi)存中的地址。上面scanf函數(shù)的作用是:按照函數(shù)的作用是:按照a、b、c在內(nèi)存的地址將在內(nèi)存的地址將a、b、c的值存進(jìn)去。見(jiàn)的值存進(jìn)去。見(jiàn)圖圖4.8。變量。變量a、b、c的地址是在的地址是在 編譯連接階段分編譯連接階段分配的。配的。“%d%d%d”表示按十進(jìn)制整數(shù)形式輸入數(shù)據(jù)。輸表示按十進(jìn)制整數(shù)形式輸入數(shù)據(jù)。輸入數(shù)據(jù)時(shí),在兩個(gè)數(shù)據(jù)之間以一個(gè)或多個(gè)空格間入數(shù)據(jù)時(shí),在兩個(gè)數(shù)據(jù)之間以

53、一個(gè)或多個(gè)空格間隔,也可以用回車鍵、跳格鍵隔,也可以用回車鍵、跳格鍵tab。下面輸入均為。下面輸入均為合法:合法: 3 4 5 3 4 5 3(按按tab鍵鍵)4 5用用“%d%d%d”格式輸入數(shù)據(jù)時(shí),不能用逗號(hào)作兩格式輸入數(shù)據(jù)時(shí),不能用逗號(hào)作兩個(gè)數(shù)據(jù)間的分隔符,如下面輸入不合法:個(gè)數(shù)據(jù)間的分隔符,如下面輸入不合法:3,4,52. 格式說(shuō)明格式說(shuō)明和和printf函數(shù)中的格式說(shuō)明相似,以函數(shù)中的格式說(shuō)明相似,以%開(kāi)始,以一個(gè)開(kāi)始,以一個(gè)格式字符結(jié)束,中間可以插入附加的字符。格式字符結(jié)束,中間可以插入附加的字符。說(shuō)明:說(shuō)明:(1) 對(duì)對(duì)unsigned型變量所需的數(shù)據(jù),可以用型變量所需的數(shù)據(jù),可

54、以用%u,%d或或%o,%x格式輸入。格式輸入。(2) 可以指定輸入數(shù)據(jù)所占列數(shù),系統(tǒng)自動(dòng)按它截取可以指定輸入數(shù)據(jù)所占列數(shù),系統(tǒng)自動(dòng)按它截取所需數(shù)據(jù)。如,所需數(shù)據(jù)。如,scanf(%3d%3d,&a,&b);輸入:輸入: 123456系統(tǒng)自動(dòng)將系統(tǒng)自動(dòng)將123賦給賦給a,456賦給賦給b。此方法也可用于。此方法也可用于字符型:字符型:scanf(%3c,&ch);如果從鍵盤連續(xù)輸入如果從鍵盤連續(xù)輸入3個(gè)字符個(gè)字符abc,由于,由于ch只能容納只能容納一個(gè)字符,系統(tǒng)就把第一個(gè)字符一個(gè)字符,系統(tǒng)就把第一個(gè)字符a賦給賦給ch。(3) 如果在如果在%后有一個(gè)后有一個(gè)“*”附加說(shuō)明符,表示跳過(guò)附加說(shuō)明符

55、,表示跳過(guò)它指定的列數(shù)。例如,它指定的列數(shù)。例如,scanf(%2d %*3d %2d,&a,&b);如果輸入如下信息:;如果輸入如下信息:12 345 67將將12賦給賦給a,%*3d表示讀入表示讀入3位整數(shù)但不賦給任何位整數(shù)但不賦給任何變量。然后再讀入變量。然后再讀入2位整數(shù)位整數(shù)67賦給賦給b。也就是說(shuō)第也就是說(shuō)第2個(gè)數(shù)據(jù)個(gè)數(shù)據(jù)“345”被跳過(guò)。在利用現(xiàn)成的被跳過(guò)。在利用現(xiàn)成的一批數(shù)據(jù)時(shí),有時(shí)不需要其中某些數(shù)據(jù),可用此一批數(shù)據(jù)時(shí),有時(shí)不需要其中某些數(shù)據(jù),可用此法法“跳過(guò)跳過(guò)”它們。它們。(4) 輸入數(shù)據(jù)時(shí)不能規(guī)定精度,例如,輸入數(shù)據(jù)時(shí)不能規(guī)定精度,例如,scanf(%72f,&a);是不

56、合法的,不能企圖用這樣的是不合法的,不能企圖用這樣的scanf函數(shù)并輸入以函數(shù)并輸入以下數(shù)據(jù)而使下數(shù)據(jù)而使a的值為的值為1234567。12345673. 使用使用scanf函數(shù)時(shí)應(yīng)注意的問(wèn)題函數(shù)時(shí)應(yīng)注意的問(wèn)題(1) scanf函數(shù)中的函數(shù)中的“格式控制格式控制”后面應(yīng)當(dāng)是變量地址,后面應(yīng)當(dāng)是變量地址,而不應(yīng)是變量名。例如,而不應(yīng)是變量名。例如,如果如果a、b為整型變量,則為整型變量,則scanf(%d,%d,a,b);是不對(duì)的,應(yīng)將是不對(duì)的,應(yīng)將“a,b”改為改為“&a,&b”。這是。這是c語(yǔ)語(yǔ)言與其他高級(jí)語(yǔ)言不同之處。許多初學(xué)者常在此言與其他高級(jí)語(yǔ)言不同之處。許多初學(xué)者常在此出錯(cuò)。出錯(cuò)。(

57、2) 如果在如果在“格式控制格式控制”字符串中除了格式說(shuō)明以字符串中除了格式說(shuō)明以外還有其他字符,則在輸入數(shù)據(jù)時(shí)應(yīng)輸入與這些外還有其他字符,則在輸入數(shù)據(jù)時(shí)應(yīng)輸入與這些字符相同的字符。例如字符相同的字符。例如scanf(%d,%d,&a,&b);輸入時(shí)應(yīng)用如下形式:輸入時(shí)應(yīng)用如下形式:3,4注意注意3后面是逗號(hào),它與后面是逗號(hào),它與scanf函數(shù)中的函數(shù)中的“格式控制格式控制”中的逗號(hào)對(duì)應(yīng)。如果輸入時(shí)不用逗號(hào)而用空格或中的逗號(hào)對(duì)應(yīng)。如果輸入時(shí)不用逗號(hào)而用空格或其他字符是不對(duì)的:其他字符是不對(duì)的:3 4(不對(duì)不對(duì)) 3:4 (不對(duì)不對(duì)) 如果是如果是scanf(%d %d,&a,&b); 輸入時(shí)兩

58、個(gè)數(shù)據(jù)間應(yīng)空輸入時(shí)兩個(gè)數(shù)據(jù)間應(yīng)空2個(gè)或更多的空格字符。如:個(gè)或更多的空格字符。如:10 34或或10 34 如果是如果是scanf(%d %d %d,&h,&,&s); 輸入應(yīng)該用以下形式:輸入應(yīng)該用以下形式:12 23 36如果是如果是 scanf(a=%d,b=%d,c=%d,&a,&b,&c); 輸入應(yīng)為以下形式:輸入應(yīng)為以下形式:a=12,b=24,c=36這種形式為了使用戶輸入數(shù)據(jù)時(shí)添加必要的信息以這種形式為了使用戶輸入數(shù)據(jù)時(shí)添加必要的信息以幫助理解,不易發(fā)生輸入數(shù)據(jù)的錯(cuò)誤。幫助理解,不易發(fā)生輸入數(shù)據(jù)的錯(cuò)誤。(3) 在用在用“%c”格式輸入字符時(shí),空格字符和格式輸入字符時(shí),空格字符和

59、“轉(zhuǎn)義轉(zhuǎn)義字符字符”都作為有效字符輸入:都作為有效字符輸入:scanf(%c%c%c,&c1,&c2,&c3);如輸入如輸入a b c字符字符a送給送給c1,字符,字符 送給送給c2,字符,字符b送給送給c3,因?yàn)椋驗(yàn)?c只要求讀入一個(gè)字符,后面不需要用只要求讀入一個(gè)字符,后面不需要用空格作為兩個(gè)字符的間隔,因此空格作為兩個(gè)字符的間隔,因此 作為下一個(gè)作為下一個(gè)字符送給字符送給c2。(4) 在輸入數(shù)據(jù)時(shí),遇以下情況時(shí)該數(shù)據(jù)認(rèn)為結(jié)束。在輸入數(shù)據(jù)時(shí),遇以下情況時(shí)該數(shù)據(jù)認(rèn)為結(jié)束。 遇空格,或按遇空格,或按“回車回車”或或“跳格跳格”(tab)鍵。鍵。 按指定的寬度結(jié)束,如按指定的寬度結(jié)束,如“%3

60、d”,只取,只取3列。列。 遇非法輸入。遇非法輸入。如如scanf(%d%c%f,&a,&b,&c); 若輸入若輸入1234 a 1230.26 a b c 第一個(gè)數(shù)據(jù)對(duì)應(yīng)第一個(gè)數(shù)據(jù)對(duì)應(yīng)%d格式在輸入格式在輸入1234之后遇字母之后遇字母a,因此認(rèn)為數(shù)值因此認(rèn)為數(shù)值1234后已沒(méi)有數(shù)字了,第一個(gè)數(shù)據(jù)到后已沒(méi)有數(shù)字了,第一個(gè)數(shù)據(jù)到此結(jié)束,把此結(jié)束,把1234送給變量送給變量a。字符。字符a送給變量送給變量b,由于由于%c只要求輸入一個(gè)字符,因此輸入字符只要求輸入一個(gè)字符,因此輸入字符a之后之后不需要加空格,后面的數(shù)值應(yīng)送給變量不需要加空格,后面的數(shù)值應(yīng)送給變量c。如果由。如果由于疏忽把本來(lái)應(yīng)為于

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論