C語(yǔ)言程序設(shè)計(jì)(第二版)課件第2章 數(shù)據(jù)類型、運(yùn)算符和表達(dá)式_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第二版)課件第2章 數(shù)據(jù)類型、運(yùn)算符和表達(dá)式_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第二版)課件第2章 數(shù)據(jù)類型、運(yùn)算符和表達(dá)式_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第二版)課件第2章 數(shù)據(jù)類型、運(yùn)算符和表達(dá)式_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第二版)課件第2章 數(shù)據(jù)類型、運(yùn)算符和表達(dá)式_第5頁(yè)
已閱讀5頁(yè),還剩62頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第2章數(shù)據(jù)類型、運(yùn)算符和表達(dá)式

掌握C語(yǔ)言的基本數(shù)據(jù)類型掌握標(biāo)識(shí)符、關(guān)鍵字、常量和變量的使用掌握運(yùn)算符、表達(dá)式以及數(shù)據(jù)類型之間的轉(zhuǎn)換等掌握簡(jiǎn)單數(shù)據(jù)的輸入輸出2.1數(shù)據(jù)類型2.1.1數(shù)據(jù)類型概述2.1數(shù)據(jù)類型2.1.2整數(shù)類型整數(shù)類型簡(jiǎn)稱整型,整型數(shù)據(jù)沒有小數(shù)部分。整型可分為:基本整型:用int表示。短整型:用short

int或short表示。長(zhǎng)整型:用long

int或long表示。2.1數(shù)據(jù)類型2.1.2整數(shù)類型2.1.2整數(shù)類型注意:除了單個(gè)的0是十進(jìn)制常量外,其他以0開始的都是八進(jìn)制常量數(shù)據(jù)后加u或U:表示是無(wú)符號(hào)類型,如65535u、168U數(shù)據(jù)后加l或L:表示是長(zhǎng)整型,如-1L八進(jìn)制、十進(jìn)制和十六進(jìn)制只是整數(shù)的不同書寫形式,提供多種寫法只是為了使用方便,我們可以根據(jù)需要選擇適當(dāng)?shù)臅鴮懛绞紺語(yǔ)言中不用二進(jìn)制形式表示整數(shù)C語(yǔ)言中,八進(jìn)制和十六進(jìn)制數(shù)一般是無(wú)符號(hào)的整型常量十進(jìn)制整型常量:同數(shù)學(xué)上的表示方法,如168、-1、65535等。八進(jìn)制整型常量:以0開頭,由數(shù)字0~7組成,如0101、-045等。十六進(jìn)制整型常量:以0x或0X開頭的數(shù)字序列表示十六進(jìn)制數(shù),如0x12,整型常量以下是非法的整型常量:09:0開頭應(yīng)該是八進(jìn)制,但9不是合法的八進(jìn)制數(shù)字。0X6G:0X開頭應(yīng)該是十六進(jìn)制,但G不是合法的十六進(jìn)制數(shù)字。以下是合法的整型常量:00000101:八進(jìn)制,相當(dāng)于十進(jìn)制的65。-012:八進(jìn)制,相當(dāng)于十進(jìn)制的-10。65535LU:十進(jìn)制,無(wú)符號(hào)長(zhǎng)整型。0XFF:十六進(jìn)制,相當(dāng)于十進(jìn)制的255。整型常量注意:如要說明是無(wú)符號(hào)類型則在數(shù)據(jù)后加u或U、如65535u、168U等。如果說明為長(zhǎng)整型,則在數(shù)據(jù)后面加l或L,如-1L。八進(jìn)制、十進(jìn)制和十六進(jìn)制只是整數(shù)的不同書寫形式,提供多種寫法只是為了使用方便,我們可以根據(jù)需要選擇適當(dāng)?shù)臅鴮懛绞?。C語(yǔ)言中不用二進(jìn)制形式表示整數(shù)。C語(yǔ)言中,一般只使用無(wú)符號(hào)的八進(jìn)制和十六進(jìn)制數(shù),而不使用有符號(hào)的八進(jìn)制和十六進(jìn)制數(shù),因此沒有專門的無(wú)符號(hào)八進(jìn)制和十六進(jìn)制標(biāo)識(shí)符。2.1數(shù)據(jù)類型2.1.3實(shí)型實(shí)數(shù)類型簡(jiǎn)稱實(shí)型,有時(shí)又稱浮點(diǎn)數(shù)據(jù)類型包括:?jiǎn)尉雀↑c(diǎn)數(shù)類型:簡(jiǎn)稱浮點(diǎn)類型,類型名為float。雙精度浮點(diǎn)數(shù)類型:簡(jiǎn)稱雙精度類型,類型名為double。長(zhǎng)雙精度類型:類型名為long

