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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、大連理工大學軟件學院大連理工大學軟件學院1最簡單的最簡單的C程序設計程序設計順序程序設計順序程序設計大連理工大學軟件學院大連理工大學軟件學院2賦值表達式和賦值語句賦值表達式和賦值語句簡單的格式輸入與輸出簡單的格式輸入與輸出要點要點大連理工大學軟件學院大連理工大學軟件學院3主要內容主要內容1 1 程序的三種基本結構程序的三種基本結構2 C2 C語句概述語句概述3 3 賦值表達式和賦值語句賦值表達式和賦值語句4 4 數(shù)據(jù)輸入輸出的概念及在數(shù)據(jù)輸入輸出的概念及在C C語言中的實現(xiàn)語言中的實現(xiàn)5 5 字符數(shù)據(jù)的輸入輸出字符數(shù)據(jù)的輸入輸出6 6 簡單的格式輸入與輸出簡單的格式輸入與輸出7 7 較復雜的輸

2、入輸出格式控制較復雜的輸入輸出格式控制大連理工大學軟件學院大連理工大學軟件學院41 程序的三種基本結構程序的三種基本結構v一個良好的程序由以下三種基本結構組成:一個良好的程序由以下三種基本結構組成:(1) (1) 順序結構順序結構(2) (2) 選擇結構選擇結構(3) (3) 循環(huán)結構循環(huán)結構大連理工大學軟件學院大連理工大學軟件學院5順序結構順序結構 數(shù)據(jù)的輸入和傳遞數(shù)據(jù)的輸入和傳遞 數(shù)據(jù)的操作數(shù)據(jù)的操作 結果的輸出結果的輸出BeginEndAInputCBOperationOnput1 程序的三種基本結構程序的三種基本結構大連理工大學軟件學院大連理工大學軟件學院62 C語句概述語句概述C程序

3、源程序文件1源程序文件2源程序文件n預處理命令函數(shù)n函數(shù)1數(shù)據(jù)聲明函數(shù)首部函數(shù)體數(shù)據(jù)聲明執(zhí)行語句C程序的結構:程序的結構:大連理工大學軟件學院大連理工大學軟件學院7vC C語句分為語句分為5 5類類控制語句控制語句函數(shù)調用語句函數(shù)調用語句表達式語句表達式語句空語句空語句復合語句復合語句2 C語句概述語句概述一個語句經(jīng)編譯后產(chǎn)生若干條機器指令大連理工大學軟件學院大連理工大學軟件學院83 賦值表達式和賦值語句賦值表達式和賦值語句1.1.賦值運算符賦值運算符 賦值符號賦值符號“”就是賦值運算符,它的作用是將一個數(shù)就是賦值運算符,它的作用是將一個數(shù)據(jù)賦給一個變量。據(jù)賦給一個變量。 例:例: “a=3”

4、2.2.復合的賦值運算符復合的賦值運算符在賦值符在賦值符“”之前加上其他運算符,可以構成復合的之前加上其他運算符,可以構成復合的運算符。運算符。例:例: 等價于等價于 先計算先計算加,再加,再賦給賦給 把常量賦把常量賦給變量給變量 大連理工大學軟件學院大連理工大學軟件學院92.2.復合的賦值運算符復合的賦值運算符凡是二元(二目)運算符,都可以與賦值符一起組合成凡是二元(二目)運算符,都可以與賦值符一起組合成復合賦值符。有關算術運算的復合賦值運算符有:復合賦值符。有關算術運算的復合賦值運算符有:,*, 語言采用這種復合運算符,一是為了語言采用這種復合運算符,一是為了簡化程序簡化程序,使程,使程序

5、精練,二是為了序精練,二是為了提高編譯效率提高編譯效率,能產(chǎn)生質量較高的目標代,能產(chǎn)生質量較高的目標代碼。碼。3 賦值表達式和賦值語句賦值表達式和賦值語句大連理工大學軟件學院大連理工大學軟件學院103.3.賦值表達式賦值表達式 v 一般形式為:變量一般形式為:變量 賦值運算符賦值運算符 表達式表達式v 例:例:a=3v 賦值運算符左側的標識符稱為賦值運算符左側的標識符稱為“左值左值” v 賦值運算符右側的表達式稱為賦值運算符右側的表達式稱為“右值右值” v注意注意: 運算表達式和常量就不能作為左值 任何左值都可做右值3 賦值表達式和賦值語句賦值表達式和賦值語句大連理工大學軟件學院大連理工大學軟

6、件學院11 v思考題:思考題:v 下列各式中,下列各式中,a、b、c的值及賦值表達式的值分別是多少?的值及賦值表達式的值分別是多少?a=b=c=15a=(b=6)+3a=(b=7)+(c=2)a=(b=10)*(c=2)3 賦值表達式和賦值語句賦值表達式和賦值語句大連理工大學軟件學院大連理工大學軟件學院12 3.賦值表達式分析賦值表達式: (a=3*5)=4*3 賦值表達式為左值右值先執(zhí)行括號內的運算,將先執(zhí)行括號內的運算,將1515賦給賦給a a,然后執(zhí)行,然后執(zhí)行4 4* *3 3的的運算,得運算,得1212,再把,再把1212賦給賦給a a。最后。最后a a的值為的值為1212,整個表達

