《C語言程序設(shè)計 》課件-第2章_第1頁
《C語言程序設(shè)計 》課件-第2章_第2頁
《C語言程序設(shè)計 》課件-第2章_第3頁
《C語言程序設(shè)計 》課件-第2章_第4頁
《C語言程序設(shè)計 》課件-第2章_第5頁
已閱讀5頁,還剩82頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

項目二分支程序設(shè)計

——傻瓜式四則計算器任務(wù)一細(xì)化功能任務(wù)二了解if語句任務(wù)三了解switchcase語句任務(wù)四實例體驗任務(wù)五算法歸納任務(wù)六畫流程圖任務(wù)七項目實現(xiàn)任務(wù)八項目擴展思考與練習(xí)

任務(wù)一細(xì)化功能

(1)能夠進行加減乘除運算。這是本項目最基本最核心的功能,也是大家在使用計算器時最常用的功能。該功能與真實的計算器有一定的區(qū)別,目的是減小項目的難度。真實的計算器應(yīng)該還可以進行平方、開方、求絕對值、求正弦余弦等多種多樣的運算。

(2)運算數(shù)和結(jié)果都是整數(shù)。

這是本項目的要求。

真實的運算器還可以進行浮點數(shù)的運算,這個功能將在項目擴展里進行討論。

(3)四種運算符的優(yōu)先級相同,按從左到右的順序計算。

這是本項目的假設(shè),與真實的計算器有一定的區(qū)別,目的是減小項目的難度。

真實的計算器應(yīng)該是:先做乘除,后做加減;有小括號時要先做小括號里的運算。要實現(xiàn)這樣的功能需要用到數(shù)據(jù)結(jié)構(gòu)中的堆棧,因此本項目暫不實現(xiàn)。

(4)輸入一個表達(dá)式,運算到出現(xiàn)“=”即輸出結(jié)果,程序結(jié)束。

這是本項目的要求,與真實的計算器有一定的區(qū)別。

真實的計算器應(yīng)該是:可以重新開始新的運算,一直到用戶想要停止,關(guān)掉運算器為止。要想實現(xiàn)這樣的功能,需要用到項目三講到的循環(huán),因此本項目暫不實現(xiàn)。

(5)最少進行2個數(shù),最多進行4個數(shù)的運算。

這是本項目的要求,目的是減小項目的難度,與真實的計算器有一定的區(qū)別。真實的計算器可以隨意進行較多數(shù)據(jù)的運算。

任務(wù)二了解if語句

常用的分支語句有兩類:if語句和switchcase語句,前者用于兩路分支,即有兩種可能的執(zhí)行情況;后者用于多路分支,即有多種可能的執(zhí)行情況。if語句是用來判定所給定的條件是否滿足,并根據(jù)判定的結(jié)果(真或假)來決定執(zhí)行所給出的兩種操作之一。

C語言提供了三種形式的if語句。

1)

if(表達(dá)式)語句

2)?if(表達(dá)式)語句1else語句2

例如,

if(x>y)

printf("%d",x);

else

printf("%d",y);

3)?elseif語句

elseif語句的一般格式為

if(表達(dá)式1)

語句1

elseif(表達(dá)式2)

語句2

elseif(表達(dá)式3)

語句3

elseif(表達(dá)式m)

語句m

else

語句n

其流程圖如圖2.1所示。

圖2.1

if…else語句結(jié)構(gòu)流程圖

說明:

(1)三種形式的if語句中,在if后面都有“表達(dá)式”,一般為邏輯表達(dá)式或關(guān)系表達(dá)式,如,

if(a==b&&x==y)

printf("a=b,x=y");

在執(zhí)行if語句時先對表達(dá)式求解,若表達(dá)式的值為0,則按“假”處理;若表達(dá)式的值為非0,則按“真”處理,之后執(zhí)行指定的語句。例如有以下if語句:

if(3)

printf("O.K.");

語句為真,應(yīng)執(zhí)行輸出“O.K.”的操作。

(2)第2、第3種形式的if語句中,在每個else前面有一分號,整個語句結(jié)束處有一分號。例如,

if(x>0)

printf("%f",x);

else

printf("%f",-x);

這是由于分號是C語句中不可缺少的部分,這個分號是if語句中的內(nèi)嵌語句所要求的。如果無此分號,則出現(xiàn)語法錯誤。但應(yīng)注意,不要誤認(rèn)為上面是兩個語句(if?語句和else?語句),它們都屬于同一個if語句。else子句不能作為語句單獨使用,它必須是if語句的一部分,與if配對使用。

