高級(jí)語(yǔ)言程序設(shè)計(jì)_第1頁(yè)
高級(jí)語(yǔ)言程序設(shè)計(jì)_第2頁(yè)
高級(jí)語(yǔ)言程序設(shè)計(jì)_第3頁(yè)
高級(jí)語(yǔ)言程序設(shè)計(jì)_第4頁(yè)
高級(jí)語(yǔ)言程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩60頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

高級(jí)語(yǔ)言程序設(shè)計(jì)第三章算法基礎(chǔ)與程序控制結(jié)構(gòu)

高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第1頁(yè)。2本章主要內(nèi)容程序設(shè)計(jì)方法簡(jiǎn)述算法與流程圖

算法的兩種表示法兩種流程圖三種基本結(jié)構(gòu)選擇結(jié)構(gòu)程序設(shè)計(jì)

if…else語(yǔ)句switch語(yǔ)句循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

四種循環(huán)語(yǔ)句常用算法

枚舉法(窮舉法)歸納法(遞推法)

課外閱讀材料程式設(shè)計(jì)與流程圖

(請(qǐng)上網(wǎng)下載)高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第2頁(yè)。3

一、程序設(shè)計(jì)方法簡(jiǎn)述

1、計(jì)算機(jī)處理問(wèn)題的過(guò)程【例一】讓某學(xué)生解方程

ax2+bx+c=0

求解過(guò)程:①分析問(wèn)題

這是一個(gè)一元二次方程(代數(shù)問(wèn)題,須中學(xué)代數(shù)知識(shí))②確定處理方案用求根公式③確定解題步驟

確定a、b、c的值求出b2-4ac的值如果b2-4ac>0(雙實(shí)根)

X1=……X2=……

如果b2-4ac=0(單實(shí)根)

X1=X2=……

如果b2-4ac<0(雙復(fù)根)

X1=……X2=……④根據(jù)上述步驟計(jì)算⑤寫出答案,整理、分析結(jié)果高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第3頁(yè)。4

一、程序設(shè)計(jì)方法簡(jiǎn)述

1、計(jì)算機(jī)處理問(wèn)題的過(guò)程2、編程要訣——自頂向下,逐步求精

“先大綱,后文章”

如同寫文章:分幾部分——每部分幾個(gè)問(wèn)題——每個(gè)問(wèn)題幾點(diǎn)……

優(yōu)點(diǎn):不易顧此失彼;易于檢查;減少后期修改工作量對(duì)于面向過(guò)程的程序設(shè)計(jì)語(yǔ)言:程序=數(shù)據(jù)結(jié)構(gòu)+算法(做什么,如何做)對(duì)比:文章=材料+構(gòu)思程序測(cè)試與修改高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第4頁(yè)。5

一、程序設(shè)計(jì)方法簡(jiǎn)述

3、程序測(cè)試目的發(fā)現(xiàn)程序中的錯(cuò)誤(Bug)程序錯(cuò)誤

◆語(yǔ)法錯(cuò)誤(編譯系統(tǒng)檢查)

◆邏輯錯(cuò)誤(編程人員檢查)方法與技術(shù)

測(cè)試是以程序通過(guò)了編譯,沒有語(yǔ)法和連接錯(cuò)誤為前提。在此基礎(chǔ)上運(yùn)行一組數(shù)據(jù),來(lái)檢測(cè)程序的邏輯錯(cuò)誤。這一組測(cè)試數(shù)據(jù)應(yīng)是以“任何程序都是有錯(cuò)誤的”為前提精心設(shè)計(jì)出來(lái)的。它不僅應(yīng)含有被測(cè)程序各種情況下的代表性輸入數(shù)據(jù),還應(yīng)包括程序執(zhí)行這些數(shù)據(jù)后預(yù)期的結(jié)果。其他

著名計(jì)算機(jī)軟件科學(xué)家E.W.Dijkstra曾斷言:“程序測(cè)試只能證明錯(cuò)誤的存在,而不能證明錯(cuò)誤的不存在”??梢宰C明,除了很小的程序外,無(wú)論使用任何方法,要想做到徹底的測(cè)試,即發(fā)現(xiàn)程序中的所有錯(cuò)誤,是不現(xiàn)實(shí)的。常見所謂“β版”商業(yè)軟件,就是軟件正式發(fā)行前的測(cè)試版本。高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第5頁(yè)。6

二、算法與流程圖

1、算法(algorithm)

P14

