第四章分支結(jié)構(gòu)_第1頁
第四章分支結(jié)構(gòu)_第2頁
第四章分支結(jié)構(gòu)_第3頁
第四章分支結(jié)構(gòu)_第4頁
第四章分支結(jié)構(gòu)_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第四章 分支結(jié)構(gòu)4.1 概述概述 4.1.1 函數(shù)函數(shù) 任 何 一 部 機(jī) 器 都 是 用 部 件 組 裝 而 成 的 。 計(jì) 算任 何 一 部 機(jī) 器 都 是 用 部 件 組 裝 而 成 的 。 計(jì) 算機(jī) 程 序 和 機(jī) 器 一 樣 , 也 是 由 一 些 部 件 構(gòu) 建 起 來機(jī) 程 序 和 機(jī) 器 一 樣 , 也 是 由 一 些 部 件 構(gòu) 建 起 來的 。的 。 C 語 言 程 序 部 件 是 函 數(shù) 。 也 就 是 說 , 設(shè) 計(jì)語 言 程 序 部 件 是 函 數(shù) 。 也 就 是 說 , 設(shè) 計(jì) C語言程序就是設(shè)計(jì)它的構(gòu)成函數(shù)。語言程序就是設(shè)計(jì)它的構(gòu)成函數(shù)。 下 面 舉 例 說 明下

2、 面 舉 例 說 明 C 語 言 程 序 中 的 函 數(shù) 是 什 么 樣語 言 程 序 中 的 函 數(shù) 是 什 么 樣 的。的。4.1 概述概述 4.1.1 函數(shù)函數(shù)/* 文件名:文件名:ex010101.c */#include int main(void)printf(Programming is fun.); / 輸出一串字符輸出一串字符 return 0; /* 向操作系統(tǒng)返回一個(gè)數(shù)字向操作系統(tǒng)返回一個(gè)數(shù)字0 */這是一個(gè)非常簡單的這是一個(gè)非常簡單的C語言程序,它的執(zhí)行結(jié)果語言程序,它的執(zhí)行結(jié)果是顯示一行字符:是顯示一行字符: Programming is fun.4.1 概述概述 說

3、明:說明: (1)這里)這里 int main (void) 是一個(gè)函數(shù)。這個(gè)函數(shù)的名字為是一個(gè)函數(shù)。這個(gè)函數(shù)的名字為“main”。這個(gè)名字是專用的,表示。這個(gè)名字是專用的,表示這個(gè)函數(shù)是這個(gè)函數(shù)是“主函數(shù)主函數(shù)”。所謂主函數(shù),就是執(zhí)行這個(gè)程序時(shí),由操作系統(tǒng)直。所謂主函數(shù),就是執(zhí)行這個(gè)程序時(shí),由操作系統(tǒng)直接調(diào)用的函數(shù)。接調(diào)用的函數(shù)。 每一個(gè)每一個(gè)C語言程序必須也只能有一個(gè)主函數(shù)。語言程序必須也只能有一個(gè)主函數(shù)。 4.1 概述概述 說明:說明:(2)函數(shù)名后面的圓括號(hào)用于表示參數(shù)。一般說來,用)函數(shù)名后面的圓括號(hào)用于表示參數(shù)。一般說來,用函數(shù)進(jìn)行計(jì)算,需要給定參數(shù)。但是廣義的計(jì)算也可以函數(shù)進(jìn)行計(jì)

4、算,需要給定參數(shù)。但是廣義的計(jì)算也可以沒有參數(shù)而只執(zhí)行一個(gè)過程。在沒有參數(shù)而只執(zhí)行一個(gè)過程。在C語言程序中,參數(shù)部分語言程序中,參數(shù)部分寫為寫為“void”,表示該函數(shù)沒有參數(shù),只執(zhí)行一個(gè)過程。,表示該函數(shù)沒有參數(shù),只執(zhí)行一個(gè)過程?!皏oid”可以省寫,如程序第一行可寫為:可以省寫,如程序第一行可寫為: int main() 在許多教材和程序中,可以常常見到這種形式的主在許多教材和程序中,可以常常見到這種形式的主函數(shù)首行。但是,函數(shù)首行。但是,C標(biāo)準(zhǔn)建議寫上標(biāo)準(zhǔn)建議寫上void,使含義清晰。,使含義清晰。4.1 概述概述 說明:說明: (3)再后面的一對(duì)花括號(hào)中的部分稱為函數(shù)體,用來)再后面的

5、一對(duì)花括號(hào)中的部分稱為函數(shù)體,用來表明該函數(shù)的功能是如何實(shí)現(xiàn)的。通常,函數(shù)體用一些語句表明該函數(shù)的功能是如何實(shí)現(xiàn)的。通常,函數(shù)體用一些語句表述。表述。C語言規(guī)定語句必須用分號(hào)結(jié)束。先分析下面的語句:語言規(guī)定語句必須用分號(hào)結(jié)束。先分析下面的語句: printf(Programming is fun.); 它的功能是調(diào)用編譯系統(tǒng)提供的函數(shù)庫中的一個(gè)函數(shù)它的功能是調(diào)用編譯系統(tǒng)提供的函數(shù)庫中的一個(gè)函數(shù) printf(),來輸出后面的一串字符。(),來輸出后面的一串字符。4.1 概述概述 說明:說明: (4)函數(shù)名前面的)函數(shù)名前面的“int”表明函數(shù)的返回值是一個(gè)整數(shù)。表明函數(shù)的返回值是一個(gè)整數(shù)。 有

6、 的 操 作 系 統(tǒng) 要 求 在 執(zhí) 行 一 個(gè) 程 序 后 應(yīng) 向 系 統(tǒng) 返 回有 的 操 作 系 統(tǒng) 要 求 在 執(zhí) 行 一 個(gè) 程 序 后 應(yīng) 向 系 統(tǒng) 返 回一 個(gè) 整 數(shù) 值 , 如 程 序 正 常 執(zhí) 行 和 結(jié) 束 , 應(yīng) 返 回一 個(gè) 整 數(shù) 值 , 如 程 序 正 常 執(zhí) 行 和 結(jié) 束 , 應(yīng) 返 回 0 , 否 則 返 回 一, 否 則 返 回 一個(gè)非個(gè)非0值。因此,需要將值。因此,需要將main函數(shù)指定為函數(shù)指定為int(整型整型),同時(shí)在函,同時(shí)在函數(shù)體的最后寫一返回語句:數(shù)體的最后寫一返回語句: return 0; 4.1 概述概述 它的功能是向調(diào)用者它的功能是

