第4章控制結(jié)程序設(shè)計(jì)_第1頁
第4章控制結(jié)程序設(shè)計(jì)_第2頁
第4章控制結(jié)程序設(shè)計(jì)_第3頁
第4章控制結(jié)程序設(shè)計(jì)_第4頁
第4章控制結(jié)程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩151頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 現(xiàn)實(shí)問題總是復(fù)雜的,面對各種需要解決現(xiàn)實(shí)問題總是復(fù)雜的,面對各種需要解決的問題,人們必須首先對各類問題進(jìn)行分的問題,人們必須首先對各類問題進(jìn)行分析,確定解決問題的方法和步驟即算法,析,確定解決問題的方法和步驟即算法,再借助具體編程語言編制好一組讓計(jì)算機(jī)再借助具體編程語言編制好一組讓計(jì)算機(jī)執(zhí)行的指令(即程序),讓計(jì)算機(jī)按人們執(zhí)行的指令(即程序),讓計(jì)算機(jī)按人們指定的步驟有效地工作。指定的步驟有效地工作。 根據(jù)算法,依據(jù)某種編程語言的語法規(guī)則根據(jù)算法,依據(jù)某種編程語言的語法規(guī)則編寫計(jì)算機(jī)執(zhí)行的命令序列,就是程序設(shè)編寫計(jì)算機(jī)執(zhí)行的命令序列,就是程序設(shè)計(jì)。計(jì)。 著名計(jì)算機(jī)科學(xué)家沃思(著名計(jì)算機(jī)科學(xué)家

2、沃思(nikiklaus wirth)提出了一個(gè)公式:提出了一個(gè)公式:“數(shù)據(jù)結(jié)構(gòu)算法程數(shù)據(jù)結(jié)構(gòu)算法程序序”,即程序設(shè)計(jì)包括算法設(shè)計(jì)和數(shù)據(jù)存,即程序設(shè)計(jì)包括算法設(shè)計(jì)和數(shù)據(jù)存儲。除此之外,還有結(jié)構(gòu)化程序設(shè)計(jì)方法儲。除此之外,還有結(jié)構(gòu)化程序設(shè)計(jì)方法和計(jì)算機(jī)語言。和計(jì)算機(jī)語言。 問題的提出問題的提出 閏年問題:閏年問題:一年一年12個(gè)月,共個(gè)月,共365天,這是我天,這是我們說得最多的。但事實(shí)上,每年不完全是們說得最多的。但事實(shí)上,每年不完全是365天。在中國農(nóng)歷中有閏月的說法,而公天。在中國農(nóng)歷中有閏月的說法,而公歷也有閏年的說法。一般情況下,歷也有閏年的說法。一般情況下,2月是月是28天,而閏年時(shí)

3、是天,而閏年時(shí)是29天,何年的天,何年的2月是月是29天呢,天呢,這就是閏年問題。編程判斷一個(gè)年份是否這就是閏年問題。編程判斷一個(gè)年份是否為閏年。為閏年。 求根問題:編程求解一元二次方程的根。求根問題:編程求解一元二次方程的根。本章內(nèi)容本章內(nèi)容l 算法的基礎(chǔ)知識算法的基礎(chǔ)知識 l 大小寫字母轉(zhuǎn)換問題大小寫字母轉(zhuǎn)換問題 順序結(jié)構(gòu)程序的概念順序結(jié)構(gòu)程序的概念 字符數(shù)據(jù)的輸入輸出字符數(shù)據(jù)的輸入輸出l 閏年問題閏年問題 選擇結(jié)構(gòu)程序的概念選擇結(jié)構(gòu)程序的概念 if語句語句 switch語句語句 l 統(tǒng)計(jì)多名學(xué)生成績問題統(tǒng)計(jì)多名學(xué)生成績問題 循環(huán)結(jié)構(gòu)程序的概念循環(huán)結(jié)構(gòu)程序的概念 自增自減運(yùn)算符與逗號表達(dá)式

4、自增自減運(yùn)算符與逗號表達(dá)式 while循環(huán)循環(huán) dowhile循環(huán)循環(huán) for循環(huán)循環(huán) 嵌套循環(huán)嵌套循環(huán) l 應(yīng)用實(shí)例應(yīng)用實(shí)例4.1 算法的基礎(chǔ)知識算法的基礎(chǔ)知識 算法是靈魂,是問題求解過程中的精確描算法是靈魂,是問題求解過程中的精確描述;數(shù)據(jù)結(jié)構(gòu)是加工對象;語言是工具;述;數(shù)據(jù)結(jié)構(gòu)是加工對象;語言是工具;編程需要采用合適的方法。編程需要采用合適的方法。 算法:是對特定問題求解步驟的一種描述。算法:是對特定問題求解步驟的一種描述。程序:是用具體的計(jì)算機(jī)語言來描述算法程序:是用具體的計(jì)算機(jī)語言來描述算法的代碼,可以輸入計(jì)算機(jī)并產(chǎn)生結(jié)果。的代碼,可以輸入計(jì)算機(jī)并產(chǎn)生結(jié)果。常用算法常用算法 遞推化算

5、法遞推化算法(牛頓迭代法、二分法、梯形法、窮舉法等牛頓迭代法、二分法、梯形法、窮舉法等); 排序算法排序算法(選擇法、冒泡法選擇法、冒泡法); 查找算法查找算法(順序查找、折半查找順序查找、折半查找); 有序數(shù)列的插入、刪除操作;有序數(shù)列的插入、刪除操作; 存儲區(qū)的動態(tài)分配與釋放,單向線性鏈表的建立、查找、存儲區(qū)的動態(tài)分配與釋放,單向線性鏈表的建立、查找、插入、刪除操作;插入、刪除操作; 初等數(shù)論問題求解的有關(guān)算法初等數(shù)論問題求解的有關(guān)算法(最大公約數(shù)、最小公倍數(shù)、最大公約數(shù)、最小公倍數(shù)、素?cái)?shù)等素?cái)?shù)等); 遞歸算法遞歸算法(求最大公約數(shù)、階乘等求最大公約數(shù)、階乘等); 字符串的處理字符串的處理