算法:解題思路(解題步驟等)算法有表示方式:偽碼(pseudocode)用人類語(yǔ)言的形式(通常是英語(yǔ))表示算法。偽碼不在計(jì)算機(jī)上執(zhí)行,僅供程序員縮寫程序之前構(gòu)思時(shí)用(*注意偽碼程序只包含執(zhí)行語(yǔ)句,沒有聲明語(yǔ)句,后者僅僅是給編譯器提供的信息)流程圖(flowchart)用圖示方式表示算法編程依據(jù)(便于檢查)編程時(shí)用使用流程圖的優(yōu)點(diǎn):不易出錯(cuò)/便于編程/便于別人閱讀和檢查程序。通常編程的技術(shù)路線是:用偽碼和自頂向下、逐步求精的方法來(lái)制定算法,然后再編寫相應(yīng)的C語(yǔ)言程序。復(fù)雜程序處理部分宜用流程圖表示程序處理的過(guò)程。高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第6頁(yè)。7二、算法與流程圖

1、算法(algorithm)

示例:根據(jù)學(xué)生成績(jī)輸出評(píng)定結(jié)果。偽碼語(yǔ)句示例之一

ifstudent’sgradesgreaterthanorequalto60display”Passed”elsedisplay”Failed”偽碼語(yǔ)句示例之二

如果學(xué)生成績(jī)大于或等于60

顯示”及格”否則顯示”不及格”C語(yǔ)言源程序段示例if(grade>=60)printf(“Passed!”);elseprintf(“Failed”);高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第7頁(yè)。8二、算法與流程圖

2、傳統(tǒng)流程圖P19特點(diǎn):直觀形象;使用流線。缺點(diǎn):占面積大,使用流線任意轉(zhuǎn)移,易出現(xiàn)“亂麻”現(xiàn)象,造成編程與閱讀程序困難。高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第8頁(yè)。9二、算法與流程圖

3、N-S結(jié)構(gòu)化流程圖P26-27

77年美學(xué)者I.Nassi和B.Scheiderman提出。特點(diǎn)①取消流線②不允許流程任意轉(zhuǎn)移,只能從上而下順序執(zhí)行③規(guī)定三種基本結(jié)構(gòu)的流程圖單元,由這些基本結(jié)構(gòu)象搭積木似的組成各種算法(結(jié)構(gòu)化設(shè)計(jì))。優(yōu)點(diǎn)算法清晰,流程不會(huì)無(wú)規(guī)律亂轉(zhuǎn)移。高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第9頁(yè)。10二、算法與流程圖

4、三種基本結(jié)構(gòu)

P23-26通常情況下,程序中的語(yǔ)句是以所編寫的順序一句接一句地執(zhí)行,這種執(zhí)行方法稱為“順序執(zhí)行”。許多C語(yǔ)句能夠讓程序員指定不按編寫順序執(zhí)行下一條執(zhí)行語(yǔ)句,這種執(zhí)行方法稱為“控制轉(zhuǎn)移”。Bohm和Jacopini的研究證實(shí),所有的程序都能夠只用三種控制結(jié)構(gòu)編寫,即

◆順序結(jié)構(gòu)

◆選擇結(jié)構(gòu)(selectionstructure)

◆循環(huán)結(jié)構(gòu)(repetitionstructure)順序結(jié)構(gòu)是C語(yǔ)言的基本結(jié)構(gòu),除非指示轉(zhuǎn)移,否則計(jì)算機(jī)自動(dòng)以語(yǔ)句編寫的順序一句一句地執(zhí)行C語(yǔ)句。任何C語(yǔ)言程序都是由七種控制結(jié)構(gòu)(順序結(jié)構(gòu)、三種選擇結(jié)構(gòu)和三種循環(huán)結(jié)構(gòu))構(gòu)成的。高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第10頁(yè)。11二、算法與流程圖

4、三種基本結(jié)構(gòu)

P23-26順序結(jié)構(gòu)

A塊、B塊順序執(zhí)行(每塊代表一個(gè)或一組操作)高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第11頁(yè)。12二、算法與流程圖

4、三種基本結(jié)構(gòu)

P23-26選擇結(jié)構(gòu)

條件p成立時(shí)執(zhí)行a塊(否則執(zhí)行b塊)if選擇結(jié)構(gòu)條件為真時(shí)執(zhí)行某個(gè)指定的操作,條件為假時(shí)跳過(guò)該操作(單路選擇)if…else選擇結(jié)構(gòu)條件為真時(shí)執(zhí)行某個(gè)指定的操作,為假時(shí)執(zhí)行另一個(gè)指定的操作(雙路選擇)switch選擇結(jié)構(gòu)根據(jù)表達(dá)式的值執(zhí)行眾多不同操作中的某個(gè)指定的操作(多路選擇)高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第12頁(yè)。13二、算法與流程圖

4、三種基本結(jié)構(gòu)

P23-26循環(huán)結(jié)構(gòu)

分當(dāng)型和直到型兩類。

當(dāng)型先判斷,只要條件為真就反復(fù)執(zhí)行A塊,為假則結(jié)束循環(huán)。