double。2.1數(shù)據(jù)類型2.1.3實(shí)型實(shí)型常量實(shí)型常量只能用十進(jìn)制形式表示表示形式:小數(shù)形式。由數(shù)字序列和小數(shù)點(diǎn)組成,如3.1415926、-0.15、.15、2.等都是合法的實(shí)型常量。指數(shù)形式。由十進(jìn)制數(shù)加上階碼標(biāo)志“e”或“E”及階碼組成,如3.14e-4或3.14E-4表示3.14×10-4。實(shí)型常量注意:字母e或E之前的尾數(shù)部分必須有數(shù)字,例如E2是不合法的。e或E后面的指數(shù)部分必須是整數(shù),指數(shù)部分無(wú)整數(shù)或?yàn)樾?shù)均是錯(cuò)誤的,例如5e

和5E-5.5均是不合法的表示。C語(yǔ)言中,默認(rèn)實(shí)型常量為double類型,若有后綴“f”或“F”,則為float類型。有效數(shù)字【例2-1】一個(gè)浮點(diǎn)數(shù)的精確度測(cè)試實(shí)驗(yàn)#include<stdio.h>voidmain(){ floatx=0.999969482421875; floaty=0.99999999; printf("x=%.15f\n",x);/*%.15f表示輸出15小數(shù)*/ printf("y=%.8f\n",y);}2.1數(shù)據(jù)類型2.1.4字符型字符類型的數(shù)據(jù)簡(jiǎn)稱字符型數(shù)據(jù)C語(yǔ)言中用char表示,在內(nèi)存中占一個(gè)字節(jié)。字符類型的數(shù)據(jù)包括計(jì)算機(jī)所用編碼字符集中的所有字符。常用的ASCII字符集,共128個(gè)。擴(kuò)展的ASCII字符集共256個(gè)字符。字符數(shù)據(jù)與整型數(shù)據(jù)是相似的(除了占用的存儲(chǔ)空間不同)2.1數(shù)據(jù)類型2.1.4字符型字符常量字符型常量是由一對(duì)單引號(hào)括起來的單個(gè)字符構(gòu)成例如'A'、'b'、'8

字符‘A’~‘Z’的ASCII碼值是65~90。字符‘a(chǎn)’~‘z’的ASCII碼值是97~122。字符‘0’~‘9’的ASCII碼值是48~57??崭褡址?□'的ASCII碼值是32。

轉(zhuǎn)義字符字符串常量字符串常量是由一對(duì)雙引號(hào)括起的字符序列,例如“1234567”、“Hello

World”等都是字符串常量。"\\123\101"共有5個(gè)字符占6個(gè)字節(jié),其中\(zhòng)\、\101分別代表一個(gè)字符,輸出為\123A

2.2標(biāo)識(shí)符、符號(hào)常量與變量2.2.1

標(biāo)識(shí)符所謂標(biāo)識(shí)符是指程序中的變量、符號(hào)常量、數(shù)組、函數(shù)、類型、文件等對(duì)象的名字。規(guī)則說明只能由下劃線、數(shù)字與字母構(gòu)成,首個(gè)字符必須是字母或下劃線,而不能是數(shù)字或其他符號(hào)如:name、Name、score、_10注意C語(yǔ)言中對(duì)字母大小寫敏感不能使用系統(tǒng)的關(guān)鍵字(保留字)如:int、float、double等不建議使用系統(tǒng)預(yù)定義標(biāo)識(shí)符如預(yù)編譯命令名(define、include)、系統(tǒng)函數(shù)名(scanf、printf、getchar、putchar)盡量做到“見名知義”如:max、name等,而不用像abc、a1、a2等標(biāo)識(shí)符避免使用易混字符如:1、l、i;0、o;2、z等2.2標(biāo)識(shí)符、符號(hào)常量與變量關(guān)鍵字2.2標(biāo)識(shí)符、符號(hào)常量與變量2.2.2符號(hào)常量【例2-2】輸入圓的半徑,計(jì)算周長(zhǎng)和面積。#definePI3.14159voidmain(){floatr,c,s;scanf("%f",&r);c=2*PI*r;s=PI*r*r;printf("r=%f,c=%f,s=%f\n",r,c,s);}2.2標(biāo)識(shí)符、符號(hào)常量與變量2.2.3

