基本數(shù)據(jù)類型與運(yùn)算符_第1頁
基本數(shù)據(jù)類型與運(yùn)算符_第2頁
基本數(shù)據(jù)類型與運(yùn)算符_第3頁
基本數(shù)據(jù)類型與運(yùn)算符_第4頁
基本數(shù)據(jù)類型與運(yùn)算符_第5頁
已閱讀5頁,還剩58頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

基本數(shù)據(jù)類型與運(yùn)算符第一頁,共六十三頁,編輯于2023年,星期五2.1數(shù)據(jù)類型和取值范圍2.1.1數(shù)據(jù)類型和取值范圍

1.類型修飾長度修飾:short,long符號修飾:signed,unsigned2.取值范圍與機(jī)器類型、編譯環(huán)境有關(guān).如:int在16位系統(tǒng)中為2字節(jié),取值范圍為

10000000,00000000~011111111,11111111

即-215~215-1(-32768~32767)不帶符號的int在16位系統(tǒng)中取值范圍為 00000000,00000000~11111111,11111111

即0~216-1(0~65535)第二頁,共六十三頁,編輯于2023年,星期五int在32位系統(tǒng)中為4字節(jié),取值范圍為10000000,00000000,00000000,00000000~ 011111111,11111111,11111111,11111111

即-231~231-1不帶符號的int在32位系統(tǒng)中取值范圍為

00000000,00000000,00000000,00000000~ 111111111,11111111,11111111,11111111

即0~232-1.不同數(shù)據(jù)類型取值范圍見表2-1。第三頁,共六十三頁,編輯于2023年,星期五類型別名長度范圍精度charsignedchar1-27~27-1unsignedchar0~28-1intlongint4-231~231-1signedintsignedlongintunsignedintunsigned0~232-1unsignedlongintshortshortint2-215~215-1signedshortsignedshortintunsignedshortunsignedshortint0~216-1float410-37~10386double810-307~1030815第四頁,共六十三頁,編輯于2023年,星期五常量:是指在程序運(yùn)行過程中數(shù)值不發(fā)生變化的量,如:5,'a',"Hello,world";變量:是指程序運(yùn)行過程中,可以發(fā)生變化的量,如:a,Hello等。2.變量的定義定義格式為:[存儲類型]數(shù)據(jù)類型變量名;如:

inta,a5,_a; float_a5,A5;變量類型可以是表2.1中的任何數(shù)據(jù)類型。第五頁,共六十三頁,編輯于2023年,星期五變量命名遵守C標(biāo)識符命名規(guī)則:(1)第1個字符必須是字母或下劃線;(2)其余字符可以是字母、下劃線、數(shù)字;(3)標(biāo)識符有長度限制,如

C規(guī)定標(biāo)識符長度不能超過32個字符;(4)字母區(qū)分大小寫;(5)用戶自定義標(biāo)識符不能與C語言的保留字或預(yù)定義標(biāo)識符同名,并應(yīng)盡量做到“見名知意”,以增加程序的可讀性。C語言保留字請參見附錄2,預(yù)定義標(biāo)符指預(yù)定義庫函數(shù)。

變量沒有賦初值時,變量中存放的是一隨機(jī)值。變量定義時可同時賦初值,稱之為變量的初始化,如:inta=1,a5=10;第六頁,共六十三頁,編輯于2023年,星期五定義變量包括兩個方面的含義:一是給變量分配了存儲空間和規(guī)定了變量的取值范圍;二是規(guī)定了其允許的操作,如實(shí)數(shù)可進(jìn)行加減乘除運(yùn)算,但不能進(jìn)行求余運(yùn)算。第七頁,共六十三頁,編輯于2023年,星期五2.1.2整型常量1。整型常量按進(jìn)制劃分有:十進(jìn)制、八進(jìn)制(前綴為數(shù)字0)、十六進(jìn)制(前綴為數(shù)字0X或0x)三種。數(shù)據(jù)377按這三種進(jìn)制的格式可分別表示為:377、0571、0x179(或0X179)。2。常量按長度劃分為兩種:短整型和長整型(后綴為小寫字母l或大寫字母L),其中默認(rèn)為短整型。如-377是一個短整型數(shù),而-377l或-377L表示-377是長整型數(shù)。3。長度和進(jìn)制可進(jìn)行組合如:377L、0571L、0x179L分別表示十進(jìn)制、八進(jìn)制、十六進(jìn)制長整型數(shù)。第八頁,共六十三頁,編輯于2023年,星期五2.1.3實(shí)型常量實(shí)型常量有兩種表示方法:一類是標(biāo)準(zhǔn)計數(shù)方法,如PI值表示為3.1415926另一類可以采用科學(xué)計數(shù)法,科學(xué)計數(shù)法的一般形式為:

