程序基本結構_第1頁
程序基本結構_第2頁
程序基本結構_第3頁
程序基本結構_第4頁
程序基本結構_第5頁
已閱讀5頁,還剩88頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

4、 優(yōu)先級優(yōu)先級(&) 條件高于賦值條件高于賦值, /三目運算符優(yōu)先級排到三目運算符優(yōu)先級排到 13 位只比賦值運算符和位只比賦值運算符和“,”高高 /需要注意的是賦值運算符很多!需要注意的是賦值運算符很多!逗號運算級最低逗號運算級最低! /逗號運算符優(yōu)先級最低逗號運算符優(yōu)先級最低 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的關系的關系 */ temp=a; a=b; b=temp

5、; /* a大于大于b,則交換則交換a,b的值的值 */ printf(“result is %d,%dn,a,b); /*按從小到大順序按從小到大順序輸出輸出 */例例2.1的的c語言程序如下:語言程序如下:#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: 輸入兩個整數(shù),輸出其中較大的一個。輸入兩個整數(shù),輸出其中較大的一個。 , 否則輸出否則輸出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由鍵由鍵盤輸入。盤輸入。分析:對于一元二次方程有以下幾種可能:分析:對于

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

9、)優(yōu)先級高于賦值,低于關系運算符和算數(shù)運算符例:例: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:輸入一個字符,如果是大寫字母,轉(zhuǎn)換為小寫,:輸入一個字符,如果是大寫字母,轉(zhuǎn)換為小寫,如果不是不轉(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;簡單選擇界面的編程。從鍵盤輸入整數(shù),輸出不同的字符串:輸入1,輸出good morning;輸入2,輸出good afternoon;輸入3,輸出good evening;輸入4,輸出good night;輸入其它數(shù)字,輸出bye-bye。問題問題2:編寫程序計算:編寫程序計算:1+2+3+100。 2.3 循環(huán)結構循環(huán)結構2.3.1 循環(huán)結構的引出循環(huán)結構的引出算法算法1:直接寫出算式:直接寫出算式 s1: result=1+2+3+4+5+100 循環(huán)控制結構一般由四部分組成:、進入條件、退出條件、循環(huán)體:循環(huán)體需要完成的功能(需要重復執(zhí)行的語

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

13、假真i=1,sum=0當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)結束條件的語句void main()int i, n, sum;i=1; sum=0;while (i=n) sum=sum+i; i+;printf (“sum=%dn”, sum);計算 1+2+3+n(n為任意正整數(shù)) scanf(%d,&n);思考問題:循環(huán)結束后循環(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);計算 1+3+5+7+n(n為奇數(shù))例:輸入一個字符,如果是大寫字母,轉(zhuǎn)換為小寫,如果不例:輸入一個字符,如果是大寫字母,轉(zhuǎn)換為小寫,如果不是則不轉(zhuǎn)換。輸入是則不轉(zhuǎn)換。輸入“0”“0”結束程序。結束程序。#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 語句語句使用形式: do 循環(huán)體語句 while(表達式);特點:先執(zhí)行循環(huán)體語句,后判斷表達式循環(huán)體語句表達式0(假)非0(真)注意:、循環(huán)部分為多個語句時,必須用大括號構成復合語句;、循環(huán)體中應有使循環(huán)趨于結束的語句例:求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 語句語句一般形式: (表達式1;表達式2;表達式3) 語句一般使用格式:for(循環(huán)變量賦初值;循環(huán)條件表達式;循環(huán)變量修正值) 循環(huán)體;執(zhí)行過程:(1)求解表達式1(2)求解表達式2,若其值為真(值為非0),則執(zhí)行for語句中指定的內(nèi)嵌

17、語句,然后執(zhí)行(3)。若為假(值為0),則結束循環(huán),轉(zhuǎn)到(5)。(3)求解表達式3(4)轉(zhuǎn)回執(zhí)行(2)(5)循環(huán)結束,執(zhí)行for語句下面的一個語句(表達式1;表達式2;表達式3) 語句例:求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)體例:計算某個班英語成績的平均分, 學生人數(shù)和每個學生的成績由鍵盤輸入。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);想想這條語句是否能放到循環(huán)體內(nèi)?for語句的三個表達式都可以缺省,但兩個分號不能缺省;如果在for語句之前已經(jīng)給循環(huán)變量賦初值,則for語句的循環(huán)變量賦初值部分可以省略,但其后得分號不省略; 也可以將循環(huán)變量修正值的工作納入到循環(huán)體中去做;說明:說明:i=1;for ( ; i=10; i+) m=m*i;如:for (i=1; i=10; ) m=m*i; i+;如:也可以省略for語句的第一和第三部分;i=

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

