【學(xué)習(xí)課件】第3章簡單的C程序設(shè)計_第1頁
【學(xué)習(xí)課件】第3章簡單的C程序設(shè)計_第2頁
【學(xué)習(xí)課件】第3章簡單的C程序設(shè)計_第3頁
【學(xué)習(xí)課件】第3章簡單的C程序設(shè)計_第4頁
【學(xué)習(xí)課件】第3章簡單的C程序設(shè)計_第5頁
已閱讀5頁,還剩73頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、最簡單的C程序設(shè)計順序程序設(shè)計第3章3.5 字符數(shù)據(jù)的輸入與輸出3.6 簡單的格式輸入與輸出3.7 復(fù)雜的輸入輸出格式控制3.8 順序結(jié)構(gòu)程序設(shè)計舉例本章小結(jié)3.1 程序的三種基本結(jié)構(gòu) 3.2 C語句概述3.3 賦值表達(dá)式和賦值語句3.4 數(shù)據(jù)輸入輸出的概念及在C語言中的實現(xiàn)精選課件傳統(tǒng)流程圖教學(xué)進(jìn)程AB3.1程序的三種基本結(jié)構(gòu)指令 一個程序包含一系列的指令,每個指令使計算機(jī)完成一種操作。而程序中的指令不是任意書寫的。1966年,Bohra和Jacopini提出了3種基本結(jié)構(gòu)。 順序結(jié)構(gòu)各操作是按先后順序執(zhí)行的。是最簡單的一種基本結(jié)構(gòu)。其中A和B兩個框是順序執(zhí)行的。即在完成A框所指定的操作后,

2、必然接著執(zhí)行B框所指定的操作。精選課件傳統(tǒng)流程圖教學(xué)進(jìn)程3.1程序的三種基本結(jié)構(gòu) 選擇結(jié)構(gòu)又稱分支結(jié)構(gòu)。根據(jù)是否滿足給定條件而從兩組操作中選擇執(zhí)行一種操作。虛線框內(nèi)是一個選擇結(jié)構(gòu)。PAB成立不成立無論P(yáng)條件是否成立,只能執(zhí)行A操作或B操作中的一個;無論執(zhí)行完哪一個分支后,就結(jié)束了。兩個操作可以有一個是空操作,即不執(zhí)行任何操作,形如下圖:PA成立不成立PB成立不成立入口出口精選課件傳統(tǒng)流程圖教學(xué)進(jìn)程3.1程序的三種基本結(jié)構(gòu) 循環(huán)結(jié)構(gòu)又稱重復(fù)結(jié)構(gòu),即在一定條件下,反復(fù)執(zhí)行某一部分的操作。有兩種類型:執(zhí)行過程: 當(dāng)給定條件P成立時,執(zhí)行S操作,然后再判斷P條件是否成立,如果仍成立,再執(zhí)行S操作,然后

3、再判斷,如此反復(fù),直到某一次P條件不成立為止,此時不再執(zhí)行S,結(jié)束循環(huán)。特點: 先判斷,后執(zhí)行,S有可能一次也不執(zhí)行。PSFT當(dāng)型循環(huán)入口出口精選課件傳統(tǒng)流程圖教學(xué)進(jìn)程3.1程序的三種基本結(jié)構(gòu) 循環(huán)結(jié)構(gòu)執(zhí)行過程: 執(zhí)行S操作,然后判斷條件P是否成立,如果成立,再執(zhí)行S操作,然后再判斷,.,如此反復(fù),直到某一次P條件不成立不再執(zhí)行S,結(jié)束循環(huán)。特點: 先執(zhí)行,后判斷,S最少要執(zhí)行一次。SPFT直到型循環(huán)入口出口精選課件傳統(tǒng)流程圖教學(xué)進(jìn)程傳統(tǒng)流程圖有以下幾個主要缺點: 傳統(tǒng)流程圖本質(zhì)上不是逐步求精的好工具,它會使程序員 過早地考慮程序的控制流程,而不去考慮程序的全局結(jié)構(gòu)。 傳統(tǒng)流程圖不易表示層次結(jié)

4、構(gòu)。 傳統(tǒng)流程圖不易表示數(shù)據(jù)結(jié)構(gòu)和模塊調(diào)用關(guān)系等重要信息。 傳統(tǒng)流程圖中用箭頭代表控制流,因此,程序員不受任何 約束,可以完全不顧結(jié)構(gòu)程序設(shè)計的思想,隨意進(jìn)行轉(zhuǎn)移 控制。精選課件C語句概述3.2 C程序是以語句為基本單位的。教學(xué)進(jìn)程 C語言的語句用來向計算機(jī)發(fā)出操作指令。 一個語句經(jīng)編譯后產(chǎn)生若干條機(jī)器指令。 一個函數(shù)的執(zhí)行部分是由若干條語句組成的。 C語句都是用來完成一定的操作任務(wù)的。C程序結(jié)構(gòu)C程序函數(shù)首部函數(shù)體數(shù)據(jù)聲明執(zhí)行語句源程序文件1源程序文件2.源程序文件n預(yù)處理命令數(shù)據(jù)聲明函數(shù)1函數(shù)2精選課件C語句概述3.2教學(xué)進(jìn)程C語句的分類 控制語句 用于完成一定的控制功能 if ( ) e

5、lse for ( ) while ( ) do while ( ) continue break switch ( ) return goto 標(biāo)號 說明:“( ) ”中是一個判斷條件, “”表示內(nèi)嵌的語句。精選課件C語句概述3.2教學(xué)進(jìn)程C語句的分類 函數(shù)調(diào)用語句 由一個函數(shù)調(diào)用加一個分號構(gòu)成,例如: printf(“This is a C statement.”); 表達(dá)式語句 由一個表達(dá)式加一個分號構(gòu)成,最典型的是賦值語句,例如: a=3 是一個表達(dá)式 a=3 ; 是一個表達(dá)式語句精選課件C語句概述3.2教學(xué)進(jìn)程C語句的分類 復(fù)合語句 用“”括起來的若干個語句,例如: z=x+y; t

