C語言程序設(shè)計方案_第1頁
C語言程序設(shè)計方案_第2頁
C語言程序設(shè)計方案_第3頁
C語言程序設(shè)計方案_第4頁
C語言程序設(shè)計方案_第5頁
已閱讀5頁,還剩441頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

會計學(xué)1C語言程序設(shè)計方案概述~~~~~~~~~~~~~~~~第1頁/共446頁5657BE0100BF02008BC603C78946FC8BC62BC78946FE5F5E1+2機器語言程序pushsipushdimovsi,0001movdi,0002movax,siaddax,dimov[bp-04],axmovax,sisubax,dimov[bp-02],axpopdipopsi

inta=1;intb=2;inti=a+b;intj=a–b;1-2a=1b=2i=a+bj=a-b匯編語言程序高級語言程序助記符=1010110=1000101111000110翻譯第2頁/共446頁源程序

*.c目標(biāo)程序*.obj高級語言程序機器語言程序inta=1;intb=2;inti=a+b;intj=a–b;5657BE0100BF02008BC603C78946FC8BC62BC78946FE5F5E編譯編譯Compiler可執(zhí)行程序*.exeLinker………連接可執(zhí)行程序第3頁/共446頁pushsipushdimovsi,0001movdi,0002movax,siaddax,dimov[bp-04],axmovax,sisubax,dimov[bp-02],axpopdipopsi

匯編語言程序5657BE0100BF02008BC603C78946FC8BC62BC78946FE5F5E機器語言程序第4頁/共446頁形式參數(shù)f (int x){inty;y=x*x;returny;}main(){inta,b;scanf("%d",&a);b=f(a);printf("b=%d\n",b);}函數(shù)函數(shù)名表參數(shù)類型參數(shù)名聲明部分函數(shù)調(diào)用函數(shù)函數(shù)類型自定義函數(shù)主函數(shù)庫函數(shù)函數(shù)定義函數(shù)首部函數(shù)體執(zhí)行部分實際參數(shù)變量:先定義,后使用int第5頁/共446頁main(){ printf(“ThisisasimpleCprogram.\n”);}第6頁/共446頁第7頁/共446頁main(){ inta,b,sum;/*addaandb,sumistheresult*/ a=123; b=456; sum=a+b; printf(“Thesumof%dand%dis%d.\n”,a,b,sum);}注釋第8頁/共446頁第9頁/共446頁intmax(intx,inty){ intz; if(x>y) z=x; else z=y; return(z);}main(){ inta,b,c; scanf(“%d%d”,&a,&b); c=max(a,b); printf(“max=%d\n”,c);}第10頁/共446頁第11頁/共446頁源程序

*.c目標(biāo)程序*.objCompiler可執(zhí)行程序*.exeLinker第12頁/共446頁第13頁/共446頁第14頁/共446頁數(shù)據(jù)類型運算符和表達(dá)式~~~~~~~~~~~~~~~~~~第15頁/共446頁五、常量和變量1.標(biāo)識符

C語言中構(gòu)成常量名、變量名、函數(shù)名、數(shù)組名、文件名的有效字符序列稱為標(biāo)識符。

C語言規(guī)定,標(biāo)識符由字母、數(shù)字、下劃線三種字符組成,而且第一個字符必須為字母或下劃線。第16頁/共446頁C語言中的標(biāo)識符:πCk2AB3x*yx23Aa3a-ba+_c__dA_b第17頁/共446頁2.常量

在程序的運行過程中,值不能被改變的量稱為常量。

C語言中的常量有三種形式(1)字面常量或直接常量:

1233.14159'a'"Hello"第18頁/共446頁(2)符號常量在C語言中,也可以用一個標(biāo)識符來代表一個常量,叫作符號常量。

#define<常量名><常量值>注意后面不要加分號第19頁/共446頁#definePRICE30

main()

{

intnum,total;

num=10;

total=num*PRICE;

printf("total=%d",total);

}PRICE=40;#definePI3.1415926第20頁/共446頁(3)常量定義

floatpi=3.14159;constconstfloatpi;pi=3.14159;第21頁/共446頁3.變量

值可以改變的量稱為變量

變量要先定義后使用對變量的定義,要放在一個函數(shù)開頭部分,所有執(zhí)行語句的前面。第22頁/共446頁六、算術(shù)運算符和算術(shù)表達(dá)式1.算術(shù)運算符雙目運算符:有兩個操作數(shù)參與運算+(加)、-(減)、*(乘)、/(除)、%(求余)單目運算符:有一個操作數(shù)參與運算+(正)、-(負(fù))、++(自增)、--(自減)第23頁/共446頁2.算術(shù)表達(dá)式算術(shù)表達(dá)式是指由算術(shù)運算符、運算量、括號和函數(shù)組成,符合C語言語法規(guī)則的式子。算術(shù)運算符優(yōu)先級:操作數(shù)

個數(shù)

結(jié)合

方式

運算符

優(yōu)先

單目

自自右右

向向左左

++++((自自增增))

、、----((自自減減))

++((正正))、、--((負(fù)負(fù)))

**((乘乘))、、//((除除))

%%((求求余余))

自自左左

向向右右

++((加加))、、

--((減減))

第24頁/共446頁3.類型轉(zhuǎn)換(1)自動類型轉(zhuǎn)換 轉(zhuǎn)換的基本原則:

要盡可能地保證運算的精確度10+1.5-123.4510+'a'+1.5-123.45*'b'第25頁/共446頁各數(shù)據(jù)類型混合運算的排列順序:

