第三章最簡單的C程序設(shè)計-順序程序設(shè)計_第1頁
第三章最簡單的C程序設(shè)計-順序程序設(shè)計_第2頁
第三章最簡單的C程序設(shè)計-順序程序設(shè)計_第3頁
第三章最簡單的C程序設(shè)計-順序程序設(shè)計_第4頁
第三章最簡單的C程序設(shè)計-順序程序設(shè)計_第5頁
已閱讀5頁,還剩118頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第三章3.1 3.1 順序順序結(jié)構(gòu)程序設(shè)計結(jié)構(gòu)程序設(shè)計舉例舉例3.2 3.2 數(shù)據(jù)的表現(xiàn)形式及其運(yùn)算數(shù)據(jù)的表現(xiàn)形式及其運(yùn)算3.3 C3.3 C語句語句概述概述3.4 3.4 數(shù)據(jù)數(shù)據(jù)的的輸入輸出輸入輸出例3.1 輸入三角形的三邊長,求三角形面積。假設(shè):三個邊長a,b,c能構(gòu)成三角形。已知面積公式(海倫公式):area=s=(a+b+c)*0.5c)b)(sa)(ss(s開始輸入三邊長計算s計算面積結(jié)束#include#includevoid main()float a,b,c,s,area;scanf(“%f,%f,%f”,&a,&b,&c);s=1.0/2*(a+b+c);area=sqrt

2、(s*(s-a)*(s-b)*(s-c);printf(“a=%7.2f, b=%7.2f, c=%7.2f, s=%7.2fn”,a,b,c,s);printf(“area=%7.2fn”,area); 數(shù)學(xué)函數(shù)庫因為要用到其中的sqrt函數(shù)運(yùn)行情況:運(yùn)行情況:3 3,4 4,6 6a= 3.00, b= 4.00, c= 6.00, s= 6.50a= 3.00, b= 4.00, c= 6.00, s= 6.50area= 5.33area= 5.33例例3.23.2 從鍵盤輸入一個大寫字母,要求用小寫字母輸出。 void () ,; (); (,); ; (,);運(yùn)行情況:運(yùn)行情況:,

3、例例3.3 3.3 求 方程的根。a,b,c由鍵盤輸入,設(shè) 。眾所周知,一元二次方程式的根為x1= x2= 可以將上面的分式分為兩項:p= , q= x1=p+q, x2=p-qacb42aacbb242aacbb242ab2aacb24220axbxc#include #include void main ( ) float a,b,c,disc,x1,x2,p,q; scanf(a=%f,b=%f,c=%f,&a,&b,&c); disc=b*b-4*a*c; p=-b/(2*a); q=sqrt(disc)/(2*a); x1=p+q;x2=p-q; printf(nnx1=%5.2fn

4、x2=%5.2fn,x1,x2);運(yùn)行情況:運(yùn)行情況:,3.2.1 3.2.1 常量與變量常量與變量3.2.2 3.2.2 C C的數(shù)據(jù)類型的數(shù)據(jù)類型3.2.3 3.2.3 整型數(shù)據(jù)整型數(shù)據(jù)3.2.4 3.2.4 字符型數(shù)據(jù)字符型數(shù)據(jù)3.2.5 3.2.5 浮點(diǎn)浮點(diǎn)型型數(shù)據(jù)數(shù)據(jù)3.2.63.2.6 怎樣確定常量的類型怎樣確定常量的類型 3.2.7 3.2.7 算術(shù)運(yùn)算符和算術(shù)表達(dá)式算術(shù)運(yùn)算符和算術(shù)表達(dá)式 1. 常量和符號常量常量和符號常量 在程序運(yùn)行過程中,其值不能被改變的量稱為常量 常量區(qū)分為不同的類型:整型 100,125,-100,0實(shí)型 3.14 , 0.125,-3.789字符型 a

5、, b,2,t字符串 “a”, “ab”,“1232”例例 符號常量的使用符號常量的使用#define PRICE 30#include void main ( ) int num, total; num=10; total=num * PRICE; printf(total=%dn,total); 程序中用#define命令行定義PRICE代表常量30,此后凡在本文件中出現(xiàn)的PRICE都代表30,可以和常量一樣進(jìn)行運(yùn)算用一個標(biāo)識符代表一個常量的,稱為符號常量,即以標(biāo)識符形式出現(xiàn)的常量。符號常量的值在其作用域(在本例中為主函數(shù))內(nèi)不能改變,也不能再被賦值。 如再用賦值語句給PRICE賦值是錯誤

6、的。 PRICE=40; /* 錯誤,不能給符號常量賦值。 運(yùn)行結(jié)果:運(yùn)行結(jié)果: total=300total=3002變量變量 變量代表內(nèi)存中具有特定屬性的一個存儲單元,它用來存放數(shù)據(jù),這就是變量的值,在程序運(yùn)行期間,這些值是可以改變的。 變量名實(shí)際上是一個以一個名字對應(yīng)代表一個地址,在對程序編譯連接時由編譯系統(tǒng)給每一個變量名分配對應(yīng)的內(nèi)存地址。從變量中取值,實(shí)際上是通過變量名找到相應(yīng)的內(nèi)存地址,從該存儲單元中讀取數(shù)據(jù)。 變量命名的規(guī)定:語言規(guī)定標(biāo)識符只能由字母、數(shù)字和下劃線三種字符組成,且第一個字符必須為字母或下劃線。 例:例:sum,_total, month, Student_name

7、, lotus_1_2_,BASIC, li_ling M.D.John, ¥123,3D64,ab 編譯系統(tǒng)將大寫字母和小寫字母認(rèn)為是兩個不同的字符。 建議變量名的長度最好不要超過8個字符。 在選擇變量名和其它標(biāo)識符時,應(yīng)注意做到“見名知意”,即選有含意的英文單詞 (或其縮寫)作標(biāo)識符。 要求對所有用到的變量作強(qiáng)制定義,也就是“先定義,后使用” 。C語言提供了以下一些數(shù)據(jù)類型。 1 整型常量的表示方法整型常量的表示方法 整型常量即整常數(shù)。在語言中,整常數(shù)可用以下三種形式表示:(1)十進(jìn)制整數(shù)。 如:如:123, -456.4。(2)八進(jìn)制整數(shù)。以0頭的數(shù)是八進(jìn)制數(shù)。 如:如:0123表示八進(jìn)

8、制數(shù)123,等于十進(jìn)制數(shù)83,-011表示八進(jìn)制數(shù)-11,即十進(jìn)制數(shù)-9。(3)十六進(jìn)制整數(shù)。以0 x開頭的數(shù)是16進(jìn)制數(shù)。 如:如:0 x123,代表16進(jìn)制數(shù)123,等于十進(jìn)制數(shù) 291。 -0 x12等于十進(jìn)制數(shù)10。 2 整型變量整型變量 (1)(1)整型數(shù)據(jù)在內(nèi)存中的存放形式整型數(shù)據(jù)在內(nèi)存中的存放形式 數(shù)據(jù)在內(nèi)存中是以二進(jìn)制形式存放的。 如如: : int i; /* 定義為整型變量 */ i=10; /* 給i賦以整數(shù)10 */ 十進(jìn)制數(shù)10的二進(jìn)制形式為1010,Turbo C 2.0和Turbo C+ 3.0為一個整型變量在內(nèi)存中分配2個字節(jié)的存儲單元(不同的編譯系統(tǒng)為整型數(shù)據(jù)

9、分配的字節(jié)數(shù)是不相同的,VC+ 6.0則分配4個字節(jié))。 數(shù)值是以補(bǔ)碼(complement) 表示的。 (2)(2)整型變量的分類:整型變量的分類:共六種共六種有符號基本整型有符號短整型有符號長整型無符號基本整型無符號短整型無符號長整型(signed)int (signed)short (int )(signed) long (int)unsigned intunsigned short (int)unsigned long (int) 注意:注意:括號表示其中的內(nèi)容是可選的. 整數(shù)類型的有關(guān)數(shù)據(jù):(3)(3)整型變量的定義整型變量的定義: : 規(guī)定在程序中所有用到的變量都必須在程序中定義,

10、即“強(qiáng)制類型定義”。 例如例如: : intint a,ba,b(指定變量、為整型) unsigned short unsigned short c,dc,d; ;(指定變量、為無符號短整型) long long e,fe,f; ;(指定變量、為長整型)例例 整型變量的定義與使用整型變量的定義與使用#include void main() int a,b,c,d; /*指定、為整型變量* unsigned int ; *指定為無符號整型變量* 12;-24;10; ; printf(,); 可以看到不同種類的整型數(shù)據(jù)可以進(jìn)行算術(shù)運(yùn)算 運(yùn)行結(jié)果:運(yùn)行結(jié)果: , 例例 整型數(shù)據(jù)的溢出整型數(shù)據(jù)的溢出

11、#include void main()int a,b; a=32767; b=a+1; printf(“%d,%dn”,a,b);數(shù)值是以補(bǔ)碼表示的。一個整型變量只能容納-3276832767范圍內(nèi)的數(shù),無法表示大于32767或小于-32768的數(shù)。遇此情況就發(fā)生“溢出”。運(yùn)行結(jié)果:運(yùn)行結(jié)果: 32767,-3276832767,-32768整型常量的類型整型常量的類型 (1)一個整數(shù),如果其值在-32768+32767范圍內(nèi),認(rèn)為它是int型,它可以賦值給int型和long int型變量。 (2) 一個整數(shù),如果其值超過了上述范圍,而在-2147483637+2147483647范圍內(nèi),則

12、認(rèn)為它是為長整型??梢詫⑺x值給一個long int型變量。 (3) 如果所用的C版本(如Turbo C)分配給short int與int型數(shù)據(jù)在內(nèi)存中占據(jù)的長度相同,則它的表數(shù)范圍與int型相同。因此一個int型的常量同時也是一個short int型常量,可以賦給int型或short int型變量。(4) 一個整常量后面加一個字母u或U,認(rèn)為是unsigned int型,如12345u,在內(nèi)存中按unsigned int規(guī)定的方式存放(存儲單元中最高位不作為符號位,而用來存儲數(shù)據(jù))。如果寫成-12345u,則先將-12345轉(zhuǎn)換成其補(bǔ)碼53191,然后按無符號數(shù)存儲。(5) 在一個整常量后面

13、加一個字母l或L,則認(rèn)為是long int型常量。例如123l.432L.0L等。這往往用于函數(shù)調(diào)用中。如果函數(shù)的形參為long int型,則要求實(shí)參也為long int型。1 字符常量字符常量(1)用單引號包含的一個字符是字符型常量(2)只能包含一個字符a a, ,A A, , 1 1abcabc、“a a” 有些以有些以“ ”開頭的特殊字符稱為轉(zhuǎn)義字符開頭的特殊字符稱為轉(zhuǎn)義字符n 換行t 橫向跳格r 回車 反斜杠ddd ddd表示1到3位八進(jìn)制數(shù)字xhh hh表示1到2位十六進(jìn)制數(shù)字例例 轉(zhuǎn)義字符的使用轉(zhuǎn)義字符的使用#include void () ( ab ct derftgn); pr

14、intf(htibbj kn); 打印機(jī)上的顯示結(jié)果:打印機(jī)上的顯示結(jié)果: fab c gde h jik 顯示屏上顯示屏上的運(yùn)行結(jié)果:的運(yùn)行結(jié)果: f gde j k2字符變量字符變量 字符型變量用來存放字符常量,注意只能放一個字符。 字符變量的定義形式如下:char c1,c2; 在本函數(shù)中可以用下面語句對c1,c2賦值: c1a;c2 b ; 一個字符變量在內(nèi)存中占一個字節(jié)。 3字符數(shù)據(jù)在內(nèi)存中的存儲形式及其使用方法字符數(shù)據(jù)在內(nèi)存中的存儲形式及其使用方法 將一個字符常量放到一個字符變量中,實(shí)際上并不是把該字符本身放到內(nèi)存單元中去,而是將該字符的相應(yīng)的ASCII代碼放到存儲單元中。這樣使字

15、符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用。一個字符數(shù)據(jù)既可以以字符形式輸出,也可以以整數(shù)形式輸出。例例 向字符變量賦以整數(shù)。向字符變量賦以整數(shù)。#include void main() char c1,c2; c1=97; c2=98; printf(“%c %cn”,c1,c2); printf(“%d %dn”,c1,c2); 在第和第4行中,將整數(shù)和分別賦給c1和c2,它的作用相當(dāng)于以下兩個賦值語句: c1;c2;因為a和b的ASCII碼為和 運(yùn)行結(jié)果:運(yùn)行結(jié)果: 97 9897 98 有些系統(tǒng)(如Turbo C)將字符變量定義為signed char型。其存儲單元中的最高位作為符號位,它的取值范

16、圍是-128127。如果在字符變量中存放一個ASCII碼為0127間的字符,由于字節(jié)中最高位為0,因此用%d輸出字符變量時,輸出的是一個正整數(shù)。如果在字符變量中存放一個ASCII碼為128255間的字符,由于在字節(jié)中最高位為1,用%d格式符輸出時,就會得到一個負(fù)整數(shù)。 4字符串常量字符串常量 字符串常量是一對雙撇號括起來的字符序列. 合法的字符串常量:“How do you do.”, “CHINA”, “a” , “$123.45” 可以輸出一個字符串,如printf(“How do you do.”); 是字符常量,“”是字符串常量,二者不同。 如:如:假設(shè)被指定為字符變量 :char c

17、 c=a; ”a”;c”CHINA”; 結(jié)論:結(jié)論:不能把一個字符串常量賦給一個字符變量。 規(guī)定:在每一個字符串常量的結(jié)尾加一個 “字符串結(jié)束標(biāo)志”,以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。規(guī)定以字符作為字符串結(jié)束標(biāo)志。 如:如:如果有一個字符串常量” ,實(shí)際上在內(nèi)存中是:CHINA0 它占內(nèi)存單元不是個字符,而是個字符,最后一個字符為。但在輸出時不輸出。1 1浮點(diǎn)型常量的表示方法浮點(diǎn)型常量的表示方法兩種表兩種表示形式示形式小數(shù)小數(shù)指數(shù)指數(shù)0.1230.1233 3e-3e-3注意注意: :字母e(或E)之前必須有數(shù)字,且e后面的指數(shù)必須為整數(shù) 規(guī)范化的指數(shù)形式:規(guī)范化的指數(shù)形式: 在字母e(或E)之

18、前的小數(shù)部分中,小數(shù)點(diǎn)左邊應(yīng)有一位(且只能有一位)非零的數(shù)字. 例如例如: : 123.456可以表示為: 123.456e0, 12.3456e1, 1.23456e2, 0.123456e3, 0.0123456e4, 0.00123456e 其中的1.23456e31.23456e3稱為“規(guī)范化的指數(shù)形式”。 2 浮點(diǎn)型變量浮點(diǎn)型變量(1)(1)浮點(diǎn)型數(shù)據(jù)在內(nèi)存中的存放形式浮點(diǎn)型數(shù)據(jù)在內(nèi)存中的存放形式 一個浮點(diǎn)型數(shù)據(jù)一般在內(nèi)存中占4個字節(jié)(32位)。與整型數(shù)據(jù)的存儲方式不同,浮點(diǎn)型數(shù)據(jù)是按照指數(shù)形式存儲的。系統(tǒng)把一個浮點(diǎn)型數(shù)據(jù)分成小數(shù)部分和指數(shù)部分,分別存放。指數(shù)部分采用規(guī)范化的指數(shù)形式

19、。(2) (2) 浮點(diǎn)型變量的分類浮點(diǎn)型變量的分類 浮點(diǎn)型變量分為單精度(float型)、雙精度(double型)和長雙精度型(long double)三類形式。例例 浮點(diǎn)型數(shù)據(jù)的舍入誤差浮點(diǎn)型數(shù)據(jù)的舍入誤差#include void main()float a,b; a = 123456.789e5; b = a + 20 ; printf(“%fn”,b); 一個浮點(diǎn)型變量只能保證的有效數(shù)字是7位有效數(shù)字,后面的數(shù)字是無意義的,并不準(zhǔn)確地表示該數(shù)。應(yīng)當(dāng)避免將一個很大的數(shù)和一個很小的數(shù)直接相加或相減,否則就會“丟失”小的數(shù)運(yùn)行結(jié)果:運(yùn)行結(jié)果: 123456.789e5123456.789e5

20、 3 浮點(diǎn)型常量的類型浮點(diǎn)型常量的類型 C編譯系統(tǒng)將浮點(diǎn)型常量作為雙精度來處理。 例如例如:f = 2.45678 * 4523.65 系統(tǒng)先把2.45678和4523.65作為雙精度數(shù),然后進(jìn)行相乘的運(yùn)算,得到的乘也是一個雙精度數(shù)。最后取其前7位賦給浮點(diǎn)型變量f。如是在數(shù)的后面加字母f或F(如1.65f, 654.87F),這樣編譯系統(tǒng)就會把它們按單精度(32位)處理。運(yùn)算符簡介運(yùn)算符簡介 的運(yùn)算符有以下幾類:的運(yùn)算符有以下幾類:(1)算術(shù)運(yùn)算符 (+ - * / %)(2)關(guān)系運(yùn)算符 (?。?3)邏輯運(yùn)算符 (!|)(4)位運(yùn)算符 ( |)(5)賦值運(yùn)算符 (及其擴(kuò)展賦值運(yùn)算符)(6)條件

21、運(yùn)算符 (?:)(7)逗號運(yùn)算符 (,)(8)指針運(yùn)算符 (*和)(9)求字節(jié)數(shù)運(yùn)算符()(10)強(qiáng)制類型轉(zhuǎn)換運(yùn)算符( (類型) )(11)分量運(yùn)算符(-)(12)下標(biāo)運(yùn)算符()(13)其他 (如函數(shù)調(diào)用運(yùn)算符()1算術(shù)運(yùn)算算術(shù)運(yùn)算符和算術(shù)表達(dá)式符和算術(shù)表達(dá)式 (1)(1)基本的算術(shù)運(yùn)算符基本的算術(shù)運(yùn)算符: : (加法運(yùn)算符,或正值運(yùn)算符。如:、) (減法運(yùn)算符,或負(fù)值運(yùn)算符。如:、)* * (乘法運(yùn)算符。如:*) (除法運(yùn)算符。如:) (模運(yùn)算符,或稱求余運(yùn)算符,兩側(cè)均應(yīng)為整型數(shù)據(jù),如:的值為)。(2) (2) 算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級與結(jié)合性基算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級與結(jié)合性基本的算術(shù)

22、運(yùn)算符本的算術(shù)運(yùn)算符: : 用算術(shù)運(yùn)算符和括號將運(yùn)算對象(也稱操作數(shù))連接起來的、符合語法規(guī)則的式子,稱為算術(shù)表達(dá)式。運(yùn)算對象包括常量、變量、函數(shù)等。 例如例如: : *.5a 是一個合法的表達(dá)式 語言規(guī)定了運(yùn)算符的優(yōu)先級和結(jié)合性。 在表達(dá)式求值時,先按運(yùn)算符的優(yōu)先級別高低次序執(zhí)行,例如先乘除后加減。 規(guī)定了各種運(yùn)算符的結(jié)合方向(結(jié)合性) 算術(shù)運(yùn)算符的結(jié)合方向為“自左至右”,即先左后右 。(3)(3)強(qiáng)制類型轉(zhuǎn)換運(yùn)算符強(qiáng)制類型轉(zhuǎn)換運(yùn)算符 可以利用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符將一個表達(dá)式轉(zhuǎn)換成所需類型。 一般形式:(類型名)(表達(dá)式)例如:例如:(double) 將轉(zhuǎn)換成double類型(int)(x+y

23、) 將x+y的值轉(zhuǎn)換成整型(float)(5%3) 將5%3的值轉(zhuǎn)換成float型例例 強(qiáng)制強(qiáng)制類型轉(zhuǎn)換。類型轉(zhuǎn)換。#include void() ; ; ; (); printf(x=%f, i=%dn,x,i); 有兩種類型轉(zhuǎn)換,一種是在運(yùn)算時不必用戶指定,系統(tǒng)自動進(jìn)行的類型轉(zhuǎn)換,如3+6.5。第二種是強(qiáng)制類型轉(zhuǎn)換。當(dāng)自動類型轉(zhuǎn)換不能實(shí)現(xiàn)目的時,可以用強(qiáng)制類型轉(zhuǎn)換。 運(yùn)行結(jié)果:運(yùn)行結(jié)果: x3.600000, i=3(4)(4) 自增、自減運(yùn)算符自增、自減運(yùn)算符 作用是使變量的值增或減如如: ,(在使用之前,先使的值加 (減),(在使用之后,使的值加( 減) i+i+與與+i+i的區(qū)別:的

24、區(qū)別: 是先執(zhí)行后,再使用的值; 是先使用的值后,再執(zhí)行。例如:例如: ; i的值先變成4, 再賦給,j的值均為 ; 先將 i的值3賦給,的值為,然后變?yōu)樽⒁猓鹤⒁猓?(1)自增運(yùn)算符(),自減運(yùn)算符(),只能用于變量,而不能用于常量或表達(dá)式, (2)和的結(jié)合方向是“自右至左”。 自增(減)運(yùn)算符常用于循環(huán)語句中使循環(huán)變量自動加。也用于指針變量,使指針指向下一個地址 (5) (5) 有關(guān)表達(dá)式使用中的問題說明有關(guān)表達(dá)式使用中的問題說明 ANSI C并沒有具體規(guī)定表達(dá)式中的子表達(dá)式的求值順序,允許各編譯系統(tǒng)自己安排。 例如:對表達(dá)式 a = f1( )+f2( ) 并不是所有的編譯系統(tǒng)都先調(diào)用f

25、1( ), 然后調(diào)用f2( )。在有的情況下結(jié)果可能不同。有時會出現(xiàn)一些令人容易搞混的問題,因此務(wù)必要小心謹(jǐn)慎。 語言中有的運(yùn)算符為一個字符,有的運(yùn)算符由兩個字符組成 ,為避免誤解,最好采取大家都能理解的寫法。 例如:不要寫成i+j的形式,而應(yīng)寫成 (i+)+j的形式 在調(diào)用函數(shù)時,實(shí)參數(shù)的求值順序,標(biāo)準(zhǔn)并無統(tǒng)一規(guī)定。例如:例如:的初值為,如果有下面的函數(shù)調(diào)用: printf(,i+) 在有的系統(tǒng)中,從左至右求值,輸出“,”。在多數(shù)系統(tǒng)中對函數(shù)參數(shù)的求值順序是自右而左,函數(shù)輸出的是“,”。以上這種寫法不宜提倡, 最好改寫成 j = i+;j = i+; printf(%d printf(%d,

26、 %d%d, j j,i)i)不要寫出別人看不懂的也不知道系統(tǒng)會怎樣執(zhí)行程序4 各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算 整型(包括int,short,long)、浮點(diǎn)型(包括float,double)可以混合運(yùn)算。在進(jìn)行運(yùn)算時,不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算.上述的類型轉(zhuǎn)換是由系統(tǒng)自動進(jìn)行的例例 大大小寫字母的轉(zhuǎn)換小寫字母的轉(zhuǎn)換#include void main() char c1,c2; c1=a; c2=b;c1=c1-32;c2=c2-32; printf(“c c,c1,c2); 程序的作用是將兩個小寫字母a和b轉(zhuǎn)換成大寫字母A和B。從代碼表中可以看到每一個小寫字母比它相應(yīng)的大寫

27、字母的碼大。語言允許字符數(shù)據(jù)與整數(shù)直接進(jìn)行算術(shù)運(yùn)算。 運(yùn)行結(jié)果:運(yùn)行結(jié)果: C程序源程序文件1源程序文件2源程序文件n預(yù)處理命令函數(shù)n函數(shù)1數(shù)據(jù)聲明函數(shù)首部函數(shù)體數(shù)據(jù)聲明執(zhí)行語句 一個c程序可以有若干個源程序文件組成 一個源文件可以有若干個函數(shù)和預(yù)處理命令以及全局變量聲明部分組成 一個函數(shù)有函數(shù)首部和函數(shù)體組成 函數(shù)體由數(shù)據(jù)聲明和執(zhí)行語句組成 C語句分為5類類控制語句函數(shù)調(diào)用語句表達(dá)式語句空語句復(fù)合語句(一)控制語句 完成一定的控制功能1 if() else 條件條件語句語句 6 break 間斷語句間斷語句 2 for() 循環(huán)循環(huán)語句語句 7 switch() 開關(guān)語句開關(guān)語句3 whil

28、e()循環(huán)循環(huán)語句語句 8 goto 轉(zhuǎn)向語句轉(zhuǎn)向語句 4 do while();循環(huán)循環(huán)語句語句 9 return 返回語句返回語句5 continue 繼續(xù)繼續(xù)語句語句(二)函數(shù)調(diào)用語句 有一個函數(shù)調(diào)用加一個分號構(gòu)成一個語句 Printf(“This is a C statement.”);(三)表達(dá)式語句 有一個表達(dá)式加一個分號構(gòu)成一個語句 a = 3 ;分號賦值表達(dá)式表達(dá)式語句(四)空語句 只有一個分號的語句 (什么也不做)(什么也不做) 用來做流程的轉(zhuǎn)向點(diǎn)用來做流程的轉(zhuǎn)向點(diǎn) 用來作為循環(huán)語句中的循環(huán)體用來作為循環(huán)語句中的循環(huán)體(五)復(fù)合語句 用一對括起來的語句 z=x+y;t=z/1

29、00;printf(“%f”,t);賦值語句是由賦值表達(dá)式加上一個分號構(gòu)成例:例:a=100 賦值表達(dá)式 a=100; 賦值語句條件中不能含有賦值符號,但是賦值表達(dá)式可以包含于條件表達(dá)式中例:例:if(a=b) t=a; 錯誤 if(a=b)0) t=a; 正確C語言中的賦值號“=”是一個運(yùn)算符,在其他大多數(shù)語言中賦值號不是運(yùn)算符.其他大多數(shù)高級語言沒有“賦值表達(dá)式”這一概念.(1)(1)賦值運(yùn)算符賦值運(yùn)算符 賦值符號“”就是賦值運(yùn)算符,它的作用是將一個數(shù)據(jù)賦給一個變量。如“”的作用是執(zhí)行一次賦值操作(或稱賦值運(yùn)算)。把常量賦給變量。也可以將一個表達(dá)式的值賦給一個變量. (2) (2)類型轉(zhuǎn)換

30、類型轉(zhuǎn)換 如果賦值運(yùn)算符兩側(cè)的類型不一致,但都是數(shù)值型或字符型時,在賦值時要進(jìn)行類型轉(zhuǎn)換。將浮點(diǎn)型數(shù)據(jù)(包括單、雙精度)賦給整型變量時,舍棄浮點(diǎn)數(shù)的小數(shù)部分。如如: :為整型變量,執(zhí)行“i=3.56”的結(jié)果是使的值為,以整數(shù)形式存儲在整型變量中. 將整型數(shù)據(jù)賦給單、雙精度變量時,數(shù)值不變,但以浮點(diǎn)數(shù)形式存儲到變量中 如如: : 將賦給float變量,即執(zhí)行,先將轉(zhuǎn)換成,再存儲在中。 將賦給型變量,即執(zhí)行,則將補(bǔ)足有效位數(shù)字為,然后以雙精度浮點(diǎn)數(shù)形式存儲到變量中。 將一個double型數(shù)據(jù)賦給float變量時,截取其前面7位有效數(shù)字,存放到float變量的存儲單元(4個字節(jié))中。但應(yīng)注意數(shù)值范圍

31、不能溢出。 如如: :float f;double d=123.456789e100; f=d; 就出現(xiàn)溢出的錯誤。 如果將一個float型數(shù)據(jù)賦給double變量時,數(shù)值不變,有效位數(shù)擴(kuò)展到16位,在內(nèi)存中以8個字節(jié)存儲字符型數(shù)據(jù)賦給整型變量時,由于字符只占1個字節(jié),而整型變量為個字節(jié),因此將字符數(shù)據(jù)(個二進(jìn)位)放到整型變量存儲單元的低位中。第一種情況: 如果所用系統(tǒng)將字符處理為無符號的字符類型,或程序已將字符變量定義為 型,則將字符的位放到整型變量低位,高位補(bǔ)零例如:例如:將字符賦給型變量第二種情況: 如果所用系統(tǒng)(如Turbo C+)將字符處理為帶符號的(即signed char),若字

32、符最高位為,則整型變量高位補(bǔ);若字符最高位為,則高位全補(bǔ)。這稱為“符號擴(kuò)展”,這樣做的目的是使數(shù)值保持不變,如變量(字符)以整數(shù)形式輸出為,的值也是。將一個int、short、long型數(shù)據(jù)賦給一個char型變量時,只將其低8位原封不動地送到char型變量(即截斷)。例如:例如:int i=289;char c=a;c=i; 賦值情況 :c的值為33, 如果用“%c”輸出c,將得到字符“!” (其ASCII碼為33)。 將帶符號的整型數(shù)據(jù)(int型)賦給long型變量時,要進(jìn)行符號擴(kuò)展,將整型數(shù)的16位送到long型低16位中:如果int型數(shù)據(jù)為正值(符號位為),則long型變量的高16位補(bǔ);

33、如果int型變量為負(fù)值(符號位為),則long型變量的高16位補(bǔ),以保持?jǐn)?shù)值不改變。 反之,若將一個long型數(shù)據(jù)賦給一個int型變量,只將long型數(shù)據(jù)中低16位原封不動地送到整型變量(即截斷)。 例如:例如:int a; long b;a=b 賦值情況如圖 :如果(八進(jìn)制數(shù)),則賦值后值為。見圖3.14 將unsigned int型數(shù)據(jù)賦給long int型變量時,不存在符號擴(kuò)展問題,只需將高位補(bǔ)即可。將一個unsigned類型數(shù)據(jù)賦給一個占字節(jié)數(shù)相同的非unsigned型整型變量(例如:unsigned int -int,unsigned long-long,unsigned short

34、-short),將unsigned型變量的內(nèi)容原樣送到非unsigned型變量中,但如果數(shù)據(jù)范圍超過相應(yīng)整型的范圍,則會出現(xiàn)數(shù)據(jù)錯誤。例如:例如:unsigned int 65535; int b;; 將整個送到中,由于是int,第位是符號位,因此b成了負(fù)數(shù)。根據(jù)補(bǔ)碼知識可知,的值為-1,可以用printf(%d,);來驗證。 將非unsigned型數(shù)據(jù)賦給長度相同的unsigned型變量,也是原樣照賦(連原有的符號位也作為數(shù)值一起傳送)。 (3) (3) 復(fù)合的賦值運(yùn)算符復(fù)合的賦值運(yùn)算符 在賦值符“”之前加上其他運(yùn)算符,可以構(gòu)成復(fù)合的運(yùn)算符。例如例如: 等價于 * 等價于 *() 等價于 以