尾數(shù)E階碼

尾數(shù)e階碼如PI值可以表示為如下形式:3.14159E0 3.14159e0 0.314159E1 31.4159e-1。第九頁,共六十三頁,編輯于2023年,星期五2.1.4字符常量字符常量用一對單引號包圍如’5’、’a’、’A’、‘’等每個字符占一個字節(jié),在計算機(jī)中,字符按ASII值存放,見附錄1,對應(yīng)的3個字符ASCII值為53、97、65、32等,因此字符也可以參加整型運(yùn)算。由于字符用單引號包圍,單引號字符不好表示,在C中這些不好表示的字符可在字符前面加反斜杠\區(qū)分,稱之為轉(zhuǎn)義字符,如’\’’表示單引號。常用轉(zhuǎn)義字符見表2.2。第十頁,共六十三頁,編輯于2023年,星期五表2.2常用轉(zhuǎn)義字符表碼意義ASCII碼意義ASCII\b退格8\’單引號39\f換頁12\\反斜杠92\n新行10\v直制表11\r回車13\a響鈴7\t水平制表9\?問號63\”雙引號34%%%百分號37第十一頁,共六十三頁,編輯于2023年,星期五字符也可用八進(jìn)進(jìn)或十六進(jìn)制形式表示:

八進(jìn)制

\ooo

十六進(jìn)制

\xhh如:\101、\x41均表示大寫字母A。注意‘3’與3的區(qū)別:前者為字符常量,占一個字節(jié),后者為整型常量,占兩個字節(jié);前者數(shù)值為51,后者為3;兩個數(shù)據(jù)都可以參加四則運(yùn)算。第十二頁,共六十三頁,編輯于2023年,星期五例2.1轉(zhuǎn)義字符與字符運(yùn)算舉例,分析下列程序運(yùn)行結(jié)果#include<stdio.h>main(){ charc=’a’; c=c+1; printf(“\n%c\n”,c); printf(“ThetokenofRMBis:\n\t\t\tY\b=”}在打印機(jī)上的輸出結(jié)果為:bThetokenofRMBis: ¥在屏幕上的輸出結(jié)果為:bThetokenofRMBis: =第十三頁,共六十三頁,編輯于2023年,星期五

2.1.5字符串類型字符串常量是用一對雙引號包圍的字符數(shù)組,如:”Hello,world!”,在內(nèi)存中是按照每個字符的ASCII碼連續(xù)存放的,并在結(jié)尾處添加了一結(jié)束標(biāo)志‘\0’,對應(yīng)的ASCII值為0,這樣n個字符組成的字符串需占用n+1個字節(jié)。12個字符組成字符串”Hello,world!”在內(nèi)存中占用13個字節(jié),其存儲形式如圖2.1示。(a)十進(jìn)制存儲表示(b)ASCII碼存儲形式圖2.1字符串“Hello,world!”存儲表示7210110810811139119111114108100330DC00DC01DC02DC03DC04DC05DC06DC07DC08DC09DC0ADC0BDC0C‘H’‘e’‘l’‘l’‘o’‘,’‘w’‘o’‘r’‘l’'d''!'‘\0’DC00DC01DC02DC03DC04DC05DC06DC07DC08DC09DC0ADC0BDC0C第十四頁,共六十三頁,編輯于2023年,星期五值得注意的是:(1)字符串中包含有雙引號時字符時,字符雙引號必須用轉(zhuǎn)義字符表示(2)一個字符串需占用兩行時,需采用兩對雙引號分別連續(xù)表示,參看下列。例2.2字符串常量分兩行表示的實(shí)例。#include<stdio.h>main(){ printf(“Isay:\n” “\“Hello,worl\x64!\””);}程序運(yùn)行結(jié)果如下:Isay:“Hello,world!”第十五頁,共六十三頁,編輯于2023年,星期五注意‘A’與“A”的區(qū)別:前者為字符常量,占一個字節(jié);后者為字符串常量,占兩個字節(jié),其中第一個字節(jié)存放字符‘A’,第二個字節(jié)存放字符串結(jié)束標(biāo)志‘\0’。