類型

優(yōu)先級

longdouble

double

float

longint

unsignedint

int

shortint

char

第26頁/共446頁算術(shù)表達(dá)式的數(shù)據(jù)類型算術(shù)表達(dá)式的數(shù)據(jù)類型即該表達(dá)式的值的類型。兩個同類型的運算量參加運算,其結(jié)果也是同類型的。第27頁/共446頁(2)強制類型轉(zhuǎn)換(類型名)(表達(dá)式)(int)=313%5=313.7%5main(){floatx;inti;x=3.999;i=(int)x;printf("x=%fi=%d\n",x,i);}第28頁/共446頁使用強制類型轉(zhuǎn)換注意:在進(jìn)行強制類型轉(zhuǎn)換時,類型關(guān)鍵字必須用括號括住。在對一個表達(dá)式進(jìn)行強制類型轉(zhuǎn)換時,整個表達(dá)式也要用括號括住。 如:(float)(a+b)(float)a+b在對變量和表達(dá)式進(jìn)行了強制類型轉(zhuǎn)換后,并不改變原變量或表達(dá)式的類型。 如: intz;floatx;doubley; z=(int)(x+y);

執(zhí)行后x、y的類型不變。第29頁/共446頁4.自增和自減運算符++、--inti=3;printf("++i=%d",++i);inti=3;printf("i++=%d",i++);作用:將操作數(shù)自己增加1或者減少1。前置(前綴):如:++i、--i后置(后綴):如:i++、i--第30頁/共446頁表達(dá)式52+3abc5+abcf(2,3)語句5;2+3;abc;5+abc;f(2,3);表達(dá)式語句控制語句for、goto空語句;復(fù)合語句{……}變量聲明函數(shù)聲明變量定義inta,b;C語句非語句C程序第31頁/共446頁intmax(intx,inty){ intz; if(x>y)z=x;elsez=y; return(z);}main(){ inta,b,c;

c=max(a,b); printf("max=%d\n",c);}第32頁/共446頁inti=3;i++;inti=3;printf("i++=%d",i++);

i++=3

inti=3;++i;printf("++i=%d",++i);

++i=4第33頁/共446頁自增、自減運算小結(jié):自增運算符和自減運算符是單目運算符,且只能用于單個變量。當(dāng)前置運算或者后置運算與其他運算結(jié)合在一個表達(dá)式中時:前置運算:先增值后引用后置運算:先引用后增值++和-的運算結(jié)合方向是從右到左第34頁/共446頁七、賦值運算1.基本賦值運算符賦值運算符:= 優(yōu)先級很低,僅比逗號運算符高,低于所有的算術(shù)運算符結(jié)合方式為自右向左賦值表達(dá)式:由賦值運算符=將變量和表達(dá)式連接起來的式子形式:變量=表達(dá)式運算過程:將賦值運算符右邊表達(dá)式的值賦給左邊的變量。第35頁/共446頁賦值表達(dá)式a=a+1;++a;a=b=c=2;a=(b=(c=2));c=2;b=2;a=2;a=2+(b=3);b=3;a=2+3;a=(b=2)*(c=3);b=2;c=3;a=2*3;變量初始化flotaf=123.5;charc='a';inti,j=342,k;inta=b=c=2;第36頁/共446頁賦值運算的注意事項:=是一個雙目運算符,需要左右兩個操作數(shù)=是賦值運算符,不等于等號,沒有相等的含義=左端的運算量必須是單個變量,而不能是表達(dá)式賦值運算中,首先使運算符左端的變量具有右端表達(dá)式的值,然后整個表達(dá)式的結(jié)果為右端表達(dá)式的值第37頁/共446頁賦值運算中數(shù)值類型的轉(zhuǎn)換

當(dāng)賦值運算符兩端的數(shù)據(jù)類型不同時,編譯程序?qū)①x值運算符右邊表達(dá)式的數(shù)據(jù)類型自動轉(zhuǎn)換成左邊變量的數(shù)據(jù)類型。第38頁/共446頁2.復(fù)合的賦值運算符復(fù)合賦值運算符:+=、-=、*=、/=、%=等。復(fù)合賦值運算表達(dá)式的一般形式: 變量op=表達(dá)式說明:"op"為其它運算符,如+、-、*、/、%等。舉例: a+=b……a*=b

等同:a=a+b……a=a*b第39頁/共446頁變量op=表達(dá)式;的執(zhí)行過程步驟:(1)求出"表達(dá)式"的值(2)把求出的表達(dá)式的值與"變量"做op運算(3)把第二步求出的值再賦給"變量"例如:設(shè)x=5y=2求x%=y+3的值(1)y+35

即:x%=5(2)x%5 0,(x=5)(3)0x第40頁/共446頁復(fù)合賦值運算小結(jié)凡是雙目運算符都可以與賦值運算符一起組合成復(fù)合的賦值運算符。注意兩個運算符之間不能有空格存在。共10種復(fù)合賦值運算符:

