第三章數(shù)據(jù)類型、運算符與表達式_第1頁
第三章數(shù)據(jù)類型、運算符與表達式_第2頁
第三章數(shù)據(jù)類型、運算符與表達式_第3頁
第三章數(shù)據(jù)類型、運算符與表達式_第4頁
第三章數(shù)據(jù)類型、運算符與表達式_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1數(shù)據(jù)類型、運算符與表達式C語言的數(shù)據(jù)類型常量與變量整型數(shù)據(jù)浮點型數(shù)據(jù)字符型數(shù)據(jù)變量賦初值各類數(shù)值型數(shù)據(jù)間的混合運算算術運算符和算術表達式賦值運算符和賦值表達式逗號運算符和逗號表達式2第三章數(shù)據(jù)類型、常量、變量、運算符與表達式程序=數(shù)據(jù)結構+算法C數(shù)據(jù)類型基本類型構造類型指針類型(第10章)整型字符型浮點型枚舉型單精度型雙精度型數(shù)組類型(第7章)結構體類型(第11章)共用體類型(第11章)空類型33.2常量與變量常量與符號常量在程序運行過程中,其值不能改變的量稱為常量。1.字面常量或直接常量 12、0、-3; 4.6、-1.23; ‘a(chǎn)’、“good”; 分別為整型常量、實型常量、字符型常量。2.符號常量4例3.1#definePRICE30 /*宏定義*/intmain(void){intnum,total;num=10;total=num*PRICE;printf(“total=%d”,total);Ave=sum/PRICE;}常量與符號常量5說明:(1)#define命令行定義PRICE代表30,此后凡在此文件中出現(xiàn)PRICE都代表30,可和常量一樣運算;(2)這種用標識符代表常量的稱為符號常量;(3)符號常量一旦賦值,在其作用域內(nèi)不能再改變;(4)習慣上符號常量用大寫;與之相對變量常用小寫。常量與符號常量好處:(1)含義清楚(2)需要改動時能做到“一改全改”6其值可以改變的量稱為變量。變量是有類型的。變量變量定義通式:類型標識符

變量名[,變量名];#include“stdio.h”intmain(void){

inta,b,sum;scanf(“%d”,&a);scanf(“%d”,&b);sum=a+b;printf(“%d+%d=%d”,a,b,sum);}7變量代表內(nèi)存中具有特定屬性的一個存儲單元,它用來存放數(shù)據(jù),也就是變量的值,在程序運行期間,這些值是可以改變的。變量由變量名、存儲單元、變量值組成。存儲單元由系統(tǒng)統(tǒng)一分配,大小依類型而定。3a變量名變量值存儲單元內(nèi)存用戶數(shù)據(jù)區(qū)ab200020022004369sum8

sum,average,class,day,month,student_name,_above,lotus_1_2_3,basic不合法標識符:標識符M.D.John,$123,#33,3D64,a>b合法標識符:變量、符號常量、函數(shù)、數(shù)組、類型等數(shù)據(jù)對象命名的有效字符序列稱為標識符(identifier)。標識符構成規(guī)則:

只能由字母、數(shù)字、下劃線組成。第一個字符必須是字母或下劃線,不能是數(shù)字。9作為變量名的標識符要求(1)C對大小寫敏感,即大小寫字母被認為是不同字符;(2)標識符長度有限,如一些系統(tǒng)最大為8個字符;(3)選擇標識符時應盡量做到見名知意,這是結構化程序設計的一個特征;也是良好的編程習慣。(4)關鍵字C語言中已有32個關鍵字(見附錄B),它們有專門含義,不能用做變量名或函數(shù)名、數(shù)組名等用戶標識符。查看identifier.c10C語言程序中,變量必須“先定義,后使用”每個變量被指定為一個確定類型,編譯時可據(jù)此為其分配相應的存儲空間,不同數(shù)據(jù)類型分配存儲空間大小不同。變量定義格式: 類型名變量名intstudent;student=10;...student10變量定義的意義:112)凡未被定義而使用的變量編譯時報錯,一定程度上保證運算中的變量名使用正確,及時發(fā)現(xiàn)手誤等問題。3)根據(jù)變量類型編譯時檢查所做運算是否合理intstudent;stadent=10;變量定義的意義a%b是求余運算,若a,b指定為實型變量則報錯。123.3整型數(shù)據(jù)整型常量的表示十進制整數(shù)如:123,-456八進制整數(shù)以0開頭的數(shù)如:0123,-011十六進制整數(shù)以0x開頭的數(shù)0x123,-0x1213整型數(shù)據(jù)所有數(shù)值、字符(數(shù)字、字母及控制字符)以及多媒體信息都是以二進制比特串形式保存(0110……)計算機中存儲的基本單元是位常用單位:字節(jié)(byte)1字節(jié)(byte)=8位(bit)1字節(jié)2字節(jié)4字節(jié)8字節(jié)字符整型實型Char——————Short————Longfloat————double14整數(shù)在內(nèi)存中是以二進制形式存放的……inti;i=10;……10i0000000000001010i二、數(shù)據(jù)在計算機中的存儲0000000000000000000000000000010102字節(jié)4字節(jié)15二、數(shù)據(jù)在計算機中的存儲……inti;i=-10;……-10i(a)1111111111110110i(b)實際存儲形式用補碼形式存儲正數(shù)補碼就是其二進制形式負數(shù)補碼1)絕對值的二進制形式2)按位取反3)+116用最高位表示數(shù)的符號:0——+1——-數(shù)值以補碼形式存放正數(shù)補碼:該數(shù)二進制形式負數(shù)補碼:該數(shù)絕對值二進制形式取反加10的補碼是010的補碼:0000000000001010-10的補碼:(1)將二進制形式取反1111111111110101(2)加1,得1111111111110110二、數(shù)據(jù)在計算機中的存儲1716bit單元存儲整數(shù)范圍:

-32768~327670000000000000000~01111111111111111000000000000000~11111111111111110~32767-32768~-1二、整數(shù)在計算機中的存儲18為了適應不同應用中不同的整數(shù)范圍,C中有

(1)基本整型,int 16bit(ANSI)/32bit(VC)(2)短整型,shortint(或short)16bit(ANSI)(3)長整型,longint(或long)32bit(ANSI)有無符號的前綴(1)無符號,unsigned(2)有符號(缺?。?,signed二、整數(shù)在計算機中的存儲190~4,294,967,29532bit(4byte)unsignedlong[int]-2,147,483,648~2,147,483,64732bit(4byte)[signed]long[int]0~6553516bit(2byte)unsignedshort[int]-32768~3276716bit(2byte)[signed]short[int]0~6553516bit(2byte)unsignedint-32768~3276716bit(2byte)[signed]int整數(shù)的詳細類型20說明:(1)[]括起來部分表示可選,選否不影響含義(2)帶符號數(shù)時,signed可?。?)短整型或長整型時int可?。?)int型的長度在不同C語言編譯環(huán)境中不確定,

但sizeof(short)<=sizeof(int)<=sizeof(long)是 確定的。(5)short,long類型的長度基本確定。二、整數(shù)在計算機中的存儲21#include<stdio.h>intmain(void){ printf("short:%dbytes\n",sizeof(short)); printf("int:%dbytes\n",sizeof(int)); printf("long:%dbytes\n",sizeof(long)); printf("char:%dbytes\n",sizeof(char)); printf("float:%dbytes\n",sizeof(float)); printf("double:%dbytes\n",sizeof(double)); getch();}檢查不同數(shù)據(jù)類型在計算機中的存儲的空間大小的程序查看Length_of_int.c22整型變量的定義方法:

整數(shù)類型名變量名inta;unsignedshortc,d;longe,f;23#include<stdio.h>intmain(void){ inta,b,c,d; unsignedintu; a=12; b=-24;u=10; c=a+u; d=b+u; printf("a+u=%d,b+u=%d\n",c,d);}運行結果:

a+u=22,b+u=-14整型變量的定義24整型數(shù)據(jù)的溢出P44例3.3在turbo