小結(jié)1.數(shù)據(jù)類型與取值范圍2.定義變量的含義3.字符與字符串的表示4.字符’3’與3、’A’與”A”的區(qū)別第十六頁,共六十三頁,編輯于2023年,星期五2.2運(yùn)算符2.2.1優(yōu)先級與結(jié)合規(guī)則1。運(yùn)算優(yōu)先級優(yōu)先級別:不同級別時,先算優(yōu)先級別高的運(yùn)算符;結(jié)合規(guī)則:在同一級別運(yùn)算時,按某種運(yùn)算規(guī)則進(jìn)行;優(yōu)先級別和結(jié)合規(guī)則見表2.32。單元運(yùn)算、雙元運(yùn)算、三元運(yùn)算雙元運(yùn)算:只允許帶左右兩個運(yùn)算數(shù)的運(yùn)算符稱為二元運(yùn)算符(或二目運(yùn)算符、雙元運(yùn)算符),如算術(shù)運(yùn)算。單元運(yùn)算:只允許有一個運(yùn)算數(shù)的稱為單元運(yùn)算符(或單目運(yùn)算符、一元運(yùn)算符),如負(fù)號運(yùn)算符(-)。三元運(yùn)算符,即條件運(yùn)算符,它允許帶三個運(yùn)算數(shù)。第十七頁,共六十三頁,編輯于2023年,星期五優(yōu)先級運(yùn)算符結(jié)合規(guī)則1()[]->.2!~++--

-*&sizeof(type)從右至左3*/%4+-5<<>>6<<=>=>7==!=8&9^10|11&&12||13?:從右至左14=+=-=*=/=%=&=^=|=>>=<<=從右至左15,第十八頁,共六十三頁,編輯于2023年,星期五3。運(yùn)算規(guī)則(1)不同級別的運(yùn)算符按運(yùn)算符的優(yōu)先級別確定計算順序,優(yōu)先級別高(優(yōu)先級別數(shù)小)的運(yùn)算符先計算,優(yōu)先級別低(優(yōu)先級別數(shù)大)的運(yùn)算符后計算。(2)相同級別的運(yùn)算順序按結(jié)合規(guī)則確定計算順序。如表達(dá)式3+4*(12-6)/(1+2)的計算順序?yàn)椋孩僮筮吚ㄌ栠\(yùn)算(12-6),值為6,②右邊括號運(yùn)算(1+2),值為3,③左邊乘法運(yùn)算4*6,值為24,④右邊除法運(yùn)算24/3,值為8,⑤加法運(yùn)算3+8,值為11。第十九頁,共六十三頁,編輯于2023年,星期五2.2.2賦值運(yùn)算與連續(xù)賦值一般形式為

變量=表達(dá)式其功能是將一個表達(dá)式的值賦給變量。如下表達(dá)式

a=b+c其本意是改寫變量a的值。注意:與數(shù)學(xué)上的關(guān)系運(yùn)算符——等于運(yùn)算符的區(qū)別:如數(shù)學(xué)上,表達(dá)式

a=a+5看作錯誤的表達(dá)式在C語言中這是正確的合法表達(dá)式。賦值運(yùn)算符的級別14級,右結(jié)合規(guī)則。表達(dá)式

x=y=z=1是連續(xù)賦值表達(dá)式,相當(dāng)于如下表達(dá)式

x=(y=(z=1))第二十頁,共六十三頁,編輯于2023年,星期五2.2.3算術(shù)運(yùn)算++、--1。算術(shù)運(yùn)算符算術(shù)運(yùn)算符有:加“+”、減“-”、乘“*”、除“/”、求余(模)“%”、“++”、“--”等。其中+、-運(yùn)算符級別為4級,*、/、%運(yùn)算符級別為3級,它們都滿足左結(jié)合性,都是二元運(yùn)算符,+、-、*、/都能對整數(shù)或?qū)崝?shù)進(jìn)行運(yùn)算。求余運(yùn)算符%只能對整型數(shù)據(jù)進(jìn)行,如5%2的值為1,5%3值為2。如果計算:a%b

時,a、b中至少有一個為負(fù)數(shù),此時運(yùn)算結(jié)果如何呢?C語言中規(guī)定,其結(jié)果:余數(shù)與a的符號相同,而絕對值不變。因此表達(dá)式7%3、7%-3、-7%3、-7%-3的值分別為1、1、-1、-1。

第二十一頁,共六十三頁,編輯于2023年,星期五2。自加++、自減運(yùn)算符--一元運(yùn)算符,級別為2級,滿足右結(jié)合性,整型變量。表達(dá)式++a或a++表示a的值自增1,而--a或a--表示a的值自減1。例如若有定義:inta=5;則執(zhí)行

a++或

++a后,a的值為6;執(zhí)行

a--或