35、“”為例來說明,它相當(dāng)于使進(jìn)行一次自加()的操作。即先使加,再賦給。為便于記憶,可以這樣理解:為便于記憶,可以這樣理解: a += b (其中a為變量,b為表達(dá)式) a += b(將有下劃線的“a+”移到“=”右側(cè)) |_ a = a + b (在“=”左側(cè)補(bǔ)上變量名a) 注意注意: :如果是包含若干項的表達(dá)式,則相當(dāng)于它有如果是包含若干項的表達(dá)式,則相當(dāng)于它有 括號。括號。如:如: x %= y+3 x %= (y+3) |_ x = x %(y+3)(不要錯寫成x=x%y+3) 凡是二元(二目)運(yùn)算符,都可以與賦值符一起組合成復(fù)合賦值符。 語言規(guī)定可以使用種復(fù)合賦值運(yùn)算符:語言規(guī)定可以使用

36、種復(fù)合賦值運(yùn)算符:,* *,| | (4) (4) 賦值表達(dá)式賦值表達(dá)式 由賦值運(yùn)算符將一個變量和一個表達(dá)式連接起來的式子稱為“賦值表達(dá)式”。一般形式為一般形式為: 例如例如: “5”是一個賦值表達(dá)式 對賦值表達(dá)式求解的過程是:對賦值表達(dá)式求解的過程是: 求賦值運(yùn)算符右側(cè)的“表達(dá)式”的值; 賦給賦值運(yùn)算符左側(cè)的變量。例如例如: 賦值表達(dá)式“=3*5”的值為15,執(zhí)行表達(dá)式后,變量a的值也是15。 注意注意: 一個表達(dá)式應(yīng)該有一個值一個表達(dá)式應(yīng)該有一個值 左值左值 ( (lvaluelvalue) ) : 賦值運(yùn)算符左側(cè)的標(biāo)識符變量可以作為左值;而表達(dá)式就不能作為左值(如a+b);常變量也不能作

