程序基本結(jié)構(gòu)_第1頁(yè)
程序基本結(jié)構(gòu)_第2頁(yè)
程序基本結(jié)構(gòu)_第3頁(yè)
程序基本結(jié)構(gòu)_第4頁(yè)
程序基本結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩88頁(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)介

1、 第一章中我們學(xué)習(xí)了順序結(jié)構(gòu)的第一章中我們學(xué)習(xí)了順序結(jié)構(gòu)的c c程序設(shè)計(jì)方法,程序設(shè)計(jì)方法,但是實(shí)際應(yīng)用中,很多問(wèn)題僅有順序結(jié)構(gòu)的方法是但是實(shí)際應(yīng)用中,很多問(wèn)題僅有順序結(jié)構(gòu)的方法是無(wú)法解決的。無(wú)法解決的。問(wèn)題問(wèn)題1:輸入三個(gè)整數(shù),按從大到小的順序輸出。:輸入三個(gè)整數(shù),按從大到小的順序輸出。問(wèn)題問(wèn)題2:編寫(xiě)程序計(jì)算:編寫(xiě)程序計(jì)算:1+2+3+1001+2+3+100。 s1:輸入輸入3個(gè)整數(shù),個(gè)整數(shù),分別賦值給分別賦值給a,b,cs2: 如果如果ab, 則則a b bs3: 如果如果ac,ac,則則a ac cs4: s4: 如果如果bc,b, .)非反后來(lái)自加減非反后來(lái)自加減; (! + -)

