第4章 順序程序設(shè)計_第1頁
第4章 順序程序設(shè)計_第2頁
第4章 順序程序設(shè)計_第3頁
第4章 順序程序設(shè)計_第4頁
第4章 順序程序設(shè)計_第5頁
已閱讀5頁,還剩60頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

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

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

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

4、見第7章,章, “預(yù)編譯命令預(yù)編譯命令”見第見第8章章),一個函數(shù)由數(shù)據(jù)定義部分,一個函數(shù)由數(shù)據(jù)定義部分 和執(zhí)行語句組成。和執(zhí)行語句組成。 圖圖4.1 在第在第2章中已經(jīng)說明,程序應(yīng)該包括數(shù)據(jù)描述章中已經(jīng)說明,程序應(yīng)該包括數(shù)據(jù)描述(由聲由聲 明部分來實現(xiàn)明部分來實現(xiàn))和數(shù)據(jù)操作和數(shù)據(jù)操作(由語句來實現(xiàn)由語句來實現(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ù)是對已提供的數(shù)據(jù)進(jìn)行加初值。數(shù)據(jù)操作的任務(wù)是對已提供的數(shù)據(jù)進(jìn)行加 工。工。 C語句可以分為以下語句可以分為以下5類:類: (1) 控制語句,完成一定的控制功能??刂?/p>

5、語句,完成一定的控制功能。c只有只有9種控種控 制語句,它們是:制語句,它們是: if()else(條件語句條件語句) for() (循環(huán)語句循環(huán)語句) hile() (循環(huán)語句循環(huán)語句) dohile() (循環(huán)語句循環(huán)語句) continue (結(jié)束本次循環(huán)語句結(jié)束本次循環(huán)語句) break (中止執(zhí)行中止執(zhí)行switch或循環(huán)語句或循環(huán)語句) sitch (多分支選擇語句多分支選擇語句) goto (轉(zhuǎn)向語句轉(zhuǎn)向語句) return (從函數(shù)返回語句從函數(shù)返回語句) 上面上面9種語句中的括號種語句中的括號()表示其中是一個條件,表示其中是一個條件, 表示內(nèi)嵌的語句。例如:表示內(nèi)嵌的語句。

6、例如:“if()else”的具體的具體 語句可以寫成:語句可以寫成: if(xy) z=x;else z=y; (2) 函數(shù)調(diào)用語句。由一次函數(shù)調(diào)用加一個分號構(gòu)函數(shù)調(diào)用語句。由一次函數(shù)調(diào)用加一個分號構(gòu) 成一個語句,例如:成一個語句,例如:printf(this is a c state ent); (3) 表達(dá)式語句。由一個表達(dá)式構(gòu)成一個語句,表達(dá)式語句。由一個表達(dá)式構(gòu)成一個語句, 最典型的是,由賦值表達(dá)式構(gòu)成一個賦值語句。最典型的是,由賦值表達(dá)式構(gòu)成一個賦值語句。 a=3 是一個賦值表達(dá)式,而是一個賦值表達(dá)式,而 a=3; 是一個賦值語句??梢钥吹揭粋€表達(dá)式的最后加一是一個賦值語句??梢钥吹?/p>

7、一個表達(dá)式的最后加一 個分號就成了一個語句。一個語句必須在最后出個分號就成了一個語句。一個語句必須在最后出 現(xiàn)分號,分號是語句中不可缺少的一部分現(xiàn)分號,分號是語句中不可缺少的一部分(而不而不 像像pascal語言那樣,分號只是語句間的分隔符號語言那樣,分號只是語句間的分隔符號)。 例如:例如: i=i+1(是表達(dá)式,不是語句是表達(dá)式,不是語句) i=i+1;(是語句是語句) 任何表達(dá)式都可以加上分號而成為語句,例如任何表達(dá)式都可以加上分號而成為語句,例如i+; 是一語句,作用是使是一語句,作用是使i值加值加1。又如。又如x+y;也是一;也是一 個語句,作用是完成個語句,作用是完成x+y的操作,

8、它是合法的,的操作,它是合法的, 但是并不把但是并不把x+y的和賦給另一變量,所以它并無的和賦給另一變量,所以它并無 實際意義。實際意義。 表達(dá)式能構(gòu)成語句是表達(dá)式能構(gòu)成語句是c語言的一個重要特色。其實語言的一個重要特色。其實 “函數(shù)調(diào)用語句函數(shù)調(diào)用語句”也是屬于表達(dá)式語句,因為函也是屬于表達(dá)式語句,因為函 數(shù)調(diào)用數(shù)調(diào)用(如如sin(x)也屬于表達(dá)式的一種。只是為了也屬于表達(dá)式的一種。只是為了 便于理解和使用,我們把便于理解和使用,我們把“函數(shù)調(diào)用語句函數(shù)調(diào)用語句”和和 “表達(dá)式語句表達(dá)式語句”分開來說明。由于分開來說明。由于c程序中大多程序中大多 數(shù)語句是表達(dá)式語句數(shù)語句是表達(dá)式語句(包括函

9、數(shù)調(diào)用語句包括函數(shù)調(diào)用語句),所以,所以 有人把有人把c語言稱作語言稱作“表達(dá)式語言表達(dá)式語言”。 (4) 空語句。下面是一個空語句:空語句。下面是一個空語句: ; 即只有一個分號的語句,它什么也不做。有時用來即只有一個分號的語句,它什么也不做。有時用來 做被轉(zhuǎn)向點,或循環(huán)語句中的循環(huán)體做被轉(zhuǎn)向點,或循環(huán)語句中的循環(huán)體(循環(huán)體是循環(huán)體是 空語句,表示循環(huán)體什么也不做空語句,表示循環(huán)體什么也不做)。 (5) 可以用可以用 把一些語句括起來成為復(fù)合語句,把一些語句括起來成為復(fù)合語句, 又稱分程序。如下面是一個復(fù)合語句。又稱分程序。如下面是一個復(fù)合語句。 z=x+y; t=z/100; printf

10、(%f,t); 注意:復(fù)合語句中最后一個語句中最后的分號不能注意:復(fù)合語句中最后一個語句中最后的分號不能 忽略不寫忽略不寫(這是和這是和pascal不同的不同的)。 C語言允許一行寫幾個語句,也允許一個語句拆開語言允許一行寫幾個語句,也允許一個語句拆開 寫在幾行上,書寫格式無固定要求寫在幾行上,書寫格式無固定要求(fortran、 cobol有嚴(yán)格要求有嚴(yán)格要求)。 4.2 程序的三種基本結(jié)構(gòu)程序的三種基本結(jié)構(gòu) 為了提高程序設(shè)計的質(zhì)量和效率,現(xiàn)在普遍采用結(jié)為了提高程序設(shè)計的質(zhì)量和效率,現(xiàn)在普遍采用結(jié) 構(gòu)化程序設(shè)計方法。結(jié)構(gòu)化程序由若干個基本結(jié)構(gòu)化程序設(shè)計方法。結(jié)構(gòu)化程序由若干個基本結(jié) 構(gòu)組成。

11、每一個基本結(jié)構(gòu)可以包含構(gòu)組成。每一個基本結(jié)構(gòu)可以包含 一個或若干個一個或若干個 語句。有三種基本結(jié)構(gòu)語句。有三種基本結(jié)構(gòu): (1) 順序結(jié)構(gòu)順序結(jié)構(gòu),見圖見圖4.2。先執(zhí)行。先執(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),見圖見圖4.3。p代表一個條件代表一個條件,當(dāng)當(dāng)p條件成條件成 立立(或稱為或稱為“真真”)時執(zhí)行時執(zhí)行a,否則執(zhí)行否則執(zhí)行b。注意。注意,只能只能 執(zhí)行執(zhí)行a或或b之一。兩條路徑匯合在一起然后出口。之一。兩條路徑匯合在一起

12、然后出口。 (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),見圖見圖4.4。當(dāng)。當(dāng)p條件成立條件成立(“真真”)時時, 反復(fù)執(zhí)行反復(fù)執(zhí)行a操作。直到操作。直到p為為“假假”時才停止循環(huán)。時才停止循環(huán)。 直到型循環(huán)結(jié)構(gòu)直到型循環(huán)結(jié)構(gòu),見圖見圖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),見圖見圖4.6。 根據(jù)根據(jù)k的值的

13、值(k1,k2,kn)不同而決定執(zhí)行不同而決定執(zhí)行a1,a2,an 之一。之一。 已經(jīng)證明已經(jīng)證明,由以上基本結(jié)構(gòu)組成的程序能處理任何由以上基本結(jié)構(gòu)組成的程序能處理任何 復(fù)雜的問題。上面圖復(fù)雜的問題。上面圖4.2圖圖4.7中方框中的中方框中的 a,b,a1,an等可以是一個簡單的語句等可以是一個簡單的語句,也可以又也可以又 是一個基本結(jié)構(gòu)。例如是一個基本結(jié)構(gòu)。例如,圖圖4.7是一個順序結(jié)構(gòu)是一個順序結(jié)構(gòu),它它 由兩個操作順序組成。虛線框內(nèi)是一個當(dāng)型循環(huán)由兩個操作順序組成。虛線框內(nèi)是一個當(dāng)型循環(huán) 結(jié)構(gòu)結(jié)構(gòu),可以用可以用“b”表示表示,因此圖因此圖4.7就可以理解為圖就可以理解為圖 4.2(a)所

14、示的順序結(jié)構(gòu)。所示的順序結(jié)構(gòu)。 圖圖4.6 圖圖4.7 關(guān)于三種基本結(jié)構(gòu)的特征以及結(jié)構(gòu)化程序設(shè)計方法關(guān)于三種基本結(jié)構(gòu)的特征以及結(jié)構(gòu)化程序設(shè)計方法, 讀者可能已在學(xué)習(xí)其他高級語言程序設(shè)計時學(xué)習(xí)讀者可能已在學(xué)習(xí)其他高級語言程序設(shè)計時學(xué)習(xí) 過過,在此不再重復(fù)。只是應(yīng)當(dāng)強(qiáng)調(diào)說明在此不再重復(fù)。只是應(yīng)當(dāng)強(qiáng)調(diào)說明,在今后的在今后的 程序設(shè)計中應(yīng)當(dāng)采用結(jié)構(gòu)化程序設(shè)計方法。在本程序設(shè)計中應(yīng)當(dāng)采用結(jié)構(gòu)化程序設(shè)計方法。在本 章中章中,我們將介紹幾種最基本的語句我們將介紹幾種最基本的語句,以及用它們以及用它們 構(gòu)成順序結(jié)構(gòu)的程序。在第構(gòu)成順序結(jié)構(gòu)的程序。在第4、第、第5章介紹選擇結(jié)章介紹選擇結(jié) 構(gòu)和循環(huán)結(jié)構(gòu)的程序設(shè)計

15、。構(gòu)和循環(huán)結(jié)構(gòu)的程序設(shè)計。 4.3 賦值語句賦值語句 前已介紹,賦值語句是由賦值表達(dá)式加上一個分號前已介紹,賦值語句是由賦值表達(dá)式加上一個分號 構(gòu)成。由于賦值語句應(yīng)用十分普遍,所以專門再構(gòu)成。由于賦值語句應(yīng)用十分普遍,所以專門再 討論一下。討論一下。 C語言的賦值語句具有其他高級語言的賦值語句的語言的賦值語句具有其他高級語言的賦值語句的 一切特點和功能。但也應(yīng)當(dāng)注意到它們的不同:一切特點和功能。但也應(yīng)當(dāng)注意到它們的不同: (1) C語言中的賦值號語言中的賦值號“=”是一個運(yùn)算符,在其他是一個運(yùn)算符,在其他 大多數(shù)語言中賦值號不是運(yùn)算符。大多數(shù)語言中賦值號不是運(yùn)算符。 (2) 關(guān)于賦值表達(dá)式與賦

16、值語句的概念,其他多數(shù)關(guān)于賦值表達(dá)式與賦值語句的概念,其他多數(shù) 高級語言沒有高級語言沒有“賦值表達(dá)式賦值表達(dá)式”一概念。作為賦值一概念。作為賦值 表達(dá)式可以包括在其他表達(dá)式之中,例如:表達(dá)式可以包括在其他表達(dá)式之中,例如: if(a=b)0)t=a; 按語法規(guī)定按語法規(guī)定if后面的后面的()內(nèi)是一個條件,例如可以內(nèi)是一個條件,例如可以 是:是:“if(x0)”。現(xiàn)在在?,F(xiàn)在在x的位置上換上一個賦的位置上換上一個賦 值表達(dá)式值表達(dá)式“a=b”,其作用是:先進(jìn)行賦值運(yùn)算,其作用是:先進(jìn)行賦值運(yùn)算 (將將b的值賦給的值賦給a),然后判斷,然后判斷a是否大于是否大于0,如大于,如大于0, 執(zhí)行執(zhí)行t=