37、為左值, 右值右值 (lvalue)(lvalue) :出現(xiàn)在賦值運(yùn)算符右側(cè)的表達(dá)式 左值也可以出現(xiàn)在賦值運(yùn)算符右側(cè),因而左值 都可以作為右值。 賦值表達(dá)式中的“表達(dá)式”,又可以是一個賦值表達(dá)式.例如例如: : a=(b=5) 分析分析: :括弧內(nèi)的“b=5”是一個賦值表達(dá)式,它的值等于5。執(zhí)行表達(dá)式“a=(b=5)”相當(dāng)于執(zhí)行“b=5”和“ab”兩個賦值表達(dá)式。 賦值運(yùn)算符按照“自右而左”的結(jié)合順序,因此,“(b5)”外面的括弧可以不要,即“a=(b=5)”和“a=b=5”等價.請分析下面的賦值表達(dá)式(a=3*5)=4*3分析分析: :先執(zhí)行括弧內(nèi)的運(yùn)算,將15賦給a,然后執(zhí)行4*3的運(yùn)算,

38、得12,再把12賦給a。最后a的值為12,整個表達(dá)式的值為12??梢钥吹?a=3*5)出現(xiàn)在賦值運(yùn)算符的左側(cè),因此賦值表達(dá)式(a=3*5)是左值 注意注意: :在對賦值表達(dá)式(a=3*5)求解后,變量a得到值15執(zhí)行(a=3*5)=4*3時,實(shí)際上是將4*3的積12賦給變量a,而不是賦給3*5。不能寫成:a=3*5=4*3賦值表達(dá)式也可以包含復(fù)合的賦值運(yùn)算符。 如:如:a+=a-=a*a分析分析: :此賦值表達(dá)式的求解步驟如下 先進(jìn)行“*”的運(yùn)算, 它相當(dāng)于*,a的值為144132。再進(jìn)行“”的運(yùn)算,相當(dāng)于=a+(-132),a的值為132-132-264。 將賦值表達(dá)式作為表達(dá)式的一種,使賦