2、負(fù)類指針有地址負(fù)類指針有地址, (-, 類型轉(zhuǎn)換類型轉(zhuǎn)換, *, &) 長(zhǎng)度唯一右在前長(zhǎng)度唯一右在前. (sizeof ,單目運(yùn)算,從右至左單目運(yùn)算,從右至左)先乘除,再求余先乘除,再求余, (*, /, %)加減后,左右移加減后,左右移, (+, -, )關(guān)系運(yùn)算左為先關(guān)系運(yùn)算左為先. (, , )等于還是不等于等于還是不等于, (=, !=)按位運(yùn)算與異或按位運(yùn)算與異或; (&, , | )邏輯與,邏輯或邏輯與,邏輯或, (&, | )條件運(yùn)算右至左條件運(yùn)算右至左. (? : )賦值運(yùn)算雖然多賦值運(yùn)算雖然多, (=, +=, -=, *=, /=, %=,=, 全體單目第二全體單目第二;

3、/所有的單目運(yùn)算符比如所有的單目運(yùn)算符比如+ - +(正正) -(負(fù)負(fù)) 指針運(yùn)算指針運(yùn)算*&乘除余三乘除余三,加減四加減四; /這個(gè)這個(gè)“余余”是指取余運(yùn)算即是指取余運(yùn)算即%移位五,關(guān)系六移位五,關(guān)系六; /移位運(yùn)算符:移位運(yùn)算符: ,關(guān)系:,關(guān)系: = = 等等等于等于(與與)不等排第七不等排第七; /即即= !=位與異或和位或位與異或和位或; /這幾個(gè)都是位運(yùn)算這幾個(gè)都是位運(yùn)算: 位與位與(&)異或異或()位或位或(|) “三分天下三分天下”八九十八九十; 邏輯或跟與邏輯或跟與; /邏輯運(yùn)算符邏輯運(yùn)算符:| 和和 &十二和十一十二和十一; /注意順序注意順序:優(yōu)先級(jí)優(yōu)先級(jí)(|) 底于底于

4、 優(yōu)先級(jí)優(yōu)先級(jí)(&) 條件高于賦值條件高于賦值, /三目運(yùn)算符優(yōu)先級(jí)排到三目運(yùn)算符優(yōu)先級(jí)排到 13 位只比賦值運(yùn)算符和位只比賦值運(yùn)算符和“,”高高 /需要注意的是賦值運(yùn)算符很多!需要注意的是賦值運(yùn)算符很多!逗號(hào)運(yùn)算級(jí)最低逗號(hào)運(yùn)算級(jí)最低! /逗號(hào)運(yùn)算符優(yōu)先級(jí)最低逗號(hào)運(yùn)算符優(yōu)先級(jí)最低 b bs3:s3:輸出輸出a,ba,b一般形式:一般形式:流程圖:流程圖:#include void main( ) int a,b,temp; printf(input a,b:); scanf(%d%d,&a,&b); if (ab) /* 判斷判斷a、b的關(guān)系的關(guān)系 */ temp=a; a=b; b=temp

5、; /* a大于大于b,則交換則交換a,b的值的值 */ printf(“result is %d,%dn,a,b); /*按從小到大順序按從小到大順序輸出輸出 */例例2.1的的c語(yǔ)言程序如下:語(yǔ)言程序如下:#include void main() int x1,x2,x3,temp; scanf(“%d%d%d”,&x1,&x2,&x3); if(x1x2) temp=x1;x1=x2;x2=temp; if(x1x3) temp=x1;x1=x3;x3=temp; if(x2x3) temp=x2;x2=x3;x3=temp; printf(“%d,%d,%d”,x1,x2,x3);例例

6、2.32.3: 輸入兩個(gè)整數(shù),輸出其中較大的一個(gè)。輸入兩個(gè)整數(shù),輸出其中較大的一個(gè)。 , 否則輸出否則輸出b b一般形式:一般形式:流程圖:流程圖:#includevoid main() int x1,x2; scanf(“%d%d”,&x1,&x2); if(x1x2) printf(“%dn”,x1); else printf(“%dn”,x2);提示:閏年的判斷,能被4整除不能被100整除,或者能被400整除的都是閏年。一般形式:一般形式:流程圖:流程圖:if (ab) t=a; a=b; b=t; if (a+bc & b+ca & c+ab) s=1.0/2*(a+b+c); are

7、a=sqrt(s*(s-a)*(s-b)*(s-c); printf(area=%.2fn, area); else printf(it is not a trilateral!n);程序程序1:if (x=0) if (x0) y=1; else y=0;else y=-1;y=- -1y=0y=1真真假假真真假假eg502.c程序程序3:y=0;if (x!=0) if (x0) y=1; else y=-1;y=1y=-1真真真真假假假假例:例: 求一元二次方程求一元二次方程ax2+bx+c=0的根,的根,a,b,c由鍵由鍵盤(pán)輸入。盤(pán)輸入。分析:對(duì)于一元二次方程有以下幾種可能:分析:對(duì)于

8、一元二次方程有以下幾種可能: a=0,不是二次方程;,不是二次方程; b2-4ac=0,有兩個(gè)相等的實(shí)根;,有兩個(gè)相等的實(shí)根; b2-4ac0,有兩個(gè)不等的實(shí)根;,有兩個(gè)不等的實(shí)根; b2-4acb?(a=100):(b=100) ab?printf(“”%dn”,a):printf(“%dn”,b)(4)表達(dá)式)表達(dá)式1、表達(dá)式、表達(dá)式2和表達(dá)式和表達(dá)式3的類型都可以不同。的類型都可以不同。表達(dá)式值的類型是表達(dá)式表達(dá)式值的類型是表達(dá)式2、3中類型較高的類型。中類型較高的類型。例如:例如:xy?1:1.5 表達(dá)式值是表達(dá)式值是double類型類型(1)優(yōu)先級(jí)高于賦值,低于關(guān)系運(yùn)算符和算數(shù)運(yùn)算符

9、)優(yōu)先級(jí)高于賦值,低于關(guān)系運(yùn)算符和算數(shù)運(yùn)算符例:例:x= ab? a:b+1;x= (ab)? a:(b+1);ab? a : cd? c : dab? a : (cd? c : d)if (ab) x=a;else x=b+1;例例2.7:輸入一個(gè)字符,如果是大寫(xiě)字母,轉(zhuǎn)換為小寫(xiě),:輸入一個(gè)字符,如果是大寫(xiě)字母,轉(zhuǎn)換為小寫(xiě),如果不是不轉(zhuǎn)換。最后輸出。如果不是不轉(zhuǎn)換。最后輸出。#includevoid main() char ch; scanf(“%c”,&ch); /*ch=getchar();*/ ch=(ch=a&ch=90) printf(a); else if(score=80) p

10、rintf(b); else if(score=70) printf(c); else if(score=60) printf(d); else printf(e);void main( ) int score,temp; printf(input score of student:); scanf(%d,&score); temp=score/10; switch(temp) case 10: case 9: printf(a); break; case 8: printf(b); case 7: printf(c); break; case 6: printf(d); break; def