17、a。在。在if語句中的語句中的“a=b”不是賦值語句而是不是賦值語句而是 賦值表達(dá)式,這樣寫是合法的。如果寫成賦值表達(dá)式,這樣寫是合法的。如果寫成 if(a=b;)0)t=a;就錯了。在;就錯了。在if的條件中不能包的條件中不能包 含賦值語句。由此可以看到,含賦值語句。由此可以看到,c把賦值語句和賦把賦值語句和賦 值表達(dá)式區(qū)別開來,增加了表達(dá)式的種類,使表值表達(dá)式區(qū)別開來,增加了表達(dá)式的種類,使表 達(dá)式的應(yīng)用幾乎達(dá)式的應(yīng)用幾乎“無孔不入無孔不入”,能實現(xiàn)其他語言,能實現(xiàn)其他語言 中難以實現(xiàn)的功能中難以實現(xiàn)的功能. 4.4 數(shù)據(jù)輸入輸出的概念及在數(shù)據(jù)輸入輸出的概念及在C語言中的實現(xiàn)語言中的實現(xiàn)

18、(1) 所謂輸入輸出是以計算機(jī)主機(jī)為主體而言的。從所謂輸入輸出是以計算機(jī)主機(jī)為主體而言的。從 計算機(jī)向外部輸出設(shè)備計算機(jī)向外部輸出設(shè)備(如顯示屏、打印機(jī)、磁盤如顯示屏、打印機(jī)、磁盤 等等)輸出數(shù)據(jù)稱為輸出數(shù)據(jù)稱為“輸出輸出” ,從外部向輸入設(shè)備,從外部向輸入設(shè)備 (如鍵盤、磁盤、光盤、掃描儀等如鍵盤、磁盤、光盤、掃描儀等)輸入數(shù)據(jù)稱為輸入數(shù)據(jù)稱為 “輸入輸入”。 (2) C語言本身不提供輸入輸出語句,輸入和輸出操語言本身不提供輸入輸出語句,輸入和輸出操 作是由函數(shù)來實現(xiàn)的。在作是由函數(shù)來實現(xiàn)的。在c標(biāo)準(zhǔn)函數(shù)庫中提供了一標(biāo)準(zhǔn)函數(shù)庫中提供了一 些輸入輸出函數(shù),例如,些輸入輸出函數(shù),例如,print