直到型先執(zhí)行A塊,再判斷條件是否為真,為真則繼續(xù)執(zhí)行循環(huán)體,為假則結(jié)束循環(huán)。C語(yǔ)言提供了三種循環(huán)結(jié)構(gòu),即while循環(huán)結(jié)構(gòu),do…while循環(huán)結(jié)構(gòu)和for循環(huán)結(jié)構(gòu)。高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第13頁(yè)。14

三、選擇結(jié)構(gòu)程序設(shè)計(jì)

1、if語(yǔ)句

P91

三種形式:if(表達(dá)式)語(yǔ)句;(圖5.5a)if(表達(dá)式)語(yǔ)句1;

else

語(yǔ)句2;(圖5.5b)if(表達(dá)式1)語(yǔ)句1;(圖5.6)

elseif(表達(dá)式2)語(yǔ)句2;

……

elseif(表達(dá)式n)語(yǔ)句n;

else

語(yǔ)句n+1;◆e1?e2:e3

是if…else

語(yǔ)句在特定情況下的變體。高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第14頁(yè)。15三、選擇結(jié)構(gòu)程序設(shè)計(jì)

1、if語(yǔ)句

示例【例一】以下程序的作用是什么?

main(){charc;

printf(“Input:”);scanf(“%c”,&c);

if(c>=’a’&&c<=’z’)c=c-32;elsec=c;

printf(“%c”,c);}/*將小寫字母轉(zhuǎn)換為大寫字母*/高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第15頁(yè)。16三、選擇結(jié)構(gòu)程序設(shè)計(jì)

1、if語(yǔ)句

示例【例二】以下程序的執(zhí)行結(jié)果是什么?

main(){intx=2,y=-1,z=2;

if(x<y)if(y<0)z=0;elsez+=1;printf(“%d\n”,z);}/*結(jié)果是2*/哦,原來(lái)是因?yàn)閑lse總是與靠近它的if配套…常見錯(cuò)誤:if(x>0);if(x=2)if(1<=x<=10)y=3x+2;printf(“y>0”);y=x-1;高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第16頁(yè)。17三、選擇結(jié)構(gòu)程序設(shè)計(jì)

2、switch語(yǔ)句

P98switch語(yǔ)句的一般形式:switch(e){

casec1:語(yǔ)句組1;

case

c2:語(yǔ)句組2;

……case

cn:語(yǔ)句組n;

default:語(yǔ)句組n+1;/*可缺省*/}/*e–表達(dá)式(整型、字符型或枚舉型)*/c1~cn

常量(整數(shù)、字符、常量表達(dá)式如3+4,不含變量或函數(shù))default–不是c1~cn的情況(位置不一定在最后)。高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第17頁(yè)。18三、選擇結(jié)構(gòu)程序設(shè)計(jì)

2、switch語(yǔ)句

示例main(){chars;scanf(“%c”,&s);switch(s){case‘A’:printf(“85~100\n”);case‘B’:printf(“70~84\n”);case‘C’:printf(“60~69\n”);case‘D’:printf(“<60\n”);default:printf(“錯(cuò)誤輸入\n”);}}輸入“c”,求輸出結(jié)果。

結(jié)果:

60~69<60

錯(cuò)誤輸入

?!高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第18頁(yè)。19三、選擇結(jié)構(gòu)程序設(shè)計(jì)

2、switch語(yǔ)句

示例main(){chars;scanf(“%c”,&s);switch(s){case‘A’:printf(“85~100\n”);case‘B’:printf(“70~84\n”);case‘C’:printf(“60~69\n”);case‘D’:printf(“<60\n”);default:printf(“錯(cuò)誤輸入\n”);}}我的成績(jī)應(yīng)該是60~69!什么!“<60”?“錯(cuò)誤輸入”?怎么會(huì)這樣?!不好意思,我屬于C級(jí)!

運(yùn)行結(jié)果:

60~69<60

錯(cuò)誤輸入

高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第19頁(yè)。20三、選擇結(jié)構(gòu)程序設(shè)計(jì)

2、switch語(yǔ)句

示例解決方法——break語(yǔ)句:main(){chars;scanf(“%c”,&s);switch(s){case‘A’:printf(“85~100\n”);break;case‘B’:printf(“70~84\n”);break;case‘C’:printf(“60~69\n”);break;case‘D’:printf(“<60\n”);break;default:printf(“錯(cuò)誤輸入\n”);}}這才差不多!break!

運(yùn)行結(jié)果:

60~69高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第20頁(yè)。21三、選擇結(jié)構(gòu)程序設(shè)計(jì)

2、switch語(yǔ)句