7、式,整個表達式的值為的值為1212。賦值表達式作為左值時應加括號賦值表達式作為左值時應加括號 a=3*5=4*3?3 賦值表達式和賦值語句賦值表達式和賦值語句大連理工大學軟件學院大連理工大學軟件學院13 v 賦值表達式也可以包含賦值表達式也可以包含復合的賦值運算符復合的賦值運算符。 例:例: a+=a-=a*av 賦值表達式作為表達式的一種,不僅可以出現(xiàn)在賦值語句中,賦值表達式作為表達式的一種,不僅可以出現(xiàn)在賦值語句中,而且可以而且可以以表達式形式出現(xiàn)在其他語句以表達式形式出現(xiàn)在其他語句(如輸出語句、循環(huán)語(如輸出語句、循環(huán)語句等)中句等)中 。 例:例: printf( “%d”,a=b);

8、3 賦值表達式和賦值語句賦值表達式和賦值語句大連理工大學軟件學院大連理工大學軟件學院14賦值過程中的類型轉換賦值過程中的類型轉換v 如果賦值運算符兩側的如果賦值運算符兩側的類型一致類型一致,則直接進行賦值。,則直接進行賦值。 例:例:i=6 (假設假設i已定義為已定義為int型型)v 如果賦值運算符兩側的類型不一致,但都是數(shù)值型或字符如果賦值運算符兩側的類型不一致,但都是數(shù)值型或字符型時,在賦值時要進行型時,在賦值時要進行類型轉換類型轉換。v 類型轉換是類型轉換是系統(tǒng)自動系統(tǒng)自動進行的。進行的。3 賦值表達式和賦值語句賦值表達式和賦值語句大連理工大學軟件學院大連理工大學軟件學院15v轉換規(guī)則:

9、轉換規(guī)則: 將將浮點型數(shù)據(jù)(包括單、雙精度)賦給整型變量浮點型數(shù)據(jù)(包括單、雙精度)賦給整型變量時,先對時,先對浮點數(shù)取為整,然后賦予整型變量。浮點數(shù)取為整,然后賦予整型變量。 將將整型數(shù)據(jù)賦給單、雙精度變量整型數(shù)據(jù)賦給單、雙精度變量時,數(shù)值不變,但以浮點時,數(shù)值不變,但以浮點數(shù)形式存儲到變量中。數(shù)形式存儲到變量中。 賦值過程中的類型轉換賦值過程中的類型轉換大連理工大學軟件學院大連理工大學軟件學院16賦值過程中的類型轉換賦值過程中的類型轉換 將將一個一個double型數(shù)據(jù)賦給型數(shù)據(jù)賦給float變量變量時,截取時,截取其前面其前面7位有效數(shù)字,存放到位有效數(shù)字,存放到float變量的存儲單變量

10、的存儲單元(元(4個字節(jié))中。但應注意數(shù)值范圍不能溢出;個字節(jié))中。但應注意數(shù)值范圍不能溢出;將將一個一個float型數(shù)據(jù)賦給型數(shù)據(jù)賦給double變量變量時,數(shù)值不時,數(shù)值不變,有效位數(shù)擴展到變,有效位數(shù)擴展到16位,在內存中以位,在內存中以8個字節(jié)個字節(jié)存儲。存儲。字符型數(shù)據(jù)賦給整型變量字符型數(shù)據(jù)賦給整型變量時,將字符的時,將字符的ASCII碼碼賦給整型變量。賦給整型變量。大連理工大學軟件學院大連理工大學軟件學院17將將一個占字節(jié)多的整型數(shù)據(jù)賦給一個占字節(jié)少的整型變量一個占字節(jié)多的整型數(shù)據(jù)賦給一個占字節(jié)少的整型變量/字符變量字符變量時,只將其低字節(jié)原封不動地送到該變量。時,只將其低字節(jié)原封

11、不動地送到該變量。 例:例: i=289; /* 已定義已定義i為整型變量為整型變量*/ c=a; /* 已定義已定義c為字符變量為字符變量*/ c=i; /* 將一個占將一個占2字節(jié)的字節(jié)的int型數(shù)據(jù)賦給型數(shù)據(jù)賦給char型變量型變量 */ 注意:要避免進行這種賦值,因為賦值后數(shù)值可能發(fā)生要避免進行這種賦值,因為賦值后數(shù)值可能發(fā)生失真失真。如果一定要進行這。如果一定要進行這種賦值,應當保證賦值后數(shù)值不會發(fā)生變化。種賦值,應當保證賦值后數(shù)值不會發(fā)生變化。賦值過程中的類型轉換賦值過程中的類型轉換大連理工大學軟件學院大連理工大學軟件學院18將將有符號整數(shù)賦值給長度相同的無符號整型變量有符號整數(shù)賦

12、值給長度相同的無符號整型變量時,按字節(jié)時,按字節(jié)原樣賦值。原樣賦值。void main() unsigned short a; /* 定義定義a為無符號整型變量為無符號整型變量 */ short b; /* 定義定義b為有符號整型變量為有符號整型變量 */ b=-1; a=b; printf(%un,a); 由于由于a a是無符號整型變量,因此不能用是無符號整型變量,因此不能用%d%d輸出格式符,而要用輸出輸出格式符,而要用輸出無符號數(shù)的無符號數(shù)的“%u”%u”格式符。格式符。運行結果:65535賦值過程中的類型轉換賦值過程中的類型轉換大連理工大學軟件學院大連理工大學軟件學院19執(zhí)行執(zhí)行“b=