7、向調(diào)用者(操作系統(tǒng)操作系統(tǒng))返回返回0值,表示主函數(shù)正值,表示主函數(shù)正常結(jié)束常結(jié)束(也就是程序正常結(jié)束也就是程序正常結(jié)束)。此語句必須寫在函數(shù)體的后。此語句必須寫在函數(shù)體的后一行才有意義,因?yàn)橹灰獔?zhí)行到這條語句,就表達(dá)程序正常一行才有意義,因?yàn)橹灰獔?zhí)行到這條語句,就表達(dá)程序正常結(jié)束,向操作系統(tǒng)返回一個(gè)結(jié)束,向操作系統(tǒng)返回一個(gè)0,如果程序未執(zhí)行到這個(gè)返回語,如果程序未執(zhí)行到這個(gè)返回語句就非正常結(jié)束了,就不會(huì)向操作系統(tǒng)返回句就非正常結(jié)束了,就不會(huì)向操作系統(tǒng)返回0。操作系統(tǒng)會(huì)據(jù)。操作系統(tǒng)會(huì)據(jù)此作出相應(yīng)的處理。此作出相應(yīng)的處理。4.1 概述概述 說明:說明: (5)程序最前面的程序最前面的 # inc

8、lude 是 一 種 在 程 序 編 譯 之 前 要 處 理 的 內(nèi) 容 , 稱 為 編 譯 預(yù) 處 理 命是 一 種 在 程 序 編 譯 之 前 要 處 理 的 內(nèi) 容 , 稱 為 編 譯 預(yù) 處 理 命令。編譯預(yù)處理命令還有一些,它們都用令。編譯預(yù)處理命令還有一些,它們都用“#”開頭,并且不用分號(hào)開頭,并且不用分號(hào)結(jié)束,所以不是結(jié)束,所以不是C語言的語句。這里的編譯預(yù)處理命令稱為文件包語言的語句。這里的編譯預(yù)處理命令稱為文件包含命令,它的作用是在編譯之前把程序中需要使用關(guān)于系統(tǒng)定義的含命令,它的作用是在編譯之前把程序中需要使用關(guān)于系統(tǒng)定義的函數(shù)函數(shù)printf()的一些信息文件()的一些信

9、息文件stdio.h包含進(jìn)來。用包含進(jìn)來。用“.h”作為后綴作為后綴的文件稱為頭文件。的文件稱為頭文件。 4.1 概述概述 說明:說明: (6)“/* */”中的文字用于做一些說明中的文字用于做一些說明注釋,讓讀程注釋,讓讀程序序的人容易讀懂。例如,注釋的人容易讀懂。例如,注釋 /* 文件名:文件名:ex1_01.c */是告訴讀程序的人,這個(gè)程序的源代碼用文件是告訴讀程序的人,這個(gè)程序的源代碼用文件ex1_01保存。保存。而其他兩個(gè)注釋是對(duì)其左面兩條語句功能的說明。而其他兩個(gè)注釋是對(duì)其左面兩條語句功能的說明。 4.1 概述概述 4.1.2 語句語句 在在C語言程序中,函數(shù)下面的組成單位是語語

10、言程序中,函數(shù)下面的組成單位是語句。基本的語句有表達(dá)式語句、流程控制語句和句。基本的語句有表達(dá)式語句、流程控制語句和塊語句。塊語句。 1. 表達(dá)式語句表達(dá)式語句 C語言程序的具體計(jì)算過程是由表達(dá)式完成語言程序的具體計(jì)算過程是由表達(dá)式完成的。表達(dá)式是由運(yùn)算符(如上述的。表達(dá)式是由運(yùn)算符(如上述+,=等)、變等)、變量和常量等組成。量和常量等組成。4.1 概述概述 4.1.2 語句語句2. 流程控制語句流程控制語句 一般說來,程序中的語句是按照書寫順序執(zhí)行的。但一般說來,程序中的語句是按照書寫順序執(zhí)行的。但是,有些情況下,需要改變默認(rèn)的執(zhí)行順序,例如像圖是,有些情況下,需要改變默認(rèn)的執(zhí)行順序,例如

11、像圖(a)那樣要從兩個(gè)或多個(gè)語句中挑選一個(gè)語句執(zhí)行,或者)那樣要從兩個(gè)或多個(gè)語句中挑選一個(gè)語句執(zhí)行,或者像圖(像圖(b)那樣要重復(fù)執(zhí)行某一個(gè)語句或語句塊。前者)那樣要重復(fù)執(zhí)行某一個(gè)語句或語句塊。前者稱為選擇控制,后者稱為重復(fù)控制。稱為選擇控制,后者稱為重復(fù)控制。4.1 概述概述 2. 流程控制語句流程控制語句 (a)選擇結(jié)構(gòu))選擇結(jié)構(gòu) (b)重復(fù)結(jié)構(gòu))重復(fù)結(jié)構(gòu) 兩種基本的流程控制結(jié)構(gòu)兩種基本的流程控制結(jié)構(gòu)4.1 概述概述 4.1.2 語句語句3. 塊語句塊語句塊語句也稱為復(fù)合語句,就是用一對(duì)花括塊語句也稱為復(fù)合語句,就是用一對(duì)花括號(hào)將一組語句括起來號(hào)將一組語句括起來。4.1 概述概述 4.1.