示例解決方法——break語(yǔ)句:main(){chars;scanf(“%c”,&s);switch(s){case‘A’:printf(“85~100\n”);break;case‘B’:printf(“70~84\n”);break;case‘C’:printf(“60~69\n”);break;case‘D’:printf(“<60\n”);break;default:printf(“錯(cuò)誤輸入\n”);}}討論switch(s)語(yǔ)句中的s實(shí)際上并非真正的條件選擇,而只是一種跳轉(zhuǎn)指示(與if語(yǔ)句不同),表示下面應(yīng)該跳轉(zhuǎn)到什么位置繼續(xù)執(zhí)行。而各case實(shí)際上只是一個(gè)跳轉(zhuǎn)處的標(biāo)記。當(dāng)程序跳轉(zhuǎn)到某個(gè)case處時(shí),并非只執(zhí)行此case行的程序組,而是從此處開始一直向下執(zhí)行各條語(yǔ)句,直到整個(gè)switch開關(guān)體結(jié)束(“}”)。如果要使每個(gè)case處相當(dāng)于一種if(s)else的效果,必須在其語(yǔ)句組最后加上break語(yǔ)句。高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第21頁(yè)。22三、選擇結(jié)構(gòu)程序設(shè)計(jì)

2、switch語(yǔ)句

示例main(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf(“a=%d,b=%d\n”,a,b);}說(shuō)明1、每個(gè)case常量表達(dá)式的值必須互不相同,否則會(huì)出現(xiàn)互相矛盾的結(jié)果。2、允許多個(gè)case共用一個(gè)執(zhí)行語(yǔ)句。

求程序運(yùn)行結(jié)果。結(jié)果:a=2,b=1。如果x=2?

結(jié)果:a=1,b=1

如果x=3?結(jié)果:a=1,b=1

高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第22頁(yè)。23

三、循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

循環(huán)是在循環(huán)條件為真時(shí)計(jì)算機(jī)反復(fù)執(zhí)行的一組指令(循環(huán)體)。循環(huán)控制通常有兩種方式:◆計(jì)數(shù)控制事先能夠準(zhǔn)確知道循環(huán)次數(shù)時(shí)用之用專門的循環(huán)變量來(lái)計(jì)算循環(huán)的次數(shù),循環(huán)變量的值在每次執(zhí)行完循環(huán)體各語(yǔ)句后遞增,達(dá)到預(yù)定循環(huán)次數(shù)時(shí)則終止循環(huán),繼續(xù)執(zhí)行循環(huán)結(jié)構(gòu)后的語(yǔ)句?!魳?biāo)記控制事先不知道準(zhǔn)確的循環(huán)次數(shù)時(shí)用之由專門的標(biāo)記變量控制循環(huán)是否繼續(xù)進(jìn)行。當(dāng)標(biāo)記變量的值達(dá)到指定的標(biāo)記值時(shí),循環(huán)終止,繼續(xù)執(zhí)行循環(huán)結(jié)構(gòu)后的語(yǔ)句。高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第23頁(yè)。24

四、循環(huán)結(jié)構(gòu)程序設(shè)計(jì)在C語(yǔ)言中可用以下語(yǔ)句構(gòu)成循環(huán):

if…gotowhiledo…whilefor

其中if…goto是通過(guò)編程技巧(if語(yǔ)句和goto語(yǔ)句組合)構(gòu)成循環(huán)功能。而且goto語(yǔ)句將影響程序流程的模塊化,使程序可讀性變差,所以結(jié)構(gòu)化程序設(shè)計(jì)主張限制goto語(yǔ)句的使用。其他三種語(yǔ)句是C語(yǔ)言提供的循環(huán)結(jié)構(gòu)專用語(yǔ)句。高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第24頁(yè)。25

四、循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

循環(huán)結(jié)構(gòu)兩大要素:循環(huán)條件

p

結(jié)束循環(huán)的條件表達(dá)式循環(huán)體A

循環(huán)執(zhí)行的語(yǔ)句或語(yǔ)句組設(shè)置循環(huán)條件要特別注意確定:循環(huán)變量的初值循環(huán)變量的終值循環(huán)變量的變化規(guī)律名詞解釋無(wú)限循環(huán)死循環(huán)名詞解釋空循環(huán)高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第25頁(yè)。26四、循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

1、if…goto語(yǔ)句循環(huán)結(jié)構(gòu)

P106【例一】main(){intn=0,sum=0;loop:sum+=n;++n;if(sum<=10000)

gotoloop;printf(“n=%d\n”,n);}【例二】main(){intn=0,sum=0;loop:if(sum>=10000)

gotoend;sum+=n;++n;

gotoloop;end:printf(“n=%d\n”,n);}直到型當(dāng)型高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第26頁(yè)。27四、循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

2、while語(yǔ)句循環(huán)結(jié)構(gòu)

P107【例三】main(){intn=0,sum=0;while

(sum<=10000)

{

sum+=n;++n;}printf(“n=%d\n”,n);}當(dāng)型一般形式

while(條件表達(dá)式)