6、(字符和字符串的插入、刪除、字符串的連字符和字符串的插入、刪除、字符串的連接、比較等接、比較等)。 算法的五個(gè)特性算法的五個(gè)特性 有窮性:對任何合法的輸入值,算法中每個(gè)步驟由計(jì)算有窮性:對任何合法的輸入值,算法中每個(gè)步驟由計(jì)算機(jī)執(zhí)行的次數(shù)及時(shí)間都是有限的。機(jī)執(zhí)行的次數(shù)及時(shí)間都是有限的。 確定性:算法中每個(gè)步驟含義明確,無二義性。在任何確定性:算法中每個(gè)步驟含義明確,無二義性。在任何條件下,相同的輸入,必有相同的輸出。條件下,相同的輸入,必有相同的輸出。 可行性:算法中描述的操作都可通過有限次的基本運(yùn)算可行性:算法中描述的操作都可通過有限次的基本運(yùn)算來實(shí)現(xiàn)。來實(shí)現(xiàn)。 輸入:一個(gè)算法應(yīng)具有零個(gè)或多

7、個(gè)輸入。輸入:一個(gè)算法應(yīng)具有零個(gè)或多個(gè)輸入。 (無輸入情況:如求:無輸入情況:如求:1*2*3*4*5)。 輸出:一個(gè)算法應(yīng)具有一個(gè)或多個(gè)輸入。輸出:一個(gè)算法應(yīng)具有一個(gè)或多個(gè)輸入。算法的設(shè)計(jì)目標(biāo)算法的設(shè)計(jì)目標(biāo)正確性:設(shè)計(jì)的算法應(yīng)當(dāng)滿足具有輸入、輸出和加工處理等明確的無歧義正確性:設(shè)計(jì)的算法應(yīng)當(dāng)滿足具有輸入、輸出和加工處理等明確的無歧義 性的描述的具體問題的需求。驗(yàn)證正確性通常有性的描述的具體問題的需求。驗(yàn)證正確性通常有4 4個(gè)層次:個(gè)層次: 程序不含語法錯(cuò)誤;程序不含語法錯(cuò)誤; 程序?qū)τ趲捉M輸入數(shù)據(jù)能夠得出滿足規(guī)格說明要求的結(jié)果;程序?qū)τ趲捉M輸入數(shù)據(jù)能夠得出滿足規(guī)格說明要求的結(jié)果; 程序?qū)τ诰?/p>

8、心選擇的典型、苛刻而帶有刁難性的幾組輸入數(shù)程序?qū)τ诰倪x擇的典型、苛刻而帶有刁難性的幾組輸入數(shù)據(jù)據(jù) 能夠得出滿足規(guī)格說明要求的結(jié)果;能夠得出滿足規(guī)格說明要求的結(jié)果; 程序?qū)τ谝磺泻戏ǖ妮斎霐?shù)據(jù)能夠得出滿足規(guī)格說明要求的程序?qū)τ谝磺泻戏ǖ妮斎霐?shù)據(jù)能夠得出滿足規(guī)格說明要求的結(jié)結(jié) 果。果。 一般情況至少通過第一般情況至少通過第層的驗(yàn)證。層的驗(yàn)證。 可讀性:算法主要是為了閱讀與交流,其次才是機(jī)器執(zhí)行??勺x性好有助可讀性:算法主要是為了閱讀與交流,其次才是機(jī)器執(zhí)行??勺x性好有助 于人對算法的理解;難懂的程序易于隱藏較多錯(cuò)誤,難以調(diào)試于人對算法的理解;難懂的程序易于隱藏較多錯(cuò)誤,難以調(diào)試和和 修改。修改。

9、 健狀性:當(dāng)輸入非法數(shù)據(jù)時(shí),算法也能適當(dāng)?shù)刈龀龇磻?yīng)或進(jìn)行處理,而不健狀性:當(dāng)輸入非法數(shù)據(jù)時(shí),算法也能適當(dāng)?shù)刈龀龇磻?yīng)或進(jìn)行處理,而不 會產(chǎn)生莫名其妙的輸出結(jié)果。會產(chǎn)生莫名其妙的輸出結(jié)果。效率與低存儲量的需求:主要指算法執(zhí)行時(shí)的最長時(shí)間與所需的最大存儲效率與低存儲量的需求:主要指算法執(zhí)行時(shí)的最長時(shí)間與所需的最大存儲 空間??臻g。算法的描述方法算法的描述方法 自然語言自然語言 流程圖流程圖 n-s圖圖 pad圖圖 偽代碼偽代碼用自然語言表示算法用自然語言表示算法 自然語言就是人們?nèi)粘J褂玫恼Z言,可以自然語言就是人們?nèi)粘J褂玫恼Z言,可以是漢語、英語或其他語言。用自然語言表是漢語、英語或其他語言。用自然

10、語言表示通俗易懂,但文字冗長,容易出現(xiàn)示通俗易懂,但文字冗長,容易出現(xiàn)“歧歧義性義性”。除了簡單問題外,一般不用自然。除了簡單問題外,一般不用自然語言描述算法。例如:語言描述算法。例如: 【例【例4-1】輸入三個(gè)數(shù),然后輸出其中最大】輸入三個(gè)數(shù),然后輸出其中最大的數(shù)。的數(shù)。 (1) 輸入輸入a,b,c。 (2) 若若a b,則,則max=a;否則;否則max=b。 (3) 若若c max,則,則max=c。 (4) 輸出輸出max,max即為最大數(shù)。即為最大數(shù)。例:用自然語言寫出求例:用自然語言寫出求 1-1/2+1/3-1/4+1/99-1/100 的算法。的算法。1001991.41312

11、11(1 1)sign=1 /sign=1 /* * 數(shù)值的符號數(shù)值的符號 * */ /(2 2)sum=1 /sum=1 /* * 累加和累加和 * */ /(3 3)deno=2 /deno=2 /* * 分母值分母值 * */ /(4 4)sign=(-1)sign=(-1)* *signsign(5 5)term=signterm=sign* *(1/deno) /(1/deno) /* * 某一項(xiàng)的值某一項(xiàng)的值* */ /(6 6)sum=sum+termsum=sum+term(7 7)deno=deno+1denojij輸出輸出maxmaxkmaxkmaxmax=imax=ima

12、x=jmax=jmax=kmax=k結(jié)束結(jié)束y yn ny yn n流程圖舉例流程圖舉例用流程圖表示出求用流程圖表示出求1001991.4131211的算法。的算法。開始1 = sign1 = sum2 = denoadeno+1 = deno(-1)*sign = signsign*(1/deno) = termsum+term = sumdeno100nyab結(jié)束打印打印sumb算法的描述算法的描述n-s圖圖 既然用基本結(jié)構(gòu)的順序組合可以表示任何復(fù)雜的算法結(jié)構(gòu),那么,基本既然用基本結(jié)構(gòu)的順序組合可以表示任何復(fù)雜的算法結(jié)構(gòu),那么,基本結(jié)構(gòu)之間的流程線就屬多余的了。結(jié)構(gòu)之間的流程線就屬多余的了

