C語言程序設計-S2-3-1_第1頁
C語言程序設計-S2-3-1_第2頁
C語言程序設計-S2-3-1_第3頁
C語言程序設計-S2-3-1_第4頁
C語言程序設計-S2-3-1_第5頁
已閱讀5頁,還剩66頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第二章

算法2.1算法基本概念程序的構成:數(shù)據對數(shù)據的處理。計算機科學家沃思提出的公式:程序=數(shù)據結構+算法對數(shù)據的描述:數(shù)據的類型和數(shù)據的組織形式對操作的描述:操作的步驟

程序=數(shù)據結構+算法+程序設計方法

+語言工具和環(huán)境考慮程序設計方法和使用的語言及開發(fā)環(huán)境,表達為:簡單算法舉例

[例2.1]求1+2+3+???+100第一種方法:

1+2,再加3,一直加到100,得到結果5050第二種方法:(1+99)+(2+98)+???+(49+51)+50+100=49×100+50+100=5050第三種方法:2.2算法的特性

有窮性確定性有零個或多個輸入有一個或多個輸出有效性2.3算法的表示方法自然語言流程圖

偽代碼

計算機語言

第三章

數(shù)據類型、運算符與表達式3.1C語言的數(shù)據類型數(shù)據 程序加工處理的對象及其結果數(shù)據類型

數(shù)據在計算機內部的存儲形式(占用的內存單元數(shù)量、編碼方式、取值范圍等)基本類型字符型char整型int浮點型單精度float雙精度double指針類型構造類型數(shù)組結構struct聯(lián)合union枚舉enum空類型第三章C的數(shù)據類型C的數(shù)據類型在程序中用到的所有數(shù)據都必須指定其數(shù)據類型。本章主要介紹基本的數(shù)據類型,而鏈表、樹、棧等復雜數(shù)據類型放到以后去仔細研究。3.2常量和變量3.2.1標識符一個字符序列。在C中,被用來標記常量、變量、數(shù)據類型、函數(shù)及程序的名字。構成標識符,必須符合下列語法規(guī)則:以字母(大小寫均可)或下劃線(_)中任一字符打頭;在第一個字母之后,可以是任意的字母,下劃線和數(shù)字組成的字符序列,可以是空串;標識符合法標識符:sum,average,class,day,month,student_name,_above,lotus_1_2_3,basic不合法的標識符:M.D.Jhon,$123,#33,3D64,a>b標識符的說明C中,大小寫字母有不同含義 例如main和MAIN就不同標識符的長度在C語言中未統(tǒng)一規(guī)定,隨不同開發(fā)系統(tǒng)而變標識符允許長度8允許長度32student_namestudent_number相同標識符不同標識符在C中,標識符可以分為三類:關鍵字,說明某一固定含義的字,不允許賦予其它含義(都是小寫字母,共32個)特定字,具有特定含義的字,有define,undef,include,ifdef,ifndef,endif及l(fā)ine,主要用在預處理程序中一般標識符,用戶根據標識符的構成規(guī)則定義的標識符標識符的說明3.2.2

常量(Constant)與符號常量常量:在程序運行過程中,其值不能被改變的量符號常量:代表常量的標識符(符號)[例3.1]#definePRICE30main(){

intnum,total;

num=10;

total=num*PRICE;

printf("total=%d",total);}用#define命令定義PRICE代表常量30,在主函數(shù)中出現(xiàn)的PRICE的值不變,恒為30,這里PRICE即為符號常量。變量:在程序運行過程中,其值可以被改變的量。在源程序中,變量用標識符表示變量在內存中占據一定的存儲單元。變量名的類型表明存儲單元的數(shù)量(例如整型變量int占2字節(jié)存儲單元。單精度實數(shù)float占4字節(jié))變量名表示存儲單元的值可以用運算符&取得存儲單元的地址3.2.3變量(Variable)程序設計中變量的命名:必須滿足C語言的語法規(guī)定。(以字母、下劃線開始,由....構成)。應該“見名知意”。C語言對變量的要求:“先定義、后使用”,因為:編譯程序不能翻譯未定義變量。編譯程序在編譯時根據變量類型確定存儲單元的數(shù)量。編譯程序在編譯時根據變量類型進行語法檢查。3.3整型數(shù)據3.3.1整型常量C語言中數(shù)值常量的表達方式:表達方式意義十進制值123十進制1230123(數(shù)字字符0開頭)八進制830x123(0x開頭)十六進制291八進制整數(shù):1×82+2×81+3×80=83十六進制整數(shù):1×162+2×161+3×160=2913.3.2整型變量整型數(shù)據在內存中的存放形式:以二進制形式存放微機上,一個整型變量占2個子節(jié),即16位inti; /*定義i為整型變量*/i=10; /*給變量i賦以整數(shù)10*/0000000010二進制:1×23+0×22+