39、值操作不僅可以出現(xiàn)在賦值語句中,而且可以以表達(dá)式形式出現(xiàn)在其他語句(如輸出語句、循環(huán)語句等)中. 如:如:printf(%d,a=b); 分析分析: :如果b的值為3, 則輸出a的值(也是表達(dá)式a=b的值)為3。在一個語句中完成了賦值和輸出雙重功能。字符串常量(1)語言允許在定義變量的同時使變量初始化如如: : int a=3; / 指定為整型變量,初值為 float f=3.56; / 指定為浮點(diǎn)型變量,初值為.56 char c= a; / 指定為字符變量,初值為a (2)可以使被定義的變量的一部分賦初值。 如如: : int a,b,c=5; 表示指定、為整型變量,但只對初始化,c的初值

40、為(3)如果對幾個變量賦以同一個初值, 應(yīng)寫成:int a=3,b=3,c=3; 表示、的初值都是。 不能寫成 int a=b=c3; 注意:注意:初始化不是在編譯階段完成的而是在程序運(yùn)行時執(zhí)行本函數(shù)時賦初值的,相當(dāng)于有一個賦值語句。 (一).所謂輸入輸出是以計算機(jī)主機(jī)為主體而言的輸出輸出:從計算機(jī)向外部輸出設(shè)備(顯示器,打印機(jī)) 輸出數(shù)據(jù)輸入輸入:從輸入設(shè)備(鍵盤,鼠標(biāo),掃描儀)向計算機(jī) 輸入數(shù)據(jù).(二).C語言本身不提供輸入輸出語句,輸入和輸出操作是由C函數(shù)庫中的函數(shù)來實(shí)現(xiàn)的例如例如: :字符輸入函數(shù): getchar 字符輸出函數(shù):putchar格式輸入函數(shù): scanf 格式輸出函數(shù):