13、。19731973年美國兩學(xué)者年美國兩學(xué)者i.nassii.nassi和和b.shneidermanb.shneiderman提出了一種新的流程圖形式,并以他們的名字命名為提出了一種新的流程圖形式,并以他們的名字命名為n ns s結(jié)構(gòu)結(jié)構(gòu)化流程圖。這種流程圖完全去掉了帶箭頭的流程線,全部算法寫在一個(gè)矩形化流程圖。這種流程圖完全去掉了帶箭頭的流程線,全部算法寫在一個(gè)矩形框內(nèi),在該框內(nèi)還可以包括其他的從屬于它的框,即由一些基本的框組成一框內(nèi),在該框內(nèi)還可以包括其他的從屬于它的框,即由一些基本的框組成一個(gè)大框。這種個(gè)大框。這種n ns s流程圖十分適合結(jié)構(gòu)化程序設(shè)計(jì),因而很受歡迎。流程圖十分適合結(jié)構(gòu)

14、化程序設(shè)計(jì),因而很受歡迎。三種基本結(jié)構(gòu)對應(yīng)的三種基本結(jié)構(gòu)對應(yīng)的n ns s圖符號圖符號: a b當(dāng)當(dāng)p成立成立a直到直到p成立成立aab成立成立不成立不成立p順序結(jié)構(gòu)順序結(jié)構(gòu) 選擇結(jié)構(gòu)選擇結(jié)構(gòu) 當(dāng)當(dāng)(while)型循環(huán)結(jié)構(gòu)型循環(huán)結(jié)構(gòu) 直到直到(until)型循環(huán)結(jié)構(gòu)型循環(huán)結(jié)構(gòu)輸入輸入i i、j j、k k輸出輸出maxmaxy yy yn nn nijijkmaxkmaxmax=imax=imax=jmax=jmax=kmax=k例例4-4 用用n 素?cái)?shù)是指除了素?cái)?shù)是指除了1和該數(shù)本身和該數(shù)本身之外,不能被其他任何整數(shù)整之外,不能被其他任何整數(shù)整除的數(shù)。除的數(shù)。 實(shí)際上,若要判斷一個(gè)正整實(shí)際上

15、,若要判斷一個(gè)正整數(shù)數(shù)m是否為素?cái)?shù),只要將是否為素?cái)?shù),只要將2到到 間的每一個(gè)整數(shù)去除間的每一個(gè)整數(shù)去除m,若有一,若有一個(gè)能整除個(gè)能整除m,則,則m不是素?cái)?shù),若不是素?cái)?shù),若其間的所有整數(shù)都不能整除其間的所有整數(shù)都不能整除m,則則m為素?cái)?shù)。為素?cái)?shù)。讀入讀入mk= mi=2當(dāng)當(dāng)i km被被i整除整除真真假假用用break結(jié)束循環(huán)結(jié)束循環(huán)i=i+1i k+1真真假假輸出輸出:m”是素?cái)?shù)是素?cái)?shù)” 輸出輸出:m”不是素?cái)?shù)不是素?cái)?shù)” m算法的描述算法的描述pad圖圖ab順序結(jié)構(gòu)的padwhileaa)b)untila循環(huán)結(jié)構(gòu)的pad選擇結(jié)構(gòu)的padc)abcdi1i2i3i4i=b)paba)papad

16、pad(problem analysis diagramproblem analysis diagram),是近年來在軟件開發(fā)中被廣泛使用的),是近年來在軟件開發(fā)中被廣泛使用的一種算法的圖形表示法,與前面介紹的流程圖、一種算法的圖形表示法,與前面介紹的流程圖、n-sn-s圖相比,流程圖、圖相比,流程圖、n-sn-s圖都是自上而下的順序描述,而圖都是自上而下的順序描述,而padpad圖除了自上而下以外,還有自左向右的圖除了自上而下以外,還有自左向右的展開,所以,如果說流程圖、展開,所以,如果說流程圖、n-sn-s圖是一維的算法描述的話,則圖是一維的算法描述的話,則padpad圖就是圖就是二維的,

17、它能展現(xiàn)算法的層次結(jié)構(gòu),更直觀易懂。二維的,它能展現(xiàn)算法的層次結(jié)構(gòu),更直觀易懂。padpad圖表示的三種基本結(jié)構(gòu)如下所示:圖表示的三種基本結(jié)構(gòu)如下所示:例:求三個(gè)數(shù)的最大值的例:求三個(gè)數(shù)的最大值的pad圖圖max=imax=imax=jmax=jmax=kmax=k輸入輸入i i、j j、k k輸出輸出maxmaxijijkmaxkmax算法的描述算法的描述偽代碼偽代碼 用流程圖、用流程圖、n-sn-s圖、圖、padpad圖等描述算法,直觀易懂,但繪制比較麻煩,在圖等描述算法,直觀易懂,但繪制比較麻煩,在設(shè)計(jì)一個(gè)算法時(shí),可能要反復(fù)修改,而修改流程圖是比較麻煩的,因此,流設(shè)計(jì)一個(gè)算法時(shí),可能要反

18、復(fù)修改,而修改流程圖是比較麻煩的,因此,流程圖適合表示算法,但在設(shè)計(jì)算法過程中使用不是很理想。為了設(shè)計(jì)算法方程圖適合表示算法,但在設(shè)計(jì)算法過程中使用不是很理想。為了設(shè)計(jì)算法方便,常使用偽代碼工具。便,常使用偽代碼工具。 偽代碼是用介于自然語言和計(jì)算機(jī)語言之間的文字和符號來描述算法。偽代碼是用介于自然語言和計(jì)算機(jī)語言之間的文字和符號來描述算法。偽代碼不用圖形符號,書寫方便,格式緊湊,便于向計(jì)算機(jī)語言算法過渡。偽代碼不用圖形符號,書寫方便,格式緊湊,便于向計(jì)算機(jī)語言算法過渡。因此,實(shí)際中常用偽代碼描述算法。因此,實(shí)際中常用偽代碼描述算法。例:求三個(gè)數(shù)的最大值的偽代碼算法描述如下:例:求三個(gè)數(shù)的最大

