![C語言程序設(shè)計新視角-程序中的數(shù)據(jù)_第1頁](http://file4.renrendoc.com/view4/M01/24/0F/wKhkGGZPwGeAQlXrAACL0xCKV5I827.jpg)
![C語言程序設(shè)計新視角-程序中的數(shù)據(jù)_第2頁](http://file4.renrendoc.com/view4/M01/24/0F/wKhkGGZPwGeAQlXrAACL0xCKV5I8272.jpg)
![C語言程序設(shè)計新視角-程序中的數(shù)據(jù)_第3頁](http://file4.renrendoc.com/view4/M01/24/0F/wKhkGGZPwGeAQlXrAACL0xCKV5I8273.jpg)
![C語言程序設(shè)計新視角-程序中的數(shù)據(jù)_第4頁](http://file4.renrendoc.com/view4/M01/24/0F/wKhkGGZPwGeAQlXrAACL0xCKV5I8274.jpg)
![C語言程序設(shè)計新視角-程序中的數(shù)據(jù)_第5頁](http://file4.renrendoc.com/view4/M01/24/0F/wKhkGGZPwGeAQlXrAACL0xCKV5I8275.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
程序中的數(shù)據(jù)NewPerspectiveforCProgranmming【主要內(nèi)容】
·介紹數(shù)據(jù)類型使用規(guī)則及方法,給出數(shù)據(jù)要素的歸類總結(jié);
·給出類型的本質(zhì)含義,重點介紹整型和實型存儲機制的不同點;
·重點強調(diào)各類運算的結(jié)果歸類;
·給出數(shù)據(jù)表現(xiàn)形式的歸結(jié)和需要記憶的知識點。【學(xué)習(xí)目標】
·理解并掌握C語言的數(shù)據(jù)類型的概念;
·理解并掌握常量和變量的使用;
·掌握常用運算符和表達式的使用;
·理解增1和減1運算符在表達式中的應(yīng)用。12.1數(shù)據(jù)的類型22.2從存儲的角度看數(shù)據(jù)32.3從運行的角度看數(shù)據(jù)42.4數(shù)據(jù)的運算52.5數(shù)據(jù)的輸入/輸出62.6本章小結(jié)目錄CONTENTS12.1數(shù)據(jù)的類型22.2從存儲的角度看數(shù)據(jù)32.3從運行的角度看數(shù)據(jù)42.4數(shù)據(jù)的運算52.5數(shù)據(jù)的輸入/輸出62.6本章小結(jié)目錄CONTENTS2.1數(shù)據(jù)的類型編程序時要處理的信息就是數(shù)據(jù)。程序設(shè)計遇到的首要問題,是解決如何把數(shù)據(jù)存儲到計算機的內(nèi)存中的問題,然后才是如何對它們進行處理的問題。具體地說就是解決數(shù)據(jù)要以什么樣的規(guī)則存放到內(nèi)存中,可以對它們實施什么樣的運算操作。
C語言中的數(shù)據(jù)類型
C語言有豐富的數(shù)據(jù)類型,可以表達復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。說明:
(1)基本類型最主要的特點是,其不可以再分解為其他類型。
(2)指針是一種特殊的且具有重要作用的數(shù)據(jù)類型,其值用來表示某個對象在內(nèi)存中的地址。
(3)構(gòu)造類型是多個數(shù)據(jù)類型的集合,它根據(jù)已定義的一個或多個數(shù)據(jù)類型用構(gòu)造的方法來定義。也就是說,一個構(gòu)造類型的值可以分解成若干個“成員”或“元素”,每個“成員”都是一個基本數(shù)據(jù)類型或又是一個構(gòu)造類型。
(4)空類型不指定具體的數(shù)據(jù)類型,在某些特定情形下使用。12.1數(shù)據(jù)的類型22.2從存儲的角度看數(shù)據(jù)32.3從運行的角度看數(shù)據(jù)42.4數(shù)據(jù)的運算52.5數(shù)據(jù)的輸入/輸出62.6本章小結(jié)目錄CONTENTS2.2從存儲的角度看數(shù)據(jù)編程序時要處理的信息就是數(shù)據(jù)。程序設(shè)計遇到的首要問題,是解決如何把數(shù)據(jù)存儲到計算機的內(nèi)存中的問題,然后才是如何對它們進行處理的問題。具體地說就是解決數(shù)據(jù)要以什么樣的規(guī)則存放到內(nèi)存中,可以對它們實施什么樣的運算操作。2.2.1數(shù)據(jù)的存儲尺寸由類型決定
不同的計算機系統(tǒng)對相同類型的數(shù)據(jù)可能分配的空間尺寸有所不同,不用強記哪種類型占多少比特位,記大原則即可。數(shù)據(jù)類型規(guī)則:
(1)最小存儲單元長度是8bit,可以存儲一個字符,故8bit也稱做“一個字節(jié)”即byte。其他的數(shù)據(jù)類型存儲單元都是8bit的整數(shù)倍。
(2)指針類型存儲的是“存儲單元編號”即是一個整數(shù),所以和整型的長度是一樣的。
(3)浮點數(shù)也就是小數(shù)的長度一般都是整型長度的2N倍(N為整數(shù)),見圖。
(4)存儲規(guī)則有兩大類:整型、字符型、指針型數(shù)據(jù)屬于同一類,都按整數(shù)規(guī)則處理;浮點數(shù)為一類,按小數(shù)存儲規(guī)則處理。2.2.2基本類型的分類及特點
C中基本數(shù)據(jù)類型的相關(guān)信息
我們前面提到,不同的系統(tǒng)中,同一類型數(shù)據(jù)位長有可能不一樣,于是就有這樣一個問題:我們怎么才能知道正在使用的機器中,某一數(shù)據(jù)類型的位長是多少呢?
答:C語言提供了一個sizeof操作符,可以完成數(shù)據(jù)類型位長的測試工作。
sizeof是C/C++中的一個操作符,
其作用是返回一個對象或者類型所占的內(nèi)存字節(jié)。
【例2-1】用sizeof操作符測試數(shù)據(jù)類型的位長。
1 /*sizeof運算符測試數(shù)據(jù)類型位長*/
2 #include<stdio.h>
3 intmain()
4 {
5 printf("intsize=%d\n",sizeof(int));
6 printf("shortintsize=%d\n",sizeof(shortint));
7 printf("longintsize=%d\n",sizeof(longint));
8 return0;
9 }
程序結(jié)果:
intsize=4
shortintsize=2
longintsize=4
說明:intsize=4,表示運行以上程序的IDE(集成開發(fā)環(huán)境)int的長度是4
byte。2.2.3數(shù)據(jù)在內(nèi)存中的存儲形式整數(shù)分有符號和無符號兩種,它們使用同樣長度的存儲空間,因此也有相同的存取效率。一般可以根據(jù)需要來選用其中一種。1.整數(shù)的存儲有符號整數(shù)無符號整數(shù)2.字符的存儲
有符號整數(shù)的存儲
無符號整數(shù)的存儲字符的存儲
字符是以編碼的二進制形式存儲的,每一個字符的代碼用一個字節(jié)存放。C采用的字符的編碼是ASCII碼。
例如,字符“A”的ASCII碼為十進制值65,其存儲形式見表2.4。字符編碼
計算機中的信息包括數(shù)據(jù)信息和控制信息,數(shù)據(jù)信息又可分為數(shù)值和非數(shù)值信息。非數(shù)值信息和控制信息包括字母、各種控制符號、圖形符號等,它們都以二進制編碼方式存入計算機并得以處理,這種對字母和符號進行編碼的二進制代碼稱為字符代碼(CharacterCode)。計算機中常用的字符編碼有ASCII碼(美國標準信息交換碼)和EBCDIC碼(擴展的BCD交換碼)。實型數(shù)(浮點數(shù))的存儲intmain()
{
floatf;
f=123.456;/*往存儲單元f里放一個小數(shù)123.456*/
if(f==123.456)printf("Yes");/*若f等于123.456,則輸出Yes*/
elseprintf("No");/*否則輸出No*/
return0;
}“關(guān)于浮點數(shù)的陷阱”問題。如果不運行上面的代碼,讓你來直接猜測輸出的結(jié)果,你認為是什么呢?
如果告訴你運行程序之后輸出的結(jié)果是“No”而非“Yes”,是不是出乎了你的意料?intmain(){
float
f=123.456;
/*在內(nèi)存單元f中放一個浮點數(shù)123.456*/
printf("f=%f\n",f);
/*把f的內(nèi)容以浮點數(shù)的形式顯示到屏幕上*/
return0;
}
更進一步的程序測試:程序結(jié)果:
f=123.456001
為什么會是123.456001?最后那個1是怎么來的呢?為什么會有這樣奇怪的事情發(fā)生呢?實際上這是由浮點數(shù)的存儲和讀出的規(guī)則引起的。浮點數(shù)據(jù)的存儲格式(IEEE-754標準)
為便于軟件的移植,浮點數(shù)的表示格式應(yīng)該有統(tǒng)一標準。目前大多數(shù)高級語言(包括C)都按照IEEE-754標準來規(guī)定浮點數(shù)的存儲格式。
浮點數(shù)存儲格式實數(shù)真實值=[(-1)^符號]×[1.尾數(shù)]×(2^[階碼-偏移值浮點數(shù)存儲實例浮點數(shù)與整數(shù)存儲比較整數(shù)與實數(shù)的存儲規(guī)則是完全不同的,同一個數(shù)按整數(shù)存與按實數(shù)存其形式截然不同。當數(shù)據(jù)以某種類型存儲時,除非你知道它的本質(zhì),不然不要試圖用另一種類型去讀,否則會引起誤差。
123.456的機內(nèi)存儲形式123.456的二進制存儲形式轉(zhuǎn)換成十進制為
[(-1)^符號]×[1.尾數(shù)]×(2^[階碼-127])
=[(-1)^0]×[1.1110110,11101001,01111001]×2^[1000,0101-0111,1111]
=1.1110110,11101001,01111001×2^6
=1.92900002002716×64
=123.456001281738
所以123.456經(jīng)過存儲再輸出,就變成了123.456001。后面的部分沒有顯示,是顯示程序的顯示精度問題。
(1)十進制實數(shù)存儲:按規(guī)定的國際標準轉(zhuǎn)化成二進制形式存儲到計算機中。
(2)十進制實數(shù)顯示:將存儲在機器中的相應(yīng)二進制形式按國際標準轉(zhuǎn)化成十進制數(shù),并按用戶要求的精度顯示。
(3)實數(shù)的比較規(guī)則:要避免實數(shù)比相等。12.1數(shù)據(jù)的類型22.2從存儲的角度看數(shù)據(jù)32.3從運行的角度看數(shù)據(jù)42.4數(shù)據(jù)的運算52.5數(shù)據(jù)的輸入/輸出62.6本章小結(jié)目錄CONTENTS2.3從運行的角度看數(shù)據(jù)
從程序處理的角度看,計算機中的數(shù)據(jù)可以分成常量和變量兩類。所謂常量,是指在程序運行過程中其值不能改變的量;所謂變量,是指在程序運行過程中其值可以改變的量。2.3.1常量2.3.2變量變量是一段有名字的連續(xù)存儲空間。在源代碼中通過定義變量來申請并命名這樣的存儲空間,且通過變量的名字來使用這段存儲空間。變量空間是程序中數(shù)據(jù)的存放場所,空間的大小是由變量的類型決定的。
變量有三個要素,即變量名、變量值和變量存儲單元,這三個要素確定了,變量也就確定了。變量定義可圖示如下:
標識符:是語言中用來表示應(yīng)用程序量的名稱,包括變量名、常量名、類型名、函數(shù)名等。
關(guān)鍵字:是系統(tǒng)專用的標識符,具有特定的含義。
C的關(guān)鍵字
ANSIC規(guī)定了32個關(guān)鍵字(保留字),不能再用作其他的標識符:auto,break,case,char,const,continue,default,do,double,else,enum,extern,float,for,goto,if,int,long,register,return,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile,
while。
C語言還使用下列12個標識符作為編譯預(yù)處理的特定字,使用時前面應(yīng)加“#”:define,elif,else,endif,error,if,ifdef,ifndef,include,line,progma,undef。
(1)由多單詞組成的變量名,會使程序具有更強的可讀性;
(2)標識符的“見名知意”,有助于程序的自我說明(減少注釋)?!ariablename
·variable_name
·VariableName第二個是UNIX命名格式,第三個是Windows命名格式。從直觀上看,顯然第一個的可讀性不好,而第二個和第三個則一目了然。變量定義及初始化數(shù)據(jù)類型說明符變量列表;“變量列表”是指此處可以同時有多個變量,即同類型的多個變量可以定義在一起。
變量初始化:是指在定義變量時,同時對變量賦值。
變量定義及初始化
對變量ch1賦值是'a',為什么其內(nèi)存單元的值是97呢?
答:字符是以其ASCII碼的形式存放在內(nèi)存單元中的,a的ASCII碼值是97?!纠?-3】變量的例子1。
1 /*變量的例子1*/
2 #include<stdio.h>
3 intmain()
4 {
5 charc1,c2;
6
7 c1=97;/*在c1存儲單元里賦值97*/
8 c2='b';/*在c2存儲單元里賦值98*/
9 printf("%c%c\n",c1,c2);/*
%c—按照字符的形式輸出c1、c2*/
10 printf("%d%d",c1,c2);/*%d—按照數(shù)字的形式輸出c1、c2*/
11 return0;
12 }
程序結(jié)果:
ab
9798
每行只寫一條語句,這樣方便調(diào)試。
【例2-4】變量的例子2。
1 /*變量的例子2*/
2 #include<stdio.h>
3 intmain()
4 {
5 charch='b';/*定義字符變量出,并初始化*/
6
7 ch=ch-32;/*對ch的值做減32的運算*/
8 printf("%c,%d\n",ch,ch);/*分別以字符和數(shù)值的形式輸出ch*/
9 return0;
10 }
程序結(jié)果:
B,66
程序的功能:將小寫字母轉(zhuǎn)換為大寫字母。
字符的ASCII碼值是不必記憶的,需要時,可以通過“字符引用”的方式顯示出來。12.1數(shù)據(jù)的類型22.2從存儲的角度看數(shù)據(jù)32.3從運行的角度看數(shù)據(jù)42.4數(shù)據(jù)的運算52.5數(shù)據(jù)的輸入/輸出62.6本章小結(jié)目錄CONTENTS2.4數(shù)據(jù)的運算
對數(shù)據(jù)實施什么樣的操作,是由運算符決定的運算符類型運算符優(yōu)先級特別提醒:運算符的優(yōu)先級不必強記,編程時記不住可以查手冊,或通過在表達式中加括號的方法來指定運算的順序。
表達式用運算符將操作對象連接起來、符合C語法規(guī)則的式子稱為表達式。表達式因運算符種類不同也可分為各種表達式,如算術(shù)表達式、關(guān)系表達式、賦值表達式等;每一個表達式也都具有一定的值,如a=b+c。
運算符的優(yōu)先級指不同的運算符在表達式中進行運算的先后次序。在求解表達式的值的時候,總是先按運算符的優(yōu)先次序由高到低進行操作。
運算符的結(jié)合性當一個運算對象兩側(cè)的運算符優(yōu)先級相同時,可按運算符的結(jié)合性來確定表達式的運算順序。運算符的結(jié)合性指同一優(yōu)先級的運算符在表達式中操作的組織方向,即運算對象與運算符的結(jié)合順序。C語言規(guī)定了各運算符的結(jié)合性。
運算符的結(jié)合性分為左結(jié)合和右結(jié)合兩種。運算對象先與左面的運算符結(jié)合稱左結(jié)合,如+、-、*、/的結(jié)合方向為自左向右;運算對象先與右面的運算符結(jié)合稱右結(jié)合,如單目運算符++、--的結(jié)合方向是自右向左。2.4.1算術(shù)運算
算術(shù)運算符作用于整型或浮點型數(shù)據(jù),完成算術(shù)運算算術(shù)運算
算術(shù)表達式:用算術(shù)運算符把運算對象連接起來的式子。
例如:(a+b)/(c-d)
(a+b)/2*c
2.4.2賦值運算說明:V、E是變量,oper是運算符。
2.4.3增1和減1運算【例2-5】增1和減1運算符的例子1。
當自增或自減的對象在同一個語句中還要被其他量訪問時,自增或自減的時機很重要?!纠?-5】增1和減1運算符的例子1。
當自增或自減的對象作為單獨一個語句時,自增或自減的時機就無關(guān)緊要了。
【例2-6】增1和減1運算符的例子2。
1 /*前置增量與后置增量*/
2#include<stdio.h>
3intmain()
4{
5intc;/*定義變量*/
6
7c=6;/*將c賦值為6*/
8printf("%d\n",c);/*輸出6*/
9printf("%d\n",c++);/*輸出6,然后增加1*/
10printf("%d\n\n",c);/*輸出7*/
11
12c=6;/*將c賦值為6*/
13printf("%d\n",c);/*輸出6*/
14printf("%d\n",++c);/*先增加1,然后輸出7*/
15printf("%d\n",c);/*輸出7*/
16 return0;
17}
【例2-7】增1和減1運算符的例子3。讀程序,給出結(jié)果。
1 #include<stdio.h>
2 intmain()
3 {
4 inta=5,b=4,x,y;
5
6 x=a++*a++*a++;
7 printf("a=%d,x=%d\n",a,x);
8 y=--b*--b*--b;
9 printf("b=%d,y=%d\n",b,y);
10 return0;
11 }
【解】看這個程序時,你會覺得哪些語句不容易看得明白?是不是x=a++*a++*a++和y=--b*--b*--b呢?把這兩條語句拆分一下:
(1)x=a++*a++*a++;等價于:
x=a*a*a;
a=a+1;a=a+1;a=a+1;
(2)y=--b*--b*--b;等價于:
b=b-1;b=b-1;b=b-1;
y=b*b*b;拆分后,是不是既清楚又明白?對拆分前的語句我們只能用“晦澀難懂”來評價之。
在一行語句中,一個變量最好只出現(xiàn)一次自增或自減運算。
關(guān)于自增和自減運算符在使用時需要注意的問題:
(1)過多的自增和自減運算混合的語句可讀性差。之所以要編出這種晦澀難懂的語句,可能是形成的可執(zhí)行代碼效率高,但在實際的編程中,程序的可讀性差的直接結(jié)果是導(dǎo)致程序員的效率降低。(2)不同編譯器會產(chǎn)生不同的運行結(jié)果。這點是對采用這種一個表達式中過多自增自減混合運算從根本上的否定。
(3)過多的自增和自減運算混合會喪失調(diào)試代碼的機會。調(diào)試器在調(diào)試程序時,最小的“執(zhí)行步”是一行語句,當一行有多條語句時,也在一個“執(zhí)行步”內(nèi)完成。
2.4.4關(guān)系運算
關(guān)系運算實際上是“比較運算”,即進行兩個量的比較,判斷比較的結(jié)果是否符合指定的條件。關(guān)系運算符關(guān)系表達式的計算結(jié)果是邏輯值(真或假)。在C語言中,沒有專門的邏輯值,而是用非0表示“真”,用0表示“假”。因此,對于任意一個表達式,如果值為0,就代表一個“假”值;如果值是非零,無論是正數(shù)還是負數(shù),都代表一個“真”值。
注意關(guān)系運算符==和賦值運算符=的含義不同,不能用混了。
為避免“==”與“=”用混,可以采用如下方法:在判斷一個變量是否等于常量時,將常量寫在前面,變量寫在后面,如x==5寫成5==x;如果誤寫成5=x,則編譯通不過,這樣就避免了可能出現(xiàn)的錯誤。
關(guān)系運算的例子2.4.5邏輯運算
邏輯運算符用于連接一個或多個條件,判斷這些條件是否成立。關(guān)系表達式的計算結(jié)果等于邏輯值(真或假)。
邏?輯?運?算?符邏輯運算真值表邏輯運算的例子
一般來說,如果一段代碼總是需要程序員求助于參考手冊才能讀懂的話,那它要么是編寫得不夠好,要么是需要增加一些注釋來提供缺少的細節(jié)。
——
AlanR.Feuer(福伊爾,世界著名的C語言專家)【例2-8】運算符的例子1設(shè)intx=3,y=4,z=4,表達式z>=y&&y>=x成立嗎?
【解】
((z>=y)&&(y>=x))
=(TRUE&&(y>=x))
=(TRUE&&TRUE)
=(TRUE)
上述表達式如果在編寫時加上括號,其運算順序就一目了然
在復(fù)雜的表達式里,使用括號有助于讀者搞清楚操作符與操作數(shù)之間的關(guān)聯(lián)關(guān)系。
【例2-9】運算符的例子2設(shè)intx=1,y=1,z=1,求表達式++x||++y&&++z的結(jié)果。
【解】編寫表達式時加上括號:
((++x)||((++y)&&(++z)))=(2||((++y)&&(++z)))
=(TRUE||任意值)
=TRUE
注意:運算結(jié)束后x=2,y=1,z=1,因為“||”操作符的左操作數(shù)是TRUE,所以沒有必要繼續(xù)求值了,這是需要注意的邏輯操作符的副作用。
建議:在做邏輯或關(guān)系運算時,變量本身不要同時進行++或——的運算。2.4.6條件表達式表達式1?表達式2;表達式3如果表達式1為真,則執(zhí)行表達式2,否則執(zhí)行表達式3。它等價于下面的語句:
if(表達式1)表達式2;else表達式3;
此種表達式切忌用得過于繁雜。【例2-10】條件表達式的例子把a、b中的大者放入z中。
方法1:
if(a>b)z=a;
elsez=b;
方法2:
z=(a>b)?a:b;2.4.7數(shù)據(jù)的類型轉(zhuǎn)換
數(shù)據(jù)的類型轉(zhuǎn)換是指把數(shù)值從一種類型轉(zhuǎn)換為另一種類型。
1.數(shù)據(jù)類型轉(zhuǎn)換的種類
對數(shù)據(jù)進行處理時,可能會出現(xiàn)一些不同的情形,此時可按數(shù)據(jù)類型轉(zhuǎn)換規(guī)則來規(guī)范最后的處理結(jié)果。數(shù)據(jù)類型轉(zhuǎn)換規(guī)則2.數(shù)據(jù)類型轉(zhuǎn)換的方式
1)自動類型轉(zhuǎn)換(隱式轉(zhuǎn)換)
所謂隱式類型轉(zhuǎn)換就是在編譯時由編譯程序按照一定規(guī)則自動完成,而不需人為干預(yù)。如int類型變量x與float類型變量相加時,編譯程序自動將x的值取出轉(zhuǎn)換為float型,但不改變x存儲單元本身的內(nèi)容。
C語言編譯系統(tǒng)提供的內(nèi)部數(shù)據(jù)類型的隱式自動轉(zhuǎn)換規(guī)則如下:
(1)算術(shù)運算:低類型(短字節(jié))可以轉(zhuǎn)換為高類型(長字節(jié))。(2)賦值運算:等號右邊表達式的值的類型自動隱式地轉(zhuǎn)換為左邊變量的類型。
(3)函數(shù)處理:
①實參的類型轉(zhuǎn)換為形參的類型;
②返回表達式值的類型轉(zhuǎn)換為函數(shù)的類型。
【例2-11】自動類型轉(zhuǎn)換的例子1表達式10+'a'+1.5-8765.1234*'b'的結(jié)果類型是什么?
答:是先按最長類型float轉(zhuǎn)換后再運算,結(jié)果是float型。
【例2-12】自動類型轉(zhuǎn)換的例子2。
1 /*自動類型轉(zhuǎn)換的例子2*/
2 #include<stdio.h>
3 intmain()
4 {
5 floatx;
6 inti;
7
8 x=3.6;
9 i=x;
10 printf("x=%f,i=%d",x,i);11 return0;
12 }
程序結(jié)果:
x=3.600000,i=32.數(shù)據(jù)類型轉(zhuǎn)換的方式
2)強制類型轉(zhuǎn)換
所謂強制類型轉(zhuǎn)換只不過是一種顯式的類型變換,它可以把表達式的類型轉(zhuǎn)換成我們希望的類型
強制類型轉(zhuǎn)換格式:(數(shù)據(jù)類型)(表達式)
強制轉(zhuǎn)換得到的是所需類型的中間量,原變量或表達式的類型不變?!纠?-13】強制類型轉(zhuǎn)換的例子
1 /*強制類型轉(zhuǎn)換的例子*/
2 #include<stdio.h>
3 intmain()
4 {
5 floatx,y;
6 x=2.3;
7 y=4.5;
8
9 printf("(int)(x)+y=%f\n",(int)(x)+y);
10 printf("(int)(x+y)=%d\n",(int)(x+y));
11 printf("x=%f,y=%f\n",x,y);
12 return0;
13 }
說明:
(1)第9行:
(int)(x)+y=(int)(2.3)+4.5=2+4.5=6.5
(2)第10行:
(int)(x+y)=(int)(2.3+4.5)=(int)(6.8)=6(3)對表達式的值進行強制轉(zhuǎn)換,并不改變x、y本身的值。程序結(jié)果:
(int)(x)+y=6.500000
(int)(x+y)=6
x=2.300000,y=4.5000002.4.8數(shù)據(jù)運算中的出界問題
無論是哪一種基本數(shù)據(jù)類型的變量,都有一個規(guī)定的取值范圍,在運算時如果對變量的操作超出了其取值的范圍,將得不到預(yù)想的結(jié)果。
【例2-14】無符號數(shù)的使用問題設(shè)變量類型如下:
unsignedcharsize;
當size等于0時,再減1的值是什么?
答:因為size是無符號類型,故size的值不會小于0,而是0xFF。
【例2-15】字符型數(shù)據(jù)的使用問題C語言中字符型變量的有效值范圍為-128~127,故以下表達式的計算存在一定風(fēng)險:
charchr=127;
intsum=200;
chr+=1;/*127為chr的邊界值,再加1將使chr上溢到-128,而不是128*/
sum+=chr;/*故sum的結(jié)果不是328,而是72*/
使用變量時要注意其邊界值的情況。12.1數(shù)據(jù)的類型22.2從存儲的角度看數(shù)據(jù)32.3從運行的角度看數(shù)據(jù)42.4數(shù)據(jù)的運算52.5數(shù)據(jù)的輸入/輸出62.6本章小結(jié)目錄CONTENTS2.5數(shù)據(jù)的輸入/輸出C語言中數(shù)據(jù)的輸入/輸出是以計算機為主體的。所謂輸入,是指從標準輸入設(shè)備上輸入數(shù)據(jù)到計算機內(nèi)存。所謂輸出,是指將計算機內(nèi)存中的數(shù)據(jù)送到標準輸出設(shè)備。
C語言中的輸入/輸出操作是通過調(diào)用標準庫函數(shù)來實現(xiàn)的。
標準庫函數(shù)
ANSI(AmericanNationalStandardsInstitute,美國國家標準學(xué)會)標準定義編譯環(huán)境都部分或全部提供了對這些庫函數(shù)的支持,需要時可以查閱本書的附錄,也可以查閱C編譯軟件的幫助文件。
在調(diào)用標準庫函數(shù)時,需要在當前源文件的頭部添加#include"頭文件名稱"或者#include<頭文件名稱>。標準庫函數(shù)的說明中一般都寫明了需要包含的頭文件名稱
庫函數(shù)及頭文件2.5.1數(shù)據(jù)的輸出
C的輸出函數(shù)字符輸出函數(shù)格式輸出函數(shù)
1.字符輸出函數(shù)
形式:putchar(ch)
功能:在標準輸出設(shè)備(即顯示器屏幕)上輸出一個字符。
說明:ch表示字符變量或字符常量。
注意:putchar函數(shù)一次只輸出一個字符。
【例2-16】字符數(shù)據(jù)輸出的例子1字符輸出函數(shù)putchar(ch)中,括號內(nèi)的參數(shù)可以是字符變量或字符常量字符輸出函數(shù)參數(shù)形式2.格式輸出函數(shù)
格式:printf(格式控制串,參數(shù)1,…,參數(shù)n)
功能:按格式控制串所指定的格式,在標準輸出設(shè)備上輸出參數(shù)1~n的值。
說明:
(1)格式控制串:用雙引號括起來的字符串,用于指定輸出數(shù)據(jù)的類型、格式和個數(shù),包括普通字符和格式說明符。printf函數(shù)格式控制串含義如表2.26所示,其中加[]的部分是可以省略的。
(2)格式說明符:其含義見表2.27。
(3)參數(shù):單個變量或表達式。【例2-17】字符數(shù)據(jù)輸出的例子2
1 #include"stdio.h"
2 intmain()
3 {
4 charc1,c2;/*定義兩個字符變量*/
5
6 c1='a';c2='b';/*給字符變量賦值*/
7 putchar(c1);putchar(c2);putchar('\n');/*輸出字符*/
8 putchar(c1-32);putchar(c2-32);
9 putchar('\n');
10 return0;
11}
程序結(jié)果:
ab
AB
printf函數(shù)格式控制串輸出格式說明符附加格式說明符附加格式說明符舉例:
%ld——輸出十進制長整型數(shù);
%m.nf——右對齊,m表示位域?qū)?,n表示位小數(shù)或n個字符;
%-m.nf——左對齊?!纠?-18】格式輸出的例子1說明:
(1)第一行:格式控制符%d和參數(shù)a對應(yīng);格式控制符%f和參數(shù)x對應(yīng)。
(2)第二行:第一個%d對應(yīng)參數(shù)a;第二個%d對應(yīng)參數(shù)b;第三個%d對應(yīng)參數(shù)a+b。
(3)□代表一個空格。
設(shè)有變量:
inta=12,b=56;
floatx=10.8;
(1)格式輸出函數(shù)中,格式控制符與參數(shù)是順次對應(yīng)的。
(2)格式控制串中,除了格式控制符處按參數(shù)輸出,其他字符都是照原樣輸出(轉(zhuǎn)義字符按約定形式輸出)。
【例2-19】整型數(shù)據(jù)輸出的例子【例2-20】實型數(shù)據(jù)輸出的例子【例2-21】字符型數(shù)據(jù)輸出的例子【例2-22】轉(zhuǎn)義字符的使用
1 /*轉(zhuǎn)義字符的使用*/
2 #include<stdio.h>
3 intmain()
4 {
5 chara,b,c;
6 a='n';
7 b='e';
8 c='\167';/*八進制數(shù)167代表字符w*/
9 printf("%c%c%c\n",a,b,c);/*以字符格式輸出*/
10 printf("%c\t%c\t%c\n",a,b,c);/*每輸出一個字符跳到下一輸出區(qū)*/
11 printf("%c\n%c\n%c\n",a,b,c);/*每輸出一個字符后換行*/
12 return0;
13 }程序結(jié)果:
new
n□□□□□□□e□□□□□□□w
n
e
w
注:\t是轉(zhuǎn)義字符,表示橫向跳格,即跳到下一個輸出區(qū),一個輸出區(qū)占8列。2.5.2數(shù)據(jù)的輸入
C語言中的數(shù)據(jù)輸入函數(shù)字符輸入函數(shù)格式輸入函數(shù)。
1.字符輸入函數(shù)
格式:getchar()
功能:從鍵盤上交互輸入一個字符。
注意:getchar函數(shù)需要交互輸入,即接收到鍵盤
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工廠生產(chǎn)承包合同范本
- 全新房地產(chǎn)經(jīng)紀人勞動合同
- 正規(guī)中介購房合同范本
- 家用電器洗衣機買賣合同
- 售后服務(wù)續(xù)費合同
- 房地產(chǎn)包銷協(xié)議
- 地產(chǎn)戰(zhàn)略合作協(xié)議合同范本
- 雇用育嬰師服務(wù)合同
- 購車合同范文
- 綠色能源項目融資計劃書范文
- 《造血干細胞移植護理》課件
- 課題申報參考:全齡友好視角下的社區(qū)語言景觀評估及空間優(yōu)化研究
- 中央2025年公安部部分直屬事業(yè)單位招聘84人筆試歷年參考題庫附帶答案詳解
- 五年級下冊語文四大名著??贾R點
- 2025年1月日歷表(含農(nóng)歷-周數(shù)-方便記事備忘)
- 《人工智能發(fā)展史》課件
- 2024年同等學(xué)力人員申請碩士學(xué)位英語試卷與參考答案
- 小學(xué)一年級數(shù)學(xué)20以內(nèi)的口算題(可直接打印A4)
- 經(jīng)編工藝基本樣布的分析
- 中醫(yī)針灸穴位現(xiàn)代研究
評論
0/150
提交評論