1×21+0×20=1000001010補碼

事實上,數(shù)據是以補碼形式存放的正數(shù)的補碼和其原碼相同負數(shù)的補碼:將該數(shù)的絕對值按位取反,再加1

例如求-10的補碼10的原碼0000000001010000取反1111111110101111加11111111101101111補碼符號位正數(shù)0負數(shù)1有符號無符號基本型(簡稱整型)intunsignedint短整型short或shortintunsignedshort長整型long或longintunsignedlong整型變量的分類基本類型符int整型變量的分類01111111signedint1111111111111111unsignedint符號位數(shù)據位11111111C語言標準沒有規(guī)定整型變量在計算機內存中所占的字節(jié)數(shù),它與具體的機器和操作系統(tǒng)有關:IBMPC所占位數(shù)數(shù)的范圍int16-32768~+32767short16-32768~+32767long32-2147483648~+2147483647unsignedint160~65535unsignedshort160~65535unsignedlong320~4294967295整型變量的定義inta,b;

/*指定變量a、b為整型*/unsignedshortc,d;

/*指定變量c、d為無符號短整型*/longe,f;

/*指定變量e、f為長整型*/程序中在函數(shù)的開頭部分定義變量。

整型變量的定義[例3.2]

main()

{

inta,b,c,d;

unsignedu;

a=12;b=-24;u=10;

c=a+u;d=b+u;

printf("a+u=%d,b+u=%d\n",c,d);

}[例3.2]

main()

{

inta,b,c,d;/*指定變量a、b、c、d為整型*/

unsignedu;/*指定變量u為無符號整型*/

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整型常量的類型整型常量的值在-32768~+32767范圍內,編譯器認為是int類型整型常量的值超過上述范圍,而在-2147483648~+2147483647范圍內,編譯器認為是long類型在整型常量的值后面加字母L(大寫L或小寫l),則告訴編譯器,把該整型常量作為long類型處理。例:123L、0L常量無unsigned型整型數(shù)據的溢出超過一個int型變量的最大允許值,稱為溢出,表現(xiàn)形式是數(shù)據錯誤。例如32767+1應得到32768卻得到-32768327671111111011111111-3276800000001000000003.4實型數(shù)據3.4.1實型常量實數(shù)(real)又稱為浮點數(shù)(float),有兩種表達方式:0.123、.123、123.0、123.、0.0(必須有小數(shù)點)123e3或123E3、123E-23.4.2實型變量實型數(shù)據在內存中的存放形式:以二進制形式存放以指數(shù)形式存儲微機上,一個整型變量占4個子節(jié),即32位符號+.1234565小數(shù)部分指數(shù)+.123456×105=12345.6實型變量的分類類型位數(shù)有效數(shù)字數(shù)值范圍float326~710-37~1038double6415~1610-307~10308longdouble8018~1910-4931~104932實型變量的定義floatx,y;

/*指定x、y為單精度實型變量*/doublez;

/*指定z為雙精度實型變量*/

實型常量不分float和double。實型變量的舍入誤差有限的有效數(shù)字位數(shù)必然帶來誤差. main()

{

floata,b;/*指定變量a、b為實型*/

a=123456.789e5;

b=a+20;

printf(“%f”,b);

}程序運行顯示:12345678868.0000003.5字符型數(shù)據3.5.1字符型常量用單引號(撇號)括起來的一個字符。如:'a'、'x'、'D'、'?'、'$'。以“\”開頭的字符序列,稱為“轉義序列”,“\”使其后面的字符變?yōu)榱硗獾囊饬x。轉義序列主要用來控制打印機和屏幕輸出。例:printf("\nsumis%d\n\n",sum);3.5.2字符型變量字符型變量用來存放字符型常量例如:

charc1,c2; /*定義c1、c2為字符變量*/ c1='a';c2='b';

字符型變量只能存放一個字符字符變量在內存中占一字節(jié)字符型數(shù)據在內存中的存放形式

字符在內存中以二進制存放