19、值的偽代碼算法描述如下:l定義三個(gè)變量定義三個(gè)變量i i、j j、k k,用來存放三個(gè)數(shù),定義變量,用來存放三個(gè)數(shù),定義變量maxmax存放最大值;存放最大值;l輸入三個(gè)變量的值;輸入三個(gè)變量的值;lmax=ij?i:jmax=ij?i:j;lmax=maxk?max:kmax=maxk?max:k;l輸出輸出maxmax。例:用自然語言寫出求例:用自然語言寫出求 1-1/2+1/3-1/4+1/99-1/100 的算法。的算法。1001991.4131211(1 1)sign=1 /sign=1 /* * 數(shù)值的符號數(shù)值的符號 * */ /(2 2)sum=1 /sum=1 /* * 累加和

20、累加和 * */ /(3 3)deno=2 /deno=2 /* * 分母值分母值 * */ /(4 4)sign=(-1)sign=(-1)* *signsign(5 5)term=signterm=sign* *(1/deno) /(1/deno) /* * 某一項(xiàng)的值某一項(xiàng)的值* */ /(6 6)sum=sum+termsum=sum+term(7 7)deno=deno+1deno=deno+1(8 8)若)若deno100deno100返回第返回第(4)(4)步,否則轉(zhuǎn)第步,否則轉(zhuǎn)第(9)(9)步步(9 9)輸出)輸出sumsum算法的描述算法的描述計(jì)算機(jī)語言計(jì)算機(jī)語言 用計(jì)算機(jī)語

21、言表示算法實(shí)際上就是計(jì)算機(jī)程序。用計(jì)算機(jī)語言表示算法用計(jì)算機(jī)語言表示算法實(shí)際上就是計(jì)算機(jī)程序。用計(jì)算機(jī)語言表示算法必須嚴(yán)格遵守所使用的語言的語法規(guī)則。必須嚴(yán)格遵守所使用的語言的語法規(guī)則。例:用例:用c c語言表示求三個(gè)數(shù)的最大值的算法如下:語言表示求三個(gè)數(shù)的最大值的算法如下:#include #include void main()void main() int i, j, k, max; / int i, j, k, max; /* * 定義變量定義變量 * */ / printf(i, j, k=?n); / printf(i, j, k=?n); /* * 提示信息提示信息 * */ /

22、 scanf(%4d%4d%4d, &i, &j, &k); / scanf(%4d%4d%4d, &i, &j, &k); /* * 輸入函數(shù)輸入函數(shù) * */ / max=ij?i:j; / max=ij?i:j; /* * 求兩數(shù)的最大值求兩數(shù)的最大值 * */ / max=maxk?max:k; max=maxk?max:k; printf(the maxmum value of the 3 data is %dn, max); / printf(the maxmum value of the 3 data is %dn, max); /

23、* *輸出輸出* */ / 在計(jì)算機(jī)中,有時(shí)不區(qū)分大小寫字母,而在計(jì)算機(jī)中,有時(shí)不區(qū)分大小寫字母,而且很多高級語言也不區(qū)分大小寫字母,但且很多高級語言也不區(qū)分大小寫字母,但是在程序中,如果需要判斷字母是否一致是在程序中,如果需要判斷字母是否一致時(shí),則必須使用一種標(biāo)準(zhǔn),這時(shí)就必須將時(shí),則必須使用一種標(biāo)準(zhǔn),這時(shí)就必須將大寫字母轉(zhuǎn)換成小寫字母,或?qū)⑿懽帜复髮懽帜皋D(zhuǎn)換成小寫字母,或?qū)⑿懽帜皋D(zhuǎn)換成大寫字母。轉(zhuǎn)換成大寫字母。問題的提出問題的提出 從鍵盤輸入一個(gè)小寫字母,要求在屏幕上從鍵盤輸入一個(gè)小寫字母,要求在屏幕上輸出對應(yīng)的大寫字母。輸出對應(yīng)的大寫字母。問題的分析問題的分析 首先輸入一個(gè)字母(可能是

24、大寫字母,也首先輸入一個(gè)字母(可能是大寫字母,也可能是小寫字母);然后將輸入的字母轉(zhuǎn)可能是小寫字母);然后將輸入的字母轉(zhuǎn)換成大寫字母,從字母的換成大寫字母,從字母的ascii碼可知,大碼可知,大寫字母的寫字母的ascii碼值比小寫字母碼值比小寫字母ascii碼值碼值小小32,因此,小寫字母,因此,小寫字母ascii碼值減碼值減32就就是大寫字母;最后輸出大寫字母即可。是大寫字母;最后輸出大寫字母即可。 這里涉及到字符數(shù)據(jù)的輸入輸出問題。這里涉及到字符數(shù)據(jù)的輸入輸出問題。回顧回顧 #include void main() char a,b; a=x; b=y; a=a-32; /* char與與

25、int數(shù)據(jù)間可進(jìn)行算術(shù)運(yùn)算數(shù)據(jù)間可進(jìn)行算術(shù)運(yùn)算 */ b=b-32; printf(%c,%cn%d,%dn,a,b,a,b); 如何從鍵盤輸入字符呢如何從鍵盤輸入字符呢?標(biāo)準(zhǔn)字符輸出函數(shù)標(biāo)準(zhǔn)字符輸出函數(shù) 格式:格式: putchar( c ) putchar( c ) 、 putch( c )putch( c ) 參數(shù):參數(shù)參數(shù):參數(shù)c c為字符常量、字符或整型變量、表達(dá)式為字符常量、字符或整型變量、表達(dá)式 功能:把字符功能:把字符c c輸出到標(biāo)準(zhǔn)輸出設(shè)備輸出到標(biāo)準(zhǔn)輸出設(shè)備( (即顯示器即顯示器) )上上 返回值:正常返回,為顯示字符的代碼值;若出錯(cuò),返回為返回值:正常返回,為顯示字符的代碼

26、值;若出錯(cuò),返回為eof(eof(即即-1)-1)說明:說明: 此函數(shù)只能輸出單個(gè)字符數(shù)據(jù)。此函數(shù)只能輸出單個(gè)字符數(shù)據(jù)。 參數(shù)參數(shù)c c可以是字符常量、轉(zhuǎn)義字符、字符變量、整型常量、可以是字符常量、轉(zhuǎn)義字符、字符變量、整型常量、整型變量。整型變量。 從功能角度來看,從功能角度來看,printf()printf()函數(shù)使用函數(shù)使用%c%c完全可以代替完全可以代替putchar()putchar()函數(shù)和函數(shù)和putch()putch()函數(shù)。函數(shù)。 putchar()putchar()函數(shù)和函數(shù)和putch()putch()函數(shù)的功能完全一樣。函數(shù)的功能完全一樣。 該函數(shù)在該函數(shù)在stdio.h

