




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、2016年3月第2章 最簡單的C程序設(shè)計順序程序設(shè)計2.1 順序程序設(shè)計舉例順序程序設(shè)計舉例 解題思路:找到二者間的轉(zhuǎn)換公式 例2.1 有人用溫度計測量出用華氏法表示的溫度(如F),今要求把它轉(zhuǎn)換為以攝氏法表示的溫度(如C)。)32(95fcf代表華氏溫度,c代表攝氏溫度順序程序結(jié)構(gòu)是最簡單的一種程序結(jié)構(gòu),其中各語句都是按自上而下的順序執(zhí)行的,不發(fā)生流程的跳轉(zhuǎn),不出現(xiàn)選擇和循環(huán)的操作。若干個小的順序結(jié)構(gòu)可以構(gòu)成一個大的順序結(jié)構(gòu),甚至一個程序。2.1 順序程序設(shè)計舉例順序程序設(shè)計舉例 算法: 例2.1 有人用溫度計測量出用華氏法表示的溫度(如F),今要求把它轉(zhuǎn)換為以攝氏法表示的溫度(如C)。輸入
2、輸入f的值的值輸出輸出c的值的值)32(95fcN-S圖圖2.1 順序程序設(shè)計舉例順序程序設(shè)計舉例#include int main ( ) float f,c; f=64.0; c=(5.0/9)*(f-32); printf(f=%fnc=%fn,f,c); return 0; 程序及運行結(jié)果:定義定義f和和c為單精度浮點型變量為單精度浮點型變量指定指定f的值的值計算計算c的值的值輸出輸出f和和c的的值值2.1 順序程序設(shè)計舉例順序程序設(shè)計舉例 解題思路:假設(shè)輸入的三個邊長a,b,c符合構(gòu)成三角形的條件。三角形面積公式為:其中 。 例2.2 輸入以個三角形的三邊長,求三角形面積。)()(c
3、sbsassarea2cbas2.1 順序程序設(shè)計舉例順序程序設(shè)計舉例#include #include int main ( ) float a,b,c,s,area; scanf(“%f,%f,%f”,&a,&b,&c); s=(a+b+c)/2.0; area=sqrt(s*(s-a)*(s-b)*(s-c) printf(“a=%fnb=%fnc=%fnarea=%fn,a,b,c,area); return 0; 程序:2.1 順序程序設(shè)計舉例順序程序設(shè)計舉例輸入輸入3.4,4.5,5.6a=3.400000b=4.500000c=5.600000area=7.649173運行結(jié)果:
4、2.2 數(shù)據(jù)的類型及存儲形式數(shù)據(jù)的類型及存儲形式 數(shù)據(jù)是程序加工的對象,本節(jié)主要介紹數(shù)據(jù)的類型及其屬性。2.2.1 C的數(shù)據(jù)類型一個程序應(yīng)包括以下兩方面內(nèi)容:(1) 對數(shù)據(jù)的描述。在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,即數(shù)據(jù)結(jié)構(gòu)(data structure)。(2) 對操作的描述。即操作步驟,也就是算法(algorithm)。數(shù)據(jù)是操作的對象,操作的目的是對數(shù)據(jù)進(jìn)行加工處理,以得到期望的結(jié)果。打個比方,廚師做菜肴,需要有菜譜。菜譜上一般應(yīng)包括: 配料,指出應(yīng)使用哪些原料; 操作步驟,指出如何使用這些原料按規(guī)定的步驟加工成所需的菜肴。面對同一些原料可以加工出不同風(fēng)味的菜肴。2.2.1 C的
5、數(shù)據(jù)類型 作為程序設(shè)計人員,必須認(rèn)真考慮和設(shè)計數(shù)據(jù)結(jié)構(gòu)和操作步驟(即算法)。因此,著名計算機科學(xué)家沃思(nikiklaus Wirth)提出一個公式: 數(shù)據(jù)結(jié)構(gòu)+算法=程序 實際上,一個程序除了以上兩個主要要素之外,還應(yīng)當(dāng)采用結(jié)構(gòu)化程序設(shè)計方法進(jìn)行程序設(shè)計,并且用某一種計算機語言表示。因此,可以這樣表示:程序=算法+數(shù)據(jù)結(jié)構(gòu)+程序設(shè)計方法+語言工具和環(huán)境數(shù)據(jù)類型總表數(shù)據(jù)類型總表C C數(shù)數(shù)據(jù)據(jù)類類型型基本類型基本類型構(gòu)造類型構(gòu)造類型指針類型指針類型空類型空類型void定義類型定義類型typedef字符類型字符類型char枚舉類型枚舉類型enum整整 型型實型實型單精度型單精度型float雙精度型
6、雙精度型double數(shù)組數(shù)組結(jié)構(gòu)體結(jié)構(gòu)體struct共用體共用體union短整型短整型short長整型長整型long整型整型int數(shù)據(jù)類型決定:數(shù)據(jù)類型決定:1. 數(shù)據(jù)占內(nèi)存字節(jié)數(shù)數(shù)據(jù)占內(nèi)存字節(jié)數(shù)2. 數(shù)據(jù)取值范圍數(shù)據(jù)取值范圍3. 其上可進(jìn)行的操作其上可進(jìn)行的操作2.2.1 C的數(shù)據(jù)類型2.2.2 數(shù)據(jù)的表現(xiàn)形式常量和變量1.常量:在程序運行過程中,其值不能被改變的量 整型常量:如1000,12345,0,-345 實型常量十進(jìn)制小數(shù)形式:如0.34 -56.79 0.0指數(shù)形式:如12.34e3 (代表12.34103) 字符常量:如?轉(zhuǎn)義字符:如n 字符串常量:如“boy” 符號常量:#d
7、efine PI 3.14162.2.2 數(shù)據(jù)的表現(xiàn)形式常量和變量2. 變量:在程序運行期間,變量的值是可以改變的 變量必須先定義,后使用 定義變量時指定該變量的名字和類型 變量名和變量值是兩個不同的概念 變量名實際上是以一個名字代表的一個存儲地址 從變量中取值,實際上是通過變量名找到相應(yīng)的內(nèi)存地址,從該存儲單元中讀取數(shù)據(jù)2.2.2 數(shù)據(jù)的表現(xiàn)形式常量和變量3.常變量:const int a=3;4.標(biāo)識符:一個對象的名字 語言規(guī)定標(biāo)識符只能由字母、數(shù)字和下劃線3種字符組成,且第一個字符必須為字母或下劃線 合法的標(biāo)識符:如sum,average, _total, Class, day, BAS
8、IC, li_ling 不合法的標(biāo)識符:M.D.John,¥123,33,3D64,ab大小寫字母是不同的字符大小寫字母是不同的字符2.2.3 整型數(shù)據(jù)1.1.整型常量的三種形式整型常量的三種形式C語言中整常數(shù)可用以下三種形式表示: (1) 十進(jìn)制整數(shù)十進(jìn)制整數(shù),如123,-456,0。 (2) 八進(jìn)制整數(shù)八進(jìn)制整數(shù),以0開頭的數(shù)是八進(jìn)制數(shù)。如0123表示八進(jìn)制數(shù)123,即(123)8,其值為182+281+380,等于十進(jìn)制數(shù)83。-011表示八進(jìn)制數(shù)-11,即十進(jìn)制數(shù)-9。 (3) 十六進(jìn)制整數(shù)十六進(jìn)制整數(shù),以0 x開頭的數(shù)是十六進(jìn)制數(shù)。如0 x123,代表十六進(jìn)制數(shù)123,即(123)1
9、6=1162+2161+3160=256+32+3=291。-0 x12等于十進(jìn)制數(shù)-18。2.2.3 整型數(shù)據(jù)2.2.整型數(shù)據(jù)在內(nèi)存中的存儲方式整型數(shù)據(jù)在內(nèi)存中的存儲方式 整型數(shù)據(jù)在內(nèi)存中的存放形式數(shù)據(jù)在內(nèi)存中是以二進(jìn)制形式存放的。如果定義了一個整型變量i:int i; /* 定義為整型變量 */i=10; /* 給i賦以整數(shù)10 */ 十進(jìn)制數(shù)10的二進(jìn)制形式為1010,在微機上使用的c編譯系統(tǒng),每一個整型變量在內(nèi)存中占2個字節(jié)。圖2.1(a)是數(shù)據(jù)存放的示意圖。圖2.1(b)是數(shù)據(jù)在內(nèi)存中實際存放的情況。2.2.3 整型數(shù)據(jù)圖2.1 實際上,數(shù)值是以補碼(complement) 表示的。
10、一個正數(shù)的補碼和其原碼的形式相同。圖3.2(b) 就是用補碼形式表示的。如果數(shù)值是負(fù)的,在內(nèi)存中如何用補碼形式表示呢?求負(fù)數(shù)的補碼的方法是:將該數(shù)的絕對值的二進(jìn)制形式,按位取反再加1。例如求-10的補碼:取-10的絕對值10;10的絕對值的二進(jìn)制形式為1010;對1010取反得1111111111110101(一個整數(shù)占16位);再加1得1111111111110110,見圖2.2。 2.2.3 整型數(shù)據(jù)圖2.2 可知整數(shù)的16位中,最左面的一位是表示符號的,該位為0,表示數(shù)值為正;為1則數(shù)值為負(fù)。 關(guān)于補碼的知識不屬于本書的范圍,但學(xué)習(xí)c語言的讀者應(yīng)該比學(xué)習(xí)其他高級語言的讀者對數(shù)據(jù)在內(nèi)存中的
11、表示形式有更多的了解。這樣才能理解不同類型數(shù)據(jù)間轉(zhuǎn)換的規(guī)律。2.2.3 整型數(shù)據(jù)3.3.整型數(shù)據(jù)的分類整型數(shù)據(jù)的分類整型變量的基本類型符為int??梢愿鶕?jù)數(shù)值的范圍將變量定義為基本整型、短整型或長整型。在int 之前可以根據(jù)需要分別加上修飾符(modifier):short(短型)或long(長型)。因此有以下四種整型變量:(1) 基本整型,以int表示。(2) 短整型, 以short int表示,或以short表示。(3) 長整型, 以long int表示,或以long表示。(4) 雙長整型, 以long long int或longlong表示。這是c99增加的。2.2.3 整型數(shù)據(jù)4.4.
12、整型數(shù)據(jù)的溢出整型數(shù)據(jù)的溢出如果系統(tǒng)給一個短型變量分配2個字節(jié),則變量的最大允許值為32767,如果再加1,會出現(xiàn)什么情況? 例2.3 整型數(shù)據(jù)的溢出。編寫程序:編寫程序:#include int main () short int a,b; a =32767;2.2.3 整型數(shù)據(jù) b =a+1; printf(%d,%d,a,b); 運行結(jié)果為運行結(jié)果為: 32767,-32768圖 2.32.2.3 整型數(shù)據(jù) 從圖2.3可以看到:變量a的最高位為0,后15位全為1。加1后變成第1位為1, 后面15位全為0。而它是-32768的補碼形式,所以輸出變量b的值為-32768。請注意:一個整型變量
13、只能容納-3276832767范圍內(nèi)的數(shù),無法表示大于32767的數(shù)。遇此情況就發(fā)生“溢出”, 但運行時并不報錯。它好像汽車的里程表一樣,達(dá)到最大值以后,又從最小值開始計數(shù)。所以,32767加1得不到32768,而得到-32768,這可能與程序編制者的原意不同。從這里可以看到:c的用法比較靈活,往往出現(xiàn)副作用,而系統(tǒng)又不給出“出錯信息”,要靠程序員的細(xì)心和經(jīng)驗來保證結(jié)果的正確。將變量b改成long型就可得到預(yù)期的結(jié)果32768。2.2.3 整型數(shù)據(jù)5.5.無符號整型變量無符號整型變量c中一個int型的變量的值范圍為-215(215-1) ,即-3276832767。在實際應(yīng)用中,變量的值常常是
14、正的(如學(xué)號、庫存量、年齡、存款額等)。為了充分利用變量的表數(shù)范圍,此時可以將變量定義為“無符號”類型。對以上三種都可以加上修飾符unsigned,以指定是“無符號數(shù)”。如果加上修飾符signed,則指定是“有符號數(shù)”。如果既不指定為signed,也不指定為unsigned,則隱含為有符號(signed)。實際上signed是完全可以不寫的。歸納起來,可以用以下6種整型變量。即:2.2.3 整型數(shù)據(jù)有符號基本整型 signed int 無符號基本整型 unsigned int有符號短整型 signed short int無符號短整型 unsigned short int有符號長整型 signe
15、d long int無符號長整型 unsigned long int2.2.3 整型數(shù)據(jù)6.6.怎樣確定整型變量的類型怎樣確定整型變量的類型我們已知整型變量可分為int、short int、long int和unsigned int、unsigned short、unsigned long等類別。那么常量是否也有這些類別?在將一個整型常量賦值給上述幾種類別的整型變量時如何做到類型匹配?請注意以下幾點:(1) 一個整數(shù),如果其值在-32768+32767范圍內(nèi),認(rèn)為它是int型,它可以賦值給int型和long int型變量。(2) 一個整數(shù),如果其值超過了上述范圍,而在-2147483648+2
16、147483647范圍內(nèi),則認(rèn)為它是長整型,可以將它賦值給一個long int型變量。2.2.3 整型數(shù)據(jù)(3) 超出了上述范圍而又在long long型的范圍內(nèi)的整數(shù),作為long long 型處理,分配八個字節(jié)。可以將它賦值給一個long long型變量。(4)在一個整常量后面加一個字母l或L,則認(rèn)為是long int型常量。(5) 一個整常量后面加一個字母u,認(rèn)為是unsigned int型,如12345u,在內(nèi)存中按unsigned int規(guī)定的方式存放(存儲單元中最高位不作為符號位,而用來存儲數(shù)據(jù)。如果寫成-12345u,則先將-12345轉(zhuǎn)換成其補碼53191,然后按無符號數(shù)存儲。
17、2.2.4 字符型數(shù)據(jù)1.1.字符常量字符常量(1)普通字符 C的字符常量是用單引號(即撇號)括起來的一個字符。如a,x,d,?,$等都是字符常量。注意,a和A是不同的字符常量。(2)轉(zhuǎn)義字符 除了以上形式的字符常量外,C還允許用一種特殊形式的字符常量,就是以一個“”開頭的字符序列。例如,前面已經(jīng)遇到過的,在printf函數(shù)中的n,它代表一個“換行”符。這是一種“控制字符”,在屏幕上是不能顯示的。在程序中也無法用一個一般形式的字符表示,只能采用特殊形式來表示。2.2.4 字符型數(shù)據(jù)2.2.字符變量字符變量字符型變量用來存放字符常量,請注意只能放一個字符,不要以為在一個字符變量中可以放一個字符串
18、(包括若干字符)。字符變量的定義形式如下:charc1,c2;它表示c1和c2為字符型變量,各可以放一個字符,因此在本函數(shù)中可以用下面語句對c1、c2賦值:c1=a;c2=b;在所有的編譯系統(tǒng)中都規(guī)定以一個字節(jié)來存放一個字符,或者說一個字符變量在內(nèi)存中占一個字節(jié)。2.2.4 字符型數(shù)據(jù) 將一個字符常量放到一個字符變量中,實際上并不是把該字符本身放到內(nèi)存單元中去,而是將該字符的相應(yīng)的ASCII代碼放到存儲單元中。例如字符a的ASCII代碼為97,b為98,在內(nèi)存中變量c1、c2的值如圖2.4(a)所示。實際上是以二進(jìn)制形式存放的,如圖2.4(b)所示。圖2.42.2.4 字符型數(shù)據(jù)例2.4 向字
19、符變量賦以整數(shù)。編寫程序:編寫程序: #include intmain() char c1,c2; c1=97; c2=98; printf(“c1 =%c,c2 = %cn,c1,c2); /*以字符形式輸出*/ printf(“c1 =%d ,c2 =%dn,c1,c2); /*轉(zhuǎn)換為整數(shù)形式輸出*/ 運行結(jié)果:運行結(jié)果:c1 =a,c2 =bc1 =97,c2=982.2.4 字符型數(shù)據(jù)程序說明:程序說明: c1、c2被指定為字符變量。但在第4和第5行中,將整數(shù)97和98分別賦給c1和c2,如圖2.4所示。第6行用格式符“%c”輸出字符變量c1和c2的值,此時系統(tǒng)先把97和98轉(zhuǎn)換成字符
20、a和b,然后輸出。第7行用格式符“%d”輸出字符變量c1和c2的值,則直接輸出十進(jìn)制整數(shù)97和98。見圖2.5。圖2.52.2.4 字符型數(shù)據(jù)編寫程序:編寫程序: #include intmain() char c1,c2; c1=a; c2=b; c1 = c1-32; c2 = c2-32; printf(“%c, %cn,c1,c2); 運行結(jié)果:運行結(jié)果:A,B例2.5 把大寫字母轉(zhuǎn)換成相應(yīng)的小寫字母2.2.4 字符型數(shù)據(jù)3.3.字符串常量字符串常量 前面已提到,字符常量是由一對單引號括起來的單個字符。c語言除了允許使用字符常量外,還允許使用字符串常量。字符串常量是一對雙引號括起來的字
21、符序列。如:“how do you do.”, “CHINA,a, $123.45都是字符串常量??梢暂敵鲆粋€字符串,如:printf(how do you do.);不要將字符常量與字符串常量混淆。a是字符常量,“a”是字符串常量,二者不同。假設(shè)c被指定為字符變量:2.2.4 字符型數(shù)據(jù) char c; c=a;是正確的。而 c=a;是錯誤的。c=“CHINA 也是錯誤的。不能把一個字符串賦給一個字符變量。有人不能理解:a和“a”究竟有什么區(qū)別?C規(guī)定:在每一個字符串的結(jié)尾加一個“字符串結(jié)束標(biāo)志”,以便編譯據(jù)此判斷字符串是否結(jié)束。C規(guī)定以字符0作為字符串結(jié)束標(biāo)志。2.2.4 字符型數(shù)據(jù) 0是
22、一個ASCII碼為0的字符,從ASCII代碼表中可以看到ASCII碼為0的字符是“空操作字符”,即它不引起任何控制動作,也不是一個可顯示的字符。如果有一個字符串“CHINA”,實際上在內(nèi)存中是: C H I N A 0它的長度不是5個字符,而是6個字符,最后一個字符為0。但在輸出時不輸出0。例如在printf(“how do you do.”)中,輸出時一個一個字符輸出,直到遇到最后的0字符,就知道字符串結(jié)束,停止輸出。注意,在寫字符串時不必加0,否則會畫蛇添足。0字符是系統(tǒng)自動加上的。字符串“a”,實際上包含2個字符:a和0,因此,把它賦給只能容納一個字符的字符變量顯然是不行的。2.2.5
23、浮點型數(shù)據(jù) 浮點型數(shù)據(jù)是用來表示具有小數(shù)點的實數(shù) float型(單精度浮點型)編譯系統(tǒng)為float型變量分配4個字節(jié)數(shù)值以規(guī)范化的二進(jìn)制數(shù)指數(shù)形式存放2.2.5 浮點型數(shù)據(jù)浮點型數(shù)據(jù)是用來表示具有小數(shù)點的實數(shù) float型(單精度浮點型) double型(雙精度浮點型)u編譯系統(tǒng)為double型變量分配8個字節(jié)u15位有效數(shù)字 long double(長雙精度)型2.3 用表達(dá)式進(jìn)行數(shù)據(jù)的運算用表達(dá)式進(jìn)行數(shù)據(jù)的運算 幾乎每個程序都需要進(jìn)行運算,對數(shù)據(jù)進(jìn)行加工處理,否則程序就沒有意義了。2.3.1 C表達(dá)式C語言有以下幾類表達(dá)式:算術(shù)表達(dá)式算術(shù)表達(dá)式。如2+6.7*3.5+sin(0.5)關(guān)系表
24、達(dá)式關(guān)系表達(dá)式。如x0,y0&y0賦值表達(dá)式賦值表達(dá)式。如a=5.6逗號表達(dá)式逗號表達(dá)式。如a=3,y=4,z=82.3.2 C運算符運算符有以下幾種:(1) 算術(shù)運算符 (+ - * / % + -)(2) 關(guān)系運算符 ( ?。?3) 邏輯運算符 (! |)(4) 位運算符 ( | )(5) 賦值運算符 (及其擴展賦值運算符)(6) 條件運算符 (?:)2.3.2 C運算符(7) 逗號運算符 (,)(8) 指針運算符 (*和)(9) 求字節(jié)數(shù)運算符 (sizeof)(10) 強制類型轉(zhuǎn)換運算符 ( (類型) )(11) 成員運算符 (. -)(12) 下標(biāo)運算符 ( )(13) 其他 (如函
25、數(shù)調(diào)用運算符()2.3.3 運算符的優(yōu)先性與結(jié)合性C語言規(guī)定了運算符的優(yōu)先級和結(jié)合性。在表達(dá)式求值時,先按運算符的優(yōu)先級別高低次序執(zhí)行,例如先乘除后加減。如表達(dá)式a-b*c,b的左側(cè)為減號,右側(cè)為乘號,而乘號優(yōu)先于減號,因此,相當(dāng)于a-(b*c)。如果在一個運算對象兩側(cè)的運算符的優(yōu)先級別相同,如a-b+c,則按規(guī)定的“結(jié)合方向結(jié)合方向”處理。C規(guī)定了各種運算符的結(jié)合方向(結(jié)合性),算術(shù)運算符的結(jié)合方向為“自左至右”,即先左后右,因此b先與減號結(jié)合,執(zhí)行a-b的運算,再執(zhí)行加c的運算?!白宰笾劣业慕Y(jié)合方向”又稱“左結(jié)合性左結(jié)合性”,即運算對象先與左面的運算符結(jié)合。以后有些運算符的結(jié)合方向為“自右
26、至左”,即右結(jié)合性右結(jié)合性(例如,賦值運算符)。2.3.4 不同類型數(shù)據(jù)間的混合運算整型(包括int,short,long)、實型(包括float,double)可以混合運算。前已述及,字符型數(shù)據(jù)可以與整型通用,因此,整型、實型、字符型數(shù)據(jù)間可以混合運算。例如:10+a+15-87651234 *b是合法的。在進(jìn)行運算時,不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,然后進(jìn)行運算。轉(zhuǎn)換的規(guī)則按圖2.6所示。圖2.62.3.4 不同類型數(shù)據(jù)間的混合運算 圖中橫向向左的箭頭表示必定的轉(zhuǎn)換,如字符數(shù)據(jù)必定先轉(zhuǎn)換為整數(shù),short型轉(zhuǎn)換為int型,float型數(shù)據(jù)在運算時一律先轉(zhuǎn)換成雙精度型,以提高運算精度(即使
27、是兩個float型數(shù)據(jù)相加,也先都化成double型,然后再相加)。 縱向的箭頭表示當(dāng)運算對象為不同類型時轉(zhuǎn)換的方向。例如int型與double型數(shù)據(jù)進(jìn)行運算,先將int型的數(shù)據(jù)轉(zhuǎn)換成double型,然后在兩個同類型(double型)數(shù)據(jù)間進(jìn)行運算,結(jié)果為double型。如果有一個數(shù)據(jù)是float型或double型,則另一數(shù)據(jù)要先轉(zhuǎn)換為double型,運算結(jié)果為double型。如果參加運算的兩個數(shù)據(jù)中最高級別為long型,則另一數(shù)據(jù)先轉(zhuǎn)換為long型,運算結(jié)果為long型。其他依此類推。2.3.4 不同類型數(shù)據(jù)間的混合運算假設(shè)已指定i為整型變量,f為float變量,d為double型變量,e為
28、long型,有下面式子: 10+a+i*f-d/e在計算機執(zhí)行時從左至右掃描,運算次序為:進(jìn)行10+a的運算,先將a轉(zhuǎn)換成整數(shù)97,運算結(jié)果為107。由于“*”比“+”優(yōu)先,先進(jìn)行i*f的運算。先將i與f都轉(zhuǎn)成double型,運算結(jié)果為double型。整數(shù)107與i*f的積相加。先將整數(shù)107轉(zhuǎn)換成雙精度數(shù)(小數(shù)點后加若干個0,即10700000),結(jié)果為double型。將變量e化成double型,d/e結(jié)果為double型。將10+a+i*f的結(jié)果與d/e的商相減,結(jié)果為double型。上述的類型轉(zhuǎn)換是由系統(tǒng)自動進(jìn)行的。2.3.5 強制類型轉(zhuǎn)換 可以利用強制類型轉(zhuǎn)換運算符將一個表達(dá)式轉(zhuǎn)換成所
29、需類型。例如: (double)a (將a轉(zhuǎn)換成double類型) (int)(x+y) (將x+y的值轉(zhuǎn)換成整型) (float)(5%3) (將5%3的值轉(zhuǎn)換成float型)其一般形式為(類型名)(表達(dá)式)注意,表達(dá)式應(yīng)該用括號括起來。如果寫成(int)x+y則只將x轉(zhuǎn)換成整型,然后與y相加。2.3.5 強制類型轉(zhuǎn)換 需要說明的是在強制類型轉(zhuǎn)換時,得到一個所需類型的中間變量,原來變量的類型未發(fā)生變化。例如:(int)x(不要寫成int(x) 如果x原指定為float型,進(jìn)行強制類型運算后得到一個int型的中間變量,它的值等于x的整數(shù)部分,而x的類型不變(仍為float型)。見下例。例2.6
30、 強制類型轉(zhuǎn)換。 main() float x; int i; x=3.6; i=(int)x; printf(x=%f, i=%d,x,i); 2.3.5 強制類型轉(zhuǎn)換運行結(jié)果如下:x=3.600000, i=3x類型仍為float型,值仍等于3.6。 從上可知,有兩種類型轉(zhuǎn)換,一種是在運算時不必用戶指定,系統(tǒng)自動進(jìn)行的類型轉(zhuǎn)換,如3+6.5。第二種是強制類型轉(zhuǎn)換。當(dāng)自動類型轉(zhuǎn)換不能實現(xiàn)目的時,可以用強制類型轉(zhuǎn)換。如“%”運算符要求其兩側(cè)均為整型量,若x為float型,則“x%3”不合法,必須用:“(int)x % 3”。強制類型轉(zhuǎn)換運算優(yōu)先于%運算,因此先進(jìn)行(int)x的運算,得到一個整
31、型的中間變量,然后再對3求模。此外,在函數(shù)調(diào)用時,有時為了使實參與形參類型一致,可以用強制類型轉(zhuǎn)換運算符得到一個所需類型的參數(shù)。2.3.5 強制類型轉(zhuǎn)換 “x%3”不合法,必須用:“(int)x % 3”。強制類型轉(zhuǎn)換運算優(yōu)先于%運算,因此先進(jìn)行(int)x的運算,得到一個整型的中間變量,然后再對3求模。此外,在函數(shù)調(diào)用時,有時為了使實參與形參類型一致,可以用強制類型轉(zhuǎn)換運算符得到一個所需類型的參數(shù)。2.4 最常用的最常用的C語句語句賦值語句賦值語句 2.4.1 C語句綜述 c程序結(jié)構(gòu)可以用圖2.7表示。即一個c程序可以由若干個源程序文件(分別進(jìn)行編譯的文件模塊)組成,一個源文件可以由若干個函
32、數(shù)和預(yù)處理命令以及全局變量聲明部分組成。2.4.1 C語句綜述 C語句可以分為以下5類:(1) 控制語句控制語句,完成一定的控制功能。c只有9種控制語句,它們是: if()else(條件語句) for() (循環(huán)語句) hile() (循環(huán)語句) dohile() (循環(huán)語句) continue (結(jié)束本次循環(huán)語句) break (中止執(zhí)行switch或循環(huán)語句) sitch (多分支選擇語句) goto (轉(zhuǎn)向語句) 2.4.1 C語句綜述 return (從函數(shù)返回語句) 上面9種語句中的括號()表示其中是一個條件,表示內(nèi)嵌的語句。例如:“if()else”的具體語句可以寫成: if(xy
33、) z=x;else z=y;(2) 函數(shù)調(diào)用語句函數(shù)調(diào)用語句。由一次函數(shù)調(diào)用加一個分號構(gòu)成一個語句,例如:printf(this is a c stateent);(3) 表達(dá)式語句表達(dá)式語句。由一個表達(dá)式構(gòu)成一個語句,最典型的是,由賦值表達(dá)式構(gòu)成一個賦值語句。a=3是一個賦值表達(dá)式,而a=3;是一個賦值語句??梢钥吹揭粋€表達(dá)式的最后加一個分號就成了2.4.1 C語句綜述 一個語句。一個語句必須在最后出現(xiàn)分號,分號是語句中不可缺少的一部分(而不像pascal語言那樣,分號只是語句間的分隔符號)。例如:i=i+1(是表達(dá)式,不是語句)i=i+1;(是語句)任何表達(dá)式都可以加上分號而成為語句,例
34、如i+;是一語句,作用是使i值加1。又如x+y;也是一個語句,作用是完成x+y的操作,它是合法的,但是并不把x+y的和賦給另一變量,所以它并無實際意義。表達(dá)式能構(gòu)成語句是c語言的一個重要特色。其實“函數(shù)調(diào)用語句”也是屬于表達(dá)式語句,因為函數(shù)調(diào)用(如sin(x)也屬于表達(dá)式的一種。只是為了便于理解和使用,我們把“函數(shù)調(diào)用語句”和“表達(dá)式語句”分開來說明。2.4.1 C語句綜述 (4) 空語句空語句。下面是一個空語句:;即只有一個分號的語句,它什么也不做。有時用來做被轉(zhuǎn)向點,或循環(huán)語句中的循環(huán)體(循環(huán)體是空語句,表示循環(huán)體什么也不做)。(5) 復(fù)合語句??梢杂?把一些語句括起來成為復(fù)合語句,又稱分
35、程序。如下面是一個復(fù)合語句。z=x+y;t=z/100;printf(%f,t);2.4.2 賦值表達(dá)式 1. 1. 賦值運算符賦值運算符 賦值符號“=”就是賦值運算符,它的作用是將一個數(shù)據(jù)賦給一個變量。如“a=3”的作用是執(zhí)行一次賦值操作(或稱賦值運算)。把常量3賦給變量a。也可以將一個表達(dá)式的值賦給一個變量。2.4.2 賦值表達(dá)式 2. 賦值表達(dá)式 由賦值運算符將一個變量和一個表達(dá)式連接起來的式子稱為“賦值表達(dá)式”。它的一般形式為: 變量變量 賦值運算符賦值運算符 表達(dá)式表達(dá)式 賦值表達(dá)式的作用是將一個表達(dá)式的值賦給一個變量,因此賦值表達(dá)式具有計算和賦值的雙重功能。2.4.2 賦值表達(dá)式
36、3. 復(fù)合的賦值運算符在賦值符“=”之前加上其他運算符,可以構(gòu)成復(fù)合的運算符。如果在“=”前加一個“+”運算符就成了復(fù)合運算符“+=”。例如,可以有:a+=3 等價于a=a+3 x*=y+8 等價于 x=x*(y+8) x%=3 等價于 x=x%3以“a+=3”為例來說明,它相當(dāng)于使a進(jìn)行一次自加(3)的操作。即先使a加3,再賦給a。同樣,“x*=y+8”的作用是使x乘以(y+8),再賦給x。2.4.2 賦值表達(dá)式 4. 賦值過程中的類型轉(zhuǎn)換如果賦值運算符兩側(cè)的類型不一致,但都是數(shù)值型或字符型時,在賦值時要進(jìn)行類型轉(zhuǎn)換。 (1) 將實型數(shù)據(jù)(包括單、雙精度)賦給整型變量時,舍棄實數(shù)的小數(shù)部分。
37、如i為整型變量,執(zhí)行“i=3.56”的結(jié)果是使i的值為3, 在內(nèi)存中以整數(shù)形式存儲。 (2) 將整型數(shù)據(jù)賦給單、雙精度變量時,數(shù)值不變,但以浮點數(shù)形式存儲到變量中,如將23賦給float變量f,即f=23,先將23轉(zhuǎn)換成23.00000,再存儲在f中。如將23賦給double型變量d,即d=23,則將23補足有效位數(shù)字為23.00000000000000,然后以雙精度浮點數(shù)形式存儲到變量d中。2.4.2 賦值表達(dá)式 (3) 將一個double型數(shù)據(jù)賦給float變量時,截取其前面7位有效數(shù)字,存放到float變量的存儲單元(32位)中。但應(yīng)注意數(shù)值范圍不能溢出。如:float f;double
38、 d=123.456789e100;f=d;就出現(xiàn)溢出的錯誤。將一個float型數(shù)據(jù)賦給double變量時,數(shù)值不變,在內(nèi)存中以8個字節(jié)存儲,有效位數(shù)擴展到16位。(4) 字符型數(shù)據(jù)賦給整型變量時,將字符的ASCII代碼賦給整型變量。2.4.2 賦值表達(dá)式 (5) 將一個int、short、long型數(shù)據(jù)賦給一個char型變量時,只將其低8位原封不動地送到char型變量(即截斷)。例如: int i=289; char c=a; c=i;賦值情況見圖2.8。c的值為33, 如果用“%c”輸出c,將得到字符“!” (其ASCII碼為33)。 圖2.82.4.2 賦值表達(dá)式 (6) 將有符號整型變
39、量賦給長度相同的無符號整型變量時,按字節(jié)原樣賦值。將無符號整型變量賦給長度相同的有符號整型變量時,應(yīng)注意不要超出有符號整型變量的數(shù)值范圍,否則會出錯。2.4.3 賦值語句 1.區(qū)分賦值表達(dá)式和賦值語句前已介紹,賦值語句是由賦值表達(dá)式加上一個分號構(gòu)成。由于賦值語句應(yīng)用十分普遍,所以專門再討論一下。C語言的賦值語句具有其他高級語言的賦值語句的一切特點和功能。但也應(yīng)當(dāng)注意到它們的不同:(1) C語言中的賦值號“=”是一個運算符,在其他大多數(shù)語言中賦值號不是運算符。(2) 關(guān)于賦值表達(dá)式與賦值語句的概念,其他多數(shù)高級語言沒有“賦值表達(dá)式”一概念。作為賦值表達(dá)式可以包括在其他表達(dá)式之中,例如:if(a=
40、b)0) max=a;2.4.3 賦值語句 按語法規(guī)定if后面的()內(nèi)是一個條件,例如可以是:“if(x0)”?,F(xiàn)在在x的位置上換上一個賦值表達(dá)式“a=b”,其作用是:先進(jìn)行賦值運算(將b的值賦給a),然后判斷a是否大于0,如大于0,執(zhí)行max=a。在if語句中的“a=b”不是賦值語句而是賦值表達(dá)式,這樣寫是合法的。如果寫成if(a=b;)0) max=a;就錯了。在if的條件中不能包含賦值語句。由此可以看到,c把賦值語句和賦值表達(dá)式區(qū)別開來,增加了表達(dá)式的種類,使表達(dá)式的應(yīng)用幾乎“無孔不入”,能實現(xiàn)其他語言中難以實現(xiàn)的功能。2.4.3 賦值語句 2.對變量賦初值程序中常需要對一些變量預(yù)先設(shè)置
41、初值。C語言允許在定義變量的同時使變量初始化。如:int a=3; /* 指定a為整型變量,初值為3 */float f=3.56;/* 指定f為實型變量,初值為3.56 */char c=a; /* 指定c為字符變量,初值為a */也可以使被定義的變量的一部分賦初值。如: int a,b,c=5;表示指定a、b、c為整型變量,只對c初始化,c的值為5。如果對幾個變量賦予初值3,應(yīng)寫成int a=3,b=3,c=3;表示a、b、c的初值都是3。不能寫成:int a=b=c=3;2.4.3 賦值語句 初始化不是在編譯階段完成的(只有在第7章中介紹的靜態(tài)存儲變量和外部變量的初始化是在編譯階段完成的
42、),而是在程序運行時執(zhí)行本函數(shù)時賦予初值的,相當(dāng)于有一個賦值語句。例如,int a=3;相當(dāng)于:int a;/*指定a為整型變量 */ a=3; /*賦值語句,將3賦給a */又如int a,b,c=5;相當(dāng)于:int a,b,c; /*指定a、b、c為整型變量*/ c=5; /*將5賦給c*/2.5 數(shù)據(jù)的輸入輸出數(shù)據(jù)的輸入輸出2.5.1 C語言中輸入輸出的概念(1) 所謂輸入輸出是以計算機主機為主體而言的所謂輸入輸出是以計算機主機為主體而言的。從計算機向外部輸出設(shè)備(如顯示屏、打印機、磁盤等)輸出數(shù)據(jù)稱為“輸出” ,從外部向輸入設(shè)備(如鍵盤、磁盤、光盤、掃描儀等)輸入數(shù)據(jù)稱為“輸入”。(2
43、) C語言本身不提供輸入輸出語句,輸入和輸出操作是由函數(shù)來實語言本身不提供輸入輸出語句,輸入和輸出操作是由函數(shù)來實現(xiàn)的現(xiàn)的。在c標(biāo)準(zhǔn)函數(shù)庫中提供了一些輸入輸出函數(shù),例如,printf函數(shù)和scanf函數(shù)。讀者在使用它們時,千萬不要誤認(rèn)為它們是C語言提供的“輸入輸出語句”。printf和scanf不是C語言的關(guān)鍵字,而只是函數(shù)的名字。實際上完全可以不用printf和scanf這兩個名字,而另外編一個輸入函數(shù)和一個輸出函數(shù),用來實現(xiàn)輸入輸出的功能,采用其他的名字作為函數(shù)名。2.5.1 C語言中輸入輸出的概念(3) 在使用在使用c語言庫函數(shù)時,要用預(yù)編譯命令語言庫函數(shù)時,要用預(yù)編譯命令“includ
44、e”將有關(guān)的將有關(guān)的“頭文件頭文件” 包括到用戶源文件中包括到用戶源文件中。在頭文件中包含了與用到的函數(shù)有關(guān)的信息。例如使用標(biāo)準(zhǔn)輸入輸出庫函數(shù)時,要用到“stdio.h”文件。文件后綴“h” 是head的縮寫,#include命令都是放在程序的開頭,因此這類文件被稱為“頭文件” 。在調(diào)用標(biāo)準(zhǔn)輸入輸出庫函數(shù)時,文件開頭應(yīng)有以下預(yù)編譯命令:#include 或#include studio.hstudioh是standard input & output的縮寫。2.5.2 用printf函數(shù)輸出數(shù)據(jù) Printf函數(shù)的作用是向終端(或系統(tǒng)隱含指定的輸出設(shè)備)輸出若干個任意類型的數(shù)據(jù)(putchar
45、只能輸出字符,而且只能是一個字符,而printf可以輸出多個數(shù)據(jù),且為任意類型)。1.printf函數(shù)的一般格式printf函數(shù)的一般格式為:printf(格式控制,輸出表列) 如:printf(%d, %cn,i,c) 括弧內(nèi)包括兩部分:2.5.2 用printf函數(shù)輸出數(shù)據(jù)(1) “格式控制格式控制”是用雙引號括起來的字符串,也稱“轉(zhuǎn)換控制字符轉(zhuǎn)換控制字符串串”,它包括兩種信息: 格式說明格式說明,由“%”和格式字符組成,如%d,%f等。它的作用是將輸出的數(shù)據(jù)轉(zhuǎn)換為指定的格式輸出。格式說明總是由“%”字符開始的。 普通字符普通字符,即需要原樣輸出的字符。例如上面printf函數(shù)中雙引號內(nèi)的
46、逗號、空格和換行符。(2) “輸出表列輸出表列”是需要輸出的一些數(shù)據(jù),可以是表達(dá)式。2.5.2 用printf函數(shù)輸出數(shù)據(jù)2.基本的格式字符(1) d格式符格式符。用來輸出十進(jìn)制整數(shù)。有以下幾種用法:%d,按整型數(shù)據(jù)的實際長度輸出。 %md, m為指定的輸出字段的寬度。如果數(shù)據(jù)的位數(shù)小于m,則左端補以空格,若大于,則按實際位數(shù)輸出。如printf(%4d,%4d,a,b);若a=123,b=12345,則輸出結(jié)果為 123,12345 %ld,輸出長整型數(shù)據(jù)。如longa=135790; printf(%ld,a);2.5.2 用printf函數(shù)輸出數(shù)據(jù)(2) c格式符格式符,用來輸出一個字符
47、。如:charc=a; printf(%c,c); 輸出字符a,請注意:“%c”中的c是格式符,逗號右邊的c是變量名,不要搞混。(3)s格式符格式符。用來輸出一個字符串。如:Printf(“%s”,“CHINA”)(不包括雙引號)。(4)f格式符格式符。f的含義是float,用來輸出實數(shù)(包括單、雙精度、長雙精度),以及小數(shù)形式輸出,有幾種用法:2.5.2 用printf函數(shù)輸出數(shù)據(jù)基本型,用基本型,用%f。不指定字段寬度,由系統(tǒng)自動指定,使整數(shù)部分全部如數(shù)輸出,并輸出6位小數(shù)。應(yīng)當(dāng)注意,并非全部數(shù)字都是有效數(shù)字。單精度實數(shù)的有效位數(shù)一般為7位。例2.7 用%f輸出實數(shù)。#include in
48、t main()double a,b; a=11.1111111111; b=2.22222222222;printf(“a+b =%fn,a+b); return 0; 運行結(jié)果:a+b =33.3333332.5.2 用printf函數(shù)輸出數(shù)據(jù)指定數(shù)據(jù)寬度和小數(shù)位數(shù)。用指定數(shù)據(jù)寬度和小數(shù)位數(shù)。用%.nf指定輸出的數(shù)據(jù)共占列,其中有n位小數(shù)。如果數(shù)值長度小于,則左端補空格。%-.nf 與%.nf基本相同,只是使輸出的數(shù)值向左端靠,右端補空格。(5) e格式符格式符。e 的含義是exponent。以指數(shù)形式輸出實數(shù),可用以下形式: %e不指定輸出數(shù)據(jù)所占的寬度和數(shù)字部分的小數(shù)位數(shù),有的c編譯系統(tǒng)自動指定給出6位小數(shù),指數(shù)部分占5位(如e+002),其中“e”占1位,指數(shù)符號占1位,指數(shù)占3位。數(shù)值按規(guī)范化指數(shù)形式輸出(即小數(shù)點前必須有而且只有1位非零數(shù)字)。例如printf(%e,123456);輸
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 百年老藥阿司匹林80課件
- 2023年上海市上海市徐匯區(qū)斜土路街道招聘社區(qū)工作者真題帶答案詳解
- 2025年江西省高速公路投資集團有限責(zé)任公司招聘筆試備考題庫附答案詳解(a卷)
- 2025年黑龍江省五常市輔警招聘考試試題題庫及答案詳解(網(wǎng)校專用)
- 高溫伺服閥力矩馬達(dá)的工作特性及散熱罩優(yōu)化研究
- 2025年河北省定州市輔警招聘考試試題題庫完整參考答案詳解
- 債券研究-固收專題報告:全球價值鏈分工與關(guān)稅博弈-關(guān)稅成本由誰承擔(dān)
- 語文(深圳卷)2025年中考考前押題最后一卷
- 臨床抗生素耐藥性與合理用藥護理要點
- ISO9000質(zhì)量管理體系
- 精神障礙的護理觀察與記錄
- 來華留學(xué)生對中國文化認(rèn)同感的探究
- 國開本科《中國當(dāng)代文學(xué)專題》形考任務(wù)1-6試題及答案
- 軟件系統(tǒng)操作手冊模板
- 日間手術(shù)管理信息系統(tǒng)建設(shè)方案
- 樓頂發(fā)光字制作安裝合同
- 中德材料中英文對照
- 個人租房合同協(xié)議書電子版免費下載7篇
- pytest框架與自動化測試應(yīng)用
- 帶電流互感器三相四線有功電表的接線演示文稿
- 2023年高考全國甲卷數(shù)學(xué)(理)試卷【含答案】
評論
0/150
提交評論