--a后a的值為4。第二十二頁,共六十三頁,編輯于2023年,星期五3。前綴運(yùn)算、后綴運(yùn)算寫在變量的前面稱為前綴(或前置)運(yùn)算符,寫在變量的后面稱為后綴(或后置)運(yùn)算符。前綴運(yùn)算與后綴運(yùn)算時,注意如下兩點(diǎn):(1)++a與a++單獨(dú)構(gòu)成表達(dá)式時,兩者使用時沒有區(qū)別。(2)++a與a++不是單獨(dú)構(gòu)成表達(dá)式時,前綴運(yùn)算表示先加后用,后綴運(yùn)算表示先用后加。先用后加指的是先讀取a的數(shù)據(jù)使用,當(dāng)表達(dá)式中比逗號運(yùn)算符高的運(yùn)算符都執(zhí)行完后,a再進(jìn)行自加運(yùn)算。先加后用指的是先對a進(jìn)行自加運(yùn)算,然后再讀取a進(jìn)行其它運(yùn)算。上面我們僅以++為例進(jìn)行說明,對于--運(yùn)算也有相似的規(guī)則:前綴表示先減后用,后綴表示先用后減。第二十三頁,共六十三頁,編輯于2023年,星期五例2.3分析下列程序運(yùn)行結(jié)果#include

<stdio.h>main(){ inta,b; a=3;b=a++;printf(“a=%db=%d\n”,a,b); a=3;b=++a;printf(“a=%db=%d\n”,a,b); a=3;b=++a*++a;printf(“a=%db=%d\n”,a,b); a=3;b=++a*a++;printf(“a=%db=%d\n”,a,b); a=3;b=a++*++a;printf(“a=%db=%d\n”,a,b); a=3;b=a++*a++;printf(“a=%db=%d\n”,a,b); a=3;printf(“++a=%da++=%d\n”,++a,a++);}運(yùn)行結(jié)果為a=4b=3a=4b=4a=5b=25a=5b=16a=5b=16a=5b=9++a=5a++=3第二十四頁,共六十三頁,編輯于2023年,星期五2.2.4關(guān)系運(yùn)算比較大小運(yùn)算,有:>、>=、<、<=、==、!=,

結(jié)合規(guī)則都是自左向右的。其中>、>=、<、<=等運(yùn)算符級別為6級,它們比==、!=等兩個運(yùn)算符級別為7級的要高。結(jié)果為邏輯真或邏輯假,關(guān)系成立時為邏輯真(值為1),關(guān)系不成立時為邏輯假(值為0)。如下表達(dá)式5>3 5>=3 5<3 5<=3 5==3 5!=3的邏輯值分別為1 1 0 0 0 1注:關(guān)系運(yùn)算符與賦值運(yùn)算符的區(qū)別關(guān)系運(yùn)算的等于運(yùn)算符==與數(shù)學(xué)上的等于運(yùn)算符=具有相同的含義,與C語言中的賦值運(yùn)算符=是完全不同的,這一點(diǎn)對初學(xué)者而言往往容易搞錯。

第二十五頁,共六十三頁,編輯于2023年,星期五2.2.5邏輯運(yùn)算、連續(xù)比較和邏輯優(yōu)化1。邏輯運(yùn)算符有:邏輯與&&(11級、左結(jié)合)、邏輯或||(12級、左結(jié)合)、邏輯非!(2級、右結(jié)合)。邏輯與表達(dá)式a&&b表示a與b中只要有一個條件不滿足(值為0),其運(yùn)算結(jié)果為0,邏輯乘。邏輯或表達(dá)式a||b表示a與b中只要有一個條件滿足(值為1),其運(yùn)算結(jié)果為1,邏輯加。邏輯非表達(dá)式!a,當(dāng)a為1時,結(jié)果為0,當(dāng)a為0時,結(jié)果為1。邏輯真值表見表2.4。表2.4邏輯運(yùn)算真值表aba&&ba||b!a11110100100101100001第二十六頁,共六十三頁,編輯于2023年,星期五2。連續(xù)比較數(shù)學(xué)上

5>3>2在是恒成立的。但在C語言中,上式卻不成立。若將上式改寫為條件表達(dá)式

5>3&&3>2后,則與數(shù)學(xué)上的的連續(xù)比較含意相符,表達(dá)式也是成立的。3。邏輯優(yōu)化邏輯與優(yōu)化:從邏輯與運(yùn)算a&&b的真值表中,我們可以看出,只要a值為0,不管b值如何,其運(yùn)算結(jié)果都為0,因此,在進(jìn)行邏輯與運(yùn)算時,只要計算a值為0,我們不需計算b值,這種情況,我們稱之為邏輯與優(yōu)化。邏輯或優(yōu)化:同樣,對于邏輯或運(yùn)算a||b,只要a值為1,不需計算b值,此時表達(dá)式值恒為1,這種情況稱之為邏輯或優(yōu)化。

第二十七頁,共六十三頁,編輯于2023年,星期五程序運(yùn)行結(jié)果為

x=1y=0z=0

x=1y=1z=0

x=1y=1z=1