c中,整型變量為2字節(jié),最大為32767#include

<stdio.h>Main(){ inta,b; a=32767; b=a+1; printf(“%d,%d\n”,a,b);}查看identifier.c25整型常量的類型關于常數(shù)類型的幾點說明:P45263.4浮點型數(shù)據(jù)浮點型常量的表示方法1.十進制小數(shù)形式由數(shù)字和小數(shù)點組成;如:0.123,123.0,123.,.123,0.0。2.指數(shù)形式如:1.23×103表示如下:1.23E3或1.23e3;

整個實數(shù)分為兩部分:小數(shù)部分和指數(shù)部分注意:此種表示方法小數(shù)部分必須有數(shù),指數(shù)部分必須有數(shù)且為整數(shù)輸出按照規(guī)范化形式。27規(guī)范化的指數(shù)形式一個實數(shù)如1230.可以有多種指數(shù)表示形式,1230.e0,123.e1,12.3e2,1.23e3,0.123e4,0.0123e5,……其中,1.23e3是規(guī)范化的指數(shù)表示形式即規(guī)范化的指數(shù)形式小數(shù)部分必須是>=1且<10的小數(shù)如5689.65對應的規(guī)范指數(shù)形式為:5.68965e328實型數(shù)的存儲原理計算機內(nèi)實數(shù)都以其指數(shù)形式存儲。一個實數(shù)按指數(shù)形式來存儲:分小數(shù)和指數(shù)分別存儲如:

л可表示為

0.314159×100.314159E1計算機中存儲:10.314159+1具體各占多少位由編譯系統(tǒng)來定如一個字節(jié)存儲指數(shù),三個字節(jié)存儲尾數(shù)29浮點型變量的分類C中定義浮點型:

float單精度數(shù)double雙精度數(shù)

longdouble長雙精度類型比特數(shù)有效數(shù)字數(shù)值范圍float32(4字節(jié))6~7-3.4×10-38~3.4×1038double64(8字節(jié))15~16-1.7×10-308~1.7×10308longdouble128(16字節(jié))18~19-1.2×10-4932~1.2×10493230由于float的指數(shù)部分對應的指數(shù)范圍為-128~128,所以取值范圍為:-2^128到2^128,約等于-3.4E38—+3.4E38精度(有效數(shù)字)主要看尾數(shù)位:float的尾數(shù)位是23bit,對應7位十進制數(shù)類型比特數(shù)有效數(shù)字數(shù)值范圍float32(4字節(jié))6~7-3.4×10-38~3.4×103831浮點型變量及舍入誤差floata,b;a=123456.789e5;b=a+20;printf(“a=%f,b=%f”,a,b);輸出情況:a=12345678848.000000,b=12345678848.000000一個實型變量的存儲位數(shù)的有限性導致其表示數(shù)的有效數(shù)字數(shù)也是有限的,如float的有效數(shù)字只有7位。32浮點型常量的類型f=2.45678*4523.65系統(tǒng)將運算數(shù)作為雙精度數(shù)來進行存儲和運算。取結果的前7位賦給實型變量f。精度高,但速度慢;若想讓運算數(shù)作為單精度數(shù)來存儲和運算,可強制指定,方法是:在數(shù)后加字符F(或f)關于實型常量的一點說明:333.5字符型數(shù)據(jù)3.5.1字符常量‘a(chǎn)’,‘A’,‘x’,‘D’,‘!’,……字符:用單引號括起來的單個字符。34字符在計算機中的存儲C語言的字符型數(shù)據(jù)在計算機中以相應的ASCII(AmericanStandardCodeforInformationInterchange)代碼存放。ASCII碼表:P364附錄A35控制字符:如換行、回車等