19、f函數(shù)和函數(shù)和scanf函數(shù)。函數(shù)。 讀者在使用它們時,千萬不要誤認(rèn)為它們是讀者在使用它們時,千萬不要誤認(rèn)為它們是C語語 言提供的言提供的“輸入輸出語句輸入輸出語句”。printf和和scanf不是不是C 語言的關(guān)鍵字,而只是函數(shù)的名字。實際上完全語言的關(guān)鍵字,而只是函數(shù)的名字。實際上完全 可以不用可以不用printf和和scanf這兩個名字,而另外編兩個這兩個名字,而另外編兩個 輸入輸出函數(shù),輸入輸出函數(shù), 用其他的函數(shù)名。用其他的函數(shù)名。C提供的提供的 函數(shù)以庫的形式存放在系統(tǒng)中,它們不是函數(shù)以庫的形式存放在系統(tǒng)中,它們不是c語語 言文本中的組成部分。言文本中的組成部分。 c語言函數(shù)庫中有

20、一批語言函數(shù)庫中有一批“標(biāo)準(zhǔn)輸入輸出函數(shù)標(biāo)準(zhǔn)輸入輸出函數(shù)” ,它,它 是以標(biāo)準(zhǔn)的輸入輸出設(shè)備是以標(biāo)準(zhǔn)的輸入輸出設(shè)備(一般為終端設(shè)備一般為終端設(shè)備)為輸為輸 入輸出對象的。其中有:入輸出對象的。其中有:putchar(輸出字符輸出字符), getchar(輸入字符輸入字符),printf(格式輸出格式輸出),scanf(格格 式輸入式輸入), puts(輸出字符串輸出字符串),gets(輸入字符串輸入字符串)。 在本章中介紹前面在本章中介紹前面4個最基本的輸入輸出函數(shù)。個最基本的輸入輸出函數(shù)。 (3) 在使用在使用c語言庫函數(shù)時,要用預(yù)編譯命令語言庫函數(shù)時,要用預(yù)編譯命令“ include”將有

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