將字符對應的ASCII碼存放到內存里字符ASCII'A'0x40(64)'B'0x41(65)'a'0x61(97)‘b'0x62(98)'0'0x30(48)'1'0x31(49)字符型數(shù)據和整數(shù)[例3.3]main(){charc1,c2;

c1=97;c2=98;

printf("%c%c",c1,c2);}

字符以ASCII碼存儲,其存儲方式與整數(shù)類似。從而,C語言允許字符和整數(shù)之間進行運算。[例3.4]main(){charc1,c2;

c1='a';c2='b';

c1=c1-32;c2=c2-32;

printf("%c%c",c1,c2);}

程序運行顯示AB字符串常量字符常量:單引號括起來的一個字符。字符串常量:雙引號括起來的字符序列(0~N個字符)。 如:"Howdoyoudo.","CHINA","a","$123.45"字符串常量字符串常量在內存中的存放:每一個字符均以其ASCII碼存放,且最后添加一個“空字符”(二進制00000000,記為NULL或\0。字符‘0’在內存中存0x30即00100000)。例:字符串常量“CHINA”存放在內存中的情況是:(6字節(jié)存儲器,不是5字節(jié)) CHINA\0C語言基本數(shù)據類型有四種:字符型整型單精度浮點型雙精度浮點型charintfloatdouble類型說明符基本數(shù)據類型小結C語言有四種類型修飾符:短長有符號無符號shortlongsignedunsigned類型修飾符類型修飾符可以與類型說明符配合在一起使用也可單獨使用C語言采用類型說明符說明不同的數(shù)據類型

類型占用內存單元取值范圍數(shù)據存儲格式

char1(8位)0~255ASCII碼

int2(16位)-32768~32767二進制補碼

float4(32位)±10-37~±10387位有效數(shù)字

double8(64位)±10-307~±1030815位有效數(shù)字保存字符對應的ASCII碼-2151000,0000,0000,0000215-10111,1111,1111,1111基本數(shù)據類型的數(shù)據表示與取值范圍3.6各類數(shù)據混合運算整型、實型(包括單、雙精度)、字符型數(shù)據可以混合運算。例、10+'a'+1.5-8765.1234*'b'混合運算時,先轉換成同一種類型,然后進行運算。轉換規(guī)則如下:例:inti;floatf;doubled;longe;10+'a'+i*f-d/e10+'a'+i*f-d/e上式的運算次序是:①進行10+'a'運算。先將'a'轉換為整數(shù)97,運算結果為整數(shù)107。②進行i*f運算。先將i和f均轉換為double類型(實運算過程總是使用double類型,僅在把結果存入存儲器時,才可能使用float類型),運算結果是double類型。10+'a'+i*f-d/e③整數(shù)107與i*f的積相加。先將整數(shù)107轉換為double類型(107.0),運算結果是double類型。④進行d/e運算。先將longe轉換為double類型,運算結果是double類型。⑤進行③-④運算,結果為double類型。3.7算術運算符和算術表達式C的運算符算術運算符+、-、*、/、%關系運算符>、<、==、>=、<=、!=邏輯運算符!、&&、||位運算符<<、>>、~、|、∧、&賦值運算符=條件運算符?、:逗號運算符,指針運算符*、&求字節(jié)數(shù)運算符sizeof強制類型轉換運算符(類型)分量運算符.(點)、→下標運算符[]其他函數(shù)調用運算符()3.7.1算術運算符基本的算術運算符+加法運算符,如3+5

正值運算符,如+3-減法運算符,如5-2負值運算符,如-3*

乘法運算符,如3*5/

除法運算符,如5/3%模運算符(或稱求余運算符),如7%43.7.2算術表達式算術表達式:用算術運算符和括號將運算對象(如常量、變量、函數(shù)等)連接起來、符合C語法規(guī)則的式子。如:

a*b/c-1.5+'a'運算符的優(yōu)先級與結合性運算符的優(yōu)先級:先乘除、后加減;先括號。運算符的結合性:運算對象兩側的運算符優(yōu)先級相同時,運算符的結合方向(左、右)。左結合性:結合方向為從左至右(先左后右,簡稱左結合)。算術運算符為左結合。 例:a-b+c

由于算術運算符為左結合,故先執(zhí)行a-b,再執(zhí)行加c的運算。右結合性:結合方向為從右至左(先右后左,簡稱右結合)。賦值運算符=為右結合。例:a=b+c