x=1y=0z=0例2.4邏輯運(yùn)算#include<stdio.h>main(){ intx,y,z; x=y=z=0;++x||++y||++z; printf(“x=%dy=%dz=%d\n”,x,y,z); x=y=z=0;++x&&++y||++z; printf(“x=%dy=%dz=%d\n”,x,y,z); x=y=z=0;++x&&++y&&++z; printf(“x=%dy=%dz=%d\n”,x,y,z); x=y=z=0;++x||++y&&++z; printf(“x=%dy=%dz=%d\n”,x,y,z);}第二十八頁,共六十三頁,編輯于2023年,星期五2.2.6位運(yùn)算1.位運(yùn)算操作符位運(yùn)算符有:&、|、^、~、>>、<<等6個,其含義見表2.5。算符符號名例子意義級別結(jié)合規(guī)則&位與a&ba與b按位求與8左|位或a^ba與b按位求異或9左^位異或a|ba與b按位求或10左~位反~a對a按位求反2右>>右移位a>>ba向右移b位5左<<左移位a<<ba向左移b位5左第二十九頁,共六十三頁,編輯于2023年,星期五2.異或運(yùn)算異或運(yùn)算真值表見表2.6,即對應(yīng)位相同時為0,不同時為1。

表2.6異或運(yùn)算真值表

aba^b1101010110003.移位運(yùn)算左移位運(yùn)算a<<b表示將a左移b位,右邊空出低位部分用0填補(bǔ),左邊移出部分將丟棄。右移位運(yùn)a>>b,右邊移出部分將丟棄,左邊空出高位部分填補(bǔ)方法根據(jù)a是否為帶符號數(shù)分為兩種:a為帶符號數(shù),左邊空出高位部分用符號位填補(bǔ);a為不帶符號數(shù),高位部分用0填補(bǔ)。

第三十頁,共六十三頁,編輯于2023年,星期五例2.5位運(yùn)算main(){ chara=-25,b=93,c; unsignedchard=-25; c=a&b;printf(“%d\n”,c); c=a|b;printf(“%d\n”,c); c=a^b;printf(“%d\n”,c); c=~a;printf(“%d\n”,c);

b=3; c=a>>b;printf(“%d\n”,c); c=d>>b;printf(“%d\n”,c); a=25; c=a>>b;printf(“%d\n”,c);

c=a<<b;printf(“%d\n”,c);}結(jié)果:69-1-7024-4283-56^:10111010~:00011000>>:11111100a:11100111b:01011101&01000101|:11111111d:11100111>>:00011100a:00011001>>:00000011<<:11001000第三十一頁,共六十三頁,編輯于2023年,星期五2.2.7條件運(yùn)算?:唯一的三元運(yùn)算符,用符號?:表示,有三個操作數(shù),優(yōu)先級為13級,結(jié)合規(guī)則為右結(jié)合,其書寫一般形式為

a?b:c其計算方法是先計算a,若a非0,則選擇b作為表達(dá)式值,否則若a為0,則選擇c作為表達(dá)式值,條件運(yùn)算又稱為三項(xiàng)條件運(yùn)算或選擇運(yùn)算。例2.6條件運(yùn)算——輸入兩個整數(shù),選擇其中較大的數(shù)輸出#include<stdio.h>main(){ inta,b,c; scanf(“%d%d”,&a,&b); c=a>b?a:b; printf(“%d”,c);}程序運(yùn)行結(jié)果為:35↙(箭頭表示從鍵盤輸入)5第三十二頁,共六十三頁,編輯于2023年,星期五2.2.8復(fù)合賦值運(yùn)算同賦值運(yùn)算一樣,也是二元運(yùn)算符,14級,右結(jié)合。含義見表2.7。表達(dá)式:a/=b+c*d相當(dāng)于表達(dá)式a=a/(b+c*d)表2.7復(fù)合賦值運(yùn)算符

運(yùn)算舉例意義運(yùn)算舉例意義+=a+=ba=a+b&=a&=ba=a&b-=a-=ba=a-b^=a^=ba=a^b*=a*=ba=a*b|=a|=ba=a|b/=a/=ba=a/b>>=a>>=ba=a>>b%=a%=ba=a%b<<=a<<=ba=a<<b第三十三頁,共六十三頁,編輯于2023年,星期五2.2.9逗號運(yùn)算,15級,左結(jié)合。其一般形式如下:

e1,e2,e3,……,en其功能為先計算表達(dá)式e1,然后計算表達(dá)式e2,再計算表達(dá)式e3,……,最后計算表達(dá)式en,其中表達(dá)式en的值為整個表達(dá)式的值。例2.7逗號表達(dá)式#include

<stdio.h>main(){ inta=5,b=3,c,d; d=(c=a++,c++,b*=a*c,b/=a*c); printf(“%d\n”,d); printf(“a=%db=%dc=%d\n”,a,b,c);}輸出結(jié)果為3a=6b=3c=6第三十四頁,共六十三頁,編輯于2023年,星期五2.2.10其它運(yùn)算sizeof計算變量或表達(dá)式占用的存儲空間大小,即字節(jié)數(shù),2級,右結(jié)合。sizeof計算類型占用字節(jié)數(shù)的形式為