任務(wù)三了解switchcase語句

switch結(jié)構(gòu)與if…else結(jié)構(gòu)是多分支選擇的兩種形式。它們的應(yīng)用環(huán)境不同:if…else用于對多條件并列測試,從中取一的情形;switch結(jié)構(gòu)為單條件測試,用于從多種結(jié)果中取一種的情形。

1.switch語句的一般格式

switch語句的一般格式為

switch(表達(dá)式)

{

case常量表達(dá)式1:語句組1;[break;]

case常量表達(dá)式2:語句組2;[break;]

case常量表達(dá)式n:語句組n;[break;]

[default:語句組;[break;]]/*default子句是可選的*/

}

例如,下面的程序段用于判斷學(xué)生某門課程的成績等級。等級規(guī)定為:90~100分為“優(yōu)秀”,80~89分為“良好”,70~79分為“中等”,60~69分為“及格”,60分以下為“不及格”。

2.switch語句的執(zhí)行過程

(1)當(dāng)switch后面“表達(dá)式”的值與某個case后面的“常量表達(dá)式”的值相同時,就執(zhí)行該case后面的語句(組);當(dāng)執(zhí)行到break語句時,跳出switch語句,轉(zhuǎn)向執(zhí)行switch語句下面的語句(即右花括號下面的第一條語句)。

(2)如果沒有任何一個case后面的“常量表達(dá)式”的值與“表達(dá)式”的值匹配,則執(zhí)行default后面的語句(組)。然后,再執(zhí)行switch語句下面的語句。

3.switchcase語句相關(guān)說明

(1)

switch后面的“表達(dá)式”可以是int、char和枚舉型中的一種。

(2)每個case后面“常量表達(dá)式”的值必須各不相同,否則會出現(xiàn)相互矛盾的現(xiàn)象(即對表達(dá)式的同一值,有兩種或兩種以上的執(zhí)行方案)。

(3)case后面的常量表達(dá)式僅起語句標(biāo)號作用,并不進行條件判斷。系統(tǒng)一旦找到入口標(biāo)號,就從此標(biāo)號開始執(zhí)行,不再進行標(biāo)號判斷,所以必須加上break語句,以便結(jié)束switch語句。

(4)各case及default子句的先后次序不影響程序執(zhí)行結(jié)果。

(5)多個case子句可共用同一語句(組)。

(6)用switch語句實現(xiàn)的多分支結(jié)構(gòu)程序,完全可以用if語句和if語句的嵌套來實現(xiàn)。

4.需要注意的問題

(1)

switch結(jié)構(gòu)的執(zhí)行部分是一個由一些case子結(jié)構(gòu)與一個可缺省的default子結(jié)構(gòu)組成的復(fù)合語句。(要特別注意寫一對花括號。)

(2)

switch后面的條件表達(dá)式一般是一個整數(shù)表達(dá)式(或字符表達(dá)式),與之對應(yīng),case后面應(yīng)是一個整數(shù)或字符,也可以是不含變量與函數(shù)的常數(shù)表達(dá)式。

(3)一個switch結(jié)構(gòu)中不可以出現(xiàn)兩個case具有相同的常量表達(dá)式值。例如,

case3+2:

case8-3:

是不允許的。

(4)

switch結(jié)構(gòu)允許嵌套。

任務(wù)四實例體驗

在設(shè)計完整的項目之前,我們先演示一個具體的例子,從這個例子大家可以體會本項目的處理過程。這種思想可以應(yīng)用到更多的問題和應(yīng)用上,總結(jié)起來,就是“數(shù)據(jù)驅(qū)動,手腦并用,步步模擬,豁然貫通”。比如1*2+3-4=,用我們的運算器進行運算,其步驟如下。

任務(wù)五算法歸納

根據(jù)任務(wù)一細(xì)化的功能和任務(wù)四中的實例,我們可以設(shè)計以下幾步實現(xiàn)功能,這些步驟即可稱為算法。

任務(wù)六畫流程圖

用流程圖的方式表示上述算法,如圖2.2所示。圖2.2流程圖

任務(wù)七項目實現(xiàn)

程序?qū)崿F(xiàn)1:

程序分析如下:

(1)結(jié)構(gòu)分析:

定義變量:2~3行。

輸入數(shù)據(jù):4~6行。

核心處理:7~15行。

輸出結(jié)果:16~17行。

(2)語句類型分析:

定義變量:2~3行。

賦值語句:x行。

分支語句:y行,這是本章出現(xiàn)的新語句。

循環(huán)語句:本項目沒有用到循環(huán)。

(3)運行結(jié)果:

運行結(jié)果如圖2.3所示。

圖2.3運行結(jié)果

程序?qū)崿F(xiàn)2:

任務(wù)八項目擴展

商店賣西瓜,20斤以上的每斤0.85元;重于15斤輕于等于20斤的,每斤0.90元;重于10斤輕于等于15斤的,每斤0.95元;重于5斤輕于等于10斤的,每斤1.00元;輕于或等于5斤的,每斤1.05元。輸入西瓜的重量,輸出應(yīng)付的貨款。

1.嵌套if結(jié)構(gòu)

要處理這種多重條件判斷的情況,除了用前面介紹的switch結(jié)構(gòu)和if…else結(jié)構(gòu)外,還可以用嵌套if結(jié)構(gòu)。嵌套if結(jié)構(gòu)就是將整個if語句塊插入到另一個if語句塊中,其一般形式可表示如下:

在嵌套內(nèi)的if語句可能又是if…else型的,這將會出現(xiàn)多個if和多個else重疊的情況,這時要特別注意if和else的配對問題。例如,

C語言規(guī)定,else總是與它前面最近的if配對,因此對上述例子的else應(yīng)與if(y>1)配對。為了增加程序的可讀性,提倡使用大括號括起來以避免看起來有二義性。

2.實例體驗

先演示一個具體的例子,通過這個例子來體會這個項目的處理過程。例如,計算8斤西瓜應(yīng)付的貨款。

3.算法歸納

根據(jù)實例體驗,我們可以設(shè)計以下幾步實現(xiàn)功能,即算法如下。

4.流程圖

該任務(wù)的流程圖如圖2.4所示。

圖2.4流程圖

5.項目實現(xiàn)

思?考?與?練?習(xí)

一、選擇題

1.邏輯運算符兩側(cè)運算對象的數(shù)據(jù)類型是()。

A.只能是0或1

B.只能是0或非0整數(shù)

C.只能是整型或字符型數(shù)據(jù)

D.可以是任何類型的數(shù)據(jù)

2.能正確表示“當(dāng)x的取值在[5,20]和[100,120]范圍內(nèi)為真,否則為假”的表達(dá)式是()。

A.(x>=5)&&(x<=20)&&(x>=100)&&(x<=120)

B.(x>=5)&&(x<=20)||(x>=100)&&(x<=120)

C.(x>=5)||(x<=20)&&(x>=100)||(x<=120)

D.(x>=5)||(x<=20)&&(x>=100)||(x<=120)

3.判斷字符型變量ch是否為小寫字母的正確表達(dá)式是()。

A.'a'<=ch<='z' B.(ch>='a')&(ch<='z')

C.(ch>='a')&&(ch<='z')D.('a'<=ch)AND('z'>=ch)

4.已知x=43,ch='A',y=0;則表達(dá)式(x>=y&&ch<'B'

&&!y)的值是()。

A.0

B.語法錯

C.1

D.假

5.以下哪個表達(dá)式為真時,不能表示整數(shù)i為奇數(shù)?()

A.i%2==0

B.!(i%2==0)

C.!(i%2)

D.i%2

6.若有:inta=1,b=2,c=3,d=4,m=2,n=2A;執(zhí)行(m=a>b)&&(n=c>d)后n的值是多少?()

A.1 B.2 C.3 D.4

7.以下不正確的if語句形式是()。

A.if(x>y&&x!=y);

B.if(x==y)x+=y;

C.if(x!=y)scanf("%d",&x)elsescanf("%d",&y);

D.if(x<y){x++;y++;}

8.已知intx=10,y=20,z=30;以下語句執(zhí)行后x,y,z的值是多少?()

if(x>y)

z=x;x=y;y=z;

A.x=10,y=20,z=30 B.x=20,y=30,z=30

C.x=20,y=30,z=10 D.x=20,y=30,z=20

9.以下if語句語法正確的是()。

10.請閱讀以下程序,并作出判斷。()

main()

{

inta=5,b=0,c=0;

if(a=b+c)printf("***\n");

elseprintf("$$$\n");

}