12、3 數(shù)學(xué)函數(shù)數(shù)學(xué)函數(shù) 如何用如何用C語言求開方?余弦?語言求開方?余弦? 如果每次運(yùn)算都要編寫這些代碼太麻如果每次運(yùn)算都要編寫這些代碼太麻煩了!有沒有簡單的方法?煩了!有沒有簡單的方法?C語言已經(jīng)幫語言已經(jīng)幫你想到了!你想到了! #include 對(duì)照教材對(duì)照教材63頁的表格。頁的表格。4.1 概述概述 4.1.4 預(yù)處理預(yù)處理 編譯預(yù)處理是以編譯預(yù)處理是以“#”開頭的一些命令,它通知編譯系統(tǒng):開頭的一些命令,它通知編譯系統(tǒng):在 進(jìn) 行 正 式 編 譯 前 應(yīng) 當(dāng) 先 進(jìn) 行 一 些 前 期 工 作在 進(jìn) 行 正 式 編 譯 前 應(yīng) 當(dāng) 先 進(jìn) 行 一 些 前 期 工 作 ( 即 編 譯 預(yù)

13、處 理即 編 譯 預(yù) 處 理 ) 。目前,目前,C語言的編譯預(yù)處理功能主要有如下一些:語言的編譯預(yù)處理功能主要有如下一些:(1)文件包含,使用命令:)文件包含,使用命令:#include。(2)宏定義,使用命令:)宏定義,使用命令:#define、#undef。(3)條件編譯,使用命令:)條件編譯,使用命令:#if、#ifdef、#ifndef、#else、#endif、#elif、defind。(4)提供行號(hào)信息,使用命令:)提供行號(hào)信息,使用命令:#line。(5)編譯雜注,使用命令:)編譯雜注,使用命令:#progma。(6)錯(cuò)誤信息,使用命令:)錯(cuò)誤信息,使用命令:#error。4.1

14、 概述概述 4.1.4 預(yù)處理預(yù)處理 1. #include 注意:后面什么時(shí)候跟注意:后面什么時(shí)候跟,什么時(shí)候,什么時(shí)候跟跟” ”.4.1 概述概述 4.1.4 預(yù)處理預(yù)處理 2. #define 在這些編譯預(yù)處理中,應(yīng)用最多的就在這些編譯預(yù)處理中,應(yīng)用最多的就是對(duì)宏的處理。它允許程序員使用是對(duì)宏的處理。它允許程序員使用define定義并應(yīng)用宏名字書寫定義并應(yīng)用宏名字書寫C語言程序,語言程序,同時(shí)也指示編譯器在正式編譯前通過宏替同時(shí)也指示編譯器在正式編譯前通過宏替換,使程序能按照換,使程序能按照C語言的語法進(jìn)行編譯。語言的語法進(jìn)行編譯。4.1 概述概述 define命令最簡單的應(yīng)用是將一個(gè)字

15、符串定義為一個(gè)命令最簡單的應(yīng)用是將一個(gè)字符串定義為一個(gè)宏名,格式為:宏名,格式為: define 宏名宏名 字符串字符串編譯預(yù)處理時(shí),預(yù)處理程序?qū)殉绦蛭募性谠摵甓x編譯預(yù)處理時(shí),預(yù)處理程序?qū)殉绦蛭募性谠摵甓x之后的所有宏名,用之后的所有宏名,用#define命令中定義的字符串命令中定義的字符串(稱為宏體稱為宏體)替換,這個(gè)過程稱為宏替換。符號(hào)常數(shù)的定義就是這種宏定替換,這個(gè)過程稱為宏替換。符號(hào)常數(shù)的定義就是這種宏定義的一種應(yīng)用。例如義的一種應(yīng)用。例如#define PI 3.14159265#define RADIUS 2.04.1.4 預(yù)處理預(yù)處理 (1)在)在#define命令中,

16、宏名字與字符串命令中,宏名字與字符串(宏體宏體)之間之間用一個(gè)或多個(gè)空格分隔。用一個(gè)或多個(gè)空格分隔。(2)宏名字的使用:)宏名字的使用: 宏名字不能用引號(hào)括起來。如:宏名字不能用引號(hào)括起來。如: #define “YES”1 printf(“YES”); 將不進(jìn)行宏定義。將不進(jìn)行宏定義。 宏名中不能含有空格。例如想用宏名中不能含有空格。例如想用“A NAME”定定義義“SMISS”,而寫成:,而寫成:4.1.4 預(yù)處理預(yù)處理 #define A NAME SMISS 則 實(shí) 際 進(jìn) 行 的 宏 定 義 是則 實(shí) 際 進(jìn) 行 的 宏 定 義 是 A 為 宏 名 字 , 宏 體 是為 宏 名 字

17、, 宏 體 是“NAME SMISS”。例子:。例子:#define PI3.1415926#define R1.0#define CIRCUM2.0*PI*R /* 使用了前面定義的使用了前面定義的R和和PI */#define AREAPI*R*R int main(void) printf(The circum is %f and area is %fn,CIRCUM,AREA); 4.1.4 預(yù)處理預(yù)處理 #include #define PI 3.14159265 #define RADIUS 1.0 #define CIRCUM return(2.0*PI* RADIUS); /*

18、 最后的分號(hào)是最后的分號(hào)是return語句的一部分語句的一部分 */ #define AREA return(PI* RADIUS* RADIUS); double circum( ) CIRCUM double area( ) AREA int main(void) printf(The circum is %f and area is %fn,circum(),area();4.1.4 預(yù)處理預(yù)處理 (4)不能進(jìn)行的宏替換:)不能進(jìn)行的宏替換: 不可以替換作為用戶標(biāo)識(shí)符中的成分。例不可以替換作為用戶標(biāo)識(shí)符中的成分。例如,不可以用如,不可以用“R”替換替換“CIRCUM”中的中的“R”。 不

19、能替換字符串常量中的成分不能替換字符串常量中的成分。(5) 一行中寫不下的宏定義,應(yīng)在前一行結(jié)尾使一行中寫不下的宏定義,應(yīng)在前一行結(jié)尾使用一個(gè)續(xù)行符用一個(gè)續(xù)行符“”,并且在下一行開始不使用空,并且在下一行開始不使用空格。格。4.1.4 預(yù)處理預(yù)處理 (6) 宏定義可以寫在源程序中的任何地方,但一定宏定義可以寫在源程序中的任何地方,但一定要寫在程序中引用該宏之前,通常寫在一個(gè)文件要寫在程序中引用該宏之前,通常寫在一個(gè)文件之首。對(duì)多個(gè)文件可以共用的宏定義,可以集中之首。對(duì)多個(gè)文件可以共用的宏定義,可以集中起來構(gòu)成一個(gè)單獨(dú)的頭文件。起來構(gòu)成一個(gè)單獨(dú)的頭文件。撤銷已定義的宏撤銷已定義的宏 用命令用命令