變量在程序運(yùn)行過程中,其存儲(chǔ)的值可以被改變的量稱為變量變量必須通過標(biāo)識(shí)符進(jìn)行說明,稱為變量名。變量名和內(nèi)存單元地址存在映射關(guān)系,程序可以通過變量名尋址,從而訪問其存儲(chǔ)的數(shù)據(jù)。2.2標(biāo)識(shí)符、符號(hào)常量與變量變量的定義和說明數(shù)據(jù)類型變量名1[,變量名2,…,變量名n];inti,j,k;floatx;longa,b,c;4個(gè)基本要素:名字、類型、初值和作用域2.2標(biāo)識(shí)符、符號(hào)常量與變量變量名為標(biāo)識(shí)符的一種。變量的數(shù)據(jù)類型可以是基本數(shù)據(jù)類型,也可以是復(fù)雜數(shù)據(jù)類型。變量的作用域是指變量在程序中有定義的范圍,即該變量名在某段代碼區(qū)域是否有意義。變量需要賦初值。沒有被賦值的變量其初值取決于存儲(chǔ)類型,靜態(tài)存儲(chǔ)的變量將自動(dòng)為0,否則被隨機(jī)初始化。2.2標(biāo)識(shí)符、符號(hào)常量與變量變量賦初值的兩種方式變量說明時(shí)直接賦初值,稱為變量的初始化,如:inta=10,b=9,c=6;floatx=3.0,y=1.0,z=2.0;用賦值語(yǔ)句賦初值,如:floatx;x=10.0;2.2標(biāo)識(shí)符、符號(hào)常量與變量注意:編譯系統(tǒng)將對(duì)每一個(gè)變量根據(jù)它被定義的類型分配相應(yīng)的存儲(chǔ)單元。變量存儲(chǔ)單元地址可用“&變量名”求得??梢杂瞄L(zhǎng)度運(yùn)算符sizeof()求出任意類型變量存儲(chǔ)單元的字節(jié)數(shù)。編譯系統(tǒng)根據(jù)變量被定義的類型檢查該變量進(jìn)行運(yùn)算的合法性。如果沒有給變量賦初始值,普通變量將存儲(chǔ)隨機(jī)值,直到給它賦值為止。2.2標(biāo)識(shí)符、符號(hào)常量與變量整型數(shù)據(jù)的存儲(chǔ)C語(yǔ)言中的整型數(shù)據(jù)分為有符號(hào)和無(wú)符號(hào)兩大類unsigned

inta=65,b=65535;

inta=65,b=32767,c=-1;2.2標(biāo)識(shí)符、符號(hào)常量與變量補(bǔ)碼(complement)假設(shè)int型整數(shù)a占2字節(jié),16位二進(jìn)制數(shù)2.2標(biāo)識(shí)符、符號(hào)常量與變量2字節(jié)的int型整數(shù)的補(bǔ)碼2.2標(biāo)識(shí)符、符號(hào)常量與變量負(fù)數(shù)的轉(zhuǎn)換步驟如下:32768取絕對(duì)值,如|-32768|等于32768216-|a|,如216-|-32768|等于65536–32768等于32768轉(zhuǎn)換成二進(jìn)制,如1000000000000000(32768等于215)

2.2標(biāo)識(shí)符、符號(hào)常量與變量補(bǔ)碼形式還原成十進(jìn)制的步驟正好相反11111111

11111110轉(zhuǎn)換成十進(jìn)制:65534216-65534