13、a”b=a”時,將時,將a a的兩個字節(jié)的兩個字節(jié)( (全全1)1)賦給賦給b b,由于是有符號的整型數(shù),笫,由于是有符號的整型數(shù),笫1 1個二個二進位是進位是1 1表示此數(shù)是一個負數(shù),表示此數(shù)是一個負數(shù),1616位全位全1 1是是-1-1的補碼。的補碼。將將無符號整數(shù)賦值給長度相同的有符號整型變量無符號整數(shù)賦值給長度相同的有符號整型變量時,應注時,應注意不要超出有符號整型變量的數(shù)值范圍,否則會出錯。意不要超出有符號整型變量的數(shù)值范圍,否則會出錯。void main()unsigned short a;short b; a=65535; /* 兩個字節(jié)兩個字節(jié)16位全為位全為1 */ b=a;

14、 /* b的數(shù)值范圍為的數(shù)值范圍為-3276832767 */ printf(%dn,b);運行結果 -1賦值過程中的類型轉換賦值過程中的類型轉換大連理工大學軟件學院大連理工大學軟件學院20v轉換規(guī)則:轉換規(guī)則:按存儲單元中的存儲形式直接傳送 賦值過程中的類型轉換賦值過程中的類型轉換大連理工大學軟件學院大連理工大學軟件學院21v 賦值語句是由賦值語句是由賦值表達式賦值表達式加上一個加上一個分號分號構成。構成。 v 賦值表達式的作用是將一個表達式的值賦給一個變量。賦值表達式的作用是將一個表達式的值賦給一個變量。v 賦值表達式具有賦值表達式具有計算計算和和賦值賦值雙重功能。程序中的計算功能主雙重功

15、能。程序中的計算功能主要是由賦值語句來完成。要是由賦值語句來完成。v 語言的賦值語句與其他高級語言的賦值語句之間的差異:語言的賦值語句與其他高級語言的賦值語句之間的差異: (1) 語言中的賦值號語言中的賦值號“”是是一個運算符一個運算符,在其他大多數(shù)語,在其他大多數(shù)語言中賦值號不是運算符。言中賦值號不是運算符。 (2) 要區(qū)別賦值表達式和賦值語句。其他多數(shù)高級語言沒有要區(qū)別賦值表達式和賦值語句。其他多數(shù)高級語言沒有“賦值表達式賦值表達式”這一概念。這一概念。賦值語句賦值語句大連理工大學軟件學院大連理工大學軟件學院22注意賦值號注意賦值號“”與等號與等號“= =”= =”的區(qū)別的區(qū)別以下兩者截然

16、不同!以下兩者截然不同!if(aif(a= =b) = =b) if(aif(a=b) =b) 賦值語句賦值語句大連理工大學軟件學院大連理工大學軟件學院23v 程序中對變量賦初值的方法有兩種程序中對變量賦初值的方法有兩種在定義變量的在定義變量的同時使變量初始化同時使變量初始化(更方便)(更方便)int a=3; /*指定指定a為整型變量,初值為為整型變量,初值為3 */ float f=3.56; /* f為浮點型變量,初值為浮點型變量,初值3.56 */ char c=a; /*指定指定c為字符變量,初值為為字符變量,初值為a */int a=b=c=3;用用賦值語句賦值語句對變量賦值對變量

17、賦值 int a; /*指定指定a為整型變量為整型變量*/ a3; /*賦值語句,將賦值語句,將3賦給賦給a */ 變量賦初值變量賦初值 大連理工大學軟件學院大連理工大學軟件學院24課堂練習課堂練習v 編程驗證:編程驗證:v 分別執(zhí)行以下賦值表達式之后,變量分別執(zhí)行以下賦值表達式之后,變量a、b、c的值以及賦值的值以及賦值表達式的是分別是多少。表達式的是分別是多少。 (1)a=3; (2)a=2;a*=9; (3)a=b=c=12; (4)a=(b=7)/(c=2); (5)a=4;a+=a-=a*a; (6)a=3*5=4*3;大連理工大學軟件學院大連理工大學軟件學院25( (一一) )所謂