由于賦值運算符=為右結合,先執(zhí)行右邊的b+c,再賦值給a。3.7.3強制類型轉換運算符兩側的數(shù)據類型不同時,先自動進行類型轉換,再運算。程序員可以強制進行某種轉換。強制類型轉換的一般形式是:

(類型名)(表達式)例如(double)a;/*將a轉換為double類型*/(int)(x+y);/*將x+y的值轉換為int類型*/(float)(5%3);/*將5%3的值轉換為float類型*/注意:(int)(x+y);/*將x+y的值轉換為int類型*/(int)x+y; /*將x的值轉換為int類型,再與y相加*/(int)(x);(int)x;(表達式僅為一個變量時,括號可以省略)

說明:強制類型轉換時,得到一個所需類型的中間變量,原來變量的類型不發(fā)生變化。例、floatx; (int)x;

得到整型變量x,而x

的類型不發(fā)生變化。3.7.4自增、自減運算符++

自增運算符,使變量的值加1--

自減運算符,使變量的值減1inti;++i;i++; 在使用i之前使i加1在使用i之后使i加1自增、自減運算符inti,j;i=3;j=++i; /*先使i加1,再賦給j執(zhí)行后:j=4,i=4*/j=i++; /*先把i賦給j,再使i加1執(zhí)行后:j=3,i=4*/printf(“%d”,++i); /*先使i加1,再輸出執(zhí)行后輸出4*/printf(“%d”,i++); /*先輸出,再使i加1執(zhí)行后輸出3*/

注意:++和--只能用于變量,不能用于常量和表達式。例、以下是不合法的5++;(a+b)++;#defineONE1;ONE++;++和--的結合方向為“右結合”。例:-i++負值運算符-和自增運算符優(yōu)先級相同(-i)++-(i++)3.7.5有關表達式使用中的問題說明在表達式中使用++或--,容易出錯。i=3;k=(i++)+(i++)+(i++)k值等于9。i++:先使用i,再加1。

執(zhí)行后:k=3+3+3=9。i=6。k=(i++)+(i++)+(i++)k值等于12。每求出一個括號后,i加1連續(xù)3次使i加1后,i的值等于6

出現(xiàn)多個運算符時,編譯器在處理時盡可能多的(從左到右)將若干個字符組合成一個運算符。例、i+++j;應理解成(i++)+j而不是i+(++j)

調用函數(shù)時,實際參數(shù)的處理順序是從右到左例:i=3;printf("%d,%d",i,i++);先右:i++,先使用i(3),再使i加1。后左:i(現(xiàn)在值為4)。因此,輸出結果:4,33.8賦值運算符和賦值表達式3.8.1賦值運算符:

=作用:將一個表達式的值賦給變量。例、a=3; /*常數(shù)3賦給變量a。常數(shù)是特殊的表達式*/a=b+c+1;3.8.2賦值時的類型轉換當賦值運算符兩側的類型不同時,在賦值前進行類型轉換。float、double賦給int:舍棄小數(shù)(截斷)。int賦給float、double:值不變,變?yōu)楦↑c數(shù)形式存儲double賦給float:截取前7位有效數(shù)字float賦給double:有效數(shù)字擴展到16位char(1字節(jié))賦給int(2字節(jié))(1)(unsignedchar)int:賦給int的低8位,int的高8位補0。

(2)(signedchar)int:賦給int的低8位,若signedchar的最高位是0,則int的高8位全為0;若signedchar的最高位是1,則int的高8位全為1。(稱為“符號擴展”)

intlong賦給int(符號擴展)unsignedint賦給int非unsigned數(shù)據賦給位數(shù)相同的unsigned數(shù)據65535-165535-13.8.3復合的賦值運算符C共有10種復合運算符:+=,-=,*=,/+=,%+=,<<=,>>=,&=,^=,|=采用目的:簡化程序,提高編譯效率復合賦值運算符例子語句等價語句+=a+=3;a=a+3;*=x*=y+8;x=x*(y+8)%=x%=3;x=x%3;3.8.4賦值表達式由賦值運算符將變量和表達式連接起來的式子。一般形式:

<變量><賦值運算符><表達式>例: 賦值表達式:a=5

賦值語句:a=5;

賦值表達式賦值表達式中的“表達式”也可以是賦值表達式。例:a=(b=5)/*b的值等于5,表達式b=5的

溫馨提示

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

評論

0/150

提交評論