65536-655342加負(fù)號(hào)-22.2標(biāo)識(shí)符、符號(hào)常量與變量實(shí)型數(shù)據(jù)的存儲(chǔ)實(shí)型變量及實(shí)型數(shù)據(jù)的存儲(chǔ)為了擴(kuò)大表示數(shù)的范圍,實(shí)型數(shù)據(jù)是按指數(shù)形式存儲(chǔ)的,存儲(chǔ)格式如下圖所示:字符數(shù)據(jù)的存儲(chǔ)與使用01000001字符'A'的存儲(chǔ)【例2-3】演示字符數(shù)據(jù)的存儲(chǔ)和引用#include<stdio.h>voidmain(){ charc; inti;c='A'; i=c; printf("c=%d,c=%c\n",c,c); printf("i=%d,i=%c\n",i,i); c=c+32; printf("c=%c\n",c); c=0x80; printf("c=%c,c=%d\n",c,c);}2.3運(yùn)算符與表達(dá)式13類45個(gè)運(yùn)算符優(yōu)先級(jí)運(yùn)算符名稱結(jié)合方向1()括號(hào),改變優(yōu)先級(jí)從左至右[]數(shù)組下標(biāo).

、\->成員選擇運(yùn)算符2++、--自增、自減運(yùn)算符從右至左&取地址*取內(nèi)容!邏輯求反~按位求反+、-正、負(fù)號(hào)(數(shù)據(jù)類型)強(qiáng)制轉(zhuǎn)換sizeof()計(jì)算數(shù)據(jù)類型長(zhǎng)度2.3運(yùn)算符與表達(dá)式3*、/、%乘法、除法、求余從左至右4+、-加、減5<<、>>左移、右移6<、<=、>、=>小于、小于等于、大于、大于等于7==、!=等于、不等于8&按位與9^按位異或10|按位或11&&邏輯與12||邏輯或13?:條件運(yùn)算符從右至左14=、+=、-=、*=、/=、%=、<<=、>>=、&=、∧=、|=賦值運(yùn)算符從右至左15,逗號(hào)運(yùn)算符從左至右運(yùn)算符的功能。運(yùn)算符與操作對(duì)象即操作數(shù)(包括常量、變量、函數(shù)調(diào)用等)的關(guān)系:操作數(shù)的個(gè)數(shù)(單目、雙目、三目)。求操作數(shù)的類型(如求余運(yùn)算符%要求操作數(shù)是整型)。結(jié)合方向運(yùn)算符的優(yōu)先級(jí)。運(yùn)算結(jié)果的數(shù)據(jù)類型運(yùn)算符連接操作數(shù)形成的式子叫表達(dá)式。學(xué)習(xí)運(yùn)算符要注意以下幾方面問題2.3.1算術(shù)運(yùn)算符與算術(shù)表達(dá)式1.基本算術(shù)運(yùn)算符+(加)、-(減)、*(乘)、/(除)、%(取模,或稱求余運(yùn)算符)。

雙目運(yùn)算符,結(jié)合方向均為從左到右。%(取模)運(yùn)算符僅用于整型變量或整型常量的運(yùn)算,a%b結(jié)果為a除以b的余數(shù),余數(shù)的符號(hào)與被除數(shù)相同,如:7%3的值為1;17%-3的結(jié)果為2;-19%4的結(jié)果為-3。+、-、*、/運(yùn)算符的兩個(gè)操作數(shù)既可以是整數(shù),也可以是實(shí)數(shù)。/(除法)運(yùn)算符,當(dāng)對(duì)兩個(gè)整型的數(shù)據(jù)相除時(shí)為整除操作2.基本算術(shù)表達(dá)式2.3運(yùn)算符與表達(dá)式強(qiáng)制類型轉(zhuǎn)換(顯式轉(zhuǎn)換)運(yùn)算符:(類型)例如:(double)a

(int)(x+y)

(float)5/3

表達(dá)式一定要加括號(hào)(因強(qiáng)制類型轉(zhuǎn)換是單目運(yùn)算,優(yōu)先級(jí)高),例如上面最后一個(gè)表達(dá)式中只是將5轉(zhuǎn)變成float型,而不是將5/3轉(zhuǎn)變成float型。若對(duì)變量實(shí)型顯式轉(zhuǎn)換,將得到新類型的一個(gè)值,原變量的類型及其存儲(chǔ)值均不變。2.3運(yùn)算符與表達(dá)式【例2-5】演示強(qiáng)制類型轉(zhuǎn)換。#include<stdio.h>voidmain(){ inti; floatf; f=3.1415926; printf("i=%d,f=%f\n",i,f); i=(int)f; printf("i=%d\n",i); f=5/3; printf("f=%f\n",f); f=(float)5/3; printf("f=%f\n",f); printf("f=%d\n",f);/*實(shí)數(shù)按整型數(shù)方式輸出*/ printf("i=%f\n",i);/*整型按實(shí)數(shù)方式輸出*/}2.3.1算術(shù)運(yùn)算符與算術(shù)表達(dá)式 3.自增自減運(yùn)算符:++和–單目運(yùn)算符,右結(jié)合作用對(duì)象必須是變量前綴運(yùn)算inti=5,j; j=++i;j等于6。后綴運(yùn)算inti=5,j; j=i++;j等于5。

