




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C語(yǔ)言程序設(shè)計(jì)主講:MTL:QQ:E-mail:主講內(nèi)容C語(yǔ)言概述算法程序的靈魂C語(yǔ)言語(yǔ)法基礎(chǔ)順序程序設(shè)計(jì)選擇程序設(shè)計(jì)循環(huán)程序設(shè)計(jì)14主講內(nèi)容數(shù)組用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)指針構(gòu)造數(shù)據(jù)類型文件輸入輸出C語(yǔ)言概述計(jì)算機(jī)語(yǔ)言低級(jí)語(yǔ)言機(jī)器語(yǔ)言、匯編語(yǔ)言高級(jí)語(yǔ)言FORTRAN、C、 VB、VC、PB高級(jí)語(yǔ)言程序設(shè)計(jì)思想非結(jié)構(gòu)化語(yǔ)言 早期BASIC 、FORTRAN結(jié)構(gòu)化語(yǔ)言 C、QBASIC面向?qū)ο笳Z(yǔ)言 VB、VCC語(yǔ)言概述C語(yǔ)言發(fā)展歷史 1970年基于BCPL語(yǔ)言的B語(yǔ)言出現(xiàn) 1973年UNIX系統(tǒng)90%代碼用C語(yǔ)言改寫(xiě) 1977年可移置的C語(yǔ)言大、中、小型機(jī) 1983年標(biāo)準(zhǔn)話ANSI CC語(yǔ)言家族
2、Microsoft C Turbo C BORLAND CC語(yǔ)言特點(diǎn) 語(yǔ)言簡(jiǎn)潔、緊湊,使用方便、靈活 運(yùn)算符豐富 數(shù)據(jù)結(jié)構(gòu)豐富,具有現(xiàn)代化語(yǔ)言的各種數(shù)據(jù)結(jié)構(gòu) 具有結(jié)構(gòu)化的控制語(yǔ)句 語(yǔ)法限制不大嚴(yán)格,程序設(shè)計(jì)自由度大 能進(jìn)行位()操作 生成目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高 用語(yǔ)言寫(xiě)的程序可移植性好(與匯編語(yǔ)言比)C語(yǔ)言概述C語(yǔ)言概述運(yùn)行C語(yǔ)言程序的方法步驟 安裝visual C+ 編輯C語(yǔ)言源程序 test1.c、test1.cpp 對(duì)源程序進(jìn)行編譯 得到目標(biāo)文件 .obj 對(duì)多個(gè)目標(biāo)文件、庫(kù)函數(shù)進(jìn)行連接,得到 .exe文件 運(yùn)行exe文件C語(yǔ)言概述簡(jiǎn)單C語(yǔ)言示例#include #include
3、 int main()int a,b,sum;a=123;b=456;sum=a+b;printf(the result of a add b is %dn,sum);getch();return 0;C語(yǔ)言概述C語(yǔ)言程序結(jié)構(gòu)一個(gè)程序由一個(gè)或多個(gè)源程序文件組成預(yù)處理命令、全局聲明、函數(shù)定義函數(shù)是C程序的主要組成部分一個(gè)函數(shù)包含2部分 函數(shù)首部、函數(shù)體程序總是從main函數(shù)開(kāi)始執(zhí)行程序?qū)τ?jì)算機(jī)的操作由函數(shù)中語(yǔ)句來(lái)實(shí)現(xiàn)每個(gè)數(shù)據(jù)聲明和語(yǔ)句最后必須有一個(gè)分號(hào)C語(yǔ)言本身不提供輸入輸出語(yǔ)句程序應(yīng)當(dāng)包含注釋 /* */ 、/算法程序的靈魂算法定義 為解決一個(gè)問(wèn)題所采取的方法和步驟,稱為算法 算法+數(shù)據(jù)結(jié)構(gòu)=
4、程序算法示例1: 計(jì)算1+2+3+.+100的和 算法1 從左至右,逐個(gè)相加,99次加法 算法2 (1+99)+(2+98)+(49+51)+50+100=5050 51次算法程序的靈魂算法示例2: 計(jì)算1*2*3*4*5的結(jié)果 算法1 從左至右,逐個(gè)相乘,4次乘法 循環(huán)算法2 設(shè)2個(gè)變量 被乘數(shù) p、乘數(shù)n S1:使p=1,或?qū)懗?=p S2:使n=2,或?qū)懗?2 =n S3:p與n相乘,結(jié)果放p中,可表示p*n =p S4: n+1 =n S5:如果n不大于5,返回S3及其后的步驟;否則算法結(jié)束,最后p的值就是計(jì)算結(jié)果算法程序的靈魂算法示例2方法比較1.算法1如果計(jì)算1*2*3*4*.*1
5、00需要99次2.算法2擴(kuò)展性好,計(jì)算1x3x5x7x9、2*4*6*8*100只要幾處改動(dòng)3.好的算法具有一般性、通用性、靈活性算法程序的靈魂算法示例3: 計(jì)算 1-1/2+1/3-1/4+-+1/99-1/100 算法 定義3個(gè)變量 符號(hào)sign、當(dāng)前累加和sum、當(dāng)前項(xiàng)分母deno S1:sign=1 S2:sum=1 S3:deno=2 S4:sign=(-1)*sign S5:sum=sum+sign*(1/deno) S6:deno=deno+1 S7:若deno100,返回S4;否則算法結(jié)束算法程序的靈魂算法的表示形式 自愿語(yǔ)言 流程圖 改進(jìn)的流程圖(三種程序結(jié)構(gòu)) N-S流程圖
6、 偽代碼 計(jì)算機(jī)語(yǔ)言(C語(yǔ)言)算法程序的靈魂用C語(yǔ)言方式實(shí)現(xiàn)1*2*3*4*5算法#include int main()int p=1,n=2;for(;n = = != 邏輯運(yùn)算符 ! | 位運(yùn)算符 | & 賦值運(yùn)算符 a=123 復(fù)合的賦值運(yùn)算符復(fù)合的賦值運(yùn)算符 x*y+8等價(jià)于 x=x*(y+8) 條件運(yùn)算符 (? :) ab?a:b 指針運(yùn)算符 * & 求字節(jié)數(shù)運(yùn)算符 sizeof C語(yǔ)言語(yǔ)法基礎(chǔ)數(shù)據(jù)輸入 格式 scanf(格式控制,地址表列) 示例 scanf(“a=%d,b=%f,c=%ld”,&a,&b,&c) 格式控制由雙撇號(hào)括起來(lái)的一個(gè)
7、字符串 格式聲明由%和格式字符組成 格式控制中的普通字符要原樣輸入或輸出 在格式控制里如果沒(méi)有其它的非格式符號(hào),在輸入空格、回車、Tab鍵或非法字符,則認(rèn)為數(shù)據(jù)結(jié)束C語(yǔ)言語(yǔ)法基礎(chǔ)數(shù)據(jù)輸出 格式 printf(格式控制,輸出表列) 格式控制類似scanf d格式 %d、%ld、%lld (實(shí)際長(zhǎng)度輸出) 、%5d 默認(rèn)靠右對(duì)齊 c格式 %c、%5c s格式 %s f格式 %f(默認(rèn)6位小數(shù),不指定輸出數(shù)據(jù)長(zhǎng)度)、%m.nf、%- m.nf e格式 %e(默認(rèn)6位小數(shù),5位指數(shù)部分,小數(shù)點(diǎn)前有且只有一位數(shù)字) 、%m.neC語(yǔ)言語(yǔ)法基礎(chǔ)數(shù)據(jù)輸出示例#include int main()printf
8、(%dn%5dn%ldn%lldn,123,123,123,123);printf(%cn%5cn,123,A);printf(%sn,hello,how are you!);printf(%-20.3fn%-18.4fn,123.2345,-2334.1234);printf(%-en%13.2en%-13.2en,123.2345,-123.2345,123.2345);C語(yǔ)言語(yǔ)法基礎(chǔ)數(shù)據(jù)輸出示例 計(jì)算1*2*3*.*100的結(jié)果#include int main()int n;double sum;printf(the length of int is %dn,sizeof(int);p
9、rintf(the length of float is %dn,sizeof(double);for(sum=1,n=2;n=100;n+)sum=sum*n;printf(the result is %fn,sum);printf(the result is %en,sum);printf(the result is %En,sum);printf(the result is %gn,sum);printf(the result is %Gn,sum);printf(the result is %dn,sum); C語(yǔ)言語(yǔ)法基礎(chǔ)用putchar函數(shù)輸出一個(gè)字符#include int ma
10、in()char c1=B,c2=O,c3=Y;int a=66,b=79,c=89; putchar(c1);putchar(c2);putchar(c3);putchar(n); putchar(); putchar(a);putchar(b);putchar(c);putchar();putchar(n);return 0;C語(yǔ)言語(yǔ)法基礎(chǔ)用getchar函數(shù)輸入一個(gè)字符#include int main()char a,b,c;a=getchar(),b=getchar(),c=getchar();putchar(a),putchar(b),putchar(c);putchar(n);r
11、eturn 0;順序程序設(shè)計(jì)程序自上而下順序執(zhí)行C語(yǔ)句NoImage順序程序設(shè)計(jì)順序程序示例1:輸入半徑,計(jì)算圓周長(zhǎng)與面積#include #include #define pi 3.1415926int main()float r,l,s;printf(please input the R of circlen);scanf(%f,&r);printf(the input R is %fn,r);l=2*pi*r;s=pi*r*r;printf(the long of the circle is %fnthe area of the circle is %fn,l,s);return
12、 0;順序程序設(shè)計(jì)順序程序示例2:輸入大寫(xiě)字母,顯示對(duì)應(yīng)的小寫(xiě)字母#include int main()char c1,c2;c1=getchar();c2=c1+32;putchar(c2);putchar(n);return 0;選擇結(jié)構(gòu)程序設(shè)計(jì)根據(jù)條件確定程序走向C語(yǔ)言用if、條件運(yùn)算符、switch語(yǔ)句實(shí)現(xiàn)選擇結(jié)構(gòu)If語(yǔ)句幾種形式if if (表達(dá)式)(表達(dá)式) 語(yǔ)句語(yǔ)句 if(xy) printf(”d”,x);0表達(dá)式語(yǔ)句1選擇結(jié)構(gòu)程序設(shè)計(jì)ifif(表達(dá)式)(表達(dá)式) 語(yǔ)句語(yǔ)句1 else 1 else 語(yǔ)句語(yǔ)句2 2if(xy) printf(”d”,x);else printf
13、(”d”,y);表達(dá)式表達(dá)式語(yǔ)句語(yǔ)句1語(yǔ)句語(yǔ)句2真假選擇結(jié)構(gòu)程序設(shè)計(jì) if if (表達(dá)式(表達(dá)式1 1) 語(yǔ)句語(yǔ)句1 1Else ifElse if(表達(dá)式(表達(dá)式2 2) 語(yǔ)句語(yǔ)句2 2else ifelse if(表達(dá)式(表達(dá)式3 3) 語(yǔ)句語(yǔ)句3 3else ifelse if(表達(dá)式(表達(dá)式m m) 語(yǔ)句語(yǔ)句m melse else 語(yǔ)句語(yǔ)句n n表達(dá)式表達(dá)式1FT表達(dá)式表達(dá)式3FT表達(dá)式表達(dá)式2FT表達(dá)式表達(dá)式4FT語(yǔ)句語(yǔ)句4語(yǔ)句語(yǔ)句5語(yǔ)句語(yǔ)句3語(yǔ)句語(yǔ)句2語(yǔ)句語(yǔ)句1選擇結(jié)構(gòu)程序設(shè)計(jì)If語(yǔ)句嵌套 在if語(yǔ)句中又包含一個(gè)或多個(gè)if語(yǔ)句稱為if語(yǔ)句的嵌套。一般形式如下:if (表達(dá)式1)
14、 if(表達(dá)式2 ) 語(yǔ)句1 else 語(yǔ)句2else if (表達(dá)式3 ) 語(yǔ)句3 else 語(yǔ)句4選擇結(jié)構(gòu)程序設(shè)計(jì)If選擇結(jié)構(gòu)程序示例#include #include main() float a,b,c,disc,x1,x2,p,q; printf(please input the three numbers of the equation,use space to separaten); scanf(%f%f%f,&a,&b,&c); printf(the input a=%f,b=%f,c=%fn,a,b,c); disc=b*b-4*a*c; if (di
15、sc0) printf(the equation has no real root!n); else p=-b/(2*a); q=sqrt(disc)/(2*a); x1=p+q; x2=p-q; printf(the roots is following:n); printf(nx1=%5.2fnx2=%5.2fnn,x1,x2); getch();return 0;NoImageNoImage選擇結(jié)構(gòu)程序設(shè)計(jì)條件運(yùn)算符 類似實(shí)現(xiàn)if語(yǔ)句的第二種形式 格式 表達(dá)式1?表達(dá)式2:表達(dá)式3 表達(dá)式1成立,取表達(dá)式2的值,否則取表達(dá)式3的值#include int main()int a,b,ma
16、x;scanf(%d%d,&a,&b);printf(the input a=%d,b=%dn,a,b);max=(ab)?a:b;printf(the max of a and b is %dn,max);選擇結(jié)構(gòu)程序設(shè)計(jì)switch語(yǔ)句是多分支選擇多分支選擇語(yǔ)句。if語(yǔ)句只有兩個(gè)分支可供選擇,而實(shí)際問(wèn)題中常常需要用到多分支的選擇。格式switch (表達(dá)式) case常量表達(dá)式1:語(yǔ)句1;break; case常量表達(dá)式2:語(yǔ)句2;break; case常量表達(dá)式n:語(yǔ)句n;break; default :語(yǔ)句n十1;選擇結(jié)構(gòu)程序設(shè)計(jì)Switch 選擇結(jié)構(gòu)示例學(xué)生成績(jī)由好到
17、差用A、B、C、D表示不同分?jǐn)?shù)段,輸入字母,打印相應(yīng)的成績(jī)段#include int main()char grade;printf(please input the char of graden);scanf(%c,&grade);printf(the char of grade is %cn,grade);switch(grade) case A:printf(85100n);break;case B:printf(7084n);break; case C:printf(6069n);break; case D:printf(60n);break;default:printf(in
18、put errorn);循環(huán)程序設(shè)計(jì)在許多問(wèn)題中需要用到循環(huán)控制循環(huán)實(shí)現(xiàn)方式 If與goto語(yǔ)句 While語(yǔ)句 Dowhile語(yǔ)句 For語(yǔ)句If與goto語(yǔ)句循環(huán) 格式:If(表達(dá)式)Goto label循環(huán)程序設(shè)計(jì) 用ifgoto實(shí)現(xiàn) 1*2*3*4*5#include int main()int p=1,n=2;label1:if(n=5) p=p*n; n=n+1; goto label1; printf(the result is %dn,p);用ifgoto實(shí)現(xiàn) 1*2*3*4*5#include int main()int p=1,n=2;label1:p=p*n;n=n+1;
19、if(n=5) goto label1;printf(the result is %dn,p);循環(huán)程序設(shè)計(jì)While語(yǔ)句循環(huán) 格式 while(表達(dá)式) 語(yǔ)句 表達(dá)式條件成立,反復(fù)執(zhí)行語(yǔ)句內(nèi)容表達(dá)式表達(dá)式語(yǔ)句語(yǔ)句0非非0循環(huán)程序設(shè)計(jì) 用while實(shí)現(xiàn)1*2*3*4*5運(yùn)算#include int main()int p=1,n=2;while(n=5)p=p*n;n+;printf(the result is %dn,p);return 0;循環(huán)程序設(shè)計(jì)Dowhile語(yǔ)句循環(huán)格式 do 語(yǔ)句 while(表達(dá)式)先執(zhí)行一次語(yǔ)句,然后判斷表達(dá)式是否成立,成立繼續(xù)執(zhí)行語(yǔ)句,直至條件不成立#inc
20、lude int main()int p=1,n=2;dop=p*n;n+;while(n=5);printf(the result is %dn,p);return 0;表達(dá)式語(yǔ)句yesno循環(huán)程序設(shè)計(jì)For語(yǔ)句循環(huán)格式 for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 語(yǔ)句執(zhí)行過(guò)程1.表達(dá)式1初始條件,只執(zhí)行一次2.執(zhí)行表達(dá)式2,判斷條件是否成立,成立執(zhí)行語(yǔ)句,不成立跳出循環(huán)到步驟43.執(zhí)行表達(dá)式3,返回步驟24.循環(huán)結(jié)束循環(huán)程序設(shè)計(jì) For循環(huán)流程圖#include int main()int p,n;for(p=1,n=2;n=5;n+)p=p*n;printf(the result is %d
21、n,p);return 0;語(yǔ)句表達(dá)式1表達(dá)式2表達(dá)式3成立不成立循環(huán)程序設(shè)計(jì)For、while、dowhile可以相互循環(huán)嵌套用break語(yǔ)句可以提前終止循環(huán)#include #define SUM 100000int main()int i;float amount,aver,total;for(i=1,total=0;i=SUM) break;aver=total/i;printf(when number reach to %d:naver=%10.2fn,i,aver); printf(total=%fn, total);循環(huán)程序設(shè)計(jì)用continue提前結(jié)束本次循環(huán) 輸出100至20
22、0之間不能被3整除的數(shù) #include int main() int n;for(n=100;n=200;n+)if(n%3=0)continue;printf(%d,n);printf(n);return 0; 數(shù)組數(shù)組概念 是一組有序數(shù)據(jù)的集合,每一個(gè)數(shù)據(jù)就是一個(gè)元素 數(shù)組中每一個(gè)元素都屬于同一種類型 用數(shù)組名和下標(biāo)確定數(shù)組中的元素 數(shù)組與循環(huán)結(jié)合可以處理大批量數(shù)據(jù)問(wèn)題一維數(shù)組定義 類型符 數(shù)組名常量表達(dá)式 常量表達(dá)式表示數(shù)組元素的個(gè)數(shù),下標(biāo)從0開(kāi)始 常量表達(dá)式可以是常量或符號(hào)常量,不能是變量數(shù)組 例 int a 10 數(shù)組名為a,包含10個(gè)整形元素a數(shù)組有10個(gè)元素下標(biāo)從0開(kāi)始10個(gè)元
23、素是 a0、a1、a2、a3、a4、a5、a6、a7、a8、a9不能使用數(shù)組元素a10 下面使用變量定義數(shù)組是不行的 int n; scanf(“%d”,&n); int an;數(shù)組一維數(shù)組引用 數(shù)組名下標(biāo) T=a7一維數(shù)組簡(jiǎn)單示例 #include int main() int i,a10;for(i=0;i=0;i-)printf(%d ,ai);printf(n); 數(shù)組一維數(shù)組初始化 定義時(shí)全部元素賦初值Int a7=0,1,2,3,4,5,6 定義時(shí)部分元素賦初值Int a7=0,1,2,3 全部元素賦0Int a7=0,0,0,0,0,0,0、 Int a7=0 定義時(shí)給出
24、全部元素值時(shí),可以不指定數(shù)組長(zhǎng)度Int a=1,3,5,7,9,11,13,15數(shù)組二維數(shù)組定義 類型符 數(shù)組名常量表達(dá)式常量表達(dá)式 float a34,b510 a為3*4(3行4列)數(shù)組,b為5行10列數(shù)組 二維數(shù)組可以看作特殊的一維數(shù)組a0 - a00 a01 a02 a03 a1 - a10 a11 a12 a13 a2 - a20 a21 a22 a23 數(shù)組二維數(shù)組引用 數(shù)組名下標(biāo)下標(biāo) T=b12二維數(shù)組初始化 分行給二維數(shù)組賦初值Int a34=1,2,3,4,5,6,7,8,1,3,5,7 可以將所有數(shù)據(jù)寫(xiě)在一個(gè)花括號(hào)里int23=1,2,3,4,5,6 可以對(duì)部分元素賦初值,
25、其余為0int33=1,2,3,4 全部元素賦值時(shí),第1維長(zhǎng)度可以不指定,第2維要指定Int a23=1,2,3,4,5,6、int a3=1,2,3,4,5,6Int a4=0,0,3,0,10數(shù)組二維數(shù)組應(yīng)用示例 在3*4二維數(shù)組中找最大值#include int main()int i,j,row=0,colum=0,max;int a34=1,2,3,4,9,8,7,6,-10,10,-5,2;max=a00;for(i=0;i=2;i+)for(j=0;jmax)max=aij;row=i;colum=j;printf(max=%dnrow=%dncolum=%dn,max,row,
26、colum);return 0;數(shù)組字符數(shù)組定義與初始化 char c10 char c5=h,e,l,l,o C0=h c1=e c2=l char c =h,e,l,l,o Char diamond55=,*,*,*,*,*,*,*,*數(shù)組字符數(shù)組示例 輸出一個(gè)菱形 #include int main() int i,j;char diamond55= , ,*, ,*, ,*,*, , , ,*, ,*, ,*, , ,*;for(i=0;i=4;i+)for(j=0;j=4;j+) printf(%c,diamondij); printf(n);return 0; 數(shù)組字符串及結(jié)束標(biāo)志
27、 字符串作為數(shù)組來(lái)處理 字符串結(jié)束標(biāo)識(shí) 0 ASCII值為 0 等價(jià)形式char c=“I am happy”char c=“I am happy”char c=i, ,a,m, ,h,a,p,p,y,0數(shù)組字符數(shù)組輸入輸出 逐個(gè) 字符輸出 printf(“ %c”,c3) 字符串輸出 printf(“ %s”,c) c為數(shù)組名 輸出不包括結(jié)束符號(hào) 0 結(jié)束符號(hào) 0 對(duì)應(yīng)無(wú)符號(hào) 遇到0 輸出結(jié)束#include int main()char c=“I am happy.0 yes or no?;printf(%sn,c);return 0;只能輸出 I am happy.數(shù)組字符串處理函數(shù) 輸
28、出字符串函數(shù)char str=BeijingnShenn;puts(str); 輸入字符串函數(shù)char str20;gets(str);puts(str); 字符串鏈接函數(shù) strcat(字符數(shù)組1,字符數(shù)組2)把字符串2連接在1的 后面,結(jié)果放字符串1中字符串1空間夠大連接時(shí)將字符串1后面的0標(biāo)志取消,在新串后面保留0數(shù)組字符串復(fù)制函數(shù)strcpy、strncpy Strcpy(str1,str2)、 strncpy(str1,str2,n) 將字符串2復(fù)制到字符串1中,全部替換1的內(nèi)容 將字符串2的前n個(gè)字符復(fù)制到字符串1中,替換1的前n個(gè) 字符串1要夠大char str151=i am
29、happy,str2=china,hellow how are you!;printf(the length of str1 is :%dn,strlen(str1);strcpy(str1,str2);puts(str1);printf(the length of str1 is :%dn,strlen(str1);轉(zhuǎn)換為小寫(xiě)函數(shù) strlwr(str1)轉(zhuǎn)轉(zhuǎn)為大寫(xiě)函數(shù) strupr(str1)char str1=hello,how are you!;printf(%sn,str1);printf(%sn,strupr(str1);printf(%sn,strlwr(strupr(str1)
30、;數(shù)組 字符串比較函數(shù) strcmp(str1,str2)兩字符串從左至右逐個(gè)字符比較,直到出現(xiàn)不同的字符為止或遇到 0比較結(jié)果Str1=str2,函數(shù)值=0Str1str2,函數(shù)值0Str1str2,函數(shù)值0 測(cè)字符串長(zhǎng)度 strlen(str1)測(cè)字符串長(zhǎng)度,不 包括0char str10=china;printf(%dn,strlen(str);用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)函數(shù)引入 用c語(yǔ)言輸出以下結(jié)果*How are you!* 實(shí)現(xiàn)方法一:用printf語(yǔ)句實(shí)現(xiàn),程序有n個(gè)地方要輸出上結(jié)果,就在n個(gè) 地方寫(xiě)代碼,修改需要那個(gè)地方分別修改。printf(*n);printf(How are
31、 you!n);printf(*n);用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì) 用函數(shù)實(shí)現(xiàn),便于修改#include int main()void print_star();void print_message();print_star();print_message();print_star();void print_star()printf(*n);void print_message()printf(How are you!n);用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)說(shuō)明 一個(gè)C程序由一個(gè)或多個(gè)程序模塊組成,一個(gè)程序模塊就是一個(gè)C語(yǔ)言源程序;一個(gè)C語(yǔ)言源程序可以為多個(gè)程序共用 一個(gè)C語(yǔ)言源程序文件由一個(gè)或多個(gè)函數(shù)組成
32、,一個(gè)源程序文件就是一個(gè)編譯單位 C程序執(zhí)行從main函數(shù)開(kāi)始,也在main函數(shù)結(jié)束,main函數(shù)可以調(diào)用其它函數(shù) 函數(shù)間可以相互調(diào)用,但是不能調(diào)用main函數(shù),main函數(shù)由操作系統(tǒng)調(diào)用 從用戶角度分,函數(shù)有 庫(kù)函數(shù) 用戶自定義函數(shù) 從函數(shù)形式分 無(wú)參函數(shù) print_star()、print_message() 有參函數(shù) max(int a,int b)用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)函數(shù)定義 定義無(wú)參數(shù)函數(shù) print_star()、print_message()類型名 函數(shù)名()函數(shù)體 定義有參數(shù)函數(shù) max(int a,int b)類型名 函數(shù)名(形式參數(shù)表列)函數(shù)體用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)
33、函數(shù)調(diào)用 格式 函數(shù)名(實(shí)參表列) 函數(shù)調(diào)用語(yǔ)句,沒(méi)有函數(shù)帶回值,只要求函數(shù)完成一定的操作 print_star() 函數(shù)表達(dá)式 c=2*max(a,b) 函數(shù)參數(shù) M=max(a,max(b,c)Printf(%d,max(a,b)用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)函數(shù)使用示例#include int main()int max(int,int);int a,b,c;printf(please input two numbers:n);scanf(%d,%d,&a,&b);c=max(a,b);printf(max is %dn,c);return 0;int max(int a,in
34、t b)return(ab?a:b);用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)函數(shù)嵌套調(diào)用#include int main()int max4(int,int,int,int);int a,b,c,d,max;printf(please input four numbers:n);scanf(%d%d%d%d,&a,&b,&c,&d);max=max4(a,b,c,d);printf(max=%dn,max);return 0;int max4(int a,int b,int c,int d)int max2(int a,int b);int m;m=max2(a,b);m=
35、max2(m,c);m=max2(m,d);return m;int max2(int x,int y)return(xy?x:y);用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)函數(shù)遞歸調(diào)用類似數(shù)學(xué)等差數(shù)列age(n)=age(n-1)+2 age(1)=10#include int main()int age(int);printf(NO.5,age:%dn,age(5);int age(int n)int c;if(n=1)c=10;elsec=age(n-1)+2;return c;用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)數(shù)組作為函數(shù)的參數(shù) 數(shù)組元素作為實(shí)參數(shù) m=max(12,a2)Scanf(“%d”,&a4)
36、 數(shù)組名作為函數(shù)參數(shù)Float score10,averFloat average(float array10)Aver=average(score) 多維數(shù)組名作為函數(shù)參數(shù)用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)變量定義幾種情況 在函數(shù)開(kāi)頭定義 在復(fù)合語(yǔ)句內(nèi)定義 在函數(shù)外部定義變量分類 局部變量 在函數(shù)內(nèi)部定義 全局變量 在函數(shù)之外定義,作用范圍為定義變量的位置到本源程序結(jié)束全局變量使用示例用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)#include float Max=0,Min=0;int main()float average(float array,int n);float aver,score10;int i;pri
37、ntf(please input 10 numbers:n);for(i=0;i=9;i+) scanf(%f,&scorei);aver=average(score,10);printf(max=%6.2fnmin=%6.2fnaverage=%6.2fn,Max,Min,aver);return 0;float average(float array,int n)int i;float aver,sum=array0;Max=Min=array0;for(i=1;iMax) Max=arrayi;else if(arrayiMin) Min=arrayi;sum=sum+array
38、i;aver=sum/n;return aver;用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)變量的存儲(chǔ)方式 靜態(tài)存儲(chǔ)方式 運(yùn)行期間系統(tǒng)分配固定空間 動(dòng)態(tài)存儲(chǔ)方式 運(yùn)行期間根據(jù)需要?jiǎng)討B(tài)分配用戶存儲(chǔ)空間劃分 程序區(qū)存放程序代碼 靜態(tài)區(qū)存儲(chǔ)全局變量 動(dòng)態(tài)區(qū)存儲(chǔ)函數(shù)形式參數(shù) 調(diào)用函數(shù)時(shí)給形參分配自動(dòng)變量函數(shù)調(diào)用的現(xiàn)場(chǎng)保護(hù)和返回地址程序區(qū)靜態(tài)存儲(chǔ)區(qū)動(dòng)態(tài)存儲(chǔ)區(qū)用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)C函數(shù)和 變量的存儲(chǔ)類型 自動(dòng)的 auto 靜態(tài)的 static 寄存器 register 外部的 extern局部變量存儲(chǔ)類型 自動(dòng)變量 auto 默認(rèn)存儲(chǔ)類型 int a 靜態(tài)局部變量 static static int a用函數(shù)實(shí)現(xiàn)模塊化
39、程序設(shè)計(jì) 寄存器變量 register 速度效率register int a 靜態(tài)局部變量使用示例 #include int main() int f(int);int a=2,i;for(i=0;i3;i+)printf(%dn,f(a);return 0; int f(int a)auto int b=0;static c=3;b=b+1;c=c+1;return(a+b+c);用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)全局變量存儲(chǔ)類型 全局變量默認(rèn)作用域從定義位置到程序末尾 在一個(gè)文件內(nèi)擴(kuò)展外部變量的作用域,即在全局變量定義點(diǎn)前的函數(shù)要想使用這個(gè)全局變量,需要在使用前進(jìn)行外部變量聲明 extern int
40、 A,B 將外部變量的作用域擴(kuò)展到其它文件,即在由多個(gè)源程序構(gòu)成的C程序中,一個(gè)源程序想使用另外一個(gè)源程序文件的全局變量,要先extern 外部全局變量名 進(jìn)行聲明 將外部變量的作用域限制在本文件中 static int A用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)全局變量擴(kuò)展到其它文件示例/P2.c,需要和P1.c一起編譯并連接: gcc p1.c p2.c o p1/*求A的n次方*/#include P2.hint power(int n)int i,y=1;for(i=1;i=n;i+)y*=A;return y;/P2.hextern A;int power(int n);/P1.c:#include
41、 #include P2.hint A;int main() int power(int);int m,d;printf(enter the number A and its power m:n);scanf(%d,%d,&A,&m);printf(A=%d,its power is :%dn,A,m);d=power(m);printf(%d*%d=%dn,A,m,d);用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)C函數(shù)存儲(chǔ)類型 默認(rèn) extern 不僅可以被本文件函數(shù)調(diào)用,還可以被其它文件函數(shù)調(diào)用;當(dāng)被其它文件調(diào)用時(shí)要先include filename,然后聲明再使用 內(nèi)部函數(shù) 只能被本文件函
42、數(shù)調(diào)用 static int max(int a,int b)指針指針概念 一個(gè)變量的地址稱為該變量的指針 不掌握指針就沒(méi)有掌握C精華 存放地址的變量稱為指針變量定義指針變量類型名 *指針變量名*表示該變量為指針型變量類型名表示指針指向的變量類型Int *pointer_1 pointer_1是指向整形變量的指針Float *pointer_2 pointer_2是指向float形變量的指針指針指針使用 指針變量賦值 Int *p_1=&a Int *p_1;P_1=&b 引用指針變量指向的變量值 Printf(“%d”,*p_1) *p_1=2 賦值 引用指針變量的值 Pri
43、ntf(“%o”,p) 八進(jìn)制形式輸出指針值 Printf(“%x”,p) 十六進(jìn)制形式輸出指針值指針指針使用示例 /*用指針輸出整形變量的值、指針值*/ #include int main() int a=50;int *pointer_1=&a;printf(a=%dna=%dn,a,*pointer_1);printf(the address of a is %on,pointer_1);printf(the address of a is %Xn,pointer_1); 指針指針變量作為函數(shù)的參數(shù)/*用指針變量作為參數(shù)對(duì)輸入的2整數(shù)按大小輸出*/void exchange(in
44、t *p1,int *p2)int temp;temp=*p1;*p1=*p2;*p2=temp;#include int main()void exchange(int *p_1,int *p_2);int a,b;int *pt_1,*pt_2;printf(please input a and b:n);scanf(%d,%d,&a,&b);pt_1=&a;pt_2=&b;if(ab) exchange(pt_1,pt_2);printf(max=%d,min=%dn,a,b);指針通過(guò)指針引用數(shù)組 指針可以指向變量,也可以指向數(shù)組元素 數(shù)組名代表數(shù)組首元
45、素的地址 Int *p,a8=1,3,5,7,9,11,13,15 p=&a0、 p=a、int *p=a等價(jià) P+1、p+、p-1、p-指向同一數(shù)組的下一個(gè)、上一個(gè)元素 +1表示加上一個(gè)數(shù)組元素所占用的字節(jié)數(shù)指針通過(guò)指針引用數(shù)組元素輸出示例 #include int main() int a10;int *p,i;printf(please input ten numbers:n);for(i=0;i10;i+)scanf(%d,&ai);for(p=a;p(a+10);p+)printf(“%d ”,*p);/*比較printf(%d ,p);*/printf(n ); 指
46、針指向多維數(shù)組的指針變量 Int a34=1,2,3,4,5,6,7,8,9,10,11,12 Int *p=a0 Int (*p)4,I,j /p指向包含4個(gè)元素的一維數(shù)組 P=a /p指向二維數(shù)組的0行 *(*(p+i)+j) /aij的值通過(guò)字符指針變量輸出一個(gè)字符串 char *string=“I love China.” Printf(“%sn”,string) C語(yǔ)言對(duì)字符串常量是按字符數(shù)組處理的,但字符數(shù)組沒(méi)有名字,只能通過(guò)指針變量來(lái)引用。 等價(jià) char string=“I love China.” Printf(“%sn”,string)指針函數(shù)指針變量 定義 int (*p
47、)(int ,int) 指向 int max(int,int) p=max 使用 c=(*p)(a,b)指針數(shù)組 類型名 *數(shù)組名數(shù)組長(zhǎng)度 Int *p4 P是一個(gè)指針數(shù)組,有4個(gè)元素,每個(gè)元素都指向一個(gè)整形變量構(gòu)造數(shù)據(jù)類型結(jié)構(gòu)體類型聲明 Struct 結(jié)構(gòu)體名 成員列表; 成員列表格式 類型名 成員名; Struct dateint month;Int day;Int year;構(gòu)造數(shù)據(jù)類型結(jié)構(gòu)體變量定義 Struct date dt1,dt2; Struct dateint month;Int day;Int year;dt1,dt2; Struct int month;Int day;I
48、nt year; dt1,dt2;構(gòu)造數(shù)據(jù)類型結(jié)構(gòu)體變量的初始化和引用 引用 結(jié)構(gòu)體變量名.成員名 dt1.month=6 Struct date int month;Int day;Int year;dt1=6,18,2015; Struct date dt1=.month=6; Scanf(“%d”,&dt1.month)構(gòu)造數(shù)據(jù)類型使用結(jié)構(gòu)體數(shù)組#include #include struct Personchar name20;int count;leader3=li,0,zhang,0,sun,0;/*leader3=li,0,zhang,0,sun,0;*/int main
49、()int i,j;char leader_name20;for(i=1;i=10;i+)scanf(%s,leader_name);for(j=0;j3;j+)if(strcmp(leader_name,)=0)leaderj.count+;printf(nresult:n);for(i=0;iname構(gòu)造數(shù)據(jù)類型指向結(jié)構(gòu)體數(shù)組的指針struct student stu3=*;Struct student *p;P=stu;P+P-.name構(gòu)造數(shù)據(jù)類型定義共用體類型 union 共用體名成員表列變量表列; union Dataint i;char ch;float
50、f;a,b,c; 同一地址開(kāi)始的內(nèi)存段存儲(chǔ)不同類型的變量,后面的數(shù)據(jù)覆蓋前面的數(shù)據(jù) 共用體變量所占內(nèi)存長(zhǎng)途等于最大的成員長(zhǎng)度 a.i=78;a.ch=S;構(gòu)造數(shù)據(jù)類型聲明枚舉類型 enum 枚舉名枚舉元素列表; enum Weekdaysun,mon,tue,wed,thu,fri,sat; enum Weekday workday,weekend; workday=mon;weekend=sun; 每一個(gè)枚舉元素都代表一個(gè)整數(shù),默認(rèn)0,1,2,3,一次增加 workday=mon等價(jià)workday=1; Printf(“%d”,workday) 輸出1構(gòu)造數(shù)據(jù)類型用typedef聲明新類型名 Typedef int Integer; / Integer為新類型名,作用與int相同 Typedef structint mon
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司票據(jù)活動(dòng)方案
- 公司糖酒會(huì)活動(dòng)方案
- 公司芒種節(jié)氣活動(dòng)方案
- 2025年職業(yè)道德與社會(huì)責(zé)任考試試卷及答案
- 2025年自動(dòng)化專業(yè)實(shí)踐能力考核試題及答案
- 2025年文化創(chuàng)意產(chǎn)業(yè)相關(guān)工作者考試試題及答案
- 2025年體能訓(xùn)練師職業(yè)資格考試試卷及答案
- 2025年人力資本管理師職業(yè)資格考試題及答案
- 2025年軟件開(kāi)發(fā)工程師資格考試試卷及答案
- AR環(huán)境交互設(shè)計(jì)-洞察及研究
- 關(guān)于水表考試題及答案
- 落實(shí)責(zé)任制整體護(hù)理總結(jié)
- 短文選詞填空12篇(新疆中考真題+中考模擬)(解析版)
- 植物化學(xué)保護(hù)學(xué)知到課后答案智慧樹(shù)章節(jié)測(cè)試答案2025年春華南農(nóng)業(yè)大學(xué)
- 新能源發(fā)展與環(huán)境保護(hù)試題及答案
- 網(wǎng)絡(luò)安全威脅情報(bào)共享-深度研究
- 項(xiàng)目三公示語(yǔ)翻譯
- 《電動(dòng)車充電器教材》課件
- 業(yè)主不讓維修通知函
- 藥店醫(yī)保知識(shí)培訓(xùn)課件
- 《中暑的預(yù)防與急救》課件
評(píng)論
0/150
提交評(píng)論