講面向過程的程序設(shè)計(jì).ppt_第1頁
講面向過程的程序設(shè)計(jì).ppt_第2頁
講面向過程的程序設(shè)計(jì).ppt_第3頁
講面向過程的程序設(shè)計(jì).ppt_第4頁
講面向過程的程序設(shè)計(jì).ppt_第5頁
已閱讀5頁,還剩108頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第3章 程序設(shè)計(jì)初步 第4章 函數(shù)與預(yù)處理 第5章 數(shù)組 第6章 指針 第7章 自定義數(shù)據(jù)類型,第4講 面向過程的程序設(shè)計(jì),第3章 程序設(shè)計(jì)初步,3.1 面向過程的程序設(shè)計(jì)和算法 3.2 +程序和語句 3.3 賦值語句 3.4 C+的輸入與輸出 3.5 編寫順序結(jié)構(gòu)的程序 3.6 關(guān)系運(yùn)算和邏輯運(yùn)算 3.7 選擇結(jié)構(gòu)和語句 3.8 條件運(yùn)算符和條件表達(dá)式 3.9 多分支選擇結(jié)構(gòu)和switch語句 3.10 編寫選擇結(jié)構(gòu)的程序 3.11 循環(huán)結(jié)構(gòu)和循環(huán)語句 3.12 循環(huán)的嵌套 3.13 break語句和continue語句 3.14 編寫循環(huán)結(jié)構(gòu)的程序,在面向過程的程序設(shè)計(jì)中,程序設(shè)計(jì)者必須指定計(jì)算機(jī)執(zhí)行的具體步驟,程序設(shè)計(jì)者不僅要考慮程序要“做什么”,還要解決“怎么做”的問題,根據(jù)程序要“做什么”的要求,寫出一個(gè)個(gè)語句,安排好它們的執(zhí)行順序。怎樣設(shè)計(jì)這些步驟,怎樣保證它的正確性和具有較高的效率,這就是算法需要解決的問題。,3.1 面向過程的程序設(shè)計(jì)和算法,一個(gè)面向過程的程序應(yīng)包括以下兩方面內(nèi)容: (1) 對(duì)數(shù)據(jù)的描述。在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,即數(shù)據(jù)結(jié)構(gòu)(data structure)。 (2) 對(duì)操作的描述。即操作步驟,也就是算法(algorithm)。 對(duì)于面向過程的程序,可以用下面的公式表示: 程序=算法+數(shù)據(jù)結(jié)構(gòu) 作為程序設(shè)計(jì)人員,必須認(rèn)真考慮和設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)和操作步驟(即算法)。 算法是處理問題的一系列的步驟。算法必須具體地指出在執(zhí)行時(shí)每一步應(yīng)當(dāng)怎樣做。,3.1.1 算法的概念,不要認(rèn)為只有“計(jì)算”的問題才有算法。廣義地說,為解決一個(gè)問題而采取的方法和步驟,就稱為“算法”。 計(jì)算機(jī)算法可分為兩大類別:數(shù)值算法和非數(shù)值算法。數(shù)值算法的目的是求數(shù)值解。非數(shù)值算法包括的面十分廣泛,最常見的是用于事務(wù)管理領(lǐng)域。目前,計(jì)算機(jī)在非數(shù)值方面的應(yīng)用遠(yuǎn)遠(yuǎn)超過了在數(shù)值方面的應(yīng)用。 C+既支持面向過程的程序設(shè)計(jì),又支持面向?qū)ο蟮某绦蛟O(shè)計(jì)。無論面向過程的程序設(shè)計(jì)還是面向?qū)ο蟮某绦蛟O(shè)計(jì),都離不開算法設(shè)計(jì)。,1. 自然語言 用中文或英文等自然語言描述算法。但容易產(chǎn)生歧義性,在程序設(shè)計(jì)中一般不用自然語言表示算法。 2. 流程圖 可以用傳統(tǒng)的流程圖或結(jié)構(gòu)化流程圖。用圖的形式表示算法,比較形象直觀,但修改算法時(shí)顯得不大方便。 3. 偽代碼(pseudo code) 偽代碼是用介于自然語言和計(jì)算機(jī)語言之間的文字和符號(hào)來描述算法。如,3.1.2 算法的表示,if x is positive then print x else print-x 用偽代碼寫算法并無固定的、嚴(yán)格的語法規(guī)則,只需把意思表達(dá)清楚,并且書寫的格式要寫成清晰易讀的形式。它不用圖形符號(hào),因此書寫方便、格式緊湊,容易修改,便于向計(jì)算機(jī)語言算法(即程序)過渡。 4. 用計(jì)算機(jī)語言表示算法 用一種計(jì)算機(jī)語言去描述算法,這就是計(jì)算機(jī)程序。,由第1章已知,一個(gè)程序包含一個(gè)或多個(gè)程序單位(每個(gè)程序單位構(gòu)成一個(gè)程序文件)。每一個(gè)程序單位由以下幾個(gè)部分組成: (1) 預(yù)處理命令。如#include命令和#define命令。 (2) 聲明部分。例如對(duì)數(shù)據(jù)類型和函數(shù)的聲明,以及對(duì)變量的定義。 (3) 函數(shù)。包括函數(shù)首部和函數(shù)體,在函數(shù)體中可以包含若干聲明語句和執(zhí)行語句。 如下面是一個(gè)完整的C+程序:,3.2 C+程序和語句,#include /預(yù)處理命令 using namespace std; /在函數(shù)之外的聲明部分 int a=3; /在函數(shù)之外的聲明部分 int main( ) /函數(shù)首部 float b; /函數(shù)內(nèi)的聲明部分 b=4.5; /執(zhí)行語句 coutab; /執(zhí)行語句 return 0; /執(zhí)行語句 如果一個(gè)變量在函數(shù)之外進(jìn)行聲明,此變量是全局變量,它的有效范圍是從該行開始到本程序單位結(jié)束。如果一個(gè)變量在函數(shù)內(nèi)聲明,此變量是局部變量,它的有效范圍是從該行開始到本函數(shù)結(jié)束。C+程序結(jié)構(gòu)可以用圖31表示。,圖3.1,程序應(yīng)該包括數(shù)據(jù)描述(由聲明語句來實(shí)現(xiàn))和數(shù)據(jù)操作(由執(zhí)行語句來實(shí)現(xiàn))。數(shù)據(jù)描述主要包括數(shù)據(jù)類型的聲明、函數(shù)和變量的定義、變量的初始化等。數(shù)據(jù)操作的任務(wù)是對(duì)已提供的數(shù)據(jù)進(jìn)行加工。 C+程序中最小的獨(dú)立單位是語句(statement)。它相當(dāng)于一篇文章中的一個(gè)句子。句子是用句號(hào)結(jié)束的。語句一般是用分號(hào)結(jié)束的(復(fù)合語句是以右花括號(hào)結(jié)束的)。 C+語句可以分為以下4種:,1. 聲明語句 如int a,b;在C語言中,只有產(chǎn)生實(shí)際操作的才稱為語句,對(duì)變量的定義不作為語句,而且要求對(duì)變量的定義必須出現(xiàn)在本塊中所有程序語句之前。因此C程序員已經(jīng)養(yǎng)成了一個(gè)習(xí)慣: 在函數(shù)或塊的開頭位置定義全部變量。在C+中,對(duì)變量(以及其他對(duì)象)的定義被認(rèn)為是一條語句,并且可以出現(xiàn)在函數(shù)中的任何行,即可以放在其他程序語句可以出現(xiàn)的地方,也可以放在函數(shù)之外。這樣更加靈活,可以很方便地實(shí)現(xiàn)變量的局部化(變量的作用范圍從聲明語句開始到本函數(shù)或本塊結(jié)束)。,2. 執(zhí)行語句 通知計(jì)算機(jī)完成一定的操作。執(zhí)行語句包括: (1) 控制語句,完成一定的控制功能。C+有9種控制語句,即 if( )else (條件語句) for( ) (循環(huán)語句) while( ) (循環(huán)語句) dowhile( ) (循環(huán)語句) continue (結(jié)束本次循環(huán)語句) break (中止執(zhí)行或循環(huán)語句) switch (多分支選擇語句) goto (轉(zhuǎn)向語句) return (從函數(shù)返回語句),(2) 函數(shù)和流對(duì)象調(diào)用語句。函數(shù)調(diào)用語句由一次函數(shù)調(diào)用加一個(gè)分號(hào)構(gòu)成一個(gè)語句,例如 sort(x,y,z); /假設(shè)已定義了sort函數(shù),它有3個(gè)參數(shù) coutxendl; /流對(duì)象調(diào)用語句 (3) 表達(dá)式語句。由一個(gè)表達(dá)式加一個(gè)分號(hào)構(gòu)成一個(gè)語句。最典型的是: 由賦值表達(dá)式構(gòu)成一個(gè)賦值語句。 i=i+1 /是一個(gè)賦值表達(dá)式 i=i+1; /是一個(gè)賦值語句 任何一個(gè)表達(dá)式的最后加一個(gè)分號(hào)都可以成為一個(gè)語句。一個(gè)語句必須在最后出現(xiàn)分號(hào)。 表達(dá)式能構(gòu)成語句是C和C+語言的一個(gè)重要特色。C+程序中大多數(shù)語句是表達(dá)式語句(包括函數(shù)調(diào)用語句)。,3. 空語句 下面是一個(gè)空語句: ; 即只有一個(gè)分號(hào)的語句,它什么也不做。有時(shí)用來做被轉(zhuǎn)向點(diǎn),或循環(huán)語句中的循環(huán)體。,4. 復(fù)合語句 可以用 把一些語句括起來成為復(fù)合語句。如下面是一個(gè)復(fù)合語句。 z=x+y; if(z100) z=z-100; coutz; 注意:復(fù)合語句中最后一個(gè)語句中最后的分號(hào)不能省略。 在本章中將介紹幾種順序執(zhí)行的語句,在執(zhí)行這些語句的過程中不會(huì)發(fā)生流程的控制轉(zhuǎn)移。,前面已介紹,賦值語句是由賦值表達(dá)式加上一個(gè)分號(hào)構(gòu)成。 (1)C+的賦值語句具有其他高級(jí)語言的賦值語句的功能。但不同的是: C+中的賦值號(hào)“”是一個(gè)運(yùn)算符,可以寫成 a=b=c=d; 而在其他大多數(shù)語言中賦值號(hào)不是運(yùn)算符,上面的寫法是不合法的。,3.3 賦值語句,(2) 關(guān)于賦值表達(dá)式與賦值語句的概念。在C+中,賦值表達(dá)式可以包括在其他表達(dá)式之中,例如 if(a=b)0) cout000) cout0endl; 因?yàn)樵趇f的條件中不能包含賦值語句。C+把賦值語句和賦值表達(dá)式區(qū)別開來,增加了表達(dá)式的種類,能實(shí)現(xiàn)其他語言中難以實(shí)現(xiàn)的功能。,輸入和輸出并不是C+語言中的正式組成成分。C和C+本身都沒有為輸入和輸出提供專門的語句結(jié)構(gòu)。輸入輸出不是由C+本身定義的,而是在編譯系統(tǒng)提供的I/O庫中定義的。 C+的輸出和輸入是用“流”(stream)的方式實(shí)現(xiàn)的。圖3.2和圖3.3表示C+通過流進(jìn)行輸入輸出的過程。,3.4 C+的輸入與輸出,圖3.2 圖3.3,有關(guān)流對(duì)象cin、cout和流運(yùn)算符的定義等信息是存放在C+的輸入輸出流庫中的,因此如果在程序中使用cin、cout和流運(yùn)算符,就必須使用預(yù)處理命令把頭文件stream包含到本文件中: #include 盡管cin和cout不是C+本身提供的語句,但是在不致混淆的情況下,為了敘述方便,常常把由cin和流提取運(yùn)算符“”實(shí)現(xiàn)輸入的語句稱為輸入語句或cin語句,把由cout和流插入運(yùn)算符“”實(shí)現(xiàn)輸出的語句稱為輸出語句或cout語句。根據(jù)C+的語法,凡是能實(shí)現(xiàn)某種操作而且最后以分號(hào)結(jié)束的都是語句。,cout語句的一般格式為 cout變量1變量2變量n; 在定義流對(duì)象時(shí),系統(tǒng)會(huì)在內(nèi)存中開辟一段緩沖區(qū),用來暫存輸入輸出流的數(shù)據(jù)。在執(zhí)行cout語句時(shí),先把插入的數(shù)據(jù)順序存放在輸出緩沖區(qū)中,直到輸出緩沖區(qū)滿或遇到cout語句中的endl(或n,ends,flush)為止,此時(shí)將緩沖區(qū)中已有的數(shù)據(jù)一起輸出,并清空緩沖區(qū)。輸出流中的數(shù)據(jù)在系統(tǒng)默認(rèn)的設(shè)備(一般為顯示器)輸出。,*3.4.1 輸入流與輸出流的基本操作,一個(gè)cout語句可以分寫成若干行。如 coutThis is a simple C+ program.endl; 可以寫成 coutThis is /注意行末尾無分號(hào) a C+ program. endl; /語句最后有分號(hào) 也可寫成多個(gè)cout語句,即 coutThis is ; /語句末尾有分號(hào) cout a C+ ; cout program.; coutendl; 以上3種情況的輸出均為,This is a simple C+ program. 注意 不能用一個(gè)插入運(yùn)算符“abcd;,可以寫成 cina /注意行末尾無分號(hào) b /這樣寫可能看起來清晰些 c d; 也可以寫成 cina; cinb; cinc; cind; 以上3種情況均可以從鍵盤輸入: 1 2 3 4 也可以分多行輸入數(shù)據(jù):,1 2 3 4 在用cin輸入時(shí),系統(tǒng)也會(huì)根據(jù)變量的類型從輸入流中提取相應(yīng)長(zhǎng)度的字節(jié)。如有 char c1,c2; int a; float b; cinc1c2ab; 如果輸入 1234 56.78,注意: 34后面應(yīng)該有空格以便和56.78分隔開。也可以按下面格式輸入: 1 2 34 56.78 (在1和2之間有空格) 不能用cin語句把空格字符和回車換行符作為字符輸入給字符變量,它們將被跳過。如果想將空格字符或回車換行符(或任何其他鍵盤上的字符)輸入給字符變量,可以用3.4.3節(jié)介紹的getchar函數(shù)。 在組織輸入流數(shù)據(jù)時(shí),要仔細(xì)分析cin語句中變量的類型,按照相應(yīng)的格式輸入,否則容易出錯(cuò)。,上面介紹的是使用cout和cin時(shí)的默認(rèn)格式。但有時(shí)人們?cè)谳斎胼敵鰰r(shí)有一些特殊的要求,如在輸出實(shí)數(shù)時(shí)規(guī)定字段寬度,只保留兩位小數(shù),數(shù)據(jù)向左或向右對(duì)齊等。C+提供了在輸入輸出流中使用的控制符(有的書中稱為操縱符),見書中表3.1。 需要注意的是: 如果使用了控制符,在程序單位的開頭除了要加iostream頭文件外,還要加iomanip頭文件。 舉例: 輸出雙精度數(shù)。,*3.4.2 在輸入流與輸出流中使用控制符,double a=123.456789012345;對(duì)a賦初值 (1) couta;輸出: 123.456 (2) coutsetprecision(9)a;輸出: 123.456789 (3) coutsetprecision(6);恢復(fù)默認(rèn)格式(精度為6) (4) cout setiosflags(iosfixed);輸出: 123.456789 (5) coutsetiosflags(iosfixed)setprecision(8)a;輸出: 123.45678901 (6) coutsetiosflags(iosscientific)a;輸出: 1.234568e+02 (7) coutsetiosflags(iosscientific)setprecision(4)a; 輸出: 1.2346e02 下面是整數(shù)輸出的例子: int b=123456;對(duì)b賦初值 (1) coutb;輸出: 123456 (2) couthexb; 輸出: 1e240 (3) coutsetiosflags(iosuppercase)b;輸出: 1E240 (4) coutsetw(10)b,b; 輸出: 123456,123456 (5) coutsetfill(*)setw(10)b;輸出: * 123456 (6) coutsetiosflags(iosshowpos)b;輸出: +123456,如果在多個(gè)cout語句中使用相同的setw(n),并使用setiosflags(iosright),可以實(shí)現(xiàn)各行數(shù)據(jù)右對(duì)齊,如果指定相同的精度,可以實(shí)現(xiàn)上下小數(shù)點(diǎn)對(duì)齊。 例3.1 各行小數(shù)點(diǎn)對(duì)齊。 #include #include using namespace std; int main( ) double a=123.456,b=3.14159,c=-3214.67; coutsetiosflags(iosfixed)setiosflags(iosright)setprecision(2); coutsetw(10)aendl; coutsetw(10)bendl; coutsetw(10)cendl; return 0; ,輸出如下: 123.46 (字段寬度為10,右對(duì)齊,取兩位小數(shù)) 3.14 -3214.67 先統(tǒng)一設(shè)置定點(diǎn)形式輸出、取兩位小數(shù)、右對(duì)齊。這些設(shè)置對(duì)其后的輸出均有效(除非重新設(shè)置),而setw只對(duì)其后一個(gè)輸出項(xiàng)有效,因此必須在輸出a,b,c之前都要寫setw(10)。,C+還保留了C語言中用于輸入和輸出單個(gè)字符的函數(shù),使用很方便。其中最常用的有g(shù)etchar函數(shù)和putchar函數(shù)。 1. putchar函數(shù)(字符輸出函數(shù)) putchar函數(shù)的作用是向終端輸出一個(gè)字符。例如 putchar(c); 它輸出字符變量的值。,3.4.3 用getchar和putchar 函數(shù)進(jìn)行字符的輸入和輸出,例3.2 輸出單個(gè)字符。 #include /或者包含頭文件stdio.h: #include using namespace std; int main( ) char a,b,c; a=B;b=O;c=Y; putchar(a);putchar(b);putchar(c);putchar(n); putchar(66);putchar(79);putchar(89);putchar(10); return 0; 運(yùn)行結(jié)果為 BOY BOY,可以看到: 用putchar可以輸出轉(zhuǎn)義字符,putchar(n)的作用是輸出一個(gè)換行符,使輸出的當(dāng)前位置移到下一行的開頭。putchar(66)的作用是將66作為ASCII碼轉(zhuǎn)換為字符輸出,66是字母B的ASCII碼,因此putchar(66)輸出字母B。其余類似。putchar(10)中的10是換行符的ASCII碼,putchar(10)輸出一個(gè)換行符,作用與putchar(n) 相同。 也可以輸出其他轉(zhuǎn)義字符,如 putchar(101) (輸出字符A,八進(jìn)制的101是A的ASCII碼) putchar() (輸出單引號(hào)字符) putchar(015) (輸出回車,不換行,使輸出的當(dāng)前位置移到本行開頭),2. getchar函數(shù)(字符輸入函數(shù)) 此函數(shù)的作用是從終端(或系統(tǒng)隱含指定的輸入設(shè)備)輸入一個(gè)字符。getchar函數(shù)沒有參數(shù),其一般形式為getchar( )函數(shù)的值就是從輸入設(shè)備得到的字符。 例3.3 輸入單個(gè)字符。 #include using namespace std; int main( ) char c; c=getchar( ); putchar(c+32); putchar(n); return 0; 在運(yùn)行時(shí),如果從鍵盤輸入大寫字母A并按回車鍵,就會(huì)在屏幕上輸出小寫字母a。,請(qǐng)注意,getchar( )只能接收一個(gè)字符。getchar函數(shù)得到的字符可以賦給一個(gè)字符變量或整型變量,也可以不賦給任何變量,作為表達(dá)式的一部分。例如,例3.3第5行可以用下面一行代替: putchar(getchar()+32);putchar(n); 因?yàn)間etchar( )讀入的值為A,A+32是小寫字母a的ASCII碼,因此putchar函數(shù)輸出a。此時(shí)不必定義變量c。 也可用cout輸出getchar函數(shù)得到字符的ASCII的值: coutgetchar( ); 這時(shí)輸出的是整數(shù)97,因?yàn)橛胓etchar( )讀入的實(shí)際上是字符的ASCII碼,現(xiàn)在并未把它賦給一個(gè)字符變量,cout就按整數(shù)形式輸出。如果改成,cout(c=getchar( ); /設(shè)c已定義為字符變量 則輸出為字母a,因?yàn)橐筝敵鲎址兞縞的值。 可以看到用putchar和getchar函數(shù)輸出和輸入字符十分靈活方便,由于它們是函數(shù)所以可以出現(xiàn)在表達(dá)式中,例如 cout(c=getchar( )+32);,在C語言中是用printf函數(shù)進(jìn)行輸出,用scanf函數(shù)進(jìn)行輸入的。C+保留了C語言的這一用法。在此只作很簡(jiǎn)單的介紹。 scanf函數(shù)一般格式是 scanf(格式控制,輸出表列) printf函數(shù)的一般格式是 printf(格式控制,輸出表列),3.4.4 用scanf和printf函數(shù)進(jìn)行輸入和輸出,例3.4 用scanf和printf函數(shù)進(jìn)行輸入和輸出。 #include using namespace std; int main( ) int a; float b; char c; scanf(%d %c %f, 運(yùn)行情況如下: 12 A 67.98(本行為輸入,輸入的3個(gè)數(shù)據(jù)間以空格相間) a=12,b=67.980003,c=A(本行為輸出) 輸入的整數(shù)12送給整型變量a,字符A送給字符變量c,67.98送給單精度變量b。,例3.5 求一元二次方程式ax2+bx+c=0的根。a,b,c的值在運(yùn)行時(shí)由鍵盤輸入,它們的值滿足b2-4ac0。 根據(jù)求x1,x2的算法。它可以編寫出以下C+程序: #include #include /由于程序要用到數(shù)學(xué)函數(shù)sqrt,故應(yīng)包含頭文件cmath using namespace std; int main( ) float a,b,c,x1,x2; cinabc; x1=(-b+sqrt(b*b-4*a*c)/(2*a); x2=(-b-sqrt(b*b-4*a*c)/(2*a); coutx1=x1endl; coutx2=x2endl; return 0; ,3.5 編寫順序結(jié)構(gòu)的程序,運(yùn)行情況如下: 4.5 8.8 2.4 x1=-0.327612 x2=-1.17794 如果程序中要用到數(shù)學(xué)函數(shù),都要包含頭文件cmath(也可以用老形式的頭文件math.h,但提倡使用C+新形式的頭文件,請(qǐng)參閱第14章14.3節(jié))。在寫程序時(shí),一定要注意將數(shù)學(xué)表達(dá)式正確地轉(zhuǎn)換成合法的C+表達(dá)式。 可以看到: 順序結(jié)構(gòu)的程序中的各執(zhí)行語句是順序執(zhí)行的。這種程序最簡(jiǎn)單,最容易理解。,往往要求根據(jù)某個(gè)指定的條件是否滿足來決定執(zhí)行的內(nèi)容。例如,購物在1000元以下的打九五折,1000元及以上的打九折。 C+提供if語句來實(shí)現(xiàn)這種條件選擇。如 if amount1000 tax=0.95; /amount代表購物總額,tax代表折扣 else tax=0.9; /若amount1000,條件滿足,tax=0.95,否則tax=0.9 pay=amount*tax; /pay為實(shí)付款 流程可以用圖3.4表示。 圖3.4,3.6 關(guān)系運(yùn)算和邏輯運(yùn)算,上面if語句中的“amount”是一個(gè)比較符,稱為關(guān)系運(yùn)算符。 C+的關(guān)系運(yùn)算符有: (大于) = (大于或等于) = (等于) != (不等于) 優(yōu)先級(jí)相同 (低),3.6.1 關(guān)系運(yùn)算和關(guān)系表達(dá)式,關(guān)于優(yōu)先次序: 前4種關(guān)系運(yùn)算符(,)的優(yōu)先級(jí)別相同,后兩種也相同。前4種高于后兩種。例如,“”優(yōu)先于“”。而“”與“a+b 等效于 c(a+b) ab=c 等效于(ab)=c a=bc 等效于a=(bc) 用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來的式子,稱為關(guān)系表達(dá)式。關(guān)系表達(dá)式的一般形式可以表示為,表達(dá)式 關(guān)系運(yùn)算符 表達(dá)式 其中的“表達(dá)式”可以是算術(shù)表達(dá)式或關(guān)系表達(dá)式、邏輯表達(dá)式、賦值表達(dá)式、字符表達(dá)式。例如,下面都是合法的關(guān)系表達(dá)式: ab, a+bb+c,(a=3)(b=5), ab)(b=0”的值為“真”。在C和C+中都用數(shù)值1代表“真”,用0代表“假”。 如果有以下賦值表達(dá)式: d=ab 則d得到的值為1 f=abc f得到的值為0,C語言沒有提供邏輯型數(shù)據(jù),關(guān)系表達(dá)式的值(真或假)分別用數(shù)值1和0代表。C+增加了邏輯型數(shù)據(jù)。邏輯型常量只有兩個(gè),即false(假)和true(真)。 邏輯型變量要用類型標(biāo)識(shí)符bool來定義,它的值只能是true和false之一。如 bool found,flag=false; /定義邏輯變量found和flag,并使flag的初值為false found=true; /將邏輯常量true賦給邏輯變量found 由于邏輯變量是用關(guān)鍵字bool來定義的,因此又稱為布爾變量。邏輯型常量又稱為布爾常量。所謂邏輯型,就是布爾型。 設(shè)立邏輯類型的目的是為了看程序時(shí)直觀易懂。,3.6.2 邏輯常量和邏輯變量,在編譯系統(tǒng)處理邏輯型數(shù)據(jù)時(shí),將false處理為0,將true處理為1。因此,邏輯型數(shù)據(jù)可以與數(shù)值型數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算。 如果將一個(gè)非零的整數(shù)賦給邏輯型變量,則按“真”處理,如 flag=123; /賦值后flag的值為true coutflag; 輸出為數(shù)值1。,有時(shí)只用一個(gè)關(guān)系表達(dá)式還不能正確表示所指定的條件。 C+提供3種邏輯運(yùn)算符: (1) & 邏輯與 (相當(dāng)于其他語言中的AND) (2) | 邏輯或 (相當(dāng)于其他語言中的OR) (3) ! 邏輯非 (相當(dāng)于其他語言中的NOT) 邏輯運(yùn)算舉例如下: a & b 若a,b為真,則a & b為真。 a|b 若a,b之一為真,則a|b為真。 !a 若a為真,則!a為假。 書中表32為邏輯運(yùn)算的“真值表”。,3.6.3 邏輯運(yùn)算和邏輯表達(dá)式,在一個(gè)邏輯表達(dá)式中如果包含多個(gè)邏輯運(yùn)算符,按以下的優(yōu)先次序: (1) !(非) &(與) (或),即“!”為三者中最高的。 (2) 邏輯運(yùn)算符中的“&”和“|”低于關(guān)系運(yùn)算符,“!”高于算術(shù)運(yùn)算符。 例如: (ab) & (xy) 可寫成 ab & xy (a=b) | (x=y) 可寫成 a=b | x=y (!a) | (ab) 可寫成 !a | ab 將兩個(gè)關(guān)系表達(dá)式用邏輯運(yùn)算符連接起來就成為一個(gè)邏輯表達(dá)式,上面幾個(gè)式子就是邏輯表達(dá)式。邏輯表達(dá)式的一般形式可以表示為,表達(dá)式 邏輯運(yùn)算符 表達(dá)式 邏輯表達(dá)式的值是一個(gè)邏輯量“真”或“假”。前面已說明,在給出邏輯運(yùn)算結(jié)果時(shí),以數(shù)值1代表“真”,以0代表“假”,但在判斷一個(gè)邏輯量是否為“真”時(shí),采取的標(biāo)準(zhǔn)是: 如果其值是0就認(rèn)為是“假”,如果其值是非0就認(rèn)為是“真”。例如: (1) 若a=4,則!a的值為0。因?yàn)閍的值為非0,被認(rèn)作“真”,對(duì)它進(jìn)行“非”運(yùn)算,得“假”,“假”以0代表。 (2) 若a=4,b=5,則a & b的值為1。因?yàn)閍和b均為非0,被認(rèn)為是“真” 。 (3) a,b值同前,a-b|a+b的值為1。因?yàn)閍-b和a+b的值都為非零值。 (4) a,b值同前,!a | b的值為1。 (5) 4 & 0 | 2 的值為1。,在C+中,整型數(shù)據(jù)可以出現(xiàn)在邏輯表達(dá)式中,在進(jìn)行邏輯運(yùn)算時(shí),根據(jù)整型數(shù)據(jù)的值是0或非0,把它作為邏輯量假或真,然后參加邏輯運(yùn)算。 通過這幾個(gè)例子可以看出: 邏輯運(yùn)算結(jié)果不是0就是1,不可能是其他數(shù)值。而在邏輯表達(dá)式中作為參加邏輯運(yùn)算的運(yùn)算對(duì)象可以是0(“假”)或任何非0的數(shù)值(按“真”對(duì)待)。如果在一個(gè)表達(dá)式中的不同位置上出現(xiàn)數(shù)值,應(yīng)區(qū)分哪些是作為數(shù)值運(yùn)算或關(guān)系運(yùn)算的對(duì)象,哪些作為邏輯運(yùn)算的對(duì)象。 實(shí)際上,邏輯運(yùn)算符兩側(cè)的表達(dá)式不但可以是關(guān)系表達(dá)式或整數(shù)(0和非0),也可以是任何類型的數(shù)據(jù),如字符型、浮點(diǎn)型或指針型等。系統(tǒng)最終以0和非0來判定它們屬于“真”或“假”。例如c & 的值為1。,可以將表3.2改寫成書中表3.3形式。 熟練掌握C+的關(guān)系運(yùn)算符和邏輯運(yùn)算符后,可以巧妙地用一個(gè)邏輯表達(dá)式來表示一個(gè)復(fù)雜的條件。例如,要判別某一年(year)是否為閏年。閏年的條件是符合下面兩者之一: 能被4整除,但不能被100整除。能被100整除,又能被400整除。例如2004、 2000年是閏年,2005、 2100年不是閏年。 可以用一個(gè)邏輯表達(dá)式來表示: (year % 4 = 0 & year % 100 != 0) | year % 400 = 0 當(dāng)給定year為某一整數(shù)值時(shí),如果上述表達(dá)式值為真(1),則year為閏年;否則year為非閏年??梢约右粋€(gè)“!”用來判別非閏年: !(year % 4 = 0 & year % 100 != 0) | year % 400 = 0),若表達(dá)式值為真(1),year為非閏年。也可以用下面的邏輯表達(dá)式判別非閏年: (year % 4 != 0) | (year % 100 = 0 & year % 400 !=0) 若表達(dá)式值為真,year為非閏年。請(qǐng)注意表達(dá)式中右面的括號(hào)內(nèi)的不同運(yùn)算符(%,!,&,=)的運(yùn)算優(yōu)先次序。,if語句是用來判定所給定的條件是否滿足,根據(jù)判定的結(jié)果(真或假)決定執(zhí)行給出的兩種操作之一。,3.7 選擇結(jié)構(gòu)和語句,1. (表達(dá)式)語句 例如: if(xy) couty) coutx; else couty; 見圖3.5(b)。,3.7.1 語句的3種形式,圖3.5,3. if(表達(dá)式1) 語句1 else if(表達(dá)式2) 語句2 else if(表達(dá)式3) 語句3 else if(表達(dá)式m) 語句m else 語句n流程圖見圖3.6。 例如: if (number500) cost=0.15; else if(number300) cost=0.10; else if(number100) cost=0.075; else if(number50) cost=0.05; else cost=0;,圖3.,說明: (1) 從圖3.5和圖3.6可以看到: 3種形式的if語句都是由一個(gè)入口進(jìn)來,經(jīng)過對(duì)“表達(dá)式”的判斷,分別執(zhí)行相應(yīng)的語句,最后歸到一個(gè)共同的出口。這種形式的程序結(jié)構(gòu)稱為選擇結(jié)構(gòu)。在C+中if語句是實(shí)現(xiàn)選擇結(jié)構(gòu)主要的語句。 (2) 3種形式的if語句中在if后面都有一個(gè)用括號(hào)括起來的表達(dá)式,它是程序編寫者要求程序判斷的“條件”,一般是邏輯表達(dá)式或關(guān)系表達(dá)式。 (3) 第2、第3種形式的if語句中,在每個(gè)else前面有一分號(hào),整個(gè)語句結(jié)束處有一分號(hào)。 (4) 在if和else后面可以只含一個(gè)內(nèi)嵌的操作語句(如上例),也可以有多個(gè)操作語句,此時(shí)用花括號(hào)“”將幾個(gè)語句括起來成為一個(gè)復(fù)合語句。,例3.6 求三角形的面積。 #include #include /使用數(shù)學(xué)函數(shù)時(shí)要包含頭文件cmath #include /使用I/O流控制符要包含頭文件iomanip using namespace std; int main( ) double a,b,c; coutabc; if (a+bc ,運(yùn)行情況如下: please enter a,b,c:2.45 3.67 4.89 area=4.3565 變量s和area只在復(fù)合語句內(nèi)用得到,因此在復(fù)合語句內(nèi)定義,它的作用范圍為從定義變量開始到復(fù)合語句結(jié)束。如果在復(fù)合語句外使用s和area,則會(huì)在編譯時(shí)出錯(cuò),系統(tǒng)認(rèn)為這兩個(gè)變量未經(jīng)定義。將某些變量局限在某一范圍內(nèi),與外界隔離,可以避免在其他地方被誤調(diào)用。,在if語句中又包含一個(gè)或多個(gè)if語句稱為if語句的嵌套。一般形式如下: if( ) if( )語句1 else 語句2 內(nèi)嵌if else if( )語句3 else 語句4 內(nèi)嵌if 應(yīng)當(dāng)注意if與else的配對(duì)關(guān)系。else總是與它上面最近的、且未配對(duì)的if配對(duì)。假如寫成,3.7.2 語句的嵌套,if( ) if( )語句1 else if( )語句2 else 語句3 內(nèi)嵌if 編程序者把第一個(gè)else寫在與第一個(gè)if(外層if)同一列上,希望else與第一個(gè)if對(duì)應(yīng),但實(shí)際上else是與第二個(gè)if配對(duì),因?yàn)樗鼈兿嗑嘧罱?,而且第二個(gè)if并未與任何else配對(duì)。為了避免誤用,最好使每一層內(nèi)嵌的if語句都包含else子句(如本節(jié)開頭列出的形式),這樣if的數(shù)目和else的數(shù)目相同,從內(nèi)層到外層一一對(duì)應(yīng),不致出錯(cuò)。,如果if與else的數(shù)目不一樣,為實(shí)現(xiàn)程序設(shè)計(jì)者的企圖,可以加花括號(hào)來確定配對(duì)關(guān)系。例如: if( ) if ( ) 語句1 /這個(gè)語句是上一行if語句的內(nèi)嵌if else 語句2 /本行與第一個(gè)if配對(duì) 這時(shí) 限定了內(nèi)嵌if語句的范圍, 外的else不會(huì)與 內(nèi)的if配對(duì)。關(guān)系清楚,不易出錯(cuò)。,若在if語句中,當(dāng)被判別的表達(dá)式的值為“真”或“假”時(shí),都執(zhí)行一個(gè)賦值語句且給同一個(gè)變量賦值時(shí),可以用簡(jiǎn)單的條件運(yùn)算符來處理。例如,若有以下if語句: if (ab) max=a; else max=b; 可以用條件運(yùn)算符(? :)來處理: max=(ab)?a:b; 其中“(ab)?a:b”是一個(gè)“條件表達(dá)式”。它是這樣執(zhí)行的:如果(ab)條件為真,則條件表達(dá)式的值就取“?”后面的值,即條件表達(dá)式的值為,否則條件表達(dá)式的值為“:”后面的值,即b。,3.8 條件運(yùn)算符和條件表達(dá)式,條件運(yùn)算符要求有3個(gè)操作對(duì)象,稱三目(元)運(yùn)算符,它是C+中惟一的一個(gè)三目運(yùn)算符。條件表達(dá)式的一般形式為 表達(dá)式1 ? 表達(dá)式2 表達(dá)式3 條件運(yùn)算符的執(zhí)行順序是:先求解表達(dá)式1,若為非0(真)則求解表達(dá)式2,此時(shí)表達(dá)式的值就作為整個(gè)條件表達(dá)式的值。若表達(dá)式1的值為0(假),則求解表達(dá)式3,表達(dá)式3的值就是整個(gè)條件表達(dá)式的值?!癿ax=(ab)?a:b” 的執(zhí)行結(jié)果是將條件表達(dá)式的值賦給max。也就是將a和b二者中的大者賦給max。條件運(yùn)算符優(yōu)先于賦值運(yùn)算符,因此上面賦值表達(dá)式的求解過程是先求解條件表達(dá)式,再將它的值賦給max。,條件表達(dá)式中,表達(dá)式1的類型可以與表達(dá)式2和表達(dá)式3的類型不同。如 x? ab 如果已定義x為整型變量,若x=0,則條件表達(dá)式的值為字符b的ASCII碼。表達(dá)式2和表達(dá)式3的類型也可以不同,此時(shí)條件表達(dá)式的值的類型為二者中較高的類型。如有條件表達(dá)式xy?1:1.5,如果xy,則條件表達(dá)式的值為1.5,若xy,值應(yīng)為1,由于C+把1.5按雙精度數(shù)處理,雙精度的類型比整型高,因此,將1轉(zhuǎn)換成雙精度數(shù),以此作為表達(dá)式的值。,例3.7 輸入一個(gè)字符,判別它是否為大寫字母,如果是,將它轉(zhuǎn)換成小寫字母;如果不是,不轉(zhuǎn)換。然后輸出最后得到的字符。 #include using namespace std; int main( ) char ch; cinch; ch=(ch=A ,switch語句是多分支選擇語句,用來實(shí)現(xiàn)多分支選擇結(jié)構(gòu)。 它的一般形式如下: switch(表達(dá)式) case 常量表達(dá)式1:語句1 case 常量表達(dá)式2:語句2 . case 常量表達(dá)式n:語句n default:語句n+1 ,3.9 多分支選擇結(jié)構(gòu)和switch 語句,例如,要求按照考試成績(jī)的等級(jí)打印出百分制分?jǐn)?shù)段,可以用switch語句實(shí)現(xiàn): switch(grade) case A: cout85100n; case B: cout7084n; case C: cout6069n; case D: cout60n; default : couterrorn; 說明: (1) switch后面括號(hào)內(nèi)的“表達(dá)式”,允許為任何類型。 (2) 當(dāng)switch表達(dá)式的值與某一個(gè)case子句中的常量表達(dá)式的值相匹配時(shí),就執(zhí)行此case子句中的內(nèi)嵌語句,若所有的case子句中的常量表達(dá)式的值都不能與switch表達(dá)式的值匹配,就執(zhí)行default子句的內(nèi)嵌語句。,(3) 每一個(gè)case表達(dá)式的值必須互不相同,否則就會(huì)出現(xiàn)互相矛盾的現(xiàn)象(對(duì)表達(dá)式的同一個(gè)值,有兩種或多種執(zhí)行方案)。 (4) 各個(gè)case和default的出現(xiàn)次序不影響執(zhí)行結(jié)果。例如,可以先出現(xiàn)“default:”,再出現(xiàn)“case D:”,然后是“case A:”。 (5) 執(zhí)行完一個(gè)case子句后,流程控制轉(zhuǎn)移到下一個(gè)case子句繼續(xù)執(zhí)行。“case常量表達(dá)式”只是起語句標(biāo)號(hào)作用,并不是在該處進(jìn)行條件判斷。在執(zhí)行switch語句時(shí),根據(jù)switch表達(dá)式的值找到與之匹配的case子句,就從此case子句開始執(zhí)行下去,不再進(jìn)行判斷。例如,上面的例子中,若grade的值等于A,則將連續(xù)輸出:,85100 7084 6069 60 error 因此,應(yīng)該在執(zhí)行一個(gè)case子句后,使流程跳出switch結(jié)構(gòu),即終止switch語句的執(zhí)行??梢杂靡粋€(gè)break語句來達(dá)到此目的。將上面的switch結(jié)構(gòu)改寫如下: switch(grade) case A: cout85100n;break; case B: cout7084n;break; case C: cout6069n;break; case D: cout60n;break; default : couterrorn;break; ,最后一個(gè)子句(default)可以不加break語句。如果grade的值為B,則只輸出“7084”。流程圖見圖3.7。 圖3.7,在case子句中雖然包含一個(gè)以上執(zhí)行語句,但可以不必用花括號(hào)括起來,會(huì)自動(dòng)順序執(zhí)行本case子句中所有的執(zhí)行語句。 (6) 多個(gè)case可以共用一組執(zhí)行語句,如 . case A: case B: case C: cout60n; . 當(dāng)grade的值為A、B或C時(shí)都執(zhí)行同一組語句。,例3.8 編寫程序,判斷某一年是否為閏年。 #include using namespace std; int main( ) int year; bool leap; coutyear; /輸入年份 if (year%4=0) /年份能被4整除 if(year%100=0) /年份能被4整除又能被100整除 if (year%400=0) /年份能被4整除又能被400整除 leap=true; /閏年,令leap=true(真) else leap=false; /非閏年,令leap=false(假) else /年份能被4整除但不能被100整除肯定是閏年 leap=true; /是閏年,令leap=true,3.10 編寫選擇結(jié)構(gòu)的程序,else /年份不能被4整除肯定不是閏年 leap=false; /若為非閏年,令leap=false if (leap) coutyear is ; /若leap為真,就輸出年份和“是” else coutyear is not ; /若leap為真,就輸出年份和“不是” cout a leap year.endl; /輸出“閏年” return 0; 運(yùn)行情況如下: 2005 2005 is not a leap year. 1900 1900 is npt a leap year.,也可以將程序中第816行改寫成以下的if語句: if(year%4!=0) leap=false; else if(year%100!=0) leap=true; else if(year400!=0) leap=false; else leap=true; 也可以用一個(gè)邏輯表達(dá)式包含所有的閏年條件,將上述if語句用下面的if語句代替: if(year%4 = 0 else leap=false;,例3.9 運(yùn)輸公司對(duì)用戶計(jì)算運(yùn)費(fèi)。路程(s)越遠(yuǎn),每公里運(yùn)費(fèi)越低。標(biāo)準(zhǔn)如下: s250km 沒有折扣 250s500 2折扣 500s1000 5折扣 1000s2000 8折扣 2000s3000 10折扣 3000s 15折扣 設(shè)每公里每噸貨物的基本運(yùn)費(fèi)為p(price的縮寫),貨物重為w(wright的縮寫),距離為,折扣為d(discount的縮寫),則總運(yùn)費(fèi)f(freight的縮寫)的計(jì)算公式為 f = p * w * s * (1 - d),圖3.8,據(jù)此寫出程序如下: #include using namespace std; int main( ) int c,s; float p,w,d,f; coutpws; if(s=3000) c=12; else c=s/250; switch (c) case 0:d=0;break; case 1:d=2;break; case 2: case 3:d=5;break; case 4:,case 5: case 6: case 7:d=8;break; case 8: case 9: case 10: case 11:d=10;break; case 12:d=15;break; f=p*w*s*(1-d/100.0); coutfreight=fendl; return 0; 運(yùn)行情況如下: please enter p,w,s:100 20 300 freight=588000,在人們所要處理的問題中常常遇到需要反復(fù)執(zhí)行某一操作的情況。這就需要用到循環(huán)控制。許多應(yīng)用程序都包含循環(huán)。順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計(jì)的3種基本結(jié)構(gòu),是各種復(fù)雜程序的基本構(gòu)造單元。因此程序設(shè)計(jì)者必須熟練掌握選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的概念及使用方法。,3.11 循環(huán)結(jié)構(gòu)和循環(huán)語句,while語句的一般形式如下: while (表達(dá)式) 語句 其作用是: 當(dāng)指定的條件為真(表達(dá)式為非0)時(shí),執(zhí)行while語句中的內(nèi)嵌語句。其流程圖見圖3.9。其特點(diǎn)是:先判斷表達(dá)式,后執(zhí)行語句。while循環(huán)稱為當(dāng)型循環(huán)。 圖3.9,3.11.1 用while語句構(gòu)成循環(huán),例3.10 求1+2+3+100。 用流程圖表示算法,見圖3.10。 根據(jù)流程圖寫出程序: #include using namespace std; int main( ) int i=1,sum=0; while (i=100) sum=sum+i; i+; coutsum=sumendl; 運(yùn)行結(jié)果為 sum=5050,圖3.10 需要注意: (1) 循環(huán)體如果包含一個(gè)以上的語句,應(yīng)該用花括號(hào)括起來,以復(fù)合語句形式出現(xiàn)。如果不加花括號(hào),則while語句的范圍只到while后面第一個(gè)分號(hào)處。 (2) 在循環(huán)體中應(yīng)有使循環(huán)趨向于結(jié)束的語句。,do-while語句的特點(diǎn)是先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立。其一般形式為 do 語句 while (表達(dá)式); 它是這樣執(zhí)行的:先執(zhí)行一次指定的語句(即循環(huán)體),然后判別表達(dá)式,當(dāng)表達(dá)式的值為非零(“真”) 時(shí),返回重新執(zhí)行循環(huán)體語句,如此反復(fù),直到表達(dá)式的值等于0為止,此時(shí)循環(huán)結(jié)束??梢杂脠D3.11表示其流程。,3.11.2 用do-while語句構(gòu)成循環(huán),圖3.11 圖3.12,例3.11 用do-while語句求1+2+3+100。 先畫出流程圖,見圖3.12。 可編寫出下面的程序: #include using namespace std; int main( ) int i=1,sum=0; do sum=sum+i; i+; while (i=100); coutsum=sumendl; return 0; ,運(yùn)行結(jié)果與例3.10相同。 可以看到:對(duì)同一個(gè)問題可以用while語句處理,也可以用dowhile語句處理。dowhile語句結(jié)構(gòu)可以轉(zhuǎn)換成while結(jié)構(gòu)。圖3.11可以改畫成圖3.13的形式,二者完全等價(jià)。而圖3.13中虛線框部分就是一個(gè)while結(jié)構(gòu)。 圖3.13,C+中的for語句使用最為廣泛和靈活,不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況,它完全可以代替while語句。 for語句的一般格式為 for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 語句 它的執(zhí)行過程如下: (1) 先求解表達(dá)式1。 (2) 求解表達(dá)式2,若其值為真(值為非0),則執(zhí)行for語句中指定的內(nèi)嵌語句,然后執(zhí)行下面第(3)步。若為假(值為0),則結(jié)束循環(huán),轉(zhuǎn)到第(5)步。,3.11.3 用for語句構(gòu)成循環(huán),(3) 求解表達(dá)式3。 (4) 轉(zhuǎn)回上面第(2)步驟繼續(xù)執(zhí)行。 (5) 循環(huán)結(jié)束,執(zhí)行for語句下面的一個(gè)語句。 可以用圖3.14來表示for語句的執(zhí)行過程。 圖3.14,for語句最簡(jiǎn)單的形式也是最容易理解的格式如下: for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增

溫馨提示

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

評(píng)論

0/150

提交評(píng)論