C語言中用轉義字符表示轉義字符形式:以“\”開頭的字符序列。反斜杠如‘\n’代表換行。常用的以“\”開頭的特殊字符:轉義字符及其作用36字符形式含義ASCII代碼\n換行10\t制表符(TAB)9\b退格8\r回車13\f換頁12\\反斜杠92\’單引號39\”雙引號34\ddd1-3位8進制數(shù)所代表的字符\xhh1-2位16進制數(shù)所代表的字符轉義字符及其作用37三、C中對字符型的定義main(){printf(“abc\tde\rf\tg\n”);printf(“h\ti\b\bjk”);}demo305.c特殊字符的程序示例:P48例3.5

383.5.2字符型變量類型用關鍵字char標識字符[signed]char8(bit)-128~127unsignedchar8(bit)0~255printf(“char:%dbytes\n”,sizeof(char));39‘a(chǎn)’的ASCII碼為97,其在內(nèi)存中存儲形式為:…charc;c=‘a(chǎn)’;…‘a(chǎn)’c01100001c字符型變量定義40#include<stdio.h>intmain(void){charc1,c2;c1=‘a(chǎn)’;c2=‘b’;printf(“%c%c\n”,c1,c2);}輸出:

ab

標準的字符操作程序示例97c198c201100001c101100010c241因其在內(nèi)存中以二進制編碼形式存儲,因此在輸出時可與相應范圍內(nèi)整數(shù)相互轉換。ab9798#include<stdio.h>intmain(void){charc1,c2;c1=‘a(chǎn)’;c2=‘b’;printf(“%c%c\n”,c1,c2);printf(“%d%d”,c1,c2);}42#include<stdio.h>intmain(void){charc1,c2;c1=97;c2=98;printf(“%c%c\n”,c1,c2);printf(“%d%d”,c1,c2);}ab9798在輸入時可與相應范圍內(nèi)整數(shù)通用。查看demo306.c43#include<stdio.h>intmain(void){charc1,c2;c1=‘a(chǎn)’;c2=‘b’;c1=c1-32;c2=c2-32;printf(“%c%c”,c1,c2);}AB例3.7小寫字母轉大寫字母3.5.4字符串常量雙撇號”括起來的字符序列是字符串常量“Hello,World!\n”,“CHINA”,“a”,“1234”注意’a’和”a”是不同的。字符串的存儲44CHINA\0aa\0查看char_string.c45(1)C語言允許在定義變量的同時將變量初始化;如:

inta=3;charm,n=‘k’;(2)inta=b=c=3;

是不允許的;要寫成:inta=3,b=3,c=3;或者inta,b,c; a=b=c=3;3.6變量賦初值463.7各種數(shù)值型數(shù)據(jù)間的混合運算doublelongunsignedintfloatchar,short必定進行的轉化運算類型不同時的轉化方向允許不同類型間混合運算:字符,整數(shù),實數(shù)。但運算方法是:運算前先將運算數(shù)轉為同一類。示例i整型,f浮點型,d

double型,e

long型 10+’a’+i*f-d/e47查看int_unsignedint.c48

3.8算術運算符與算術表達式C運算符范圍很寬:除了控制語句和輸入輸出以外幾乎所有操作都作為運算符處理。C的運算符有以下幾類:49C運算符簡介1.算術運算符(+-*/%)2.關系運算符(><==>=<=!=)3.邏輯運算符(!&&||)4.位運算符(<<>>~|^&)5.賦值運算符(=及其擴展賦值運算)6.條件運算符(?:)7.逗號運算符(,)8.指針運算符(*和&)9.求字節(jié)數(shù)(sizeof())10.強制類型轉換運算符((類型))11.分量運算符(.->)12.下標運算符([])13.其他(如函數(shù)調(diào)用運算符())50算術運算符與算術表達式1.基本算術運算符+加法運算符(雙目)或正值運算符(單目)-減法運算符或負數(shù)運算符*乘法運算符/除法運算符%模運算符或求余運算符,只對整數(shù)進行運算(1)‘/‘運算符與傳統(tǒng)意義上除法不盡相同:若兩個運算數(shù)有一個是實數(shù)則結果也為實數(shù);但若兩個都是整數(shù)則結果一定為整數(shù)。如:5/3=1說明查看divide.c51算術表達式和算符的優(yōu)先級與結合性用算術運算符和括號將合法的運算對象連接起來的、符合C的語法規(guī)則的式子,稱為C算術表達式。說明:(1)運算對象可以是常量、變量、函數(shù)等。(2)C規(guī)定了運算符的優(yōu)先級和結合性。按優(yōu)先級別高低次序執(zhí)行。C中規(guī)定:*%/優(yōu)先級相同+-優(yōu)先級相同且*/%優(yōu)先級高于+-表達式:a-b*c123+456a+ba-b*ca-(b*c)優(yōu)先級:52若兩運算符優(yōu)先級別相同則按規(guī)定結合方向處理。

