版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quá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è)計在上一章介紹了程序中用到的一些基本要素在上一章介紹了程序中用到的一些基本要素(常量、變量、運算符、表達式等常量、變量、運算符、表達式等),它們是,它們是構(gòu)成程序的基本成分。在第構(gòu)成程序的基本成分。在第1章中已經(jīng)介紹章中已經(jīng)介
2、紹了幾個簡單的了幾個簡單的c程序。本章將介紹為編寫簡程序。本章將介紹為編寫簡單的程序所必需的一些內(nèi)容。單的程序所必需的一些內(nèi)容。4.1 C語句概述語句概述 和其他高級語言一樣,和其他高級語言一樣,c語言的語句用來向計算機系統(tǒng)語言的語句用來向計算機系統(tǒng)發(fā)出操作指令。一個語句經(jīng)編譯后產(chǎn)生若干條機器指發(fā)出操作指令。一個語句經(jīng)編譯后產(chǎn)生若干條機器指令。一個實際的程序應(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)稱為語句。如:int a;不是一個不是一個c語句,
3、它不產(chǎn)語句,它不產(chǎn)生機器操作,而只是對變量的定義。從第生機器操作,而只是對變量的定義。從第1章已知,章已知,一個函數(shù)包含聲明部分和執(zhí)行部分,執(zhí)行部分即由語一個函數(shù)包含聲明部分和執(zhí)行部分,執(zhí)行部分即由語句組成。句組成。c程序結(jié)構(gòu)可以用圖程序結(jié)構(gòu)可以用圖4.1表示。即一個表示。即一個c程序可程序可以由若干個源程序文件以由若干個源程序文件(分別進行編譯的文件模塊分別進行編譯的文件模塊)組組成,一個源文件可以由若干個函數(shù)和預(yù)處理命令以及成,一個源文件可以由若干個函數(shù)和預(yù)處理命令以及全局變量聲明部分組成全局變量聲明部分組成(關(guān)于關(guān)于“全局變量全局變量”見第見第7章,章,“預(yù)編譯命令預(yù)編譯命令”見第見第8
4、章章),一個函數(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ù)進行加初值。數(shù)據(jù)操作的任務(wù)是對已提供的數(shù)據(jù)進行加工。工。C語句可以分為以下語句可以分為以下5類:類:(1) 控制語句,完成一定的控制功能。控制語句,完成一定的控制功能。c只有只有9種控種控制語句,它們是:制語句
5、,它們是: 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)嵌的語句。例如:“if()else”的具體的具體語句可以寫成:語句可以寫成: if(
6、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 stateent);(3) 表達式語句。由一個表達式構(gòu)成一個語句,表達式語句。由一個表達式構(gòu)成一個語句,最典型的是,由賦值表達式構(gòu)成一個賦值語句。最典型的是,由賦值表達式構(gòu)成一個賦值語句。a=3是一個賦值表達式,而是一個賦值表達式,而a=3;是一個賦值語句。可以看到一個表達式的最后加一是一個賦值語句??梢钥吹揭粋€表達式的最后加一個分號就成了一個語句。一個語句必須在最后出個分號就成了一個語句。一個語句必
7、須在最后出現(xiàn)分號,分號是語句中不可缺少的一部分現(xiàn)分號,分號是語句中不可缺少的一部分(而不而不像像pascal語言那樣,分號只是語句間的分隔符號語言那樣,分號只是語句間的分隔符號)。例如:例如:i=i+1(是表達式,不是語句是表達式,不是語句)i=i+1;(是語句是語句)任何表達式都可以加上分號而成為語句,例如任何表達式都可以加上分號而成為語句,例如i+;是一語句,作用是使是一語句,作用是使i值加值加1。又如。又如x+y;也是一;也是一個語句,作用是完成個語句,作用是完成x+y的操作,它是合法的,的操作,它是合法的,但是并不把但是并不把x+y的和賦給另一變量,所以它并無的和賦給另一變量,所以它并
8、無實際意義。實際意義。表達式能構(gòu)成語句是表達式能構(gòu)成語句是c語言的一個重要特色。其實語言的一個重要特色。其實“函數(shù)調(diào)用語句函數(shù)調(diào)用語句”也是屬于表達式語句,因為函也是屬于表達式語句,因為函數(shù)調(diào)用數(shù)調(diào)用(如如sin(x)也屬于表達式的一種。只是為了也屬于表達式的一種。只是為了便于理解和使用,我們把便于理解和使用,我們把“函數(shù)調(diào)用語句函數(shù)調(diào)用語句”和和“表達式語句表達式語句”分開來說明。由于分開來說明。由于c程序中大多程序中大多數(shù)語句是表達式語句數(shù)語句是表達式語句(包括函數(shù)調(diào)用語句包括函數(shù)調(diào)用語句),所以,所以有人把有人把c語言稱作語言稱作“表達式語言表達式語言”。(4) 空語句。下面是一個空語句
9、:空語句。下面是一個空語句:;即只有一個分號的語句,它什么也不做。有時用來即只有一個分號的語句,它什么也不做。有時用來做被轉(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(%f,t);注意:復(fù)合語句中最后一個語句中最后的分號不能注意:復(fù)合語句中最后一個語句中最后的分號不能忽略不寫忽略不寫(這是和這是和pascal不同的
10、不同的)。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)組成。每一個基本結(jié)構(gòu)可以包含構(gòu)組成。每一個基本結(jié)構(gòu)可以包含 一個或若干個一個或若干個語句。有三種基本結(jié)構(gòu)語句。有三種基本結(jié)構(gòu):(1) 順序結(jié)構(gòu)順序結(jié)構(gòu),見圖見圖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),見圖見圖4.3。p代表一個條件代表一個條件,當(dāng)當(dāng)p條件成條件成立立(或稱為或稱為“真真”)時執(zhí)行時執(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),見圖見圖4.4。當(dāng)。當(dāng)p條件成立條件成立(“真真”)時時,反復(fù)執(zhí)行反復(fù)執(zhí)行a操作。直到操作。
12、直到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的值的值(k1,k2,kn)不同而決定執(zhí)行不同而決定執(zhí)行a1,a2,an之一。之一。已經(jīng)證明已經(jīng)證明,由以上基本結(jié)構(gòu)組成的程序能處理任何由以上基本結(jié)構(gòu)組成的程序能處理任何復(fù)雜的問題。上面圖復(fù)雜的問題。上面圖4
13、.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)所示的順序結(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è)
14、計時學(xué)習(xí)過過,在此不再重復(fù)。只是應(yīng)當(dāng)強調(diào)說明在此不再重復(fù)。只是應(yīng)當(dā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è)計。構(gòu)和循環(huán)結(jié)構(gòu)的程序設(shè)計。4.3 賦值語句賦值語句前已介紹,賦值語句是由賦值表達式加上一個分號前已介紹,賦值語句是由賦值表達式加上一個分號構(gòu)成。由于賦值語句應(yīng)用十分普遍,所以專門再構(gòu)成。由于賦值語句應(yīng)用十分普遍,所以專門再討論一下。討
15、論一下。C語言的賦值語句具有其他高級語言的賦值語句的語言的賦值語句具有其他高級語言的賦值語句的一切特點和功能。但也應(yīng)當(dāng)注意到它們的不同:一切特點和功能。但也應(yīng)當(dāng)注意到它們的不同:(1) C語言中的賦值號語言中的賦值號“=”是一個運算符,在其他是一個運算符,在其他大多數(shù)語言中賦值號不是運算符。大多數(shù)語言中賦值號不是運算符。(2) 關(guān)于賦值表達式與賦值語句的概念,其他多數(shù)關(guān)于賦值表達式與賦值語句的概念,其他多數(shù)高級語言沒有高級語言沒有“賦值表達式賦值表達式”一概念。作為賦值一概念。作為賦值表達式可以包括在其他表達式之中,例如:表達式可以包括在其他表達式之中,例如:if(a=b)0)t=a;按語法規(guī)
16、定按語法規(guī)定if后面的后面的()內(nèi)是一個條件,例如可以內(nèi)是一個條件,例如可以是:是:“if(x0)”?,F(xiàn)在在。現(xiàn)在在x的位置上換上一個賦的位置上換上一個賦值表達式值表達式“a=b”,其作用是:先進行賦值運算,其作用是:先進行賦值運算(將將b的值賦給的值賦給a),然后判斷,然后判斷a是否大于是否大于0,如大于,如大于0,執(zhí)行執(zhí)行t=a。在。在if語句中的語句中的“a=b”不是賦值語句而是不是賦值語句而是賦值表達式,這樣寫是合法的。如果寫成賦值表達式,這樣寫是合法的。如果寫成if(a=b;)0)t=a;就錯了。在;就錯了。在if的條件中不能包的條件中不能包含賦值語句。由此可以看到,含賦值語句。由此
17、可以看到,c把賦值語句和賦把賦值語句和賦值表達式區(qū)別開來,增加了表達式的種類,使表值表達式區(qū)別開來,增加了表達式的種類,使表達式的應(yīng)用幾乎達式的應(yīng)用幾乎“無孔不入無孔不入”,能實現(xiàn)其他語言,能實現(xiàn)其他語言中難以實現(xiàn)的功能中難以實現(xiàn)的功能.4.4 數(shù)據(jù)輸入輸出的概念及在數(shù)據(jù)輸入輸出的概念及在C語言中的實現(xiàn)語言中的實現(xiàn)(1) 所謂輸入輸出是以計算機主機為主體而言的。從所謂輸入輸出是以計算機主機為主體而言的。從計算機向外部輸出設(shè)備計算機向外部輸出設(shè)備(如顯示屏、打印機、磁盤如顯示屏、打印機、磁盤等等)輸出數(shù)據(jù)稱為輸出數(shù)據(jù)稱為“輸出輸出” ,從外部向輸入設(shè)備,從外部向輸入設(shè)備(如鍵盤、磁盤、光盤、掃描
18、儀等如鍵盤、磁盤、光盤、掃描儀等)輸入數(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ù),例如,printf函數(shù)和函數(shù)和scanf函數(shù)。函數(shù)。讀者在使用它們時,千萬不要誤認(rèn)為它們是讀者在使用它們時,千萬不要誤認(rèn)為它們是C語語言提供的言提供的“輸入輸出語句輸入輸出語句”。printf和和scanf不是不是C語言的關(guān)鍵字,而只是函數(shù)的名字。實際上完全語言的關(guān)鍵字,而只是函數(shù)的名字。實際上完全可以不用可以不
19、用printf和和scanf這兩個名字,而另外編兩個這兩個名字,而另外編兩個輸入輸出函數(shù),輸入輸出函數(shù), 用其他的函數(shù)名。用其他的函數(shù)名。C提供的函數(shù)以提供的函數(shù)以庫的形式存放在系統(tǒng)中,它們不是庫的形式存放在系統(tǒng)中,它們不是c語言文本中的組語言文本中的組成部分。成部分。在第在第1章中曾介紹,不把輸入輸出作為章中曾介紹,不把輸入輸出作為C語言提供的語語言提供的語句的目的是使句的目的是使C語言編譯系統(tǒng)簡單,因為將語句翻譯語言編譯系統(tǒng)簡單,因為將語句翻譯成二進制的指令是在編譯階段完成的,沒有輸入輸成二進制的指令是在編譯階段完成的,沒有輸入輸出語句就可以避免在編譯階段處理與硬件有關(guān)的問出語句就可以避免
20、在編譯階段處理與硬件有關(guān)的問題,可以使編譯系統(tǒng)簡化,而且通用性強,可移植題,可以使編譯系統(tǒng)簡化,而且通用性強,可移植性好,對各種型號的計算機都適用,便于在各種計性好,對各種型號的計算機都適用,便于在各種計算機上實現(xiàn)。各種版本的算機上實現(xiàn)。各種版本的C語言函數(shù)庫是各計算機廠語言函數(shù)庫是各計算機廠商商(或軟件開發(fā)公司或軟件開發(fā)公司)針對某一類型計算機的情況編寫針對某一類型計算機的情況編寫的,并且已編譯成目標(biāo)文件的,并且已編譯成目標(biāo)文件(.obj文件文件)。它們在連接。它們在連接階段與由源程序階段與由源程序 經(jīng)編譯而得到的目標(biāo)文件相連接,經(jīng)編譯而得到的目標(biāo)文件相連接,生成一個可執(zhí)行的目標(biāo)程序。如果在
21、源程序中有生成一個可執(zhí)行的目標(biāo)程序。如果在源程序中有printf函函數(shù),在編譯時并不把它翻譯成目標(biāo)指令,而是在數(shù),在編譯時并不把它翻譯成目標(biāo)指令,而是在執(zhí)行階段中調(diào)用已被連接的函數(shù)庫中的執(zhí)行階段中調(diào)用已被連接的函數(shù)庫中的printf函函數(shù)。由于數(shù)。由于c編譯系統(tǒng)與編譯系統(tǒng)與c函數(shù)庫是分別進行設(shè)計的,函數(shù)庫是分別進行設(shè)計的,因此不同的計算機系統(tǒng)所提供函數(shù)的數(shù)量、名字因此不同的計算機系統(tǒng)所提供函數(shù)的數(shù)量、名字和功能是不完全相同的。不過,有些通用的函數(shù)和功能是不完全相同的。不過,有些通用的函數(shù)(如如printf和和scanf等等),各種計算機系統(tǒng)都提供,各種計算機系統(tǒng)都提供,成為各種計算機系統(tǒng)的標(biāo)準(zhǔn)
22、函數(shù)。成為各種計算機系統(tǒng)的標(biāo)準(zhǔn)函數(shù)。c語言函數(shù)庫語言函數(shù)庫中有一批中有一批“標(biāo)準(zhǔn)輸入輸出函數(shù)標(biāo)準(zhǔn)輸入輸出函數(shù)” ,它是以標(biāo)準(zhǔn)的,它是以標(biāo)準(zhǔn)的輸入輸出設(shè)備輸入輸出設(shè)備(一般為終端設(shè)備一般為終端設(shè)備)為輸入輸出對象為輸入輸出對象的。其中有:的。其中有:putchar(輸出字符輸出字符),getchar(輸入輸入字符字符),printf(格式輸出格式輸出),scanf(格式輸入格式輸入), puts(輸出字符串輸出字符串),gets(輸入字符串輸入字符串)。在本章中。在本章中介紹前面介紹前面4個最基本的輸入輸出函數(shù)。個最基本的輸入輸出函數(shù)。(3) 在使用在使用c語言庫函數(shù)時,要用預(yù)編譯命令語言庫函數(shù)
23、時,要用預(yù)編譯命令“include”將有關(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 或或#
24、include studio.hstudioh是是standard input & output的縮寫,它包含了的縮寫,它包含了與標(biāo)準(zhǔn)與標(biāo)準(zhǔn)i/o庫有關(guān)的變量定義和宏定義庫有關(guān)的變量定義和宏定義(有關(guān)預(yù)編譯有關(guān)預(yù)編譯命令見第命令見第7章章)??紤]到??紤]到printf和和scanf函數(shù)使用頻繁,函數(shù)使用頻繁,系統(tǒng)允許在使用這兩個函數(shù)時可不加系統(tǒng)允許在使用這兩個函數(shù)時可不加#include命令。命令。4.5 字符數(shù)據(jù)的輸入輸出字符數(shù)據(jù)的輸入輸出我們先介紹我們先介紹c標(biāo)準(zhǔn)標(biāo)準(zhǔn)i/o函數(shù)庫中最簡單的、也是最容易理函數(shù)庫中最簡單的、也是最容易理解的字符輸入輸出函數(shù)解的字符輸入輸出函數(shù)putchar()
25、和和getchar(),再介紹,再介紹格式輸入輸出函數(shù)格式輸入輸出函數(shù)printf()和和scanf()函數(shù)。函數(shù)。 4.5.1 putchar函數(shù)函數(shù)(字符輸出函數(shù)字符輸出函數(shù))putchar函數(shù)的作用是向終端輸出一個字符:例如函數(shù)的作用是向終端輸出一個字符:例如putchar(c);它輸出字符變量;它輸出字符變量c的值。的值。c可以是字符型可以是字符型變量或整型變量。變量或整型變量。例例4.1輸出單個字符。輸出單個字符。 #include main() char a,b,c; a=b;b=o;c=y; putchar(a);putchar(b);putchar(c); 運行結(jié)果:運行結(jié)果:
26、boy也可以輸出控制字符,如也可以輸出控制字符,如putchar(n)輸出一個換輸出一個換行符,使輸出的當(dāng)前位置移到下一行的開頭。如行符,使輸出的當(dāng)前位置移到下一行的開頭。如果將例果將例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() (輸出單引號字符輸出單引號字符) putchar(015) (輸出回車,不換行,
27、使輸出輸出回車,不換行,使輸出的當(dāng)前位置移到本行開頭的當(dāng)前位置移到本行開頭)4.5.2 getchar函數(shù)函數(shù)(字符輸入函數(shù)字符輸入函數(shù))此函數(shù)的作用是從終端此函數(shù)的作用是從終端(或系統(tǒng)隱含指定的輸入設(shè)或系統(tǒng)隱含指定的輸入設(shè)備備)輸入一個字符。輸入一個字符。getchar函數(shù)沒有參數(shù),其一函數(shù)沒有參數(shù),其一般形式為般形式為getchar()函數(shù)的值就是從輸入設(shè)備得到的字符。例如:函數(shù)的值就是從輸入設(shè)備得到的字符。例如:例例4.2輸入單個字符輸入單個字符#include main() charc; c=getchar(); putchar(c); 在運行時,如果從鍵盤輸入字符在運行時,如果從鍵盤
28、輸入字符a并按回車鍵,就會在并按回車鍵,就會在屏幕上看到輸出的字符屏幕上看到輸出的字符a。a(輸入輸入a后,按后,按“回車回車”鍵,字符才送到內(nèi)存鍵,字符才送到內(nèi)存) a (輸出變量輸出變量c的值的值a)請注意,請注意,getchar()只能接收一個字符。只能接收一個字符。getchar函數(shù)得到的函數(shù)得到的字符可以賦給一個字符變量或整型變量,也可以不賦給字符可以賦給一個字符變量或整型變量,也可以不賦給任何變量,作為表達式的一部分。例如,例任何變量,作為表達式的一部分。例如,例4.2第第4、5行行可以用下面一行代替:可以用下面一行代替:putchar(getchar();因為因為getchar(
29、)的值為的值為a,因此,因此putchar函數(shù)輸出函數(shù)輸出a。也。也可以用可以用printf函數(shù)輸出:函數(shù)輸出:printf(”%c,getchar();請不要忘記,如果在一個函數(shù)中;請不要忘記,如果在一個函數(shù)中(今為今為main函數(shù)函數(shù))要調(diào)用要調(diào)用getchar函數(shù),應(yīng)該在該函數(shù)的前函數(shù),應(yīng)該在該函數(shù)的前面面(或本文件開頭或本文件開頭)加上加上“包含命令包含命令”#include4.6.1 printf函數(shù)函數(shù)(格式輸出函數(shù)格式輸出函數(shù))在前面各章節(jié)中已用到在前面各章節(jié)中已用到printf函數(shù),它的作用是向函數(shù),它的作用是向終端終端(或系統(tǒng)隱含指定的輸出設(shè)備或系統(tǒng)隱含指定的輸出設(shè)備)輸出若
30、干個任輸出若干個任意類型的數(shù)據(jù)意類型的數(shù)據(jù)(putchar只能輸出字符,而且只能只能輸出字符,而且只能是一個字符,而是一個字符,而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)換控制字符串”,它包括兩種信息:,它包括兩種信息: 格式說明,由
31、格式說明,由“%”和格式字符組成,如和格式字符組成,如%d,%f等。它的作用是將輸出的數(shù)據(jù)轉(zhuǎn)換為指定的等。它的作用是將輸出的數(shù)據(jù)轉(zhuǎn)換為指定的格式輸出。格式說明總是由格式輸出。格式說明總是由“%”字符開始的。字符開始的。 普通字符,即需要原樣輸出的字符。例如上面普通字符,即需要原樣輸出的字符。例如上面printf函數(shù)中雙引號內(nèi)的逗號、空格和換行符。函數(shù)中雙引號內(nèi)的逗號、空格和換行符。(2) “輸出表列輸出表列”是需要輸出的一些數(shù)據(jù),可以是表是需要輸出的一些數(shù)據(jù),可以是表達式。達式。2. 格式字符格式字符對不同類型的數(shù)據(jù)用不同的格式字符。常用的有以對不同類型的數(shù)據(jù)用不同的格式字符。常用的有以下幾種
32、格式字符:下幾種格式字符:(1) d格式符。用來輸出十進制整數(shù)。有以下幾種用格式符。用來輸出十進制整數(shù)。有以下幾種用法:法:%d,按整型數(shù)據(jù)的實際長度輸出。,按整型數(shù)據(jù)的實際長度輸出。 %md, m為指定的輸出字段的寬度。如果數(shù)為指定的輸出字段的寬度。如果數(shù)據(jù)的位數(shù)小于據(jù)的位數(shù)小于m,則左端補以空格,若大于,則左端補以空格,若大于,則按實際位數(shù)輸出。如則按實際位數(shù)輸出。如printf(%4d,%4d,a,b);若若a=123,b=12345,則輸出結(jié)果為,則輸出結(jié)果為 123,12345 %ld,輸出長整型數(shù)據(jù)。如,輸出長整型數(shù)據(jù)。如longa=135790; printf(%ld,a);如果
33、用如果用%d輸出,就會發(fā)生錯誤,因為整型數(shù)據(jù)的范圍為輸出,就會發(fā)生錯誤,因為整型數(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格式符,以八進制數(shù)形式輸出整數(shù)。由于是將內(nèi)存單格式符,以八進制數(shù)形式輸出整數(shù)。由于是將內(nèi)存單元中的各位的值元中的各位的值(0或或1)按八進制形式輸出,因
34、此輸出的數(shù)按八進制形式輸出,因此輸出的數(shù)值不帶符號,即將符號位也一起作為八進制數(shù)的一部分值不帶符號,即將符號位也一起作為八進制數(shù)的一部分輸出。例如:輸出。例如: int a=-1; printf(%d,%o,a,a); -1在內(nèi)存單元中的存放形式在內(nèi)存單元中的存放形式(以補碼形式存放以補碼形式存放)如下:如下: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1輸出為輸出為 -1,177777不會輸出帶負(fù)號的八進制整數(shù)。對長整數(shù)不會輸出帶負(fù)號的八進制整數(shù)。對長整數(shù)(long型型)可以用可以用“%lo”格式輸出。同樣可以指定字段寬度,格式輸出。同樣可以指定字段寬度,如如printf(
35、“%8o”,a)輸出為輸出為177777。(3) x格式符,以十六進制數(shù)形式輸出整數(shù)。同樣不格式符,以十六進制數(shù)形式輸出整數(shù)。同樣不會出現(xiàn)負(fù)的十六進制數(shù)。例如:會出現(xiàn)負(fù)的十六進制數(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ù),以十進制形式輸出。數(shù),以十進制形式輸出。一個有符號整數(shù)一個有符號整數(shù)(i
36、nt型型)也可以用也可以用%u格式輸出;反格式輸出;反之,一個之,一個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); 運行結(jié)果為:運行結(jié)果為: a=-1,177777,ffff,655
37、35 b=-2,177776,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ù)也可以用
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); 運行結(jié)果為:運行結(jié)果為:a,97 a,97 也可以指定輸出字?jǐn)?shù)寬度,如果有也可以指定輸出字?jǐn)?shù)寬度,如果有printf(%3c,c) 則輸出:則輸出:“ a”,即,即c變量輸出占變量輸出占3列,前列,前2列補空格。列補空格。(6) s格式符,用來輸出一個字符串。有幾種用法:格式符,用來輸出一個字符串。有幾種用法:%s,例如:,例如:printf(%s,china)輸出輸出“china”字
39、符串字符串(不包括雙引號不包括雙引號)。%ms,輸出的字符串占列,如字符串本身長,輸出的字符串占列,如字符串本身長度大于度大于m,則突破的限制,將字符串全部輸出。,則突破的限制,將字符串全部輸出。若串長小于若串長小于m,則左補空格。,則左補空格。%-ms,如果串長小于,則在列范圍內(nèi),如果串長小于,則在列范圍內(nèi),字符串向左靠,右補空格。字符串向左靠,右補空格。%mns,輸出占列,但只取字符串中左端,輸出占列,但只取字符串中左端n個字符。這個字符。這n個字符輸出在列的右側(cè),左補空個字符輸出在列的右側(cè),左補空格。格。%-mns,其中、,其中、n含義同上,含義同上,n個字符輸出個字符輸出在列范圍的左側(cè)
40、,右補空格。如果在列范圍的左側(cè),右補空格。如果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ù)(包括單、雙精度包括單、雙精度),以,以小數(shù)形式
41、輸出。有以下幾種用法:小數(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); 運行結(jié)果為運行結(jié)果為333333328125 顯然,只有前顯然,只有前7位數(shù)字是有效數(shù)字。千
42、萬不要以為凡是打印位數(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 可以看到最后可以看到最后3位小數(shù)位小數(shù)(超過超過16位位)是無意義的。是
43、無意義的。%nf指定輸出的數(shù)據(jù)共占列,其中有指定輸出的數(shù)據(jù)共占列,其中有n位小數(shù)。如果數(shù)值長度小于,則左端補空格。位小數(shù)。如果數(shù)值長度小于,則左端補空格。%-nf與與%nf基本相同,只是使輸出基本相同,只是使輸出的數(shù)值向左端靠,右端補空格。的數(shù)值向左端靠,右端補空格。例例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 123.456001 123.46 123.46 123.46 f的值應(yīng)為的值應(yīng)為1
44、23.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ù)占3位。數(shù)值按規(guī)范化指數(shù)形式輸出位。數(shù)值按規(guī)范化指數(shù)形式輸出(即小數(shù)點前必須有而且只有即小數(shù)
45、點前必須有而且只有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 %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個輸出項按個輸出項按%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)占的長度,未指定,自
47、動使等于數(shù)據(jù)應(yīng)占的長度,今為今為9列。第列。第5個數(shù)據(jù)應(yīng)占個數(shù)據(jù)應(yīng)占10列,數(shù)值只有列,數(shù)值只有9列,由列,由于是于是“%-102e”,數(shù)值向左靠,右補一個空格。,數(shù)值向左靠,右補一個空格。(注:注: 有的有的c系統(tǒng)的輸出格式與此略有不同系統(tǒng)的輸出格式與此略有不同)(9) g格式符,用來輸出實數(shù),它根據(jù)數(shù)值的大小,自動選格式符,用來輸出實數(shù),它根據(jù)數(shù)值的大小,自動選f格式或格式或e格式格式(選擇輸出時占寬度較小的一種選擇輸出時占寬度較小的一種),且不輸出,且不輸出無意義的零。例如,若無意義的零。例如,若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格式格式時,自動從上面兩種格式中選擇短者時,自動從上面兩種格式中選擇短者(今以今以%f格式為短格式為短),故占故占10列,且按列,且按%f格式用小數(shù)形式輸出,最后格式用小數(shù)形式輸出,最后3個小數(shù)位個小數(shù)位“0”為無意義的為無意義的0,不輸出,因此輸出,不輸出,因此輸出123.468,然后右補,然后右補3個空格。個空格。%g格式用得較少。格式用得較少。在使用在使用printf函數(shù)時,還有幾點要說明:函數(shù)時,還有幾
49、點要說明:(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等字符,等字符,如用在如用在“%”后面就作為格式符號。一個格式說明后面就作為格式符號。一個格式說明以以“%”開頭,以上述開頭,以上述9個格式字符之一為結(jié)束,個格式字符之一為結(jié)束,中間可以插
50、入附加格式字符中間可以插入附加格式字符(也稱修飾符也稱修飾符)。例如:。例如:第一個格式說明為第一個格式說明為“%c”而不包括其后的而不包括其后的f,第二,第二個格式說明為個格式說明為“%f”,不包括其后的,不包括其后的s,第三個格,第三個格式說明為式說明為%s。其他的字符為原樣輸出的普通字。其他的字符為原樣輸出的普通字符。符。(4) 如果想輸出字符如果想輸出字符“%”,則應(yīng)該在,則應(yīng)該在“格式控制格式控制”字符串中用連續(xù)兩個字符串中用連續(xù)兩個%表示,如表示,如:printf(%f%,10/3);輸出:輸出: 0333333%4.6.2 scanf函數(shù)函數(shù)(格式輸入函數(shù)格式輸入函數(shù))在第在第1
51、章中已初步接觸到了章中已初步接觸到了scanf函數(shù),在本節(jié)中再函數(shù),在本節(jié)中再作詳細介紹。作詳細介紹。1. 一般形式一般形式scanf(格式控制,地址表列格式控制,地址表列)“格式控制格式控制”的含義同的含義同printf函數(shù);函數(shù);“地址表列地址表列”是是由若干個地址組成的表列,可以是變量的地址,由若干個地址組成的表列,可以是變量的地址,或字符串的首地址?;蜃址氖椎刂?。例例4.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運行時按以下方式輸
52、入運行時按以下方式輸入a、b、c的值:的值:3 4 5(輸入輸入a、b、c的值的值)3,4,5 (輸出輸出a、b、c的值的值)&a、&b、&c中的中的“&”是是“地址運算符地址運算符”,&a指指a在內(nèi)存中的地址。上面在內(nèi)存中的地址。上面scanf函數(shù)的作用是:按照函數(shù)的作用是:按照a、b、c在內(nèi)存的地址將在內(nèi)存的地址將a、b、c的值存進去。見的值存進去。見圖圖4.8。變量。變量a、b、c的地址是在的地址是在 編譯連接階段分編譯連接階段分配的。配的?!?d%d%d”表示按十進制整數(shù)形式輸入數(shù)據(jù)。輸表示按十進制整數(shù)形式輸入數(shù)據(jù)。輸入數(shù)據(jù)時,在兩個數(shù)據(jù)之間以一個或多個空格間入數(shù)據(jù)時,在兩個數(shù)據(jù)之間以
53、一個或多個空格間隔,也可以用回車鍵、跳格鍵隔,也可以用回車鍵、跳格鍵tab。下面輸入均為。下面輸入均為合法:合法: 3 4 5 3 4 5 3(按按tab鍵鍵)4 5用用“%d%d%d”格式輸入數(shù)據(jù)時,不能用逗號作兩格式輸入數(shù)據(jù)時,不能用逗號作兩個數(shù)據(jù)間的分隔符,如下面輸入不合法:個數(shù)據(jù)間的分隔符,如下面輸入不合法:3,4,52. 格式說明格式說明和和printf函數(shù)中的格式說明相似,以函數(shù)中的格式說明相似,以%開始,以一個開始,以一個格式字符結(jié)束,中間可以插入附加的字符。格式字符結(jié)束,中間可以插入附加的字符。說明:說明:(1) 對對unsigned型變量所需的數(shù)據(jù),可以用型變量所需的數(shù)據(jù),可
54、以用%u,%d或或%o,%x格式輸入。格式輸入。(2) 可以指定輸入數(shù)據(jù)所占列數(shù),系統(tǒng)自動按它截取可以指定輸入數(shù)據(jù)所占列數(shù),系統(tǒng)自動按它截取所需數(shù)據(jù)。如,所需數(shù)據(jù)。如,scanf(%3d%3d,&a,&b);輸入:輸入: 123456系統(tǒng)自動將系統(tǒng)自動將123賦給賦給a,456賦給賦給b。此方法也可用于。此方法也可用于字符型:字符型:scanf(%3c,&ch);如果從鍵盤連續(xù)輸入如果從鍵盤連續(xù)輸入3個字符個字符abc,由于,由于ch只能容納只能容納一個字符,系統(tǒng)就把第一個字符一個字符,系統(tǒng)就把第一個字符a賦給賦給ch。(3) 如果在如果在%后有一個后有一個“*”附加說明符,表示跳過附加說明符
55、,表示跳過它指定的列數(shù)。例如,它指定的列數(shù)。例如,scanf(%2d %*3d %2d,&a,&b);如果輸入如下信息:;如果輸入如下信息:12 345 67將將12賦給賦給a,%*3d表示讀入表示讀入3位整數(shù)但不賦給任何位整數(shù)但不賦給任何變量。然后再讀入變量。然后再讀入2位整數(shù)位整數(shù)67賦給賦給b。也就是說第也就是說第2個數(shù)據(jù)個數(shù)據(jù)“345”被跳過。在利用現(xiàn)成的被跳過。在利用現(xiàn)成的一批數(shù)據(jù)時,有時不需要其中某些數(shù)據(jù),可用此一批數(shù)據(jù)時,有時不需要其中某些數(shù)據(jù),可用此法法“跳過跳過”它們。它們。(4) 輸入數(shù)據(jù)時不能規(guī)定精度,例如,輸入數(shù)據(jù)時不能規(guī)定精度,例如,scanf(%72f,&a);是不
56、合法的,不能企圖用這樣的是不合法的,不能企圖用這樣的scanf函數(shù)并輸入以函數(shù)并輸入以下數(shù)據(jù)而使下數(shù)據(jù)而使a的值為的值為1234567。12345673. 使用使用scanf函數(shù)時應(yīng)注意的問題函數(shù)時應(yīng)注意的問題(1) scanf函數(shù)中的函數(shù)中的“格式控制格式控制”后面應(yīng)當(dāng)是變量地址,后面應(yīng)當(dāng)是變量地址,而不應(yīng)是變量名。例如,而不應(yīng)是變量名。例如,如果如果a、b為整型變量,則為整型變量,則scanf(%d,%d,a,b);是不對的,應(yīng)將是不對的,應(yīng)將“a,b”改為改為“&a,&b”。這是。這是c語語言與其他高級語言不同之處。許多初學(xué)者常在此言與其他高級語言不同之處。許多初學(xué)者常在此出錯。出錯。(
57、2) 如果在如果在“格式控制格式控制”字符串中除了格式說明以字符串中除了格式說明以外還有其他字符,則在輸入數(shù)據(jù)時應(yīng)輸入與這些外還有其他字符,則在輸入數(shù)據(jù)時應(yīng)輸入與這些字符相同的字符。例如字符相同的字符。例如scanf(%d,%d,&a,&b);輸入時應(yīng)用如下形式:輸入時應(yīng)用如下形式:3,4注意注意3后面是逗號,它與后面是逗號,它與scanf函數(shù)中的函數(shù)中的“格式控制格式控制”中的逗號對應(yīng)。如果輸入時不用逗號而用空格或中的逗號對應(yīng)。如果輸入時不用逗號而用空格或其他字符是不對的:其他字符是不對的:3 4(不對不對) 3:4 (不對不對) 如果是如果是scanf(%d %d,&a,&b); 輸入時兩
58、個數(shù)據(jù)間應(yīng)空輸入時兩個數(shù)據(jù)間應(yīng)空2個或更多的空格字符。如:個或更多的空格字符。如: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ù)據(jù)時添加必要的信息以幫助理解,不易發(fā)生輸入數(shù)據(jù)的錯誤。幫助理解,不易發(fā)生輸入數(shù)據(jù)的錯誤。(3) 在用在用“%c”格式輸入字符時,空格字符和格式輸入字符時,空格字符和
59、“轉(zhuǎn)義轉(zhuǎn)義字符字符”都作為有效字符輸入:都作為有效字符輸入:scanf(%c%c%c,&c1,&c2,&c3);如輸入如輸入a b c字符字符a送給送給c1,字符,字符 送給送給c2,字符,字符b送給送給c3,因為,因為%c只要求讀入一個字符,后面不需要用只要求讀入一個字符,后面不需要用空格作為兩個字符的間隔,因此空格作為兩個字符的間隔,因此 作為下一個作為下一個字符送給字符送給c2。(4) 在輸入數(shù)據(jù)時,遇以下情況時該數(shù)據(jù)認(rèn)為結(jié)束。在輸入數(shù)據(jù)時,遇以下情況時該數(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 第一個數(shù)據(jù)對應(yīng)第一個數(shù)據(jù)對應(yīng)%d格式在輸入格式在輸入1234之后遇字母之后遇字母a,因此認(rèn)為數(shù)值因此認(rèn)為數(shù)值1234后已沒有數(shù)字了,第一個數(shù)據(jù)到后已沒有數(shù)字了,第一個數(shù)據(jù)到此結(jié)束,把此結(jié)束,把1234送給變量送給變量a。字符。字符a送給變量送給變量b,由于由于%c只要求輸入一個字符,因此輸入字符只要求輸入一個字符,因此輸入字符a之后之后不需要加空格,后面的數(shù)值應(yīng)送給變量不需要加空格,后面的數(shù)值應(yīng)送給變量c。如果由。如果由于疏忽把本來應(yīng)為于
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 北師大版二年級上冊數(shù)學(xué)期末試卷7套
- 高中歷史第四章雅爾塔體系下的“冷戰(zhàn)”與和平4.2各國首顆原子彈記錄文本素材北師大版選修3
- 八年級英語下冊Unit4Whydon'tyoutalktoyourparentsSectionA第2課時3a-4c教案新版人教新目標(biāo)版
- 2024-2025學(xué)年新教材高中生物第三章細胞的代謝第四節(jié)細胞呼吸為細胞生活提供能量課時2隨堂速練含解析浙科版必修1
- 2025屆高考英語二輪復(fù)習(xí)之全國卷陌生詞匯七
- 蟋蟀住宅建筑風(fēng)格變遷(2024版)
- 《贈劉景文》課件更新:2024年教育改革特別版
- 2024年學(xué)習(xí)理論:《狐假虎威》課件與學(xué)習(xí)理論的融合
- 2024年教育創(chuàng)新:《驛路梨花》課件研討會
- 網(wǎng)絡(luò)零售平臺精細化運營與營銷策略方案
- 2023北京海淀區(qū)高二上學(xué)期期末語文試題及答案
- 糧油售后服務(wù)承諾書
- 科研倫理與學(xué)術(shù)規(guī)范-課后作業(yè)答案
- 藥學(xué)職業(yè)生涯人物訪談
- 單位職工獨生子女父母一次性退休補貼申請表
- 國有集團公司中層及員工履職追責(zé)問責(zé)處理辦法模版
- 管理學(xué)-第6章-組織設(shè)計
- 2020醫(yī)用氧藥典標(biāo)準(zhǔn)
- 七年級生物作業(yè)設(shè)計
- 2023年考研英語二真題(含答案及解析)【可編輯】
評論
0/150
提交評論