20、undef可以撤銷已定義的宏。如:可以撤銷已定義的宏。如: #define OK 1 #undef OK 在在#undef命令行之后的范圍,命令行之后的范圍,OK不再代表不再代表1。 帶參宏定義的格式為:帶參宏定義的格式為: define 標(biāo)識(shí)符標(biāo)識(shí)符(形參表形參表) 宏體宏體 應(yīng)當(dāng)注意,這時(shí)的宏體是一個(gè)表達(dá)式,正確的書寫宏應(yīng)當(dāng)注意,這時(shí)的宏體是一個(gè)表達(dá)式,正確的書寫宏體的方法是將宏體及其各個(gè)形參應(yīng)該用圓括號(hào)括起來。體的方法是將宏體及其各個(gè)形參應(yīng)該用圓括號(hào)括起來。 #define SQUARE(x) x*x/* (a) */#define SQUARE(x) (x*x)/* (b) */#de

21、fine SQUARE(x) (x)*(x)/* (c) */#define SQUARE(x) (x)*(x) /* (d) */ 到底哪個(gè)對(duì)呢?下面用幾個(gè)表達(dá)式進(jìn)行測試:到底哪個(gè)對(duì)呢?下面用幾個(gè)表達(dá)式進(jìn)行測試: 宏與函數(shù)都可以作為程序模塊應(yīng)用于模塊化程宏與函數(shù)都可以作為程序模塊應(yīng)用于模塊化程序設(shè)計(jì)之中,但它們各有特色。序設(shè)計(jì)之中,但它們各有特色。(1) 時(shí)空效率不相同。宏定義時(shí)要用宏體去替換時(shí)空效率不相同。宏定義時(shí)要用宏體去替換宏名,往往使程序體積膨脹,加大了系統(tǒng)的存儲(chǔ)開宏名,往往使程序體積膨脹,加大了系統(tǒng)的存儲(chǔ)開銷。但是它不像函數(shù)調(diào)用要進(jìn)行參數(shù)傳遞、保存現(xiàn)銷。但是它不像函數(shù)調(diào)用要進(jìn)行參數(shù)

22、傳遞、保存現(xiàn)場、返回等操作,所以時(shí)間效率比函數(shù)高。所以,通場、返回等操作,所以時(shí)間效率比函數(shù)高。所以,通常對(duì)簡短的表達(dá)式,以及調(diào)用頻繁、要求快速響應(yīng)的常對(duì)簡短的表達(dá)式,以及調(diào)用頻繁、要求快速響應(yīng)的場合場合(如實(shí)時(shí)系統(tǒng)中如實(shí)時(shí)系統(tǒng)中),采用宏比采用函數(shù)合適。,采用宏比采用函數(shù)合適。 (2) 宏雖然可以帶有參數(shù),但宏定義過程中不像函宏雖然可以帶有參數(shù),但宏定義過程中不像函數(shù)那樣要進(jìn)行參數(shù)值的計(jì)算、傳遞及結(jié)果返回等操數(shù)那樣要進(jìn)行參數(shù)值的計(jì)算、傳遞及結(jié)果返回等操作;宏定義只是簡單的字符替換,不進(jìn)行計(jì)算。因而作;宏定義只是簡單的字符替換,不進(jìn)行計(jì)算。因而一些過程是不能用宏代替函數(shù)的,如遞歸調(diào)用。同一些過

23、程是不能用宏代替函數(shù)的,如遞歸調(diào)用。同時(shí),也可能不適合某些計(jì)算,產(chǎn)生函數(shù)調(diào)用所沒有的時(shí),也可能不適合某些計(jì)算,產(chǎn)生函數(shù)調(diào)用所沒有的副作用。副作用。4.1.5 條件編譯條件編譯#if #else #ifdef 開發(fā)操作系統(tǒng)經(jīng)常使用。開發(fā)操作系統(tǒng)經(jīng)常使用。 Minix 操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)4.2.1 命題的命題的“真真”、“假假”與與C語言中的邏輯值語言中的邏輯值不論是選擇結(jié)構(gòu),還是循環(huán)結(jié)構(gòu),流程的改變都是由不論是選擇結(jié)構(gòu),還是循環(huán)結(jié)構(gòu),流程的改變都是由判斷決定的。即需要根據(jù)判斷決定選擇,根據(jù)判斷決定是判斷決定的。即需要根據(jù)判斷決定選擇,根據(jù)判斷決定是否循環(huán)以及循環(huán)的結(jié)束。通常,判

24、斷是針對(duì)命題的否循環(huán)以及循環(huán)的結(jié)束。通常,判斷是針對(duì)命題的“真真”、“假假”進(jìn)行的。例如,下面是一些命題:進(jìn)行的。例如,下面是一些命題:(行駛中)前面的交通信號(hào)燈是紅色的。(行駛中)前面的交通信號(hào)燈是紅色的。 今天下雨。今天下雨。 ab。 abc,即,即ab 且且bc。 ab 或或cb。 如果如果a不能被不能被b整除。整除。這些命題的值都只能是一個(gè)邏輯(布爾)值:這些命題的值都只能是一個(gè)邏輯(布爾)值:“真真”或或“假假”A AB BB BA AA A(a)邏輯)邏輯“與與” (b)邏輯)邏輯“或或” (c)邏輯)邏輯“非非” 4.2.2 關(guān)系運(yùn)算與關(guān)系表達(dá)式關(guān)系運(yùn)算與關(guān)系表達(dá)式 關(guān)系表達(dá)式和