18、輸入輸出是以計算機主機為主體而言的所謂輸入輸出是以計算機主機為主體而言的4 數(shù)據(jù)輸入輸出的概念數(shù)據(jù)輸入輸出的概念及在及在C語言中的實現(xiàn)語言中的實現(xiàn)顯示器顯示器,打印機打印機)鍵盤鍵盤,鼠標鼠標,掃描儀掃描儀 C提供的提供的IO函數(shù)實現(xiàn)內存外部設備進行數(shù)據(jù)交互功能函數(shù)實現(xiàn)內存外部設備進行數(shù)據(jù)交互功能 它們以庫的形式存放在系統(tǒng)中,它們以庫的形式存放在系統(tǒng)中, 不是不是c語言文本中的組成部分。語言文本中的組成部分。大連理工大學軟件學院大連理工大學軟件學院264 數(shù)據(jù)輸入輸出的概念數(shù)據(jù)輸入輸出的概念及在及在C語言中的實現(xiàn)語言中的實現(xiàn)v標準輸出操作 printf() , putchar( ),puts(

19、)v標準輸入操作 scanf(), getchar(), gets( )v復雜輸入和輸出 有格式的有格式的IO函數(shù)函數(shù)大連理工大學軟件學院大連理工大學軟件學院27v用用putcharputchar函數(shù)輸出一個字符函數(shù)輸出一個字符vputcharputchar函數(shù)(字符輸出函數(shù)):向終端輸出一個字函數(shù)(字符輸出函數(shù)):向終端輸出一個字符。符。v一般形式為一般形式為 putchar(cputchar(c) ) c可以是字符型變量或整型變量 5 字符數(shù)據(jù)的輸入輸出字符數(shù)據(jù)的輸入輸出大連理工大學軟件學院大連理工大學軟件學院28v用用getchargetchar函數(shù)輸入一個字符函數(shù)輸入一個字符vgetc

20、hargetchar函數(shù)(字符輸入函數(shù))函數(shù)(字符輸入函數(shù)): :從終端輸入一個字從終端輸入一個字符。符。 vgetchargetchar函數(shù)沒有參數(shù),一般形式為函數(shù)沒有參數(shù),一般形式為 getchargetchar()()函數(shù)的值就是從輸入設備得到的字符 5 字符數(shù)據(jù)的輸入輸出字符數(shù)據(jù)的輸入輸出大連理工大學軟件學院大連理工大學軟件學院296 簡單格式的輸入與輸出簡單格式的輸入與輸出v用簡單的用簡單的printfprintf函數(shù)輸出數(shù)據(jù)函數(shù)輸出數(shù)據(jù)vprintfprintf函數(shù)(格式輸出函數(shù)):向終端(或系統(tǒng)隱函數(shù)(格式輸出函數(shù)):向終端(或系統(tǒng)隱含指定的輸出設備)輸出若干個任意類型的數(shù)據(jù)。含

21、指定的輸出設備)輸出若干個任意類型的數(shù)據(jù)。vprintfprintf函數(shù)的一般格式為:函數(shù)的一般格式為: printfprintf(格式控制,輸出表列)(格式控制,輸出表列) 例:例: printf(”%d,%cn”,i,cprintf(”%d,%cn”,i,c) )大連理工大學軟件學院大連理工大學軟件學院30printf(格式控制,輸出表列)用簡單的用簡單的printf函數(shù)輸出函數(shù)輸出數(shù)據(jù)數(shù)據(jù)用雙撇號括起來的字符串,也稱“轉換控制字符串”格式說明:由“”和格式字符組成,如、等。它的作用是將輸出的數(shù)據(jù)轉換為指定的格式輸出。格式說明總是由“”字符開始的。普通字符:需要原樣輸出的字符。例如上面pr

22、intf函數(shù)中雙撇號內的逗號、空格和換行符。需要輸出的一些數(shù)據(jù),可以是常量、變量或表達式。大連理工大學軟件學院大連理工大學軟件學院31vprintfprintf函數(shù)的例子:函數(shù)的例子: printf(“aprintf(“a=%d b=%d”, a, b)=%d b=%d”, a, b) | | | | | | | | 格式說明格式說明 輸出表列輸出表列若若a=3a=3,b=4b=4輸出為輸出為 “ “a=3 b=4”a=3 b=4”用簡單的用簡單的printf函數(shù)輸出函數(shù)輸出數(shù)據(jù)數(shù)據(jù)大連理工大學軟件學院大連理工大學軟件學院32v基本的格式字符有以下幾種:基本的格式字符有以下幾種: d d格式符

23、。按十進制整型數(shù)據(jù)的實際長度輸出。格式符。按十進制整型數(shù)據(jù)的實際長度輸出。 i i格式符。作用與格式符相同,按十進制整型格式符。作用與格式符相同,按十進制整型數(shù)據(jù)的實際長度輸出。一般習慣用數(shù)據(jù)的實際長度輸出。一般習慣用%d%d而少用而少用%i%i。 c c格式符。用來輸出一個字符。格式符。用來輸出一個字符。 一個值在0255范圍內的整數(shù),也可以用 “%c”使之按字符形式輸出 用簡單的用簡單的printf函數(shù)輸出函數(shù)輸出數(shù)據(jù)數(shù)據(jù)大連理工大學軟件學院大連理工大學軟件學院33運行結果:, , v例例3.5 3.5 字符數(shù)據(jù)的輸出。字符數(shù)據(jù)的輸出。 #include#include void main

24、()void main() char c=a; char c=a; intint i=97; i=97; printf(%c,%dn,c,cprintf(%c,%dn,c,c);); printf(%c,%dn,i,iprintf(%c,%dn,i,i);); 用簡單的用簡單的printf函數(shù)輸出函數(shù)輸出數(shù)據(jù)數(shù)據(jù)大連理工大學軟件學院大連理工大學軟件學院34格式符,用來輸出一個字符串。格式符,用來輸出一個字符串。 例:例: printfprintf (,CHINA); ; 輸出字符串輸出字符串“CHINA”(不包括雙引號)(不包括雙引號)格式符。用來輸出實數(shù)(包括單、雙精度),格式符。用來輸出實