2.3運(yùn)算符與表達(dá)式【例2-4】輸出下面程序中i、j的值。#include<stdio.h>voidmain(){ inti=5,j;j=++i+i++; printf("i=%d,j=%d\n",i,j); i=5;j=(++i)+(++i)+(i++); printf("i=%d,j=%d\n",i,j); i=5; printf("i++=%d,i++=%d\n",i++,i++);printf("i=%d\n",i); i=5; printf("++i=%d,++i=%d\n",++i,++i);printf("i=%d\n",i); i=5;j=6; printf("i+j=%d,j++=%d\n",i+j,j++); printf("i=%d,j=%d\n",i,j); i=5;j=6; printf("i+j=%d,j++=%d\n",i+j,++j); printf("i=%d,j=%d\n",i,j);}2.3運(yùn)算符與表達(dá)式說明:左邊是TC下的運(yùn)行結(jié)果,右邊是VC下的運(yùn)行結(jié)果。二者不同之處在于printf函數(shù)輸出時(shí),VC下后面參數(shù)的后綴j++、i++是在所有參數(shù)處理完畢后才起作用,而TC下,后綴的自增和自減將影響到該參數(shù)前面的參數(shù)處理。

2.3運(yùn)算符與表達(dá)式2.3.2算術(shù)表達(dá)式的書寫n*(n+1)/22+sqrt(1.0+a)*b++/2≡2+sqrt(4.0)*b++/2≡2+2.0*2/2≡2+4.0/2≡2+2.0≡4.0(-b+sqrt(b*b-4*a*c))/(2*a)

2.3運(yùn)算符與表達(dá)式2.3.3賦值運(yùn)算符與賦值表達(dá)式

變量

=表達(dá)式“=”是賦值運(yùn)算符,不同于等號(hào)(等號(hào)是==)。右結(jié)合inta,b;a=b=100;連續(xù)賦值,只有最后一步有效。例如:inta;a=100;a=200;賦值運(yùn)算符的優(yōu)先級(jí)較低(只高于逗號(hào)運(yùn)算符),因此一般情況下表達(dá)式無(wú)須加括號(hào)。例如:a=2+5/3相當(dāng)于:a=(2+5/3)賦值運(yùn)算可以構(gòu)成一個(gè)表達(dá)式,其值可以再賦給其他變量。例如:a=b=100;其實(shí)相當(dāng)于:a=(b=100);2.3運(yùn)算符與表達(dá)式復(fù)合賦值運(yùn)算符

+=、-=、*=、/=、%=、<<=、>>=、&=、^=和|=a+=100;等價(jià)于a=a+100;a*=b;等價(jià)于a=a*b;……簡(jiǎn)化程序,使程序精練;提高編譯效率,產(chǎn)生質(zhì)量較高的目標(biāo)代碼。2.3運(yùn)算符與表達(dá)式2.3.4逗號(hào)運(yùn)算符與逗號(hào)表達(dá)式(表達(dá)式1),(表達(dá)式2),(表達(dá)式3),…,(表達(dá)式n)表達(dá)式n的值就是整個(gè)逗號(hào)表達(dá)式的值。【例2-5】演示逗號(hào)表達(dá)式。#include<stdio.h>voidmain(){ inta; printf("1+2+3+4+5=%d\n",

