版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、循環(huán)結(jié)構(gòu)的程序設(shè)計(jì)1第6章 循環(huán)結(jié)構(gòu)的程序設(shè)計(jì) 本章要點(diǎn)q 循環(huán)語(yǔ)句的執(zhí)行流程q 不同形式的循環(huán)控制q 多重循環(huán)問(wèn)題q 簡(jiǎn)單算法設(shè)計(jì)2第6章 循環(huán)結(jié)構(gòu)的程序設(shè)計(jì) 循環(huán)的基本概念 while語(yǔ)句 for語(yǔ)句 do_while語(yǔ)句 轉(zhuǎn)移語(yǔ)句 循環(huán)應(yīng)用36.1 循環(huán)的基本概念 提出問(wèn)題提出問(wèn)題提問(wèn):從鍵盤(pán)上輸入提問(wèn):從鍵盤(pán)上輸入10個(gè)整數(shù)并求和,怎么編程?個(gè)整數(shù)并求和,怎么編程?回答:在程序中寫(xiě)回答:在程序中寫(xiě)10個(gè)個(gè)scanf語(yǔ)句,還可以寫(xiě)語(yǔ)句,還可以寫(xiě)%d%d提問(wèn):從鍵盤(pán)上輸入提問(wèn):從鍵盤(pán)上輸入500個(gè)整數(shù)并求和,怎么編程?個(gè)整數(shù)并求和,怎么編程?回答:這個(gè),嗯回答:這個(gè),嗯? 不會(huì)讓我寫(xiě)不會(huì)讓
2、我寫(xiě)500個(gè)個(gè) 以上問(wèn)題的實(shí)質(zhì)是:將以上問(wèn)題的實(shí)質(zhì)是:將scanf函數(shù)重復(fù)執(zhí)行函數(shù)重復(fù)執(zhí)行N遍。我們可以引出一個(gè)概念遍。我們可以引出一個(gè)概念“循環(huán)循環(huán)”,簡(jiǎn)單而,簡(jiǎn)單而言:言:循環(huán)循環(huán)就是不斷反復(fù)地執(zhí)行同一段程序。就是不斷反復(fù)地執(zhí)行同一段程序。?46.1 循環(huán)的基本概念q 循環(huán)循環(huán) 反復(fù)執(zhí)行同一段程序,直到滿足一定反復(fù)執(zhí)行同一段程序,直到滿足一定的條件后才停止執(zhí)行該段程序。的條件后才停止執(zhí)行該段程序。q C語(yǔ)言中控制循環(huán)的語(yǔ)句語(yǔ)言中控制循環(huán)的語(yǔ)句:q whileq forq do_while5第6章 循環(huán)結(jié)構(gòu)的程序設(shè)計(jì) 循環(huán)的基本概念 while語(yǔ)句 for語(yǔ)句 do_while語(yǔ)句 轉(zhuǎn)移語(yǔ)句
3、 循環(huán)應(yīng)用66.2 while語(yǔ)句一一while語(yǔ)句格式語(yǔ)句格式while (表達(dá)式表達(dá)式)語(yǔ)句;語(yǔ)句;說(shuō)明:語(yǔ)句可是簡(jiǎn)單語(yǔ)句,也可是復(fù)合語(yǔ)句。說(shuō)明:語(yǔ)句可是簡(jiǎn)單語(yǔ)句,也可是復(fù)合語(yǔ)句。二二while語(yǔ)句語(yǔ)句的執(zhí)行流程的執(zhí)行流程76.2 while語(yǔ)句表達(dá)式表達(dá)式?執(zhí)行語(yǔ)句執(zhí)行語(yǔ)句成立成立不成立不成立執(zhí)行執(zhí)行while循環(huán)之后的語(yǔ)句循環(huán)之后的語(yǔ)句循環(huán)控制條件循環(huán)控制條件循環(huán)體循環(huán)體while (表達(dá)式表達(dá)式)語(yǔ)句;語(yǔ)句;8例:從鍵盤(pán)輸入例:從鍵盤(pán)輸入10個(gè)整數(shù),求這個(gè)整數(shù),求這10個(gè)整數(shù)之和個(gè)整數(shù)之和q程序主體:程序主體:count10?輸入輸入num成立成立不成立不成立輸出結(jié)果輸出結(jié)果tota
4、l計(jì)數(shù)器計(jì)數(shù)器count=0累加器累加器total=0total += numcount+開(kāi)始開(kāi)始結(jié)束結(jié)束while ( count10 )count+;scanf(%d, &num);total += num;89 #include int main ( ) int count,num,total; / /* * count:計(jì)數(shù)器,計(jì)數(shù)器,num:輸入的整數(shù)輸入的整數(shù) * */ / count=0; total=0; / /* * total:存放累加和存放累加和 * */ / while (count10) / /* * 循環(huán)控制條件循環(huán)控制條件 * */ / printf (E
5、nter the No.%d=, count); / /* *循環(huán)體循環(huán)體* */ / scanf (%d, &num); total += num; / /* * 計(jì)算累加和計(jì)算累加和 * */ / count +; printf(Total=%dn, total);10 例:求例:求n的階乘的階乘n! (1=n=10)q程序主體:程序主體: while(i=n) s*=i; i+; i1時(shí)時(shí)116.2 while語(yǔ)句 #include int main ( ) long s=1; / /* * s:存放累積結(jié)果存放累積結(jié)果 * */ / int i=1; / /* * i:計(jì)數(shù)器,
6、同時(shí)是累積的對(duì)象計(jì)數(shù)器,同時(shí)是累積的對(duì)象 * */ / while (i=10) / /* * 循環(huán)控制條件循環(huán)控制條件 * */ / / /* * 循環(huán)體循環(huán)體 * */ / s*=i; / /* * 計(jì)算累積和計(jì)算累積和 * */ / i+; printf(“10!=%dn, s);以求以求10!為例為例126.2 while語(yǔ)句q 比較比較total=0;count=0;while (count10) total += num; count +;s=1;i=1;while (i=10) s *= i; i +;10個(gè)數(shù)相加個(gè)數(shù)相加10個(gè)數(shù)相乘個(gè)數(shù)相乘13例:分析程序運(yùn)行結(jié)果例:分析程序運(yùn)
7、行結(jié)果 #include int main ( ) int n=0;while ( n3 ) printf (“n is %dn”,n); n+;結(jié)果結(jié)果:程序?qū)⒉煌5拇蛴。撼绦驅(qū)⒉煌5拇蛴 皀 is 0”,直至終止程序無(wú),直至終止程序無(wú)法正常終止的程序,稱為法正常終止的程序,稱為“死循環(huán)死循環(huán)”。結(jié)論結(jié)論:while語(yǔ)句循環(huán)體中,一定要有能夠?qū)ρh(huán)控語(yǔ)句循環(huán)體中,一定要有能夠?qū)ρh(huán)控制條件產(chǎn)生影響的語(yǔ)句,避免出現(xiàn)制條件產(chǎn)生影響的語(yǔ)句,避免出現(xiàn)“死循環(huán)死循環(huán)”現(xiàn)象?,F(xiàn)象。14 例:求例:求1413的最后三位數(shù)。的最后三位數(shù)。問(wèn)題分析:?jiǎn)栴}分析:14的的13次方已經(jīng)超次方已經(jīng)超出了計(jì)算機(jī)所能表出
8、了計(jì)算機(jī)所能表示的整數(shù)范圍示的整數(shù)范圍乘法規(guī)律:乘積的最后乘法規(guī)律:乘積的最后三位的值只與乘數(shù)和被三位的值只與乘數(shù)和被乘數(shù)的后三位有關(guān)乘數(shù)的后三位有關(guān)C語(yǔ)言中最長(zhǎng)的整數(shù)是:語(yǔ)言中最長(zhǎng)的整數(shù)是:無(wú)符號(hào)長(zhǎng)整型數(shù):無(wú)符號(hào)長(zhǎng)整型數(shù):0 429496729510位位1410=28925465497612位位問(wèn)題被簡(jiǎn)化為問(wèn)題被簡(jiǎn)化為求三位數(shù)乘法求三位數(shù)乘法156.2 while語(yǔ)句int main() int i=1,x,y,a=1; printf(Input X and Y:); scanf(%d*%d,&x,&y); while (i=y) a=a*x%1000; i+; printf
9、(3 digits is:); printf(%dn,a%1000);Input X and Y:14*133 digits is:144Input X and Y:15*123 digits is:625166.2 while語(yǔ)句如何一次輸入多個(gè)字符或數(shù)值如何一次輸入多個(gè)字符或數(shù)值例:例:將從鍵盤(pán)輸入的一行字符將從鍵盤(pán)輸入的一行字符(回車結(jié)束回車結(jié)束)復(fù)制復(fù)制到標(biāo)準(zhǔn)輸出到標(biāo)準(zhǔn)輸出(顯示器顯示器)?;仡欁址斎胼敵龊瘮?shù):回顧字符輸入輸出函數(shù):getchar():調(diào)用時(shí),等待用戶按鍵,輸入的:調(diào)用時(shí),等待用戶按鍵,輸入的字符存入鍵盤(pán)緩沖區(qū),直到用戶按字符存入鍵盤(pán)緩沖區(qū),直到用戶按Enter為止為
10、止(Enter即即n也在緩沖區(qū)也在緩沖區(qū))。輸入。輸入Enter后,后,getchar從輸入流每次讀一個(gè)字符,作為其返從輸入流每次讀一個(gè)字符,作為其返回值。其它未讀的字符保留在緩沖區(qū),待下回值。其它未讀的字符保留在緩沖區(qū),待下一個(gè)一個(gè)getchar調(diào)用。調(diào)用。176.2 while語(yǔ)句#include int main( ) char ch; ch = getchar( ); while ( ch != n ) putchar ( ch ); ch = getchar( ); ch!=n?顯示顯示ch成立成立不成立不成立ch=讀入一個(gè)字符讀入一個(gè)字符ch=讀入下一個(gè)字符讀入下一個(gè)字符開(kāi)始開(kāi)始結(jié)
11、束結(jié)束ab13cdeab13cdeputchar(ch=getchar();putchar(getchar();186.2 while語(yǔ)句#include int main( ) char ch; while (ch= getchar( ) != n ) putchar ( ch );一段更簡(jiǎn)潔的程序一段更簡(jiǎn)潔的程序196.2 while語(yǔ)句例:輸入若干整數(shù),豎排輸出,當(dāng)輸入為例:輸入若干整數(shù),豎排輸出,當(dāng)輸入為0時(shí)時(shí)程序結(jié)束。如:輸入程序結(jié)束。如:輸入13 -6 356 0 輸出:輸出:13-6356scanf():調(diào)用時(shí),等待用戶輸入,輸入的:調(diào)用時(shí),等待用戶輸入,輸入的內(nèi)容存入鍵盤(pán)緩沖區(qū)
12、,直到用戶按內(nèi)容存入鍵盤(pán)緩沖區(qū),直到用戶按Enter為止。為止。輸入輸入Enter后,后,scanf從輸入流每次按格式讀從輸入流每次按格式讀一個(gè)單元,作為其返回值。其它未讀的內(nèi)容一個(gè)單元,作為其返回值。其它未讀的內(nèi)容保留在緩沖區(qū),待下一個(gè)保留在緩沖區(qū),待下一個(gè)scanf調(diào)用。調(diào)用。206.2 while語(yǔ)句#include int main( ) int x; scanf(“%d”,&x); while ( x ) printf (“%dn”,x); scanf(“%d”,&x); scanf()把緩沖區(qū)的內(nèi)容把緩沖區(qū)的內(nèi)容全部讀完以后,才再次全部讀完以后,才再次等待用戶從鍵盤(pán)
13、輸入等待用戶從鍵盤(pán)輸入輸入:輸入:13 -6 356 0輸出:輸出:13 -6 356輸入:輸入:13 -6 356 0 7輸出:輸出:13 -6 356輸入:輸入:13 -6 216.2 while語(yǔ)句循環(huán)嵌套循環(huán)嵌套在循環(huán)體中,又包含有循環(huán)語(yǔ)句。在循環(huán)體中,又包含有循環(huán)語(yǔ)句。whilewhile22例:輸出下三角形乘法九九表。例:輸出下三角形乘法九九表。 1 2 3 4 5 6 7 8 9- 1 2 4 3 6 9 4 8 12 16 5 10 15 20 25 6 12 18 24 30 36 7 14 21 28 35 42 49 8 16 24 32 40 48 56 64 9 18
14、 27 36 45 54 63 72 81 假設(shè):行號(hào)為假設(shè):行號(hào)為i ,列號(hào)為,列號(hào)為j 則第則第i行中一共要輸出行中一共要輸出i個(gè)乘積,每一項(xiàng)為個(gè)乘積,每一項(xiàng)為i*j。(1=i=9)(1=j=i)i=6j=5i*j屏幕上的字符只能從上到下逐屏幕上的字符只能從上到下逐行顯示,同一行內(nèi),只能從左行顯示,同一行內(nèi),只能從左到右逐字顯示。到右逐字顯示。2223l顯示要求顯示要求 屏幕上的字符只能從上到下逐行顯示,同屏幕上的字符只能從上到下逐行顯示,同一行內(nèi),只能從左到右逐字顯示。一行內(nèi),只能從左到右逐字顯示。l偽代碼偽代碼(Pseudocode) while (控制顯示控制顯示n行行 ) whil
15、e (控制顯示一行中的控制顯示一行中的m個(gè)字符個(gè)字符 ) 輸出一個(gè)需要的字符輸出一個(gè)需要的字符; 列計(jì)數(shù)器列計(jì)數(shù)器 j+; 行數(shù)計(jì)數(shù)器行數(shù)計(jì)數(shù)器 i+; 24 #include int main ( ) int i=1, j; /* i:行計(jì)數(shù)器行計(jì)數(shù)器 j:列計(jì)數(shù)器列計(jì)數(shù)器 */ while ( i = 9 ) /* 控制打印表頭控制打印表頭 */ printf ( %4d, i+ ); printf (n-n); i=1; while ( i= 9 ) j = 1; /* 列計(jì)數(shù)器置列計(jì)數(shù)器置1 */ while ( j = i ) /* 嵌套的二重循環(huán),輸出第嵌套的二重循環(huán),輸出第i行行
16、 */ printf (%4d, i*j ); j +; /* 列計(jì)數(shù)器列計(jì)數(shù)器+1 */ printf (n); /* 一行輸出結(jié)束后,輸出一行輸出結(jié)束后,輸出n */ i +; /* 行計(jì)數(shù)器行計(jì)數(shù)器+1 */ 外層循環(huán)體執(zhí)行外層循環(huán)體執(zhí)行1次,內(nèi)層循環(huán)要完整執(zhí)行次,內(nèi)層循環(huán)要完整執(zhí)行1次次25第6章 循環(huán)結(jié)構(gòu)的程序設(shè)計(jì) 循環(huán)的基本概念 while語(yǔ)句 for語(yǔ)句 do_while語(yǔ)句 轉(zhuǎn)移語(yǔ)句 循環(huán)應(yīng)用266.3 for語(yǔ)句一一for語(yǔ)句格式語(yǔ)句格式for (表達(dá)式表達(dá)式1;表達(dá)式表達(dá)式2;表達(dá)式表達(dá)式3) 語(yǔ)句;語(yǔ)句; 說(shuō)明:語(yǔ)句可是簡(jiǎn)單語(yǔ)句,也可是復(fù)合語(yǔ)句。說(shuō)明:語(yǔ)句可是簡(jiǎn)單語(yǔ)句,也
17、可是復(fù)合語(yǔ)句。二二for語(yǔ)句語(yǔ)句的執(zhí)行流程的執(zhí)行流程27循環(huán)初始條件循環(huán)初始條件循環(huán)控制條件循環(huán)控制條件表達(dá)式表達(dá)式2?執(zhí)行語(yǔ)句執(zhí)行語(yǔ)句成立成立不成立不成立執(zhí)行執(zhí)行for循環(huán)之后的語(yǔ)句循環(huán)之后的語(yǔ)句執(zhí)行表達(dá)式執(zhí)行表達(dá)式3執(zhí)行表達(dá)式執(zhí)行表達(dá)式1循環(huán)體循環(huán)體 for (表達(dá)式表達(dá)式1;表達(dá)式表達(dá)式2;表達(dá)式表達(dá)式3) 語(yǔ)句;語(yǔ)句;for語(yǔ)句等價(jià)于下列語(yǔ)句:語(yǔ)句等價(jià)于下列語(yǔ)句:表達(dá)式表達(dá)式1;while (表達(dá)式表達(dá)式2) 語(yǔ)句;語(yǔ)句; 表達(dá)式表達(dá)式3;286.3 for語(yǔ)句 #include int main ( ) long n=1; int i; i=1;while (i=10) n*=i;
18、i+;printf(“10!=%dn, n); for (i=1;i=10;i+) n*=i;for語(yǔ)句最常用的形式:語(yǔ)句最常用的形式:for (初值;控制條件;增量初值;控制條件;增量) 語(yǔ)句;語(yǔ)句;29 例:用例:用for語(yǔ)句實(shí)現(xiàn)打印乘法九九表語(yǔ)句實(shí)現(xiàn)打印乘法九九表 #include int main ( ) int i, j; for ( i=1; i= 9; i+ ) printf ( %4d, i); printf (n-n); for ( i=1; i= 9; i+ ) for ( j=1; j=3)為求出第為求出第 N 項(xiàng)的值,請(qǐng)編寫(xiě)程序。項(xiàng)的值,請(qǐng)編寫(xiě)程序。 根據(jù)遞推通項(xiàng)公式,
19、可用根據(jù)遞推通項(xiàng)公式,可用遞推法遞推法編寫(xiě)程編寫(xiě)程序,計(jì)算第序,計(jì)算第N項(xiàng)的值。項(xiàng)的值。336.3 for語(yǔ)句遞推法遞推法 由初始的已知條件開(kāi)始,先計(jì)算出第由初始的已知條件開(kāi)始,先計(jì)算出第(N-1)步的結(jié)果,再利用已知的前步的結(jié)果,再利用已知的前(N-1)項(xiàng)結(jié)果,項(xiàng)結(jié)果,按遞推公式按遞推公式(或遵照遞推規(guī)則或遵照遞推規(guī)則),推出第,推出第 N 步結(jié)果。步結(jié)果。 遞推法是程序設(shè)計(jì)中最常用的方法之一,遞推法是程序設(shè)計(jì)中最常用的方法之一,使用遞推法必須有明確的遞推初始值和遞使用遞推法必須有明確的遞推初始值和遞推規(guī)則推規(guī)則(遞推公式遞推公式)。34程序主體程序主體f = f2 = 1;for ( i=
20、3; i=n; i+ ) f1 = f2; f2 = f; f = f1 + f2;i = n?向前傳遞前兩項(xiàng)向前傳遞前兩項(xiàng)f1 = f2f2 = f成立成立不成立不成立初始化:初始化:f=f2=1計(jì)算計(jì)算 f=f1+f2遞推項(xiàng):遞推項(xiàng):i=3i +數(shù)列對(duì)應(yīng)關(guān)系:數(shù)列對(duì)應(yīng)關(guān)系: f1,f2, f遞推計(jì)算遞推計(jì)算f1=f2=1;for(i=3;i=n;i+) f=f1+f2; f1=f2; f2=f;35#include int main( ) long f1, f2, f; int i; for ( ; ; ) printf (Input n=?); scanf (%d,&n); if
21、 ( n = 3 ) break; / /* *退出退出for循環(huán)循環(huán)* */ / else printf (nInput n is error !n); / /* *控制輸入正確的控制輸入正確的N值值* */ / f = f2 = 1; / /* *設(shè)置遞推初始值設(shè)置遞推初始值* */ / for ( i=3; i=n; i+) / /* *用遞推法計(jì)算第用遞推法計(jì)算第N項(xiàng)的值項(xiàng)的值* */ / f1 = f2; f2 = f; f = f1 + f2; printf (No. %d is %dn, n, f);36 語(yǔ)句中的逗號(hào)語(yǔ)句中的逗號(hào)(,)運(yùn)算運(yùn)算逗號(hào)逗號(hào)(,)運(yùn)算常見(jiàn)的三種用途是:
22、運(yùn)算常見(jiàn)的三種用途是: 在變量說(shuō)明表中用來(lái)分隔變量,起分隔符的在變量說(shuō)明表中用來(lái)分隔變量,起分隔符的作用,如:作用,如:int i, j, k, m3, *p; 在函數(shù)的參數(shù)表中分隔參數(shù)。如:在函數(shù)的參數(shù)表中分隔參數(shù)。如:printf (n=%d, x=%dn, n, x); 在語(yǔ)句中使用。其形式是:在語(yǔ)句中使用。其形式是:表達(dá)式表達(dá)式n1, 表達(dá)式表達(dá)式n2; 用逗號(hào)分隔開(kāi)的表達(dá)式從左到右進(jìn)行計(jì)算,用逗號(hào)分隔開(kāi)的表達(dá)式從左到右進(jìn)行計(jì)算,結(jié)果的類型和值是最右邊表達(dá)式的類型和值。結(jié)果的類型和值是最右邊表達(dá)式的類型和值。376.3 for語(yǔ)句例:輸出下列字符串例:輸出下列字符串:a z b y c
23、 x d w e v f u g t h s i r j q k p l o m n 分析:奇數(shù)位上的字符從分析:奇數(shù)位上的字符從a開(kāi)始逐次遞增,偶開(kāi)始逐次遞增,偶數(shù)位上的字符從數(shù)位上的字符從z開(kāi)始逐次遞減。開(kāi)始逐次遞減。 #include int main ( ) char i, j; / /* * i:奇位字符奇位字符 j:偶位字符偶位字符 * */ / for ( i=a, j=z; ij; i+, j- ) printf( %c %c, i, j); / /* * 輸出兩個(gè)字符輸出兩個(gè)字符 * */ / printf(n); a z b y c x d w e v f u g t h
24、s i r j q k p l o m n38第6章 循環(huán)結(jié)構(gòu)的程序設(shè)計(jì) 循環(huán)的基本概念 while語(yǔ)句 for語(yǔ)句 do_while語(yǔ)句 轉(zhuǎn)移語(yǔ)句 循環(huán)應(yīng)用396.4 do_while語(yǔ)句一一do_while語(yǔ)句格式語(yǔ)句格式do 語(yǔ)句語(yǔ)句; while (表達(dá)式表達(dá)式);二二do_while語(yǔ)句語(yǔ)句的執(zhí)行流程的執(zhí)行流程406.4 do_while語(yǔ)句表達(dá)式表達(dá)式?執(zhí)行語(yǔ)句執(zhí)行語(yǔ)句成立成立不成立不成立執(zhí)行執(zhí)行while子句之后的語(yǔ)句子句之后的語(yǔ)句循環(huán)控制條件循環(huán)控制條件循環(huán)體循環(huán)體后判斷后判斷do 語(yǔ)句語(yǔ)句; while(表達(dá)式表達(dá)式);416.4 do_while語(yǔ)句do_while語(yǔ)句的特
25、點(diǎn)語(yǔ)句的特點(diǎn)與與 while 和和 for 的區(qū)別:的區(qū)別: do_while 語(yǔ)句語(yǔ)句先執(zhí)行循環(huán)體先執(zhí)行循環(huán)體然后然后再再判斷判斷循環(huán)循環(huán)控制條件控制條件;使用;使用 do_while 構(gòu)構(gòu)成的循環(huán),循環(huán)體部分成的循環(huán),循環(huán)體部分至少要執(zhí)行一次至少要執(zhí)行一次,使用使用 while 和和 for 構(gòu)成的循環(huán),循環(huán)體構(gòu)成的循環(huán),循環(huán)體部分有可能一次也不會(huì)執(zhí)行。部分有可能一次也不會(huì)執(zhí)行。 do_while語(yǔ)句條件表達(dá)式后面的分號(hào)語(yǔ)句條件表達(dá)式后面的分號(hào)不是空語(yǔ)句。不是空語(yǔ)句。426.4 do_while語(yǔ)句 #include int main ( ) long n=1; int i; i=1;wh
26、ile (i=10) n*=i; i+; printf(“10!=%dn, n); for (i=1;i=10;i+) n*=i;i=1;do n*=i; i+;while (i=0的整數(shù),要求以相反的順序的整數(shù),要求以相反的順序輸出。例如:輸入輸出。例如:輸入12345,則輸出為,則輸出為54321。 思路:可以從個(gè)位開(kāi)始,按位輸出整數(shù)的每一位思路:可以從個(gè)位開(kāi)始,按位輸出整數(shù)的每一位 int main( ) unsigned int num; printf (Input the number:); scanf (%d, &num); do printf(%d, num%10); n
27、um /= 10; / /* *num縮小縮小10倍倍* */ / while ( num != 0 );簡(jiǎn)單轉(zhuǎn)變?yōu)楹?jiǎn)單轉(zhuǎn)變?yōu)閣hile或或for語(yǔ)句,程序?qū)⒉徽Z(yǔ)句,程序?qū)⒉荒芴幚頂?shù)字能處理數(shù)字0。446.4 do_while語(yǔ)句 例:從鍵盤(pán)輸入任意的字符,按下列規(guī)例:從鍵盤(pán)輸入任意的字符,按下列規(guī)則進(jìn)行分類計(jì)數(shù)。則進(jìn)行分類計(jì)數(shù)。第一類第一類 0, 1, 2, 3, 4, 5, 6, 7, 8, 9第二類第二類 +, -, *, /, %, =第三類第三類 其它字符其它字符當(dāng)輸入字符當(dāng)輸入字符 時(shí)時(shí)先計(jì)數(shù)然后停止先計(jì)數(shù)然后停止接收輸入。接收輸入。45int main( ) int class1
28、=0, class2=0, class3=0; char ch; do putchar(ch=getch(); / /* *函數(shù)的嵌套調(diào)用函數(shù)的嵌套調(diào)用* */ / switch (ch) case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: class1+; break; / /* * 對(duì)分類對(duì)分類1計(jì)數(shù)計(jì)數(shù) * */ / case +: case -: case *: case /: case %: case =: class2+; break; / /* * 對(duì)分類對(duì)分類2計(jì)數(shù)計(jì)數(shù)
29、* */ / default: class3+; break;/ /* *對(duì)分類對(duì)分類3計(jì)數(shù)計(jì)數(shù)* */ / while (ch != ); printf(class1=%d, class2=%d, class3=%dn, class1, class2, class3);46循環(huán)語(yǔ)句小結(jié)C語(yǔ)言提供三種循環(huán):語(yǔ)言提供三種循環(huán):for、while、do_while for和和while先判斷循環(huán)條件后執(zhí)行循環(huán)體,先判斷循環(huán)條件后執(zhí)行循環(huán)體,do-while語(yǔ)句先執(zhí)行循環(huán)體后判斷循環(huán)條件;語(yǔ)句先執(zhí)行循環(huán)體后判斷循環(huán)條件; while和和do-while語(yǔ)句的條件表達(dá)式只有語(yǔ)句的條件表達(dá)式只有 1個(gè),
30、個(gè),for語(yǔ)句有語(yǔ)句有3個(gè)表達(dá)式,表達(dá)式個(gè)表達(dá)式,表達(dá)式2是條件表達(dá)式;是條件表達(dá)式; while、do-while、for可以相互替換使用;可以相互替換使用; while語(yǔ)句多用于語(yǔ)句多用于不需要賦初值不需要賦初值的或的或循環(huán)次數(shù)不定循環(huán)次數(shù)不定的情況;的情況; for語(yǔ)句多用于語(yǔ)句多用于要賦初值要賦初值或或循環(huán)次數(shù)固定循環(huán)次數(shù)固定的情況;的情況; do-while語(yǔ)句多用于語(yǔ)句多用于至少要運(yùn)行一次至少要運(yùn)行一次的循環(huán);的循環(huán);1.循環(huán)語(yǔ)句可串可并可嵌套,但不能交叉。循環(huán)語(yǔ)句可串可并可嵌套,但不能交叉。47循環(huán)語(yǔ)句小結(jié) 為了保證循環(huán)正常運(yùn)行,應(yīng)該特別注意:為了保證循環(huán)正常運(yùn)行,應(yīng)該特別注意:
31、q循環(huán)控制條件循環(huán)控制條件q控制條件的初始狀態(tài)控制條件的初始狀態(tài)(初始值初始值)q循環(huán)體內(nèi)部對(duì)控制條件的影響循環(huán)體內(nèi)部對(duì)控制條件的影響 以上三個(gè)方面相互配合,相互影響,共同以上三個(gè)方面相互配合,相互影響,共同完成循環(huán)控制完成循環(huán)控制48第6章 循環(huán)結(jié)構(gòu)的程序設(shè)計(jì) 循環(huán)的基本概念 while語(yǔ)句 for語(yǔ)句 do_while語(yǔ)句 轉(zhuǎn)移語(yǔ)句 循環(huán)應(yīng)用496.5 轉(zhuǎn)移語(yǔ)句一一轉(zhuǎn)移語(yǔ)句的作用轉(zhuǎn)移語(yǔ)句的作用改變程序的運(yùn)行流程改變程序的運(yùn)行流程C語(yǔ)言轉(zhuǎn)移語(yǔ)句語(yǔ)言轉(zhuǎn)移語(yǔ)句qbreakqcontinueqgoto二二return506.5.1 break語(yǔ)句一一格式格式break;功能功能q在在switch語(yǔ)
32、句中結(jié)束語(yǔ)句中結(jié)束case子句,使控制轉(zhuǎn)到子句,使控制轉(zhuǎn)到switch語(yǔ)句之外。語(yǔ)句之外。二二在循環(huán)語(yǔ)句的循環(huán)體中使用,結(jié)束循環(huán)過(guò)程,在循環(huán)語(yǔ)句的循環(huán)體中使用,結(jié)束循環(huán)過(guò)程,使控制轉(zhuǎn)移到整個(gè)循環(huán)語(yǔ)句之外的下一條語(yǔ)使控制轉(zhuǎn)移到整個(gè)循環(huán)語(yǔ)句之外的下一條語(yǔ)句處。句處。51break語(yǔ)句的執(zhí)行流程語(yǔ)句的執(zhí)行流程表達(dá)式表達(dá)式?成立成立不成立不成立后續(xù)語(yǔ)句后續(xù)語(yǔ)句break表達(dá)式表達(dá)式2?成立成立不成立不成立后續(xù)語(yǔ)句后續(xù)語(yǔ)句執(zhí)行表達(dá)式執(zhí)行表達(dá)式3執(zhí)行表達(dá)式執(zhí)行表達(dá)式1break表達(dá)式表達(dá)式?成立成立不成立不成立后續(xù)語(yǔ)句后續(xù)語(yǔ)句breakwhile語(yǔ)句語(yǔ)句for語(yǔ)句語(yǔ)句do-while語(yǔ)句語(yǔ)句52 例:例:
33、求求555555的約數(shù)中最大的三位數(shù)的約數(shù)中最大的三位數(shù)int main() int j; long n; printf(Please input number:); scanf(%ld, &n); / /* *所求的約數(shù)的可能取值是從所求的約數(shù)的可能取值是從999到到100,j從大到小從大到小* */ / for (j=999; j=100; j-) if ( n%j=0 ) / /* * 若能被若能被j整除,則整除,則j是約數(shù)是約數(shù) * */ / printf(3 digits in %ld=%dn, n, j ); break; / /* * 控制退出循環(huán)控制退出循環(huán) * */
34、/ return 0;536.5.1 break語(yǔ)句break語(yǔ)句使用注意語(yǔ)句使用注意q 在嵌套循環(huán)中,在嵌套循環(huán)中,break 語(yǔ)句僅能退出語(yǔ)句僅能退出一層一層(當(dāng)當(dāng)前層前層)循環(huán);循環(huán);q 若在循環(huán)語(yǔ)句中包含了若在循環(huán)語(yǔ)句中包含了switch 語(yǔ)句,那么語(yǔ)句,那么switch 語(yǔ)句中的語(yǔ)句中的 break 語(yǔ)句僅能使控制退語(yǔ)句僅能使控制退出出 switch 語(yǔ)句;語(yǔ)句;q break 語(yǔ)句并不是程序設(shè)計(jì)中必不可少的語(yǔ)語(yǔ)句并不是程序設(shè)計(jì)中必不可少的語(yǔ)句,可以通過(guò)改變程序的結(jié)構(gòu)去掉。句,可以通過(guò)改變程序的結(jié)構(gòu)去掉。546.5.2 continue語(yǔ)句一一格式格式 continue;功能功能 c
35、ontinue語(yǔ)句僅能在循環(huán)語(yǔ)句中使用:它的作語(yǔ)句僅能在循環(huán)語(yǔ)句中使用:它的作用不是結(jié)束循環(huán),而是開(kāi)始一次新的循環(huán)。用不是結(jié)束循環(huán),而是開(kāi)始一次新的循環(huán)。q 對(duì)于對(duì)于for語(yǔ)句,將控制轉(zhuǎn)到執(zhí)行表達(dá)式語(yǔ)句,將控制轉(zhuǎn)到執(zhí)行表達(dá)式3和條和條件測(cè)試部分;件測(cè)試部分;q 對(duì)于對(duì)于while和和do-while語(yǔ)句,將控制轉(zhuǎn)到條件語(yǔ)句,將控制轉(zhuǎn)到條件測(cè)試部分;測(cè)試部分;二二從邏輯上講,適當(dāng)改變程序的結(jié)構(gòu)就可以不從邏輯上講,適當(dāng)改變程序的結(jié)構(gòu)就可以不需要使用需要使用continue語(yǔ)句。語(yǔ)句。55continue語(yǔ)句的執(zhí)行流程語(yǔ)句的執(zhí)行流程表達(dá)式表達(dá)式?成立成立不成立不成立后續(xù)語(yǔ)句后續(xù)語(yǔ)句continue表
36、達(dá)式表達(dá)式2?成立成立不成立不成立后續(xù)語(yǔ)句后續(xù)語(yǔ)句執(zhí)行表達(dá)式執(zhí)行表達(dá)式3執(zhí)行表達(dá)式執(zhí)行表達(dá)式1continue表達(dá)式表達(dá)式?成立成立不成立不成立后續(xù)語(yǔ)句后續(xù)語(yǔ)句continuewhile語(yǔ)句語(yǔ)句for語(yǔ)句語(yǔ)句do-while語(yǔ)句語(yǔ)句56例:例:輸入輸入10個(gè)整數(shù),求其中正數(shù)的個(gè)數(shù)及平個(gè)整數(shù),求其中正數(shù)的個(gè)數(shù)及平均值,精確到小數(shù)點(diǎn)后兩位。均值,精確到小數(shù)點(diǎn)后兩位。 int main ( ) int i, count=0, j, sum=0; for ( i=1; i=10; i+) printf(Input integer:); scanf(%d, &j); if ( j 0 ) pri
37、ntf(Plus number:%d,average value:%.2f, count, 1.0*sum/count); else printf(Plus number: 0, average value: 0);576.5.3 goto語(yǔ)句一一格式格式goto 標(biāo)號(hào)標(biāo)號(hào);功能功能 將程序控制轉(zhuǎn)移到標(biāo)號(hào)所指定的語(yǔ)句處將程序控制轉(zhuǎn)移到標(biāo)號(hào)所指定的語(yǔ)句處繼續(xù)執(zhí)行。標(biāo)號(hào)的唯一功能就是作為繼續(xù)執(zhí)行。標(biāo)號(hào)的唯一功能就是作為goto語(yǔ)句的目標(biāo)。標(biāo)號(hào)的作用域是它所在的整語(yǔ)句的目標(biāo)。標(biāo)號(hào)的作用域是它所在的整個(gè)函數(shù)。個(gè)函數(shù)。注意:為了保證程序的結(jié)構(gòu)化,注意:為了保證程序的結(jié)構(gòu)化,不允許使用向上不允許使用向上g
38、oto語(yǔ)句語(yǔ)句586.5.3 goto語(yǔ)句例:已知一首項(xiàng)大于例:已知一首項(xiàng)大于0的等差遞增數(shù)列的前四的等差遞增數(shù)列的前四項(xiàng)和為項(xiàng)和為26,前四項(xiàng)的積為,前四項(xiàng)的積為880,求這數(shù)列。,求這數(shù)列。 設(shè)數(shù)列的第一項(xiàng)為設(shè)數(shù)列的第一項(xiàng)為a(a0),公差為,公差為d(d0)。則該數(shù)列滿足條件:則該數(shù)列滿足條件: a+(a+d)+(a+2*d)+(a+3*d) = 4*a+6*d = 26 a*(a+d)*(a+2*d)*(a+3*d) = 880 可以推出,首項(xiàng)可以推出,首項(xiàng)a和公差和公差d的取值范圍為:的取值范圍為: 1 = a =5 1 = d =3 可以使用窮舉的方法,在可以使用窮舉的方法,在 首
39、項(xiàng)首項(xiàng)a 和和 公差公差d 的取值范圍內(nèi)進(jìn)行判斷。的取值范圍內(nèi)進(jìn)行判斷。596.5.3 goto語(yǔ)句int main( ) int a, x, y, d, i; for (a=1; a=5; +a) / /* * 在在a的范圍內(nèi)窮舉的范圍內(nèi)窮舉 * */ / for (d=1; d=3; +d) / /* * 在在d的范圍內(nèi)窮舉的范圍內(nèi)窮舉 * */ / x=a+(a+d)+(a+2*d)+(a+3*d); / /* *前四項(xiàng)的和前四項(xiàng)的和* */ / y=a*(a+d)*(a+2*d)*(a+3*d); / /* *前四項(xiàng)的積前四項(xiàng)的積* */ / if (x=26 & y=880
40、) / /* *若滿足條件若滿足條件* */ / goto out; / /* * 退出二重循環(huán)退出二重循環(huán) * */ / out: / /* * 語(yǔ)句標(biāo)號(hào)語(yǔ)句標(biāo)號(hào) * */ / for (i=0; i=20; +i) / /* * 輸出運(yùn)行結(jié)果輸出運(yùn)行結(jié)果 * */ / printf(%d, a+i*d);606.5.3 goto語(yǔ)句int main( ) int a, x, y, d, i, flag=1; / /* * flag:標(biāo)志變量:標(biāo)志變量 * */ / for (a=1; a=5 & flag; +a) / /* *flag!=0是進(jìn)行循環(huán)是進(jìn)行循環(huán)* */ / for
41、 (d=1; d=3 & flag; +d) x=a+(a+d)+(a+2*d)+(a+3*d); / /* *前四項(xiàng)的和前四項(xiàng)的和* */ / y=a*(a+d)*(a+2*d)*(a+3*d); / /* * 前四項(xiàng)的積前四項(xiàng)的積* */ / if (x=26 & y=880) / /* * 若滿足條件若滿足條件 * */ / for (i=0; i=20; +i) / /* * 輸出結(jié)果輸出結(jié)果 * */ / printf(%d, a+i*d); flag = 0; / /* * 控制退出二重循環(huán)控制退出二重循環(huán) * */ / 通過(guò)增加標(biāo)志變量可以有效地控制循環(huán)通過(guò)增加標(biāo)
42、志變量可以有效地控制循環(huán)616.5.4 return語(yǔ)句一一格式格式q 格式格式1:return;q 格式格式2:return (表達(dá)式表達(dá)式);功能功能qreturn語(yǔ)句使程序從被調(diào)用函數(shù)中返回到調(diào)語(yǔ)句使程序從被調(diào)用函數(shù)中返回到調(diào)用函數(shù)的調(diào)用處繼續(xù)運(yùn)行;用函數(shù)的調(diào)用處繼續(xù)運(yùn)行;二二如果如果return后跟一表達(dá)式,則該表達(dá)式的值后跟一表達(dá)式,則該表達(dá)式的值會(huì)從被調(diào)用函數(shù)中帶回到調(diào)用它的函數(shù),稱會(huì)從被調(diào)用函數(shù)中帶回到調(diào)用它的函數(shù),稱為返回值。為返回值。幾個(gè)程序片段int s=1,i=1;scanf(“%d”,&n);while(i0) pro*=x; return pro;63子函數(shù)子
43、函數(shù)power:計(jì)算計(jì)算x的的y次方次方不要用標(biāo)準(zhǔn)庫(kù)函數(shù)不要用標(biāo)準(zhǔn)庫(kù)函數(shù)pow處理整型處理整型int m=0; scanf(%d,&n);do m=m*10+n%10; n/=10; while(n!=0);64求反序數(shù)求反序數(shù)例:求最大最小數(shù)的算術(shù)運(yùn)算結(jié)果例:求最大最小數(shù)的算術(shù)運(yùn)算結(jié)果用例輸入:用例輸入:15,1,11,2,0,3,+,= 輸出:輸出:15+0=15 如何用字符輸入形式讀入一個(gè)整數(shù)?如何用字符輸入形式讀入一個(gè)整數(shù)? int s=0; char ch; while(ch=getchar()!=) if(ch=0&ch=9) s=s*10+ch-0; else 6
44、5int a,b;char ch;scanf (“%d%c%d”,&a,&ch,&b); scanf (“%c”,&ch); 輸入輸入 3 5 后,后,a為為3,b為為5,ch為為n66“字符字符”對(duì)對(duì)“%d”來(lái)講是非法輸入,但對(duì)來(lái)講是非法輸入,但對(duì)%c是合是合法的,空格和法的,空格和n等也將不作為輸入結(jié)束標(biāo)志。等也將不作為輸入結(jié)束標(biāo)志。char ch;while (ch= getchar( ) != = ) putchar ( ch );67如何判斷如何判斷“沒(méi)有任何一項(xiàng)匹配上沒(méi)有任何一項(xiàng)匹配上”?6869第6章 循環(huán)結(jié)構(gòu)的程序設(shè)計(jì) 循環(huán)的基本概念 while
45、語(yǔ)句 for語(yǔ)句 do_while語(yǔ)句 轉(zhuǎn)移語(yǔ)句 循環(huán)應(yīng)用70程序設(shè)計(jì)的一般步驟程序設(shè)計(jì)的一般步驟q 分析題意分析題意,明確問(wèn)題的性質(zhì)明確問(wèn)題的性質(zhì) 數(shù)值問(wèn)題數(shù)值問(wèn)題 / 非數(shù)值問(wèn)題非數(shù)值問(wèn)題q 建立問(wèn)題的描述模型建立問(wèn)題的描述模型 數(shù)學(xué)模型數(shù)學(xué)模型 / 過(guò)程模型過(guò)程模型q 設(shè)計(jì)設(shè)計(jì)/確定算法確定算法l數(shù)學(xué)問(wèn)題:數(shù)值分析數(shù)學(xué)問(wèn)題:數(shù)值分析l非數(shù)學(xué)問(wèn)題:數(shù)據(jù)結(jié)構(gòu)非數(shù)學(xué)問(wèn)題:數(shù)據(jù)結(jié)構(gòu) / 算法分析與設(shè)計(jì)算法分析與設(shè)計(jì) 一般方法:一般方法:窮舉窮舉 / 遞推遞推 / 遞歸遞歸 /.q 編程調(diào)試編程調(diào)試1. 分析運(yùn)行結(jié)果分析運(yùn)行結(jié)果716.6 循環(huán)應(yīng)用一一窮舉法窮舉法72例:百錢(qián)百雞問(wèn)題例:百錢(qián)百雞問(wèn)
46、題 中國(guó)古代數(shù)學(xué)家張丘建在他中國(guó)古代數(shù)學(xué)家張丘建在他的算經(jīng)中提出了著名的的算經(jīng)中提出了著名的“百錢(qián)百雞問(wèn)題百錢(qián)百雞問(wèn)題”:雞雞翁一,值錢(qián)五;雞母一,值錢(qián)三;雞雛三,值錢(qián)翁一,值錢(qián)五;雞母一,值錢(qián)三;雞雛三,值錢(qián)一;百錢(qián)買百雞,翁、母、雛各幾何一;百錢(qián)買百雞,翁、母、雛各幾何? 問(wèn)題分析與算法設(shè)計(jì)問(wèn)題分析與算法設(shè)計(jì) 設(shè):要買設(shè):要買x只公雞,只公雞,y只母雞,只母雞,z只小雞,可得只小雞,可得到方程到方程: x + y + z = 100 5 x + 3 y + z / 3 = 100 取值范圍:取值范圍:0 = x, y, z = 100 可以采用窮舉法求解:將變量可以采用窮舉法求解:將變量
47、x、y、z 的所有的所有取值可能代入方程進(jìn)行計(jì)算取值可能代入方程進(jìn)行計(jì)算73int main( ) int x,y,z,j=0; 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=100) printf(%2d:cock=%2d hen=%2d chicken=%2dn, +j,x,y,z);z=100滿足方滿足方程?程?Y N輸出輸出z+z = 0y=100y+y = 0 x=100 x+x = 0開(kāi)始開(kāi)始結(jié)束結(jié)束74丟失重要條件:丟失重要條件:z 應(yīng)該能夠被應(yīng)該能夠被3
48、整除。整除。int main( ) int x, y, z, j=0; for(x=0; x=20; x+) for(y=0; y=33; y+) for(z=0; z=100; z+) if(z%3=0&x+y+z=100&5*x+3*y+z/3=100) printf(%2d:cock=%2d hen=%2d chicken=%2dn, +j,x,y,z) ;運(yùn)行程序,正確的結(jié)果:運(yùn)行程序,正確的結(jié)果: 1: cock= 0 hen=25 chicken=75 2: cock= 4 hen=18 chicken=78 3: cock= 8 hen=11 chicken=81
49、 4: cock=12 hen= 4 chicken=84z+=3)75優(yōu)化程序:優(yōu)化程序:for(x=0; x=20; x+) for(y=0; y=33; y+) for(z=0; z=100; z+) if(z%3=0&x+y+z=100 & 5*x+3*y+z/3=100) printf(%2d:cock=%2d hen=%2d chicken=%2dn, +j,x,y,z);再優(yōu)化:再優(yōu)化:for(x=0; x=20; x+) for(y=0; y=(100-5*x)/3; y+) z=100-x-y; if( z%3=0 & 5*x+3*y+z/3=100)
50、 printf(%2d:cock=%2d hen=%2d chicken=%2dn, +j,x,y,z); 76例:新娘和新郎例:新娘和新郎問(wèn)題:?jiǎn)栴}:三對(duì)情侶參加婚禮,三個(gè)新郎為三對(duì)情侶參加婚禮,三個(gè)新郎為A、B、C,三個(gè),三個(gè)新娘為新娘為X、Y、Z。有人不知道誰(shuí)和誰(shuí)結(jié)婚,于是詢問(wèn)了。有人不知道誰(shuí)和誰(shuí)結(jié)婚,于是詢問(wèn)了其中的三位,聽(tīng)到的回答是這樣的:其中的三位,聽(tīng)到的回答是這樣的:說(shuō)他將和結(jié)婚;說(shuō)他將和結(jié)婚;說(shuō)她的未婚夫是;說(shuō)他將和結(jié)婚。說(shuō)她的未婚夫是;說(shuō)他將和結(jié)婚。這人聽(tīng)后知這人聽(tīng)后知道他們?cè)陂_(kāi)玩笑,道他們?cè)陂_(kāi)玩笑,全是假話全是假話。請(qǐng)編程找出誰(shuí)將和誰(shuí)結(jié)婚。請(qǐng)編程找出誰(shuí)將和誰(shuí)結(jié)婚。問(wèn)題分析與
51、算法設(shè)計(jì):?jiǎn)栴}分析與算法設(shè)計(jì): 設(shè):設(shè):A、B、C三人用三人用1、2、3表示,將表示,將X和和A結(jié)婚表示結(jié)婚表示為為x=1,將,將Y不與不與A結(jié)婚表示為結(jié)婚表示為y!=1。則:。則: x!=1 A不與不與X結(jié)婚結(jié)婚 x!=3 X的未婚夫不是的未婚夫不是C z!=3 C不與不與Z結(jié)婚結(jié)婚題意還隱含:題意還隱含:x!=y 且且 x!=z 且且 y!=z77int main ( ) int x, y, z; for (x=1; x=3; x+) / /* *窮舉窮舉X的全部可能配偶的全部可能配偶* */ / for (y=1; y=3; y+) / /* *窮舉窮舉Y的全部可能配偶的全部可能配偶*
52、*/ / for (z=1; z0;nm10的整數(shù)的整數(shù)79int main ( ) int x, y, m, flag; / /* * flag:標(biāo)志變量:標(biāo)志變量 * */ / for ( x=0,flag=1; flag ; x+ ) / /* * 窮舉窮舉x * */ / y = 100+x; / /* * 計(jì)算計(jì)算y * */ / for ( m=10; m*m y; m+ ) ; if ( m*m = y ) / /* *判斷判斷y是否為一個(gè)數(shù)的平方是否為一個(gè)數(shù)的平方* */ / for ( ; m*m y+68; m+ ) ; if ( m*m = y+68 ) / /* * 判
53、斷判斷 y+68 * */ / printf(%dn, x); flag = 0; / /* * flag置置0,結(jié)束循環(huán),結(jié)束循環(huán) * */ / 窮舉窮舉x、m、n80int main ( ) int y, m, flag; for ( y=101,flag=1; flag ; y+ ) / /* * 窮舉窮舉y * */ / for ( m=10; m*m y; m+ ) ; if ( m*m = y ) for ( ; m*m y+68; m+ ) ; if ( m*m = y+68 ) printf(%dn, y-100); flag = 0; 窮舉窮舉y、m、n81int main
54、( ) int m, n, flag; / /* * flag:標(biāo)志變量:標(biāo)志變量 * */ / for ( m=10,flag=1; flag; m+ ) / /* * 通過(guò)窮舉通過(guò)窮舉m,直接構(gòu)造平方數(shù),直接構(gòu)造平方數(shù)y * */ / for ( n=10; n*n 0) printf (“* *”); n-;printf (“n”);86例:輸出邊長(zhǎng)為例:輸出邊長(zhǎng)為 n 的正方型的正方型 例如,輸入例如,輸入 n=4,輸出如下圖形:,輸出如下圖形:* * * * * * * * * * * * * * * * * * * * * * * * * * * * *算法分析與設(shè)計(jì):算法分析與設(shè)
55、計(jì):1. 輸入輸入 n ;2. 重復(fù)輸出重復(fù)輸出 n行,每行輸出行,每行輸出 n 個(gè)個(gè) * *;加細(xì)一:加細(xì)一:1. 輸入輸入 n ;2. for ( i=1; i=n; i+ ) 輸出一行中的輸出一行中的 n 個(gè)個(gè) * * ;87加細(xì)二:加細(xì)二:1. 輸入輸入n;2. for ( i=1; i=n; i+ )輸出輸出 n 個(gè)個(gè) * * ;換新行換新行;加細(xì)三:加細(xì)三:1.輸入輸入n;2. for ( i=1; i=n; i+ )for ( j=1; j=n; j+ ) printf (“* *”);printf(“n”) ;88l整理,得到程序如下:整理,得到程序如下:int main (
56、) int m, i, j; scanf( “%d”, &n ); for ( i=1; i=n; i+ ) / /* * 控制輸出控制輸出n行行 * */ / for ( j=1; j=n; j+ ) / /* *輸出一行中的輸出一行中的n個(gè)個(gè)* *號(hào)號(hào)* */ / printf(“* *”); printf(“n”); 分析方法分析方法逐步求精法逐步求精法 對(duì)于比較復(fù)雜問(wèn)題,不可能一下得到程序,對(duì)于比較復(fù)雜問(wèn)題,不可能一下得到程序,可以先將簡(jiǎn)單的部分明確出來(lái),再逐步對(duì)復(fù)雜可以先將簡(jiǎn)單的部分明確出來(lái),再逐步對(duì)復(fù)雜部分進(jìn)行細(xì)化,一步一步推出完整程序。部分進(jìn)行細(xì)化,一步一步推出完整程序。
57、89例:輸出邊長(zhǎng)為例:輸出邊長(zhǎng)為 n 的平行四邊形的平行四邊形 例如,輸入例如,輸入 n=4,輸出如下圖形:,輸出如下圖形: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 算法分析與設(shè)計(jì):算法分析與設(shè)計(jì): 在正方型每行在正方型每行* *號(hào)的前面先多輸出若干個(gè)空格。號(hào)的前面先多輸出若干個(gè)空格。對(duì)于第對(duì)于第 i 行,行,1=i=n,則應(yīng)先輸出,則應(yīng)先輸出 個(gè)空格。個(gè)空格。 n-i90int main ( ) int n, i, j; scanf( “%d”, &n ); for ( i=1; i=n; i+
58、) / /* * 控制輸出控制輸出 n 行行 * */ / for ( j=1; j=n-i; j+) / /* *控制輸出控制輸出n-i個(gè)空格個(gè)空格* */ / printf(“ ”); for ( j=1; j=n; j+ ) / /* *輸出一行中的輸出一行中的n個(gè)個(gè)* *號(hào)號(hào)* */ / printf(“* *”); printf(“n”); 關(guān)鍵在于找出每行要關(guān)鍵在于找出每行要輸出的空格和輸出的空格和* *的個(gè)數(shù)的個(gè)數(shù)91i = 1nj = ii = 1ni + j = n+1* * * * * * * * * * * * * * * * * * * * * * * * * * *
59、* * * * * * * * *j 控制輸出控制輸出i個(gè)個(gè)* *j :i-1 個(gè)個(gè) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *j :n-i+1 個(gè)個(gè)* *j :n-i 個(gè)個(gè) j :n-i+1個(gè)個(gè) * *j :i 個(gè)個(gè)* *j = n-i+192例:輸出例:輸出n行用行用* *組成的等腰三角形組成的等腰三角形 例如,輸入例如,輸入 n=4,輸出如下圖形:,輸出如下圖形: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *j
60、= 1n-i j = 12i-1 * * (“n”)i = 1ni個(gè)個(gè)* *i-1個(gè)個(gè)* *93例:輸出邊長(zhǎng)為例:輸出邊長(zhǎng)為n的菱形的菱形 例如,輸入例如,輸入 n=4,輸出如下圖形:,輸出如下圖形: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *j = 1n-i j = 12i-1 * *i = 1nj = 1n-i j = 12i-1 * *i = n-11i = 1 2 3 4 3 2 194例:輸出邊長(zhǎng)為例:輸出邊長(zhǎng)為n的空心菱形的空心菱形 例如,輸入例如,輸入 n=4,輸出如下圖形:,輸出如下圖形: * * * * * * * * * * * * * * * * * * * * * * *j = 1n-i j = 12i-1如果如果j=1或或2i-1 * * 其它其它 i
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廈門(mén)市金雞亭中學(xué)2026年校園招聘?jìng)淇碱}庫(kù)完整答案詳解
- 養(yǎng)老院九防制度
- 公共交通信息化建設(shè)管理制度
- 會(huì)議決議執(zhí)行與監(jiān)督制度
- 2026年永康市科學(xué)技術(shù)局工作人員招聘?jìng)淇碱}庫(kù)參考答案詳解
- 2026年柳州市航鷹中學(xué)招聘語(yǔ)文教師招聘?jìng)淇碱}庫(kù)完整答案詳解
- 企業(yè)績(jī)效評(píng)估與獎(jiǎng)懲制度
- 上海七十邁數(shù)字科技2026校園招聘?jìng)淇碱}庫(kù)及答案詳解1套
- 2026年濮陽(yáng)市范縣第二小學(xué)音樂(lè)教師招聘?jìng)淇碱}庫(kù)及一套答案詳解
- 養(yǎng)老院入住老人突發(fā)疾病應(yīng)急處理制度
- 足療店消防安全制度
- 房屋自愿放棄繼承協(xié)議
- 智能安全帽解決方案-智能安全帽
- 2024年版煙霧病和煙霧綜合征診斷與治療專家共識(shí)(完整版)
- 研學(xué)旅行指導(dǎo)手冊(cè)
- 大學(xué)生社會(huì)支持評(píng)定量表附有答案
- 植入式靜脈給藥裝置(輸液港)-中華護(hù)理學(xué)會(huì)團(tuán)體標(biāo)準(zhǔn)2023
- GB/T 2988-2023高鋁磚
- 東風(fēng)7電路圖解析
- 數(shù)字填圖系統(tǒng)新版(RgMap2.0)操作手冊(cè)
- JJF 1069-2012 法定計(jì)量檢定機(jī)構(gòu)考核規(guī)范(培訓(xùn)講稿)
評(píng)論
0/150
提交評(píng)論