25、邏輯表達(dá)式是關(guān)系表達(dá)式和邏輯表達(dá)式是C語言中描述命題的兩種基語言中描述命題的兩種基本形式。本形式。1. C語言的關(guān)系運(yùn)算符語言的關(guān)系運(yùn)算符關(guān)系運(yùn)算是指對(duì)兩個(gè)表達(dá)式值的大小比較。關(guān)系運(yùn)算是指對(duì)兩個(gè)表達(dá)式值的大小比較。C語言中提語言中提供有如下供有如下6個(gè)關(guān)系運(yùn)算符:個(gè)關(guān)系運(yùn)算符: (大于大于) =(大于或等于大于或等于)(小于小于) =(小于或等于小于或等于) =(等于等于) !=(不等于不等于)后 兩 個(gè) (后 兩 個(gè) ( = = 和 !和 ! = ) 的 優(yōu) 先 級(jí) 小 于 前) 的 優(yōu) 先 級(jí) 小 于 前 4 個(gè) , 但 它 們 都 低個(gè) , 但 它 們 都 低于 純 算 術(shù) 類 , 高

26、于 賦 值 類 , 并 且 它 們 結(jié) 合 方 式 都 是 從 左 向 右于 純 算 術(shù) 類 , 高 于 賦 值 類 , 并 且 它 們 結(jié) 合 方 式 都 是 從 左 向 右的。例如:的。例如: a+bc+d 應(yīng)理解為應(yīng)理解為 (a+b)(c+d)2. 關(guān)系運(yùn)算符的值關(guān)系運(yùn)算符的值關(guān) 系 表 達(dá) 式 的 值 只 有 兩 個(gè) : 關(guān) 系 表 達(dá) 式 成 立 , 即 為關(guān) 系 表 達(dá) 式 的 值 只 有 兩 個(gè) : 關(guān) 系 表 達(dá) 式 成 立 , 即 為 “ 真真 ”( 通 常 為( 通 常 為 1 ) ; 關(guān) 系 表 達(dá) 式 不 成 立 , 即 為) ; 關(guān) 系 表 達(dá) 式 不 成 立 , 即

27、 為 “ 假假 ” ( 0 ) 。 例 如 對(duì) 于。 例 如 對(duì) 于聲明:聲明:int x=2, y=3,z; 表達(dá)式表達(dá)式 x=y的值為的值為0。而表達(dá)式。而表達(dá)式 xy的值為的值為1。那末表達(dá)式。那末表達(dá)式 z=3-1=x+1=y+2的值呢的值呢?在這個(gè)表達(dá)式中有賦值、關(guān)系、算術(shù)三種運(yùn)算。其中在這個(gè)表達(dá)式中有賦值、關(guān)系、算術(shù)三種運(yùn)算。其中“賦值賦值”的優(yōu)先的優(yōu)先級(jí)最低,其次為級(jí)最低,其次為“關(guān)系關(guān)系”,“算術(shù)算術(shù)”的的優(yōu)先級(jí)最高。因此,先進(jìn)行算術(shù)運(yùn)算得優(yōu)先級(jí)最高。因此,先進(jìn)行算術(shù)運(yùn)算得 z=2=3=5然后計(jì)算然后計(jì)算2=3,其值為,其值為0(假),得(假),得 z=0=5再計(jì)算再計(jì)算0=5

28、,值為,值為1(真),故有(真),故有z的值為的值為1。(1)表達(dá)式)表達(dá)式5278在數(shù)學(xué)上是不允許的,而在在數(shù)學(xué)上是不允許的,而在C中中是允許的。按自左而右的結(jié)合求解:是允許的。按自左而右的結(jié)合求解: 52值為值為1; 17值為值為0; 08的值為的值為0。 即整個(gè)關(guān)系表達(dá)式的值為即整個(gè)關(guān)系表達(dá)式的值為0。(2)由于關(guān)系表達(dá)式的值是整型數(shù))由于關(guān)系表達(dá)式的值是整型數(shù)0或或1,故也可以將其,故也可以將其看成是一種整型表達(dá)式。例如,若有:看成是一種整型表達(dá)式。例如,若有: int i=1, j=7,a; a=i+(j%4!=0); 由于由于j%4的值為的值為3,而,而3!=0的值為的值為1(真真

29、),故,故a的值為的值為2。但這種表達(dá)式的含義不易被理解,初學(xué)時(shí)不宜多用。但這種表達(dá)式的含義不易被理解,初學(xué)時(shí)不宜多用。(3)在判定兩個(gè)浮點(diǎn)數(shù)是否相等時(shí),由于存儲(chǔ)上的誤差,會(huì)得出錯(cuò)誤)在判定兩個(gè)浮點(diǎn)數(shù)是否相等時(shí),由于存儲(chǔ)上的誤差,會(huì)得出錯(cuò)誤的結(jié)果。例如:的結(jié)果。例如: 1.0/3.0*3.0=1.0 在數(shù)學(xué)上顯然應(yīng)該是一個(gè)恒等式,但由于在數(shù)學(xué)上顯然應(yīng)該是一個(gè)恒等式,但由于1.0/3.0得到的值的有效位得到的值的有效位數(shù)是有限的,并不等于數(shù)是有限的,并不等于0.3333333333333,因此上面關(guān)系表達(dá)式,因此上面關(guān)系表達(dá)式的值為的值為0(假假),并不為,并不為1(真真)。所以應(yīng)避免對(duì)兩個(gè)實(shí)數(shù)

30、表達(dá)式作。所以應(yīng)避免對(duì)兩個(gè)實(shí)數(shù)表達(dá)式作“相等相等”或或“不相等不相等”的判別。上式可改寫為:的判別。上式可改寫為: fabs (1.0/3.0* 3.0-1.0)1e-5 fabs是求絕對(duì)值函數(shù)。只要是求絕對(duì)值函數(shù)。只要1.0/3.0與與1.0之間的差小于之間的差小于10-5(或一個(gè)或一個(gè)其它的很小的數(shù)其它的很小的數(shù)),就認(rèn)為,就認(rèn)為 1.0/3.0*3.0與與1.0相等。相等。(4)要表示)要表示x在區(qū)間在區(qū)間a,b中,在數(shù)學(xué)中使用表達(dá)式中,在數(shù)學(xué)中使用表達(dá)式axb。但在。但在C語言中使用表達(dá)式語言中使用表達(dá)式“a=x=b”會(huì)與原來的會(huì)與原來的意義不同。假設(shè)意義不同。假設(shè)a=0;b=0.5。