11、ault: printf(e); break;簡(jiǎn)單選擇界面的編程。從鍵盤(pán)輸入整數(shù),輸出不同的字符串:輸入1,輸出good morning;輸入2,輸出good afternoon;輸入3,輸出good evening;輸入4,輸出good night;輸入其它數(shù)字,輸出bye-bye。問(wèn)題問(wèn)題2:編寫(xiě)程序計(jì)算:編寫(xiě)程序計(jì)算:1+2+3+100。 2.3 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)2.3.1 循環(huán)結(jié)構(gòu)的引出循環(huán)結(jié)構(gòu)的引出算法算法1:直接寫(xiě)出算式:直接寫(xiě)出算式 s1: result=1+2+3+4+5+100 循環(huán)控制結(jié)構(gòu)一般由四部分組成:、進(jìn)入條件、退出條件、循環(huán)體:循環(huán)體需要完成的功能(需要重復(fù)執(zhí)行的語(yǔ)

12、句) 、循環(huán)變量的修正 根據(jù)進(jìn)入條件和退出條件,循環(huán)控制結(jié)構(gòu)可以分為三種形式:、while結(jié)構(gòu):退出條件是進(jìn)入條件的反條件。即滿足 條件時(shí)進(jìn)入,重復(fù)執(zhí)行循環(huán)體直到進(jìn)入的條件不再滿足為止。、do-while結(jié)構(gòu):無(wú)條件進(jìn)入,執(zhí)行一次循環(huán)體后再判斷是否滿足再進(jìn)入循環(huán)的條件。、for結(jié)構(gòu):與while結(jié)構(gòu)類似,但結(jié)構(gòu)更緊湊。適用于循環(huán)之前循環(huán)次數(shù)就已經(jīng)確定的情況。使用形式:while(表達(dá)式) 語(yǔ)句;真(非0)表達(dá)式成立嗎?語(yǔ)句假(0)特點(diǎn):先判斷表達(dá)式,后執(zhí)行語(yǔ)句2.3.22.3.2 while while 語(yǔ)句語(yǔ)句例:求1+2+3+100 i=1,sum=0i=100sum=sum+ii=i+1

13、假真i=1,sum=0當(dāng)i=100sum=sum+ii=i+1void main()int i, sum;i=1; sum=0;while (i=100) sum=sum+i; i+;printf (“sum=%dn”, sum);注意:while起作用的范圍注意:要有改變循環(huán)結(jié)束條件的語(yǔ)句void main()int i, n, sum;i=1; sum=0;while (i=n) sum=sum+i; i+;printf (“sum=%dn”, sum);計(jì)算 1+2+3+n(n為任意正整數(shù)) scanf(%d,&n);思考問(wèn)題:循環(huán)結(jié)束后循環(huán)變量的值是多少?void main()int

14、i , n, sum;i=1; sum=0;while (i=n) sum=sum+i; i=i+2;printf (“sum=%dn”, sum); scanf(%d,&n);計(jì)算 1+3+5+7+n(n為奇數(shù))例:輸入一個(gè)字符,如果是大寫(xiě)字母,轉(zhuǎn)換為小寫(xiě),如果不例:輸入一個(gè)字符,如果是大寫(xiě)字母,轉(zhuǎn)換為小寫(xiě),如果不是則不轉(zhuǎn)換。輸入是則不轉(zhuǎn)換。輸入“0”“0”結(jié)束程序。結(jié)束程序。#include void main() char ch; while(ch=getchar()!=0) ch=(ch=a&ch=z)?(ch+32):ch; printf(“%c”,ch); 2.3.3 do-whi

15、le 2.3.3 do-while 語(yǔ)句語(yǔ)句使用形式: do 循環(huán)體語(yǔ)句 while(表達(dá)式);特點(diǎn):先執(zhí)行循環(huán)體語(yǔ)句,后判斷表達(dá)式循環(huán)體語(yǔ)句表達(dá)式0(假)非0(真)注意:、循環(huán)部分為多個(gè)語(yǔ)句時(shí),必須用大括號(hào)構(gòu)成復(fù)合語(yǔ)句;、循環(huán)體中應(yīng)有使循環(huán)趨于結(jié)束的語(yǔ)句例:求1+2+3+100 sum=0i=1sum=sum+ii=i+1i=100假真int i, sum;i=1; sum=0;do sum=sum+i; i+;while (i=100);printf (“%dn”, sum);void main()while 和 do-while 循環(huán)的比較(?不同之處)main() int sum=0,