(a=1,a=a+2,a=a+3,a=a+4,a=a+5)); printf("a=%d\n",a);}2.4數(shù)據(jù)類型轉(zhuǎn)換2.4.1類型轉(zhuǎn)換概述不同類型數(shù)據(jù)的存儲(chǔ)長(zhǎng)度和存儲(chǔ)方式不同,一般不能直接混合運(yùn)算。為了提高編程效率,增加應(yīng)用的靈活性,C語(yǔ)言允許不同數(shù)據(jù)類型相互轉(zhuǎn)換。不同數(shù)據(jù)類型的差異double比f(wàn)loat高級(jí)。實(shí)數(shù)比整數(shù)高級(jí)。整數(shù)中長(zhǎng)的比短的高級(jí),如:long>int>short>char無(wú)符號(hào)(unsigned)比有符號(hào)(signed)高級(jí)2.4數(shù)據(jù)類型轉(zhuǎn)換數(shù)據(jù)類型轉(zhuǎn)換產(chǎn)生的效果數(shù)據(jù)類型級(jí)別的提升與降低符號(hào)位擴(kuò)展與零擴(kuò)展截去高位產(chǎn)生數(shù)值的變化丟失精度實(shí)數(shù)轉(zhuǎn)換成整數(shù)時(shí),由于截去小數(shù)將丟失精度。double型轉(zhuǎn)換成float型時(shí),有效數(shù)字減少(四舍五入),精度丟失。long型轉(zhuǎn)換成float型時(shí),由原來可達(dá)10位整數(shù)變成只有7位有效數(shù)字,精度丟失,但由于數(shù)的范圍擴(kuò)大了,數(shù)據(jù)類型從較低級(jí)提升到較高級(jí)2.4數(shù)據(jù)類型轉(zhuǎn)換

自動(dòng)類型轉(zhuǎn)換float在運(yùn)算時(shí)自動(dòng)轉(zhuǎn)換成double。char和short在運(yùn)算時(shí)自動(dòng)轉(zhuǎn)換成int。int和unsigned混合運(yùn)算時(shí),將int轉(zhuǎn)換成unsigned數(shù)據(jù)。int或unsigned與long混合運(yùn)算時(shí),都轉(zhuǎn)換成long數(shù)據(jù)。int、unsigned、long與浮點(diǎn)型數(shù)據(jù)混合運(yùn)算時(shí),都轉(zhuǎn)換成double

自動(dòng)類型轉(zhuǎn)換規(guī)則2.4數(shù)據(jù)類型轉(zhuǎn)換2.4.3賦值類型轉(zhuǎn)換賦值運(yùn)算時(shí),如果賦值運(yùn)算符兩側(cè)的類型(指基本類型)不一致,系統(tǒng)自動(dòng)將表達(dá)式的值轉(zhuǎn)換成變量的類型存到變量的存儲(chǔ)單元中整型數(shù)據(jù)賦給實(shí)型變量時(shí),數(shù)值上不發(fā)生任何變化。如:floatf;f=100;實(shí)型數(shù)據(jù)賦給整型變量時(shí),小數(shù)部分將被舍棄。如:inta=3.1415;/*內(nèi)存中變量a的值為3*/短的有符號(hào)整型數(shù)據(jù)賦給長(zhǎng)整型變量時(shí),需要進(jìn)行符號(hào)位擴(kuò)展。短的無(wú)符號(hào)的整型數(shù)據(jù)賦給長(zhǎng)整型變量時(shí),需要進(jìn)行0擴(kuò)展。則i的值為-1。2.4數(shù)據(jù)類型轉(zhuǎn)換長(zhǎng)整型數(shù)據(jù)賦給短的整型變量時(shí),有可能溢出。如:charc=321;溢出后c的值為'A'。同長(zhǎng)度有符號(hào)整型數(shù)據(jù)賦給無(wú)符號(hào)整型變量時(shí),數(shù)據(jù)將失去符號(hào)位功能。如:unsigned