6、=z/100; printf(“%f”,t); 空語句 只有一個分號,什么都不做,例如: ;C語言允許一行寫幾個語句,也允許一個語句拆開寫在幾行上。一般形式為 : 說明部分;語句部分;精選課件C語句概述3.2教學(xué)進(jìn)程C語句的分類 復(fù)合語句 用“”括起來的若干個語句,例如: z=x+y; t=z/100; printf(“%f”,t); 空語句 只有一個分號,什么都不做,例如: ;C語言允許一行寫幾個語句,也允許一個語句拆開寫在幾行上。一般形式為 : 說明部分;語句部分;精選課件賦值表達(dá)式和賦值語句3.3教學(xué)進(jìn)程3.3.1 賦值表達(dá)式1. 賦值運(yùn)算符 賦值運(yùn)算符為 “=”。2. 賦值表達(dá)式 賦值

7、表達(dá)式為 標(biāo)識符=表達(dá)式功能是:首先計算賦值運(yùn)算符右邊表達(dá)式的值,然后將計算結(jié)果賦給賦值運(yùn)算符左邊的標(biāo)識符。說 明:賦值運(yùn)算符左側(cè)的標(biāo)識符稱為左值,可以是變量,不能是表達(dá)式、常量;右側(cè)的表達(dá)式稱為右值。左值可以作為右值,反之則不一定行。 賦值表達(dá)式可以出現(xiàn)在另一個表達(dá)式中參與運(yùn)算。精選課件賦值表達(dá)式和賦值語句3.3教學(xué)進(jìn)程3.3.1 賦值表達(dá)式 . a=3 把常量3賦給變量a為值。 . 假設(shè)x與y都是已定義的整型變量,則表達(dá)式 x=y=4+5 等價與 x=(y=4+5) 執(zhí)行過程是:首先計算賦值表達(dá)式(y=4+5)的值,即計算4+5的值為9,并將計算結(jié)果賦給變量y,而賦值表達(dá)式(y=4+5)的

8、值也為9; 然后再將賦值表達(dá)式(y=4+5)的值(即9)賦給變量x。因此,通過這個賦值表達(dá)式將4+5的計算結(jié)果同時賦給了變量x與y。例如賦值表達(dá)式出現(xiàn)在另一個表達(dá)式中。精選課件賦值表達(dá)式和賦值語句3.3教學(xué)進(jìn)程3.3.1 賦值表達(dá)式 . b=a; /* b是左值,得到a的值*/ c=b; /* b是右值,將其值賦給c*/. a=(b=5) 等價于 a=b=5,因為賦值運(yùn)算符按照“自右至左”的順序結(jié)合. a=b=c=5 賦值表達(dá)式的值為5,a、b、c的值都為5 a=5+(c=6) 賦值表達(dá)式的值為11,a的值為11、c的值為6 a=(b=4)+(c=6) 表達(dá)式的值為10,a是10、 b是4 、

9、c是6 a=(b=10)/(c=2) 表達(dá)式的值為5,a是5、 b是10 、c是2例如精選課件賦值表達(dá)式和賦值語句3.3教學(xué)進(jìn)程3.3.1 賦值表達(dá)式 . (a=3*5)=4*3 先算括號a得到15,再算4*3 , a又得到12,因此整個表達(dá)式的值是12 若寫成 a=3*5=4*3則出錯,因為3*5不能作為左值例如計算a-=a*a a=a-a*a,得到a=12-12*12=-132計算a+=a a=a+(-132),得到a=-132+(-132)=-264(7). 賦值表達(dá)式可以出現(xiàn)在其它語句中,如: printf(“%d”,a=b); 注:在一個語句中完成了賦值和輸出兩個操作。. 計算 a+

10、=a-=a*a的值,設(shè)a的初值為12。精選課件a+=3等價于a=a+3a-=ba=a-bx*=y+8x= x*( y+8)x/=yx=x/yx%=3-yx=x%(3-y)教學(xué)進(jìn)程3.3.1 賦值表達(dá)式3. 復(fù)合的賦值運(yùn)算符 在賦值運(yùn)算符“=”前加上其它二目運(yùn)算符構(gòu)成,如:“+= ”。4.復(fù)合的賦值表達(dá)式 復(fù)合的賦值表達(dá)式為 變量名 復(fù)合的賦值運(yùn)算符 表達(dá)式C語言中的復(fù)合賦值運(yùn)算符: +=、-=、*=、/=、%=凡是需要兩個運(yùn)算對象的運(yùn)算符可簡化程序,提高編譯效率。精選課件計算a-=a*a a=a-a*a,得到a=12-12*12=-132計算a+=a a=a+(-132),得到a=-132+(

11、-132)=-264(8). 計算 a+=a-=a*a的值,設(shè)a的初值為12。精選課件賦值運(yùn)算教學(xué)進(jìn)程 1)在C語言中,“=”為賦值運(yùn)算符,而不是等號。 2)賦值運(yùn)算符=左邊必須是變量,不能是表達(dá)式。 3)賦值運(yùn)算符=兩端的類型不一致時,系統(tǒng)將自動進(jìn)行類型轉(zhuǎn)換。說明精選課件3.3.2 賦值過程中的類型轉(zhuǎn)換教學(xué)進(jìn)程 實型數(shù)據(jù)賦給整型變量 舍去小數(shù),將整數(shù)部分賦給整型變量 若賦值運(yùn)算符兩側(cè)的類型一致,就直接進(jìn)行賦值,如: int i; i=6; 若賦值運(yùn)算符兩側(cè)的類型不一致,就要由系統(tǒng)自動進(jìn)行類型轉(zhuǎn)換。轉(zhuǎn)換規(guī)則是: 整型數(shù)賦給實型變量 數(shù)值不變,但以浮點數(shù)形式存儲到變量中 雙精度數(shù)賦給單精度變量

