數據描述與基本操作_第1頁
數據描述與基本操作_第2頁
數據描述與基本操作_第3頁
免費預覽已結束,剩余12頁可下載查看

下載本文檔

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

文檔簡介

1、第二章數據描述與根本操作教學目的:程序設計是對數據進行不同的操作來解決實際問題的,通過該章的學習,使學生掌握程序中所用的數據類型有哪些?對這些數據的操作有哪些?各種操作對不同的數據類 型運算后的結果是什么?為編程序中用到常量、變量、函數、表達式時打下一個好的根底, 能用表達式表示要解決的問題。重點與難點:變量定義,各種運算符的操作結果, 輸入與輸出語句的合理使用,各種表達式值的判斷,用表達式處理具體問題。數據與操作是構成程序的兩個要素。 程序中所用的數據和對數據的操作是編程序的主要內容,掌握了數據和對數據的根本操作,是編程序的根底,特別是求表達式的值,對程序執(zhí)行結果和程序流程起著決定的作用。2

2、.1數據類型數據是程序的必要組成局部,也是程序處理的對象。程序中使用“數據類型的概念,主要是數據的存儲形式和數據所參加的運算不同,程序中所用到的數據和變量都要歸屬于某一類型。c語言中數據類型介紹:1根本類型整型、實型、字符型2構造類型數組、結構體、共用體、文件3指針類型 4空類型數值的定點表示與浮點表示形式 浮點數:看n的不同形式3.14159 X 1003.14159e00.314159 X 1010.314159e+1-131.4159 X 1031.4159e-10. 314159+1同一個n可用不同的形式表示,主要是小數點的位置在變化, 即一個實數可分“尾數和階碼兩局部來表示,稱為浮點

3、數。即 是實數在內存中的存儲形式。12、- 20, 10稱為定點數,在計算機中的存儲形式按字節(jié)用二進制形式存儲。00 00 00 00 00 00 10 10左圖為10的16位存儲形式字符型數據的表示和存儲形式如:'A' , 9 為字符型數據,在內存中以 ASCII碼代碼存放字符的 ASCII代碼可查閱附錄1 ,例'a'的ASCII碼為97,那么存儲形式為:011 00001與存放整數97樣,即字符型的數據在 ASCII碼允許在范圍內與整型數相同。以下程序運行結果可說明問題:mai n()char ch;ch= ' a';printf(“%c ,

4、ch,ch);輸出結果為:97,a即字符型數據和整型數在一定范圍內是通用的。2.1.3 數據的存儲空間長度與取值范圍C 語言中不同的數據類型分配不同的長度 ( 以字節(jié)為單位 1字節(jié)存 8位二進制 ) 的存儲空 間。分配如下:1 字節(jié) 字符型 (char) 2 字節(jié) 整型 (int)4 字節(jié)長整型 (long)單精度型 (float )8 字節(jié)雙精度型 (double)由于存儲字節(jié)不同,所以取值范圍就不同:int - 32768 32767long- 21474836482147483647float和 double 取值范圍更大。2.1.4 帶符號的數據類型與無符號的數據類型 計算機內存中的正

5、負數在存儲時是通過最高位來表示的,如 :( 以 8 位為例 ) 01101011表示正數 10710100111 表示負數(補碼) 89 即負數在內存中以負數的補碼形式存放。正數的補碼就是該數本身化為二進制數。 如何求負數的補碼:先求該數的絕對值,化為二進制數;按位取反 (1 變0, 0變1 ) ;再加 1;如|89|=89 89=( 01011001 ) 2取反后等于 10100110加1 后變?yōu)?10100111 為補碼。 有符號整型數的取值范圍:兩字節(jié)十六位二進制數最大數: 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1=32767最小數: 1 0 0 0 0 0 0 0

6、 0 0 0 0 0 0 0 0= -32768 (為負數的存儲形式) 大家計算一下為什么是 -32768 ?無符號整型數的取值范圍: 對于無符號數來說, 高位不再來表示整數的符號位,1 6位的二進制數全部用來存放整數,因此無符號數不會是負數。這時:最大數: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1=65535(不再代表 -1 ,而是 65535)最小數: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0=0程序舉例:main()main()char ch;int a=-1;ch=0362;/* 八進制數 */printf("%d,%un"

7、;,a,a) ;printf("%d n",ch);輸出結果為: -14-1, 655352.2 常量和變量不同的數據類型既可以以常量形式出現, 也可以以變量形式出現。 常量在程序執(zhí)行期 間不發(fā)生變化、具有固定值。變量那么其值可發(fā)生變化,其實變量對應的是內存中的某一 存儲單元。2.2.1 直接常量和符號常量 直接常量就是程序中直接書寫的常數:12 整型常量 12.0,13.56 實型常量 's','D', 'A' 字符型常量符號常量在程序中用名字代表的常量,需要由編譯預處理和說明語句定義。例: #define PI 3.141