31、若。若x=0.3,則執(zhí)行,則執(zhí)行a=x=b時(shí)時(shí)先求出先求出“a=x”的值得的值得1(真真),再計(jì)算,再計(jì)算“1=b”得得0(假假)。因。因此,為了判別此,為了判別x是否在是否在a,b范圍內(nèi),應(yīng)寫成:范圍內(nèi),應(yīng)寫成: a=x & x=b “&”是下面將要介紹的邏輯運(yùn)算符是下面將要介紹的邏輯運(yùn)算符“與與”。a=x的值的值為為1(真真)且且x=b的值亦為的值亦為1(真真),則整個(gè)表達(dá)式的值為,則整個(gè)表達(dá)式的值為1(真真)。2 邏輯運(yùn)算與邏輯表達(dá)式邏輯運(yùn)算與邏輯表達(dá)式1) 邏輯運(yùn)算的基本概念邏輯運(yùn)算的基本概念 C語言有三個(gè)邏輯運(yùn)算符,它們是:語言有三個(gè)邏輯運(yùn)算符,它們是: & (邏輯與邏輯與) | (

32、邏輯或邏輯或) ! (邏輯非邏輯非)2) 常用的邏輯運(yùn)算規(guī)律常用的邏輯運(yùn)算規(guī)律 邏輯運(yùn)算中有很多有趣的規(guī)律。例如:邏輯運(yùn)算中有很多有趣的規(guī)律。例如:(1) 在一個(gè)在一個(gè)&表達(dá)式中,若表達(dá)式中,若&的一端為的一端為0,則不必再計(jì)算,則不必再計(jì)算另一端,該表達(dá)式的值肯定為另一端,該表達(dá)式的值肯定為0(在在C語言中由于語言中由于&是從左向右是從左向右結(jié) 合 的 , 所 以 只 考 慮 左 端 , 即 當(dāng)結(jié) 合 的 , 所 以 只 考 慮 左 端 , 即 當(dāng) & & 號(hào) 的 左 端 為號(hào) 的 左 端 為 0 時(shí) , 不 再 計(jì) 算時(shí) , 不 再 計(jì) 算其右端其右端),可以把它記為:,可以把它記為: 0

33、 & a=0 (2) 在一個(gè)在一個(gè)|表達(dá)式中,若表達(dá)式中,若|的一端為的一端為1,則不必計(jì)算另一,則不必計(jì)算另一端,該端,該|表達(dá)式的值必為表達(dá)式的值必為1?,F(xiàn)把它記為:?,F(xiàn)把它記為: 1 | a=1諸如此類關(guān)于表達(dá)式的值的規(guī)律有如下一些:諸如此類關(guān)于表達(dá)式的值的規(guī)律有如下一些: 0 | a=a1 & a=a1 | a=1 0 & a=0 a | !a=1 0 & !a=0 選擇型程序描述了求解規(guī)則:在不同的條件下所應(yīng)進(jìn)選擇型程序描述了求解規(guī)則:在不同的條件下所應(yīng)進(jìn)行的相應(yīng)操作。下面分別介紹行的相應(yīng)操作。下面分別介紹C語言中用來實(shí)現(xiàn)選擇結(jié)語言中用來實(shí)現(xiàn)選擇結(jié)構(gòu)的三種語句。構(gòu)的三種語句。 ife

34、lse結(jié)構(gòu)的應(yīng)用結(jié)構(gòu)的應(yīng)用 if (表達(dá)式表達(dá)式) 語句語句1 else 語句語句2ifelse構(gòu)造了一種二路分支選擇結(jié)構(gòu),它具有如下構(gòu)造了一種二路分支選擇結(jié)構(gòu),它具有如下格式:格式:if (表達(dá)式表達(dá)式)語句語句1else語句語句2 這里,語句這里,語句1和語句和語句2就是兩路分支。執(zhí)行這個(gè)就是兩路分支。執(zhí)行這個(gè)結(jié)構(gòu),首先對(duì)表達(dá)式進(jìn)行判斷,若為結(jié)構(gòu),首先對(duì)表達(dá)式進(jìn)行判斷,若為“真真”(非零非零),就就執(zhí)行執(zhí)行if分結(jié)構(gòu)分結(jié)構(gòu)(語句語句1);否則;否則(值為值為0),就執(zhí)行,就執(zhí)行else分分結(jié)構(gòu)結(jié)構(gòu)(語句語句2)。例例 求一個(gè)數(shù)的絕對(duì)值。求一個(gè)數(shù)的絕對(duì)值。設(shè)有任意數(shù)設(shè)有任意數(shù)x,它的絕對(duì)值為

35、,它的絕對(duì)值為 判斷內(nèi)容:判斷內(nèi)容:x0是是否成立。否成立。 兩路分支:兩路分支:x=x (當(dāng)當(dāng)x0) , x= -x (當(dāng)當(dāng)x0 ) C函數(shù)如下:函數(shù)如下:/* 文件名:文件名:ex030301.c */* 求絕對(duì)值求絕對(duì)值 */double abstr(double x) if (x0.0) x=-x; else x=x; return (x);下面是函數(shù)下面是函數(shù)abstr被調(diào)用執(zhí)行的情況:被調(diào)用執(zhí)行的情況:#include int main(void) double a, abstr(double a); printf (Enter real number a please:); sc