27、stdio.h中聲明。中聲明。標(biāo)準(zhǔn)字符輸入函數(shù)標(biāo)準(zhǔn)字符輸入函數(shù) 格式:格式: getchar( ) 、getch( )、getche( ) 功能:從標(biāo)準(zhǔn)的輸入設(shè)備(如鍵盤)讀一個(gè)字符功能:從標(biāo)準(zhǔn)的輸入設(shè)備(如鍵盤)讀一個(gè)字符 返回值:正常,返回讀取的字符代碼值;若出錯(cuò),返回為返回值:正常,返回讀取的字符代碼值;若出錯(cuò),返回為eof(eof(即即-1)-1)說明:說明: getchar()getchar()函數(shù)、函數(shù)、getch()getch()函數(shù)、函數(shù)、getche()getche()函數(shù),都只能接受一個(gè)字符。函數(shù),都只能接受一個(gè)字符。 getchar()getchar()函數(shù)在輸入一個(gè)或若

28、干個(gè)字符后,必須以回車鍵結(jié)束,否則字函數(shù)在輸入一個(gè)或若干個(gè)字符后,必須以回車鍵結(jié)束,否則字符不被輸入。但只有第一個(gè)字符被接受。并且在屏幕上回顯全部輸入的字符。符不被輸入。但只有第一個(gè)字符被接受。并且在屏幕上回顯全部輸入的字符。 getch()getch()和和getche()getche()函數(shù)在輸入一個(gè)字符后,立即被函數(shù)接受,不用回車函數(shù)在輸入一個(gè)字符后,立即被函數(shù)接受,不用回車鍵。使用鍵。使用getch()getch()接受字符時(shí),屏幕上不回顯原輸入的字符。使用接受字符時(shí),屏幕上不回顯原輸入的字符。使用getche()getche()接接受字符時(shí),要顯示原輸入的字符。受字符時(shí),要顯示原輸入

29、的字符。 利用回顯和不回顯的特點(diǎn)利用回顯和不回顯的特點(diǎn), getch(), getch()和和getche()getche()這兩個(gè)函數(shù)經(jīng)常用于交互這兩個(gè)函數(shù)經(jīng)常用于交互輸入的過程中完成暫停等功能。輸入的過程中完成暫停等功能。 從功能角度來看,從功能角度來看,scanf()scanf()函數(shù)使用函數(shù)使用%c%c完全可以代替完全可以代替getchar()getchar()、getch()getch()和和getche()getche()函數(shù)。函數(shù)。 該函數(shù)在該函數(shù)在stdio.hstdio.h中聲明。中聲明。例例4-5 問題的實(shí)現(xiàn)問題的實(shí)現(xiàn)/ /* *li4_5.cli4_5.c* */ /#i

30、nclude #include void main()void main() char c1,c2; char c1,c2; c1=getchar(); / c1=getchar(); /* * 輸入小寫字母輸入小寫字母 * */ / printf(%c,%dn,c1,c1); printf(%c,%dn,c1,c1); c2=c1-32; / c2=c1-32; /* * 轉(zhuǎn)變?yōu)榇髮懽帜皋D(zhuǎn)變?yōu)榇髮懽帜? */ / printf(%c,%dn,c2,c2); / printf(%c,%dn,c2,c2); /* * 輸出輸出 * */ / 輸入字輸入字符符不同數(shù)據(jù)之不同數(shù)據(jù)之間的運(yùn)算間的運(yùn)算同

31、一數(shù)據(jù)不同一數(shù)據(jù)不同的輸出方同的輸出方式式順序結(jié)構(gòu)程序順序結(jié)構(gòu)程序 通常的計(jì)算機(jī)程序總是由若干條語句組成,通常的計(jì)算機(jī)程序總是由若干條語句組成,從執(zhí)行方式上看,從第一條語句到最后一從執(zhí)行方式上看,從第一條語句到最后一條語句完全按順序執(zhí)行,就是簡單的順序條語句完全按順序執(zhí)行,就是簡單的順序結(jié)構(gòu)。前面我們所編寫的程序都是順序結(jié)結(jié)構(gòu)。前面我們所編寫的程序都是順序結(jié)構(gòu)程序。構(gòu)程序。舉一反三舉一反三例例4-74-7:雞兔同籠問題。已知雞兔總頭數(shù)為:雞兔同籠問題。已知雞兔總頭數(shù)為h h,總腳數(shù)為,總腳數(shù)為f f,求雞兔,求雞兔各有多少只?各有多少只?【分析】【分析】設(shè)雞有設(shè)雞有x x只,兔有只,兔有y y

32、只,則有方程成立:只,則有方程成立: x+y=h (1)x+y=h (1) 2x+4y=f (2) 2x+4y=f (2)解上述解上述(1)(2)(1)(2)式方程組有解:式方程組有解: x=(4h-f)/2x=(4h-f)/2 y=(f-2h)/2 y=(f-2h)/2本例只需要輸入總腳數(shù)本例只需要輸入總腳數(shù)f f、總頭數(shù)、總頭數(shù)h h即可求出。需要用到即可求出。需要用到scanf()scanf()和和printf()printf()庫函數(shù)。庫函數(shù)。例例4-74-7程序程序/ /* *li4_7.cli4_7.c* */ /#include #include void main(void)v

33、oid main(void) int h,f,x,y; int h,f,x,y; scanf(%d,%d, &h,&f); / scanf(%d,%d, &h,&f); /* * 輸入雞兔總頭數(shù)輸入雞兔總頭數(shù)h h,總腳數(shù),總腳數(shù)f f * */ / x=(4 x=(4* *h-f)/2; /h-f)/2; /* * 計(jì)算雞的只數(shù)計(jì)算雞的只數(shù) * */ / y=(f-2 y=(f-2* *h)/2; /h)/2; /* * 計(jì)算兔的只數(shù)計(jì)算兔的只數(shù) * */ / printf(chicken=%d,rabbit=%dn,x,y); / printf(chicke

34、n=%d,rabbit=%dn,x,y); /* * 輸出雞兔只數(shù)輸出雞兔只數(shù) * */ / 為什么沒有用顯示轉(zhuǎn)換數(shù)為什么沒有用顯示轉(zhuǎn)換數(shù)據(jù),或據(jù),或x=(4*h-f)/2.0的形式?的形式?例例4-9:求:求ax2+bx+c=0方程的根方程的根x1=p+q x1=p+q , x2=p-qx2=p-q,x1=x1= -b+ b-b+ b2 2- 4ac- 4ac2a2ax2= x2= -b- b-b- b2 2- 4ac- 4ac2a2a令令2a2ap =p =-b-bb b2 2- 4ac- 4ac2a2aq =q =【分析】【分析】只要保證只要保證b*b-4*a*c大于等于大于等于0,該方