8、5926#define M 100PI與M就是符號常量。const float N 356; 說明語句N是符號常量。在程序的其它語句中用到PI , M N它的值就是對應的常數2.2.2 直接常量的書寫格式整型常數 十進制、八進制、十六進制 0 開頭 八進制 0x 0X 開頭 十六進制0254089 0x1FF 20af12與12L加L為長整型,大小相同,但存儲所占空間不同實型常量 小數形式和指數形式 34.5 .345 1e2 1.5e-3e-3 1e-0.5字符常量 用單引號括起來的字符 'A', 'W', '' 代表字符 , '

9、9; 不正確轉義字符 以 開頭后跟一個字符代表控制字符 'n' 表示回車換行 't'表示跳格'b' 表示退格 'ddd'表示3位8進制數所對應的字符'xhh' 表示2位16進制數所對應的字符 字符串常量 用雙引號括起來的多個字符 "hello","12345","A" 與'A'值相同,存儲形式不同,前者2字節(jié),后1字節(jié)。2.2.3 變量和對變量的賦值數據被存儲在一定的存儲空間中, 數據的加工就是在它們所在的存儲區(qū)與運算器之間傳 送過程中實現

10、的。在高級語言程序中,數據連同存儲空間被抽象為變量。變量有名字標識, 即變量名, 用字母等來表示, 它代表某個存儲空和所存儲的數據,存儲空間的數據就是變量的值。賦值運算就是從運算器向變量所對應的存儲單元傳送數據。用“=表示賦值操作。C 語言中的“=符號稱為賦值運算,由賦值運算符組成的表達式稱為賦值表達式, 形式如下:變量名 =賦值表達式賦值號的左邊必須是變量名, 即代表一個存儲單元或是代表某個存儲單元的表達式; 賦值號 右邊必須是C語言中合法的表達式。它的作用是把右邊表達式的值計算出來后賦給左邊的變 量,即放入存儲單元。假設定義了 int a,b 那么a=10 b=a都是合法的賦值表達式。假設

11、一個變量經過了屢次賦值,那么 最后一次才是它的值。賦值語句的考前須知:1. 和數學中的“等于號不是等同關系。2. 賦值運算的執(zhí)行方向同右向左,執(zhí)行為先計算再賦值。3. 賦值號連接的式子稱為賦值表達式,如 :a=3+5, 賦值表達式的值等于賦值后左邊變量中的值??蓪懗蛇B續(xù)賦值表達式:b=a=3=5d=c=b=a=3+54. n=n+1數學式子無意義,但在程序中那么有用的,是把n的值增加1再放到n中,程序中可用來計數。2.2.4 變量的聲明變量聲明的意義C 程序中用到的變量都要聲明它們屬于哪一種類型。 即要明確指定變量的類型。 為什么 呢?不同變量所占存儲單元大小不同。不同數據類型對應不同的取值范

12、圍。不同數據類型對應一組允許的操作運算。int 整型 float 單精度double 雙精度 char 字符型2.2.5 標識符標識符是給程序中處理的實體變量、常量、函數、數組、結構體、文件等起名字的。 標識符定義的規(guī)那么如下:由字母、數字及下劃線組成,且第一個字符必須是字母或下劃線。area ,PI ,_int, a_array,s1234,P101p都是合法的標識符;456P、cade-y、w.w、a&b都是不合法的標識符;C 語言中規(guī)定,大寫字母和小寫母是兩個不同的標識符,因此page與Page, pl與P1都是不同的標識符。對標識符的長度 含字母、 數字和下劃線的個數不同的系統(tǒng)

13、也有不同規(guī)定, 一般規(guī)定 只識別前 8個,即前 8個字符相同就被認為是同一個標識符如: abcdefgh1 與 abcdefgh2 認 為是同一個變量名。關鍵字是C語言中規(guī)定的一批專用標識符,它們在程序中在專門的用處,不能用作它用,也就是用戶再不能對它們重新定義。這些關鍵字如下:case if for int double等。預定義標識符這種標識符在語言中也有規(guī)定,它是庫函數名或預編譯處理命令等。如: printf,define,scanf 等。這類標識符允許用戶另作它用,但將失去系統(tǒng)規(guī)定的原意,鑒于這種原因,建議用戶不要把這些預定義標識符另作它用。主要是各種函數名數學、字符、文件函數。用戶標