+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=復(fù)合賦值運算符的結(jié)合方式為“自右向左”。第41頁/共446頁練習(xí):設(shè)有inta=10;寫出下面表達(dá)式的值。a+=aa-=12a*=3+aa/=a+an=5a%=n%2a+=a-=a*=a20-2130000第42頁/共446頁八、逗號運算符、逗號表達(dá)式逗號運算符:",",即順序求值運算符逗號表達(dá)式:用逗號把若干獨立的運算表達(dá)式結(jié)合成一個運算表達(dá)式,稱為逗號表達(dá)式逗號表達(dá)式的一般形式: 表達(dá)式1,表達(dá)式2,……,表達(dá)式n求解過程:先求"表達(dá)式1",再求"表達(dá)式2",……,最后求"表達(dá)式n"。整個表達(dá)式的值為"表達(dá)式n"的值。第43頁/共446頁舉例:求下面逗號表達(dá)式的值:

a=3*4,b=a+10,c=a*b解題步驟:求表達(dá)式1:a=3*4=12求表達(dá)式2:b=a+10=22求表達(dá)式3:c=a*b=12*22=264寫結(jié)果:逗號表達(dá)式的值為264。第44頁/共446頁逗號表達(dá)式的特點逗號表達(dá)式可以作為賦值運算中的表達(dá)式逗號運算符的結(jié)合方向是從左到右逗號運算符是所有運算符中級別最低的第45頁/共446頁運算符的優(yōu)先級和運算順序C語言中的優(yōu)先級從高到低分為15級。運算符的一般順序:先運算優(yōu)先級別高的,再運算優(yōu)先級別低的。對于優(yōu)先級別相同的運算符,按其結(jié)合方向執(zhí)行。第46頁/共446頁運算符的優(yōu)先級和結(jié)合方向第47頁/共446頁優(yōu)先級分級一般規(guī)律:單目運算符優(yōu)先級最高,雙目次之,三目較低。雙目運算符中,算術(shù)運算符較高,關(guān)系次之,邏輯較低(!除外)。位運算符中,移位運算高于關(guān)系運算,位邏輯運算低于關(guān)系運算。逗號運算符最低,圓括號運算符優(yōu)先級最高,可用括號強調(diào)或改變運算順序。第48頁/共446頁數(shù)據(jù)的I/O~~~~~~~~~~~~~~~~第49頁/共446頁main(){printf("ThisisaCprogram.\n");}第50頁/共446頁floatmax(floata,floatb) /*函數(shù)定義*/{ floatc; if(a>b)c=a;elsec=b; returnc;}main(){ floatx=1.23,y=4.56,z; z=max(x,y); /*函數(shù)調(diào)用*/ printf("%f",z);}第51頁/共446頁main(){ floatx=1.23,y=4.56,z; z=max(x,y); /*函數(shù)調(diào)用*/ printf("%f",z);}floatmax(floata,floatb) /*函數(shù)定義*/{ floatc; if(a>b)c=a;elsec=b; returnc;}第52頁/共446頁main(){ floatx=1.23,y=4.56,z; z=max(x,y); /*函數(shù)調(diào)用*/ printf("%f",z);}floatmax(floata,floatb) /*函數(shù)定義*/{第53頁/共446頁{ floatc; if(a>b)c=a;elsec=b; returnc;}main(){ floatx=1.23,y=4.56,z;floatmax(floata,floatb) /*函數(shù)定義*/ z=max(x,y); /*函數(shù)調(diào)用*/ printf("%f",z);}第54頁/共446頁main(){ floatx=1.23,y=4.56,z; z=max(x,y); /*函數(shù)調(diào)用*/ printf("%f",z);}floatmax(floata,floatb)/*函數(shù)定義*/{ floatc; if(a>b)c=a;elsec=b; returnc;}floatmax(floata,floatb);/*函數(shù)聲明*/#include<stdio.h>第55頁/共446頁字符輸出函數(shù):putchar作用:向終端輸出一個字符格式:putchar(c) c是整型或者字符型數(shù)據(jù),返回值為所輸出的字符字符常量 putchar('A');整數(shù) putchar(65);字符變量 charc='A'; putchar(c);八進(jìn)制數(shù) putchar('\101');十六進(jìn)制 putchar('\x41');控制字符 putchar('\n');轉(zhuǎn)義字符 putchar('\'');第56頁/共446頁字符輸入函數(shù):getchar作用:從終端輸入一個字符格式:getchar() 函數(shù)沒有參數(shù),返回值為從輸入設(shè)備得到的字符第57頁/共446頁格式輸出函數(shù):printf格式:printf(格式控制,輸出表列)作用:向終端輸出若干個任意類型的數(shù)據(jù)main(){printf("ThisisaCprogram.");}ThisisaCprogram.ThisisaCprogram.第58頁/共446頁inti=65;printf("i=%d",i);格式字符i=65i=65inti=65;printf("i=%c",i);i=Ai=A第59頁/共446頁inti=1,j=2,k=3;printf("i=%d,j=%d,k=%d\n",i,j,k);i=1,j=2,k=3\n函數(shù)聲明:intprintf(constchar*format,...);格式:printf(格式控制,輸出表列);格式說明:%[標(biāo)志][寬度][.精度][h/l]格式字符第60頁/共446頁格式說明:%[標(biāo)志][寬度][.精度][h/l]格式字符數(shù)值型:d/isigneddecimalintegeruunsigneddecimalintegerounsignedoctalintegerx/Xunsignedhexadecimalinteger(x:a,b,c,d,e,fX:A,B,C,D,E,F)f floatingpoint[-]d…d.dddddd隱含6位小數(shù)e/Efloatingpoint[-]d.ddddd<e/E><+/->dd 規(guī)范化g/G floatingpoint

根據(jù)輸出的數(shù)值和精度,從f或e中選取長度較短的一種,不輸出無意義的0或者小數(shù)點字符型:c singlecharacters stringpointer% %character

第61頁/共446頁格式說明:%[標(biāo)志][寬度][.精度][h/l]

格式字符h/l:h(diouxX):shortinteger顯示短整數(shù)l(diouxX):longinteger顯示長整數(shù)格式說明:%[標(biāo)志][寬度][.精度][h/l]格式字符寬度:一個正整數(shù),表示數(shù)據(jù)輸出時所占的最小寬度。不足補空格或零;超過,按實際位數(shù)輸出。第62頁/共446頁.精度:一個正整數(shù),用于輸出實數(shù)或字符串。為了與寬度相區(qū)別,在前面加一個小數(shù)點。用于實數(shù),表示小數(shù)的位數(shù),默認(rèn)為6位。用于字符串為截取顯示的字符數(shù)格式說明:%[標(biāo)志][寬度][.精度][h/l]格式字符

標(biāo)志:

-:左對齊,右補空格

+:數(shù)值帶符號顯示

0:數(shù)值左補零(符號后)

#:顯示前導(dǎo)符格式說明:%[標(biāo)志][寬度][.精度][h/l]格式字符第63頁/共446頁格式輸入函數(shù):scanf格式:scanf(格式控制,地址表列)作用:按指定格式從鍵盤輸入數(shù)據(jù)1.取地址運算符—&&變量名

inti;scanf("%d",&i);第64頁/共446頁2.格式控制格式說明:%[*][寬度][h/l]格式字符3.說明:(1)輸入數(shù)據(jù)時,兩個數(shù)據(jù)間用空格、回車或跳格鍵(Tab)相間隔,不能用其它符號,比如逗號。(2)如果在格式控制字符串中除格式說明外,還有其它字符,這些字符是不會顯示在屏幕上的,但是在輸入數(shù)據(jù)的時候,必須同時輸入這些字符(3)在用%c格式輸入數(shù)據(jù)時,空格和控制字符都是有效字符第65頁/共446頁函數(shù)

~~~~~~~~~~~~~~第66頁/共446頁一、函數(shù)的定義類型標(biāo)識符函數(shù)名(形式參數(shù)表){

聲明語句}復(fù)合語句第67頁/共446頁main(){inta,b,c;scanf("%d%d",&a,&b);c=max(a,b);printf("max=%d\n",c);}intmax(intx,inty){intz;z=(x>y)?x:y;return(z);}第68頁/共446頁1.形式參數(shù)無參函數(shù)

類型標(biāo)識符函數(shù)名()復(fù)合語句

類型標(biāo)識符函數(shù)名(void)復(fù)合語句第69頁/共446頁無參函數(shù)示例main(){ printstar(); printword(); printstar();}printstar()/*定義無參函數(shù)printstar()*/{printf("******************\n");}printword()/*定義無參函數(shù)printword()*/{printf("Thisisanexample\n");}第70頁/共446頁(2)不定參函數(shù)

類型函數(shù)名(形式參數(shù)表,…)復(fù)合語句intprintf(constchar*format,...){……};intscanf(constchar*format,...){……};intmax(intx,inty,...){……};第71頁/共446頁intmax(constintx,constinty){if(x>y)returnx;elsereturny;}第72頁/共446頁(3)形參聲明的傳統(tǒng)方式intmax(x,y)intx,y;{intz;z=x>y?x:y;return(z);}第73頁/共446頁2.類型標(biāo)識符intmax(intx,inty){if(x>y)returnx;elsereturny;}第74頁/共446頁3.return語句函數(shù)的返回值是通過return語句傳遞的。return語句的一般形式:

return表達(dá)式;

return(表達(dá)式);第75頁/共446頁return語句的執(zhí)行main(){inta,b,c;scanf("%d%d",&a,&b);c=max(a,b);printf("max=%d\n",c);}intmax(intx,inty){intz;z=(x>y)?x:y;return(z);}第76頁/共446頁返回值類型要與函數(shù)類型一致,且以函數(shù)類型為準(zhǔn)。函數(shù)類型缺省時,系統(tǒng)自動按整型處理。一個函數(shù)中可以有若干個return語句,流程執(zhí)行到哪里,就從哪里返回主調(diào)函數(shù)。若函數(shù)體內(nèi)沒有return語句,則執(zhí)行函數(shù)到末尾,然后返回主調(diào)函數(shù)。當(dāng)不需要返回值的時候,可以用void定義函數(shù)為空類型,表示無返回值。第77頁/共446頁4.空函數(shù)類型說明符

函數(shù)名(){}第78頁/共446頁二、函數(shù)的調(diào)用1.函數(shù)調(diào)用的一般格式: 函數(shù)名(實參表);

main() {intx,y,z; scanf("%d%d",&x,&y); z=max(x,y); }第79頁/共446頁main(){inta,b,c;scanf("%d%d",&a,&b);c=max(a,b);printf("max=%d",c);}intmax(intx,inty){intz;z=(x>y)?x:y;return(z);}主調(diào)函數(shù)被調(diào)函數(shù)實際參數(shù)形式參數(shù)第80頁/共446頁2.值傳遞調(diào)用函數(shù)時,在主調(diào)函數(shù)和被調(diào)用函數(shù)之間存在一種數(shù)據(jù)傳遞關(guān)系。C語言規(guī)定,實參對形參的數(shù)據(jù)傳遞是單向傳遞,只由實參傳給形參,而不能由形參傳回來給實參。

實參形參……axby……c=max(a,b);第81頁/共446頁3.函數(shù)調(diào)用的方式作為表達(dá)式出現(xiàn)在任何允許表達(dá)式出現(xiàn)的地方,參與運算。 如:a=sqrt(b);作為一條獨立的語句完成特定的操作。 如:gets(str);作為函數(shù)的參數(shù)被其他函數(shù)調(diào)用。 如:printf("%s\n",strcpy(str1,"Hello"));第82頁/共446頁4.函數(shù)的嵌套調(diào)用C語言程序由函數(shù)構(gòu)成。函數(shù)與函數(shù)之間是平行的,獨立的。不允許在一個函數(shù)內(nèi)部嵌套定義另一個函數(shù);但允許在調(diào)用一個函數(shù)的過程中,又調(diào)用另一個函數(shù)。第83頁/共446頁main函數(shù)結(jié)束調(diào)用函數(shù)a調(diào)用函數(shù)b函數(shù)b函數(shù)a函數(shù)的嵌套調(diào)用第84頁/共446頁5.遞歸調(diào)用遞歸調(diào)用: 在調(diào)用一個函數(shù)的過程中又出現(xiàn)直接或間接的調(diào)用該函數(shù)本身,稱為函數(shù)的遞歸調(diào)用。第85頁/共446頁遞歸函數(shù)設(shè)計舉例:求n!算法描述:

n!=1×2×3×……×(n-1)×n遞推公式:f(n)=1 n=0n×(n-1)! n>0第86頁/共446頁main(){intx;scanf("%d",&x);printf("Theresultis%ld",fact(x));}longfact(intn){if(n==0)return1;elsereturnn*fact(n–1);}第87頁/共446頁5!的運算過程:?5!5×4!4×3!3×2!2×1!12×13×24×65×241201×0!1×1第88頁/共446頁6.1數(shù)組元素作函數(shù)實參數(shù)組元素作函數(shù)實參,如同簡單變量一樣,采用單向值傳遞。6.數(shù)組與函數(shù)第89頁/共446頁intisprime(intx)

{

inti;

for(i=2;i<=x/2;i++)

if(x%i==0)return(0);

return(1);

}【例】用程序求出數(shù)組a中所有素數(shù)的和第90頁/共446頁main(){inti,a[10],sum=0,n=0;printf("Enter10numbers:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<10;i++)if(isprime(a[i]))/*若a[i]為素數(shù)*/{ sum+=a[i]; /*求素數(shù)和*/ n++; /*統(tǒng)計素數(shù)個數(shù)*/}printf("\nsum=%d,aver=%f\n",sum,aver);}第91頁/共446頁#defineN10main(){ inta[N];inti,j,temp; printf("Pleaseinput%dnumbers:\n",N); for(i=0;i<N;i++)scanf("%d",&a[i]); for(i=0;i<N-1;i++) for(j=0;j<N-1-i;j++)if(a[j]>a[j+1]) {temp=a[j];a[j]=a[j+1];a[j+1]=temp;} printf("Thesortednumbers:\n"); for(i=0;i<N;i++) printf("%4d",a[i]);}6.2數(shù)組名作函數(shù)參數(shù)第92頁/共446頁for(i=0;i<N-1;i++)for(j=0;j<N-1-i;j++)if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}sort()inta[N]{}main(){inta[N];inti;printf("Pleaseinput%dnumbers:\n",N); for(i=0;i<N;i++)scanf("%d",&a[i]); printf("Thesortednumbers:\n"); for(i=0;i<N;i++) printf("%4d",a[i]);}#defineN10inti,j,temp;for(i=0;i<n-1;i++)for(j=0;j<n-1-i;j++)if(b[j]>b[j+1]){temp=b[j];b[j]=b[j+1];b[j+1]=temp;}intb[N],intn)sort(a);sort(a,N);

第93頁/共446頁三、函數(shù)原型intmax(intx,inty){intz;z=(x>y)?x:y;return(z);}main(){intmax(intx,inty);inta,b,c;scanf("%d%d",&a,&b);c=max(a,b);printf("max=%d\n",c);}第94頁/共446頁main(){

intmax(int,int);inta,b,c;scanf("%d%d",&a,&b);c=max(a,b);printf("max=%d\n",c);}intmax(intx,inty){intz;z=(x>y)?x:y;return(z);}第95頁/共446頁

函數(shù)原型的一般形式為函數(shù)類型函數(shù)名(參數(shù)類型1參數(shù)名1,參數(shù)類型2參數(shù)名2,…);函數(shù)類型函數(shù)名(參數(shù)類型1,參數(shù)類型2,…);第96頁/共446頁intmax(int,int);f1(){……x=max(a,b);

……}f2(){……y=max(c,d);

……}

intmax(intx,inty) {……}

第97頁/共446頁作業(yè):

P186:8.18.28.138.17

實驗:

第8章例題:8.18.28.38.48.58.88.118.128.13

第98頁/共446頁input(){……}max(){input();……}output(){……}main(){max();output();}file.cfile.objfile.exe第99頁/共446頁C程序的結(jié)構(gòu)f11(){……}f12(){……}……f21(){……}f22(){……}……fn1(){……}main(){……}…………file1.cfile2.cfilen.cfile1.objfile2.objfilen.obj……prog.exe第100頁/共446頁模塊化程序設(shè)計~~~~~~~~~~~~~~第101頁/共446頁模塊化程序設(shè)計基本思想:將一個大的程序按功能分割成一些小模塊特點:各模塊相對獨立、功能單一、結(jié)構(gòu)清晰、接口簡單控制了程序設(shè)計的復(fù)雜性提高元件的可靠性縮短開發(fā)周期避免程序開發(fā)的重復(fù)勞動易于維護(hù)和功能擴充開發(fā)方法:自上向下,逐步分解,分而治之第102頁/共446頁1.局部變量---內(nèi)部變量定義:在函數(shù)內(nèi)定義,只在本函數(shù)內(nèi)有效說明:main中定義的變量只在

main中有效不同函數(shù)中同名變量,占用不同的內(nèi)存單元形參屬于局部變量可定義僅在復(fù)合語句中有效的變量不同函數(shù)中同名變量main(){inta,b;a=3;b=4;printf("main:a=%d,b=%d\n",a,b);sub();printf("main:a=%d,b=%d\n",a,b);}sub(){inta,b;a=6;b=7;printf("sub:a=%d,b=%d\n",a,b);}floatf1(inta){intb,c;…….}charf2(intx,inty){inti,j;……}main(){intm,n;…….}a,b,c有效x,y,i,j有效m,n有效

復(fù)合語句中變量#defineN5main(){inti;inta[N]={1,2,3,4,5};for(i=0;i<N/2;i++)

{

inttemp; temp=a[i]; a[i]=a[N-i-1]; a[N-i-1]=temp;

}for(i=0;i<N;i++)printf("%d",a[i]);}四、變量的作用域第103頁/共446頁若外部變量與局部變量同名,則外部變量被屏蔽全局變量在程序全部執(zhí)行過程中占用存儲單元降低了函數(shù)的通用性、可靠性,可移植性降低程序清晰性,容易出錯2.全局變量---外部變量定義:在函數(shù)外定義,可為所在文件所有函數(shù)共用有效范圍:從定義變量的位置開始到本源文件結(jié)束>>>>>第104頁/共446頁floatmax,min;floataverage(floatarray[],intn){inti;floatsum=array[0];max=min=array[0];for(i=1;i<n;i++){if(array[i]>max)max=array[i];elseif(array[i]<min)min=array[i];sum+=array[i];}return(sum/n);}main(){inti;floatave,score[10];/*Input*/ave=average(score,10);printf("max=%6.2f\nmin=%6.2f\naverage=%6.2f\n",max,min,ave);}作用域maxmin第105頁/共446頁intp=1,q=5;floatf1(inta){intb,c;…….}intf3(){…..}charc1,c2;charf2(intx,inty){inti,j;……}main(){intm,n;…….}c1,c2的作用范圍p,q的作用范圍第106頁/共446頁/*ch7_17.c*/inta=3,b=5;max(inta,intb){intc;c=a>b?a:b;return(c);}main(){inta=8;printf("max=%d",max(a,b));}外部變量與局部變量運行結(jié)果:max=8第107頁/共446頁inti;main(){voidprt();for(i=0;i<5;i++)prt();}voidprt(){for(i=0;i<5;i++)printf("%c",'*');printf("\n");}外部變量副作用運行結(jié)果:*****第108頁/共446頁程序區(qū)靜態(tài)存儲區(qū)動態(tài)存儲區(qū)全局變量、局部靜態(tài)變量形參變量局部動態(tài)變量(autoregister)函數(shù)調(diào)用現(xiàn)場保護(hù)和返回地址等靜態(tài)變量與動態(tài)變量存儲方式靜態(tài)存儲:程序運行期間分配固定存儲空間動態(tài)存儲:程序運行期間根據(jù)需要動態(tài)分配存儲空間生存期靜態(tài)變量:從程序開始執(zhí)行到程序結(jié)束動態(tài)變量:從包含該變量定義的函數(shù)開始執(zhí)行至函數(shù)執(zhí)行結(jié)束五、變量的存儲類別第109頁/共446頁auto-----自動型register-----寄存器型static-----靜態(tài)型extern-----外部型變量定義:[存儲類型]數(shù)據(jù)類型變量表;如:intsum;

autointa,b,c;

staticfloatx,y;registerinti;

第110頁/共446頁auto變量的作用域main(){intx=1;voidprt(void);

{

intx=3;prt();printf(“2ndx=%d\n”,x);

}printf(“1stx=%d\n”,x);}voidprt(void){intx=5;printf(“3thx=%d\n”,x);}運行結(jié)果:3thx=52ndx=31stx=1x=1作用域x=1作用域x=3作用域x=5作用域第111頁/共446頁main(){voidincrement(void);increment();increment();increment();}voidincrement(void){intx=0;x++;printf(“%d\n”,x);}局部靜態(tài)變量運行結(jié)果:111main(){voidincrement(void);increment();increment();increment();}voidincrement(void){staticintx=0;x++;printf(“%d\n”,x);}運行結(jié)果:123第112頁/共446頁intmax_so_far(intcurr){staticintbigger=0;if(curr>bigger)bigger=curr;returnbigger;}main(){intn,biggest;do{scanf("%d",&n);biggest=max_so_far(n);}while(n>0);printf("themaxnumberis%d\n",biggest);}第113頁/共446頁registerinti;

(1)只有函數(shù)中的局部變量和形式參數(shù)可以作為寄存器變量(2)一個計算機系統(tǒng)中的寄存器數(shù)目是有限的(3)不允許對寄存器變量作取地址運算(4)對一個變量只能聲明為一個存儲類別第114頁/共446頁intp=1,q=5;floatf1(inta){intb,c;…….}intf3(){…..}charc1,c2;charf2(intx,inty){inti,j;……}main(){intm,n;…….}c1,c2的作用范圍p,q的作用范圍externc1,c2;c1,c2的作用范圍擴展后externcharc1,c2;c1,c2的作用范圍擴展后聲明外部變量:extern第115頁/共446頁C程序的結(jié)構(gòu)f11(){……}f12(){……}……f21(){……}f22(){……}……fn1(){……}main(){……}…………file1.cfile2.cfilen.cfile1.objfile2.objfilen.obj……prog.exe第116頁/共446頁變量作用域存儲類別內(nèi)部變量形式參數(shù)外部變量autoregisterstatic擴展(聲明)extern變量名;屏蔽(定義)static類型變量名;源程序內(nèi)存復(fù)合語句函數(shù)文件程序第117頁/共446頁靜態(tài)動態(tài)存儲方式程序整個運行期間函數(shù)調(diào)用開始至結(jié)束生存期編譯時賦初值,只賦一次每次函數(shù)調(diào)用時賦初值自動賦初值0或空字符不確定未賦初值靜態(tài)存儲區(qū)動態(tài)區(qū)存儲區(qū)寄存器局部變量外部變量作用域定義變量的函數(shù)或復(fù)合語句內(nèi)本文件其它文件register局部staticauto外部static外部存儲類別變量定義:[存儲類型]數(shù)據(jù)類型變量表;第118頁/共446頁六、函數(shù)的作用域1.外部函數(shù)2.內(nèi)部函數(shù)static類型標(biāo)識符

函數(shù)名(形參表)復(fù)合語句定義:[extern]類型標(biāo)識符

函數(shù)名(形參表)復(fù)合語句聲明:[extern]類型標(biāo)識符

函數(shù)名(形參表);第119頁/共446頁floatf1(inta){…}main(){

f1(5);…}floatf1(int);floatf1(int);f2(){

f1(10);…}floatf1(int);file1.cfile2.cfile1.objfile2.obj

prog.exe第120頁/共446頁floatf1(inta){…}main(){…}file1.cfile2.cfile1.objfile2.objprog.execharf1(floatx,floaty){…}staticstatic╳第121頁/共446頁inta;main(){

a++;…}externa;externa;f(){

a++;…}externa;file1.cfile2.cfile1.objfile2.objprog.exe

inta;

╳第122頁/共446頁類型函數(shù)名(形式參數(shù)表){

聲明部分執(zhí)行部分}內(nèi)部變量定義;外部變量聲明;函數(shù)聲明;第123頁/共446頁求平均成績#include<stdio.h>

floataverage(intstu[10],intn);main(){intscore[10],i;floatav;printf("Input10scores:\n");for(i=0;i<10;i++)scanf("%d",&score[i]);av=average(score,10);printf("Averageis:%.2f",av);}floataverage(int

stu[10],intn){inti;floatav,total=0;for(i=0;i<n;i++)total+=stu[i];av=total/n;returnav;}實參用數(shù)組名形參用數(shù)組定義,

intstu[]..2109score562312….….88stu第124頁/共446頁比較:數(shù)組元素與數(shù)組名作函數(shù)參數(shù)12a調(diào)用前a[0]a[1]12a調(diào)用a[0]a[1]12xy21xy交換12a返回#include<stdio.h>voidswap(intx,inty){intz;z=x;x=y;y=z;}main(){inta[2]={1,2};

swap(a[0],a[1]);printf("a[0]=%d\na[1]=%d\n",a[0],a[1]);}第125頁/共446頁12a調(diào)用前12ax調(diào)用21ax交換21a返回#include<stdio.h>voidswap(intx[]){intz;z=x[0];x[0]=x[1];x[1]=z;}main(){inta[2]={1,2};

swap(a);printf("a[0]=%d\na[1]=%d\n",a[0],a[1]);}第126頁/共446頁8.5寫一函數(shù),使輸入的一個字符串按反序存放。charstr[]="abcdef";charstr[]="abcde";strlen(str)/2strlen(str)/20123456abcdef\0fbcdea\0012345abcde\0fecdba\0fedcba\0ebcda\0edcba\0ijijij第127頁/共446頁voidinvert(charstr[],intlen){inti,j;charc;for(i=0,j=len-1;i<len/2;i++,j--){c=str[i];str[i]=str[j];str[j]=c;}}main(){charstring[30];scanf("%s",string);invert(string,strlen(string));printf("%s",string);}第128頁/共446頁求n的階乘/*ch7_8.c*/#include<stdio.h>long