循環(huán)體;用于構(gòu)成當(dāng)型循環(huán):先判斷后執(zhí)行/條件為真繼續(xù)循環(huán),直到條件為假時(shí)結(jié)束循環(huán)?!咀⒁狻織l件表達(dá)式或循環(huán)體內(nèi)應(yīng)有改變條件使循環(huán)結(jié)束的語(yǔ)句,否則可能陷入“死循環(huán)”。高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第27頁(yè)。28四、循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

3、do…while語(yǔ)句循環(huán)結(jié)構(gòu)

P108【例四】main(){intn=0,sum=0;do{

sum+=n;++n;}while

(sum<=10000);printf(“n=%d\n”,n);}一般形式

do{

循環(huán)語(yǔ)句(組)

}while(條件表達(dá)式);

用于構(gòu)成直到型循環(huán):先執(zhí)行后判斷/條件為真繼續(xù)循環(huán),直到條件為假時(shí)結(jié)束循環(huán)。【注意】條件表達(dá)式或循環(huán)體內(nèi)同樣應(yīng)有改變條件使循環(huán)結(jié)束的語(yǔ)句,否則可能陷入“死循環(huán)”。直到型直到sum超過(guò)10000為止高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第28頁(yè)。29四、循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

3、do…while語(yǔ)句循環(huán)結(jié)構(gòu)

示例

【例五】從鍵盤輸入一個(gè)整數(shù)12456,分析以下程序運(yùn)行結(jié)果。main(){intnum,c;

printf(“請(qǐng)輸入一個(gè)整數(shù):“);

scanf(“%d”,&num);

do{c=num%10;printf(“%d”,c);}while((num/=10)>0);

printf(“\n”);}

/*取得num的個(gè)位數(shù)*/

/*輸出num的個(gè)位數(shù)*/

/*直到num/10為0*/

結(jié)果:

65421將各位數(shù)字反序顯示出來(lái)高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第29頁(yè)。30四、循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

4、for語(yǔ)句循環(huán)結(jié)構(gòu)

P110一般形式

for(表達(dá)式1;條件表達(dá)式;表達(dá)式3)

循環(huán)語(yǔ)句(組);

用于構(gòu)成計(jì)數(shù)型當(dāng)型循環(huán):先判斷后執(zhí)行/條件為真繼續(xù)循環(huán),直到條件為假時(shí)結(jié)束循環(huán)。表達(dá)式1:整個(gè)循環(huán)中只執(zhí)行1次,常用來(lái)對(duì)循環(huán)變量設(shè)置初值條件表達(dá)式(表達(dá)式2):其值為真(非0)時(shí)繼續(xù)執(zhí)行循環(huán)語(yǔ)句(組),否則結(jié)束循環(huán)表達(dá)式3:常用于循環(huán)變量值的更新(循環(huán)體的一部分每次循環(huán)語(yǔ)句組執(zhí)行完后執(zhí)行一次)【例六】求∑i=1+2+3+4…+99+100(i=1~100)main(){inti,s=0;

for(i=1;i<=100;i++)

s=s+i;printf(“Sum=%d\n”,s);}高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第30頁(yè)。31四、循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

5、其他循環(huán)控制結(jié)構(gòu)

P114break

結(jié)束循環(huán)

在switch中退出switch結(jié)構(gòu);在循環(huán)中結(jié)束循環(huán)。

continue

結(jié)束本次循環(huán)循環(huán)“短路”(跳過(guò)循環(huán)體后面的語(yǔ)句,開始下一輪循環(huán)

)。goto

跳轉(zhuǎn)跳到循環(huán)體外指定標(biāo)號(hào)處。

【注意】goto語(yǔ)句只能從循環(huán)內(nèi)向外跳轉(zhuǎn),反之不可!main(){inta,y;a=10,y=0;

do{

a+=2;y+=a;if(y>50)break;

}while(a=14);printf("a=%d,y=%d\n",a,y);}結(jié)果:a=16,y=60

變量跟蹤ay10012 1214+216+12=2814+216+28=4414+216+44=60變量跟蹤分析法高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第31頁(yè)。32四、循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

5、其他循環(huán)控制結(jié)構(gòu)

P114break

結(jié)束循環(huán)

在switch中退出switch結(jié)構(gòu);在循環(huán)中結(jié)束循環(huán)。

continue

結(jié)束本次循環(huán)循環(huán)“短路”(跳過(guò)循環(huán)體后面的語(yǔ)句,開始下一輪循環(huán)

)。goto

跳轉(zhuǎn)跳到循環(huán)體外指定標(biāo)號(hào)處。

【注意】goto語(yǔ)句只能從循環(huán)內(nèi)向外跳轉(zhuǎn),反之不可!求以下程序段執(zhí)行后x和i的值。inti,x;for(i=1,x=1;i<=50;i++){if(x>=10)break;if(x%2==1){x+=5;

continue;}x-=3;}結(jié)果:x的值為10,i的值為6