14、識符:由用戶根據需要定義的標識符。 一般用來給變量、函數、 數組或文件命名,是用戶編程 的關鍵類似與數學中列方程解應用題時:設XX是x; XX是y。用戶應遵守標識符命名的規(guī)那么, 盡量不要和關鍵字和預定義標識符相同, 還應做到“見 名知義, 增加程序的可讀性, 如果用戶定義的標識符與關鍵字相同, 編譯時會給出錯誤信 息;如果和預定義標識符相同, 系統(tǒng)不報錯, 只是預定義標識符失去原來的含義, 代之以用 戶確定的含義,也可能引起程序運行時的錯誤。2.3 運算符與表達式運算是對數據的加工,根本運算符是用簡潔的符號記述,參加運算的對象稱為操作數。 表達式描術了對哪些數據,以什么順序以及施以什么樣的操

15、作,由運算符與運算量組成。C語言中提供了豐富的運算符,能構成多種表達式, 掌握了 C語言中的表達式,及表達式值的計算方法是必需的。C 語言中的運算有 13種:算術運算符 :+ ,-,*,/,%,+,-關系運算符 :>,<,= =,>=,<=,!=邏輯運算符 :! ,&&, |位運算符:<<,» ,|,人,&賦值運算符 : = 條件運算符 :? :逗號運算符 : ,指針運算符 : &,*求字節(jié)數運算符 :sizeof 強制類型轉換運算符 : 類型說明符 分量運算符 : . ->下標運算符 學習運算符應注意以下幾點

16、:運算符的功能是什么?與運算量的關系 個數、類型 。運算的優(yōu)先級 多種運算組成的表達式 。 結合方向。如: 3*5/6 與 a=3>5結果類型,兩個一同類型的數據參加運算后產生結果的數據類型是什么?如: 3/2 與3/2.0 的結果就不同。2.3.1 算術運算與算術表達式根本算術運算符在C語言中的算術運算有+、-、*、/、%分別代表加、減、乘、除、求余運算。其中求 余運算的兩個數必須是整型數,余數的符號與被除數相同。如:13%-3,結果為 2;-19%4結果為 -3由于 + 、 -號的特殊性,可作單目運算。但必須出現在左邊。雙目運算時,數據類型一致,才能進行運算,所得類型與運算數的類型一

17、致,如1/2 結果為0;而1.0/2.0 結果為0.5,如數據類型不一致 ,系統(tǒng)會自動進行轉換 ,轉換見附錄二。 所有實型數運算均為以雙精度型方式進行,假設是單精度那么在尾數補0,轉換為雙精度型。運算符的優(yōu)先級在C語言中,常量、變量、函數調用及按C語言語法規(guī)那么用運算符把運算數連接起來的式子都 是合法的表達式。但凡表達式都 有一個值,即運算結果。算術運算符的優(yōu)選級:、 +、 - 、 * 、 / 、 %、+、 -單目雙目同級同級同級高低算術運算符和括號的結合性和四那么混合運算法那么根本一致。 算術運算符中只有單目運算 “-和“+的結合性是從右到左,其余都是從左到右。如: 5+1 /2 結果為3;

18、 5+1/2結果為5; 5*-2結果為-10;等價于 5*-2的值。書中附錄三給出了 C語言運算符優(yōu)先級和結合方向。算術表達式用算術運算符和括號將運算量操作數連接起來符合C語法的表達式稱為算術表達式。 運算對象可以是:常量、變量、函數等。如:x*y/a+b a+b*h/2復合的賦值表達式在賦值運算符之前加上其它運算就構成了復合賦值運算符,C語言中規(guī)定了 10復合運算符,與算術有關是 +=、 -=、 *=、 /= 、 %=有5種,它的運算優(yōu)先級與賦值運算同級。 它們代表的賦值表達式是什么形式呢?n+=1代表n=n+1n-=m+3代表n=n-m+3n*=m+3代表n=n*(m+3)n/=m+3代表

