




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第2章C語言程序設(shè)計基礎(chǔ)
本章主要內(nèi)容2.1程序設(shè)計的引入2.2算法與流程圖2.3標識符、常量與變量2.4基本數(shù)據(jù)類型2.5運算符與表達式2.6類型轉(zhuǎn)換2.7常用庫函數(shù)2.8程序設(shè)計基礎(chǔ)應(yīng)用舉例問題1:已知三角形的邊長,如何求它的面積?問題2:如何求一元二次方程的實根?2.1程序設(shè)計的引入
1.
計算機的工作過程存儲程序控制——馮·諾依曼原理。
分析問題→編寫程序并保存到計算機→執(zhí)行程序→計算機按程序要求自動工作。2.1程序設(shè)計的引入
2.
程序設(shè)計過程
對于復(fù)雜程度較高的問題,必須從問題描述入手,經(jīng)過對解題算法的分析、設(shè)計直至程序的編寫、調(diào)試和運行等一系列過程,最終得到能夠解決問題的計算機應(yīng)用程序,此過程稱為程序設(shè)計。
2.1程序設(shè)計的引入程序設(shè)計過程(1)問題分析(2)算法設(shè)計(3)程序設(shè)計(4)編輯、編譯與連接(5)運行與調(diào)試(6)編寫程序文檔
3.程序設(shè)計思想
程序設(shè)計思想就是用某種語言編寫程序的思考方式和步驟,是程序設(shè)計的靈魂。(1)結(jié)構(gòu)化程序設(shè)計思想:以C語言為代表;(2)面向?qū)ο蟮某绦蛟O(shè)計思想:JAVA,C++語言;
(3)事件驅(qū)動的程序設(shè)計思想:代表語言有VisualBasic;
(4)邏輯式對象程序設(shè)計思想:代表語言Prolog、LISP。
2.1程序設(shè)計的引入2.2.1
算法的概念及特性1.算法的概念算法是一組(有限個)規(guī)則,它為某個特定問題提供了解決問題的運算序列。
算法—為解決某個問題而采取的方法和步驟。2.兩大類計算機算法
數(shù)值運算算法(求數(shù)值解、成熟)
非數(shù)值運算算法(事務(wù)管理、廣泛)2.2算法與流程圖【引例】有黑和藍兩個墨水瓶,但卻錯把黑墨水裝在了藍墨水瓶子里,而藍墨水錯裝在了黑墨水瓶子里,要求將其互換。算法分析:這是一個非數(shù)值運算問題。因為兩個瓶子的墨水不能直接交換,所以,解決這一問題的關(guān)鍵是需要引入第三個墨水瓶。設(shè)第三個墨水瓶為白色,其交換步驟如下:2.2算法與流程圖白瓶黑瓶藍瓶①將黑瓶中的藍墨水裝入白瓶中;②將藍瓶中的黑墨水裝入黑瓶中;③將白瓶中的藍墨水裝入藍瓶中。①②③2.2算法與流程圖方法2:100+(1+99)+(2+98)+…+(49+51)+50=100+49×100+50加51次
對同一個問題,可有不同的解題方法和步驟?!纠?.1】求1+2+3+…+100的算法。方法1:1+2,+3,+4,一直加到100加99次方法3:直接用高斯公式2.2算法與流程圖算法是程序設(shè)計的靈魂。對數(shù)據(jù)的描述:數(shù)據(jù)結(jié)構(gòu)(datastructure)對操作和行為的描述:算法(algorithm)著名計算機科學家沃思提出一個公式:
數(shù)據(jù)結(jié)構(gòu)+算法=程序
算法+數(shù)據(jù)結(jié)構(gòu)+程序設(shè)計方法+語言工具完整的程序設(shè)計:描述數(shù)據(jù)的類型、組織形式描述對數(shù)據(jù)的操作步驟2.2算法與流程圖計算機解題的核心是算法設(shè)計。3.算法的特性(1)確定性:算法的每一步是確切定義且無二義性。(2)有窮性:一個算法必須在執(zhí)行有限次運算后結(jié)束。(3)可行性:算法中的每一個步驟都能有效執(zhí)行,并且得到確定的結(jié)果。(4)有零個或多個輸入:在執(zhí)行算法時需要從外界取得必要的信息。(5)有一個或多個輸出:算法的目的是為了求解問題,無任何輸出的算法是沒有意義的。2.2算法與流程圖常用算法介紹遞推法——逐步推導(dǎo)的過程(倒推和順推)。順推法——從邊界條件出發(fā),根據(jù)遞推關(guān)系式推出后項,由后項值按遞推關(guān)系式推出再后項值,依此類推,直到求解。如:菲波拉契數(shù)列。倒推法——已知解或目標,根據(jù)遞推關(guān)系,采用倒推手段,一步步倒推直至求得這個問題的初始值方法。如:猴子吃桃。遞歸法——一個對象部分地由它自己組成,或者自己定義自己。如:漢諾塔,階乘問題枚舉法——從可能的解集中一一列舉各元素,用題目給定的檢驗條件判定哪些能使命題成立。分治法——也稱二分法,縮小規(guī)模,分成N個。如:歸并排序。模擬法——有些問題很難建立枚舉、遞歸等模型,也建立不了數(shù)學模型,但可以根據(jù)問題的描述,用程序進行模擬,從而跟蹤結(jié)果。如約瑟夫問題,猴子選大王。貪心法——若在求解一個問題時,能根據(jù)每次所得到的局部最優(yōu)解,推導(dǎo)出全局最優(yōu)或最優(yōu)目標。如:背包問題。常用算法介紹2.2.2算法描述可以用不同的方法表示算法,常用的方法有:自然語言傳統(tǒng)流程圖結(jié)構(gòu)化流程圖偽代碼2.2算法與流程圖2.2.2算法描述1.自然語言
自然語言就是人們?nèi)粘J褂玫恼Z言,可以是漢語或英語或其它語言。
自然語言易懂卻不直觀,不嚴格。2.2算法與流程圖2.2.2算法描述2.流程圖用特定的圖形符號來描述算法。用圖形表示算法,直觀形象,易于理解。起止框輸入輸出框處理框判斷框流程線連接點虛線2.2算法與流程圖【例2.2】求1+2+3+……+100的算法流程圖開始s=0,i=1s=s+ii=i+1i>100輸出s結(jié)束Ny3.N-S結(jié)構(gòu)化流程圖N-S圖,也稱盒圖:完全去掉了帶箭頭的流程線,算法的所有處理步驟都寫在一個大矩形框中。2.2算法與流程圖N-S圖表示簡單,符合結(jié)構(gòu)化思想。3.N-S結(jié)構(gòu)化流程圖計算1+2+3+……+100的算法用N-S圖表示。s=0i=1s=s+ii=i+1當i>100輸出s2.2算法與流程圖4.偽代碼
偽代碼是介于程序代碼和自然語言之間的一種算法描述方法,書寫時比較緊湊、自由,也比較好理解,方便轉(zhuǎn)化為程序。2.2算法與流程圖開始
置s的初值為0
置i的初值為1
當i<=100,執(zhí)行下面操作:使s=s+i
使i=i+1
{循環(huán)體到此結(jié)束}輸出s的值結(jié)束也可以寫成以下形式:
BEGIN{算法開始}
0
s1
iwhilei≤100{s+1
si+1
i}printsEND{算法結(jié)束}計算1+2+3+……+100的算法用偽代碼表示思考和引申1.s=1+2+3+……+1002.s=1+3+5+……+993.4.結(jié)構(gòu)化程序設(shè)計以模塊化設(shè)計為中心,規(guī)定了三種基本結(jié)構(gòu):順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。AB2.2.3結(jié)構(gòu)化程序設(shè)計(1)順序結(jié)構(gòu):按語句先后順序依次執(zhí)行。(2)
選擇結(jié)構(gòu):程序執(zhí)行時,根據(jù)不同的條件執(zhí)行不同分支中的語句。ABYpNAYpN2.2.3結(jié)構(gòu)化程序設(shè)計(3)循環(huán)結(jié)構(gòu):在給定條件下,重復(fù)執(zhí)行多次。分為當型循環(huán)和直到型循環(huán)。①當型循環(huán)結(jié)構(gòu)AYp1NAp2NY2.2.3結(jié)構(gòu)化程序設(shè)計4.結(jié)構(gòu)化程序設(shè)計原則采取以下方法保證得到結(jié)構(gòu)化的程序:(1)自頂向下;(2)逐步細化;(3)模塊化;(4)結(jié)構(gòu)化編碼;(5)避免使用goto語句。2.2.3結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)化程序設(shè)計的過程(1)確定算法:分析問題(建立數(shù)學模型,
選擇公式),寫出算法描述。(2)編寫程序:用計算機語言寫出實現(xiàn)算法的程序。(3)上機調(diào)試:輸入(編輯)程序編譯→
編譯、連接、執(zhí)行程序→輸出結(jié)果。2.3.1標識符:用戶根據(jù)需要定義的符號
C語言規(guī)定標識符只能由字母、數(shù)字和下劃線3種字符組成,且第一個字符必須為字母或下劃線合法的標識符:如sum,average,_total,Class,day,BASIC,li_ling不合法的標識符:M.D.John,¥123,3D64,a>b大小寫字母是不同的字符標識符的長度因系統(tǒng)而異。不能將關(guān)鍵字作為標識符2.3標識符、常量與變量C語言中,標識符可分為3類:即關(guān)鍵字、預(yù)定義標識符和用戶自定義標識符。關(guān)鍵字關(guān)鍵字,又稱保留字,是編程語言預(yù)定義的具有專門用途的一些名字,不允許作為用戶程序的標識符使用。
預(yù)定義標識符預(yù)定義標識符是指C語言提供的庫函數(shù)名和預(yù)編譯處理命令等。用戶自定義標識符在編程時,要給一些變量、函數(shù)、數(shù)組、文件等命名,這類由用戶根據(jù)需要自己定義的標識符稱為用戶自定義標識符。標識符的分類注意:見名知義、對齊與縮排、注釋稱為良好的源程序書寫風格的“三大原則”。程序設(shè)計設(shè)計風格2.3.2常量1.常量:在程序運行過程中,其值不能被改變的量,分為直接常量和字符常量。整型常量:不帶小數(shù)點的整常數(shù)。如1000,12345,0,-345實型常量:由0~9數(shù)字和小數(shù)點組成。十進制小數(shù)形式:如0.34-56.790.00.指數(shù)形式:如12.34e3(代表12.34
103)注意:e/E之前必須有數(shù)字,后面的指數(shù)必須為整數(shù),且不能省略,如:
1e0e/E的前后不能有空格如:E3.5e3.6.e3e都是不合法的。八進制開頭必須是數(shù)字“0”如:016,十六進制用“0x”或“0X”開頭,如:0x10,0Xde1.以下選項中正確的整型常量是()A)12B)-20C)1,000D)4562.以下選項中正確的實型常量是()A)0B)3.14C)0.329*122(上標)D).8713.以下選項中不正確的實型常量是()A)2.707E-1B)0.8103E2C)-77.77D)456e-2思考與討論2.3.2常量字符常量:由一對單引號括起來的單個字符,轉(zhuǎn)義字符是一種特例。如:’a’
、’\n’字符串常量:由一對雙引號括起來的字符序列。如:"boy"符號常量:用標識符表示一個直接常量,先定義后使用。#definePI3.1416
2.3.3變量2.變量:在程序運行過程中其值可以改變的量。它用標識符(變量名)來表示,在內(nèi)存中占據(jù)一定的存儲單元。變量的定義方法:
類型符標識符如:inta3;floatx;必須有一個名字作為標識,且符合標識符的命名規(guī)則。2.3.3變量定義變量時指定該變量的名字和類型變量名和變量值是兩個不同的概念變量名實際上是以一個名字代表的一個存儲地址習慣上,符號常量名用大寫,變量名用小寫,以示區(qū)別
從變量中取值,實際上是通過變量名找到相應(yīng)的內(nèi)存地址,從該存儲單元中讀取數(shù)據(jù)。
數(shù)據(jù)類型變量1[,變量2,…,變量n];變量初始化:定義時賦初值例:inta,b,c;floatdata;決定分配字節(jié)數(shù)和數(shù)的表示范圍例:inta=2,b,c=4;floatdata=3.67;charch=’A’;intx=1,y=1,z=1;
intx=y=z=1;變量的使用:先定義,后使用變量定義位置:一般放在函數(shù)開頭,可執(zhí)行語句之前變量的定義
變量初始化的一般格式:[存儲類型]數(shù)據(jù)類型
變量名1[=初值1],變量名2[=初值2],…;例如:floatr=3.5,l=3,area;//該語句定義了r,l,area三個實型變量,同時初始化了變量r,l。charc1,c2;//定義2個字符型變量c1,c2變量的初始化2.4基本數(shù)據(jù)類型程序處理的對象是數(shù)據(jù)。所謂類型,就是對數(shù)據(jù)分配存儲單元的安排,包括存儲單元的長度(占多少字節(jié))以及數(shù)據(jù)的存儲形式不同的類型分配不同的長度和存儲形式C語言的數(shù)據(jù)類型
數(shù)據(jù)是操作的對象,數(shù)據(jù)類型是指數(shù)據(jù)的內(nèi)在表現(xiàn)形式(代碼、存儲、運算)。數(shù)據(jù)類型構(gòu)造類型指針類型(*)空類型(無值類型)void枚舉類型enum數(shù)組類型結(jié)構(gòu)類型struct共用體類型
union基本類型整型int字符型char實型(浮點型)單精度實型
float雙精度實型
double基本數(shù)據(jù)類型類型符號關(guān)鍵字數(shù)的表示范圍所占位數(shù)整型字符型實型有無(signed)int16-32768~32767(signed)short16-32768~32767(signed)long32-2147483648~214748364716unsigned
int0~65535320~4294967295unsigned
longunsigned
short160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127無unsignedchar80~255說明:數(shù)據(jù)類型所占字節(jié)數(shù)隨機器硬件不同而不同,上表以IBMPC機為例。注意:可以使用sizeof(數(shù)據(jù)類型),由系統(tǒng)顯示其占用字節(jié)數(shù)。
比如:sizeof(int),在VC++環(huán)境中結(jié)果為4,而在TC環(huán)境中結(jié)果為2。C語言的數(shù)據(jù)類型(2)長度: 長整型(后綴L): 23L o23L -ox123L
無后綴L時根據(jù)大小決定(3)符號位: 無符號整型(后綴U): 23U 256U 0xFFU
無后綴U的整數(shù)都是有符號的2.4.1整型數(shù)據(jù)1.整型常量(1)數(shù)制: 十進制: 23 0 -123
八進制(前綴0): 023 0 -0123
十六進制(前綴0x): 0x23 0x0 -0x123(1)整型變量的分類整型(int)
短整型(shortint或short)
長整型(longint或long)
無符號整型(unsigned)2.整型變量2.4.1整型數(shù)據(jù)VC++與TC中整型數(shù)據(jù)的字節(jié)數(shù)及取值范圍某種數(shù)據(jù)類型所占內(nèi)存的字節(jié)數(shù)隨計算機系統(tǒng)不同而有差異。2.4.1整型數(shù)據(jù)(2)整型數(shù)據(jù)在內(nèi)存中的存放形式整數(shù)在存儲單元中以整數(shù)的二進制補碼形式存放一個正數(shù)的補碼是其本身。求負數(shù)補碼的方法是:先將此數(shù)的絕對值寫成二進制形式,然后對其后面所有各二進位按位取反,再加1。2.整型變量注意:整數(shù)在計算機內(nèi)是以補碼表示的:正數(shù)的補碼和原碼相同;負數(shù)的補碼:將該數(shù)的絕對值的二進制形式按位取反再加1。2.4.1整型數(shù)據(jù)1.實型常量:分為單精度型(float)和雙精度型(double)兩種
小數(shù)形式:0.123345.0-34..6790.00.
注意:小數(shù)形式實型常量必須有小數(shù)點,小數(shù)點不能省略
指數(shù)形式:1.4E-3 -45e7 1e0 0e0
①字母e或E之前必須要有數(shù)字;
②字母e或E之后的指數(shù)必須為整數(shù);
③在字母e或E的前后及數(shù)字之間不能插入空格精度:單精度(后綴F):6-7位有效數(shù)字,如:0.1000000000012F雙精度:15-16位有效數(shù)字,如:0.1000000000012345無后綴實數(shù)的精度缺省為雙精度。2.4.2實型數(shù)據(jù)2.實型變量單精度(float型):如floatx,y;雙精度(double型):如doublea,b,c;長雙精度(longdouble型)(1)實型數(shù)據(jù)在內(nèi)存中的存放形式實型數(shù)據(jù)一般占4個字節(jié)(32位)內(nèi)存空間,按指數(shù)形式存儲。(2)實型變量的分類關(guān)鍵字字節(jié)數(shù)取值范圍精度(有效位)float43.4E-38~3.4E+386~7double81.7E-308~1.7E+30815~16longdouble103.4E-4932~1.1E+493218~192.4.2實型數(shù)據(jù)2.4.3字符型數(shù)據(jù)字符類型的數(shù)據(jù)簡稱字符數(shù)據(jù),用char表示,占一個字節(jié)(8個二進制位)內(nèi)存。1.字符常量定義:用單引號括起來的單個普通字符。
如:’A’——65,’a’——97
’0’——48,’\n’——10
’\101’----’A’字符常量的值:該字符的ASCII碼值。如:'a'、'A'2.轉(zhuǎn)義字符:反斜線后面跟一個字符或一個代碼值表示。2.4.3字符型數(shù)據(jù)轉(zhuǎn)義字符轉(zhuǎn)義字符的意義ASCII代碼\n換行10\t橫向跳到下一制表位置9\b退格8\r回車13\f走紙換頁12\\反斜線符"\"92\'單引號符39\''雙引號符34\a響鈴7\0字符串結(jié)束符0\dddddd為八進制形式的ASCII值\xhhhh位為十六進制形式的ASCII值【例2.3】轉(zhuǎn)義字符舉例main(){printf("\101\x42C\n");printf("Isay:\"Howareyou?\"\n");printf("\\CProgram\\\n");printf("Turbo\'C\'");}運行結(jié)果:(屏幕顯示)ABCIsay:”Howareyou?”\CProgram\Turbo'C'2.4.3字符型數(shù)據(jù)字符變量用來存放字符,且只能存放一個字符。例如:charc1,c2;unsignedcharc3,c4;字符型變量的賦值方法:
c1='a';c2='\101';c3=53;c4='\n';3.字符變量4.字符數(shù)據(jù)在內(nèi)存中的存儲形式及使用方法2.4.3字符型數(shù)據(jù)
字符'1'和整數(shù)1是不同的概念:字符'1'只是代表一個形狀為'1'的符號,在需要時按原樣輸出,在內(nèi)存中以ASCII碼形式存儲,占1個字節(jié)整數(shù)1是以整數(shù)存儲方式(二進制補碼方式)存儲的,占2個或4個字節(jié)00110001
00000000000000012.4.3字符型數(shù)據(jù)3.字符常量與字符串常量不同1.字符串常量定義:用雙引號(")括起來的字符序列。hello\0例:字符串"hello"
在內(nèi)存中a
a\0例:'a'"a"例:空串""\0例:charch;ch=“A”;2.字符串的存儲每個字符串尾自動加一個'\0'作為字符串結(jié)束標志。定界符不同長度不同存儲要求不同2.4.4字符串常量
2.4.5符號常量用一個標識符代表的一個常量,稱為符號常量。定義方法:#define標識符常量【例2.4】
#definePRICE30//大寫,沒有分號,沒有等于voidmain(){ intnum,total;num=10; //10是常量 total=num*PRICE;//PRICE是符號常量 printf("total=%d",total);}注意:
(1)命名時見名知意,符合命名規(guī)則
(2)不占內(nèi)存,只是一個臨時符號,不能在程序過程中重新賦值,為了和變量區(qū)分,通常用大寫字母來表示符號常量2.4.6空值
值集為空的類型,稱為空值型,用void表示。void類型用于描述函數(shù)沒有返回值、函數(shù)沒有參數(shù)及無類型指針。
2.4.5符號常量2.5運算符和表達式名
稱功
能符
號算術(shù)運算符用于各類數(shù)值運算+-*/%++--關(guān)系運算符用于比較運算><==>=<=!=邏輯運算符用于邏輯運算&&||!賦值運算符用于賦值運算=+=-=*=/=%=<<=>>=&=^=|=條件運算符三目運算符?:位操作運算符按二進制位進行運算&|~^<<>>逗號運算符
,求字節(jié)數(shù)運算符
sizeof指針運算符
*&特殊運算符
()[].->1.基本的算術(shù)運算符+:正號運算符(單目運算符)-:負號運算符(單目運算符)*:乘法運算符(乘號不能省略)/:除法運算符(兩個整數(shù)相除結(jié)果為整數(shù))%:求余運算符(左右操作數(shù)需為整數(shù))+:加法運算符-:減法運算符2.5.1算術(shù)運算符和表達式兩個整數(shù)相除的結(jié)果為整數(shù),兩個實數(shù)相除結(jié)果是雙精度。如:5/3的結(jié)果值為1,舍去小數(shù)部分。如果除數(shù)或被除數(shù)中有一個為負值,舍入方向不固定。如:-5/3,有的系統(tǒng)中得到的結(jié)果為-1,在有的系統(tǒng)中則得到結(jié)果為-2。VC++采取“向零取整”的方法
如:5/3=1,-5/3=-1,取整后向零靠攏。%運算符要求參加運算的運算對象(即操作數(shù))為整數(shù),結(jié)果也是整數(shù)。如:8%3,結(jié)果為2。算術(shù)運算說明2.自增、自減運算符(++、--):使變量值加1或減1種類:前置++i,--i(先執(zhí)行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再執(zhí)行i+1或i-1)說明:++--不能用于常量和表達式,如5++,(a+b)++++--結(jié)合方向:優(yōu)先級:--++-------->*/%----->+-
(1)(2)(3)例:-i++i=3;printf("%d",-i++);//-3
例:j=3;k=5
j+++k;j++)+k;例:
inta,b,c; a=2; b=2; c=a++; printf("a=%d,c=%d\n",a,c); c=++b; printf("b=%d,c=%d\n",b,c);2.5.1算術(shù)運算符和表達式例:
j=3;k=++j;j=3;k=j++;j=3;printf("%d",++j);j=3;printf("%d",j++);a=3;b=5;c=(++a)*b;a=3;b=5;c=(a++)*b;
//k=4,j=4//k=3,j=4//4//3//c=20,a=4//c=15,a=4#include<stdio.h>main(){ inta,b; a=1; b=-a++; printf("%d%d\n",a,b);}//b=-(a++);//2-13.算術(shù)表達式和運算符的優(yōu)先級與結(jié)合性(1)算術(shù)表達式
算術(shù)表達式是用算術(shù)運算符和括號將運算對象(也稱操作數(shù))連接起來的、符合C語言語法規(guī)則的式子。例如:a+b、(a*2)/c、(x+r)*8-(a+b)/7、++i、sin(x)+sin(y)等均為合法的算術(shù)表達式。(2)算術(shù)運算符的優(yōu)先級與結(jié)合性運算符說
明優(yōu)先級()圓括號
高
低-、++、--單目運算符,取負、自加、自減*、/、%雙目運算符,乘、除、取余+、-雙目運算符,加、減2.5.1算術(shù)運算符和表達式隱式轉(zhuǎn)換什么情況下發(fā)生賦值轉(zhuǎn)換------把一個值賦給與其類型不同的變量時運算轉(zhuǎn)換------不同類型數(shù)據(jù)混合運算時輸出轉(zhuǎn)換------輸出時轉(zhuǎn)換成指定的輸出格式函數(shù)調(diào)用轉(zhuǎn)換------實參與形參類型不一致時轉(zhuǎn)換運算轉(zhuǎn)換規(guī)則:不同類型數(shù)據(jù)運算時先自動轉(zhuǎn)換成同一類型2.5.1算術(shù)運算符和表達式顯式轉(zhuǎn)換(強制轉(zhuǎn)換)一般形式:(類型名)(表達式)例(int)(x+y)(int)x+y(double)(3/2)(int)3.6說明:強制轉(zhuǎn)換得到所需類型的中間變量,原變量類型不變例main(){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}結(jié)果:x=3.600000,i=3精度損失問題較高類型向較低類型轉(zhuǎn)換時可能發(fā)生
【例2.6】
給定一個大寫字母,要求用小寫字母輸出。解題思路:關(guān)鍵是找到大、小寫字母間的內(nèi)在聯(lián)系同一個字母,用小寫表示的字符的ASCII代碼比用大寫表示的字符的ASCII代碼大322.5.1算術(shù)運算符和表達式#include<stdio.h>voidmain(){charc1,c2;c1='A';c2=c1+32;printf("%c\n",c2);printf("%d\n",c2);}//將字符'A'的ASCII代碼65放到c1中//將65+32的結(jié)果放到c2中//用字符形式輸出//用十進制形式輸出2.5.1算術(shù)運算符和表達式2.5.2關(guān)系運算符和表達式1.關(guān)系運算符及優(yōu)先級6種關(guān)系運算符:<、<、>、>=、==(等于)、!=(不等于)優(yōu)先次序:前4種關(guān)系運算符(<,<=,>,>=)的優(yōu)先級別相同,后兩種(==,!=)也相同。前4種運算符的優(yōu)先級高于后2種。例:c>a-b等價于c>(a-b)a>b==c等價于
(a>b)==ca==b<c等價于
a==(b<c)優(yōu)先級別:算術(shù)運算符、關(guān)系運算符、賦值運算符、逗號運算符高
低如:c>a+bc>(a+b)a==b<ca==(b<c)注意:區(qū)分“=”與“==”a=b<ca=(b<c)2.5.2關(guān)系運算符和表達式2.關(guān)系表達式用關(guān)系運算符將兩個表達式(可以是算術(shù)表達式或關(guān)系表達式,邏輯表達式,賦值表達式,字符表達式)接起來的式子,稱關(guān)系表達式。例:a>b,a+b>b+c,(a=3)>(b=5),’a’<’b’,(a>b)>(b<c)關(guān)系表達式的值是一個邏輯值,即“真”或“假”。例:關(guān)系表達式“a>b”的值為“真”,表達式的值為1。
C語言中沒有專用的邏輯值,1代表真,0代表假2.5.2關(guān)系運算符和表達式2.5.3邏輯運算符和表達式1.邏輯運算符及其優(yōu)先次序邏輯運算符名
稱使用規(guī)則邏輯表達式表達式的值!邏輯非單目運算符!a與a的真假相反&&邏輯與雙目運算符a&&ba和b有假結(jié)果為假|(zhì)|邏輯或雙目運算符a||ba和b有真結(jié)果為真!(邏輯非)→算術(shù)運算符→關(guān)系運算符→&&(邏輯與)→||(邏輯或)→賦值運算符高低1.邏輯運算符及其優(yōu)先次序(1)&&(邏輯與)(2)||(邏輯或)(3)!(邏輯非)例:a&&b若a,b為真,則a&&b為真。
a||b若a,b之一為真,則a||b為真。!a若a為真,則!a為假。優(yōu)先次序:!(非)
&&(與)
||(或)邏輯運算符中的“&&”和“||”低于關(guān)系運算符,“!”高于算術(shù)運算符
!(非)高算術(shù)運算符關(guān)系運算符&&(與)||(或)
賦值運算符低2.5.3邏輯運算符和表達式2.邏輯表達式用邏輯運算符將關(guān)系表達式或邏輯量連接起來的式子就是邏輯表達式。邏輯表達式的值應(yīng)該是一個邏輯量“真”或“假”。例:設(shè)a=4,b=5:!a的值為0a&&b的值為1a||b的值為1!a||b的值為14&&0||2的值為1任何非零的數(shù)值被認作為“真”2.5.3邏輯運算符和表達式例:5>3&&8<4-!0
自左向右運算
1&&0邏輯值為08<3邏輯值為04-1值為3!0邏輯值為15>3邏輯值為1表達式值為02.5.3邏輯運算符和表達式
在邏輯表達式的求解中,并不是所有的邏輯運算符都要被執(zhí)行。短路現(xiàn)象(1)a&&b&&c只有a為真時,才需要判斷b的值,只有a和b都為真時,才需要判斷c的值。(2)a||b||c只要a為真,就不必判斷b和c的值,
只有a為假時,才判斷b,a和b都為假才判斷c例:(m=a>b)&&(n=c>d)當a=1,b=2,c=3,d=4,m和n的原值為1時,由于“a>b”的值為0,因此m=0,而“n=c>d”不被執(zhí)行,因此n的值不是0而仍保持原值1。2.5.3邏輯運算符和表達式2.5.4賦值運算符和表達式1.簡單賦值運算符賦值符號“=”就是賦值運算符,它的作用是將一個表達式的值賦給一個變量。賦值運算符的一般形式為:變量=表達式
例如:inta=3;
c=a*a+b*b;注意:被賦值的變量必須是單個變量,且必須在賦值運算符的左邊。2.不同類型賦值轉(zhuǎn)換表達式值的類型與被賦值變量的類型不一致,但都是數(shù)值型或字符型時,系統(tǒng)會自動將右邊表達式的值轉(zhuǎn)換成左邊被賦值變量的數(shù)據(jù)類型,然后再賦值給左邊變量。(截斷和按符號擴展)(1)實型賦予整型,舍去小數(shù)部分。(2)整型賦予實型,數(shù)值不變,但將以浮點形式存放,即增加小數(shù)部分(小數(shù)部分的值為0)。(3)字符型賦予整型,由于字符型為1個字節(jié),而整型為2個字節(jié),故將字符的ASCII碼值放到整型量的低八位中,高八位為0。整型賦予字符型,只把低八位賦予字符量。1.條件運算符條件運算符由兩個符號組成(?和:一起使用)。要求有3個操作對象,稱為三目運算符。(C語言中唯一的三目運算符)2.條件表達式的一般形式:表達式1?表達式2∶表達式3功能:先判斷表達式1的值,如果成立就執(zhí)行表達式2,
否則就執(zhí)行表達式3使用場合:
若在if語句中,當被判別的表達式的值為“真”或“假”時,都執(zhí)行一個賦值語句且向同一個變量賦值時,可以用一個條件運算符來處理。
2.5.5條件運算符和表達式(1)條件運算符的執(zhí)行順序:先求解表達式1,若為非0(真)則求解表達式2,此時表達式2的值就作為整個條件表達式的值。若表達式1的值為0(假),則求解表達式3,表達式3的值就是整個條件表達式的值。
(2)條件運算符優(yōu)先級高于賦值運算符,低于關(guān)系運算符和算術(shù)運算符。
(3)條件運算符的結(jié)合方向為“自右至左”。
(4)“表達式2”和“表達式3”不僅可以是數(shù)值表達式,還可以是賦值表達式或函數(shù)表達式。(5)條件表達式中,表達式1的類型可以與表達式2和表達式3的類型不同。
2.5.5條件運算符和表達式例:
if(a>b)max=a;
elsemax=b;當a>b時將a的值賦給max,當a≤b時將b的值賦給max,可以看到無論a>b是否滿足,都是向同一個變量賦值??梢杂孟旅娴臈l件運算符來處理:
max=(a>b)?a∶b;條件運算符條件表達式2.5.5條件運算符和表達式
2.5.6逗號運算符和表達式1.逗號運算符:又稱“順序求值運算符”。
逗號表達式的一般形式:<表達式1,表達式2>[,……,表達式n]2.逗號運算符的求值過程按從左到右的順序依次求出各個表達式的值,并把最后一個表達式n的值作為整個逗號表達式的值。3.逗號運算符的優(yōu)先級與結(jié)合性逗號運算符的結(jié)合性是自左向右,其優(yōu)先級在所有運算符中是最低的。例如:x=(a=3,a*3,a+6);x=(a=3,3*3);inta=3,b=4,x,y;x=a+b,y=b*2+x,x+y;2.5.6逗號運算符和表達式2.5.7求字節(jié)運算符C語言的sizeof是一個單目運算符,sizeof運算符的作用是用于測試數(shù)據(jù)類型所占的字節(jié)數(shù)。其一般格式為:
格式1:sizeof(變量)或sizeof變量
格式2:sizeof(常量)或sizeof常量
格式3:sizeof(表達式)或sizeof表達式
格式4:sizeof(數(shù)據(jù)類型關(guān)鍵字)例如:shortinta=234,x,y,z,m;x=sizeof(a);
//將變量a所分配的內(nèi)存字節(jié)數(shù)2賦給xy=sizeof(int);//在VC環(huán)境中y=4,而在TC環(huán)境中y=2z=sizeof(double);
//把double所需的字節(jié)長度8賦給zm=sizeof("abcd");//把字符串所占內(nèi)存空間5賦給m,字符串結(jié)束標志也占用1個字節(jié)2.5.7求字節(jié)運算符2.5.8運算符的優(yōu)先級和結(jié)合性在C語言中,運算符的運算優(yōu)先級共分為15級,1級最高,15級最低。當一個表達式中有多個運算符時,優(yōu)先級較高的先于優(yōu)先級較低的進行運算。同一優(yōu)先級的運算符,運算次序由結(jié)合方向決定。運算符的結(jié)合性分為左結(jié)合性(自左向右)和右結(jié)合性(自右向左)兩種。一般情況下,單目運算符的優(yōu)先級較高,賦值運算符優(yōu)先級較低;算術(shù)運算符優(yōu)先級較高,關(guān)系和邏輯運算符優(yōu)先級較低;所有運算符中逗號運算符的優(yōu)先級最低。多數(shù)運算符具有左結(jié)合性。單目運算符、條件運算符、賦值運算符等具有右結(jié)合性。C語言運算符的優(yōu)先級與結(jié)合性詳見附錄B.2。2.6類型轉(zhuǎn)換
變量的數(shù)據(jù)類型是可以轉(zhuǎn)換的。轉(zhuǎn)換的方法有兩種,一種是隱式轉(zhuǎn)換(自動進行),一種是強制轉(zhuǎn)換。2.6.1隱式類型轉(zhuǎn)換隱式類型轉(zhuǎn)換的規(guī)則:(1)若參與運算量的類型不同,則先轉(zhuǎn)換成同一類型,然后進行運算。(2)轉(zhuǎn)換按數(shù)據(jù)長度增加的方向進行,以保證精度不降低。
(3)所有的浮點運算都是以雙精度進行的,即使僅含float單精度量運算的表達式,也要先轉(zhuǎn)換成double型,再作運算。(4)char型和short型參與運算時,必須先轉(zhuǎn)換成int型。(5)在賦值運算中,賦值號兩邊量的數(shù)據(jù)類型不同時,賦值號右邊量的類型將轉(zhuǎn)換為左邊量的類型。如果右邊量的數(shù)據(jù)類型長度比左邊長時,將丟失一部分數(shù)據(jù),這樣會降低精度,丟失的部分按四舍五入向前舍入?!纠?.7】閱讀分析數(shù)據(jù)類型轉(zhuǎn)換。#include<stdio.h>voidmain(){floatp=3.14159;ints,r=5;s=r*r*PI;printf("s=%d\n",s);}思考:若要使得程序的運算結(jié)果正確,應(yīng)如何修改程序?2.6.2強制類型轉(zhuǎn)換強制類型轉(zhuǎn)換是通過類型轉(zhuǎn)換運算來實現(xiàn)的,其一般形式為:(類型說明符)(表達式)其功能是把表達式的運算結(jié)果強制轉(zhuǎn)換成類型說明符所表示的類型。例如:(float)a//把a轉(zhuǎn)換為實型(int)(x+y)//把x+y的結(jié)果轉(zhuǎn)換為整型2.7常用庫函數(shù)C語言提供了豐富的庫函數(shù),分為數(shù)學函數(shù)、字符函數(shù)、字符串函數(shù)、輸入輸出函數(shù)、動態(tài)分配存儲函數(shù)等幾大類。每一個函數(shù)都包含在一個后綴為.h的文件中(也稱頭文件),在程序中要使用系統(tǒng)提供的庫函數(shù),需要在程序的開頭加上包含預(yù)處理命令。其格式如下:#include"頭文件名"
或#include<頭文件名>常用數(shù)學函數(shù)數(shù)學函數(shù)大都包含在math.h頭文件中,在使用之前,在程序開頭加上:#include<math.h>函數(shù)名功能sqrt(x)求x的平方根,x≥0log(x)log10(x)求自然對數(shù)(以e為底的對數(shù)),x>0求以10為底的對數(shù),x>0exp(x)求以e為底的冪值,即求exabs(x)求整數(shù)x的絕對值fabs(x)求實數(shù)x的絕對值pow(x,y)冪函數(shù),求xy的值srand(seed)初始化隨機數(shù)生成器,不同的seed,不同的隨機整數(shù)rand()隨機函數(shù),產(chǎn)生一個在(0,32767)的隨機整數(shù)sin(x)求x的正弦值,x單位是弧度cos(x)求x的余弦值,x單位是弧度tan(x)求x的正切值,x單位是弧度常用數(shù)學函數(shù)數(shù)學函數(shù)函數(shù)含義示例結(jié)果abs返回整數(shù)的絕對值abs(6)6fabs返回實數(shù)的絕對值fabs(-3.2)3.2函數(shù)含義示例結(jié)果exp返回e的指定次冪exp(1)2.718281828pow(x,y)冪函數(shù),求xy的值pow(2,3)8log(x)求自然對數(shù)log(e2)2sqrt(x)求平方根sqrt(64)8srand(seed),初始化隨機數(shù)生成器,不同的seed種子,產(chǎn)生不同的隨機整數(shù),在使用中有時希望每次都得到不同的序列,那么就可以使用srand隨機數(shù)種子生成器語句,使用在rand函數(shù)之前,這樣可以使得rand函數(shù)產(chǎn)生的隨機數(shù)為不同的序列。如:srand(100);y=rand();函數(shù)含義示例結(jié)果rnd()返回0-32767的隨機數(shù)rnd()%100rnd()%9+10-99之間的隨機數(shù)1-9之間的隨機數(shù)數(shù)學函數(shù)
字符函數(shù)(頭文件ctype.h)函數(shù)含義示例結(jié)果isalnum(ch)測試參數(shù)ch是否為字母或數(shù)字isalnum('3'),isalnum('A')真真假isalpha(ch)測試參數(shù)ch是否為字母isalpha('3')isalpha('A')假真isdigit(ch)測試參數(shù)ch是否為數(shù)字isdigit('8')isdigit('*')真假islower(ch)測試參數(shù)ch是否為小寫字母islower('b')isupper(ch)測試參數(shù)ch是否為大寫字母isupper('B')isspace(ch)測試參數(shù)ch是否為空格isspace('')字符串函數(shù)(頭文件string.h)函數(shù)含義strcat(s1,s2)字符串連接函數(shù),把字符串s2復(fù)制連接到字符串s1后面strchr(str,ch)查找字符函數(shù),查找字符串str中某個給定字符(ch中的值)第一次出現(xiàn)的位置strcmp(s1,s2)字符比較函數(shù),把字符串s1與另一個字符串s2進行比較。當兩個字符串相等時,函數(shù)返回0;s1<s2返回負值;s1>s2返回正值。strcpy(s1,s2)字符復(fù)制函數(shù),把s2字符串復(fù)制到s1字符
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度教育培訓(xùn)檔口租賃合同
- T-ZJCX 0046-2024 簾子線直捻機
- 二零二五年度公車私用行為規(guī)范與責任追究協(xié)議
- 二零二五年度全新碼頭租賃協(xié)議及倉儲服務(wù)合作協(xié)議
- 2025年度果園租賃與農(nóng)業(yè)科技研發(fā)合同
- 二零二五年度廣告代理合同解除與權(quán)益調(diào)整協(xié)議
- 2025年度高科技企業(yè)計件工資勞動合同
- 2025年度智能合同履約跟蹤與風險控制管理辦法
- 2025年度消防設(shè)施定期維護與消防通道清理合同
- 二零二五年度美發(fā)店員工勞動健康保險與意外傷害合同
- 醫(yī)院轉(zhuǎn)診轉(zhuǎn)院記錄單
- 余熱回收節(jié)能技術(shù)課件
- 表面工程學第四章-表面淬火和表面形變強化技術(shù)
- 健康管理調(diào)查表
- 汶川地震波時程記錄(臥龍3向)
- NACHI那智機器人(操作篇)課件
- 企業(yè)員工培訓(xùn)PPT課件:職務(wù)犯罪培訓(xùn)
- 場地租賃安全管理協(xié)議書
- 數(shù)學物理方程(很好的學習教材)PPT課件
- 電力建設(shè)工程質(zhì)量監(jiān)督檢查大綱新版
- GB-T-15894-2008-化學試劑-石油醚
評論
0/150
提交評論