12、截取7位有效數(shù)字,但應(yīng)注意數(shù)值會溢出 單精度數(shù)賦給雙精度變量 數(shù)值不變,有效位數(shù)擴(kuò)展到16位 占字節(jié)多的整數(shù)賦給整型/字符型變量,只將低字節(jié)賦給變量c=2890000000100100001c33=00100001精選課件3.3.2 賦值過程中的類型轉(zhuǎn)換教學(xué)進(jìn)程 實型數(shù)據(jù)賦給整型變量 舍去小數(shù),將整數(shù)部分賦給整型變量 若賦值運(yùn)算符兩側(cè)的類型一致,就直接進(jìn)行賦值,如: int i; i=6; 若賦值運(yùn)算符兩側(cè)的類型不一致,就要由系統(tǒng)自動進(jìn)行類型轉(zhuǎn)換。轉(zhuǎn)換規(guī)則是: 整型數(shù)賦給實型變量 數(shù)值不變,但以浮點數(shù)形式存儲到變量中 雙精度數(shù)賦給單精度變量 截取7位有效數(shù)字,但應(yīng)注意數(shù)值會溢出 單精度數(shù)賦給雙

13、精度變量 數(shù)值不變,有效位數(shù)擴(kuò)展到16位 占字節(jié)多的整數(shù)賦給整型/字符型變量,只將低字節(jié)賦給變量 有符號整數(shù)賦給長度相同的無符號整型變量,按字節(jié)原樣賦給變量 無符號整數(shù)賦給長度相同的有符號整型變量,應(yīng)注意不要超出范圍unsigned a;int b=-1; a=b;b1111111111111111a1111111111111111精選課件3.3.2 賦值過程中的類型轉(zhuǎn)換教學(xué)進(jìn)程 實型數(shù)據(jù)賦給整型變量 舍去小數(shù),將整數(shù)部分賦給整型變量 若賦值運(yùn)算符兩側(cè)的類型一致,就直接進(jìn)行賦值,如: int i; i=6; 若賦值運(yùn)算符兩側(cè)的類型不一致,就要由系統(tǒng)自動進(jìn)行類型轉(zhuǎn)換。轉(zhuǎn)換規(guī)則是: 整型數(shù)賦給實型

14、變量 數(shù)值不變,但以浮點數(shù)形式存儲到變量中 雙精度數(shù)賦給單精度變量 截取7位有效數(shù)字,但應(yīng)注意數(shù)值會溢出 單精度數(shù)賦給雙精度變量 數(shù)值不變,有效位數(shù)擴(kuò)展到16位 占字節(jié)多的整數(shù)賦給整型/字符型變量,只將低字節(jié)賦給變量 有符號整數(shù)賦給長度相同的無符號整型變量,按字節(jié)原樣賦給變量 無符號整數(shù)賦給長度相同的有符號整型變量,應(yīng)注意不要超出范圍精選課件3.3.3 賦值語句教學(xué)進(jìn)程Cs=2*3.14159*r; 賦值表達(dá)式的最后加一個“;”,就是賦值語句, 賦值語句的形式為: 變量名=表達(dá)式;x*=y+8; 復(fù)合語句 簡單語句 賦值號“=”是一個運(yùn)算符; 區(qū)別賦值表達(dá)式和賦值語句的不同,如: if (a=

15、b)0)t=a; if(a=b;)0)t=a;精選課件3.3.4 變量賦初值int a=3;float f=3.56;char c=a; 程序中常需要對一些變量預(yù)先設(shè)定一個值初值。int a,b,c;a=b=c=3; 也可以用賦值語句實現(xiàn) 可以在定義變量的同時使變量初始化int a,b,c=5;int a=3,b=3,c=3;例如int a;float f;char c;a=3; c=a;f=3.56; int a,b,c; c=5;精選課件數(shù)據(jù)的輸入與輸出是相對于計算機(jī)而言的。其中: 從計算機(jī)向外部設(shè)備輸送數(shù)據(jù)稱為輸出。通常輸出設(shè)備包括:顯示器、打印機(jī)等; 從外部設(shè)備向計算機(jī)輸送數(shù)據(jù)稱為輸入

16、。通常輸入設(shè)備包括:鍵盤、鼠標(biāo)、掃描儀等。 在C語言中,輸入與輸出是用標(biāo)準(zhǔn)庫函數(shù)中的輸入、輸出函數(shù)實現(xiàn)的,這樣就避免了在編譯階段將輸入輸出語句翻譯成二進(jìn)制代碼及處理與硬件有關(guān)的問題,可是編譯系統(tǒng)簡化,通用性增強(qiáng),可移植性好。3.4教學(xué)進(jìn)程 數(shù)據(jù)輸入輸出的概念及在C語言中的實現(xiàn) 庫函數(shù)已編譯成目標(biāo)文件,在連接時與編譯源程序得到的目標(biāo)文件(.obj)相連接,生成可執(zhí)行程序(.exe)。注意:在使用系統(tǒng)庫函數(shù)時,要用預(yù)編譯命令#include將有關(guān)的頭文件包含到用戶源文件中(即在程序的開頭) 。頭文件中包含了調(diào)用函數(shù)時所需的有關(guān)信息。精選課件數(shù)據(jù)的輸入與輸出應(yīng)包括以下幾項: 用于輸入或輸出的設(shè)備。

17、輸入或輸出數(shù)據(jù)的格式。 輸入或輸出的具體內(nèi)容。 在C語言提供的用于輸入與輸出的函數(shù)中,鍵盤是標(biāo)準(zhǔn)輸入設(shè)備,顯示器是標(biāo)準(zhǔn)輸出設(shè)備。輸出設(shè)備輸入設(shè)備教學(xué)進(jìn)程 另外,如果在程序中要使用C語言所提供的輸入函數(shù)或輸出函數(shù),要用到“stdio.h”文件中的信息。則在使用前(即在程序的開頭處)應(yīng)該使用包含命令#include “stdio.h”將C語言中輸入與輸出的庫函數(shù)包含進(jìn)來。#include stdio.h3.4 數(shù)據(jù)輸入輸出的概念及在C語言中的實現(xiàn)精選課件 字符數(shù)據(jù)的輸入輸出3.53.5.1 用putchar函數(shù)輸出一個字符 格式 putchar (c) 作用 輸出變量c的值。 說明 c可以是字符型