41、 printf字符串輸入函數(shù):gets 字?jǐn)?shù)穿輸出函數(shù):puts(三).在使用系統(tǒng)庫函數(shù)時,要用預(yù)編譯命令“#include”將有關(guān)的“頭文件”包括到用戶源文件中.例如:在調(diào)用標(biāo)準(zhǔn)輸入輸出庫函數(shù)時,文件開頭應(yīng)該有: #include “stdio.h” 或: #include 頭文件(一).格式輸出函數(shù) 函數(shù)作用:向終端(或系統(tǒng)隱含指定的輸出設(shè)備函數(shù)作用:向終端(或系統(tǒng)隱含指定的輸出設(shè)備)輸出)輸出若干個任意類型若干個任意類型的數(shù)據(jù)。的數(shù)據(jù)。 一般格式:一般格式:printfprintf(格式控制,輸出表列)(格式控制,輸出表列)%d%d: :以帶符號的十進(jìn)制形式輸出整數(shù)以帶符號的十進(jìn)制形式輸

42、出整數(shù)%o%o: :以八進(jìn)制無符號形式輸出整數(shù)以八進(jìn)制無符號形式輸出整數(shù)%x%x: :以十六進(jìn)制無符號形式輸出整數(shù)以十六進(jìn)制無符號形式輸出整數(shù)To be continuedTo be continued%u%u: :以無符號十進(jìn)制形式輸出整數(shù)以無符號十進(jìn)制形式輸出整數(shù)%c%c: :以字符形式輸出,只輸出一個字符以字符形式輸出,只輸出一個字符%s%s: :輸出字符串輸出字符串%f%f: :以小數(shù)形式輸出單,雙精度數(shù),隱含輸出六位小數(shù)以小數(shù)形式輸出單,雙精度數(shù),隱含輸出六位小數(shù)%e%e: :以指數(shù)形式輸出實(shí)數(shù)以指數(shù)形式輸出實(shí)數(shù)%g%g: :選用選用%f%f或或%e%e格式中輸出寬度較短的一種格式,