變量跟蹤ix

11→626→333→848→555→106高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第32頁(yè)。33四、循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

5、其他循環(huán)控制結(jié)構(gòu)

P114break

結(jié)束循環(huán)

在switch中退出switch結(jié)構(gòu);在循環(huán)中結(jié)束循環(huán)。

continue

結(jié)束本次循環(huán)循環(huán)“短路”(跳過(guò)循環(huán)體后面的語(yǔ)句,開始下一輪循環(huán)

)。goto

跳轉(zhuǎn)跳到循環(huán)體外指定標(biāo)號(hào)處。

【注意】goto語(yǔ)句只能從循環(huán)內(nèi)向外跳轉(zhuǎn),反之不可!main(){inti=1;

while(i<=15)if(++i%3!=2)

continue;elseprintf("%d",i);printf("\n");}結(jié)果:2581114

變量跟蹤

i++i%3輸出i

1→2222→303→414→5255→60……高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第33頁(yè)。34四、循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

5、其他循環(huán)控制結(jié)構(gòu)

P114break

結(jié)束循環(huán)

在switch中退出switch結(jié)構(gòu);在循環(huán)中結(jié)束循環(huán)。

continue

結(jié)束本次循環(huán)循環(huán)“短路”(跳過(guò)循環(huán)體后面的語(yǔ)句,開始下一輪循環(huán)

)。goto

跳轉(zhuǎn)跳到循環(huán)體外指定標(biāo)號(hào)處。

【注意】goto語(yǔ)句只能從循環(huán)內(nèi)向外跳轉(zhuǎn),反之不可!main(){inti,k=0;for(i=1;;i++){k++;

while(k<i*i){k++;if(k%3==0)

goto

loop;

}}

loop:printf("%d,%d",i,k);}結(jié)果:2,3

高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第34頁(yè)。35編程示例※

題目:編寫一個(gè)用戶密碼校驗(yàn)程序。用戶根據(jù)提示輸入密碼,如果密碼正確,顯示“Welcome!”信息;密碼不正確,除提示密碼輸入錯(cuò)誤外,允許再輸入密碼,如果三次輸入均錯(cuò),顯示“你是非法用戶”,然后結(jié)束程序。程序分析(畫出傳統(tǒng)流程圖和N-S流程圖)密碼輸入部分分析(畫出N-S流程圖)現(xiàn)場(chǎng)程序編寫與調(diào)試程序不足處說(shuō)明(留給學(xué)生解決)高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第35頁(yè)。36密碼校驗(yàn)程序流程圖高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第36頁(yè)。37密碼校驗(yàn)程序N-S流程圖高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第37頁(yè)。38五、常用算法1、枚舉法(窮舉法)

“笨人之法”:

把所有可能的情況一一測(cè)試,篩選出符合條件的各種結(jié)果進(jìn)行輸出。

【例一】百元買百雞:用一百元錢買一百只雞。已知公雞5元/只,母雞3元/只,小雞1元/3只。分析:這是個(gè)不定方程——三元一次方程組問(wèn)題(三個(gè)變量,兩個(gè)方程)

x+y+z=100

5x+3y+z/3=100

設(shè)公雞為x只,母雞為y只,小雞為z只。高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第38頁(yè)。39百元買百雞問(wèn)題分析高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第39頁(yè)。40百元買百雞問(wèn)題分析main(){intx,y,z;for(x=0;x<=100;x++)for(y=0;y<=100;y++)for(z=0;z<=100;z++){if(x+y+z==100&&5*x+3*y+z/3.0==100)printf("cocks=%d,hens=%d,chickens=%d\n",x,y,z);}}結(jié)果:x=0,y=25,z=75x=4,y=18,z=78x=8,y=11,z=81x=12,y=4,z=84【討論