sizeof(類型)sizeof計算變量占用字節(jié)數(shù)的形式有兩種

sizeof(變量)

sizeof變量如有

inta,b;則

sizeof(int) sizeofa sizeof(a)都是合法的表達(dá)式,其值都為4。第三十五頁,共六十三頁,編輯于2023年,星期五2.2.11類型轉(zhuǎn)換與類型轉(zhuǎn)換規(guī)則1.算術(shù)運(yùn)算類型轉(zhuǎn)換算術(shù)運(yùn)算中,當(dāng)兩個運(yùn)算數(shù)類型相同時,運(yùn)算結(jié)果類型與原類型相同,當(dāng)兩個運(yùn)算數(shù)類型不同時,運(yùn)算結(jié)果類型為級別較高的數(shù)據(jù)類型。類型級別高低按下述規(guī)則進(jìn)行:低 高char

int longfloatdoubleunsigned signed因此表達(dá)式:

5/2+3*4.5+2的運(yùn)算結(jié)果為17.5,而不是18.第三十六頁,共六十三頁,編輯于2023年,星期五表達(dá)式改寫為:

5/2.0+3*4.5+2此時,其運(yùn)算結(jié)果為18.0,而不是17.5,請讀者自行分析

第三十七頁,共六十三頁,編輯于2023年,星期五2.賦值轉(zhuǎn)換執(zhí)行賦值運(yùn)算

變量a=表達(dá)式b時,若a、b類型相同,則直接將b賦給a即可,若a、b類型不同,則需先將b的類型轉(zhuǎn)換為a的類型后再賦值,這種類型轉(zhuǎn)換,我們稱之為賦值類型轉(zhuǎn)換。賦值類型轉(zhuǎn)換分為如下幾種情況:

第三十八頁,共六十三頁,編輯于2023年,星期五(1)不帶符號整型數(shù)向帶符號整型數(shù)轉(zhuǎn)換最高位為1時,當(dāng)作符號位即負(fù)號來處理。如

unsignedshorta=65535; shortb; b=a;此時b的值為多少呢?將a賦給b后,b的存儲形式與a相同,但最高位是符號位,表示b為負(fù)數(shù),即b值為-1(補(bǔ)碼)。

1111111111111111第三十九頁,共六十三頁,編輯于2023年,星期五(2)帶符號整型數(shù)向不帶符號整型轉(zhuǎn)換帶符號的整型數(shù)向不帶符號整型轉(zhuǎn)換時,此時將最高位(符號位)也作為數(shù)值進(jìn)行處理,因此若有:

unsignedshorta;shortb=-1; a=b;因?yàn)榇藭rb占兩字節(jié),二進(jìn)制補(bǔ)碼形式為16個1,賦給a后,a的16個位也都為1,因此a的值為655351111111111111111第四十頁,共六十三頁,編輯于2023年,星期五(3)短型向長型轉(zhuǎn)換對于短整型向長整型轉(zhuǎn)換時,擴(kuò)展位部分補(bǔ)符號位。對于浮點(diǎn)型向雙精度型轉(zhuǎn)換時,不丟失精度。例2.8符號位的擴(kuò)展#include<stdio.h>main(){ shorta=-1;longb;unsignedlongc; b=a; c=a; printf("a=%db=%ldc=%lu\n",a,b,c);}程序運(yùn)行結(jié)果為a=-1b=-1c=4294967295111111111111111111111111111111111111111111111111第四十一頁,共六十三頁,編輯于2023年,星期五(4)長型向短型轉(zhuǎn)換長整型數(shù)據(jù)占4個字節(jié),短整型數(shù)據(jù)只占2個字節(jié),數(shù)據(jù)取值范圍小,長整型數(shù)據(jù)賦給短整型數(shù)據(jù)轉(zhuǎn)換時,只保留長整型數(shù)據(jù)的低16位部分,可能會引起數(shù)據(jù)的丟失。例2.9長型數(shù)據(jù)向短型數(shù)據(jù)轉(zhuǎn)換#include

<stdio.h>main(){ longa=65537;shortb; b=a; printf("a=%ldb=%d\n",a,b);}程序輸出結(jié)果為a=65537b=1000000010000000000000001000000000000000000000001ab圖2.2長整型賦給短整型第四十二頁,共六十三頁,編輯于2023年,星期五(5)浮點(diǎn)型向雙精度型轉(zhuǎn)換-----等值轉(zhuǎn)換。(6)雙精度型向浮點(diǎn)型轉(zhuǎn)換由于雙精度數(shù)據(jù)精度為16位,浮點(diǎn)型數(shù)據(jù)精度為7位,超過精度范圍的部分將按四舍五入處理,超出浮點(diǎn)型數(shù)據(jù)范圍的部分將引起溢出錯誤。例2.10雙精度數(shù)據(jù)轉(zhuǎn)換為浮點(diǎn)型數(shù)據(jù)#include