25、數(shù)(包括單、雙精度),以小數(shù)形式輸出,不指定整個字段的長度,由系以小數(shù)形式輸出,不指定整個字段的長度,由系統(tǒng)自動指定。一般的處理方法是:整數(shù)部分全部統(tǒng)自動指定。一般的處理方法是:整數(shù)部分全部輸出,并輸出位小數(shù)。輸出,并輸出位小數(shù)。用簡單的用簡單的printf函數(shù)輸出函數(shù)輸出數(shù)據(jù)數(shù)據(jù)大連理工大學軟件學院大連理工大學軟件學院35運行結果:.結果中只有前七位是有效數(shù)字。由于x和y是單精度變量,所以x+y也只能保證7位的精度,后面幾位是沒有意義的。 用簡單的用簡單的printf函數(shù)輸出函數(shù)輸出數(shù)據(jù)數(shù)據(jù)v例例3.6 輸出實數(shù)時的有效位數(shù)。輸出實數(shù)時的有效位數(shù)。 #includevoid main() f

26、loat x,y; x=11111111.11111111; y=22222222.22222222; printf(%fn, x+y); 大連理工大學軟件學院大連理工大學軟件學院36運行結果:33333333.333333 x和y是雙精度變量,能提供16位精度,但是由于用%f格式輸出,只能輸出6位小數(shù) ,有兩位被省掉了。v例例3.7 3.7 輸出雙精度數(shù)時的有效位數(shù)。輸出雙精度數(shù)時的有效位數(shù)。 #includevoid main() double x,y; x=11111111.11111111; y=22222222.22222222; printf(%fn, x+y);用簡單的用簡單的p

27、rintf函數(shù)輸出函數(shù)輸出數(shù)據(jù)數(shù)據(jù)%17.8f可全部輸出可全部輸出大連理工大學軟件學院大連理工大學軟件學院37 (6)(6)格式符,用格式說明格式符,用格式說明 指定以指數(shù)形式輸出實指定以指數(shù)形式輸出實數(shù)。數(shù)。 例:例:printfprintf(,123.456123.456);輸出如下);輸出如下 1.2345601.234560 e+002e+002 6 6列列 5 5列列C編譯系統(tǒng)自動指定給出數(shù)字部分的小數(shù)位數(shù)為位,指數(shù)部分占5位 用簡單的用簡單的printf函數(shù)輸出函數(shù)輸出數(shù)據(jù)數(shù)據(jù)大連理工大學軟件學院大連理工大學軟件學院38vscanfscanf函數(shù):按照變量在內存的地址將變量函數(shù):按

28、照變量在內存的地址將變量值存進去。值存進去。v一般格式:一般格式:scanfscanf(格式控制,地址表列)(格式控制,地址表列)同printf函數(shù)是由若干個地址組成的表列,可以是變量的地址,或字符串的首地址用簡單的用簡單的scanf函數(shù)輸入函數(shù)輸入數(shù)據(jù)數(shù)據(jù)大連理工大學軟件學院大連理工大學軟件學院39運行情況:運行情況:3 4 5 3 4 5 ( (輸入輸入a,b,ca,b,c的值,的值,) )3 3,4 4,5 5 (輸出(輸出a,b,ca,b,c的值)的值)a a在內存中的地在內存中的地址址& &是地址運算符是地址運算符輸入數(shù)據(jù)時,在兩個數(shù)據(jù)之間以一個或多個空格間隔,也可以

29、用Enter鍵、Tab鍵。 v 例例3.8 3.8 用用scanfscanf函數(shù)輸入數(shù)據(jù)。函數(shù)輸入數(shù)據(jù)。v #include#include void main()void main() intint a,b,ca,b,c; ;scanf(“%d%d%d”,&a,&b,&cscanf(“%d%d%d”,&a,&b,&c););printf(“%d,%d,%dn”,a,b,cprintf(“%d,%d,%dn”,a,b,c);); 用簡單的用簡單的scanf函數(shù)輸入函數(shù)輸入數(shù)據(jù)數(shù)據(jù)大連理工大學軟件學院大連理工大學軟件學院40vscanfscanf函

30、數(shù)的格式說明與函數(shù)的格式說明與printfprintf函數(shù)的相似,以開函數(shù)的相似,以開始,以一個格式字符結束,中間可插入附加的字符。始,以一個格式字符結束,中間可插入附加的字符。例:例:scanf(”%d%d%d”.&a,&b,&cscanf(”%d%d%d”.&a,&b,&c); ); / /* * 格式控制字符串中包含格式控制字符串中包含3 3個格式說明符個格式說明符%d %d * */ /scanf(”ascanf(”a=%db=%dc=%=%db=%dc=%d”.&a,&b,&cd”.&a,&b,&

31、amp;c); ); / /* * 格式控制字符串中包含格式說明符以外的字格式控制字符串中包含格式說明符以外的字符符 * */ /用簡單的用簡單的scanf函數(shù)輸入函數(shù)輸入數(shù)據(jù)數(shù)據(jù)大連理工大學軟件學院大連理工大學軟件學院41( (1) 1) scanfscanf函數(shù)中的函數(shù)中的“格式控制格式控制”后面應當是變量地址,而不應后面應當是變量地址,而不應是變量名。是變量名。(2) (2) 如果在如果在“格式控制格式控制”字符串中除了格式說明以外還有其他字字符串中除了格式說明以外還有其他字符,則在輸入數(shù)據(jù)時在對應位置應輸入與這些字符相同的字符,則在輸入數(shù)據(jù)時在對應位置應輸入與這些字符相同的字符。符。