此為“最笨”之法——要進(jìn)行101×101×101=1030301次(100多萬(wàn)次)運(yùn)算。高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第40頁(yè)。41百元買百雞問(wèn)題分析main(){intx,y,z;for(x=0;x<=100;x++)for(y=0;y<=100;y++){

z=100-x-y;if(5*x+3*y+z/3.0==100)printf(“cocks=%d,hens=%d,chickens=%d\n",x,y,z);}}【討論】

令z=100-x-y只進(jìn)行101×101=10201次運(yùn)算(前者的1%)

取x<=19,y<=33只進(jìn)行20×34=680次運(yùn)算(第1種運(yùn)算的6.7%)

高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第41頁(yè)。42【例二】雨水淋濕了算術(shù)書的一道題,8個(gè)數(shù)字只能看清3個(gè),第一個(gè)數(shù)字雖然看不清,但可看出不是1。編程求其余數(shù)字是什么?

[□×(□3+□)]2=8□□9分析設(shè)分別用A、B、C、D、E五個(gè)變量表示自左到右五個(gè)未知的數(shù)字。其中A的取值范圍為2~9,其余取值范圍為0~9。條件表達(dá)式即為給定算式。高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第42頁(yè)。43main(){intA,B,C,D,E;for(A=2;A<=9;A++)for(B=0;B<=9;B++)for(C=0;C<=9;C++)for(D=0;D<=9;D++)for(E=0;E<=9;E++)if(A*(B*10+3+C)*A*(B*10+3+C)==8009+D*100+E*10)printf(“%2d%2d%2d%2d%2d\n”,A,B,C,D,E);}結(jié)果:32864

【例二】雨水淋濕了算術(shù)書的一道題,8個(gè)數(shù)字只能看清3個(gè),第一個(gè)數(shù)字雖然看不清,但可看出不是1。編程求其余數(shù)字是什么?

[□×(□3+□)]2=8□□9高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第43頁(yè)。44【例三】

求100~200之間不能被3整除也不能被7整除的數(shù)。

分析:求某區(qū)間內(nèi)符合某一要求的數(shù),可用一個(gè)變量“窮舉”。所以可用一個(gè)獨(dú)立變量x,取值范圍100~200。for(x=100;x<=200;x++) if(x%3!=0&&x%7!=0)printf(“x=%d\n”,x);如果是求指定條件的奇數(shù)呢?

如果是求指定條件的偶數(shù)呢?

x=101;x<=200;x=x+2

x=100;x<=200;x=x+2

高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第44頁(yè)。452、歸納法(遞推法)

“智人之法”

:通過(guò)分析歸納,找出從變量舊值出發(fā)求新值的規(guī)律。五、常用算法【例一】

編程求∑i=1+2+3+4…+99+100(i=0~100)分析

i=0

S0=0(初值)

i=1

S1=0+1=S0+1i=2

S2=1+2=S1+2i=3

S3=1+2+3=S2+3i=4

S4=1+2+3+4=S3+4

………i=nSn=1+2+3+4+…+n=Sn-1+n高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第45頁(yè)。46【例一】

編程求∑i=1+2+3+4…+n(n≤100)程序:main(){inti,n,s=0;printf("n=");scanf("%d",&n);for(i=1;i<=n;i++)s=s+i;printf("Sum=%d\n",s);}運(yùn)行結(jié)果:n=100Sum=5050如果是∑i=1+1/2+1/3+…+1/n呢?高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第46頁(yè)。47算法類型小結(jié):累加型【累加型】類型諸如

□+□+□+□+……+□+□

求其前n項(xiàng)之和的編程題。累加型算法若設(shè)i為循環(huán)變量,s為前n項(xiàng)累加之和,則程序的基本結(jié)構(gòu)為:

s=0;for(i=1;i<=n;i++)s=s+□;高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第47頁(yè)。48【例二】

編程求1-1/2+1/3-1/4+1/5-…+1/99-1/100分母為奇數(shù)時(shí),相加分母為偶數(shù)時(shí),相減法1:從變化規(guī)律分析……程序:main(){inti;floats=0;for(i=1;i<=100;i++)if(i%2)s=s+1/i;elses=s-1/i;printf("Sum=%f\n",s);}運(yùn)行結(jié)果:Sum=1.000000錯(cuò)在哪里?高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第48頁(yè)。49【例二】

編程求1-1/2+1/3-1/4+1/5-…+1/99-1/100法2:這是個(gè)累加型算法的編程題……程序:#include<math.h>main();{inti;floats=0;for(i=1;i<=100;i++)s=s+pow(-1,i+1)/i;printf("Sum=%f\n",s);}

程序:#include<math.h>main(){inti,k=1;floats=0;for(i=1;i<=100;i++){s=s+

k/i;k=-k;}printf("Sum=%f\n",s);}累加型算法程序基本結(jié)構(gòu)為:

s=0;for(i=1;i<=n;i++)s=s+□;錯(cuò)在哪里?(如何檢查程序錯(cuò)誤?)運(yùn)行結(jié)果:Sum=0.688172運(yùn)行結(jié)果:Sum=1.000000高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第49頁(yè)。50【例三】

編程求n!(n由鍵盤輸入)

分析

i=0

S0=

1=S0(初值)

i=1

S1=0×1=S0×1i=2

S2=1×2=S1×2i=3

S3=1×2×3=S2×3i=4

S4=1×2×3×4=S3×4

………i=nSn=1×2×3×4×…×n=Sn-1×n高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第50頁(yè)。51【例三】

編程求n!(n由鍵盤輸入)

程序:main(){inti,n,s=1;printf("n=");scanf("%d",&n);for(i=1;i<=n;i++)s=s*i;printf("Sum=%d\n",s);}運(yùn)行結(jié)果:n=5Sum=120運(yùn)行結(jié)果:n=8Sum=-25216Why?高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第51頁(yè)。52算法類型小結(jié):階乘型【階乘型】類型諸如

□×□×□×□×……×□×□

求其前n項(xiàng)之積的編程題。階乘型算法若設(shè)i為循環(huán)變量,s為前n項(xiàng)相乘之積,則程序的基本結(jié)構(gòu)為:

s=1;for(i=1;i<=n;i++)s=s*□;高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第52頁(yè)。53【例四】

編程求∑i!=1!+2!+3!…+n!(n由鍵盤輸入)外循環(huán)為累加型內(nèi)循環(huán)為階乘型法1:從變化規(guī)律分析……程序:main(){inti,j,n;floats,s1;

printf("請(qǐng)輸入n=");scanf("%d",&n);

s=0;for(i=1;i<=n;i++){

s1=1;

for(j=1;j<=i;j++)s1=s1*j;s=s+s1;}

printf("Sum=%.0f\n",s);}運(yùn)行結(jié)果:n=5Sum=153/*如果n值較大,可改為printf(“Sum=%e\n”,s);*/

高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第53頁(yè)。54【例四】

編程求∑n!=1!+2!+3!…+n!(n由鍵盤輸入)在同一個(gè)循環(huán)中先階乘,后累加法2:通過(guò)單循環(huán)實(shí)現(xiàn)……程序:main(){inti,n;floats,s1;

printf("請(qǐng)輸入n=");scanf("%d",&n);s=0,s1=1;for(i=1;i<=n;i++){s1=s1*i;s=s+s1;}printf("Sum=%.0f\n",s);}運(yùn)行結(jié)果:n=5Sum=153高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第54頁(yè)。55【例五】

P116例6.7

兔子繁殖問(wèn)題(斐波那契數(shù)列問(wèn)題)

著名意大利數(shù)學(xué)家斐波那契(Fibonacci)1202年提出一個(gè)有趣的問(wèn)題。某人想知道一年內(nèi)一對(duì)兔子可以生幾對(duì)兔子。他筑了一道圍墻,把一對(duì)大兔關(guān)在其中。已知每對(duì)大兔每個(gè)月可以生一對(duì)小兔,而每對(duì)小兔出生后第三個(gè)月即可成為“大兔”再生小兔。問(wèn)一對(duì)小兔一年能繁殖幾對(duì)小兔?分析:▲表示大兔,△表示小兔由分析可以推出,每月新增兔子數(shù)Fn={1,1,2,3,5,8,13,21,34,…}(斐波那契數(shù)列)月份n兔子數(shù)Fn1F1=12F2=13F3=2=F1+F24F4=3=F2+F35F5=5=F3+F4…nFn=Fn-1+Fn-2高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第55頁(yè)。56【例五】

P116例6.7

兔子繁殖問(wèn)題(斐波那契數(shù)列問(wèn)題)main(){intf1=1,f2=1,f,i,s,n;clrscr();printf("請(qǐng)輸入月數(shù):");scanf("%d",&n);for(s=2,i=3;i<=n;i++){f=f1+f2;s=s+f;f1=f2;f2=f;}printf("%d個(gè)月的兔子數(shù)是%d\n",n,s);}對(duì)照:P116例6.7高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第56頁(yè)。57【例六】編程顯示以下圖形(共N行,N由鍵盤輸入)。

*************************此類題目分析的要點(diǎn)是:通過(guò)分析,找出每行空格、*與行號(hào)i、列號(hào)j及總行數(shù)N的關(guān)系。其循環(huán)結(jié)構(gòu)可用右圖表示。分析:(設(shè)N=5)第1行4個(gè)空格=5-11個(gè)“*”=2*行號(hào)-1第2行3個(gè)空格=5-23個(gè)“*”=2*行號(hào)-1第3行2個(gè)空格=5-35個(gè)“*”=2*行號(hào)-1第4行1個(gè)空格=5-47個(gè)“*”=2*行號(hào)-1第5行0個(gè)空格=5-59個(gè)“*”=2*行號(hào)-1由此歸納出:第i行的空格數(shù)N-i個(gè);第i行的“*”數(shù)是2i-1個(gè)。

高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第57頁(yè)。58【例六】main(){inti,j,N;clrscr();printf("請(qǐng)輸入N=");scanf("%d",&N);for(i=1;i<=N;i++){for(j=1;j<=N-i;j++)printf("");for(j=1;j<=2*i-1;j++)printf("*");printf("\n");}}

*************************高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第58頁(yè)。59除了以上例題,要求根據(jù)教材掌握:1、求按指定精度近似值問(wèn)題(例6.6)2、判斷一個(gè)數(shù)是否素?cái)?shù)問(wèn)題(例6.8)3、密碼問(wèn)題(例6.10)高級(jí)語(yǔ)言程序設(shè)計(jì)全文共65頁(yè),當(dāng)前為第59頁(yè)。

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論