16、 i; scanf (“%d”, &i); while (i=10) sum=sum+i; i+; printf (“sum=%dn”, sum); main() int sum=0, i; scanf (“%d”, &i); do sum=sum+i; i+; while (i=10); printf (“sum=%dn”, sum); 2.3.4 for 語(yǔ)句語(yǔ)句一般形式: (表達(dá)式1;表達(dá)式2;表達(dá)式3) 語(yǔ)句一般使用格式:for(循環(huán)變量賦初值;循環(huán)條件表達(dá)式;循環(huán)變量修正值) 循環(huán)體;執(zhí)行過(guò)程:(1)求解表達(dá)式1(2)求解表達(dá)式2,若其值為真(值為非0),則執(zhí)行for語(yǔ)句中指定的內(nèi)嵌

17、語(yǔ)句,然后執(zhí)行(3)。若為假(值為0),則結(jié)束循環(huán),轉(zhuǎn)到(5)。(3)求解表達(dá)式3(4)轉(zhuǎn)回執(zhí)行(2)(5)循環(huán)結(jié)束,執(zhí)行for語(yǔ)句下面的一個(gè)語(yǔ)句(表達(dá)式1;表達(dá)式2;表達(dá)式3) 語(yǔ)句例:求1+2+3+100 void main( ) int i,sum=0; for(i=1;i=100;i+) sum=sum+i; printf(“%d”,sum);循環(huán)變量賦初值循環(huán)變量賦初值循環(huán)條件循環(huán)條件循環(huán)變量修正循環(huán)變量修正循環(huán)體循環(huán)體例:計(jì)算某個(gè)班英語(yǔ)成績(jī)的平均分, 學(xué)生人數(shù)和每個(gè)學(xué)生的成績(jī)由鍵盤(pán)輸入。void main() int i,n; float s,sum,ave; sum=0; for

18、 ( i=1; i=n ; i+ ) ave=sum/n; printf(“ave is %f”,ave);scanf(%d, &s);sum=sum+s ;scanf(%d, &n);想想這條語(yǔ)句是否能放到循環(huán)體內(nèi)?for語(yǔ)句的三個(gè)表達(dá)式都可以缺省,但兩個(gè)分號(hào)不能缺??;如果在for語(yǔ)句之前已經(jīng)給循環(huán)變量賦初值,則for語(yǔ)句的循環(huán)變量賦初值部分可以省略,但其后得分號(hào)不省略; 也可以將循環(huán)變量修正值的工作納入到循環(huán)體中去做;說(shuō)明:說(shuō)明:i=1;for ( ; i=10; i+) m=m*i;如:for (i=1; i=10; ) m=m*i; i+;如:也可以省略for語(yǔ)句的第一和第三部分;i=

19、1;for( ; i=10; ) m=m*i ; i+;如:for ( ; ; )但是注意不能兩處同時(shí)修正值!通常不缺省表達(dá)式2;有時(shí)缺省表達(dá)式2,此時(shí)不判斷循環(huán)條件,循環(huán)將無(wú)終止的執(zhí)行,即認(rèn)為表達(dá)式2始終為真;在循環(huán)體內(nèi)用if和break控制循環(huán)結(jié)束。for (i=1; ; i+) if (條件) break; sum=sum+i; 如果有多個(gè)循環(huán)變量賦初值,或多個(gè)循環(huán)變量值要修正,應(yīng)在各變量之間用逗號(hào)隔開(kāi)。for(i=1, j=10; i=j; i+, j- -) k=i+j;如:循環(huán)條件表達(dá)式一般是關(guān)系表達(dá)式或邏輯表達(dá)式,但也可以是數(shù)值表達(dá)式或字符表達(dá)式,每次系統(tǒng)判斷該表達(dá)式的結(jié)果不為0

