C語言選擇題知識點(diǎn)復(fù)習(xí)資料.doc
《C語言選擇題知識點(diǎn)復(fù)習(xí)資料.doc》由會員分享,可在線閱讀,更多相關(guān)《C語言選擇題知識點(diǎn)復(fù)習(xí)資料.doc(26頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、全國計(jì)算機(jī)等級考試注意事項(xiàng)及復(fù)習(xí)資料(內(nèi)部資料,翻版必究)新視野培訓(xùn)教學(xué)研究組 編2013年下半年全國計(jì)算機(jī)等級考試復(fù)習(xí)資料(一)、C語言部分1、C語言的基礎(chǔ)知識1)合法的用戶標(biāo)識符考查:合法的要求是由字母,數(shù)字,下劃線組成。有其它元素就錯(cuò)了。并且第一個(gè)必須為字母或則是下劃線。第一個(gè)為數(shù)字就錯(cuò)了。 關(guān)鍵字不可以作為用戶標(biāo)識符號。main define scanf printf 都不是關(guān)鍵字。迷惑你的地方If是可以做為用戶標(biāo)識符。因?yàn)镮f中的第一個(gè)字母大寫了,所以不是關(guān)鍵字。2)實(shí)型數(shù)據(jù)的合法形式:2.333e-1 就是合法的,且數(shù)據(jù)是2.33310-1??荚嚳谠E:e前e后必有數(shù),e后必為整數(shù)。
2、.3)字符數(shù)據(jù)的合法形式:: 1 是字符占一個(gè)字節(jié),1是字符串占兩個(gè)字節(jié)(含有一個(gè)結(jié)束符號)。 0 的ASCII數(shù)值表示為48,a 的ASCII數(shù)值是97,A的ASCII數(shù)值是65。一般考試表示單個(gè)字符錯(cuò)誤的形式:65 1字符是可以進(jìn)行算術(shù)運(yùn)算的,記住:0-0=48大寫字母和小寫字母轉(zhuǎn)換的方法:A+32=a 相互之間一般是相差32。4) 整型一般是兩個(gè)字節(jié), 字符型是一個(gè)字節(jié),雙精度一般是4個(gè)字節(jié):考試時(shí)候一般會說,在16位編譯系統(tǒng),或者是32位系統(tǒng)。碰到這種情況,不要去管,一樣做題。掌握整型一般是兩個(gè)字節(jié), 字符型是一個(gè)字節(jié),雙精度一般是4個(gè)字節(jié)就可以了。5)轉(zhuǎn)義字符的考查: 在程序中 in
3、t a = 0 x6d,是把一個(gè)十六進(jìn)制的數(shù)給變量a 注意這里的0 x必須存在。 在程序中 int a = 06d, 是一個(gè)八進(jìn)制的形式。 在轉(zhuǎn)義字符中,x6d 才是合法的,0不能寫,并且x是小寫。 141 是合法的, 0是不能寫的。 108是非法的,因?yàn)椴豢梢猿霈F(xiàn)8。6)算術(shù)運(yùn)算符號的優(yōu)先級別: 同級別的有的是從左到右,有的是從右到左。7)強(qiáng)制類型轉(zhuǎn)換: 一定是 (int)a 不是 int(a),注意類型上一定有括號的。 注意(int)(a+b) 和(int)a+b 的區(qū)別。 前是把a(bǔ)+b轉(zhuǎn)型,后是把a(bǔ)轉(zhuǎn)型再加b。8)表達(dá)式的考查: 是表達(dá)式就一定有數(shù)值。 賦值表達(dá)式:表達(dá)式數(shù)值是最左邊的數(shù)
4、值,a=b=5;該表達(dá)式為5,常量不可以賦值。 自加、自減表達(dá)式:假設(shè)a=5,+a(是為6), a+(為5);運(yùn)行的機(jī)理:+a 是先把變量的數(shù)值加上1,然后把得到的數(shù)值放到變量a中,然后再用這個(gè)+a表達(dá)式的數(shù)值為6,而a+是先用該表達(dá)式的數(shù)值為5,然后再把a(bǔ)的數(shù)值加上1為6,再放到變量a中。 進(jìn)行了+a和a+后 在下面的程序中再用到a的話都是變量a中的6了。 考試口訣:+在前先加后用,+在后先用后加。逗號表達(dá)式:優(yōu)先級別最低 ; 表達(dá)式的數(shù)值逗號最右邊的那個(gè)表達(dá)式的數(shù)值。 (2,3,4)的表達(dá)式的數(shù)值就是4。例題:main() int x,y,z;x=y=1; z=x+,y+,+y;print
5、f(“%d,%d,%dn”,x,y,z);程序運(yùn)行后的輸出結(jié)果是A) 2,3,3 B) 2,3,2 C) 2,3,1 D) 2,2,19)位運(yùn)算的考查: 會有一到二題考試題目。 總的處理方法:幾乎所有的位運(yùn)算的題目都要按這個(gè)流程來處理(先把十進(jìn)制變成二進(jìn)制再變成十進(jìn)制)。 例1:char a = 6, b; b = a2; 這種題目的計(jì)算是先要把a(bǔ)的十進(jìn)制6化成二進(jìn)制,再做位運(yùn)算。 例2:一定要記住,異或的位運(yùn)算符號。0 異或 1得到1。 0異或 0得到0。兩個(gè)女的生不出來。 1 異或 1得到0。兩個(gè)男的生不出來??荚囉洃浄椒ǎ阂荒?1)一女(0)才可以生個(gè)小孩(1)。 例3:在沒有舍去數(shù)據(jù)的
6、時(shí)候,右移一位表示除以2。10)018的數(shù)值是非法的,八進(jìn)制是沒有8的,逢8進(jìn)1。 11)%符號兩邊要求是整數(shù)。不是整數(shù)就錯(cuò)了。12)三種取整丟小數(shù)的情況:1、int a =1.6; 2、(int)a; 3、1/2; 3/2;13)字符型和整數(shù)是近親: char a = 65 ; printf(“%c”, a); 得到的輸出結(jié)果:aprintf(“%d”, a);得到的輸出結(jié)果:652、輸入和輸出1)printf函數(shù)的格式考查: %d對應(yīng)整型;%c對應(yīng)字符;%f對應(yīng)單精度等等。寬度的,左對齊等修飾。 %ld對應(yīng) long int;%lf 對應(yīng)double。2)scanf函數(shù)的格式考察: 注意該
7、函數(shù)的第二個(gè)部分是&a 這樣的地址,不是a; scanf(“%d%d%*d%d”,&a,&b,&c); 跳過輸入的第三個(gè)數(shù)據(jù)。3)putchar ,getchar 函數(shù)的考查: char a = getchar() 是沒有參數(shù)的,從鍵盤得到你輸入的一個(gè)字符給變量a。 putchar(y)把字符y輸出到屏幕中。4)如何實(shí)現(xiàn)兩個(gè)變量x ,y中數(shù)值的互換(要求背下來) 不可以把 x=y ,y=x; 要用中間變量 t=x;x=y;y=t。5)如何實(shí)現(xiàn)保留三位小數(shù),第四位四舍五入的程序,(要求背下來) 這個(gè)有推廣的意義,注意 x = (int)x 這樣是把小數(shù)部分去掉。 main() double hu
8、i;int xy; scanf(“%f”,&hui);scanf(“%d”,&xy); printf(“%f,%d”,hui,xy);如果從鍵盤上輸入的數(shù)據(jù)的值是:23 回車 34.789回車,則最后的輸出結(jié)果是: 3、選擇結(jié)構(gòu) 特別要注意:c語言中是用非0表示邏輯真的,用0表示邏輯假的。1)關(guān)系表達(dá)式: 表達(dá)式的數(shù)值只能為1(表示為真),或0(表示假) 當(dāng)關(guān)系的表達(dá)是為真的時(shí)候得到1。如 98這個(gè)是真的,所以表達(dá)式的數(shù)值就是1;2)邏輯表達(dá)式: 只能為1(表示為真),或0(表示假)a) 共有& | ! 三種邏輯運(yùn)算符號。b) !&| 優(yōu)先的級別。c) 注意短路現(xiàn)象??荚嚱?jīng)??嫉?。 d) 要表
9、示 x 是比0大,比10小的方法。0 x10是不可以的(一定記住)。是先計(jì)算0 x 得到的結(jié)果為1或則0;再用0,或1與10比較得到的總是真(為1)。所以一定要用 (0 x)&(xbc)printf(%dn,d); else if(c-1=d)=1)printf(%dn,d+1); elseprintf(%dn,d+2);執(zhí)行后輸出結(jié)果是()。A) 2 B) 3 C) 4 D) 編譯時(shí)有錯(cuò),無結(jié)果4)條件表達(dá)式: 表達(dá)式1 ?表達(dá)式2 :表達(dá)式3 注意是當(dāng)表達(dá)式1的值為:非0時(shí)候 是表達(dá)式2的數(shù)值,當(dāng)為0是就是表達(dá)式2的數(shù)值??荚嚳谠E:真前假后。5)switch語句:a) 一定要注意 有bre
10、ak 和沒有break的差別,書上(54頁)的兩個(gè)例子,沒有break時(shí)候,只要有一個(gè)case匹配了,剩下的都要執(zhí)行,有break則是直接跳出了swiche語句。b) switch只可以和break一起用,不可以和continue用。c) switch(x) x:是整型常量,字符型常量,枚舉型數(shù)據(jù)。case 1: . case后面的只能是常量不能是變量 。 case 2: . 注意:break可以用在循環(huán)語句中,也可以用在switch語句中。但是continue語句只能用在循環(huán)語句中。例題:main() int x=1,y=0,a=0,b=0;switch( x) case 1: switch
11、(y) case 0: a+;break; case 1:b+;break; case 2: a+;b+;break;printf(“a=%d,b=%dn”,a,b);4、循環(huán)結(jié)構(gòu)1)三種循環(huán)結(jié)構(gòu): a)for() ; while(); do- while()三種。 b)for循環(huán)當(dāng)中必須是兩個(gè)分號,千萬不要忘記。 c)寫程序的時(shí)候一定要注意,循環(huán)一定要有結(jié)束的條件,否則成了死循環(huán)。 d) do-while()循環(huán)的最后一個(gè)while();的分號一定不能夠丟。(當(dāng)心上機(jī)改錯(cuò)),dowhile循環(huán)是至少執(zhí)行一次循環(huán)。復(fù)習(xí):三個(gè)循環(huán)結(jié)構(gòu)的執(zhí)行過程。while 是先判斷后執(zhí)行。do.while是先執(zhí)
12、行后判斷。for() 先執(zhí)行表達(dá)式1,判斷表達(dá)式2,執(zhí)行循環(huán)體中的內(nèi)容,在執(zhí)行表達(dá)式3.例題:2) break 和 continue的差別 記憶方法: break:是打破的意思,(破了整個(gè)循環(huán))所以看見break就退出真?zhèn)€一層循環(huán)。 continue: 是繼續(xù)的意思,(繼續(xù)循環(huán)運(yùn)算),但是要結(jié)束本次循環(huán),就是循環(huán)體內(nèi)剩下的語句不再執(zhí)行,跳到循環(huán)開始,然后判斷循環(huán)條件,進(jìn)行新一輪的循環(huán)。3)嵌套循環(huán) 就是有循環(huán)里面還有循環(huán),這種比較復(fù)雜,要一層一層一步一步耐心的計(jì)算,一般記住兩層是處理二維數(shù)組的。4) while(c=getchar())!=n) 和 while(c=getchar() !=n)
13、的差別先看a = 3 != 2 和 (a=3)!=2 的區(qū)別:(!=號的級別高于=號 所以第一個(gè)先計(jì)算 3!=2) 第一個(gè)a的數(shù)值是得到的1;第二個(gè)a的數(shù)值是3??荚囎⒁恻c(diǎn): 括號在這里的重要性。main() int i=0,s=0; for(;) if(i=0|i=5) continue ; if(i=6) break; i+;s+=i;printf(“%d”,s);A、10 B、13 C、21 D、程序進(jìn)入死循環(huán)5、函數(shù)函數(shù):是具有一定功能的一個(gè)程序塊;是C語言的基本組成單位。1) 函數(shù)的參數(shù),返回?cái)?shù)值void f(int v,int w) int t;t=v;v=w;w=tmain()i
14、nt x=1,y=3,z=2;if(xy) f(x,y); else if(yz) f(y,z);else f(x,z);printf(“%d,%d,%dn”,x,y,z);2)函數(shù)的調(diào)用: 實(shí)參和形參之間 傳數(shù)值,和傳地址的差別。(考試的重點(diǎn)) 按數(shù)值傳替,形參的變化不會改變實(shí)參的變化。(單向傳替) 按地址傳替,形參的變化就會有可能改變實(shí)參的變化。(雙向傳替)3)函數(shù)聲明的考查:一定要有:函數(shù)名,函數(shù)的返回類型,函數(shù)的參數(shù)類型。不一定要有:形參的名稱。4)要求掌握的庫函數(shù):sqrt() fabs() pow() sin() 其中pow(a,b)是重點(diǎn)。23為pow(2,3)。以及sqrt()
15、表示的是一個(gè)表達(dá)式或者是一個(gè)數(shù)值的開方。 5)函數(shù)最后返回值的類型決定于函數(shù)的定義類型。6、指針1)、指針變量的本質(zhì)是用來放地址,而一般的變量是放數(shù)值的。int *p 中 *p和p的差別:*p可以當(dāng)做變量來用;*的作用是取后面地址p里面的數(shù)值 p是當(dāng)作地址來使用。*p+ 和 (*p)+的之間的差別:改錯(cuò)題目中很重要 *p+是 地址會變化。 (*p)+ 是數(shù)值會要變化。若有說明: int n=2,*p=&n,*q=p;則以下的非法的賦值語句是:()A、p=q B、*p=*q C、n=*q; D、p=n 2)、三名主義:(考試的重點(diǎn)) 數(shù)組名:表示第一個(gè)元素的地址。數(shù)組名不可以自加,他是地址常量名
16、。(考了很多次) 函數(shù)名:表示該函數(shù)的入口地址。 字符串常量名:表示第一個(gè)字符的地址??荚囍匾脑捳Z:指針變量是存放地址的。并且指向哪個(gè)就等價(jià)哪個(gè),所有出現(xiàn)*p的地方都可以用它等價(jià)的代替。例如:int a=2,*p=&a; *p=*p+2;(由于*p指向變量,所以指向哪個(gè)就等價(jià)哪個(gè),這里*p等價(jià)于,可以相當(dāng)于是a=a+2)指針變量兩種初始化方法一:int a=2,*p=&a;(定義的同時(shí)初始化)方法二:int a=2,*p;(定義之后初始化)p=&a;3)、給指針變量賦空值之后,不能對該變量進(jìn)行指針運(yùn)算。#include“stdio.h”main() int n,*p=NULL; *p=&n;
17、 printf(“請輸入數(shù)據(jù):”); scanf(“%d”,&p);printf(“結(jié)果是:”);printf(“%dn”,p);該程序試圖通過指針p為變量n讀入數(shù)據(jù)并輸出數(shù)據(jù),但是程序中有多處錯(cuò)誤,以下語句正確的是:()A、int n,*p=NULL; B、*p=&n; C、scanf(“%d”,&p); D、printf(“%dn”,p);4)返回指針的函數(shù): 格式: 函數(shù)返回值類型 *函數(shù)名(形式參數(shù)列表)int *f(int *x,int *y) if(*x*y) return x; else return y;main() int a=7,b=8,*p,*q,*r; p=&a;q=&
18、b; r=f(p,q); printf(“%d,%d,%d”,*p,*q,*r);執(zhí)行后輸出結(jié)果是()A) 7,8,8 B) 7,8,7 C) 8,7,7 D) 8,7,87、數(shù)組1)一維數(shù)組的重要概念:對a10這個(gè)數(shù)組的討論。 1、a表示數(shù)組名,是第一個(gè)元素的地址,也就是元素a10的地址。 2、a是地址常量,所以只要出現(xiàn)a+,或者是a=a+2賦值的都是錯(cuò)誤的。 3、a是一維數(shù)組名,所以它是列指針,也就是說a+1是跳一列。對a33的討論。 1、a表示數(shù)組名,是第一個(gè)元素的地址,也就是元素a10的地址。 2、a是地址常量,所以只要出現(xiàn)a+,或者是a=a+2賦值的都是錯(cuò)誤的。 3、a是二維數(shù)組名,
19、所以它是行指針,也就是說a+1是跳一行。 4、a0、a1、a2也都是地址常量,不可以對它進(jìn)行賦值操作,同時(shí)它們都是列指針,a0+1,a1+1,a2+1都是跳一列。 5、注意a和a0 、a1、a2是不同的,它們的基類型是不同的。前者是一行元素,后三者是一列元素。重點(diǎn)復(fù)習(xí):定義的格式和排序例題:一下能正確定義一維數(shù)組的是:A、int num; B、#define N 100 int num0.100 D、int N=100 int numN; int numN#include“stdio.h”main() int i,j,t;a5=2,1,4,3,5; for(i=0;i4;i+) for(j=i
20、+1;j5;j+)if(aiaj) t=ai;ai=aj;aj=t; for(i=0;i 1 2 3 第一行 a1- 4 5 6 第二行 a2- 7 8 9 第三行步驟二:這樣作題目間很簡單:*(a0+1)我們就知道是第一行的第一個(gè)元素往后面跳一列,那么這里就是a01元素,所以是。*(a1+2)我們就知道是第二行的第一個(gè)元素往后面跳二列。那么這里就是a12元素,所以是6。一定記?。褐灰嵌S數(shù)組的題目,一定是寫成如上的格式,再去做題目,這樣會比較簡單。3) 數(shù)組的初始化,一維和二維的,一維可以不寫,二維第二個(gè)一定要寫 int a=1,2 合法。 int a4=2,3,4合法。 但int a4=
21、2,3,4非法。4) 二維數(shù)組中的行指針 int a12; 其中a現(xiàn)在就是一個(gè)行指針,a+1跳一行數(shù)組元素。 搭配(*)p2指針 a0,a1現(xiàn)在就是一個(gè)列指針。a0+1 跳一個(gè)數(shù)組元素。搭配*p2指針數(shù)組使用5) 還有記住脫衣服法則: a2 變成 *(a+2) a23變成 *(a+2)3再可以變成 *(*(a+2)+3)以下錯(cuò)誤的定義語句是A)int x3=0,1,1,2,3;B)int x43=1,2,3,1,2,3,1,2,3,1,2,3;C)int x4=1,2,3,1,2,3,1,2,3,1,2,3;D)int x3=1,2,3,4;8、字符串1)、字符串的概念:由雙引號括起來的若干個(gè)
22、字符所組成的序列。每一個(gè)字符串都有一個(gè)0做為結(jié)束的標(biāo)識。2)字符串的存儲形式:兩種存儲 數(shù)組存儲 用數(shù)組來存儲字符串。 、將每一個(gè)字符分別賦值給數(shù)組中的每一個(gè)元素。 、定義字符數(shù)組的時(shí)候就給數(shù)組中的每一個(gè)元素賦初值。但是最后必須有一個(gè)結(jié)束符。 C、直接把一個(gè)字符串賦值給一個(gè)數(shù)組。 D、當(dāng)把字符串中的內(nèi)容賦值給數(shù)組時(shí),當(dāng)數(shù)組中的元素的個(gè)數(shù)多余數(shù)組字符個(gè)數(shù)的時(shí)候,可以不用加最后的結(jié)束符。 E、在定義數(shù)組的時(shí)候,省略了數(shù)組的長度的時(shí)候,如果沒有結(jié)束符,那么這個(gè)數(shù)組時(shí)不能構(gòu)成一個(gè)字符串的。 指針存儲 用指針來存儲字符串。在定義指針變量的同時(shí)將一個(gè)字符數(shù)組賦值給一個(gè)指針變量。以下不能正確進(jìn)行字符串賦值的
23、語句時(shí):()A、char str5=”good!”; B、char str=”good!”C、char *str=”good!” D、char str5=g,o,o,d;3)、字符串的輸入和輸出輸出: A、printf函數(shù)輸出字符串是,格式控制說明符是%s,其中的輸出項(xiàng)為:地址。輸出時(shí)不帶有字符串的定界符。B、puts函數(shù)輸出的一個(gè)字符串,同樣的括號中的內(nèi)容只能是一個(gè)字符串或者是一個(gè)地址。輸出時(shí)不帶有字符串的定界符。輸入: A、scanf函數(shù),在輸入的時(shí)候,格式控制說明符任然為%s,輸入項(xiàng)中的內(nèi)容仍然為:地址。在輸入的時(shí)候不輸入字符串的定界符。但是使用scanf函數(shù)在輸入數(shù)據(jù)的時(shí)候,不能接受回
24、車符和空格符。 、gets()函數(shù)接受的仍然是一個(gè)字符串,輸入項(xiàng)中的內(nèi)容仍然為:地址。在輸入的時(shí)候不輸入字符串的定界符。但是使用scanf函數(shù)在輸入數(shù)據(jù)的時(shí)候,能接受回車符和空格符。例題:當(dāng)用戶要求輸入的字符串中含有空格時(shí),應(yīng)使用的輸入函數(shù)是:A、scanf() B、getchar() C、gets() D、getc()4)、字符串處理函數(shù)掌握字符串的處理函數(shù):strcpy() strcmp() strlen() strcat()其中括號中的內(nèi)容均是地址。掌握每一個(gè)函數(shù)的含義和功能。#include”stdio.h”main() char p20=”abcd”,q=”abc”,r=”abcde
25、”;strcat(p,r);strcpy(p+strlen(q),q);printf(“%dn”sizeof(p);9、文件1)、文件指針的定義的格式:FILE *文件指針。2)、打開文件的格式:fopen(“文件名”,“打開方式”); 重點(diǎn)看打開方式為 r和w的形式。3)、關(guān)閉文件:fclose(文件指針)。 文件的操作:1)、feof函數(shù)的格式以及函數(shù)的功能。返回的是文件指針的位置.如果在文件的末尾,則返回的是一個(gè)非0值,若是不在文件末尾,返回的是0值。2)、fseek函數(shù)(定位函數(shù)) 掌握定位的原則。 例如:與fseek(fp,0L,seek_set)有相同作用的是:A、feof() B
26、、ftell() C、fgetc() D rewind()上機(jī)考試重點(diǎn):fprintf( 文件指針,格式控制字符串,輸入列表 );功能:按照格式控制說明的格式將輸入列表中的值輸入到文件指針?biāo)傅奈募?。fscanf(文件指針,格式控制字符串,輸出列表);功能:按照格式控制說明的格式從文件指針?biāo)傅奈募凶x取中數(shù)據(jù)來,并且賦值給輸出列表。10、對C語言的深入討論1)、用戶定義類型: typedef 原有類型 標(biāo)識符;掌握:沒有定義新的類型,只是將原有的類型換了一個(gè)名字而已。2)、編譯預(yù)處理 編譯預(yù)處理必須單獨(dú)占有一行,在程序執(zhí)行時(shí)不占用程序的執(zhí)行時(shí)間。 運(yùn)算規(guī)則:先替換,后計(jì)算。# includ
27、e # define N 5 # define M N+1 # define f(x) (x*M) main() int i1,i2; i1=f(2); i2=f(1+1);printf(“%d %dn”,i1,i2);程序運(yùn)行結(jié)果是A) 12 12 B) 11 7 C) 11 11 D) 12 73)、標(biāo)識符的作用域 按照變量出現(xiàn)的位置,將其分為:全局變量和局部變量。按照存儲存儲類別分為:自動型和靜態(tài)型。四個(gè)關(guān)鍵字:auto register static extern 局部變量的作用范圍只是其所在的花括號中。而全局變量的作用范圍是從定義開始,一直到程序的結(jié)束。 當(dāng)同時(shí)出現(xiàn)局部變量和全局變量
28、的時(shí)候,局部變量有效,而全局變量沒有效果。全局變量相當(dāng)于一個(gè)靜態(tài)變量。 靜態(tài)變量在使用時(shí)占有永久的存儲單元。在使用的時(shí)候只用看一次其初值。#include int a=5;void fun(int b) int a=10;a+=b; printf(“%d”,a);main()int c=20;fun(c); a+=c; printf(“%dn”,a);4)、動態(tài)存儲分配掌握函數(shù)開辟存儲單元的格式: A、malloc(size) 開辟的是動態(tài)的存儲單元,返回的是一個(gè)空指針,若要將其賦值給一個(gè)指針變量,必須進(jìn)行強(qiáng)制類型轉(zhuǎn)換。B、calloc(n,size) 開辟的是動態(tài)的存儲單元,返回的是一個(gè)空指
29、針,若要將其賦值給一個(gè)指針變量,必須進(jìn)行強(qiáng)制類型轉(zhuǎn)換。例如:已有定義語句,double *p,請寫出完整的語句,利用malloc函數(shù)使p指向一個(gè)雙精度型的動態(tài)存儲單元。 5)、main(int argc,char *argv) 這種含有參數(shù)的題目,是很呆板的題目。第一個(gè)參數(shù)是表示輸入的字符串的數(shù)目,第二個(gè)參數(shù)是指向存放的字符串。6)、函數(shù)的遞歸調(diào)用。 函數(shù)的遞歸調(diào)用的時(shí)候先畫出方框圖,再從后面往前算,即可。11、結(jié)構(gòu)體1)、結(jié)構(gòu)體的定義的格式: struct 結(jié)構(gòu)體名 成員列表;成員列表中,成員的類型可以是不相同的。2)、定義結(jié)構(gòu)體變量的3中格式 A、struct 結(jié)構(gòu)體名 成員列表;stru
30、ct 結(jié)構(gòu)體名 變量名; B、struct 結(jié)構(gòu)體名 成員列表;變量名; C、struct 成員列表;變量名;3)應(yīng)用結(jié)構(gòu)體變量中的成員-三種方法 A、結(jié)構(gòu)體變量.成員名; B、結(jié)構(gòu)體指針變量成員名; C、(結(jié)構(gòu)體指針變量).成員名4)數(shù)據(jù)傳遞A、傳遞的是結(jié)構(gòu)體變量 :單向傳遞B、傳遞的是結(jié)構(gòu)體變量的地址:雙向傳遞C、傳遞的是結(jié)構(gòu)體變量中的成員:若是地址 雙向傳遞,若是數(shù)值 單向傳遞D、傳遞的是結(jié)構(gòu)體數(shù)組元素: 單向傳遞E、傳遞的是結(jié)構(gòu)體數(shù)組的數(shù)組名:雙向傳遞。舉例子:課本上的題目第156頁最后一題。5)、鏈表首先看清楚題目要求和意思??辞宄湵碛袥]有帶頭結(jié)點(diǎn),如果帶有都結(jié)點(diǎn),第一空填的內(nèi)容是
31、p=hnext;如果是不帶有頭結(jié)點(diǎn),則第一個(gè)空填寫的是p=h;如果第二個(gè)空是在循環(huán)語句while的括號中的時(shí)候里面的內(nèi)容填寫的是p或者是q,以最近出現(xiàn)的為主;如果是在循環(huán)語句的里面的時(shí)候,填寫的是q=pnext;如果是排序的時(shí)候,從小到大的時(shí)候是大于號,從大到小的時(shí)候是小于號。如果出出現(xiàn)了r的地方,則在后面的空中填的是r12、數(shù)組和指針1)數(shù)組名即為數(shù)組的首地址,是一個(gè)地址常量,不能進(jìn)行+,-運(yùn)算,也不能將一個(gè)數(shù)據(jù)復(fù)制給數(shù)組名。將一個(gè)數(shù)組名賦值給一個(gè)指針變量后,這個(gè)指針變量得到的就是這個(gè)數(shù)組中的第一個(gè)元素的地址,對指針變量進(jìn)行移動運(yùn)算,那么指針將移動,移動的時(shí)候若是正數(shù),則往后移動。同時(shí)還可以
32、對指針進(jìn)行中括號運(yùn)算,得到的將是數(shù)據(jù)的值。例如:int a10;int *p;p=a;p0代表的是 a0元素。p+,代表的是指針往后移動一個(gè)位置。int a10;int *p;p=a+1;那么p1代表的元素為a22)、二維數(shù)組的名字也是一個(gè)指針,但是為一個(gè)指針常量,不能進(jìn)行+,-運(yùn)算,也不能將一個(gè)數(shù)據(jù)復(fù)制給數(shù)組名,注意二維數(shù)組的名字為一個(gè)行指針,所以對數(shù)組名加一運(yùn)算時(shí),是跳過一整行,而不是一個(gè)元素。掌握: A、a+1代表的是第2行一整行,得到的是一整行的地址。 B、*(a+1)得到的是第二行中第一個(gè)元素的地址。C、*(*(a+1)代表的是第二行中第一個(gè)元素的值。3)、指針數(shù)組 指針數(shù)組的定義的
33、格式:類型 *數(shù)組名元素個(gè)數(shù);其中數(shù)組中的每一個(gè)元素均為指針,代表的都是一個(gè)存儲單元的地址。4)行指針行指針的定義格式:類型 (*數(shù)組名)元素個(gè)數(shù);對行指針進(jìn)行+1運(yùn)算時(shí),得到的是往后一整行的地址。而不是一個(gè)元素的地址。5)函數(shù)與數(shù)組函數(shù)在傳遞數(shù)據(jù)的時(shí)候要求:形式參數(shù)和實(shí)際參數(shù)的個(gè)數(shù)要相等,類型要相同。當(dāng)傳遞的是數(shù)組的時(shí)候,要求形式參數(shù)必須是指針或者是數(shù)組。傳遞的是二維數(shù)組的時(shí)候,要求形式參數(shù)必須是二維數(shù)組或者是行指針。傳遞的時(shí)候雙向傳遞。(二)、公共基礎(chǔ)復(fù)習(xí)綱要第一章 數(shù)據(jù)結(jié)構(gòu)與算法1.1 算法算法:是一組有窮指令集,是解題方案的準(zhǔn)確而完整的描述。通俗地說,算法就是計(jì)算機(jī)解題的過程。算法不等
34、于程序,也不等于計(jì)算方法,程序的編制不可能優(yōu)于算法的設(shè)計(jì)。算法是一組嚴(yán)謹(jǐn)?shù)囟x運(yùn)算順序的規(guī)則,每一個(gè)規(guī)則都是有效的,且是明確的,此順序?qū)⒃谟邢薜拇螖?shù)下終止。所以其四個(gè)基本特征包括:(1)確定性,算法中每一步驟都必須有明確定義,不允許有模棱兩可的解釋,不允許有多義性; (2)有窮性,算法必須能在有限的時(shí)間內(nèi)做完,即能在執(zhí)行有限個(gè)步驟后終止;(3)可行性,算法原則上能夠精確地執(zhí)行;(4)擁有足夠的情報(bào)。算法的基本要素:一是對數(shù)據(jù)對象的運(yùn)算和操作;二是算法的控制結(jié)構(gòu)。指令系統(tǒng):一個(gè)計(jì)算機(jī)系統(tǒng)能執(zhí)行的所有指令的集合?;具\(yùn)算和操作包括:算術(shù)運(yùn)算、邏輯運(yùn)算、關(guān)系運(yùn)算、數(shù)據(jù)傳輸。算法的三種基本控制結(jié)構(gòu):順
35、序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。算法基本設(shè)計(jì)方法:列舉法、歸納法、遞推、遞歸、減半遞推技術(shù)、回溯法。算法效率的度量算法復(fù)雜度:算法時(shí)間復(fù)雜度和算法空間復(fù)雜度。算法時(shí)間復(fù)雜度:指執(zhí)行算法所需要的計(jì)算工作量。即算法執(zhí)行過程中所需要的基本運(yùn)算次數(shù)。通常,一個(gè)算法所用的時(shí)間包括編譯時(shí)間和運(yùn)行時(shí)間。算法空間復(fù)雜度:指執(zhí)行這個(gè)算法所需要的內(nèi)存空間。包括算法程序所占的空間,輸入的初始數(shù)據(jù)所占的空間,算法執(zhí)行過程中所需的額外空間。1.2 數(shù)據(jù)結(jié)構(gòu)的基本概念數(shù)據(jù)結(jié)構(gòu):指相互有關(guān)聯(lián)的數(shù)據(jù)元素的集合。數(shù)據(jù)結(jié)構(gòu)研究的三個(gè)方面:(1)數(shù)據(jù)集合中各數(shù)據(jù)元素之間所固有的邏輯關(guān)系,即數(shù)據(jù)的邏輯結(jié)構(gòu);(2)在對數(shù)據(jù)進(jìn)行處理時(shí),各數(shù)
36、據(jù)元素在計(jì)算機(jī)中的存儲關(guān)系,即數(shù)據(jù)的存儲結(jié)構(gòu);(3)對各種數(shù)據(jù)結(jié)構(gòu)進(jìn)行的運(yùn)算。數(shù)據(jù)的邏輯結(jié)構(gòu)應(yīng)包含:(1)表示數(shù)據(jù)元素的信息;(2)表示各數(shù)據(jù)元素之間的前后件關(guān)系(指邏輯關(guān)系,與存儲位置無關(guān))。數(shù)據(jù)的邏輯結(jié)構(gòu)在計(jì)算機(jī)存儲空間中的存放形式稱為數(shù)據(jù)的存儲結(jié)構(gòu),也稱數(shù)據(jù)物理結(jié)構(gòu)。數(shù)據(jù)的存儲結(jié)構(gòu)有順序、鏈接、索引等。線性結(jié)構(gòu)的條件,(一個(gè)非空數(shù)據(jù)結(jié)構(gòu)):(1)有且只有一個(gè)根結(jié)點(diǎn); (2)每一個(gè)結(jié)點(diǎn)最多有一個(gè)前件,也最多有一個(gè)后件。非線性結(jié)構(gòu):不滿足線性結(jié)構(gòu)條件的數(shù)據(jù)結(jié)構(gòu)。1.3 線性表及其順序存儲結(jié)構(gòu)線性表是由一組數(shù)據(jù)元素構(gòu)成,數(shù)據(jù)元素的位置只取決于自己的序號,元素之間的相對位置是線性的。在復(fù)雜線性表
37、中,由若干項(xiàng)數(shù)據(jù)元素組成的數(shù)據(jù)元素稱為記錄;由多個(gè)記錄構(gòu)成的線性表稱為文件。非空線性表的結(jié)構(gòu)特征:(1)且只有一個(gè)根結(jié)點(diǎn)a1,它無前件;(2)有且只有一個(gè)終端結(jié)點(diǎn)an,它無后件;(3)除根結(jié)點(diǎn)與終端結(jié)點(diǎn)外,其他所有結(jié)點(diǎn)有且只有一個(gè)前件,也有且只有一個(gè)后件。結(jié)點(diǎn)個(gè)數(shù)n稱為線性表的長度,當(dāng)n=0時(shí),稱為空表。線性表的順序存儲結(jié)構(gòu)具有以下兩個(gè)基本特點(diǎn):(1)線性表中所有元素所占的存儲空間是連續(xù)的;(2)線性表中各數(shù)據(jù)元素在存儲空間中是按邏輯順序依次存放的。元素ai的存儲地址為:ADR(ai)=ADR(a1)+(i-1)k,ADR(a1)為第一個(gè)元素的地址,k代表每個(gè)元素占的字節(jié)數(shù)。順序表的運(yùn)算:查找
38、、插入、刪除。 1.4線性鏈表數(shù)據(jù)結(jié)構(gòu)中的每一個(gè)結(jié)點(diǎn)對應(yīng)于一個(gè)存儲單元,這種存儲單元稱為存儲結(jié)點(diǎn),簡稱結(jié)點(diǎn)。結(jié)點(diǎn)由兩部分組成:(1) 用于存儲數(shù)據(jù)元素值,稱為數(shù)據(jù)域;(2) 用于存放指針,稱為指針域,用于指向前一個(gè)或后一個(gè)結(jié)點(diǎn)。在鏈?zhǔn)酱鎯Y(jié)構(gòu)中,存儲數(shù)據(jù)結(jié)構(gòu)的存儲空間可以不連續(xù),各數(shù)據(jù)結(jié)點(diǎn)的存儲順序與數(shù)據(jù)元素之間的邏輯關(guān)系可以不一致,而數(shù)據(jù)元素之間的邏輯關(guān)系是由指針域來確定的。鏈?zhǔn)酱鎯Ψ绞郊纯捎糜诒硎揪€性結(jié)構(gòu),也可用于表示非線性結(jié)構(gòu)。線性單鏈表中,HEAD稱為頭指針,HEAD=NULL(或0)稱為空表。如果是雙項(xiàng)鏈表的兩指針:左指針(Llink)指向前件結(jié)點(diǎn),右指針(Rlink)指向后件結(jié)點(diǎn)。
39、線性鏈表的基本運(yùn)算:查找、插入、刪除。1.5棧和隊(duì)列棧:限定在一端進(jìn)行插入與刪除的線性表。其允許插入與刪除的一端稱為棧頂,用指針top表示棧頂位置。不允許插入與刪除的另一端稱為棧底,用指針bottom表示棧底。棧按照“先進(jìn)后出”(FILO)或“后進(jìn)先出”(LIFO)組織數(shù)據(jù),棧具有記憶作用。棧的存儲方式有順序存儲和鏈?zhǔn)酱鎯Α5幕具\(yùn)算:(1) 入棧運(yùn)算,在棧頂位置插入元素;(2) 退棧運(yùn)算,刪除元素(取出棧頂元素并賦給一個(gè)指定的變量);(3) 讀棧頂元素,將棧頂元素賦給一個(gè)指定的變量,此時(shí)指針無變化。隊(duì)列:指允許在一端(隊(duì)尾)進(jìn)入插入,而在另一端(隊(duì)頭)進(jìn)行刪除的線性表。用rear指針指向隊(duì)
40、尾,用front指針指向隊(duì)頭元素的前一個(gè)位置。隊(duì)列是“先進(jìn)先出”(FIFO)或“后進(jìn)后出”(LILO)的線性表。隊(duì)列運(yùn)算包括:(1) 入隊(duì)運(yùn)算:從隊(duì)尾插入一個(gè)元素; (2) 退隊(duì)運(yùn)算:從隊(duì)頭刪除一個(gè)元素。隊(duì)列的順序存儲結(jié)構(gòu)一般采用隊(duì)列循環(huán)的形式。循環(huán)隊(duì)列s=0表示隊(duì)列空;s=1且front=rear表示隊(duì)列滿。計(jì)算循環(huán)隊(duì)列的元素個(gè)數(shù):“尾指針減頭指針”,若為負(fù)數(shù),再加其容量即可。1.6 樹與二叉樹樹是一種簡單的非線性結(jié)構(gòu),其所有元素之間具有明顯的層次特性。在樹結(jié)構(gòu)中,每一個(gè)結(jié)點(diǎn)只有一個(gè)前件,稱為父結(jié)點(diǎn)。沒有前件的結(jié)點(diǎn)只有一個(gè),稱為樹的根結(jié)點(diǎn),簡稱樹的根。每一個(gè)結(jié)點(diǎn)可以有多個(gè)后件,稱為該結(jié)點(diǎn)的子
41、結(jié)點(diǎn)。沒有后件的結(jié)點(diǎn)稱為葉子結(jié)點(diǎn)。在樹結(jié)構(gòu)中,一個(gè)結(jié)點(diǎn)所擁有的后件的個(gè)數(shù)稱為該結(jié)點(diǎn)的度,所有結(jié)點(diǎn)中最大的度稱為樹的度。樹的最大層次稱為樹的深度。二叉樹的特點(diǎn):(1) 非空二叉樹只有一個(gè)根結(jié)點(diǎn);(2) 每一個(gè)結(jié)點(diǎn)最多有兩棵子樹,且分別稱為該結(jié)點(diǎn)的左子樹與右子樹。滿二叉樹是指除最后一層外,每一層上的所有結(jié)點(diǎn)有兩個(gè)子結(jié)點(diǎn),則k層上有2k-1個(gè)結(jié)點(diǎn)深度為m的滿二叉樹有2m-1個(gè)結(jié)點(diǎn)。完全二叉樹是指除最后一層外,每一層上的結(jié)點(diǎn)數(shù)均達(dá)到最大值,在最后一層上只缺少右邊的若干結(jié)點(diǎn)。二叉樹基本性質(zhì):(1)在二叉樹的第k層上,最多有2k-1(k1)個(gè)結(jié)點(diǎn); (2)深度為m的二叉樹最多有2m-1個(gè)結(jié)點(diǎn); (3)度為
42、0的結(jié)點(diǎn)(即葉子結(jié)點(diǎn))總是比度為2的結(jié)點(diǎn)多一個(gè); (4)具有n個(gè)結(jié)點(diǎn)的二叉樹,其深度至少為log2n+1,其中l(wèi)og2n表示取log2n的整數(shù)部分(5) 具有n個(gè)結(jié)點(diǎn)的完全二叉樹的深度為log2n+1;(6) 設(shè)完全二叉樹共有n個(gè)結(jié)點(diǎn)。如果從根結(jié)點(diǎn)開始,按層序(每一層從左到右)用自然數(shù)1,2,n給結(jié)點(diǎn)進(jìn)行編號(k=1,2.n),有以下結(jié)論:若k=1,則該結(jié)點(diǎn)為根結(jié)點(diǎn),它沒有父結(jié)點(diǎn);若k1,則該結(jié)點(diǎn)的父結(jié)點(diǎn)編號為INT(k/2);若2kn,則k結(jié)點(diǎn)的左子結(jié)點(diǎn)編號為2k;否則該結(jié)點(diǎn)無左子結(jié)點(diǎn)(也無右子結(jié)點(diǎn));若2k+1n,則編號為k的結(jié)點(diǎn)的右子結(jié)點(diǎn)編號為2k+1;否則該結(jié)點(diǎn)無右子結(jié)點(diǎn)。補(bǔ)充:增加度
43、為1的結(jié)點(diǎn)不會影響二叉樹的葉子結(jié)點(diǎn)數(shù),每增加一個(gè)度為2的結(jié)點(diǎn)便會增加一個(gè)葉子結(jié)點(diǎn),沒有度為2的結(jié)點(diǎn)時(shí)葉子結(jié)點(diǎn)數(shù)為1。已知完全二叉樹有x個(gè)結(jié)點(diǎn),求其葉子結(jié)點(diǎn)數(shù):確定層數(shù)為k; 第k層的結(jié)點(diǎn)數(shù)y=x-(2 k-1-1);第k-1層的葉子結(jié)點(diǎn)數(shù)n=2 (k-1)-1-y/2; 最后y+n。二叉樹存儲結(jié)構(gòu)采用鏈?zhǔn)酱鎯Y(jié)構(gòu),對于滿二叉樹與完全二叉樹可以按層序進(jìn)行順序存儲。二叉樹的遍歷:(1)前序遍歷(DLR),首先訪問根結(jié)點(diǎn),然后遍歷左子樹,最后遍歷右子樹;(樹根在第一,下走不跳結(jié)點(diǎn))(2)中序遍歷(LDR),首先遍歷左子樹,然后訪問根結(jié)點(diǎn),最后遍歷右子樹;(有左先左,再尋根,后找右。最左邊的結(jié)點(diǎn)最先遍
44、歷,最右邊的結(jié)點(diǎn)最后遍歷)(3)后序遍歷(LRD)首先遍歷左子樹,然后訪問遍歷右子樹,最后訪問根結(jié)點(diǎn)。(有左先左,再找右,后尋根,到最右一路上行,樹根在最后)小結(jié):邏輯結(jié)構(gòu)可分為線性表和非線性表。 線性表包括棧、隊(duì)列,其存儲方式為順序存儲、鏈?zhǔn)酱鎯伞f準(zhǔn)叫陀校壕€性鏈表,帶鏈的棧, 帶鏈的隊(duì)列,循環(huán)鏈表等。 非線性表包括樹(二叉樹),其存儲方式為鏈?zhǔn)酱鎯Α?.7 查找技術(shù)只能使用順序查找的兩種情況:(1)線性表為無序表,不管是順序存儲還是鏈?zhǔn)酱鎯?;?)表采用鏈?zhǔn)酱鎯Y(jié)構(gòu),即使是有序線性表。二分法查找只適用于順序存儲的有序表,對于長度為n的有序線性表,最壞情況只需比較log2n次,而順序查找
45、需要比較n次。1.8 排序技術(shù)排序是指將一個(gè)無序序列整理成按值非遞減順序排列的有序序列。交換類排序法:(1)冒泡排序法,需要比較的次數(shù)為n(n-1)/2; (2 ) 快速排序法。插入類排序法:(1)簡單插入排序法,最壞情況需要n(n-1)/2次比較; (2) 希爾排序法,最壞情況需要O(n1.5)次比較。選擇類排序法:(1)簡單選擇排序法, 最壞情況需要n(n-1)/2次比較;(2) 堆排序法,最壞情況需要O(nlog2n)次比較。相比以上幾種(除希爾排序法外),堆排序法的時(shí)間復(fù)雜度最小。第二章 程序設(shè)計(jì)基礎(chǔ)2.1 程序設(shè)計(jì)設(shè)計(jì)方法和風(fēng)格“清晰第一、效率第二”已成為當(dāng)今主導(dǎo)的程序設(shè)計(jì)風(fēng)格。形成
46、良好的程序設(shè)計(jì)風(fēng)格需注意:(詳見書P27)1、源程序文檔化; 2、數(shù)據(jù)說明的方法; 3、語句的結(jié)構(gòu); 4、輸入和輸出。注釋分序言性注釋和功能性注釋。 語句結(jié)構(gòu)清晰第一、效率第二。2.2 結(jié)構(gòu)化程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)方法的四條原則是:1、自頂向下; 2、逐步求精; 3、模塊化; 4、限制使用goto語句。結(jié)構(gòu)化程序的基本結(jié)構(gòu)及特點(diǎn):(1)順序結(jié)構(gòu):一種簡單的程序設(shè)計(jì),最基本、最常用的結(jié)構(gòu);(2)選擇結(jié)構(gòu):又稱分支結(jié)構(gòu),包括簡單選擇和多分支選擇結(jié)構(gòu),可根據(jù)條件,判斷應(yīng)該 選擇哪一條分支來執(zhí)行相應(yīng)的語句序列;(3)循環(huán)結(jié)構(gòu):又稱重復(fù)結(jié)構(gòu),可根據(jù)給定條件,判斷是否需要重復(fù)執(zhí)行某一相同或類似的程序段。結(jié)
47、構(gòu)化程序設(shè)計(jì)的特點(diǎn):只有一個(gè)入口和出口2.3 面向?qū)ο蟮某绦蛟O(shè)計(jì)面向?qū)ο蟮某绦蛟O(shè)計(jì)的首次提出以60年代末挪威奧斯陸大學(xué)和挪威計(jì)算機(jī)中心研制的SIMULA語言為標(biāo)志。面向?qū)ο蠓椒ǖ膬?yōu)點(diǎn):(1)與人類習(xí)慣的思維方法一致; (2)穩(wěn)定性好; (3)可重用性好;(4)易于開發(fā)大型軟件產(chǎn)品; (5)可維護(hù)性好。對象是面向?qū)ο蠓椒ㄖ凶罨镜母拍?,可以用來表示客觀世界中的任何實(shí)體,對象是實(shí)體的抽象。面向?qū)ο蟮某绦蛟O(shè)計(jì)方法中,對象是由數(shù)據(jù)的容許的操作組成的封裝體,是系統(tǒng)中用來描述客觀事物的一個(gè)實(shí)體,是構(gòu)成系統(tǒng)的一個(gè)基本單位,由一組表示其靜態(tài)特征的屬性和它可執(zhí)行的一組操作組成。屬性即對象所包含的信息,它在設(shè)計(jì)對
48、象時(shí)確定,一般只能通過執(zhí)行對象的操作來改變。操作描述了對象執(zhí)行的功能,是對象的動態(tài)屬性,操作也稱為方法或服務(wù)。對象的基本特點(diǎn):(1)標(biāo)識惟一性; (2)分類性; (3)多態(tài)性; (4)封裝性; (5)模塊獨(dú)立性好。類是指具有共同屬性、共同方法的對象的集合。類是關(guān)于對象性質(zhì)的描述。類是對象的抽象,對象是其對應(yīng)類的一個(gè)實(shí)例。消息是一個(gè)實(shí)例與另一個(gè)實(shí)例之間傳遞的信息。對象間的通信靠消息傳遞。它請求對象執(zhí)行某一處理或回答某一要求的信息,它統(tǒng)一了數(shù)據(jù)流和控制流。消息的組成包括:(1)接收消息的對象的名稱; (2)消息標(biāo)識符,也稱消息名; (3)零個(gè)或多個(gè)參數(shù)。繼承是使用已有的類定義作為基礎(chǔ)建立新類的定義
49、技術(shù),廣義指能夠直接獲得已有的性質(zhì)和特征,而不必重復(fù)定義他們。繼承具有傳遞性,一個(gè)類實(shí)際上繼承了他上層的全部基類的特性。繼承分單繼承和多重繼承。單繼承指一個(gè)類只允許有一個(gè)父類,即類等級為樹形結(jié)構(gòu);多重繼承指一個(gè)類允許有多個(gè)父類。多態(tài)性是指同樣的消息被不同的對象接受時(shí)可導(dǎo)致完全不同的行動的現(xiàn)象第三章 軟件工程基礎(chǔ)3.1 軟件工程基本概念計(jì)算機(jī)軟件是包括程序、數(shù)據(jù)及相關(guān)文檔的完整集合。軟件的特點(diǎn)包括:(1)軟件是一種邏輯實(shí)體,具有抽象性;(2)軟件的生產(chǎn)與硬件不同,它沒有明顯的制作過程;(3)軟件在運(yùn)行、使用期間不存在磨損、老化問題;(4)軟件的開發(fā)、運(yùn)行對計(jì)算機(jī)系統(tǒng)具有依賴性,受計(jì)算機(jī)系統(tǒng)的限制
50、,這導(dǎo)致了軟件移植的問題;(5)軟件復(fù)雜性高,成本昂貴;(6)軟件開發(fā)涉及諸多的社會因素。軟件按功能分為應(yīng)用軟件、系統(tǒng)軟件、支撐軟件(或工具軟件)。軟件危機(jī)主要表現(xiàn)在成本、質(zhì)量、生產(chǎn)率等問題。軟件工程是應(yīng)用于計(jì)算機(jī)軟件的定義、開發(fā)和維護(hù)的一整套方法、工具、文檔、實(shí)踐標(biāo)準(zhǔn)和工序。簡單的說就是使軟件走向工程化。軟件工程的核心思想是把軟件產(chǎn)品看作是一個(gè)工程產(chǎn)品來處理。軟件工程包括3個(gè)要素:方法、工具和過程。軟件工程過程是把軟件轉(zhuǎn)化為輸出的一組彼此相關(guān)的資源活動,包含4種基本活動:(1)P(plan)軟件規(guī)格說明; (2)D(do)軟件開發(fā); (3)C(check)軟件確認(rèn); (4)A(action)
51、軟件演進(jìn)。軟件生命周期:軟件產(chǎn)品從提出、實(shí)現(xiàn)、使用維護(hù)到停止使用退役的過程。軟件生命周期分三個(gè)階段:軟件定義、軟件開發(fā)、運(yùn)行維護(hù),主要活動階段是:(1)可行性研究與計(jì)劃制定; (2)需求分析;(3)軟件設(shè)計(jì)(概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)); (4)軟件實(shí)現(xiàn); (5)軟件測試; (6)運(yùn)行和維護(hù)。軟件工程的目標(biāo):在給定成本、進(jìn)度的前提下,開發(fā)出具有有效性、可靠性、可理解性、可維護(hù)性、可重用性、可適應(yīng)性、可移植性、可追蹤性和可互操作性且滿足用戶需求的產(chǎn)品?;灸繕?biāo):付出較低的開發(fā)成本;達(dá)到要求的軟件功能;取得較好的軟件性能;開發(fā)軟件易于移植;需要較低的費(fèi)用;能按時(shí)完成開發(fā),及時(shí)交付使用。軟件工程的理論和技術(shù)
52、性研究的內(nèi)容主要包括:軟件開發(fā)技術(shù)和軟件工程管理。軟件開發(fā)技術(shù)包括:軟件開發(fā)方法學(xué)、開發(fā)過程、開發(fā)工具和軟件工程環(huán)境。軟件開發(fā)環(huán)境或軟件工程環(huán)境是指全面支持軟件開發(fā)全過程的軟件工具的集合。軟件工程管理包括:軟件管理學(xué)、軟件工程經(jīng)濟(jì)學(xué)、軟件心理學(xué)等內(nèi)容。軟件管理學(xué)包括人員組織、進(jìn)度安排、質(zhì)量保證、配置管理、項(xiàng)目計(jì)劃等。軟件工程基本原則:抽象、信息隱蔽、模塊化、局部化、確定性、一致性、完備性和可驗(yàn)證性。3.2 結(jié)構(gòu)化分析方法結(jié)構(gòu)化方法的核心和基礎(chǔ)是結(jié)構(gòu)化程序設(shè)計(jì)理論。軟件定義階段中,可行性研究與計(jì)劃的制定是確定待開發(fā)目標(biāo)和總的要求,給出它的功能、性能、可靠性以及接口等方面的可能方案,制定完成開發(fā)的
53、實(shí)施計(jì)劃。需求分析,對待開發(fā)軟件提出的需求分析并給出詳細(xì)的定義。需求分析階段的工作:需求獲取,需求分析,編寫需求規(guī)格說明書,需求評審。需求分析方法有:(1)結(jié)構(gòu)化需求分析方法; 面向數(shù)據(jù)結(jié)構(gòu)的Jackson方法(ISD);面向數(shù)據(jù)流的結(jié)構(gòu)化分析方法(SA);面向數(shù)據(jù)結(jié)構(gòu)的結(jié)構(gòu)化數(shù)據(jù)系統(tǒng)開發(fā)方法(DSSD);(2)面向?qū)ο蟮姆治龅姆椒ǎ∣OA)。從需求分析建立的模型的特性來分:靜態(tài)分析和動態(tài)分析。結(jié)構(gòu)化分析方法的實(shí)質(zhì):著眼于數(shù)據(jù)流,自頂向下,逐層分解,建立系統(tǒng)的處理流程,以數(shù)據(jù)流圖和數(shù)據(jù)字典為主要工具,建立系統(tǒng)的邏輯模型。結(jié)構(gòu)化分析的常用工具:數(shù)據(jù)流圖;數(shù)據(jù)字典;判定樹;判定表。(1)數(shù)據(jù)流圖(
54、DFD圖):描述數(shù)據(jù)處理過程的工具,是需求理解的邏輯模型的圖形表示,它直接支持系統(tǒng)功能建模。加工(轉(zhuǎn)換)圓框,輸入數(shù)據(jù)經(jīng)加工變換產(chǎn)生的輸出。數(shù)據(jù)流箭頭,沿箭頭方向傳遞數(shù)據(jù)的通道,一般在旁邊標(biāo)注數(shù)據(jù)流名。存儲文件(數(shù)據(jù)源)雙橫線,表示處理過程中存放各種數(shù)據(jù)的文件。源、潭方框,表示系統(tǒng)和環(huán)境的接口,屬系統(tǒng)之外的實(shí)體。(2)數(shù)據(jù)字典:對所有與系統(tǒng)相關(guān)的數(shù)據(jù)元素的一個(gè)有組織的列表,以及精確的、嚴(yán)格的定義,使得用戶和系統(tǒng)分析員對于輸入、輸出、存儲成分和中間計(jì)算結(jié)果有共同的理解。數(shù)據(jù)字典是結(jié)構(gòu)化分析的核心。(3)判定樹:從問題定義的文字描述中分清哪些是判定的條件,哪些是判定的結(jié)論,根據(jù)描述材料中的連接詞找出判定條件之間的從屬關(guān)系、并列關(guān)系、選擇關(guān)系,根據(jù)它們構(gòu)造判定樹。(4)判定表:與判定樹相似,當(dāng)數(shù)據(jù)流圖中的加工要依賴于多個(gè)邏輯條件的取值,即完成該加工的一組動作是由于某一組條件取值的組合而引發(fā)的,使用判定表描述比較適宜。軟件需求規(guī)格說明書的特點(diǎn):正確性; 無岐義性; 完整性; 可驗(yàn)證性; 一致性; 可理解性; 可修改性; 可追蹤性。3.3 結(jié)構(gòu)化設(shè)計(jì)方法軟件設(shè)計(jì)是
- 溫馨提示:
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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024《增值稅法》全文學(xué)習(xí)解讀(規(guī)范增值稅的征收和繳納保護(hù)納稅人的合法權(quán)益)
- 2024《文物保護(hù)法》全文解讀學(xué)習(xí)(加強(qiáng)對文物的保護(hù)促進(jìn)科學(xué)研究工作)
- 銷售技巧培訓(xùn)課件:接近客戶的套路總結(jié)
- 20種成交的銷售話術(shù)和技巧
- 銷售技巧:接近客戶的8種套路
- 銷售套路總結(jié)
- 房產(chǎn)銷售中的常見問題及解決方法
- 銷售技巧:值得默念的成交話術(shù)
- 銷售資料:讓人舒服的35種說話方式
- 汽車銷售績效管理規(guī)范
- 銷售技巧培訓(xùn)課件:絕對成交的銷售話術(shù)
- 頂尖銷售技巧總結(jié)
- 銷售技巧:電話營銷十大定律
- 銷售逼單最好的二十三種技巧
- 銷售最常遇到的10大麻煩