19、n=n/(m+3)n%=(m+3) 代表 n=n%(m+3)舉例:已有變量 a, 其值為 9 計算表達式 a+=a-=a+a 的值。由賦值運算與復合賦值運算同級, 運算從右到左,所以 :a+a 值為 18 a-=18 值為 -9 a+=-9 值為 -18自加、自減運算1 、自加運算符 (+) 、和自減運算符 (-) 的運算結果是使運算對象的值增1和減 1,如 :i+相等于 i=i+1,i-相等于 i=i-1 ,其實是一種賦值運算。2 、+、 - 是單目運算,運算對象可以是整型和實型變量,不能是常量和表達式,如: +3、 (j+i)- 是不正確的,3、自加、 自減運算可作為前綴運算行, 也可作為

20、后綴運算符, 所以: +i 、-i 、 i+ 、 i- 都是正確的。自加和自減運算對變量本身來說都是加1和減 1,但對表達式來說值是不同的。假設i=5,那么+i的值為6;i的值為6; 假設i=4,那么-i的值為3;i的值為3;假設i=5,那么i+的值為5;i的值為6; 假設i=4,那么i-的值為4;i的值為3;4、 +和 - 運算結合方向是“自右向左-i+ 相等于 -(i+)5、不要在一個表達式中對一個變量重復使用自加、自減運算,由于編譯系統(tǒng)不同,可 能結果也不同。賦值類運算符的副作用及限制C語言允許在表達式中使用一個以上的賦值類運算符,但這種靈活性會給程序的理解困 難,也會引起副作用:1費解

21、、易于誤解c=b*=a+2;容易理解為 b*=a,c=a+2x=i+j ;是 i+(+j) 還是 (i+)+j 應為 (i+)+j2不定解j=3; i=(k=j+1)+(j=5);執(zhí)行以上語句,不同的系統(tǒng)得到的結果不同。關系運算符和關系表達式C 語言的關系表達式和邏輯表達式,其運算結果會得到一個邏輯值。邏輯值只有兩個, 在其它高級語言中用“真、“假來表示。在C語言中沒有專門的“邏輯值,而是用非零值來表示“真,用零表示“假。因此,對任意一個表達式,假設它的值為0時,就代表一個“假值,只要它的值是非零,無論是正數和負數,都代表一個“真值。關系運算是一種比擬運算, 即將兩個運算量進行比擬, 判斷它們

22、的大小相等不等的關系。 關系運算符; <,<=,>,>=,=,!= ;在兩個字符組成的關系運算符中間不能加空格。關系運算符是雙目運算符, 具有自左向左的結合性。 運算的優(yōu)先級前四種同級, 后兩種 同級, 前四種高于后兩種。如果一個表達式中既有算術運算、 關系運算和賦值運算,那么優(yōu)先 級次序是:算術運算;關系運算;賦值運算。關系表達式及關系表達式的值 由關系運算符與運算量組成的表達式稱為關系表達式。 關系運算符兩邊的運算對象可是C語言中任意合法的表達式。如:a+b<c+d (a+b)<(c+d)a=x>y a=(x>y)判別式 b 2-4ac &g

23、t; 0 的C語言關系表達式為 b*b-4*a*c>=0關系運算的結果得一個整數值0或者1,在C語言中沒有專門的邏輯值,而用0代表真,1代表假。分析:x 5,13關系表達式 5<x<13 當 x=3或x=6時的值當關系運算符兩邊的類型不一致時,一邊是整型,另一邊是實型,系統(tǒng)要自動把不整型轉換為實型,然后進行比擬轉換規(guī)那么見附錄二。假設兩個數x和y都是實數,在進行相等的 比擬時,由于內存中的實數表示有誤差,不可能精確相等,這將導致關系表達式x= =y的值總為0,即在程序設計時應盡量防止兩個實型進行相等的關系運算。邏輯運算符和邏輯表達式當表示一些比擬復雜的關系時,只有關系表達式是

24、不行的。如:要表示x a,b。三角形任意兩邊之和大于第三邊。坐標x,y在單位圓內,且在第一象限。這些條件只用關系運算是不能表達的。C語言中提供了三種邏輯運算,可以表示這些復雜的條件。邏輯運算符為:!、&&、II。x a,b表示為:x>=a&&x<=ba,b,c為三角形的三條邊,能組成三角形表示為:a+b>c&&b+c>a&&a+c>bx,y在單位圓內且在第一象限表示為:x*x+y*y<1 &&x>0&&y>0邏輯運算的優(yōu)先次序為!、&&