22、io.h studioh是是standard input putchar(n);putchar(b);putchar(n);p utchar(c); putchar(n); 則輸出結(jié)果為:則輸出結(jié)果為: b o y 也可以輸出其他轉(zhuǎn)義字符,如:也可以輸出其他轉(zhuǎn)義字符,如: putchar(101)(輸出字符輸出字符A) putchar() (輸出單引號字符輸出單引號字符) putchar(015) (輸出回車,不換行,使輸出輸出回車,不換行,使輸出 的當(dāng)前位置移到本行開頭的當(dāng)前位置移到本行開頭) 4.5.2 getchar函數(shù)函數(shù)(字符輸入函數(shù)字符輸入函數(shù)) 此函數(shù)的作用是從終端此函數(shù)的作用是

23、從終端(或系統(tǒng)隱含指定的輸入設(shè)或系統(tǒng)隱含指定的輸入設(shè) 備備)輸入一個字符。輸入一個字符。getchar函數(shù)沒有參數(shù),其一函數(shù)沒有參數(shù),其一 般形式為般形式為getchar() 函數(shù)的值就是從輸入設(shè)備得到的字符。例如:函數(shù)的值就是從輸入設(shè)備得到的字符。例如: 例例4.2輸入單個字符輸入單個字符 #include main() char c; c=getchar(); putchar(c); 在運(yùn)行時,如果從鍵盤輸入字符在運(yùn)行時,如果從鍵盤輸入字符a并按回車鍵,就會在并按回車鍵,就會在 屏幕上看到輸出的字符屏幕上看到輸出的字符a。a(輸入輸入a后,按后,按“回車回車” 鍵,字符才送到內(nèi)存鍵,字符才