18、或整型變量。 c可以是轉(zhuǎn)義字符,如: putchar(101); 作用:輸出字符A putchar(); 輸出字符單引號 putchar(015); 輸出回車 putchar (n); 輸出換行教學(xué)進(jìn)程精選課件#include void main ( ) char a,b,c; a=B;b=O;c=Y; putchar(a);putchar(b);putchar(c); putchar (n); 【例3.3】 輸出單個字符。運(yùn)行結(jié)果:BOY 教學(xué)進(jìn)程精選課件 字符數(shù)據(jù)的輸入輸出3.53.5.2 用getchar函數(shù)輸入一個字符 格式 getchar ( ) 作用 從計算機(jī)終端(鍵盤)輸入一個字

19、符。 說明 函數(shù)的值就是從輸入設(shè)備得到的字符。 getchar( )函數(shù)只能接收一個字符。 該函數(shù)可給字符型或整型變量提供一個字符。 該函數(shù)可作為表達(dá)式的一部分。教學(xué)進(jìn)程putchar(getchar();printf(%c,getchar();精選課件#include void main ( ) char c; c=getchar( ); putchar(c); putchar (n); 【例3.4】 輸入單個字符。運(yùn)行結(jié)果:a /*輸入一個字符*/a /*輸出該字符*/從鍵盤輸入一個字符給字符變量c教學(xué)進(jìn)程精選課件 字符數(shù)據(jù)的輸入輸出3.53.5.2 用getchar函數(shù)輸入一個字符 該函

20、數(shù)可作為表達(dá)式的一部分。教學(xué)進(jìn)程 putchar(getchar(); printf(%c,getchar();#include void main ( ) char c; putchar( getchar( ) ); putchar (n); 精選課件3.6.1 用簡單的printf函數(shù)輸出數(shù)據(jù) P52 printf (格式控制,輸出表列) ;教學(xué)進(jìn)程printf(%d,%cn,i,c); 格式控制 ,用一對雙引號括起來,包括兩種信息: 格式說明 由“%”和特定字符組成,如:%d、%c、%f等,是格式說明符,用于說明輸出項目所采用的格式; 普通字符 作為說明性的文字、符號等,照原樣顯示出來。

21、 輸出表列 中的各項目指出了所要輸出的內(nèi)容,可是常量、變量或表達(dá)式。 簡單的格式輸入與輸出3.6 例如: printf(a=%d b=%fn,a,b) ;1. printf函數(shù)的一般格式精選課件 d教學(xué)進(jìn)程按十進(jìn)制整型數(shù)據(jù)的實際長度輸出。 %i %c2. 基本的格式字符與%d格式相同,較少用。僅輸出一個字符。 %s輸出一個字符串。printf(%sn, CHINA);輸出的結(jié)果是字符串 CHINA %f以小數(shù)形式輸出一個實數(shù)(含單雙精度數(shù))。整數(shù)部分全部輸出,并輸出6位小數(shù)。 %e 或%E以指數(shù)形式輸出一個實數(shù)(含單雙精度數(shù))。小數(shù)點前僅1位非0數(shù)字,并輸出6位小數(shù)。精選課件教學(xué)進(jìn)程 scan

22、f(“格式控制”,地址表列); 作用 將從鍵盤輸入的a、b、c的值存入它們在內(nèi)存中所占的存儲單元里。存儲單元由地址標(biāo)識,是在編譯連接階段分配的。 說明 “格式控制”的含義同printf函數(shù),說明輸入的數(shù)據(jù)應(yīng)使用的格式。 “地址表列”是由若干個地址組成的,可以是變量的地址或字符串的首地址。&是取地址運(yùn)算符,用于取出變量的地址。 與格式輸出一樣,在格式控制中,用于說明輸入數(shù)據(jù)格式的格式說明符總是以開頭,后面緊跟的是具體的格式。scanf(%d,&a);3.6.2 用簡單的scanf函數(shù)輸入數(shù)據(jù) P551. scanf函數(shù)的一般格式精選課件【例3.8】 用scanf函數(shù)輸入數(shù)據(jù)。運(yùn)行結(jié)果:3 4 5

23、 a=3,b=4,c=5 從鍵盤輸入整型數(shù)給變量a、b、c/*輸入的數(shù)據(jù)可用空格、Tab鍵、回車鍵之任一種分開*/#include void main ( ) int a,b,c; scanf(%d%d%d,&a,&b,&c); printf(a=%d,b=%d,c=%dn,a,b,c);bca453數(shù)據(jù)在內(nèi)存中的存放教學(xué)進(jìn)程精選課件 d按十進(jìn)制整數(shù)的形式輸入數(shù)據(jù)。 %i %c2. 格式說明與%d格式相同,較少用。僅能輸入一個字符。 %s能輸入一個字符串。 %f從鍵盤輸入一個實數(shù)(含單雙精度數(shù)),也可以指數(shù)形式輸入一個實數(shù)。 %e 或%E教學(xué)進(jìn)程scanf函數(shù)與printf函數(shù)中的格式說明相似

24、。精選課件 scanf函數(shù)中的“格式控制”后面應(yīng)當(dāng)是變量的地址,由取地址運(yùn)算符和變量名共同組成,不能僅是變量名: scanf(%f%e%g, a, b, c); 如果“格式控制”中除了格式說明以外還有其它字符,則在輸入數(shù)據(jù)時必須在對應(yīng)位置輸入與之相同的字符: scanf(%d,%d, &a,&b); 從鍵盤輸入時必須輸逗號: 3,4 說明教學(xué)進(jìn)程 scanf函數(shù)中的“格式控制”后面應(yīng)當(dāng)是變量的地址,由取地址運(yùn)算符和變量名共同組成,不能僅是變量名: scanf(%f%e%g, &a,&b,&c); 用%c格式輸入字符時,空格和轉(zhuǎn)義字符都作為有效字符輸入,應(yīng)注意: scanf(%c%c%c, &a

25、,&b,&c); 若輸入:x y z 則a得到x,b得到空格,c得到y(tǒng) 用%c格式輸入字符時,空格和轉(zhuǎn)義字符都作為有效字符輸入,應(yīng)注意: scanf(%c%c%c, &a,&b,&c); 只有輸入:xyz 才能使a得到x,b得到y(tǒng),c得到z精選課件說明 對于unsigned型變量所需的數(shù)據(jù),可以用%u或%d格式輸入。教學(xué)進(jìn)程 在輸入數(shù)值型數(shù)據(jù)時,遇到空格、回車、Tab鍵或遇非法輸入,則認(rèn)為該數(shù)據(jù)結(jié)束: scanf(%d%c%f, &a,&b,&c); 若輸入:1234a123o.26 a b c非法字符精選課件教學(xué)進(jìn)程 按指定格式輸出數(shù)據(jù)的寬度、小數(shù)位數(shù)、上下行數(shù)據(jù)按小數(shù)點對齊、用八進(jìn)制、十六

26、進(jìn)制輸出等。 較復(fù)雜的輸入輸出格式控制 P583.7 3.7.1 輸出數(shù)據(jù)格式控制 P62表3-1表3-2十進(jìn)制形式 d 或 md 用于基本整型ld 或 mld 用于長整型u 或 mu 用于無符號基本整型lu 或 mlu 用于無符號長整型1 整型格式說明符intlongunsignedunsigned long八進(jìn)制形式十六進(jìn)制形式精選課件教學(xué)進(jìn)程八進(jìn)制形式o 或 mo 用于基本整型lo 或 mlo 用于長整型十六進(jìn)制形式x 或 mx 用于基本整型lx 或 mlx 用于長整型m表示輸出的整型數(shù)據(jù)所占總寬度(即列數(shù)),其中: 當(dāng)實際數(shù)據(jù)的位數(shù)不到m位時,數(shù)據(jù)前面將用空格補(bǔ)滿; 若實際數(shù)據(jù)位數(shù)大于

27、m,則以數(shù)據(jù)的實際位數(shù)為準(zhǔn)進(jìn)行輸出。對于o或x 格式,輸出的數(shù)據(jù)不帶符號,符號位也作為數(shù)據(jù)的一部分輸出了,所以不會有負(fù)數(shù)輸出。一個int型整數(shù)也可以%u格式輸出,反之一個unsigned型整數(shù)也可以%d、%o、%x格式輸出。按相互賦值的規(guī)則處理。intlongintlong精選課件【例3.9】 無符號數(shù)據(jù)的輸出。# include void main() unsigned 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é)果:a=65535,177777,ffff,65535

28、 b=-2,3777777776,fffffffe,4294967294 教學(xué)進(jìn)程1111111111111111前兩字節(jié)16個00111111111111111前兩字節(jié)16個1精選課件2 字符型格式說明符教學(xué)進(jìn)程 一個整數(shù),只要其值在0255范圍內(nèi),也可義用“%c”格式使其按字符形式輸出。 在輸出前,系統(tǒng)會自動將該整數(shù)作為ASCII碼轉(zhuǎn)換成相應(yīng)的字符;反之,一個字符也可以輸出成一個整數(shù)。 字符char型 mc 輸出的字符占m列,如:printf(“%3c”,a);實際輸出為:a字符串ms 輸出的字符串占m列。若串長m,全部輸出;若串長m,左面補(bǔ)空格。-ms 輸出的字符串長m,右面補(bǔ)空格-m.

29、ns 只取字符串前n個字符。若nn,m自動取n值。精選課件【例3.10】 字符串的輸出。# include void main ( ) printf(%3s,%7.2s ,%-5.3s,%.4sn,CHINA,CHINA, CHINA, CHINA);運(yùn)行結(jié)果: CHINA, CH, CHI, CHIN教學(xué)進(jìn)程精選課件3 實型格式說明符十進(jìn)制數(shù)形式教學(xué)進(jìn)程指數(shù)形式m.ne 或 -m.nem.nf 或 -m.nf 在輸出實型數(shù)據(jù)時,格式說明符中的m表示整個數(shù)據(jù)所占的寬度,n表示小數(shù)點后面所占的位數(shù)。 如果在小數(shù)點后取n位后,所規(guī)定的數(shù)據(jù)寬度m不夠輸出數(shù)據(jù)前面的整數(shù)部分(包括小數(shù)點),則按實際的位

30、數(shù)進(jìn)行輸出。 需要指出的是,在C語言中,用于輸出單精度實型數(shù)據(jù)與雙精度實型數(shù)據(jù)格式說明符是一樣的。 %g或%G形式根據(jù)數(shù)值的大小,自動選f 或 e中寬度較短的一種格式,不輸出無意義的0。精選課件【例3.11】 輸出實數(shù)時,指定小數(shù)位數(shù)。# include void main ( ) float f=123.456; printf(%f%10f%10.2f%.2f%-10.2fn,f,f,f,f,f);運(yùn)行結(jié)果: 123.456001123.456001123.46123.46123.46 教學(xué)進(jìn)程精選課件【例3.12】 求3個圓的周長,輸出結(jié)果時上下按小數(shù)點對齊,取兩位小數(shù)。# include

31、 #define PI 3.1415926void main ( )double r1=1.53,r2=21.83,r3=123.71,s1,s2,s3; s1=2.0*PI*r1; s2=2.0*PI*r2; s3=2.0*PI*r3; printf(r1=%10.2fnr2=%10.2fnr3=%10.2fn,r1,r2,r3);運(yùn)行結(jié)果:r1=1.53 r2=21.83 r3=123.71 教學(xué)進(jìn)程精選課件【例3.12】 求3個圓的周長,輸出結(jié)果時上下按小數(shù)點對齊,取兩位小數(shù)。# include #define PI 3.1415926void main ( )double r1=1.5

32、3,r2=21.83,r3=123.71,s1,s2,s3; s1=2.0*PI*r1; printf(r1=%10.2fts1=%10.2fn,r1,s1); s2=2.0*PI*r2; printf(r2=%10.2fts2=%10.2fn,r2,s2); s3=2.0*PI*r3; printf(r3=%10.2fts3=%10.2fn,r3,s3);運(yùn)行結(jié)果:r1=1.53,s1=9.61r2=21.83, s2=137.16r3=123.71, s3=777.29教學(xué)進(jìn)程精選課件 格式輸出函數(shù)的執(zhí)行過程如下:教學(xué)進(jìn)程 首先,在計算機(jī)內(nèi)存中開辟一個輸出緩沖區(qū),用于存放輸出項目表中各項目

33、數(shù)據(jù)。 然后,依次計算項目表中各項目(常量或變量或表達(dá)式)的值,并按各項目數(shù)據(jù)類型應(yīng)占的字節(jié)數(shù)依次將它們存入輸出緩沖區(qū)中。 最后,根據(jù)“格式控制”字符串中的各格式說明符依次從輸出緩沖區(qū)中取出若干字節(jié)的數(shù)據(jù)(如果是非格式說明符,則將按原字符輸出),轉(zhuǎn)換成對應(yīng)的十進(jìn)制數(shù)據(jù)進(jìn)行輸出。其中從輸出緩沖區(qū)中取多少個字節(jié)的數(shù)據(jù)是按照對應(yīng)格式說明符說明的數(shù)據(jù)類型。 在“格式控制”的格式說明符中,如果帶有寬度說明,則在左邊沒 有數(shù)字的位置上用空格填滿(即輸出的數(shù)字是右對齊)。但如果在寬度 說明前加一 個負(fù)號(-),則輸出為左對齊,即在右邊補(bǔ)空格。精選課件【例】 設(shè)有如下C程序:#include stdio.hm

34、ain() double x=34.567; printf(x=fn,x); printf(x=dn,x); printf(x=dn,(int)x);這個程序的實際運(yùn)行結(jié)果為x=34.567000 x=27263x=34 顯然,這個程序中的第二個格式輸出語句輸出的結(jié)果是錯誤的,這是因為在第二個格式輸出語句中,格式說明符d是基本整型格式說明符,而輸出項目是雙精度型的數(shù)據(jù),它們是不匹配的。教學(xué)進(jìn)程精選課件教學(xué)進(jìn)程十進(jìn)制形式 d 或 md 用于一般整型ld 或 mld 用于長整型u 或 mu 用于無符號基本整型lu 或 mlu 用于無符號長整型八進(jìn)制形式o 或 mo 用于一般整型lo 或 mlo 用

35、于長整型十六進(jìn)制形式x 或 mx 用于一般整型lx 或 mlx 用于長整型可見:用于輸入與輸出整型數(shù)據(jù)的格式說明符是完全一樣的。 m表示輸入數(shù)據(jù)時的寬度(即列數(shù))。 與輸出情形一樣,對于八進(jìn)制形式與十六進(jìn)制形式的輸入格式,主要用于輸入無符號整型的數(shù)據(jù)。 3.7.2 輸入數(shù)據(jù)格式控制 P63表3-3表3-4整型格式說明符精選課件實型格式說明符教學(xué)進(jìn)程單精度實型雙精度實型lff 或 e與輸出不同,輸入時無論是單精度還是雙精度實型,都不能用m.n來指定輸出的寬度和小數(shù)點后的位數(shù);可以指定輸入數(shù)據(jù)所占的列數(shù),系統(tǒng)自動按它截取所需數(shù)據(jù),如:scanf(“%3d%3d”,&a,&b); 當(dāng)輸入123456

36、7時,a得到123,b得到456,多余的7無用;若在%號后有一個“*”和一個數(shù)字,表示跳過它指定的列數(shù),如:scanf(“%2d%*3d%3d”,&a,&b);當(dāng)輸入12345678時,a得到12, %*3d表示讀入345這3個數(shù)但不賦給變量, b得到678。精選課件 mc 對取得的m個字符僅第一個賦給變量字符型格式說明符教學(xué)進(jìn)程下面是用到格式輸入的一個程序:#include stdio.hmain() int a; float b; char c; scanf(dfc,&a,&b,&c); 下面對格式輸入作幾點說明: 在格式輸入中,內(nèi)存地址表中的各項目必須是變量地址,而不能是變量名,且彼此間

37、用“,”分隔。為此,C語言專門提供了一個取地址運(yùn)算符&。例如,&a表示變量a在內(nèi)存中的首地址。精選課件教學(xué)進(jìn)程 當(dāng)用于輸入整型數(shù)據(jù)的格式說明符中沒有寬度說明時,則在具體輸入 數(shù)據(jù)時分為以下兩種情況: 如果各格式說明符之間沒有其它字符,則在輸入數(shù)據(jù)時,兩個數(shù)據(jù) 之間用空格、或Tab、或回車來分隔。 如果各格式說明符之間包含其它字符,則在輸入數(shù)據(jù)時,應(yīng)輸入與 這些字符相同的字符作為間隔。 例如,設(shè)有如下說明 int a, b ; float c, d ; 現(xiàn)要利用格式輸入函數(shù)輸入a=12,b=78,c=12.5,d=7.6。 采用不同的格式說明,其輸入數(shù)據(jù)的形式也是不同的。分別說明如下:精選課件教

38、學(xué)進(jìn)程 若輸入語句為 scanf(ddff,&a,&b,&c,&d); (即格式說明符中沒有寬度說明,各格式說明符之間也沒有其他字符。) 則輸入數(shù)據(jù)的形式應(yīng)為 12 78 12.5 7.6 (兩個數(shù)據(jù)之間用空格來分隔,當(dāng)然也可用“Tab”或“回車”來分隔。) 若輸入語句為 scanf(d,d,f,f,&a,&b,&c,&d);(格式說明符中沒有寬度說明,但各格式說明符之間有其它字符,即逗號) 則輸入數(shù)據(jù)的形式應(yīng)為 12,78,12.5,7.6 (即在輸入的兩個數(shù)據(jù)之間同時要輸入逗號。) 若輸入語句 scanf(“a=d,b=d,c=f,d=f”,&a,&b,&c,&d); (即格式說明符中沒有

39、寬度說明,但各格式說明符之間有其它字符。) 輸入數(shù)據(jù)的形式應(yīng)為 a=12,b=78,c=12.5,d=7.6 (即在輸入的兩個數(shù)據(jù)之間同時要輸入這些非格式說明符的字符。)精選課件教學(xué)進(jìn)程 當(dāng)整型或字符型格式說明符中有寬度說明時,按寬度說明截取數(shù)據(jù)。一個字符型變量只能存放一個字符【例】 設(shè)有以下程序:#include stdio.hmain() int a,d; char b,c; printf(input a,b,c,d:); scanf(3d3c2c2d,&a,&b,&c,&d); printf(a=d,b=c,c=c,d=dn,a,b,c,d); 若從鍵盤輸入如下(其中“input a,b

40、,c,d :”為輸出的字符串): input a,b,c,d: 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 3d 3c 2c 2d 則它們與各格式說明符之間的對應(yīng)關(guān)系如上,最后賦給各變量的值為 a=123,b=4,c=7,d=90精選課件教學(xué)進(jìn)程 在用于輸入的實型格式說明符中不能用m.n來指定輸入的寬度和小數(shù) 點后的位數(shù)(這是與輸出的不同之處)。 例如: scanf(“7.2f”,&a); 此用法是錯誤的 為了便于程序執(zhí)行過程中從鍵盤輸入數(shù)據(jù),在一個C程序開始執(zhí)行時, 系統(tǒng)就在計算機(jī)內(nèi)存中開辟了一個輸入緩沖區(qū),用于暫存從鍵盤輸入 的數(shù)據(jù)。開始時該輸入緩沖區(qū)是空的。當(dāng)執(zhí)行到一

41、個輸入函數(shù)時,就 檢查輸入緩沖區(qū)中是否有數(shù)據(jù): 如果輸入緩沖區(qū)中已經(jīng)有數(shù)據(jù)(上一個輸入函數(shù)剩下的),則依次按照“格式控制”中的格式說明符從輸入緩沖區(qū)中取出數(shù)據(jù)轉(zhuǎn)換成計算機(jī)中的表示形式(二進(jìn)制),最后存放到內(nèi)存地址表中指出的對應(yīng)地址中。精選課件 如果輸入緩沖區(qū)中沒有數(shù)據(jù)(即輸入緩沖區(qū)位空),則等待用 戶從鍵盤輸入數(shù)據(jù)并依次存放到輸入緩沖區(qū)中。當(dāng)輸入一個或符后,將依次按照“格式控制”中還未用過的格式說明符從輸入緩沖區(qū)中取出數(shù)據(jù)轉(zhuǎn)換成計算機(jī)中的表示形式(二進(jìn)制),最后存放到內(nèi)存地址表中指出的對應(yīng)地址中。教學(xué)進(jìn)程 在上述兩種任一種情況下,從輸入緩沖區(qū)中取數(shù)據(jù),如果遇到或字符,則將輸入緩沖區(qū)清空。此時如

42、果“格式控制”中的格式說明符還未用完,則繼續(xù)等待用戶從鍵盤輸入數(shù)據(jù)并依次存放到輸入緩沖區(qū)中,直到輸入一個或符后,再依次按照“格式控制“中還未用過的格式說明符從輸入緩沖區(qū)中取出數(shù)據(jù)轉(zhuǎn)換成計算機(jī)中的表示形式(二進(jìn)制),最后存放到內(nèi)存地址表中指出的對應(yīng)地址中。這個過程直到“格式控制”中的格式說明符用完為止。此時如果輸入緩沖區(qū)中的數(shù)據(jù)還未取完,則將留給下一個輸入函數(shù)使用。精選課件教學(xué)進(jìn)程 與格式輸出一樣,格式輸入的格式控制中的各格式說明符與內(nèi)存地 址表中的變量地址在個數(shù)、次序、類型方面必須一一對應(yīng)。 從以上輸入函數(shù)的執(zhí)行過程可以看出,從鍵盤輸入數(shù)據(jù)是以或作為結(jié)束的。當(dāng)輸入的數(shù)據(jù)一行不夠時,可以在下一行

43、繼續(xù)輸入;當(dāng)一行上的數(shù)據(jù)用不完時,可以留給下一個輸入函數(shù)使用。 需要注意的是,由于或是作為鍵盤輸入數(shù)據(jù)的結(jié)束符,因此,在輸入函數(shù)的格式控制中,最后不能加換行符n。精選課件【例3-5】 設(shè)有C程序如下:#include stdio.hmain() double x; printf(input x:); scanf(f,&x); printf(x=fn,x);這個程序的運(yùn)行結(jié)果為(其中有下劃線的部分為鍵盤輸入)input x:123.456x=0.000000 顯然,輸出語句輸出的x值是錯誤的。這是因為,x定義為雙精度型的實型變量(占8B),但它使用的是單精度實型的輸入格式說明符。當(dāng)輸入一個實型數(shù)

44、123.456后,將按照單精度輸入格式說明符將它轉(zhuǎn)換成計算機(jī)中的表示形式(只占4B),最后存放到為雙精度實型變量x所分配的存儲空間的低4B中,而為雙精度實型變量x所分配的存儲空間的高4B中的各位均是0,這就造成雙精度實型變量x的(階碼N-2)的11位偏移碼均位0,這是C語言中無法表示的一個絕對值很小的數(shù)(稱為下溢),默認(rèn)為實型數(shù)0.0。教學(xué)進(jìn)程精選課件教學(xué)進(jìn)程 順序結(jié)構(gòu)程序設(shè)計舉例 P643.8 程序中所有語句都是按自上而下的順序執(zhí)行的,不發(fā)生跳轉(zhuǎn)?!纠?.13】 輸入三角形的三邊長,求三角形的面積。分析: 設(shè)輸入的三邊能構(gòu)成三角形; 求三角形面積的公式為 據(jù)此編寫程序如下:精選課件教學(xué)進(jìn)程

45、順序結(jié)構(gòu)程序設(shè)計舉例 P643.8#include #include void main() float a,b,c,s,area; scanf(%f,%f,%f,&a,&b,&c); s=(a+b+c)/2.0; area=sqrt(s*(s-a)*(s-b)*(s-c); printf(a=%fnb=%fnc=%fnarea=%fn,a,b,c,area); 當(dāng)輸入:3.4,4.5,5.6運(yùn)行結(jié)果為:a=3.400000b=4.500000c=5.600000area=7.649173printf(a=%7.2fnb=%7.2fnc=%7.2fnarea=%7.2fn,a,b,c,area

46、);若將輸出語句改為:運(yùn)行結(jié)果為:a=3.40b=4.50c=5.60area=7.65精選課件教學(xué)進(jìn)程 順序結(jié)構(gòu)程序設(shè)計舉例 P643.8【例3.14】 從鍵盤輸入一個大寫字母,要求用小寫輸出。分析: 大寫字母與小寫字母的ASCII碼值相差32。 對從鍵盤輸入的大寫字母加32即變?yōu)橄鄳?yīng)的小寫字母。據(jù)此編寫程序如下:#include void main() char c1,c2; c1=getchar(); printf(%c,%dn,c1,c1); c2=c1+32; printf(%c,%dn,c2,c2);當(dāng)輸入:A運(yùn)行結(jié)果為:A,65a,97精選課件教學(xué)進(jìn)程 順序結(jié)構(gòu)程序設(shè)計舉例 P6