25、、|。假設一個表達式中有前面介紹的所有運算算術、賦值、關系、邏輯,它們之間的運算優(yōu)先次序從高到低為:!、算術運算、關系運算、&& |、賦值邏輯表達式的值由邏輯運算符和運算對象組成的表達式稱為邏輯表達式,運算對象可以是C語言中任意合法的表達式,它們的值是什么呢?和關系表達式值一樣,邏輯表達式值運算的結果只有真1假0值。x a,b當 x=2; a=1;b=4 x>=a&&x<=b值為 1真當 x=-2; a=1;b=4 x>=a&&x<=b值為 0假a,b,c為三角形的三條邊當 a=3;b=4;c=5 a+b>c&

26、;&b+c>a&&a+c>b 值為 1 真當 a=2;b=1;c=3 a+b>c&&b+c>a&&a+c>b 值為 0假當x=2,a=1;b=4 x<a|x>b 的值為假當x=-2,a=1;b=4 x<a|x>b 的值為真邏輯表達式的值可以通過以下運算規(guī)那么表中查到:AB!AA&&BA|B00100100010110111011邏輯表達式考前須知數學式子和邏輯表達式, 如數學式子0<x<10如寫成0<x<10雖然沒錯誤,但是不能表示 x所滿足條件

27、,因為不管x是什么值,它的值永遠是真值1為什么?。應用0<x&&x<10表示。 注意是編程序,不是寫數學式子 在由&&和 |組成的邏輯表達式中,在特定情況下會出現短路現象一旦可以確定邏輯表達式的真、假值 ) ,例如有如下邏輯表達式: a+&&b+假設a的值為0,此時的邏輯表達式的值已確定為假 0,就不對b進行求值而跳過,這時 a的值發(fā) 生了變化(0變成1),而b的值不發(fā)生變化 。假設a的值不是0,此時邏輯表達式的值還需通過 b 的值來確定,不管邏輯表達式的值是真假,a、b的值都要發(fā)生了變化。又如下邏輯表達式:a+|b+假設a的值為1,

28、此時的邏輯表達式的值已確定為真1,就不對b進行求值而跳過, 這時a的值發(fā)生了變化(1變成2),而b的值不發(fā)生變化 。假設a的值是0,此時邏輯表達式的值還需通過b的值來確定,不管邏輯表達式的值是真假,a、b的值都要發(fā)生了變化。關系表達式和邏輯表達式練習題:1. 假設 a=4, 那么 !a 的值是什么?2. 假設a=4;b=5,那么a&&b的值是什么?3. a,b的值同前,那么a|b的值是什么?4. a,b的值同前,那么!a|b的值是什么?5. 4&&0|2 的值是什么?關系表達式和邏輯表達式舉例:6. 5>3&&2|8<4-!0 的值是

29、什么?7. 假設a=3,b=4,c=5;以下邏輯表達式的值是什么?a+b>c&&b= =c a|b+c&&b-c!(a>b)&&!c|1 !(x=a)&&(y=b)&&0!(a+b)+c-1&&b+c/28. 表示條件10<x<100或x<0的C語言表達式是什么?9. 判斷x能被2整除的關系表達式是什么?10. 分別判斷x是偶數或是奇數的關系表達式是什么?11. 判斷某年是否是閏年的邏輯表達式是什么? (能被4整除,但不能被 100整;能被 4整除, 又能被 400整除

30、 )條件運算及條件表達式C 語言中還提供了一種特殊的運算條件運算符,由此構成的表達式也可形成簡單的選 擇結構, 這種選擇結構以表達式的形式內嵌在允許出現表達式的地方,使得可根據不同的條件使用不同的表達式。(類似于Excel中的IF()函數) 條件運算符: ? :是唯一的一個三目運算符,要求三個對象。由條件運算符構成的條件表達式:表達式 1? 表達式 2 : 表達式 3 條件運算及條件表達式條件表達式的運算功能:表達式 1 的值為非 0時,求出表達式 2的值,此時表達式 2的值就是整個條件表達式的值; 假設表達式 1的值為 0時,求出表達式 3的值,此時表達式 3的值就是整個條件表達式的值。例如

31、:x=5,y=10,那么max=x>y?x:y的值max等于多少? 條件運算的優(yōu)先級優(yōu)于賦值運算,但低于邏輯、關系、算術運算。y=x>10?100:200;printf(“ abs(x)=%nd,x>0 ?(-1 )*x:x)( 輸出 x 的絕對值 )程序舉例:用條件表達式 , 求三個數中的最大和最小數并輸出。main() int a,b,c,max,min;scanf("%d%d%d",&a,&b,&c); max=a>b?a:b;min=a<b?a:b; max=max>c?max:c;min=min<c