charc=-1;則c的值為255。同長(zhǎng)度無(wú)符號(hào)整型數(shù)據(jù)賦給有符號(hào)整型變量時(shí),數(shù)據(jù)將得到符號(hào)位功能。如對(duì)于16位int:inti=65535u;2.4數(shù)據(jù)類型轉(zhuǎn)換2.4.4強(qiáng)制類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換的格式為:(類型名)(表達(dá)式)強(qiáng)制類型轉(zhuǎn)換用于不能自動(dòng)轉(zhuǎn)換的情況。例如:(int)5.0%3 /*實(shí)型數(shù)據(jù)求余運(yùn)算*/(int)(f+0.5) /*第一位小數(shù)的四舍五入算法*/(int)(f*10+0.5)/10.0/*第二位小數(shù)的四舍五入算法*/【例2-6】演示強(qiáng)制類型轉(zhuǎn)換#include<stdio.h>voidmain(){ inti=5; floatf; f=3.1415926; printf("i=%d,f=%f\n",i,f); i=(int)f; printf("i=%d\n",i); f=5/3; printf("f=%f\n",f); f=(float)5/3; printf("f=%f\n",f); printf("f=%d\n",f);/*實(shí)數(shù)按整型數(shù)方式輸出*/ printf("i=%f\n",i);/*整型按實(shí)數(shù)方式輸出*/}2.5數(shù)據(jù)的溢出與誤差2.5.1數(shù)據(jù)的溢出如圖2-18,將大杯的水倒入小杯,有兩種可能性:小杯沒倒?jié)M或剛好滿,水沒有溢出小杯滿了,其余的水溢出charc=127;c=c+1;【例2-7】演示數(shù)據(jù)的溢出#include<stdio.h>voidmain(){ charc=127; longli=2147483647; unsigneduc; unsignedlonguli; printf("c=%d,li=%ld\n",c,li); c=c+1; li=li+1; printf("c=%d,li=%ld\n",c,li); c=127+100; li=2147483647+100; printf("c=%d,li=%ld\n",c,li); uc=127+100;uli=2147483647+100; printf("uc=%d,uli=%ld\n",uc,uli); printf("uc=%u,uli=%lu\n",uc,uli);}2.5數(shù)據(jù)的溢出與誤差2.5.2實(shí)型數(shù)據(jù)的誤差整數(shù)存儲(chǔ)除了溢出以外是沒有誤差的。實(shí)型數(shù)據(jù)由于是用有限的存儲(chǔ)單元存儲(chǔ)較大范圍的實(shí)型數(shù),有效數(shù)字是有尾數(shù)限制的,在實(shí)際計(jì)算和引用中會(huì)有很多問題?!纠?-8】演示實(shí)型數(shù)據(jù)的誤差#include<stdio.h>voidmain(){ floatx,y; x=1234567890000000000.0; y=x+0.12345; /*大數(shù)加上一個(gè)小數(shù),小數(shù)被忽略*/ printf("x=%f,y=%f\n",x,y); x=3.1415926; y=x-0.0001; /*小數(shù)的有效位加1有效*/ printf("x=%.3f,y=%.3f\n",x,y); y=x+0.0000005; /*小數(shù)的無(wú)效位加1也無(wú)效*/ printf("x=%.7f,y=%.7f\n",x,y);}2.6案例:一樣的'A',不一樣的輸出方式#include<stdio.h>#define CA 'A' /*定義一個(gè)符號(hào)常量CA*/voidmain(){charc='A';printf("%c",'A'); /*直接輸出字符'A'*/printf("%c",c); /*輸出變量c*/printf("%c",'\101'); /*八進(jìn)制轉(zhuǎn)義字符形式*/printf("%c",'\x41'); /*十六進(jìn)制轉(zhuǎn)義字符形式*/printf("%c",0101); /*八進(jìn)制整型數(shù)0101以字符形式輸出*/printf("%c",0x41); /*十六進(jìn)制整型數(shù)0x41以字符形式輸出*/printf("%c",0X41); /*十六進(jìn)制整型數(shù)0X41以字符形式輸出*/printf("%c",65); /*十進(jìn)制整型數(shù)65以字符形式輸出*/printf("%c",'a'-32); /*小寫字母'a'轉(zhuǎn)換成大寫字母后輸出*/printf("%c",CA); /*宏定義的符號(hào)常量CA按字符方式輸出*/printf("\n"); /*輸出換行符\n*/}2.8案例:時(shí)間的換算【例2-11】以秒作為單位輸入時(shí)間,計(jì)算其相當(dāng)于多少小時(shí)多少分鐘多少秒?#include<stdio.h>voidmain(){ longintTotalTime; intintHour,intMinute,intSecond; printf("PleaseinputintTotalTime:"); scanf("%d",&intTotalTime); intHour=intTotalTime/3600; intMinute=(intTotalTime-intHour*3600)/60; intSecond=intTotalTime-intHour*3600-intMinute*60; printf("HH:MM:SS=%02d:%02d:%02d

溫馨提示

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

評(píng)論

0/150

提交評(píng)論