35、程就有實(shí)根。,該方程就有實(shí)根。/*li4_9.c*/#include #include void main() float a,b,c,disc,p,q,x1,x2; printf(please enter the coefficients a,b,c:); scanf(%f%f%f,&a,&b,&c); /* 輸入輸入a,b,c */ disc=b*b-4*a*c; /* 計(jì)算判別式計(jì)算判別式 */ p=-b/(2*a); q=sqrt(disc)/(2*a); x1=p+q; x2=p-q; /* 計(jì)算方程的計(jì)算方程的2個(gè)根個(gè)根 */ printf(x1=%fnx2

36、=%fn,x1,x2); /* 輸出輸出x1和和x2 */問題:如果問題:如果discdiscb b* *b-4b-4* *a a* *c c的值小于的值小于0 0呢?呢? 以上都是順序結(jié)構(gòu)程序。以上都是順序結(jié)構(gòu)程序。 問題:問題:如果如果discb*b-4*a*c的值小于的值小于0呢?呢? 如果要判斷,那么要用到選擇結(jié)構(gòu)程序。如果要判斷,那么要用到選擇結(jié)構(gòu)程序。選擇結(jié)構(gòu)程序選擇結(jié)構(gòu)程序 若在程序執(zhí)行過程當(dāng)中,根據(jù)用戶的輸入若在程序執(zhí)行過程當(dāng)中,根據(jù)用戶的輸入或中間結(jié)果去執(zhí)行若干不同的任務(wù)則為選或中間結(jié)果去執(zhí)行若干不同的任務(wù)則為選擇結(jié)構(gòu)程序。擇結(jié)構(gòu)程序。 c提供了一系列的分支語句來實(shí)現(xiàn)選擇結(jié)構(gòu)

37、提供了一系列的分支語句來實(shí)現(xiàn)選擇結(jié)構(gòu)程序設(shè)計(jì)。程序設(shè)計(jì)。分支語句分支語句 if語句語句 if-else語句語句 if-else if語句語句 switch語句語句if 語句語句“if (表達(dá)式表達(dá)式) 語句語句”形式形式 語句格式的一般形式為:語句格式的一般形式為: if (表達(dá)式表達(dá)式) 語句語句;注意:注意:ifif后面的后面的“表達(dá)式表達(dá)式”一般用于表示一個(gè)條一般用于表示一個(gè)條件,它可以是關(guān)系表達(dá)式、邏輯表達(dá)式、算術(shù)表件,它可以是關(guān)系表達(dá)式、邏輯表達(dá)式、算術(shù)表達(dá)式、字符型表達(dá)式等。達(dá)式、字符型表達(dá)式等。 格式中的格式中的“語句語句”,可以只包含一個(gè)簡單語句,也可以是復(fù)合語句??梢灾话?/p>

38、個(gè)簡單語句,也可以是復(fù)合語句。如果是復(fù)合語句,必須用一對花括號如果是復(fù)合語句,必須用一對花括號將語句括將語句括起來。如果只有一條語句,則可不用起來。如果只有一條語句,則可不用括起來。括起來。例:例:if (xy) printf(“%d”,x);語句語句表達(dá)式表達(dá)式ab真真(非非0)假假(0)語句語句真真假假表達(dá)式表達(dá)式語句功能:執(zhí)行此語句時(shí),先求表達(dá)語句功能:執(zhí)行此語句時(shí),先求表達(dá)式的值,若其值為式的值,若其值為“真真”,則執(zhí)行語句;若,則執(zhí)行語句;若其值為其值為“假假”,則在,則在ifif結(jié)構(gòu)體內(nèi)什么也不執(zhí)結(jié)構(gòu)體內(nèi)什么也不執(zhí)行。而程序直接去執(zhí)行行。而程序直接去執(zhí)行ifif語句后面的語句。語句

39、后面的語句。例例4-9程序程序/*li4_9_1.c*/#include #include void main() float a,b,c,disc,p,q,x1,x2; scanf(%f%f%f,&a,&b,&c); disc=b*b-4*a*c; if(disc=0) p=-b/(2*a); q=sqrt(disc)/(2*a); x1=p+q; x2=p-q; printf(x1=%fnx2=%fn,x1,x2); if( ) else 語句語句語句格式的一般形式為:語句格式的一般形式為: if (表達(dá)式表達(dá)式) 語句語句1; else 語句語句2;注意:注意:i

40、fif后面的后面的“表達(dá)式表達(dá)式”一般用于表示一個(gè)條一般用于表示一個(gè)條件,它可以是關(guān)系表達(dá)式、邏輯表達(dá)式、算術(shù)表件,它可以是關(guān)系表達(dá)式、邏輯表達(dá)式、算術(shù)表達(dá)式、字符型表達(dá)式等。達(dá)式、字符型表達(dá)式等。 格式中的格式中的“語句語句”,可以只包含一個(gè)簡單語句,也可以是復(fù)合語句。可以只包含一個(gè)簡單語句,也可以是復(fù)合語句。如果是復(fù)合語句,必須用一對花括號如果是復(fù)合語句,必須用一對花括號將語句括將語句括起來。如果只有一條語句,則可不用起來。如果只有一條語句,則可不用括起來。括起來。語句語句1 語句語句2真真假假表達(dá)式表達(dá)式語句語句1語句語句2表達(dá)式表達(dá)式b真真(非非0)假假(0)語句功能:執(zhí)行此語句時(shí),先

41、求表達(dá)式語句功能:執(zhí)行此語句時(shí),先求表達(dá)式的值,若其值為的值,若其值為“真真”,則執(zhí)行語句,則執(zhí)行語句1 1;若其;若其值為值為“假假”,則執(zhí)行語句,則執(zhí)行語句2 2。最后程序跳出。最后程序跳出ifif語句執(zhí)行后面的語句。語句執(zhí)行后面的語句。例:例:if (xy) max=x; else max=y;例例4-9程序程序/*li4_9_2.c*/#include #include void main() float a,b,c,disc,p,q,x1,x2; scanf(%f%f%f,&a,&b,&c); disc=b*b-4*a*c; if(disc=0) p=-b/(

42、2*a); q=sqrt(disc)/(2*a); x1=p+q; x2=p-q; printf(x1=%fnx2=%fn,x1,x2); else printf(“no real root!”); if (表達(dá)式表達(dá)式) 語句語句1; else 語句語句2; 由于語句由于語句1或語句或語句2可以是各種形式的語句,可以是各種形式的語句,當(dāng)然也可以是分支語句,因此分支語句可當(dāng)然也可以是分支語句,因此分支語句可以嵌套。以嵌套。 例例4-9程序程序/*li4_9_3.c*/#include #include void main() float a,b,c,disc,p,q,x1,x2; scanf(