32、?min:c; printf("max=%d,min=%dn",max,min); 逗號運算和逗號表達式“,是C語言提供的一種特殊運算符,用逗號連起來的式子稱為逗號表達式,一般 形式為:表達式1,表達式2,,表達式 N說明:1 、逗號運算結合從左到右,先計算表達式 1的值,最后計算表達式 N的值,最后一個 表達式的值是整個表達式的值。如 : (i=3,i+,+i,i+5) 執(zhí)行后, i 的值為 5,整個表達 式的值為 102 、在所有運算符中,逗號運算符優(yōu)先最低。2.4 不同類型數據間的轉換2.4.1 幾個概念C語言允許數值從一種類型轉換成另一種類型(同一類型但占字節(jié)數不同

33、、定點與浮點、有符號與無符號 )提示與降格 ( 所占字節(jié)數的變在與變小 ) 符號位擴展與零擴展 (字節(jié)數變高位補什么 ) 最高位失去符號功能與最高位變?yōu)榉栁唤厝バ蹬c四舍五入喪失精度結果不確定與截去高位(例 2.11 )2.4.2 不同類型的隱式轉換 隱式轉換的發(fā)生:運算時、賦值時、輸出時、函數返回值時。一般算術轉換。2*1.0 結果為 2.0賦值轉換。 int a=13.789 a 的值為 13輸出轉換。x=45; printf("%d%x%on",x,x,x);2.4.3 不同類型的顯式轉換 提供強制類型轉換,形式為:( 類型說明符 ) 表達式例如:char ch;i

34、nt a;double c; ch=(char)48.5;a=(int)35.9; 四舍五入c=(double)100;提高精度2.5數據的輸入輸出對數據的一種重要操作是輸入與輸出。沒有輸出的程序是沒有用的;沒有輸入的程序 缺乏靈活性。C語言中的輸入輸出由函數實現,它包含在頭文件stdio.h中,在使用輸入輸出時最好在編譯預處理命令中包含。2.5.1 printf 函數一個完整的程序應該由三局部組成:輸入、處理、輸出。輸出局部把數據從計算機內部送到外部設備,如:在屏幕上顯示或打印在紙上。 printf 函數的一般形式該函數是C語言提供的標準輸出函數,它的作用是在終端設備上按指定格式進行輸出。p

35、rintf函數的使用格式(語法規(guī)那么)如下:printf(格式控制串,輸出項表)在它的后面加上“;號就構成了輸出語句。格式控制必須用雙引號括起來。 例如:prin tf("a=%d,b=%dn",a,b); "a=%d,b=%dn"為格式控制字符串、a,b 是輸出項表。printf函數的一般調用形式完整的格式為:% - 0 m.n l或 h 格式字符(d,f,x,o,c,u,p )t y t y 廠匕指定輸出類型|輸出長度修正指定輸出域寬和精度指定空位補0指定左邊對齊輸出格式說明起始符 格式控制符的作用:1. 為各輸出項提供格式轉換說明:將要輸出的數據轉

36、換為指定的格式輸出,總是由 開始,緊跟其后的是格式描述符。當輸出項為int類型時,系統(tǒng)規(guī)定用d作為格式描述符,其形式為d假設輸出為float或double 時,用f或e作為格式描述符,其形式為%f或 %e char類型時用c作為格式描述符,其形式為%c>2. 提供原樣輸出文字或字符不在格式字符中間夾的字符原樣輸出。如:"a=%d,b=%d"希望輸出玄=和匕=字符。輸出項表中的輸出項應用逗號分開,輸出項可以是合法的常量、變量、表達式。格式轉換說明應與輸出項的個數相同,格式描述也要與輸出項類型匹配。請分析程序的輸出結果:#i nclude "stdio.h&qu

37、ot;main ()int i=2518;float a=3.1415;prin tf("i=%d,a=%f,a*10=%en",i,a,a*10);printf函數常用格式說明:每個格式都必須用“ '開頭,以一個格式字符結束,在它們中間可以根據需要加上“寬度說明(其實是正整數)、“長度修飾、“左對齊、“前導零符號、“八進制前加0、“十六進制前加Ox等。在和格式符中夾上不同的字符,就能實現上述功能。1. 格式字符 :d 整型數, c 字符型 ,f 實型數 ,o 八進制數 ,x 十六進制數 ,p 變量地址 ,u 無符號 數,% 輸出 %自己。2. 長度修飾符 :長度修