<stdio.h>main(){ doublea=1.234567890123456789e18; floatb=a; printf("b=%.20le\n",a);printf("b=%.20le\n",b);}

如果雙精度數(shù)據(jù)范圍超過浮點(diǎn)型數(shù)據(jù)取值范圍1038,將引起數(shù)據(jù)的丟失,產(chǎn)生錯誤的輸出結(jié)果。程序輸出結(jié)果a=1.2345789012345780000e18b=1.2345683955060940000e18第四十三頁,共六十三頁,編輯于2023年,星期五3.強(qiáng)制類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換的一般格式為:

(目標(biāo)類型)表達(dá)式其功能是將表達(dá)式類型轉(zhuǎn)換為目標(biāo)類型,其轉(zhuǎn)換方法同賦值轉(zhuǎn)換。如:

floata=3.8; inti; i=(int)a;則i的值為3。4.輸入/輸出類型轉(zhuǎn)換輸入/輸出類型轉(zhuǎn)換,我們將在下一節(jié)輸入輸出函數(shù)中講述。第四十四頁,共六十三頁,編輯于2023年,星期五復(fù)習(xí)1.優(yōu)先級與結(jié)合規(guī)則2.自加運(yùn)算中的前置與后置的區(qū)別3.邏輯運(yùn)算4.位運(yùn)算5.條件運(yùn)算6.類型轉(zhuǎn)換2.3輸入輸出函數(shù)

第四十五頁,共六十三頁,編輯于2023年,星期五2.3.1格式化輸出函數(shù)printfprintf(“格式字符串”,表達(dá)式1,表達(dá)式2,……,表達(dá)式n);其中格式字符串由兩類項(xiàng)目組成:第一類是顯示到屏幕上的字符,第二類是對應(yīng)每個輸出表達(dá)式的格式說明符(formatspecifier)。格式說明符以%開始,以類型代碼結(jié)束,其一般格式為:

%[flags][width].[precision][F|N|h|l]type1.類型代碼(type)類型代碼type意義如表2.8所示。

例2.11先初始化不同類型數(shù)據(jù),然后輸出數(shù)據(jù)。#include

<stdio.h>第四十六頁,共六十三頁,編輯于2023年,星期五表2.8

type類型代碼表

type意義type意義c字符s字符串d帶符號10進(jìn)制整u無符10進(jìn)制整數(shù)i帶符號10進(jìn)制整x無符16進(jìn)制小寫xf10進(jìn)制浮點(diǎn)數(shù)X無符16進(jìn)制大寫Xe用e表示指數(shù)部分p指針E用E表示指數(shù)部分n已輸出的字符數(shù)ge或f中選擇短格%輸出%號GE或f中選擇短格aC99標(biāo)準(zhǔn)o無符號8進(jìn)制整AC99標(biāo)準(zhǔn)第四十七頁,共六十三頁,編輯于2023年,星期五main(){ shorta,b;unsignedc;chard='A'; floatf;doublee; a=3;b=-3;c=-5; f=3.14259;e=12.3e10; printf("Character:ASCIIcoded=%cASCIIvalued=%d\n",d,d); printf("Decimal:a=%db=%dc=%d\n",a,b,c); printf("Unsigned:a=%ub=%uc=%u\n",a,b,c); printf("Octor:a=%ob=%oc=%o\n",a,b,c); printf("Hexdecimal:a=%xb=%xc=%x\n",a,b,c); printf("Hexdecimal:a=%Xb=%Xc=%X\n",a,b,c); printf("formatf:f=%fe=%f\n",f,e); printf("formate:f=%ee=%e\n",f,e); printf("formatg:f=%ge=%g\n",f,e);}第四十八頁,共六十三頁,編輯于2023年,星期五程序運(yùn)行結(jié)果為Character:ASCIIcoded=AASCIIvalued=65Decimal:a=3b=-3c=-5Unsigned:a=3b=65533c=65531Octor:a=3b=177775c=177773Hexdecimal:a=3b=fffdc=fffbHexdecimal:a=3b=FFFDc=FFFBformatf:f=3.142590e=123000000000.000000formate:f=3.14259e+00e=1.23000e+11formatg:f=3.14259e=1.23e+11第三行:由于b為-3,補(bǔ)碼為1111111111111101,無符號數(shù)為65533(216==65536==65533+3);c為-5,補(bǔ)碼為1111111111111011,無符號數(shù)為65531(216==65536==65531+5)。值得注意的是八進(jìn)制、十六進(jìn)制形式是不帶符號的。十六進(jìn)制形式輸出有大寫%X和小寫%x兩種形式。