fac(intn){if(n==0||n==1)return1;elsereturnn*fac(n-1);}main(){intn;printf("Inputaninteger:");scanf("%d",&n);printf("%d!=%ld",n,fac(n));}第129頁/共446頁hanoi(n,a,b,c)1:acn=1hanoi(n-1,a,c,b)n:achanoi(n-1,b,a,c)n>1voidhanoi(intn,chara,charb,charc){if(n==1)printf("1:%c-->%c\n",a,c);else{hanoi(n-1,a,c,b);printf("%d:%c-->%c\n",n,a,c);hanoi(n-1,b,a,c);}}第130頁/共446頁voidhanoi(intn,chara,charb,charc){if(n==1)printf("1:%c%c\n",a,c);else{hanoi(n-1,a,c,b);printf("%d:%c%c\n",n,a,c);hanoi(n-1,b,a,c);}}main(){intn;printf("Inputaninteger:");scanf("%d",&n);hanoi(n,'A','B','C');}第131頁/共446頁

設(shè)有一個背包可以放入的物品重量為s,現(xiàn)有n件物品,重量分別為w1,w2,w3,……,wn。要求采用遞歸方法編寫程序來判斷能否從這n件物品中選擇若干件放入此背包,使得放入物品的重量之和正好為s;如果存在符合上述要求的物品組合,輸出其中一組所選各件物品的重量。#defineN10intw[N+1]={0,1,2,3,4,5,6,7,8,9,10};main(){intknap(int,int);ints;printf("s=");scanf("%d",&s);if(knap(s,N))printf("Success\n");elseprintf("False\n");}knap(s,n)knap(s-wn,n–1)knap(s,n–1)s=01s<0s>0且n<100其它intknap(ints,intn){或第132頁/共446頁