38、飾符在 %和格字符之間 , 長整型用 l(long);h 用于短整型 ( short )或無符號整型數 的輸出。3. 輸出數據所占的寬度當使用%d %c %f、%e格式說明時,可用以下二種方法人為控制輸出數據所占的寬 度。(1) 在%與格式字符之間插入一個整數來指定輸出寬度,寬度不夠不影響數據輸出,如果 比實際寬度大補空格。分析以下程序的運行結果。main () printf("0123456789n");printf("%dn",42); printf("%5dn",42);printf("%fn",123.54

39、); printf("%12fn",123.54);printf("%en",123.54); printf("%gn",123.5);printf("%8gn",123.5);(2) 對于float或double類型可用“整數1.整數2形式在指定寬度的同時指定小數位,整數1用以指定整個寬度 , 整數2稱為精度 ,即小數位 ,不同的格式字符地不同含義 :e,E或f指定輸出數據所占的小數位,當輸出數據的小數多于指定的寬度時,要截去多余的小數位 , 并作四舍五入的處理 , 少于指定寬度時 , 最右邊補 0當輸出數 據寬

40、度大于整數 1時, 小數局部作同樣處理 , 整數局部不變。也可用“ . 整數2的形式來指定小數位的輸出。這時輸出數據的寬度由系統(tǒng)決定。%.0表示不輸出小數點和小數局部。對于g或G用來指定輸出的有效數字。 對于整數:用來指定必須輸出的數的個數,假設輸出數據少于整數2指定的個數,在數字前加 0,多于整數 2時,按實際寬度輸出。對于字符串,用來指定最多輸出的字符個數。輸出的實際精度并不取決于域寬和小數位寬度,而是取決于數據在計算機中存儲的精度,通常float7位double15位或16位有效數字,格式中和域寬不能改變數據的精度。分析程序執(zhí)行結果main () printf("0123456

41、789n");printf("%.5dn",42);printf("%.0dn",42);printf("%8.3fn",123.55);printf("%8.1fn",123.55);printf("%8.0fn",123.55); printf("%gn",123.56789); printf("%.5sn","abcdefg");4. 輸出數據左對齊:輸出時如果不加說明, 數據的輸出結果都是以右邊對齊, 假設要控制左邊對

42、齊, 就需在寬 度定義前加一個“ - 號來控制。查看程序執(zhí)行結果:#include "stdio.h" main()clrscr();printf("%6d#n",123); printf("%-6d#n",123);printf("%14.8lf#n",1.3455); printf("%-14.8lf#n",1.3455);getchar();5. 使輸出的數字前總是帶有+或-號:可在 %和格式字符之間(或指定寬度前)加上一個“ +中與來實現。查看程序執(zhí)行結 果:#include "

43、;stdio.h" main()clrscr(); printf("%+d,%+dn",10,-10); getchar();6. 在輸出的數據前加上前導0:可在指定寬度前加上 0,使數據前的空格由 0填充。查看程序執(zhí)行結果: #include "stdio.h"main()clrscr();printf("%6dn",12); printf("%06dn",12);printf("%10.5fn",3.1415); printf("%014.5fn",3.1415

44、);getchar();7. 在輸出的 8進制前添加 0 ,在輸出的 16進制前添加 0x:通常由o和x控制按8進制和16進制整數形式輸出時,數據前沒0和Ox,如果需要輸出的前面加上0和 Ox只需在格式字符o和x之間加上“ #即可。查看程序執(zhí)行結果: #include "stdio.h" main()clrscr(); printf("%o,%#o,%x,%#xn",10,10,10,10);getchar();在調用printf函數進行輸出時需注意:1. 在格式控制串中,格式說明與輸出項從左到右在類型上必須一一對應匹配,否那么將 導致數據不能正確輸出,

45、系統(tǒng)并不報錯。輸出long型應使用“ ld。2. 格式說明和輸出項個數應該相同,如說明個數少,多余項不輸出,說明個數多,多 余輸出不定值。#i nclude "stdio.h"#in elude "ctype.h"mai n()int c1,c2,c3,d1,d2,d3;clrscr();sca nf("%d%d%d",&c1,&c2,&c3);prin tf("%d,%dn",c1,c2,c3);sca nf("%d%d%d", &d1, &d2, &a

46、mp;d3);prin tf("%d,%d,%dn",d1,d2);3. 在格式串中除了合法的格式說明外可包括任何的合法的字符串,輸出時“原樣照印。4. 輸出%那么在格式說明中用連續(xù)兩個即可。5. 在輸出語句中改變輸出變量的值如:i=5;pri ntf("%d,%dn ,i,i+)的輸出結果將無法判斷。6. pri ntf函數返回的值通常是本次調時函數輸出字符的個數。2.5.2sca nf 函數一般調用形式如下:scanf(格式控制,輸入項表)在該數函后加上“;就構成了輸入語句。例如:scanf( %d %d ",&a,&b);該語句的作