20、,就執(zhí)行一遍循環(huán)體。for(m=0;( c=getchar( ) ) != !;) m=m+c;如:考慮問(wèn)題:運(yùn)行程序時(shí)如何停止循環(huán)?for、while、dowhile的互相轉(zhuǎn)化i=1;sum=0;do sum=sum+i; i+;while(i=100);for (i=1; i=100; i+) sum=sum+i;i=1; sum=0;while(i=100) sum=sum+i; i+;輸出所有的水仙花數(shù)。輸出所有的水仙花數(shù)。(水仙花數(shù)就是一個(gè)三位數(shù),這個(gè)數(shù)正好等于該數(shù)的(水仙花數(shù)就是一個(gè)三位數(shù),這個(gè)數(shù)正好等于該數(shù)的每一位的立方和。每一位的立方和。 例如:例如: 153=1*1*1+5*

21、5*5+3*3*3)void main()for()a=i/100;c=i%10; 補(bǔ)充:循環(huán)的嵌套補(bǔ)充:循環(huán)的嵌套一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱為循環(huán)嵌套。內(nèi)層的循環(huán)中還可以嵌套循環(huán),構(gòu)成多重循環(huán)。while ( ) while ( ) for ( ; ; ) for ( ; ; ) do do while ( ); while ( );while ( ) for ( ; ; ) for ( ; ; ) do while( ); while ( ) do while( ); 例:輸出如圖所示的矩形:例:輸出如圖所示的矩形:* * * * * * * * * * * * * * *

22、 * *void main( ) printf(*n); printf(*n); printf(*n); printf(*n);void main( ) int i, j ; i=1; while (i=4) while ( j=5 ) printf(“*”); j+;j=1;printf(“n”);i+;#include void main( ) int i , j ; i=1; while (i=4) for (j=1; j=5;j+) putchar(*); putchar(n); i+; #include void main( ) int i , j ; for ( i=1; i=4;

23、 i+) for (j=1; j=5; j+) putchar(*); putchar(n); 例:輸出如圖所示的矩形:例:輸出如圖所示的矩形:* * * * * * * * * * * * * * * * *內(nèi)外層循內(nèi)外層循環(huán)的循環(huán)環(huán)的循環(huán)控制變量控制變量不能重名不能重名例:輸出如圖所示的三角形:例:輸出如圖所示的三角形:* * * * * * * *特點(diǎn):第i行有i個(gè)星號(hào)#include void main( ) int i , j ; for( i=1; i=4; i+) for (j=1; ; j+) putchar(*); putchar(n); j=i例:輸出如圖所示的等腰三角形:

24、例:輸出如圖所示的等腰三角形:* * * * * * * * * * * * *特點(diǎn):一共有4行,第i行有2i-1個(gè)星號(hào);第i行的第1個(gè)星號(hào)前有4-i個(gè)空格#include main( ) int i , j ; for( i=1; i=4; i+) for (j=1; j=4-i; j+) putchar(32); for (j=1; j=2*i-1; j+) putchar(*); putchar(n); 例:輸出如圖所示的菱形:例:輸出如圖所示的菱形:* * * * * * * * * * * * * * * * * * *分析:將圖形分為上下兩部分分別輸出!* * * * * * *

25、* * * * * * * * * * * *for ( i=1; i=4 ; i+) for ( j=1; j=4-i ; j+) putchar( ); for ( k=1; k=1 ; i- -) for ( j=1; j=4-i ; j+) putchar( ); for ( k=1; k=2*i-1 ; k+) putchar(*); putchar(n); 幾種循環(huán)的比較幾種循環(huán)的比較、c語(yǔ)言中的三種循環(huán)結(jié)構(gòu)都由表達(dá)式控制執(zhí)行一個(gè)循環(huán)語(yǔ)言中的三種循環(huán)結(jié)構(gòu)都由表達(dá)式控制執(zhí)行一個(gè)循環(huán)體,體,一般情況下可以相互代替一般情況下可以相互代替;、用、用while和和do-while循環(huán)時(shí),循環(huán)