43、不輸格式中輸出寬度較短的一種格式,不輸 出無意義的出無意義的0 0幾種常見的格式符的修飾符:L:用于長整型整數(shù),可加在格式符d,o,x,u前面M(代表一個正整數(shù)):數(shù)據(jù)最小寬度N(代表一個正整數(shù)):對實(shí)數(shù),表示輸出n位小數(shù); 對字符串,表示截取的字符個數(shù):輸出的數(shù)字或字符在域內(nèi)向左靠(1)格式符格式符。用來輸出十進(jìn)制整數(shù)。幾種用法: :按十進(jìn)制整型數(shù)據(jù)的實(shí)際長度輸出。 :為指定的輸出字段的寬度。如果數(shù)據(jù)的位數(shù)小于, 則左端補(bǔ)以空格,若大于,則按實(shí)際位數(shù)輸出。 例: (,); 若,則輸出結(jié)果為 , :輸出長整型數(shù)據(jù)。 例: ;/* 定義a為長整型變量*/ (,);(2) 格式符格式符。以八進(jìn)制整

44、數(shù)形式輸出。輸出的數(shù)值不帶符號,符號位也一起作為八進(jìn)制數(shù)的一部分輸出。例:int a=-1; printf(%d,%o,a,a); 在內(nèi)存單元中的存放形式(以補(bǔ)碼形式存放)如下: 1111111111111111 輸出為: ,不會輸出帶負(fù)號的八進(jìn)制整數(shù)。對長整數(shù)(型)可以用“”格式輸出。還可以指定字段寬度,例:(,); 輸出為: 177777。 (數(shù)字前有2個空格)(3)格式符格式符。以十六進(jìn)制數(shù)形式輸出整數(shù)。同樣不會出現(xiàn)負(fù)的十六進(jìn)制數(shù)。例: ; (,); 輸出結(jié)果為: ffff,可以用“”輸出長整型數(shù),也可以指定輸出字段的寬度例: “”(4)格式符格式符,用來輸出型數(shù)據(jù).一個有符號整數(shù)(型)