編程尋找滿足abcd=(ab+cd)2的所有四位數(shù),如3025=(30+25)2

形如XYZ和YZY的兩個十六進(jìn)制數(shù)相減,差為D79,編程求X、Y、Z的值

一個數(shù)的平方的尾數(shù)等于該數(shù)自身的自然數(shù)稱為“自守數(shù)”,如62=36252=625 3762=141376,編程求出20000以內(nèi)的自守數(shù)。

XYZYZYD79第133頁/共446頁intknap(ints,intn){if(s==0)return1;if((s<0)||(s>0&&n<1))return0;if(knap(s-w[n],n-1)){printf("%d",w[n]);return1;}elsereturnknap(s,n-1);}knap(s,n)knap(s-wn,n–1)knap(s,n–1)s=01s<0s>0且n<100其它或第134頁/共446頁

指針第135頁/共446頁什么是地址?在程序執(zhí)行過程中,所有的數(shù)據(jù)對象都存儲在計算機內(nèi)存儲器里。任何一個數(shù)據(jù)對象在它被執(zhí)行的那段期間內(nèi)都有一個確定的存儲位置,占據(jù)著確定數(shù)目的存儲單元。且每個存儲單元有一個唯一的編號,即地址。地址在計算機內(nèi)部是用二進(jìn)制編碼表示的,可作為程序中能夠被處理的數(shù)據(jù)。第136頁/共446頁scanf(“%d”,&i);