26、變量初始化的操作應(yīng)循環(huán)時(shí),循環(huán)變量初始化的操作應(yīng)在在while和和do-while語(yǔ)句之前完成;而語(yǔ)句之前完成;而for語(yǔ)句一般在表達(dá)式語(yǔ)句一般在表達(dá)式1中實(shí)現(xiàn)循環(huán)變量的初始化;中實(shí)現(xiàn)循環(huán)變量的初始化;、當(dāng)、當(dāng)循環(huán)次數(shù)及控制條件循環(huán)次數(shù)及控制條件要要在程序運(yùn)行過(guò)程中確定在程序運(yùn)行過(guò)程中確定時(shí),時(shí),選用選用while或或do-while語(yǔ)句;語(yǔ)句;、在、在初值、增量及控制條件明顯初值、增量及控制條件明顯,或,或循環(huán)次數(shù)已經(jīng)給定循環(huán)次數(shù)已經(jīng)給定的情況下,選用的情況下,選用for語(yǔ)句;語(yǔ)句;、在循環(huán)的執(zhí)行過(guò)程中,應(yīng)、在循環(huán)的執(zhí)行過(guò)程中,應(yīng)不斷的改變循環(huán)控制表達(dá)式不斷的改變循環(huán)控制表達(dá)式的值的值,以便

27、逐步形成使它為,以便逐步形成使它為0 0的條件,否則將可能出現(xiàn)死的條件,否則將可能出現(xiàn)死循環(huán);循環(huán);、三種循環(huán)可以相互嵌套,形成多重循環(huán),外循環(huán)可以、三種循環(huán)可以相互嵌套,形成多重循環(huán),外循環(huán)可以包含多個(gè)或多重內(nèi)循環(huán),包含多個(gè)或多重內(nèi)循環(huán),循環(huán)之間可以并列但不能相交循環(huán)之間可以并列但不能相交,并列的循環(huán)控制變量可以同名并列的循環(huán)控制變量可以同名,但,但嵌套的循環(huán)控制變量不嵌套的循環(huán)控制變量不能同名能同名;、不允許不允許用其它的控制語(yǔ)句用其它的控制語(yǔ)句把程序流程從循環(huán)體外轉(zhuǎn)入把程序流程從循環(huán)體外轉(zhuǎn)入循環(huán)體內(nèi)循環(huán)體內(nèi),但必要時(shí)可以用,但必要時(shí)可以用breakbreak、gotogoto等語(yǔ)句把流程

28、從等語(yǔ)句把流程從循環(huán)體內(nèi)轉(zhuǎn)到循環(huán)體外。循環(huán)體內(nèi)轉(zhuǎn)到循環(huán)體外。2.4.1 break語(yǔ)句語(yǔ)句1 1、格式:、格式: break;2、功能:、功能: 中止當(dāng)前循環(huán)語(yǔ)句或中止當(dāng)前循環(huán)語(yǔ)句或switch語(yǔ)句的執(zhí)行語(yǔ)句的執(zhí)行3、說(shuō)明:、說(shuō)明:、若是多重循環(huán),、若是多重循環(huán),break只能使流程跳出離只能使流程跳出離break最近的一層;最近的一層;、break只用于只用于switch語(yǔ)句語(yǔ)句和和循環(huán)語(yǔ)句循環(huán)語(yǔ)句。例例2.14:計(jì)算:計(jì)算 r=1到到 r=10時(shí)的圓面積,直到面積大于時(shí)的圓面積,直到面積大于100為止為止#include void main( ) float r, area; for (r

29、 =1; r 100) break; printf(%6.2fn, area); 2.4.2continue語(yǔ)句語(yǔ)句1、格式:、格式: continue;2、功能:、功能: 提前結(jié)束本次循環(huán)體的執(zhí)行提前結(jié)束本次循環(huán)體的執(zhí)行(不再執(zhí)行循環(huán)體中(不再執(zhí)行循環(huán)體中continue后面的語(yǔ)句),后面的語(yǔ)句),接著進(jìn)行下一次是否執(zhí)行接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定循環(huán)的判定3、說(shuō)明:、說(shuō)明:、continue語(yǔ)句只能用于語(yǔ)句只能用于循環(huán)語(yǔ)句循環(huán)語(yǔ)句中,它是一中,它是一種具有特殊功能的轉(zhuǎn)移語(yǔ)句;種具有特殊功能的轉(zhuǎn)移語(yǔ)句;、continue與與break不同不同:continue語(yǔ)句只結(jié)束語(yǔ)句只結(jié)束本次循環(huán)