47、43.8【例3.15】 求一元二次方程 的根。 要求:系數(shù)a、b、c從鍵盤輸入; 假設(shè):分析: 已知一元二次方程的根為: 則: 可將上式分解為兩項:據(jù)此編寫程序如下:精選課件教學(xué)進(jìn)程 順序結(jié)構(gòu)程序設(shè)計舉例 P643.8#include #include void main ( ) float a,b,c,disc,x1,x2,p,q; scanf(a=%f,b=%f,c=%f,&a,&b,&c); disc=b*b-4*a*c; p=-b/(2*a); q=sqrt(disc)/(2*a); x1=p+q;x2=p-q; printf(x1=%5.2fnx2=%5.2fn,x1,x2);當(dāng)輸入

48、:a=1,b=3,c=2運(yùn)行結(jié)果為:x1=-1.00 x2=-2.00精選課件【例3.1】 有符號整數(shù)賦給無符號整型變量,數(shù)據(jù)會變化,按字節(jié)原樣賦值,即符號位也作為數(shù)值一起傳送。#include void main ( ) unsigned a; /*定義a為無符號整型變量*/ int b; /*定義b為有符號整型變量*/ b=-1; a=b; printf(%un,a);運(yùn)行結(jié)果:4294967295 (vc中,232-1) |-1|0000000000000001取反1111111111111110加11111111111111111教學(xué)進(jìn)程精選課件#include void main (