地址和指針地址20002002……3000printf(“%d”,i);i_pointer=&i;

2000i_pointer123i_pointeriinti;int*i_pointer;第137頁/共446頁1.指針的概念指針是一種特殊的變量,本質(zhì)是變量,但存放的是某個變量的地址。指針變量同樣具有變量名、變量數(shù)據(jù)類型和變量值。注意內(nèi)存單元的地址和內(nèi)存單元的內(nèi)容是兩個不同的概念。第138頁/共446頁設(shè):inti,j,k;i=3,j=6;k=i+j;(直接訪問)i_pointer=&i;(間接訪問)第139頁/共446頁2.指針變量的定義指針變量定義的一般形式: 類型*標(biāo)識符;說明: “標(biāo)識符”是指針變量的名字;“類型”表明該指針變量所指向的變量類型。int*i_pointer;inti;第140頁/共446頁舉例:inti,j;int*pointer_1,*pointer_2; pointer_1=&i; pointer_2=&j;注意:一個指針變量只能指向同一個類型的變量。指針變量存儲地址,以二進(jìn)制編碼表示,一般占2個字節(jié)空間。第141頁/共446頁3.指針變量的引用指針變量中只能存放地址例如: inta,*p1,*p2; p1=&a;(正確寫法) p2=3;(錯誤寫法!)指針變量的相關(guān)運算符:

&(取地址運算符)和*(指針運算符)第142頁/共446頁scanf(“%d”,&i);printf(“%d”,i);i_pointer=&i;

inti,*i_pointer;scanf(“%d”,i_pointer);printf(“%d”,*i_pointer);指針運算符第143頁/共446頁i_pointer==*i_pointer==&*i_pointer==*&i==i_pointer=&i;

inti,*i_pointer;&ii_pointer

ii第144頁/共446頁4.指針作為函數(shù)參數(shù)voidswap(inta,intb){ intc; c=a; a=b; b=c;}main(){ intx,y; scanf("%d%d",&x,&y); if(x<y) swap(x,y); printf("%d,%d",x,y);}第145頁/共446頁第146頁/共446頁voidswap(int*a,int*b){ intc; c=*a; *a=*b; *b=c;}main(){ intx,y; scanf("%d%d",&x,&y); if(x<y)swap(&x,&y); printf("%d,%d",x,y);}第147頁/共446頁第148頁/共446頁voidswap(int*a,int*b){ int*c;

*c=*a; *a=*b; *b=*c;}main(){ intx,y; scanf("%d%d",&x,&y); if(x<y)swap(&x,&y); printf("%d,%d",x,y);}第149頁/共446頁voidswap(int*a,int*b){ int*c; c=a; a=b; b=c;}main(){ intx,y; scanf("%d%d",&x,&y); if(x<y)swap(&x,&y); printf("%d,%d",x,y);}第150頁/共446頁第151頁/共446頁函數(shù)的參數(shù)可以是基本類型,也可以是指針類型指針作為函數(shù)參數(shù),其作用是將一個變量的地址傳送到另一個函數(shù)中去指針

溫馨提示

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

評論

0/150

提交評論