32、(3) (3) 在用在用“”格式輸入字符時,空格字符和格式輸入字符時,空格字符和“轉義字符轉義字符”都都作為有效字符輸入。作為有效字符輸入。 (4) (4) 在輸入數(shù)據(jù)時,空格,在輸入數(shù)據(jù)時,空格, “ “回車回車”、“跳格跳格”(TabTab)鍵或遇)鍵或遇非法輸入,認為該數(shù)據(jù)結束。非法輸入,認為該數(shù)據(jù)結束。(5) (5) 對對unsignedunsigned型變量所需的數(shù)據(jù),可以用型變量所需的數(shù)據(jù),可以用%u%u或或%d%d格式輸入。格式輸入。 用簡單的用簡單的scanf函數(shù)輸入函數(shù)輸入數(shù)據(jù)數(shù)據(jù)大連理工大學軟件學院大連理工大學軟件學院42v輸出數(shù)據(jù)格式控制輸出數(shù)據(jù)格式控制v 除了上節(jié)所介紹

33、的基本的格式控制外,還可以用下面一除了上節(jié)所介紹的基本的格式控制外,還可以用下面一些格式符和附加字符。些格式符和附加字符。 為指定的輸出字段的寬度。如果數(shù)據(jù)的位數(shù)為指定的輸出字段的寬度。如果數(shù)據(jù)的位數(shù)小于,則左端補以空格,若大于,則按實際位數(shù)輸小于,則左端補以空格,若大于,則按實際位數(shù)輸出。出。例例: : printfprintf (“%4d,%4d,a,b”); (“%4d,%4d,a,b”);若若: a=123: a=123,d=12345,d=12345,則輸出結果為則輸出結果為: : 123123,12345123457 較復雜的格式輸入與輸較復雜的格式輸入與輸出(自學)出(自學)大連

34、理工大學軟件學院大連理工大學軟件學院43 %ld%ld 對于對于intint型數(shù)據(jù)占型數(shù)據(jù)占2 2字節(jié)的系統(tǒng),在輸出字節(jié)的系統(tǒng),在輸出長整型長整型數(shù)據(jù)時要在格式字符數(shù)據(jù)時要在格式字符d d前面加一個英文字毋前面加一個英文字毋l l。例例: : long a=135790; / long a=135790; /* * 定義定義a a為長整型為長整型變量變量* */ / printf(“%ld,aprintf(“%ld,a););%d只適用于范圍為-3276832767的整型數(shù)據(jù),超過此范圍的整數(shù),應該用%ld輸出 說明:說明:如果用的是如果用的是VC+ 6.0VC+ 6.0,由于,由于intin

35、t型和型和longlong型數(shù)據(jù)都型數(shù)據(jù)都分配分配4 4個字節(jié),因此用個字節(jié),因此用%d%d可以輸出可以輸出intint和和longlong型數(shù)據(jù),不型數(shù)據(jù),不必要用必要用%ld%ld。輸出數(shù)據(jù)格式控制輸出數(shù)據(jù)格式控制大連理工大學軟件學院大連理工大學軟件學院44 % % 以以8 8進制整數(shù)形式輸出。由于是將內存單元中的進制整數(shù)形式輸出。由于是將內存單元中的各位的值(或)按八進制形式輸出,因此輸出的數(shù)各位的值(或)按八進制形式輸出,因此輸出的數(shù)值值不帶符號不帶符號,即將符號位也一起作為八進制數(shù)的一部分,即將符號位也一起作為八進制數(shù)的一部分輸出。輸出。例:例:intint a=-1; a=-1;

36、printf(%dprintf(%d,%o%o,a a,a); a); 在內存單元中的存放形式(以補碼形式存放)如下:在內存單元中的存放形式(以補碼形式存放)如下: 輸出為輸出為: : ,1111111111111111用%d輸出的結果1,111,111,111,111,111 | | | | | |1 7 7 7 7 7二進數(shù)111就是8進數(shù)7。因此上面的數(shù)用8進制數(shù)表示為17777 輸出數(shù)據(jù)格式控制輸出數(shù)據(jù)格式控制大連理工大學軟件學院大連理工大學軟件學院45 % % 以以1616進制數(shù)形式輸出整數(shù)。同樣進制數(shù)形式輸出整數(shù)。同樣不會出現(xiàn)負的不會出現(xiàn)負的十六進制數(shù)。十六進制數(shù)。例:例: int