43、%f%f%f,&a,&b,&c); if(a!=0) disc=b*b-4*a*c; if(disc=0) p=-b/(2*a); q=sqrt(disc)/(2*a); if(disc=0) printf(“x1=x2=%fn”,x1=x2=p); else printf(x1=%fnx2=%fn,x1=p+q,x2=p-q); else printf(“no real root!”); else printf(“error.”);在語句在語句1嵌套嵌套例例4-9程序程序/*li4_9_4.c*/#include #include void main() float

44、a,b,c,disc,p,q,x1,x2; scanf(%f%f%f,&a,&b,&c); if(a=0) printf(“error.”); else disc=b*b-4*a*c; if(disc20|x-10) if(yx) printf(good);else printf(bad); 對于上述情況,對于上述情況,c編譯系統(tǒng)規(guī)定:編譯系統(tǒng)規(guī)定:else語句語句與最近的一個(gè)與最近的一個(gè)if語句匹配。語句匹配。 if( ) else if 語句語句 語句格式的一般語句格式的一般形式為:形式為: if (表達(dá)式表達(dá)式1) 語句語句1; else if (表達(dá)式表達(dá)式2)

45、 語句語句2; else if (表達(dá)式表達(dá)式3) 語句語句3; else if (表達(dá)式表達(dá)式n) 語句語句n; else 語句語句n+1;表達(dá)式表達(dá)式1表達(dá)式表達(dá)式2表達(dá)式表達(dá)式3表達(dá)式表達(dá)式n語句語句1語句語句2語句語句3語句語句n語句語句n+1 真真(非非0)假假(0)真真(非非0)假假(0)假假(0)假假(0) 真真(非非0) 真真(非非0)例:if (profit1000) index=0.4; else if (profit 800) index=0.3; else if (profit 600) index=0.2; else if (profit 400) index=0.1

46、; else index=0; 例例4-9程序程序/*li4_9_5.c*/#include #include void main() float a,b,c,disc,p,q,x1,x2; scanf(%f%f%f,&a,&b,&c); if(a=0) printf(“error.”); else disc=b*b-4*a*c; if(disc0) printf(“no real root!”); else if(disc=0) printf(“x1=x2=%fn”,x1=x2 =-b/(2*a); else p=-b/(2*a); q=sqrt(disc)/(2*a

47、); printf(x1=%fnx2=%fn,x1=p+q,x2=p-q); if 語句的嵌套語句的嵌套if (expr1) if (expr2) statement1 else statement2內(nèi)嵌內(nèi)嵌ifif (expr1) statement1else if(expr3) statement3 else statement4內(nèi)嵌內(nèi)嵌ifif (expr1) if (expr2) statement1else statement3 內(nèi)嵌內(nèi)嵌ifif (expr1) if (expr2) statement1 else statement2else if(expr3) statement

48、3 else statement4內(nèi)嵌內(nèi)嵌if內(nèi)嵌內(nèi)嵌if if 語句強(qiáng)調(diào)說明語句強(qiáng)調(diào)說明如:if(a=b&x=y) printf(“a=b,x=y”); if(3) printf(“ok”); if(a) printf(“%d”,a);uifif后面的表達(dá)式類型任意后面的表達(dá)式類型任意uif(!x) if(x=0) if(x) if(x!=0)u語句可以是復(fù)合語句語句可以是復(fù)合語句 例例 考慮下面程序的輸出結(jié)果考慮下面程序的輸出結(jié)果: #include void main() int x,y; scanf(“%d,%d”,&x,&y); if(xy) x=y; y=x

49、; else x=x+1; y=y+1; printf(“%d,%dn”,x,y);compile error!ok!4.3 閏年問題閏年問題一年一年1212個(gè)月,共個(gè)月,共365365天,這是我們說得最多的。但事實(shí)上,每年不完全是天,這是我們說得最多的。但事實(shí)上,每年不完全是365365天。在中國農(nóng)歷中有閏月的說法,而公歷也有閏年的說法。一般情況下,天。在中國農(nóng)歷中有閏月的說法,而公歷也有閏年的說法。一般情況下,2 2月月是是2828天,而閏年時(shí)是天,而閏年時(shí)是2929天,何年的天,何年的2 2月是月是2929天呢,這就是閏年問題。天呢,這就是閏年問題。例例4-104-10:編程判斷一個(gè)年份

50、是否為閏年。:編程判斷一個(gè)年份是否為閏年。【分析】【分析】判斷閏年的條件是:能被判斷閏年的條件是:能被4 4整除、但不能被整除、但不能被100100整除,或者能被整除,或者能被400400整除。整除。整除的表示:整除的表示:x x能被能被y y整除,則余數(shù)為整除,則余數(shù)為0 0,即,即x%y=0 x%y=0。因此,該問題需要邏輯判斷,涉及邏輯表達(dá)式與關(guān)系表達(dá)式、求余運(yùn)算符因此,該問題需要邏輯判斷,涉及邏輯表達(dá)式與關(guān)系表達(dá)式、求余運(yùn)算符% %、選擇結(jié)構(gòu)等知識。選擇結(jié)構(gòu)等知識。關(guān)系運(yùn)算符及其表達(dá)式關(guān)系運(yùn)算符及其表達(dá)式v關(guān)系運(yùn)算符關(guān)系運(yùn)算符l種類:種類: = !=l結(jié)合方向:自左向右結(jié)合方向:自左向

51、右l優(yōu)先級別:優(yōu)先級別:=!=優(yōu)先級優(yōu)先級6(高)(高)優(yōu)先級優(yōu)先級7(低)(低)例例 ca+b /c(a+b)ca+b /c(a+b) ab!=c /(ab)!=c ab!=c /(ab)!=c a=bc /a=(bc) a=bc /a=(bc /a=(bc) a=bc /a=(bc)l關(guān)系表達(dá)式的值:是邏輯值關(guān)系表達(dá)式的值:是邏輯值“真真”或或“假假”,用,用1和和0表表示示例例 int a=3,b=2,c=1,d,f; ab (ab)=c b+cb f=abc/*表達(dá)式值表達(dá)式值1*/*表達(dá)式值表達(dá)式值1*/*表達(dá)式值表達(dá)式值0*/*d=1*/*f=0*/關(guān)系運(yùn)算符注意事項(xiàng)關(guān)系運(yùn)算符注意

52、事項(xiàng)例例 若若a=0; b=0.5; x=0.3; 則則 a=x278在在c中是允許的,中是允許的, 值為值為0例例 int i=1, j=7,a; a=i+(j%4!=0); 則則a=2例例 a0 結(jié)果為結(jié)果為 a100 結(jié)果為結(jié)果為10關(guān)系運(yùn)算符注意事項(xiàng)關(guān)系運(yùn)算符注意事項(xiàng)例例 注意區(qū)分注意區(qū)分“=”與與“=” int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”);例例 應(yīng)避免對實(shí)數(shù)作相等或不等的判斷應(yīng)避免對實(shí)數(shù)作相等或不等的判斷如如 1.0/3.0*3.0=1.0 結(jié)果為結(jié)果為可改寫為:可改