第四十九頁,共六十三頁,編輯于2023年,星期五2.寬度(width)寬度n:表達(dá)式輸出時至少占用n位。寬度0n時,其中的數(shù)字0表示左邊空位用0填補(bǔ)。3.精度(precision)對于不同類型的輸出表達(dá)式,精度表示不同的含義。說明符%e、%E、%f作用于浮點(diǎn)數(shù),精度表示小數(shù)點(diǎn)后最多顯示的位數(shù),如果未指定精度,精度默認(rèn)值為6。如%10.4f顯示的數(shù)據(jù)至少占10位,其中小數(shù)至多4位。當(dāng)精度作用于%g或%G時,指的是有效位數(shù)目。當(dāng)精度作用于字符串時,精度符限制最大字符串位數(shù)。如%5.7s顯示的字符串至少占5位,最多占7位(超長部分截除)。作用于整數(shù)時,精度決定必須顯示的最小位數(shù),不足時補(bǔ)前導(dǎo)0。第五十頁,共六十三頁,編輯于2023年,星期五例2.12數(shù)據(jù)精度#include

<stdio.h>main(){ printf("%.4f\n",123.1234567); printf("%3.8d\n",1234); printf("%10.15s\n","Thisisasimpletest");}程序運(yùn)行結(jié)果為123.123500001234Thisisasimpl第五十一頁,共六十三頁,編輯于2023年,星期五4.標(biāo)志(flags)對齊標(biāo)志flags為-時,表示左對齊;為+(默認(rèn))時,表示右對齊;為0或0+時,左邊空位用0填補(bǔ);為0-時,此時0被忽略;為#時,若為o、X、x格式,則在輸出項(xiàng)前顯示0、0X、0x,若為E、e、F、f、G、g,則每個輸出項(xiàng)都帶小數(shù)點(diǎn)。5.處理其它類型的修飾說明符(F|N|h|l)h、l(小寫字母)可用于修飾%d、%o、%u、%x,h修飾時表示輸出短整數(shù),l修飾時表示輸出長整數(shù)。l可修飾%e、%f、%g,表示輸出double(C99標(biāo)準(zhǔn))。

第五十二頁,共六十三頁,編輯于2023年,星期五2.3.2格式化輸入函數(shù)scanfscanf函數(shù)使用的格式為

scanf(“格式字符串”,地址項(xiàng)1,地址項(xiàng)2,……,地址項(xiàng)n);格式字符串由兩類項(xiàng)目組成:指定數(shù)據(jù)分隔字符,格式說明符(formatspecifier)。格式說明符數(shù)量必須與輸入數(shù)據(jù)地址項(xiàng)數(shù)量嚴(yán)格一致,且按從左到右的方式依次匹配。變量地址項(xiàng)為變量名前加&,如&x、&y、&a等。格式說明符的一般格式如下

%[*][width][h|l]type其每個項(xiàng)的含義與printf基本相同,不同的是輸入格式串沒有精度項(xiàng),其中*用于跳讀輸入的數(shù)據(jù)項(xiàng)。第五十三頁,共六十三頁,編輯于2023年,星期五例2.13計算圓柱體體積。#include

<stdio.h>main(){ intr,h; floatv; scanf("%d%*d%d",&r,&h); v=3.14159*r*r*h; printf("Thevolumeis:%.5f\n",v);}程序運(yùn)行結(jié)果為:354↙(箭頭表示前面的數(shù)從鍵盤輸入)Thevolumeis:113.09724r=3h=4v=113.09724第五十四頁,共六十三頁,編輯于2023年,星期五數(shù)據(jù)流的分隔方式1.(隱含方式)用空白符號分隔數(shù)據(jù)流分隔數(shù)據(jù)流的空白符可以為空格(Space)、制表符(Tab)、回車符(Enter)等。如上面程序的數(shù)據(jù)輸入可以為:3↙5↙4↙注意:若輸入的下一數(shù)據(jù)項(xiàng)為字符時,不能采用空白符分隔,因?yàn)榭瞻追麜划?dāng)作有效的輸入字符,此時可采用其它數(shù)據(jù)流分隔方式進(jìn)行。第五十五頁,共六十三頁,編輯于2023年,星期五2.指定數(shù)據(jù)輸入寬度分隔數(shù)據(jù)流

width用于指定每個輸入數(shù)據(jù)項(xiàng)的最大寬度。實(shí)際輸入數(shù)據(jù)的寬度可以小于指定的寬度width,此時可采用空白符方式或其它方式分隔數(shù)據(jù)流。如上面程序

溫馨提示

  • 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

提交評論