版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章
數(shù)據(jù)類型及其運(yùn)算C程序結(jié)構(gòu)基本數(shù)據(jù)類型、變量與常量賦值運(yùn)算符與賦值表達(dá)式算術(shù)運(yùn)算符與算術(shù)表達(dá)式逗號(hào)運(yùn)算與逗號(hào)表達(dá)式
運(yùn)算符的優(yōu)先級(jí)與結(jié)合性混合運(yùn)算時(shí)數(shù)據(jù)類型的轉(zhuǎn)換主要內(nèi)容C程序結(jié)構(gòu)例3-1從鍵盤輸入半徑,求圓的周長(zhǎng)和面積。算法思路:radius:存放從鍵盤輸入的半徑;
計(jì)算周長(zhǎng):perimeter=2*PI*radius;
計(jì)算面積:area=PI*radius*radius;輸出perimeter和area的值不確定性列公式#include<stdio.h>doublePI=3.14;intmain(){ intradius; doubleperimeter,area; printf("Inputaradius:"); scanf("%d",&radius); perimeter=2*PI*radius; area=PI*radius*radius; printf("Theperimeteris%.2f,Theareais %.2f\n",perimeter,area); return0;}聲明變量radius提示輸入輸入數(shù)據(jù)賦給radius計(jì)算周長(zhǎng)和面積輸出結(jié)果預(yù)處理命令全局變量聲明函數(shù)定義組成C源程序的三個(gè)要素(1)
預(yù)處理命令。C編譯程序?qū)υ闯绦蚓幾g前,先由預(yù)處理器對(duì)預(yù)處理命令進(jìn)行預(yù)處理。(2)全局聲明。包括全局變量聲明和函數(shù)原型聲明。(3)函數(shù)定義。一個(gè)C語言程序必須有一個(gè)main函數(shù)。函數(shù)由一組語句組成。比語句更小的語法單位:表達(dá)式、變量、常量和關(guān)鍵字等。#include<stdio.h>/*函數(shù)功能:計(jì)算兩個(gè)整數(shù)相加之和入口參數(shù):整型數(shù)據(jù)a和b
返回值:整型數(shù)a和b之和*/intAdd(inta,intb){ return(a+b);}intmain(){ intx,y,sum=0; printf("Inputtwointegers:"); scanf("%d%d",&x,&y); /*輸入兩個(gè)整型數(shù)x和y*/ sum=Add(x,y); /*調(diào)用函數(shù)Add計(jì)算x和y相加之和*/ printf("sum=%d\n",sum); /*輸出x和y相加之和*/ return0;}關(guān)鍵字(Keyword)又稱為保留字,C語言預(yù)定的具有固定含義的一些單詞例如:數(shù)據(jù)類型修飾符int,控制語句return等
autobreakcasecharcontinueconstdefaultdoubledo
elsefloatforifintlongNULLreturnswitchshort
signed
truethisunsignedvoidwhileC程序常見符號(hào)—關(guān)鍵字C程序常見符號(hào)大小寫的英文字母:A~Z,a~z數(shù)字字符:0~9特殊字符:
空格 ! % ^ & _(下劃線) + * = - ~<
> / \ ' " ; . , ()
[] {}C程序常見符號(hào)—標(biāo)識(shí)符標(biāo)識(shí)符(Identifier)分系統(tǒng)預(yù)定義標(biāo)識(shí)符和用戶自定義標(biāo)識(shí)符以字母和下劃線開始,大小寫敏感,最長(zhǎng)32個(gè)字符。以大寫字母、小寫字母、下劃線或數(shù)字0~9組成。直觀,見名知意,便于記憶和閱讀最好使用英文單詞或其組合,忌使用漢語拼音不宜混淆如1與l,o與0不允許使用關(guān)鍵字作為標(biāo)識(shí)符的名字int,float,for,while,if等例:判斷下列標(biāo)識(shí)符號(hào)合法性,并標(biāo)出不合法的標(biāo)示符。sum Sum M.D.John dayDate 3days student_name#33 lotus_1_2_3 chara>b _above $123M.D.John3days#33char$123a>bC程序常見符號(hào)—標(biāo)識(shí)符運(yùn)算符(Operator)34種,詳見附錄分隔符(Separator)空格、回車/換行、逗號(hào)等其它符號(hào)大花括號(hào)"{"和"}"
"/*"和"*/"、//是程序注釋所需的定界符數(shù)據(jù)(Data)變量(Variable)常量(Constant)C程序常見的其他符號(hào)數(shù)據(jù)類型、常量和變量數(shù)據(jù)為什么要區(qū)分類型?不同類型的數(shù)據(jù)代表不同的數(shù)據(jù)表示形式合法的取值范圍占用內(nèi)存空間大小可參與的運(yùn)算種類
數(shù)據(jù)類型基本類型構(gòu)造類型指針類型空類型整型實(shí)型(浮點(diǎn)型)字符型枚舉類型數(shù)組類型結(jié)構(gòu)體類型共用體類型單精度實(shí)型雙精度實(shí)型基本整型長(zhǎng)整型短整型無符號(hào)整型數(shù)據(jù)類型(DataType)衡量數(shù)據(jù)類型所占空間大小的單位常用的單位如下:b,B,KB,MB,GB,TB
bit,中文叫法:位Byte,中文叫法:字節(jié)Kilobyte(KB),中文叫法:KMegabyte(MB),中文叫法:兆Gigabyte(GB),中文叫法:GTerabyte(TB),中文叫法:T1TB==
1,024GB1GB==
1,024MB1MB==
1,024KB1KB
==
1,024B1B==
8b如何衡量數(shù)據(jù)類型所占空間大???一個(gè)位有多大?只能是"0"或者"1",這叫二進(jìn)制一個(gè)字節(jié)有多大?保存一個(gè)字符(英文字母、數(shù)字、符號(hào))ASCII(美國標(biāo)準(zhǔn)信息交換碼)編碼見附錄A,常用字符與ASCII碼對(duì)照表兩個(gè)字節(jié)保存一個(gè)漢字GB編碼可以表示0~255之間的整數(shù)基本數(shù)據(jù)類型表3-1C的基本數(shù)據(jù)類型(32位機(jī))整型(integer)整型:有符號(hào)整數(shù),允許取值為整數(shù)。如:123,567整型的分類:整型(int):占4個(gè)字節(jié)短整型(shortint):占2個(gè)字節(jié),通常簡(jiǎn)寫為short長(zhǎng)整型(longint):占4個(gè)字節(jié),通常簡(jiǎn)寫為long數(shù)據(jù)類型修飾符signed用來修飾char、int、short和long,說明他們是有符號(hào)的整數(shù)(正整數(shù)、0和負(fù)整數(shù))。有符號(hào)數(shù)在計(jì)算機(jī)內(nèi)以二進(jìn)制補(bǔ)碼形式存儲(chǔ)的,最高位表示符號(hào)位(0為正數(shù),1為負(fù)數(shù))。一般缺省都是有符號(hào)的,所以這個(gè)修飾符通常省略。shortint型:最大:32767最小:-32768數(shù)據(jù)類型修飾符unsigned用來修飾char、int、short和long,說明他們是無符號(hào)的整數(shù)(正整數(shù)和0)。無符號(hào)型在機(jī)內(nèi)只能存放正數(shù),最高位也來表示數(shù)值的。當(dāng)數(shù)據(jù)占用同樣內(nèi)存位數(shù)時(shí),無符號(hào)型數(shù)值范圍比有符號(hào)數(shù)擴(kuò)大一倍。數(shù)據(jù)類型修飾符unsigned
short
int型:最大:65535最小:0擴(kuò)充的整型類型有符號(hào)基本整型[signed]int;無符號(hào)基本整型
unsignedint;有符號(hào)短整型[signed]short[int];無符號(hào)短整型
unsignedshort[int];有符號(hào)長(zhǎng)整型[signed]long[int];無符號(hào)長(zhǎng)整型unsignedlong[int];二進(jìn)制存放與溢出(1)10=
(0000000000000001)2(-1)10=
(111111111111
1111)2(65535)10=
(11111111
11111111)2當(dāng)65535按unsignedshortint型理解時(shí),仍為65535;而當(dāng)按shortint型理解時(shí),被當(dāng)作-1的補(bǔ)碼。字符型(char)字符型char的取值為單個(gè)字符。例如:
'A'、'
'用ASCII編碼表示一個(gè)字符,每個(gè)字符占用1個(gè)字節(jié),總共可以表示256個(gè)不同的字符。char類型前可用signed和unsigned加以修飾。例如: signedcharch=-128;unsignedcharch=255;思考:unsignedchar范圍?浮點(diǎn)型(floatpoint)浮點(diǎn)類型:允許取值為帶小數(shù)的實(shí)數(shù)(如
123.46)雙精度浮點(diǎn)型double單精度浮點(diǎn)型float
double比float的精度更高(即小數(shù)的有效位數(shù)更多),表示數(shù)據(jù)的范圍也更大。常量常量(Constant)在程序執(zhí)行過程中其值不變的量。常量包括以下幾種:整型常量浮點(diǎn)常量字符常量字符串常量整型常量(short,int,long)整型常量18、-31longint型常量123l、123L、123456l、123456Lunsignedint型常量123u、123U整型常量的類型根據(jù)其值所在范圍確定其數(shù)據(jù)類型在整型常量后加字母l或L,認(rèn)為它是longint型常量例:12與12L整型常量的表示形式十進(jìn)制形式:[±]若干個(gè)0~9的數(shù)字
如:100,-50,0
八進(jìn)制形式:
[±]以0開頭的若干個(gè)0~7數(shù)字
如:0123
表示十進(jìn)制數(shù)83
-011
表示十進(jìn)制數(shù)-9。十六進(jìn)制形式
:[±]用0x或0X開頭的若干個(gè)0~9,a~f,A~F的數(shù)字
如:
0X2F
表示十進(jìn)制的數(shù)字47
0x123
表示十進(jìn)制數(shù)291
-0x12
表示十進(jìn)制數(shù)-18。整型常量的表示形式例:0524為int型,在內(nèi)存中是如何表示的?0101010000000001425例:01736L為longint型1101111000000011000000000000000063710000000000000000何謂類型溢出(Overflow)?C語言提供的任何類型都有取值范圍。當(dāng)向其賦超過此范圍的數(shù)值,就會(huì)產(chǎn)生數(shù)值溢出,得到一個(gè)不正確的結(jié)果。例如:shortint的范圍是-32768~32767如果超出取值范圍,給它一個(gè)小于-32768或者大于32767的數(shù)會(huì)如何呢?小蛇能吞下大象嗎?注意事項(xiàng)Example:看程序分析運(yùn)行結(jié)果#include<stdio.h>intmain(){ shortinta; printf("Input:"); scanf("%d",&a); printf("a=%d\n",a); return0;}
運(yùn)行結(jié)果:
Input:12345
a=12345Input:1234567
a=-10617
整型≠整數(shù)short
int的范圍:-32768~+32767Because:
12345的補(bǔ)碼是0011000000111001
1234567的補(bǔ)碼是100101101011010000111
截去多余部份(超過2個(gè)字節(jié)的左邊部分)后
其原碼為
1010100101111001(-10617)有趣的結(jié)果可用下圖表示:
327673276632765……-32766-32767-32768輸入(Input:)輸出(a=)327673276732768-3276832769-3276732770-32766-32768-32768-3276932767-3277032766類型溢出的解決方案?解決方案:預(yù)先估算運(yùn)算結(jié)果的可能范圍,采用取值范圍更大的類型。1+2+3+…1!+2!+3!+…13+23+33+…如果不需要處理負(fù)數(shù),則采用無符號(hào)類型。在運(yùn)算還沒開始之前就判斷運(yùn)算數(shù)是否在合理的取值范圍內(nèi)。如果超出,則停止運(yùn)算,轉(zhuǎn)錯(cuò)誤處理。浮點(diǎn)型常量
(float,double)浮點(diǎn)型常量:可以含有小數(shù)部分的數(shù)值常量。根據(jù)占用內(nèi)存長(zhǎng)度的不同,分為:?jiǎn)尉雀↑c(diǎn)常量:占用32位內(nèi)存,用F、f表示。
如:19.4F,3.0513E3f,8701.52f雙精度浮點(diǎn)常量:占用64位內(nèi)存,用帶D或d或不加后綴(缺省)的數(shù)值表示
如:2.433E-5D,700041.273d,3.1415。longdouble型常量123.45l、456.78L、4.5e3L
因?yàn)樽帜竘和數(shù)字1容易混淆,所以常使用大寫L做后綴。浮點(diǎn)型常量的兩種表示形式十進(jìn)制小數(shù)形式:包括符號(hào)"+"與"-",數(shù)字0~9以及小數(shù)點(diǎn)"."。如:0.123,1.23,123.0指數(shù)形式:包括符號(hào)"+"與"-",數(shù)字0~9,小數(shù)點(diǎn)"."以及e(或E)。如:0.123e3表示0.123×103
-35.4E-5表示-35.4×10-5其中e或E之前必須有數(shù)字,且e或E后面的指數(shù)必須為整數(shù)。如:e-5,
1.2E-3.5不正確浮點(diǎn)型常量
(float,double)
由于計(jì)算機(jī)系統(tǒng)分配給一個(gè)數(shù)據(jù)的存儲(chǔ)空間是有限的。一般來說,一個(gè)實(shí)型常量無法轉(zhuǎn)換成與之等值的有限位的二進(jìn)制數(shù)據(jù),其有限位以后的數(shù)字將被舍去,由此就會(huì)產(chǎn)生舍入誤差。例://下列程序的功能是將10個(gè)實(shí)型數(shù)0.1進(jìn)行累加,然后將累加結(jié)果輸出。#include<stdio.h>intmain(){ intk; /*定義整型變量k*/ doublex,z; /*定義雙精度整型變量x與z*/ z=1.0; /*實(shí)數(shù)1.0賦給變量z*/ x=0.0; for(k=0;k<10;k++) x=x+0.1; /*10個(gè)0.1累加到變量x中*/ printf("z=%20.17f\n",z); /*輸出變量z的值*/ printf("x=%20.17f\n",x); /*輸出變量x的值*/ return0;}運(yùn)行這個(gè)程序后,輸出的結(jié)果如下:
z=1.00000000000000000x=0.99999999999999989字符常量
(Character)用一對(duì)單引號(hào)括起的單個(gè)字符,其值為該字符的ASCII碼值。如:'A'—65,'\n'—10。注意:
'1'和整數(shù)1的區(qū)別字符'1'代表一個(gè)形狀為'1'的符號(hào),在需要時(shí)按原樣輸出,在內(nèi)存中以ASCII碼形式存儲(chǔ),占1個(gè)字節(jié)整數(shù)1是以整數(shù)存儲(chǔ)方式,占1個(gè)字節(jié)0011000100000001字符常量-轉(zhuǎn)義字符用"\"開頭的字符(例如,"\n",代表1個(gè)字符)表3-2常用轉(zhuǎn)義字符如:'\101'-----'A' '\012'-----'\n'
'\376'-----'
'
'\x61'-----'a'
'\60'-----'0'
'\483'-----例:'A'-----'\101'-----'\x41'-----65字符常量
(Character)(
)轉(zhuǎn)義字符舉例例1:閱讀程序,給出運(yùn)行結(jié)果intmain(){ printf("\101\x42C\n"); printf("\\CProgram\\\n"); printf("Turbo\'C\'"); return0;}運(yùn)行結(jié)果:(屏幕顯示)ABC\CProgram\Turbo'C'轉(zhuǎn)義字符舉例例2:閱讀程序,給出運(yùn)行結(jié)果intmain(){ printf("Y\b=\n"); return0;}運(yùn)行結(jié)果:屏幕顯示:=打印機(jī)輸出:¥例3:閱讀程序,給出運(yùn)行結(jié)果#include<stdio.h>intmain(){
//'\t',跳到下一個(gè)輸出區(qū)
printf("Howareyou?\t"); printf("Iamfine.\n\n"); printf("Howareyou?\n");
//退格符'\b',使當(dāng)前輸出位置退一格,即輸出的起始位置左移一位
printf("
_\bIamfine.\n\n");
//回車符'\r',使當(dāng)前輸出位置回到本行開頭
printf("Iamfine."); printf("\rHowareyou?\n\n");
//多個(gè)轉(zhuǎn)義字符的混合運(yùn)用
printf("note:\nas\ti\b\bk\rp\n"); return0;}Howareyou?____Iamfine._Howareyou?Iamfine.Howareyou?____Iamfine.
note:p_a_s__ki什么時(shí)候要使用轉(zhuǎn)義字符?C程序中需要實(shí)現(xiàn)某些特定打印或顯示動(dòng)作時(shí)
如
printf("123\t56\n");C程序中需要打印或顯示以下三個(gè)字符時(shí)
\
(斜杠)
"
(雙引號(hào))
'(單引號(hào))
如
printf("You'rea
\"abadegg!\"");C程序中需要打印或顯示ASCII表中非鍵盤字符時(shí)
如
printf("Look
\16
and
\x80!");注意:使用轉(zhuǎn)義字符時(shí),\后的八進(jìn)制或十六進(jìn)制數(shù)不應(yīng)大于char類型所允許的范圍(十進(jìn)制值256)。字符串常量(String)用雙引號(hào)括起的一串字符(可以0個(gè))"Iamastring"""表示空字符串引號(hào)只作為字符串開始和結(jié)束的標(biāo)志C語言內(nèi)部自動(dòng)用'\0'表示字符串的結(jié)束除注釋外,是唯一可以出現(xiàn)中文的地方"A"和'A'是不同的字符'A'65
01000001占1字節(jié)
65'\0'字符串"A"占2個(gè)字節(jié)枚舉(Enumeration)常量一個(gè)被遺忘的角色從程序來窺其一斑 enumweeks{MON,TUE,WED,THU,FRI,SAT,SUN};
enumweekstoday;
enum
response{no,yes,none};
enum
responseanswer;
today=TUE; answer=yes;
if(answer
==yes) printf("TodayisTuesday.\n");
else
printf("TodayisNOTTuesday.\n");宏常量(符號(hào)常量)一般用大寫字母表示#define
標(biāo)識(shí)符
字符串不是語句,而是一種編譯預(yù)處理命令#include<stdio.h>#definePI
3.14159#defineR
5.3intmain(){ printf("PI*R*R=%f\n",PI*R*R); printf("2*PI*R=%f\n",2*PI*R);
return0;}3.14159*5.3*5.32*3.14159*5.3const常量用const修飾定義的變量為常量聲明格式: const數(shù)據(jù)類型常量名=缺省值;注意:常量只能在定義時(shí)賦值,而在程序的中間不能改變其值。常數(shù)、const常量、宏常量和枚舉常量,都可以用來表示一個(gè)永遠(yuǎn)不會(huì)改變的數(shù)。前者不建議直接使用,而用后三者代替例如:constdoublePI=3.14159;floatr,area;area=PI*r*r;邏輯(布爾)型常量boolean在程序控制中經(jīng)常用到布爾常量。例如:
if(條件)動(dòng)作1else動(dòng)作2布爾常量的值:true(真)和false(假)。C語言中將布爾類型映射為數(shù)值類型:
true用非0的整數(shù)表示
false用0表示如:
3+1==4
結(jié)果為true,通常表示1。inta=2>3結(jié)果為false,通常表示0。
變量變量在程序執(zhí)行過程中其值可以改變的量,因此用來記錄運(yùn)算中間結(jié)果或保存數(shù)據(jù)。變量的聲明:
數(shù)據(jù)類型變量名1[,變量名2,…,變量名n];決定分配字節(jié)數(shù)和數(shù)的表示范圍合法標(biāo)識(shí)符short,int,long,float,double,char,unsigned
復(fù)合類型變量例:inta,b;doubledata;編譯時(shí),對(duì)變量聲明語句將根據(jù)其類型分配存儲(chǔ)空間。變量的名實(shí)際上對(duì)應(yīng)空間的地址,變量的值對(duì)應(yīng)空間的內(nèi)容。在對(duì)程序編譯連接時(shí)由編譯系統(tǒng)給每一個(gè)變量名分配對(duì)應(yīng)的內(nèi)存地址。從變量中取值,實(shí)際上是通過變量名找到相應(yīng)的內(nèi)存地址,從該存儲(chǔ)單元中讀取數(shù)據(jù)。a:(2000)b:(3000)data:(4000)4字節(jié)8字節(jié)4字節(jié)變量例如:
shorts;
//給s變量分配兩個(gè)字節(jié),占用2000-2001單元
s=1234;
圖3-1變量與內(nèi)存單元的映射關(guān)系變量的使用:先聲明,后使用例1:
intstudent; stadent=19;變量的使用例2:
floata,b,c; c=a%b;變量的聲明位置變量定義位置:一般放在函數(shù)開頭intmain(){ inta,b=2; floatdata; a=1; data=(a+b)*1.2; printf("data=%f\n",data); return0;}變量定義可執(zhí)行語句變量的初始化:聲明變量的同時(shí)指定變量初值格式:數(shù)據(jù)類型變量名=初始值;不被初始化的變量,其值為危險(xiǎn)的隨機(jī)數(shù)變量的初始化#include<stdio.h>intmain(){ charesc='a'; inti; doubleeps=1.0e-5; printf("esc=%c\ni=%d\neps=%lf",esc,i,eps); return0;}運(yùn)行結(jié)果:esc=ai=-858993460eps=0.000010例如:利用變量t交換變量x和y的值t=x;x=y;y=t;tyx變量的值主要通過賦值運(yùn)算改變。變量值的改變使用變量要注意不要對(duì)變量所占的內(nèi)存空間字節(jié)數(shù)想當(dāng)然用sizeof運(yùn)算符:返回操作數(shù)存儲(chǔ)空間的大小使用形式:sizeof(類型名)或
sizeof(變量名)結(jié)果為表達(dá)式值所屬類型或者類型占用的字節(jié)數(shù)sizeof運(yùn)算符也可以出現(xiàn)在表達(dá)式中。例如,x=sizeof(float)-2;
printf("%d",sizeof(double));注意!為什么要用sizeof獲得類型或變量的字長(zhǎng)?因?yàn)橥N類型在不同的平臺(tái)其占字節(jié)數(shù)不盡相同。比如int在16位、32位和64位系統(tǒng)分別占2、4和8個(gè)字節(jié)?,F(xiàn)象與危害:在平臺(tái)間移植時(shí)會(huì)出現(xiàn)問題,導(dǎo)致數(shù)據(jù)丟失或者溢出。解決方案:用,并且只用sizeof獲得字長(zhǎng)。變量的類型整型變量定義形式:
int變量表列;實(shí)型變量單精度定義形式:
float變量表列;具有6~7位有效數(shù)字雙精度定義形式:
double變量表列;具有15~16位有效數(shù)字閱讀程序,給出運(yùn)行結(jié)果#include<stdio.h>intmain(){ longx,y,z; x=-0xffffL;y=-0xffL;z=-0xffffffffL; printf("x=%6ldy=%6ldz=%6ld\n",x,y,z); x=-0xffff;y=-0xff;z=-0xffffffff; printf("x=%6ldy=%6ldz=%6ld\n",x,y,z); return0;}閱讀程序,給出運(yùn)行結(jié)果#include<stdio.h>intmain(){ shortintx; unsignedy; longz; x=65535; y=65535; z=65535; printf("x=%d\n",x); printf("y=%u\n",y); printf("z=%ld\n",z); return0;}它們?cè)谟?jì)算機(jī)中用二進(jìn)制表示如下:變量x1111111111111111變量y00000000000000001111111111111111變量z00000000000000001111111111111111%d為基本整型輸出格式說明符%u為無符號(hào)基本整型輸出格式說明符%ld為長(zhǎng)整型輸出格式說明符變量的類型字符型變量即可以存放字符型常量,也可以存放字符的ASCII碼定義方式:
char變量表列;字符變量char(ASCII碼值在0~255之間)與int數(shù)據(jù)間可進(jìn)行算術(shù)運(yùn)算例:a='D'; /*a=68;*/x='A'+5; /*x=65+5;*/s='!'+'G'; /*s=33+71;*/沒有字符串變量,用字符數(shù)組存放char型與int型之間的關(guān)系
//小寫字母轉(zhuǎn)換為大寫字母#include
<stdio.h>intmain(){
char
ch='b';
printf("%c,%d\n",ch,ch);
ch='b'-32;
printf("%c,%d\n",ch,ch); return0;}b,98B,66
ch='b'-('a'-'A');一個(gè)整型數(shù)據(jù)占4個(gè)字節(jié),而字符型數(shù)據(jù)只占1個(gè)字節(jié)(只能存放0-255范圍內(nèi)的整數(shù)),因此,在將整型數(shù)據(jù)以字符形式輸出時(shí),只取低字節(jié)中的數(shù)據(jù)作為ASCII碼字符輸出。#include
<stdio.h>intmain(){ intx; x=1348; printf("x=%c\n",x); return0;}運(yùn)行結(jié)果為:x=D1348在內(nèi)存中為:00000000010001000000010100000000實(shí)型數(shù)據(jù)在內(nèi)存中的存放形式實(shí)型數(shù)據(jù)在內(nèi)存中按數(shù)據(jù)的指數(shù)形式存儲(chǔ),一般分三個(gè)部分:1)數(shù)符(s):0代表正,1代表為負(fù)2)指數(shù)部分(e):存儲(chǔ)科學(xué)計(jì)數(shù)法中的指數(shù)數(shù)據(jù),并采用指數(shù)移位存儲(chǔ)。n位指數(shù)位能表示0-(2n-1),為了表示負(fù)指數(shù),采用減個(gè)偏移量,如減(2n-1-1)來實(shí)現(xiàn)負(fù)指數(shù)的表示。而存儲(chǔ)時(shí)則用實(shí)際指數(shù)值加偏移量如(2n-1-1)來存入指數(shù)部分,這就是指數(shù)移位存儲(chǔ)。3)小數(shù)部分(f):存放數(shù)據(jù)科學(xué)計(jì)數(shù)法中的小數(shù)數(shù)字部分。1)float遵從的是IEEER32.24—指數(shù)部分占8位,小數(shù)部分占23位2)double遵從的是R64.53—指數(shù)部分占11位,小數(shù)部分占52位實(shí)型數(shù)據(jù)在內(nèi)存中的存放形式注意:小數(shù)部分占的位(bit)數(shù)越多,數(shù)的有效數(shù)字越多,精度越高。指數(shù)部分占的位數(shù)越多,則能表示的數(shù)值范圍越大。將一個(gè)float型轉(zhuǎn)化為內(nèi)存存儲(chǔ)格式的步驟1)先將該實(shí)數(shù)的絕對(duì)值轉(zhuǎn)化為二進(jìn)制格式。
2)將這個(gè)二進(jìn)制格式實(shí)數(shù)的小數(shù)點(diǎn)左移或右移n位,直到小數(shù)點(diǎn)移動(dòng)到第一個(gè)有效數(shù)字的右邊。
3)從小數(shù)點(diǎn)右邊第一位開始數(shù)出23位數(shù)字放入第22位到第0位。
4)如果實(shí)數(shù)是正的,則在第31位放入"0",否則放入"1"。
5)指數(shù)部分第30到第23位的值為:
n+127(偏移量)對(duì)應(yīng)的二進(jìn)制代碼(如果n是左移得到的);或
127(偏移量)-n對(duì)應(yīng)的二進(jìn)制代碼(如果n是右移得到的)。
實(shí)型數(shù)據(jù)在內(nèi)存中的存放形式1)將第22位到第0位的二進(jìn)制數(shù)寫出來,在最左邊補(bǔ)一位"1",得到24位有效數(shù)字。將小數(shù)點(diǎn)點(diǎn)在最左邊那個(gè)"1"的右邊。
2)取出第30到第23位所表示的值n,并減去127(偏移量),即為指數(shù)。
3)將小數(shù)點(diǎn)左移n位(當(dāng)30位是"0"時(shí))或右移n位(當(dāng)30位是"1"時(shí)),得到一個(gè)二進(jìn)制表示的實(shí)數(shù)。
4)將這個(gè)二進(jìn)制實(shí)數(shù)化為十進(jìn)制,并根據(jù)第31位是"0"還是"1"加上正號(hào)或負(fù)號(hào)即可。將一個(gè)float型二進(jìn)制格式轉(zhuǎn)化為十進(jìn)制的步驟實(shí)型數(shù)據(jù)在內(nèi)存中的存放形式例:給出如下單精度存儲(chǔ)的內(nèi)存數(shù)據(jù)(32位):01000010111100010000000000000000,還原該單精度十進(jìn)制數(shù)據(jù)。首先將該數(shù)據(jù)分成三段(1位、8位、23位),在內(nèi)存中的存儲(chǔ)就為下圖所示:數(shù)值部分:1.1110001指數(shù)部分:133-127=6(1.1110001*26)2=(1111000.1)2=(120.5)10數(shù)值符號(hào)實(shí)型數(shù)據(jù)提供的有效數(shù)字位數(shù)//閱讀程序,給出運(yùn)行結(jié)果#include
<stdio.h>intmain(){
float
a;
double
b; a=33333.33333; b=33333.33333333333333;
printf("a=%f\nb=%f\n",a,b); return0;}由于實(shí)型變量是由有限的存儲(chǔ)單元組成的,因此能提供的有效數(shù)字總是有限的。如下例:#include<stdio.h>intmain(){ floata,b; a=123456.789e5; b=a+20; printf("a=%f\n",a); printf("b=%f\n",b); return0;}說明:從運(yùn)行結(jié)果看,誤差明顯。注意:1.0/3*3的結(jié)果并不精確等于1。自動(dòng)類型轉(zhuǎn)換同種數(shù)據(jù)類型的運(yùn)算結(jié)果,還是該類型不同種數(shù)據(jù)類型的運(yùn)算結(jié)果,是兩種類型中取值范圍更大的那種longdouble>double>float>long>int>short>chardoublelongunsignedintchar,short精度低精度高float說明:必定的轉(zhuǎn)換運(yùn)算對(duì)象類型不同時(shí)轉(zhuǎn)換自動(dòng)類型轉(zhuǎn)換
特別需要說明的是,在混合運(yùn)算過程中,系統(tǒng)所進(jìn)行的類型轉(zhuǎn)換并不改變?cè)瓟?shù)據(jù)的類型,只是在運(yùn)算過程中將其值變成同類型后再運(yùn)算。例charch;inti;floatf;doubled;ch/i+f*d-(f+i)intdoubledoubleintdoubledoubledoubledouble例:自動(dòng)類型轉(zhuǎn)換示例,給出運(yùn)行結(jié)果#include<stdio.h>intmain(){ floatx,y; shortm; longn; x=3/2+8/3; y=3.0/2+8/3.0; m=1*2*3*4*5*6*7*8*9; n=1l*2*3*4*5*6*7*8*9; printf("x=%f,y=%f\nm=%d,n=%ld\n",x,y,m,n); return0;}運(yùn)行結(jié)果:x=3.000000,y=4.166667m=-30336,n=362880自動(dòng)類型轉(zhuǎn)換把數(shù)據(jù)賦值給另外一種類型變量會(huì)發(fā)生自動(dòng)類型轉(zhuǎn)換將取值范圍小的類型轉(zhuǎn)為取值范圍大的類型是安全的反之是不安全的如果大類型的值在小類型能容納的范圍之內(nèi),則平安無事但是,浮點(diǎn)數(shù)轉(zhuǎn)為整數(shù),會(huì)丟失小數(shù)部分,非四舍五入反之,轉(zhuǎn)換后的結(jié)果必然是錯(cuò)誤的,具體結(jié)果與機(jī)器和實(shí)現(xiàn)方式有關(guān)。避免如此使用,好的編譯器會(huì)發(fā)出警告。賦值運(yùn)算符與賦值表達(dá)式簡(jiǎn)單賦值運(yùn)算符符號(hào):=格式:變量標(biāo)識(shí)符=表達(dá)式作用:將一個(gè)數(shù)據(jù)(常量或表達(dá)式)賦給一個(gè)變量例a=3;d=func();c=d+2;賦值運(yùn)算符與賦值表達(dá)式復(fù)合賦值運(yùn)算符符號(hào):+=-=*=/=%=<<=>>=&=^=|=含義:exp1op=exp2
exp1=exp1opexp2n=n+2;n+=2;x*=y+8;x=x*
(y+8);x%=3;x=x%
3;賦值運(yùn)算符與賦值表達(dá)式說明:結(jié)合方向:自右向左左側(cè)必須是變量,不能是常量或表達(dá)式賦值轉(zhuǎn)換規(guī)則使賦值號(hào)右邊表達(dá)式值自動(dòng)轉(zhuǎn)換成其左邊變量的類型例
3=x-2*y;a+b=3;例floatf;inti;i=10;f=i;則
f=10.0例inti;i=2.56;/*結(jié)果i=2;*/賦值運(yùn)算符與賦值表達(dá)式賦值表達(dá)式的值與變量值相等,且可嵌套。a=b=c=5a=5+(c=6)a=(b=10)/(c=2)/*表達(dá)式值為5,a,b,c值為5*//*表達(dá)式值11,c=6,a=11*//*表達(dá)式值5,a=5,b=10,c=2*/a=12;a+=a-=a*a/*a=-264等價(jià)于a=a+(a=a-(a*a))*/inta=2;a%=4-1;a+=a*=a-=a*=3;/*a=0等價(jià)于a=a+(a=a*(a=a-(a=a*3)))*/例:閱讀程序,寫出結(jié)果并演算#include<stdio.h>intmain(){ inta=10,b=10; printf("%d\t",a+=a-=a*a); printf("%d",b+=b-=b*=b); return0;}舉一反三:計(jì)算a=3時(shí),a*=4+(a%=2)的結(jié)果。a=5a=-180b=0賦值運(yùn)算符與賦值表達(dá)式算術(shù)運(yùn)算符與算術(shù)表達(dá)式表達(dá)式:由運(yùn)算符、操作數(shù)(常量、變量、函數(shù)調(diào)用)和圓括號(hào)組成的式子。表達(dá)式的書寫形式:中綴式:a+b后綴式:ab+前綴式:+ab例如:inta=1;intb=3;intc=0;c=(-a*b+c+67)*56;算術(shù)運(yùn)算符與算術(shù)表達(dá)式算術(shù)運(yùn)算符:+-*/%++--加、減、乘、除、求余運(yùn)算自加自減四則混合運(yùn)算中,先算乘除,后算加減,按從左向右的順序計(jì)算,左結(jié)合優(yōu)先級(jí):
-++--
---->*/%
----->
+-(2)(3)(4)常用的標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)算術(shù)運(yùn)算符與算術(shù)表達(dá)式說明:"-"可為單目運(yùn)算符時(shí),右結(jié)合性C語言規(guī)定,兩整數(shù)相除,結(jié)果為整數(shù)%要求兩側(cè)均為整型數(shù)據(jù)例:5/2 =-5/2.0=例
5%2=-5%2=1%10=5%1=5.5%2=2-2.51-110()算術(shù)運(yùn)算符與算術(shù)表達(dá)式算術(shù)表達(dá)式指用算術(shù)運(yùn)算符將運(yùn)算對(duì)象連接起來的式子對(duì)于算術(shù)表達(dá)式要注意以下幾個(gè)問題:1)注意表達(dá)式中各種運(yùn)算符的運(yùn)算順序,必要時(shí)應(yīng)加括號(hào),例如,(a+b)/(c+d)≠a+b/c+d。2)注意表達(dá)式中各運(yùn)算對(duì)象的數(shù)據(jù)類型,特別是整型相除。例如,
7/6的值為1;4/7的值為0;
(1/2)+(1/2)的值為0,而不是1。增一和減一運(yùn)算符n++(后綴),n--,(前綴)++n,--n++讓參與運(yùn)算的變量加1,--讓參與運(yùn)算的變量減1作為后綴運(yùn)算符時(shí),先取n的值,然后加/減1作為前綴運(yùn)算符時(shí),先加/減1,然后取n的值n=n++;n=n;n++;增一和減一運(yùn)算符n++,n--,++n,--n++讓參與運(yùn)算的變量加1,--讓參與運(yùn)算的變量減1作為后綴運(yùn)算符時(shí),先取n的值,然后加/減1作為前綴運(yùn)算符時(shí),先加/減1,然后取n的值m=++n;n++;m=n;增一和減一運(yùn)算符例
i=3;printf("%d",-i++);printf("%d",i);++--不能用于常量和表達(dá)式,如5++,(a+b)++++--結(jié)合方向:
自右向左-(i++)注意-34例inti=3;printf("%d,%d",-i++,i);-3,3說明printf函數(shù)的輸出項(xiàng)掃描順序是自右向左的。//閱讀程序,給出運(yùn)行結(jié)果#include<stdio.h>intmain(){ inta=1,b=1; printf("++a=%d,b++=%d\n",++a,b++); printf("a=%d,b=%d\n",a,b); printf("--a=%d,b--=%d\n",--a,b--); printf("a=%d,b=%d\n",a,b); return0;}運(yùn)行結(jié)果:++a=2,b++=1a=2,b=2--a=1,b--=2a=1,b=1逗號(hào)運(yùn)算與逗號(hào)表達(dá)式分隔符一個(gè)變量說明語句可以同時(shí)定義多個(gè)相同類型的變量,這些變量之間就用逗號(hào)來分隔。如:intx,y,z;函數(shù)參數(shù)表中各參數(shù)之間也是用逗號(hào)來分隔的。printf("x=%d\ny=%d\nz=%",x,y,z);運(yùn)算符順序求值運(yùn)算符結(jié)合性從左向右逗號(hào)運(yùn)算與逗號(hào)表達(dá)式逗號(hào)表達(dá)式的格式:表達(dá)式1,表達(dá)式2,…,表達(dá)式n求解次序:按從左到右的順序分別計(jì)算各子表達(dá)式的值逗號(hào)表達(dá)式的值:等于表達(dá)式n的值多數(shù)情況下,并不使用整個(gè)逗號(hào)表達(dá)式的值,更常見的情況是要分別得到各表達(dá)式的值主要用在循環(huán)語句中,同時(shí)對(duì)多個(gè)變量賦初值等
for(i=1,j=10;i<j;i++,j--)循環(huán)起始條件循環(huán)結(jié)束條件循環(huán)增量例:閱讀程序,給出運(yùn)行結(jié)果#include<stdio.h>intmain(){ intx,y=7; floatz=4; x=(y=y+6,y/z); printf("x=%d\n",x); return0;}運(yùn)行結(jié)果:x=3逗號(hào)運(yùn)算與逗號(hào)表達(dá)式閱讀程序,給出運(yùn)行結(jié)果intmain(){ inta=3,b=4,c=1,max,t; if(a>b,a>c)max=a; elsemax=0; t=(a+3,b+1,++c); printf("max=%d,t=%d\n",max,t); return0;}運(yùn)行結(jié)果:max=3,t=2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- FZT 54133-2020無銻滌綸預(yù)取向絲(POY)標(biāo)準(zhǔn)深度與行業(yè)前瞻研究報(bào)告
- 《GBT 14492-2008一次性使用電石包裝鋼桶》專題研究報(bào)告
- 《GB 4706.33-2008家用和類似用途電器的安全 商用電深油炸鍋的特殊要求》專題研究報(bào)告
- 道路安全教育培訓(xùn)課內(nèi)容課件
- 道路危險(xiǎn)品運(yùn)輸安全培訓(xùn)課件
- 2026年魯教版八年級(jí)數(shù)學(xué)上冊(cè)期末試卷含答案
- 道德的介紹教學(xué)課件
- 2026年廣東省茂名市高職單招語文試題及答案
- 迪奧dior介紹教學(xué)課件
- 新高一化學(xué)暑假銜接(人教版):第17講 元素周期律【教師版】
- 教師三筆字培訓(xùn)課件
- 少年宮乒乓球活動(dòng)記錄文本
- 各品牌挖掘機(jī)挖斗連接尺寸數(shù)據(jù)
- 2021-2022學(xué)年云南省曲靖市部編版六年級(jí)上冊(cè)期末考試語文試卷(原卷版)
- 參會(huì)人員名單(模板)
- 飛機(jī)大戰(zhàn)游戲設(shè)計(jì)與實(shí)現(xiàn)
- 數(shù)學(xué)課如何提高課堂教學(xué)容量
- 監(jiān)理規(guī)劃畢業(yè)設(shè)計(jì)(論文)
- 京港澳高速公路段改擴(kuò)建工程施工保通方案(總方案)
- 醫(yī)用設(shè)備EMC培訓(xùn)資料課件
- RoHS培訓(xùn)資料課件
評(píng)論
0/150
提交評(píng)論