36、anf (%lf,&a); printf (abstr(%lf)=%lfn,a, abstr(a); return 0;C語言還允許使用缺省語言還允許使用缺省else分結(jié)構(gòu)的分結(jié)構(gòu)的ifelse結(jié)結(jié)構(gòu)。其形式為:構(gòu)。其形式為: if (表達(dá)式表達(dá)式)語句語句 如上述如上述abstr()函數(shù)可以改寫為:函數(shù)可以改寫為:double abstr (double x) if (xy) if (zx) max=z; else if (yx) max=y; return (max); 通過這個(gè)例子可以看到:通過這個(gè)例子可以看到:(1) 不平衡的不平衡的ifelse結(jié)構(gòu)會(huì)增加閱讀和理解程序的困難結(jié)構(gòu)會(huì)增加

37、閱讀和理解程序的困難(2) 正確的縮進(jìn)格式正確的縮進(jìn)格式(即鋸齒形書寫格式即鋸齒形書寫格式)可以幫助人們理可以幫助人們理解程序,但錯(cuò)誤的縮進(jìn)格式反而會(huì)使人迷惑。解程序,但錯(cuò)誤的縮進(jìn)格式反而會(huì)使人迷惑。(3) 不要太相信自己的判斷,要嚴(yán)格按語法關(guān)系檢查程不要太相信自己的判斷,要嚴(yán)格按語法關(guān)系檢查程序。在不易弄清的地方可以加花括號(hào)來保證自己構(gòu)思的邏輯序。在不易弄清的地方可以加花括號(hào)來保證自己構(gòu)思的邏輯關(guān)系的正確性。關(guān)系的正確性。float max3(float x, float y, float z) float max=x; if (zy) if(zx) max=z; else if(yx) m

38、ax=y; return (max);if-else if結(jié)構(gòu)的應(yīng)用結(jié)構(gòu)的應(yīng)用if(表達(dá)式表達(dá)式1)if(表達(dá)式表達(dá)式1) 語句語句1else if(表達(dá)式表達(dá)式2) 語句語句2else if(表達(dá)式表達(dá)式n) 語句語句nelse語句語句n+1真真假假表達(dá)式表達(dá)式1 1表達(dá)式表達(dá)式2 2表達(dá)式表達(dá)式n n語句語句n+1n+1語句語句n n語句語句2 2語句語句1 1真真真真假假假假例例 根據(jù)百分制分?jǐn)?shù)決定成績的等級(jí):根據(jù)百分制分?jǐn)?shù)決定成績的等級(jí): 80分以上為分以上為A級(jí);級(jí); 70分及以上,分及以上,80分以下,分以下,B級(jí);級(jí); 60分及以上,分及以上,70分以下,分以下,C級(jí);級(jí); 60

39、分以下,分以下,D級(jí)。級(jí)。真真假假score=80score=80score=70score=70等級(jí)等級(jí)A A真真假假輸入輸入scorescorescore=60score=60等級(jí)等級(jí)B B等級(jí)等級(jí)D D等級(jí)等級(jí)C C/* 按成績分等按成績分等 */#include int main(void) float score; printf(Input a scre:); scanf(%f,&score); if (score = 80) printf (%f is An,score); else if (score = 70) printf (%f is Bn,score); else if

40、(score = 60) printf (%f is Cn,score); else printf (%f is Dn,score); return 0; 可 以 看 到 ,可 以 看 到 , i f - e l s e i f 是 通 過 一 連 串 的 判 斷 ,是 通 過 一 連 串 的 判 斷 ,來 尋 找 問 題 的 解 。 它 排 列 了 一 系 列 操 作 , 每 一 種來 尋 找 問 題 的 解 。 它 排 列 了 一 系 列 操 作 , 每 一 種操 作 都 是 在 相 應(yīng) 的 條 件 下 才 能 執(zhí) 行 的 。 該 結(jié) 構(gòu) 開操 作 都 是 在 相 應(yīng) 的 條 件 下 才

41、能 執(zhí) 行 的 。 該 結(jié) 構(gòu) 開始 執(zhí) 行 后 , 便 依 次 去 對(duì) 各 個(gè) 條 件 進(jìn) 行 判 斷 測 試 ,始 執(zhí) 行 后 , 便 依 次 去 對(duì) 各 個(gè) 條 件 進(jìn) 行 判 斷 測 試 ,符 合 某 一 條 件 , 則 轉(zhuǎn) 去 執(zhí) 行 該 條 件 下 的 操 作 , 其符 合 某 一 條 件 , 則 轉(zhuǎn) 去 執(zhí) 行 該 條 件 下 的 操 作 , 其它 部 分 將 被 跳 過 ; 如 無 一 條 件 為 真 , 就 執(zhí) 行 最 后它 部 分 將 被 跳 過 ; 如 無 一 條 件 為 真 , 就 執(zhí) 行 最 后一 個(gè)一 個(gè) e l s e 所 指 定 的 操 作 。 這 個(gè)所 指 定

42、 的 操 作 。 這 個(gè) e l s e 可 以 看 作可 以 看 作 “ 其其它它 ” 。 若 最 后 一 個(gè)。 若 最 后 一 個(gè) e l s e 不 存 在 , 并 且 所 有 條 件 的 測不 存 在 , 并 且 所 有 條 件 的 測試 均 不 成 功 , 則 該試 均 不 成 功 , 則 該 e l s e i f 結(jié) 構(gòu) 將 不 執(zhí) 行 任 何 操結(jié) 構(gòu) 將 不 執(zhí) 行 任 何 操作。作。switch結(jié)構(gòu)的應(yīng)用結(jié)構(gòu)的應(yīng)用 switch是一種多分支選擇結(jié)是一種多分支選擇結(jié)構(gòu),其形式如右。構(gòu),其形式如右。 switch結(jié)構(gòu)也稱標(biāo)號(hào)分支結(jié)結(jié)構(gòu)也稱標(biāo)號(hào)分支結(jié)構(gòu),它用花括號(hào)括起了一系列構(gòu),

43、它用花括號(hào)括起了一系列case子結(jié)構(gòu)。每個(gè)子結(jié)構(gòu)。每個(gè)case子結(jié)構(gòu)都以一個(gè)子結(jié)構(gòu)都以一個(gè)常量表達(dá)式作為標(biāo)志的標(biāo)號(hào),并按照常量表達(dá)式作為標(biāo)志的標(biāo)號(hào),并按照下面的規(guī)則匹配:計(jì)算下面的規(guī)則匹配:計(jì)算switch的判的判斷表達(dá)式,并以此值去依次找與之相斷表達(dá)式,并以此值去依次找與之相等的等的case標(biāo)號(hào)值,找到后就將流程標(biāo)號(hào)值,找到后就將流程轉(zhuǎn)到該標(biāo)號(hào)處,執(zhí)行后面各語句轉(zhuǎn)到該標(biāo)號(hào)處,執(zhí)行后面各語句switch(表達(dá)式表達(dá)式)case 常量表達(dá)式常量表達(dá)式1:語句序列語句序列1case 常量表達(dá)式常量表達(dá)式2:語句序列語句序列2case 常量表達(dá)式常量表達(dá)式n:語句序列語句序列ndefault:語句序