37、int a= -1; a= -1; printf(“%x,%o,%d”,a,a,aprintf(“%x,%o,%d”,a,a,a);); 輸出結果為輸出結果為 ffffffff,177777177777,-1-1 同樣可以用同樣可以用 “%1x”%1x”輸出長整型數(shù),也可以指定輸出輸出長整型數(shù),也可以指定輸出字段的寬度,如字段的寬度,如“%12x”%12x”。 輸出數(shù)據(jù)格式控制輸出數(shù)據(jù)格式控制大連理工大學軟件學院大連理工大學軟件學院46 % % 用來輸出無符號用來輸出無符號(unsigned)(unsigned)型數(shù)據(jù),以十進型數(shù)據(jù),以十進制整數(shù)形式輸出。一個有符號整數(shù)(制整數(shù)形式輸出。一個有

38、符號整數(shù)(intint型)也可型)也可以用以用%u%u格式輸出;反之,一個格式輸出;反之,一個unsignedunsigned型數(shù)據(jù)也可型數(shù)據(jù)也可以用以用%d%d格式輸出。按相互賦值的規(guī)則處理。格式輸出。按相互賦值的規(guī)則處理。unsignedunsigned型數(shù)據(jù)也可用型數(shù)據(jù)也可用%o%o或或%x%x格式輸出。格式輸出。 c c 用來指定輸出字符數(shù)據(jù)的寬度用來指定輸出字符數(shù)據(jù)的寬度m m 如果有如果有printf(“%3c”,c); printf(“%3c”,c); 則輸出則輸出“ “ a”a”,即變量輸出占列,前列,即變量輸出占列,前列補空格。補空格。輸出數(shù)據(jù)格式控制輸出數(shù)據(jù)格式控制大連理工

39、大學軟件學院大連理工大學軟件學院47Turbo C 2.0Turbo C 2.0環(huán)境下的運行結果環(huán)境下的運行結果: : a=-1a=-1,177777177777,ffffffff,6553565535b=-2b=-2,177776177776,fffefffe,6553465534VC+6.0VC+6.0環(huán)境下的運行結果環(huán)境下的運行結果: : a=65535a=65535,177777177777,ffffffff,6553565535=-2=-2,3777777777637777777776,fffffffefffffffe,42949672944294967294v例例3.9 3.9 無

40、符號數(shù)據(jù)的輸出。無符號數(shù)據(jù)的輸出。#include#include void main()void main() unsigned unsigned intint a=65535;int b=-2; a=65535;int b=-2;printf(“aprintf(“a=%=%d,%o,%x,%un”,a,a,a,ad,%o,%x,%un”,a,a,a,a););printf(“bprintf(“b=%=%d,%o,%x,%un”,b,b,b,bd,%o,%x,%un”,b,b,b,b);); 輸出數(shù)據(jù)格式控制輸出數(shù)據(jù)格式控制大連理工大學軟件學院大連理工大學軟件學院48 指定輸出的字符串占列。

41、如果字符串本身長度大于,則指定輸出的字符串占列。如果字符串本身長度大于,則突破的限制,將字符串全部輸出。若串長小于,則左補空格。突破的限制,將字符串全部輸出。若串長小于,則左補空格。 - - 如果串長小于,則在列范圍內,字符串向左靠,右補空如果串長小于,則在列范圍內,字符串向左靠,右補空格。格。 .n.n 輸出占列,但只取字符串中左端個字符。這個字符輸出占列,但只取字符串中左端個字符。這個字符輸出在列的右側,左補空格。輸出在列的右側,左補空格。 . . 其中、含義同上,個字符輸出在列范圍的左側,其中、含義同上,個字符輸出在列范圍的左側,右補空格。如果,則自動取值,即保證個字符正常輸出。右補空格

42、。如果,則自動取值,即保證個字符正常輸出。. . 指定輸出的實數(shù)共占列,其中有位小數(shù)。如果數(shù)值長指定輸出的實數(shù)共占列,其中有位小數(shù)。如果數(shù)值長度小于,則左端補空格。度小于,則左端補空格。 . .與與. .基本相同,只是使輸出的數(shù)值向左端靠,右基本相同,只是使輸出的數(shù)值向左端靠,右端補空格。端補空格。輸出數(shù)據(jù)格式控制輸出數(shù)據(jù)格式控制大連理工大學軟件學院大連理工大學軟件學院49v 例例3.10 3.10 字符串的輸出。字符串的輸出。#include#include void main()void main() printf(“%3s,%7.2s,%.4s,%-5.3sn”, “CHINA”, pr

43、intf(“%3s,%7.2s,%.4s,%-5.3sn”, “CHINA”, “CHINA”, “CHINA”, “CHINA”);“CHINA”, “CHINA”, “CHINA”); 運行結果:運行結果:CHINA,_CH,CHIN,CHI_CHINA,_CH,CHIN,CHI_ 輸出數(shù)據(jù)格式控制輸出數(shù)據(jù)格式控制大連理工大學軟件學院大連理工大學軟件學院50v 例例3.11 3.11 輸出實數(shù)時指定小數(shù)位數(shù)。輸出實數(shù)時指定小數(shù)位數(shù)。#include #include void mainvoid main()() float f=123.456;float f=123.456;printf(

44、“%fprintf(“%f %10f %10.2f %.2f% -10.2f %10f %10.2f %.2f% -10.2fn”n”,f f,f f,f f,f f,f);f);運行結果:運行結果:123.456001 123.456001 123.456001123.456001 _123.46 123.46 _123.46 123.46 123.46123.46_ 輸出數(shù)據(jù)格式控制輸出數(shù)據(jù)格式控制大連理工大學軟件學院大連理工大學軟件學院51運行結果:運行結果:r1= 1.53r1= 1.53r2= 21.83r2= 21.83r3= 123.71r3= 123.71v 例例3.123.1