49、 ) unsigned a; /*定義a為無符號整型變量*/ int b; /*定義b為有符號整型變量*/ b=-1; a=b; printf(a=%un,a); printf(b=%dn,b);運(yùn)行結(jié)果:a=4294967295 (vc中,232-1)b=-1教學(xué)進(jìn)程精選課件【例3.2】 無符號整數(shù)賦給有符號整型變量,注意數(shù)值范圍。#include void main ( ) unsigned a; /*定義a為無符號整型變量*/ int b; /*定義b為有符號整型變量*/ a=4294967295; b=a; printf(%dn,b);運(yùn)行結(jié)果:-1 (vc中,232-1)減11111

50、111111111111取反1111111111111110 -10000000000000001教學(xué)進(jìn)程精選課件教學(xué)進(jìn)程字符型格式說明符【例3.5】 字符數(shù)據(jù)的輸出。#include void main()char c=a; int i=97; printf(%c,%dn,c,c); printf(%c,%dn,i,i);運(yùn)行輸出的結(jié)果為a,97 a,97精選課件教學(xué)進(jìn)程實型格式說明符【例3.6】 輸出單精度實數(shù)時的有效位數(shù)。#include void main() float x,y; x=111111.111;y=222222.222; printf(%fn, x+y);運(yùn)行結(jié)果為333