30、本次循環(huán),而不是終止整個(gè)循環(huán)的執(zhí)行;而,而不是終止整個(gè)循環(huán)的執(zhí)行;而break語(yǔ)語(yǔ)句則結(jié)束整個(gè)循環(huán)句則結(jié)束整個(gè)循環(huán),不再判斷循環(huán)條件是否成立。,不再判斷循環(huán)條件是否成立。例例2.15:把:把10到到20之間能被之間能被3整除的數(shù)輸出整除的數(shù)輸出#includevoid main( ) int n; for (n=10; n=20; n+) if (n%3!=0) continue; printf(%d , n); printf(“n%dn”,n)經(jīng)典問(wèn)題:判斷素?cái)?shù)經(jīng)典問(wèn)題:判斷素?cái)?shù)素?cái)?shù)是除了素?cái)?shù)是除了1和它自身不能被任一個(gè)數(shù)整除的數(shù)。和它自身不能被任一個(gè)數(shù)整除的數(shù)。算法提示:算法提示:1、可以

31、讓除數(shù)從、可以讓除數(shù)從2n1逐個(gè)去除該數(shù)逐個(gè)去除該數(shù)n,判判斷是否被其中的任何一個(gè)整數(shù)整除,如果是,則說(shuō)明不是斷是否被其中的任何一個(gè)整數(shù)整除,如果是,則說(shuō)明不是素?cái)?shù)。如果一直都沒(méi)有出現(xiàn)過(guò)整除現(xiàn)象,則說(shuō)明該數(shù)是素素?cái)?shù)。如果一直都沒(méi)有出現(xiàn)過(guò)整除現(xiàn)象,則說(shuō)明該數(shù)是素?cái)?shù)。數(shù)。for(i=2;i=n) printf(“ %d is sushu!”,n);判斷素?cái)?shù)判斷素?cái)?shù)算法改進(jìn)算法改進(jìn)1:可以定義一個(gè)標(biāo)志變量,判斷起來(lái)很方便??梢远x一個(gè)標(biāo)志變量,判斷起來(lái)很方便。flag0;for(i=2;in;i+) if(n%i=0) flag=1; break;if(flag=0) printf(“ %d is

32、sushu!”,n);判斷素?cái)?shù)判斷素?cái)?shù)算法改進(jìn)算法改進(jìn)2:可以進(jìn)一步減少循環(huán)次數(shù)。循環(huán)的終止條件可可以進(jìn)一步減少循環(huán)次數(shù)。循環(huán)的終止條件可縮小為縮小為n/2,或或k=n/2; 或或 k=for(i=2;i=k+1) printf(“ %d is sushu!”,n);nn例:打印例:打印3100之間的全部素?cái)?shù)。之間的全部素?cái)?shù)。for (m=3; m=100; m+=2) k=sqrt(m);for (i=2; i=k; i+) if (m%i=0) break; if (i= = ) printf(%-5d,m);k+1?void main() int i,k,m; 判斷n是否素?cái)?shù),補(bǔ)全程序m

33、ain() int i, n, flag=0; for(i=2; _; i+) if ( _ ) flag=1; if ( _ ) printf(“是素?cái)?shù)n”); inn%i=0flag=0經(jīng)典算法一(窮舉法):百雞百錢(qián)問(wèn)題一只公雞值一只公雞值5元,一只母雞值元,一只母雞值3元,三只小雞值元,三只小雞值1元,元,總共有總共有100元錢(qián)要買(mǎi)一百只雞,問(wèn)有多少種方案?元錢(qián)要買(mǎi)一百只雞,問(wèn)有多少種方案?#include void main( ) int x,y,z; printf(* 百雞問(wèn)題百雞問(wèn)題 *n); for (x=1;x20;x+) for (y=1;y33;y+) for (z=3;z

34、100;z+=3) if (5*x+3*y+z/3=100 & x+y+z=100) printf(cock:%d,hen:%d,chicken:%dn,x,y,z);v程序使用了三層循環(huán)來(lái)解決問(wèn)題,程序結(jié)程序使用了三層循環(huán)來(lái)解決問(wèn)題,程序結(jié)構(gòu)簡(jiǎn)單明了。但是我們?cè)O(shè)計(jì)程序不僅要正構(gòu)簡(jiǎn)單明了。但是我們?cè)O(shè)計(jì)程序不僅要正確無(wú)誤,還要注意程序的執(zhí)行效率。確無(wú)誤,還要注意程序的執(zhí)行效率。v一般來(lái)說(shuō),在循環(huán)嵌套中,內(nèi)層循環(huán)執(zhí)行一般來(lái)說(shuō),在循環(huán)嵌套中,內(nèi)層循環(huán)執(zhí)行的次數(shù)等于該循環(huán)嵌套結(jié)構(gòu)中每一層循環(huán)的次數(shù)等于該循環(huán)嵌套結(jié)構(gòu)中每一層循環(huán)重復(fù)次數(shù)的乘積。重復(fù)次數(shù)的乘積。 例如,上面的程序中,外層每循環(huán)一次,第二層