45、2求求3 3個圓的周長,輸出結果時上下按小數(shù)點對個圓的周長,輸出結果時上下按小數(shù)點對齊,取兩位小數(shù)。齊,取兩位小數(shù)。 #include #include #define PI 3.1415926#define PI 3.1415926void main ( )void main ( ) double r1=1.53,r2=21.83,r3=123.71,s1,s2,s3; double r1=1.53,r2=21.83,r3=123.71,s1,s2,s3; s1=2.0 s1=2.0* *PIPI* *r1;r1; s2=2.0 s2=2.0* *PIPI* *r2;r2; s3=2.0 s

46、3=2.0* *PIPI* *r3;r3; printf(r1=%10.2fnr2=%10.2fnr3=%10.2fn,r1,printf(r1=%10.2fnr2=%10.2fnr3=%10.2fn,r1,r2,r3);r2,r3); 輸出數(shù)據(jù)格式控制輸出數(shù)據(jù)格式控制大連理工大學軟件學院大連理工大學軟件學院52 m.ne和-m.ne 、和“”字符的含義與前相同。此處指擬輸出的數(shù)據(jù)的小數(shù)部分(又稱尾數(shù))的小數(shù)位數(shù)。若123.456,則: printf(%e %10e %10.2e %.2e %-10.2e,f,f,f,f,f); 輸出如下: 1.234560e+002 1.234560e+00

47、2 1.23e+002 1.23e+002 13列 13列 10列 9列 1.23e+002 10列說明: 未指定,自動使. 超過給定的列,乃突破列的限制,按實際長度輸出。 第3個數(shù)據(jù)共占列,小數(shù)部分占列。 只指定,未指定,自動使等于數(shù)據(jù)應占的長度。 第5個數(shù)據(jù)應占列,數(shù)值只有列,由于是“”, 數(shù)值向左靠,右補一個空格。(注:有的C系統(tǒng)的輸出格式與此略有不同) 輸出數(shù)據(jù)格式控制輸出數(shù)據(jù)格式控制大連理工大學軟件學院大連理工大學軟件學院53 (10)%g 用來輸出實數(shù). 它根據(jù)數(shù)值的大小,自動選格式或格式(選擇輸出時占寬度較小的一種),且不輸出無意義的零。 例:若123.468,則printf(

48、,);輸出如下:123.468000 1.234680e+002 123.468 10列 13列 10列說明:用格式輸出占列,用格式輸出占列,用格式時,自動從上面兩種格式中選擇短者(今以格式為短)故占列,并按格式用小數(shù)形式輸出,最后3個小數(shù)位為無意義的,不輸出,因此輸出123.468,然后右補3個空格。格式用得較少。輸出數(shù)據(jù)格式控制輸出數(shù)據(jù)格式控制大連理工大學軟件學院大連理工大學軟件學院54說明:說明:v除了除了X X,E E,G G外,其他各式字符必須用小寫。外,其他各式字符必須用小寫。v可以在可以在printfprintf函數(shù)中的函數(shù)中的“格式控制格式控制”字符串中包含字符串中包含轉義字符

49、。轉義字符。v一個格式說明必須以一個格式說明必須以“%”%”開頭,以開頭,以9 9個格式字符之個格式字符之一為結束,中間可以插入附加格式字符。一為結束,中間可以插入附加格式字符。v想輸出想輸出% %,則應該在格式控制字符串中用連續(xù)兩個,則應該在格式控制字符串中用連續(xù)兩個% %表示表示輸出數(shù)據(jù)格式控制輸出數(shù)據(jù)格式控制大連理工大學軟件學院大連理工大學軟件學院55格式字符格式字符說明說明d, id, i用來輸入有符號的十進制整數(shù)用來輸入有符號的十進制整數(shù) u u用來輸入無符號的十進制整數(shù)用來輸入無符號的十進制整數(shù) o o用來輸入無符號的八進制整數(shù)用來輸入無符號的八進制整數(shù) x X x X 用來輸入無

50、符號的十六進制整數(shù)用來輸入無符號的十六進制整數(shù)( (大小寫作用相同大小寫作用相同) ) c c用來輸入單個字符用來輸入單個字符 s s用來輸入字符串,將字符串送到一個字符數(shù)組中,在用來輸入字符串,將字符串送到一個字符數(shù)組中,在輸入時以非空白字符開始,以第一個空白字符結束。輸入時以非空白字符開始,以第一個空白字符結束。字符串以串結束標志字符串以串結束標志作為其最后一個字符作為其最后一個字符 f f用來輸入實數(shù),可以用小數(shù)形式或指數(shù)形式輸入用來輸入實數(shù),可以用小數(shù)形式或指數(shù)形式輸入 e E g G e E g G 與作用相同,與、與作用相同,與、g g可以互相替換可以互相替換( (大小寫作用大小寫作用相同相同) ) 表.scanf格式字符 輸出數(shù)據(jù)格式控制輸出數(shù)據(jù)格式控制大連理工大學軟件學院大連理工大學軟件學院56字符字符說明說明l l用于輸入長整型數(shù)據(jù)(可用

溫馨提示

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

評論

0/150

提交評論