24、送到內(nèi)存) a (輸出變量輸出變量c的值的值a) 請注意,請注意,getchar()只能接收一個字符。只能接收一個字符。getchar函數(shù)得到的函數(shù)得到的 字符可以賦給一個字符變量或整型變量,也可以不賦給字符可以賦給一個字符變量或整型變量,也可以不賦給 任何變量,作為表達(dá)式的一部分。例如,例任何變量,作為表達(dá)式的一部分。例如,例4.2第第4、5行行 可以用下面一行代替:可以用下面一行代替: putchar(getchar(); 因為因為getchar()的值為的值為a,因此,因此putchar函數(shù)輸出函數(shù)輸出a。也。也 可以用可以用printf函數(shù)輸出:函數(shù)輸出: printf(”%c,get

25、char();請不要忘記,如果在一個函數(shù)中;請不要忘記,如果在一個函數(shù)中 (今為今為main函數(shù)函數(shù))要調(diào)用要調(diào)用getchar函數(shù),應(yīng)該在該函數(shù)的前函數(shù),應(yīng)該在該函數(shù)的前 面面(或本文件開頭或本文件開頭)加上加上“包含命令包含命令” #include 4.6.1 printf函數(shù)函數(shù)(格式輸出函數(shù)格式輸出函數(shù)) 在前面各章節(jié)中已用到在前面各章節(jié)中已用到printf函數(shù),它的作用是向函數(shù),它的作用是向 終端終端(或系統(tǒng)隱含指定的輸出設(shè)備或系統(tǒng)隱含指定的輸出設(shè)備)輸出若干個任輸出若干個任 意類型的數(shù)據(jù)意類型的數(shù)據(jù)(putchar只能輸出字符,而且只能只能輸出字符,而且只能 是一個字符,而是一個字

26、符,而printf可以輸出多個數(shù)據(jù),且為可以輸出多個數(shù)據(jù),且為 任意類型任意類型)。 1. printf函數(shù)的一般格式為函數(shù)的一般格式為printf(格式控制,輸出格式控制,輸出 表列表列) 如:如:printf(%d, %cn,i,c) 括弧內(nèi)包括兩部分:括弧內(nèi)包括兩部分: 4.6 格式輸入與輸出格式輸入與輸出 (1) “格式控制格式控制”是用雙引號括起來的字符串,也稱是用雙引號括起來的字符串,也稱 “轉(zhuǎn)換控制字符串轉(zhuǎn)換控制字符串”,它包括兩種信息:,它包括兩種信息: 格式說明,由格式說明,由“%”和格式字符組成,如和格式字符組成,如%d, %f等。它的作用是將輸出的數(shù)據(jù)轉(zhuǎn)換為指定的等。它的

27、作用是將輸出的數(shù)據(jù)轉(zhuǎn)換為指定的 格式輸出。格式說明總是由格式輸出。格式說明總是由“%”字符開始的。字符開始的。 普通字符,即需要原樣輸出的字符。例如上面普通字符,即需要原樣輸出的字符。例如上面 printf函數(shù)中雙引號內(nèi)的逗號、空格和換行符。函數(shù)中雙引號內(nèi)的逗號、空格和換行符。 (2) “輸出表列輸出表列”是需要輸出的一些數(shù)據(jù),可以是表是需要輸出的一些數(shù)據(jù),可以是表 達(dá)式。達(dá)式。 2. 格式字符格式字符 對不同類型的數(shù)據(jù)用不同的格式字符。常用的有以對不同類型的數(shù)據(jù)用不同的格式字符。常用的有以 下幾種格式字符:下幾種格式字符: (1) d格式符。用來輸出十進(jìn)制整數(shù)。有以下幾種用格式符。用來輸出十

28、進(jìn)制整數(shù)。有以下幾種用 法:法: %d,按整型數(shù)據(jù)的實際長度輸出。,按整型數(shù)據(jù)的實際長度輸出。 %md, m為指定的輸出字段的寬度。如果數(shù)為指定的輸出字段的寬度。如果數(shù) 據(jù)的位數(shù)小于據(jù)的位數(shù)小于m,則左端補(bǔ)以空格,若大于,則左端補(bǔ)以空格,若大于, 則按實際位數(shù)輸出。如則按實際位數(shù)輸出。如 printf(%4d,%4d,a,b); 若若a=123,b=12345,則輸出結(jié)果為,則輸出結(jié)果為 123,12345 %ld,輸出長整型數(shù)據(jù)。如,輸出長整型數(shù)據(jù)。如 long a=135790; printf(%ld,a); 如果用如果用%d輸出,就會發(fā)生錯誤,因為整型數(shù)據(jù)的范圍為輸出,就會發(fā)生錯誤,因為

29、整型數(shù)據(jù)的范圍為- 3276832767。對。對long型數(shù)據(jù)應(yīng)當(dāng)用型數(shù)據(jù)應(yīng)當(dāng)用%ld格式輸出。對長格式輸出。對長 整型數(shù)據(jù)也可以指定字段寬度,如將上面整型數(shù)據(jù)也可以指定字段寬度,如將上面printf函數(shù)中的函數(shù)中的 “%ld”改為改為“%8ld”,則輸出為:,則輸出為: 135790 8列列 一個一個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)制形式輸出,因此輸出的數(shù)按八進(jìn)制形式輸出,因此輸出的數(shù) 值不帶符號,即將符號位也