44、列語句序列n+1switch結(jié)構(gòu)的應(yīng)用結(jié)構(gòu)的應(yīng)用 如果找不到符合的如果找不到符合的case子結(jié)子結(jié)構(gòu),就只執(zhí)行構(gòu),就只執(zhí)行default子結(jié)構(gòu)中子結(jié)構(gòu)中的語句序列。的語句序列。 default子結(jié)構(gòu)對(duì)于子結(jié)構(gòu)對(duì)于switch結(jié)構(gòu)不是必須的。當(dāng)沒有結(jié)構(gòu)不是必須的。當(dāng)沒有default子結(jié)構(gòu),并且沒有相符子結(jié)構(gòu),并且沒有相符合的合的case時(shí),該時(shí),該switch結(jié)構(gòu)就結(jié)構(gòu)就不被執(zhí)行。不被執(zhí)行。switch(表達(dá)式表達(dá)式)case 常量表達(dá)式常量表達(dá)式1:語句序列語句序列1case 常量表達(dá)式常量表達(dá)式2:語句序列語句序列2case 常量表達(dá)式常量表達(dá)式n:語句序列語句序列ndefault:語句序

45、列語句序列n+1請注意請注意 如果如果switch的判斷的判斷表達(dá)式的值與表達(dá)式的值與case常量表達(dá)式常量表達(dá)式I的值相等的值相等(稱為匹配稱為匹配),在執(zhí)行后,在執(zhí)行后面的語句序列面的語句序列i之后,并不立即退之后,并不立即退出出switch結(jié)構(gòu),而是繼續(xù)執(zhí)行語結(jié)構(gòu),而是繼續(xù)執(zhí)行語句序列句序列i+1,語句序列,語句序列i+2, 語 句 序 列 語 句 序 列 n 語 句 序 列 語 句 序 列n+1這種流程這種流程往 往 不 是 編 程 者 所 希 望 的 。往 往 不 是 編 程 者 所 希 望 的 。表達(dá)式表達(dá)式語句序列語句序列1 1常量表達(dá)式常量表達(dá)式1:1:語句序列語句序列2 2常

46、量表達(dá)式常量表達(dá)式2:2:語句序列語句序列i i常量表達(dá)式常量表達(dá)式i:i:語句序列語句序列n n常量表達(dá)式常量表達(dá)式n:n:語句序列語句序列n+1n+1defaultdefault 編程者希望在執(zhí)行匹配編程者希望在執(zhí)行匹配的常量表達(dá)式后面的語句序的常量表達(dá)式后面的語句序列列i之后,應(yīng)立即退出之后,應(yīng)立即退出switch結(jié)構(gòu)。為了解決這一結(jié)構(gòu)。為了解決這一問題,可以在各語句序列后問題,可以在各語句序列后面加一條面加一條break語句,使流語句,使流程脫離程脫離switch結(jié)構(gòu)。結(jié)構(gòu)。表達(dá)式表達(dá)式語句序列語句序列1 1常量表達(dá)式常量表達(dá)式1:1:語句序列語句序列2 2常量表達(dá)式常量表達(dá)式2:2:

47、語句序列語句序列i i常量表達(dá)式常量表達(dá)式i:i:語句序列語句序列n n常量表達(dá)式常量表達(dá)式n:n:語句序列語句序列n+1n+1defaultdefaultswitch(表達(dá)式表達(dá)式) case 常量表達(dá)式常量表達(dá)式1: 語句序列語句序列1 break; case 常量表達(dá)式常量表達(dá)式2: 語句序列語句序列2 break; case 常量表達(dá)式常量表達(dá)式n: 語句序列語句序列n break; default: 語句序列語句序列n+1 break;表達(dá)式表達(dá)式語句序列語句序列1 1常量表達(dá)式常量表達(dá)式1:1:語句序列語句序列2 2常量表達(dá)式常量表達(dá)式2:2:語句序列語句序列i i常量表達(dá)式常量表

48、達(dá)式i:i:語句序列語句序列n n常量表達(dá)式常量表達(dá)式n:n:語句序列語句序列n+1n+1defaultdefaultbreak;break;break;break;break;break;break;break;break;break;這里,這里,break語句的作用是中斷該語句的作用是中斷該switch結(jié)結(jié)構(gòu),即將流程轉(zhuǎn)出構(gòu),即將流程轉(zhuǎn)出switch結(jié)構(gòu)。所以,結(jié)構(gòu)。所以,執(zhí)行執(zhí)行switch結(jié)構(gòu)的就相當(dāng)于只結(jié)構(gòu)的就相當(dāng)于只執(zhí)行與判斷表達(dá)式相匹配的一個(gè)執(zhí)行與判斷表達(dá)式相匹配的一個(gè)case子結(jié)構(gòu)中的語句。子結(jié)構(gòu)中的語句。其實(shí),可以將其實(shí),可以將break看作為看作為語句序列中必要的成分語句序

49、列中必要的成分(位置在語句序列中的最位置在語句序列中的最后后)。 void MonthName(int month) switch (month) case 1: printf(Januaryn); break; case 2: printf(Februaryn); break; case 3: printf(Marchn); break; case 4: printf(Apriln); break; case 5: printf(Mayn); break; case 6: printf(Junen); break; case 7: printf(Jaulyn); break; case 8:

50、 printf(Augustn); break; case 9: printf(Septembern); break; case 10: printf(Octobern); break; case 11: printf(Novembern); break; case 12: printf(Decembern); break; default: printf(Illegal monthn); break; return ; 而調(diào)用函數(shù)為:而調(diào)用函數(shù)為:int main(void) int mon; scanf(%d,&mon); MonthName(mon); 這個(gè)例子中,每一個(gè)這個(gè)例子中,每一個(gè)case子結(jié)構(gòu)的最后

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論