20、,就執(zhí)行一遍循環(huán)體。for(m=0;( c=getchar( ) ) != !;) m=m+c;如:考慮問題:運行程序時如何停止循環(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ù)就是一個三位數(shù),這個數(shù)正好等于該數(shù)的(水仙花數(shù)就是一個三位數(shù),這個數(shù)正好等于該數(shù)的每一位的立方和。每一位的立方和。 例如:例如: 153=1*1*1+5*

21、5*5+3*3*3)void main()for()a=i/100;c=i%10; 補充:循環(huán)的嵌套補充:循環(huán)的嵌套一個循環(huán)體內(nèi)又包含另一個完整的循環(huán)結構,稱為循環(huán)嵌套。內(nèi)層的循環(huán)中還可以嵌套循環(huán),構成多重循環(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)控制變量控制變量不能重名不能重名例:輸出如圖所示的三角形:例:輸出如圖所示的三角形:* * * * * * * *特點:第i行有i個星號#include void main( ) int i , j ; for( i=1; i=4; i+) for (j=1; ; j+) putchar(*); putchar(n); j=i例:輸出如圖所示的等腰三角形:

24、例:輸出如圖所示的等腰三角形:* * * * * * * * * * * * *特點:一共有4行,第i行有2i-1個星號;第i行的第1個星號前有4-i個空格#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語言中的三種循環(huán)結構都由表達式控制執(zhí)行一個循環(huán)語言中的三種循環(huán)結構都由表達式控制執(zhí)行一個循環(huán)體,體,一般情況下可以相互代替一般情況下可以相互代替;、用、用while和和do-while循環(huán)時,循環(huán)

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

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

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

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

30、本次循環(huán),而不是終止整個循環(huán)的執(zhí)行;而,而不是終止整個循環(huán)的執(zhí)行;而break語語句則結束整個循環(huán)句則結束整個循環(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)典問題:判斷素數(shù)經(jīng)典問題:判斷素數(shù)素數(shù)是除了素數(shù)是除了1和它自身不能被任一個數(shù)整除的數(shù)。和它自身不能被任一個數(shù)整除的數(shù)。算法提示:算法提示:1、可以

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

32、sushu!”,n);判斷素數(shù)判斷素數(shù)算法改進算法改進2:可以進一步減少循環(huán)次數(shù)。循環(huá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之間的全部素數(shù)。之間的全部素數(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是否素數(shù),補全程序m

33、ain() int i, n, flag=0; for(i=2; _; i+) if ( _ ) flag=1; if ( _ ) printf(“是素數(shù)n”); inn%i=0flag=0經(jīng)典算法一(窮舉法):百雞百錢問題一只公雞值一只公雞值5元,一只母雞值元,一只母雞值3元,三只小雞值元,三只小雞值1元,元,總共有總共有100元錢要買一百只雞,問有多少種方案?元錢要買一百只雞,問有多少種方案?#include void main( ) int x,y,z; printf(* 百雞問題百雞問題 *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)來解決問題,程序結程序使用了三層循環(huán)來解決問題,程序結構簡單明了。但是我們設計程序不僅要正構簡單明了。但是我們設計程序不僅要正確無誤,還要注意程序的執(zhí)行效率。確無誤,還要注意程序的執(zhí)行效率。v一般來說,在循環(huán)嵌套中,內(nèi)層循環(huán)執(zhí)行一般來說,在循環(huán)嵌套中,內(nèi)層循環(huán)執(zhí)行的次數(shù)等于該循環(huán)嵌套結構中每一層循環(huán)的次數(shù)等于該循環(huán)嵌套結構中每一層循環(huán)重復次數(shù)的乘積。重復次數(shù)的乘積。 例如,上面的程序中,外層每循環(huán)一次,第二層

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

36、了。#include void main() int x,y,z; printf(“* 百雞問題百雞問題 *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)存地址、變量值的關系變量、內(nèi)存地址、變量值的關系 變量名前

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論