A.有語法錯誤,不能通過編譯

B.可以通過編譯但不能通過連接

C.輸出***

D.輸出$$$

11.執(zhí)行以下代碼,其輸出結(jié)果是什么?()

12.執(zhí)行下面代碼,其輸出結(jié)果是什么?()

二、填空題

1.當(dāng)a=3,b=2,c=1時,表達(dá)式f=a>b>c的值是

。

2.在C語言中,用

表示邏輯真。

3.C語言提供的3種邏輯符號是

4.設(shè)x、y、z都是int型變量,請寫出描述“x、y和z中有兩個為負(fù)數(shù)”的表達(dá)式

。

5.條件“2<x<3或x<-10”的C語言表達(dá)式是

6.以下程序的運行結(jié)果是

。

7.請閱讀以下程序,若運行時輸入:1605<回車>時,程序的運行結(jié)果是________。

8.以下程序?qū)崿F(xiàn)輸出x、y、z三個數(shù)中的最大者,請在橫線處填入正確內(nèi)容。

9.輸入一個字符,如果它是一個大寫字母,則把它變成小寫字母;如果它是一個小寫字母,則把它變成大寫字母;其他字母不變。請?zhí)羁铡?/p>

10.當(dāng)a=1,b=3,c=5,c=4時,執(zhí)行完下面一段程序后x的值是______________。請嘗試調(diào)整下面代碼的格式,使其容易理解。

11.當(dāng)x=10,y=20;執(zhí)行完下面一行程序后max的值是______________。

max=(x>y)?x:y;

12.為了避免在嵌套的條件語句if…else中產(chǎn)生二義性,C語言規(guī)定:else子句總是與

配對。

三、編程題

1.從鍵盤輸入一個整數(shù),求其絕對值并輸出。

2.編程實現(xiàn)求分段函數(shù)的值。

要求如下:

(1)用if語句實現(xiàn)分支。自變量x與函數(shù)值均采用雙精度類型。

(2)自變量x值從鍵盤輸入,且輸入前要有提示信息。

(3)分別以-3.0,-1.0,0,0.5,5.5,-8.5,15.5作為自變量的值,運行該程序,記錄并分析運行結(jié)果。

3.輸入3個整數(shù)x、y、z,請把這3個數(shù)由小到大輸出。

4.判斷閏年。

在公歷紀(jì)年中,有閏日的年份叫閏年,一般年份為365天,閏年為366天。由于地球繞太陽運行周期為365天5小時48分46秒(合365.24219天)即一回歸年,公歷把一年定為365天。所余下的時間約為四年累計一天,加在2月里,所以平常年份每年365天,2月為28天;閏年為366天,2月為29天。但這樣一算,每4年又多算了44分56秒,每400年就要多算3天2小時53分20秒,所以就規(guī)定了公歷年份是整百數(shù)的必須是400的倍數(shù)才是閏年。因此,每400年中有97個閏年,閏年在2月末增加一天,閏年366天。

閏年的計算方法:公元紀(jì)年的年數(shù)可以被4整除,即為閏年;被100整除而不能被400整除為平年;被100整除也可被400整除的為閏年。如2000年是閏年,而1900年不是。

要求:從鍵盤輸入一個年份,編程判斷其是否為閏年,并輸出結(jié)果。

步驟:

①從鍵盤輸入一個正整數(shù),作為年份,且輸入前要有提示信息;

②判斷閏年,按照上面所述計算方法進行判斷;

③輸出結(jié)果。

例如,輸入2000,輸出結(jié)果“2000年是閏年”。

5.從鍵盤輸入一個整數(shù),判斷該整數(shù)是否為素數(shù)。是素數(shù)則輸出“yes”,否則輸出“no”。

6.從鍵盤輸入一個年份值和一個月份值,判斷該月的天數(shù)。(說明:一年有12個月,大月的天數(shù)是31,小月的天數(shù)是30。2月的天數(shù)比較特殊,遇到閏年是29天,否則為28天。)

7.根據(jù)輸入的成績分?jǐn)?shù)score,輸出相應(yīng)的等級。其對應(yīng)關(guān)系如下:

score≥90分的同學(xué)用A表示;

score<90,且score≥80分的同學(xué)用B表示;

score<80,且score≥70分的同學(xué)用C表示;

score<70,且score≥60分的同學(xué)用D表示

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論