30、一起作為八進(jìn)制數(shù)的一部分值不帶符號,即將符號位也一起作為八進(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 不會輸出帶負(fù)號的八進(jìn)制整數(shù)。對長整數(shù)不會輸出帶負(fù)號的八進(jìn)制整數(shù)。對長整數(shù)(long型型) 可以用可以用“%lo”格式輸出。同樣可以指定字段寬度,格式輸出。同樣可以指定字段寬度, 如如printf(“%8o”,a)輸出為輸出為177777。 (3) x

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

32、;反格式輸出;反 之,一個之,一個unsigned型數(shù)據(jù)也可以用型數(shù)據(jù)也可以用%d格式輸出。格式輸出。 按相互賦值的規(guī)則處理按相互賦值的規(guī)則處理(見第見第2章章2.9節(jié)節(jié))。unsigned 型數(shù)據(jù)也可用型數(shù)據(jù)也可用%o或或%x格式輸出。格式輸出。 例例4.3無符號數(shù)據(jù)的輸出。無符號數(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,65535 b=-2,177776

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

34、例也可以用整數(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格式符,用來輸出一個字符串。有幾種用法:格式符,用來輸出一個字符串。有幾種用法: %s,例如:,例如:printf(%s,china) 輸出輸出“china”字符

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

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

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

38、 顯然,只有前顯然,只有前7位數(shù)字是有效數(shù)字。千萬不要以為凡是打印位數(shù)字是有效數(shù)字。千萬不要以為凡是打印 出來的數(shù)字都是準(zhǔn)確的。出來的數(shù)字都是準(zhǔn)確的。 雙精度數(shù)也可用雙精度數(shù)也可用%f格式輸出,它的有效位數(shù)一般為格式輸出,它的有效位數(shù)一般為16 位,給出小數(shù)位,給出小數(shù)6位。位。 例例4.7輸出雙精度數(shù)時的有效位數(shù)。輸出雙精度數(shù)時的有效位數(shù)。 main() double x,y; x=1111111111111.111111111; y=2222222222222.222222222; printf(%f,x+y); 輸出結(jié)果為輸出結(jié)果為 3333333333333.333010 可以看到最后

39、可以看到最后3位小數(shù)位小數(shù)(超過超過16位位)是無意義的。是無意義的。 %nf指定輸出的數(shù)據(jù)共占列,其中有指定輸出的數(shù)據(jù)共占列,其中有 n位小數(shù)。如果數(shù)值長度小于,則左端補(bǔ)空格。位小數(shù)。如果數(shù)值長度小于,則左端補(bǔ)空格。 %-nf與與%nf基本相同,只是使輸出基本相同,只是使輸出 的數(shù)值向左端靠,右端補(bǔ)空格。的數(shù)值向左端靠,右端補(bǔ)空格。 例例4.8輸出實數(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 12

40、3.456001 123.46 123.46 123.46 f的值應(yīng)為的值應(yīng)為123.456,但輸出為,但輸出為123.455994, 這是由于這是由于 實數(shù)在內(nèi)存中的存儲誤差引起的。實數(shù)在內(nèi)存中的存儲誤差引起的。 (8) e格式符,以指數(shù)形式輸出實數(shù)??捎靡韵滦问剑焊袷椒?,以指數(shù)形式輸出實數(shù)。可用以下形式: %e不指定輸出數(shù)據(jù)所占的寬度和數(shù)字部分的小數(shù)不指定輸出數(shù)據(jù)所占的寬度和數(shù)字部分的小數(shù) 位數(shù),有的位數(shù),有的c編譯系統(tǒng)自動指定給出編譯系統(tǒng)自動指定給出6位小數(shù),指數(shù)位小數(shù),指數(shù) 部分占部分占5位位(如如e+002),其中,其中“e”占占1位,指數(shù)符號位,指數(shù)符號 占占1位,指數(shù)占位,指數(shù)占

41、3位。數(shù)值按規(guī)范化指數(shù)形式輸出位。數(shù)值按規(guī)范化指數(shù)形式輸出 (即小數(shù)點前必須有而且只有即小數(shù)點前必須有而且只有1位非零數(shù)字位非零數(shù)字)。例如。例如 printf(%e,123456); 輸出:輸出:1234560e+002。 6列列 5列列 輸出的實數(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 %10

42、e %10.2e %.2e %-10.2e,f,f, f,f,f); 輸出如下:輸出如下: 1.234560e+002 1.234560e+002 1.23e+002 1.23e+002 1.23e+002 13列列 13列列 10列列 9列列 10列列 第第2個輸出項按個輸出項按%10e輸出,即只指定了輸出,即只指定了=10,未,未 指定指定n,凡未指定,凡未指定n,自動使,自動使n=6,整個數(shù)據(jù)長,整個數(shù)據(jù)長13 列,超過給定的列,超過給定的10列,乃突破列,乃突破10列的限制,按實列的限制,按實 際長度輸出。第際長度輸出。第3個數(shù)據(jù)共占個數(shù)據(jù)共占10列,小數(shù)部分占列,小數(shù)部分占2 列。第列。第4個數(shù)據(jù)按個數(shù)據(jù)按“%2e”格式輸出,只指定格式輸出,只指定 n=2,未指定,自動使等于數(shù)據(jù)應(yīng)占的長度,未指定,自動使等于數(shù)據(jù)應(yīng)占的長度, 今為今為9列。第列。第5個數(shù)據(jù)應(yīng)占個數(shù)據(jù)應(yīng)占10列,數(shù)值只有列,數(shù)值只有9列,由列,由 于是于是“%-102e”,數(shù)值向左靠,右補(bǔ)一個空格。,數(shù)值向左靠,右補(bǔ)一個空格。 (注:注: 有的有的c系統(tǒng)的輸出格式與此略有不同系統(tǒng)的輸出格式與此略有不同) (9) g格

溫馨提示

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

最新文檔

評論

0/150

提交評論