45、也可以用格式輸出;一個型數(shù)據(jù)也可以用格式輸出。型數(shù)據(jù)也可用或格式輸出。(5)格式符格式符,用來輸出一個字符。如:d; (,d); 輸出字符.一個整數(shù),只要它的值在范圍內(nèi),可以用“”使之按字符形式輸出,在輸出前,系統(tǒng)會將該整數(shù)作為ASCII碼轉(zhuǎn)換成相應(yīng)的字符;一個字符數(shù)據(jù)也可以用整數(shù)形式輸出。 例 無符號數(shù)據(jù)的輸出。#includevoid main()unsigned int a=65535;int b=-2;printf(“a=%d,%o,%x,%un”,a,a,a,a);printf(“b=%d,%o,%x,%un”,b,b,b,b); 運(yùn)行結(jié)果:運(yùn)行結(jié)果:a=-1a=-1,1777771

46、77777,ffffffff,6553565535b=-2b=-2,177776177776,fffefffe,6553465534例 字符數(shù)據(jù)的輸出。#includevoid main()char c=a;int i=97;printf(“%c,%dn”,c,c);printf(“%c,%dn”,i,i); 運(yùn)行結(jié)果:運(yùn)行結(jié)果:a,97a,97a,97a,97指定輸出字?jǐn)?shù)的寬度,指定輸出字?jǐn)?shù)的寬度,printf(printf(“%3c%3c”,c);,c);則輸出:則輸出: a a(6)s s格式符格式符 輸出字符串. 。例如: (,) 輸出字符串“”(不包括雙引號)。 %ms,輸出的字符串