53、寫為:fabs(1.0/3.0*3.0-1.0)1e-60例例4-10 問題的實(shí)現(xiàn)問題的實(shí)現(xiàn)閏年的條件是:能被閏年的條件是:能被4 4整除、但不能被整除、但不能被100100整除,或者能被整除,或者能被400400整除。整除。 (x(x能被能被y y整除,則余數(shù)為整除,則余數(shù)為0 0,即,即x%y=0)x%y=0) 輸入年份賦給輸入年份賦給yaeryear能被能被4整除整除真真真真假假假假year能被能被100整除整除year能被能被400整除整除真真假假leap=1leap=0leap=1leap=0leap真真假假輸出輸出year是閏年是閏年輸出輸出year是平年是平年例例4-10 程序程

54、序/ /* *li4_10.cli4_10.c* */ /#include #include void main() void main() int year,leap; int year,leap; printf(please input the year:); printf(please input the year:); scanf(%d,&year); scanf(%d,&year); if (year % 4 = 0) / if (year % 4 = 0) /* *被被4 4整除整除 * */ / if (year%100 = 0) if (year%100 = 0

55、) if (year%400 = 0) if (year%400 = 0) leap = 1; leap = 1; else else leap = 0; leap = 0; else else leap = 1; leap = 1; else else leap = 0; / leap = 0; /* *不能被不能被4 4整除整除 * */ / if (leap) if (leap) printf(%d is a leap yearn,year); printf(%d is a leap yearn,year); else else printf(%d is not a leap yearn

56、,year); printf(%d is not a leap yearn,year); 技巧技巧 在程序中設(shè)置狀態(tài)標(biāo)志值。如程序中的在程序中設(shè)置狀態(tài)標(biāo)志值。如程序中的leap!例例4-10的另解的另解#include void main() int y; scanf(%d,&y); if(y%4=0&y%100!=0)|y%400=0) printf(leap year.n); else printf(no leap year.n);#include void main() int y; scanf(%d,&y); if(!(y%4)&y%100|!(y%40

57、0) printf(leap year.n); else printf(no leap year.n);程序中用到了邏輯運(yùn)程序中用到了邏輯運(yùn)算符,下面介紹之:算符,下面介紹之:邏輯運(yùn)算符及其表達(dá)式邏輯運(yùn)算符及其表達(dá)式v邏輯運(yùn)算符邏輯運(yùn)算符l種類:種類: ! & |l邏輯運(yùn)算真值表邏輯運(yùn)算真值表ab!a!ba&ba|b真假真假假假真真真假假假假假真真假假真真真假真真lc c語言中語言中, ,運(yùn)算量運(yùn)算量: 0: 0表示表示“假假”, 非非0 0表示表示“真真”, , 運(yùn)算結(jié)果運(yùn)算結(jié)果: 0: 0表示表示“假假”, 1 1表示表示“真真”, ,邏輯運(yùn)算符邏輯運(yùn)算符! (2)&

58、; (11)| (12)高高低低例例 a=x & xb&xy a=b|x=y !a|abl優(yōu)先級:優(yōu)先級:l結(jié)合方向:結(jié)合方向:! :從右向左從右向左& :從左向右從左向右| :從左向右從左向右/*(a=x) & (xb)&(xy)*/*(a=b)|(x=y)*/*(!a)|(ab)*/邏輯運(yùn)算符邏輯運(yùn)算符! (2)& (11)| (12)高高低低l優(yōu)先級:優(yōu)先級:l結(jié)合方向:結(jié)合方向:! :從右向左從右向左& :從左向右從左向右| :從左向右從左向右例例 a=4;b=5; !a a&b a|b !a|b 4&0|2 53

59、&2|83)&2|(8b)&(n=cd)例例 int x=5; 表達(dá)式的值表達(dá)式的值 0|+x int x=5; 表達(dá)式的值表達(dá)式的值 0&+x/*結(jié)果結(jié)果m=0,n=1*/*結(jié)果結(jié)果1,x=6*/*結(jié)果結(jié)果0,x=5*/邏輯運(yùn)算的短路特性邏輯運(yùn)算的短路特性l短路特性:邏輯表達(dá)式求解時(shí),并非所有的邏輯運(yùn)算符都短路特性:邏輯表達(dá)式求解時(shí),并非所有的邏輯運(yùn)算符都被執(zhí)行,只是在必須執(zhí)行下一個(gè)邏輯運(yùn)算符才能求出表達(dá)被執(zhí)行,只是在必須執(zhí)行下一個(gè)邏輯運(yùn)算符才能求出表達(dá)式的解時(shí),才執(zhí)行該運(yùn)算符式的解時(shí),才執(zhí)行該運(yùn)算符abc非非0(真真)非非0(真真)非非0(真真)0(假假)0

60、(假假)0(假假)1(真真)0(假假)a&b&c執(zhí)行過程執(zhí)行過程abc非非0(真真)非非0(真真)非非0(真真)0(假假)0(假假)0(假假)1(真真)0(假假)a|b|c執(zhí)行過程執(zhí)行過程例例4-12 求一元二次方程的根求一元二次方程的根x1=p+q x1=p+q , x2=p-qx2=p-q,x1= -b+ b2- 4ac2ax2= -b- b2- 4ac2a令2ap =-b b2- 4ac2aq =【分析】【分析】在【例在【例4-94-9】中已求解過一元二次方程的根,但未判斷】中已求解過一元二次方程的根,但未判斷b b* *b-4b-4* *a a* *c c的值,這里的值,這里就是要完整解決判別式就是要完整解決判別式b*b-4*a*c的三種情況。的三種情況。 當(dāng)當(dāng)0時(shí),有兩個(gè)相等的實(shí)根。時(shí),有兩個(gè)相等的實(shí)根。 當(dāng)當(dāng)0時(shí),有兩個(gè)不相等的實(shí)根。時(shí),有兩個(gè)不相等的實(shí)根。 當(dāng)當(dāng)0時(shí),有兩個(gè)虛根。時(shí),有兩個(gè)虛根。例例4-12程序程序/ /* *li4_12.cli4_12.c* */ /#include #include #include #include void main()void main() float

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論