51、333.328125整數(shù)部分全部輸出,并輸出6位小數(shù)。有效位數(shù)一般為7位。精選課件教學(xué)進(jìn)程實型格式說明符【例3.7-1】 輸出雙精度數(shù)時的有效位數(shù)。#include void main()double x,y; x=11111111.11111111;y=22222222.22222222; printf(%fn, x+y);運(yùn)行結(jié)果為33333333.333333整數(shù)部分全部輸出,有效位數(shù)可為16位,因用f格式僅輸出6位小數(shù)。精選課件教學(xué)進(jìn)程實型格式說明符【例3.7-2】 以指數(shù)形式輸出雙精度數(shù)時的有效位數(shù)。#include void main()double x,y; x=11111111

52、.11111111;y=22222222.22222222; printf(%en, x+y);運(yùn)行結(jié)果為3.333333e+007以指數(shù)形式輸出實數(shù),小數(shù)為6位。數(shù)值部分按規(guī)范化指數(shù)形式輸出。精選課件教學(xué)進(jìn)程 順序結(jié)構(gòu)程序設(shè)計舉例 P643.8 程序中所有語句都是按自上而下的順序執(zhí)行的,不發(fā)生跳轉(zhuǎn)?!纠?.13】 輸入三角形的三邊長,求三角形的面積。分析: 假設(shè)輸入的三邊能構(gòu)成三角形; 求三角形面積的公式為 半邊長計算公式為據(jù)此編寫程序如下:精選課件教學(xué)進(jìn)程#include #include void main() float a,b,c,s,area; scanf(%f,%f,%f,&a,&b,&c); s=(a+b+c)/2.0; area=sqrt(s*(s-

溫馨提示

  • 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

提交評論