47、占m列,若串長大于m,則全部輸出,若串長 小于m,則左補(bǔ)空格。 %-ms,若串長小于m,字符串向左靠,右補(bǔ)空格。 %m. ns,輸出占m列,只取字符串中左端n個字符,輸出在m列的 右側(cè),左補(bǔ)空格。 %-m.ns,n個字符輸出在m列的左側(cè),右補(bǔ)空格,若nm,m自 動取n值。例例 字符串的輸出。#includevoid main()printf(“%3s,%7.2s,%.4s,%-5.3sn”, “CHINA”, “CHINA”, “CHINA”, “CHINA”); 運(yùn)行結(jié)果:運(yùn)行結(jié)果:CHINACHINA, CH ,CHIN,CHI CH ,CHIN,CHI (7)格式符。格式符。用來以小數(shù)形

48、式輸出實(shí)數(shù)(包括單雙精度)有以下幾種用法: 。不指定字段寬度,由系統(tǒng)自動指定字段寬度,使整數(shù)部分全部輸出,并輸出位小數(shù)。應(yīng)當(dāng)注意,在輸出的數(shù)字中并非全部數(shù)字都是有效數(shù)字。單精度實(shí)數(shù)的有效位數(shù)一般為位。.。指定輸出的數(shù)據(jù)共占列,其中有位小數(shù)。如果數(shù)值長度小于,則左端補(bǔ)空格。.與.基本相同,只是使輸出的數(shù)值向左端靠,右端補(bǔ)空格。 例例 輸出實(shí)數(shù)時的有效位數(shù)。#include void () ,;(,);運(yùn)行結(jié)果:運(yùn)行結(jié)果:. .例例 輸出雙精度數(shù)時的有效位數(shù)。#include void () ,;x=1111111111111.111111111; y=2222222222222.22222222

49、2;printf(“%f”,x+y);運(yùn)行結(jié)果:運(yùn)行結(jié)果:3333333333333.3330103333333333333.333010例 輸出實(shí)數(shù)時指定小數(shù)位數(shù)。#include void ()float f=123.456;printf(“%f%10f%10.2f%.2f%-10.2fn”,f,f,f,f,f);運(yùn)行結(jié)果:運(yùn)行結(jié)果:(8)格式符格式符,以指數(shù)形式輸出實(shí)數(shù)。可用以下形式: 。不指定輸出數(shù)據(jù)所占的寬度和數(shù)字部分的小數(shù)位數(shù).例: (,);輸出: 6列 5列所輸出的實(shí)數(shù)共占列寬度。(注:不同系統(tǒng)的規(guī)定略有不同) m.ne和-m.ne。、和“”字符的含義與前相同。 此處指擬輸出的數(shù)

50、據(jù)的小數(shù)部分(又稱尾數(shù))的小數(shù)位數(shù)。 若,則:printf(%e %10e %10.2e %.2e %-10.2e,f,f,f,f,f); 輸出如下:1.234560e+002 1.234560e+002 1.23e+002 1.23e+002 13列 13列 10列 9列 1.23e+002 10列說明:未指定,自動使.超過給定的列,乃突破列的限制,按實(shí)際長度輸出。第3個數(shù)據(jù)共占列,小數(shù)部分占列。只指定,未指定,自動使等于數(shù)據(jù)應(yīng)占的長度。第5個數(shù)據(jù)應(yīng)占列,數(shù)值只有列,由于是“”,數(shù)值向左靠,右補(bǔ)一個空格。(注:有的C系統(tǒng)的輸出格式與此略有不同) (9) )格式符格式符,用來輸出實(shí)數(shù). 它根據(jù)

51、數(shù)值的大小,自動選格式或格式(選擇輸出時占寬度較小的一種),且不輸出無意義的零。例:若,則( ,);輸出如下:123.468000 1.234680e+002 123.468 10列 13列 10列說明:用格式輸出占列,用格式輸出占列,用格式時,自動從上面兩種格式中選擇短者(今以格式為短)故占列,并按格式用小數(shù)形式輸出,最后3個小數(shù)位為無意義的,不輸出,因此輸出123.468,然后右補(bǔ)3個空格。格式用得較少。說明: 除了X,E,G外,其他各式字符必須用小寫。 可以在printf函數(shù)中的“格式控制”字符串中包含轉(zhuǎn)義字符。 一個格式說明必須以“%”開頭,以9個格式字符之一為結(jié)束,中間可以插入附加格式字符。 想輸出%,則應(yīng)該在格式控制字符串中用連續(xù)兩個%表示表表 1 printf格式字符總結(jié)格式字符總結(jié)格式字符d以帶符號的十進(jìn)制形式輸出整數(shù)(正數(shù)不輸出符號)oxucsfeg以8進(jìn)制無符號形式輸出整數(shù)(不

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論