47、用是通過鍵盤給a和b輸入整型數,%d%是格式控制串,& a,&b是輸入項,表示a和b的存儲地址。格式控制串的作用是指定輸入時的數據轉換格式,即格式轉換說明。由嘶始,其后是格式描述符。輸入項表中的各項用逗號分開, 各輸入項只能是合法地址表達式,即在輸入變量前加上“ &,&是C語言中求地址運算。也就是說輸入項必須是某個存儲單元的地址。格式說明根本組成如下:每個格式說明都必須用 開始,以一個格式字符結束。允許使用的輸入格式字符和功能 如下所示:d整型數,ld長整型數,c字符型,f 單精度數,If 雙精度數,o八進制數,x十六進制數,s字符串。這些格式字符只允許用小寫字

48、母。 輸入格式符說明: 輸入long型在d之間加上I;輸入double型在和f(e)之間也必須加I。(2) 格式說明的類型與輸入項的類型應一一對應。類型不一致,系統(tǒng)不給出錯信息,但 得不到正確的數據。(3) 在格式說明符前可用一個正整數指定輸入數所占寬度, 但不能對實型數指定小數位。(4) 格式說明和輸入項的個數應該相同。假設格式說明個數少于輸入項個數,該函數結束 輸入, 多余項并沒有從終端接受新的數據。 假設格式說明個數多于輸入項個數, 該函數同樣結 束輸入。(5) 當輸入的數據個數少于輸入項時,程序等待輸入,直到滿中為止,當輸入的數據個 數多于輸入項時,多余數據并不消失,而是留作下一個輸入

49、操作的輸入數據。(6) scanf 函數在調用結束后返回一個函數值,其值等于輸入值的輸入項的個數。 通過 scanf 函數從鍵盤輸入數據:當調用 scanf 函數從鍵盤輸入數據時,最一定要按回車鍵,該函數行能接受從鍵盤輸入 的數據。1. 輸入數值數據:從鍵盤輸入數據時,輸入的數據間用間隔字符(空格,Tab鍵或回車鍵)隔開,間隔數量不限。如人為指定寬度,也可用此方法輸入。例: a,b,c 為整型變量,有以下輸入語句:scanf(" %d%d%"d,&a,&b,&c); 要求給 a,b,c 分別賦 10,20,30 那么數據的輸入形式為 間隔符10間隔符

50、20間隔符30CR間隔符為以上介紹的。2. 指定輸入數據所占的寬度:一般編譯系統(tǒng)可要求用戶像未指定寬度一樣輸入數據。3. 跳過輸入數據方法:在格式符前加上一個“ * ,該數沒接受例如:int a1,a2,a3;scanf( %d%*d%d%d ,&a1,&a2,&a3);輸入數據為 10 20 30 40CR 那么 a1,a2,a3 的值為 10,30,404. 輸入數據少于 scanf 函數要求輸入的數據 這時將等待輸入,直到滿足為止。 當程序運行時:黑屏幕回不到藍屏幕,有可能是數據的數量缺乏。5. 輸入數據多于 scanf 函數要求輸入的數據: 多余數據將留在緩沖作

51、為下一次輸入操作的輸入數據。在調試程序時, 可采用輸完所有的數據再回車。 這時當程序輸出不正確時, 修改完程序, 再次運行程序時,可以不重新輸入數據 ,用右光標健把上次輸入的數據重新顯示出來作為 程序的輸入數據。通過 scanf 函數從鍵盤輸入數據6. 在格式控制中插入其它字符應該首先明確: scanf 函數中的格式控制串是為輸入數據用的,其中的字符不能顯示在 屏幕上,因此想在屏幕上輸出字符串來提示輸入,應該另外使用printf 函數。程序舉例(在scanf函數的格式中插入其它字符):此時在輸入時,應按一一對應的位置原樣輸入這些字符。#include "stdio.h"main() int a1,a2,a3;clrscr();scanf("Input a1,a2,a3:%d%d%d",&a1,&a2,&a3);printf("%d,%d,%d",a1,a2,a3);程序舉例(用printf語句來顯示輸入提示):此時只需輸入seanf函數中輸入項所對應的

溫馨提示

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

評論

0/150

提交評論