35、例如,上面的程序中,外層每循環(huán)一次,第二層要循環(huán)要循環(huán)32次,而第三層要循環(huán)次,而第三層要循環(huán)32*33=1056次。這次。這樣程序執(zhí)行下來(lái),最內(nèi)層的樣程序執(zhí)行下來(lái),最內(nèi)層的if語(yǔ)句要執(zhí)行語(yǔ)句要執(zhí)行19*32*33次。所以我們?cè)诰帉?xiě)程序時(shí),需要考慮次。所以我們?cè)诰帉?xiě)程序時(shí),需要考慮盡可能的減少循環(huán)執(zhí)行的次數(shù),特別是循環(huán)的嵌盡可能的減少循環(huán)執(zhí)行的次數(shù),特別是循環(huán)的嵌套。套。對(duì)于“百雞問(wèn)題”,由方程組:x+y+z=100,5x+3y+z/3=100可以導(dǎo)出: x=4z/3-100 y=100-x-z這樣就只有z一個(gè)未知數(shù),如果知道了z就可以求出x值,進(jìn)而求出y值。因此我們只要將z作為循環(huán)變量就可以

36、了。#include void main() int x,y,z; printf(“* 百雞問(wèn)題百雞問(wèn)題 *n”); for (z=3;z=1;day-) x1=(x2+1)*2; x2=x1; printf(peach are %dn,x1);2.6.1指針指針變量名稱變量名稱 內(nèi)存地址內(nèi)存地址 變量的值變量的值 char c 0012 ff7c 10101111 0012 ff7b 11010101 0012 ff7a 01010101 0012 ff79 11100110 int i 0012 ff78 01001001 變量、內(nèi)存地址、變量值的關(guān)系變量、內(nèi)存地址、變量值的關(guān)系 變量名前

37、的變量名前的* *表示該變量表示該變量是一個(gè)指針變量,以示是一個(gè)指針變量,以示與普通變量的區(qū)別。與普通變量的區(qū)別??梢允强梢允莄 c語(yǔ)言中的任何一語(yǔ)言中的任何一種數(shù)據(jù)類型,是指針變量種數(shù)據(jù)類型,是指針變量所指向的對(duì)象的類型。所指向的對(duì)象的類型。01111000111111110001001000000000.01111100111111110001001000000000.1111111111111111000000000000000001111010變量的值變量的值0012ff670012ff680012ff690012ff6a.0012ff700012ff710012ff720012ff7

38、3.0012ff780012ff790012ff7a0012ff7b0012ff7c內(nèi)存地址內(nèi)存地址指針變量指針變量 pi指針變量指針變量 pc整型變量整型變量 i字符變量字符變量 c變量名稱變量名稱 指針變量、變量、變量地址和變量的值的關(guān)系示意圖指針變量、變量、變量地址和變量的值的關(guān)系示意圖122 z655352.6.2 指針變量的使用指針變量的使用1、指針變量的賦值、指針變量的賦值(1)通過(guò)地址運(yùn)算)通過(guò)地址運(yùn)算(&)賦值賦值 例如:例如: float f, *p; p=&f;(2)通過(guò)指針變量的初始化賦值)通過(guò)指針變量的初始化賦值 例如:例如:float f, *p=&f;(3)通過(guò)其他指針變量賦值)通過(guò)其他指針變量賦值 例如:例如:int i, *p1=&i, *p2; p2=p1;(4)用)用null給指針變量賦空值給指針變量賦空值 例如:例如:int *p; p=null;單目運(yùn)算符單目運(yùn)算符兩個(gè)指針變量的兩個(gè)指針變量的類型必須相同類型必須相同null是符號(hào)常量,是符號(hào)常量,和整數(shù)和整數(shù)0對(duì)應(yīng)。對(duì)應(yīng)。相當(dāng)于:相當(dāng)于:p=0;或或p=0;除了上述除了上述4種情況外,指針變量還可以指向數(shù)種

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論