C規(guī)定:算術運算符的結合方向是:“自左至右”

即“先左后右”,又稱“左結合性”算術表達式結合性可能有兩種運算方法(a-b)+c或a-(b+c)按C左結合性的規(guī)定:

b應先左后右的方法結合即(a-b)+cC中某些運算符是規(guī)定為右結合性的。表達式a-b+cP378附錄D53強制類型轉換可以利用強制類型轉換運算符將一個表達式轉換成所需類型。(double)a(int)(x+y)(float)(5/3)注意(int)x+y54強制類型轉換運算符[例3.8]intmain(void){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}x=3.600000,i=3運行結果:查看divide.cpart255強制類型轉換運算符可以利用強制類型轉換運算符將一個表達式轉換成任意所需類型。(int)(x+y)(double)a(float)(5%3)一般形式:

(類型名)(表達式)|變量名說明:(1)強制類型轉換運算符優(yōu)先級較高,見附錄D(2)強制類型轉換時得到一個所需中間變量,原變量類型并未發(fā)生改變56自增、自減運算符++i,--ii++,i--在使用i之前先將i值加(或減)1并賦給i使用i之后再將i值加(或減)1并賦給ii=i+1寫做:i++或++ii=i-1寫做:i--或--i程序1:i=3;j=++i;程序2:i=3;j=i++;j=4i=4j=3i=457自增、自減運算符1.++和--只能用于變量,不能用于常量和表達式。只能用于左值,因其包含一賦值過程;5++

(x*y)++2.結合方向:右結合-i++相當于-(i++)例如inti=3;printf(“%d”,-i++);查看divide.cpart358表達式使用中的問題說明避免歧義產(chǎn)生inti=3;表達式(i++)+(i++)+(i++)值是多少?i的值是多少?i+++j(i++)+jori+(++j)?59inta;a=3;“=”即為賦值運算符a=3為賦值表達式3.9賦值運算符和賦值表達式賦值運算符將一個數(shù)據(jù)或表達式的值賦給一個變量。60原則是將右邊數(shù)據(jù)結果轉變成左邊變量類型P60賦值類型轉換當賦值運算符兩側類型不一致時系統(tǒng)自動進行類型轉換1.將實型數(shù)據(jù)賦給整型變量:截取整數(shù)部分2.將整型數(shù)據(jù)賦給單雙精度變量:增加精度3.將double數(shù)據(jù)賦給float變量:取前7位將float數(shù)據(jù)賦給double變量:擴展為16位4.字符型數(shù)據(jù)賦給整型變量:符號位擴展5.int,short,long型數(shù)據(jù)賦給char型變量:截斷6.int型數(shù)據(jù)賦給long型、long型賦給int型:符號位擴展7.unsigned型數(shù)據(jù)賦給signed型變量:數(shù)值不變,按照有符號數(shù)理解8.signed型數(shù)據(jù)賦給unsigned型變量:數(shù)值不變,按照無符號數(shù)理解不同類別的整型之間的賦值規(guī)則:將存儲單元的存儲形式直接傳送。達到的效果:值盡量不變化,但高級類型賦給低級類型時,會高位被截。61復合的賦值運算符a+=3x*=y+8x%=3等價于a=a+3等價于x=x*(y+8)等價于x=x%3復合賦值運算符:在賦值運算符前加上其他運算符形成的一個新運算符。(1)C規(guī)定了10種復合賦值運算符:+=,-=,*=,

溫馨提示

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

評論

0/150

提交評論