




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、C語言復(fù)習(xí)及C基礎(chǔ)知識講座第二章第二章 C語言復(fù)習(xí)及語言復(fù)習(xí)及C+基礎(chǔ)知識基礎(chǔ)知識C語言復(fù)習(xí)及C基礎(chǔ)知識講座2.1.1 C+的起源的起源2.1.2 C+的特點(diǎn)的特點(diǎn) *.c C的源程序的源程序 以下的文件以下的文件C和和C+都可用:都可用: *.h C的頭包含文件的頭包含文件 *.cpp C+的源程序的源程序 *.hpp C+的頭包含文件的頭包含文件 /* */ C的注釋的注釋 / C +的注釋的注釋2.1 C+的起源和特點(diǎn)的起源和特點(diǎn)1C語言復(fù)習(xí)及C基礎(chǔ)知識講座2.2 C+源程序的構(gòu)成源程序的構(gòu)成2.2.1 C+程序的一般格式程序的一般格式例例2.1 說明說明C+構(gòu)造的示例程序構(gòu)造的示例程序
2、#include / 系統(tǒng)頭文件系統(tǒng)頭文件int add(int a, int b); /函數(shù)原型的說明函數(shù)原型的說明int main( ) /主函數(shù)主函數(shù) int x,y,sum; /定義三個整型變量定義三個整型變量 cout輸入二個數(shù)輸入二個數(shù):x; /從鍵盤輸入變量從鍵盤輸入變量x的值的值 ciny; /從鍵盤輸入變量從鍵盤輸入變量y的值的值 sum=add(x,y); /調(diào)用函數(shù)調(diào)用函數(shù)add,將函數(shù)返回值賦給變量將函數(shù)返回值賦給變量sum cout二數(shù)和是二數(shù)和是:sumn; /輸出輸出 return 0;int add(int a, int b) /定義函數(shù)定義函數(shù)add,函數(shù)函數(shù)
3、(返回返回)值為整型值為整型 int c; /定義臨時變量定義臨時變量c c=a+b; /求和求和 return c; /將將c的值返回的值返回,通過通過add帶回調(diào)用處帶回調(diào)用處2C語言復(fù)習(xí)及C基礎(chǔ)知識講座2.2.2 C+程序的結(jié)構(gòu)特性程序的結(jié)構(gòu)特性1.包含文件及頭文件包含文件及頭文件2.標(biāo)準(zhǔn)輸入與輸出標(biāo)準(zhǔn)輸入與輸出 printf(格式說明格式說明,表達(dá)式表列表達(dá)式表列); scanf(格式說明格式說明,地址表列地址表列); cout3.新行新行 “n” endl4.主函數(shù)主函數(shù) void main( ) .5. 一般的函數(shù)一般的函數(shù) 函數(shù)頭函數(shù)頭 int add (int a, int b
4、) 函數(shù)體函數(shù)體 int c; /變量定義變量定義 c=a+b; /執(zhí)行部分執(zhí)行部分 return c; 3C語言復(fù)習(xí)及C基礎(chǔ)知識講座6.面向?qū)ο蟮奶匦悦嫦驅(qū)ο蟮奶匦?類的聲明部分類的聲明部分 類的使用部分類的使用部分例例2.2 #include /類的聲明部分類的聲明部分class A int x,y,z; /類類A的數(shù)據(jù)成員聲明的數(shù)據(jù)成員聲明 fun( ) /類類A的成員函數(shù)聲明的成員函數(shù)聲明 ;/類的使用部分類的使用部分void main( ) A a; /創(chuàng)建一個類創(chuàng)建一個類A的對象的對象a . a.fun( ); /給對象給對象a發(fā)消息,調(diào)用成員函數(shù)發(fā)消息,調(diào)用成員函數(shù)fun( )C
5、語言復(fù)習(xí)及C基礎(chǔ)知識講座2.3 C+在非面向?qū)ο蠓矫娴囊恍┨匦栽诜敲嫦驅(qū)ο蠓矫娴囊恍┨匦?.3.1 注釋行注釋行/* */ C的注釋的注釋 / C +的注釋的注釋2.3.2 新的新的I/O流流cin是標(biāo)準(zhǔn)輸入流,在程序中代表標(biāo)準(zhǔn)輸入設(shè)備,即鍵盤。是標(biāo)準(zhǔn)輸入流,在程序中代表標(biāo)準(zhǔn)輸入設(shè)備,即鍵盤。 運(yùn)算符運(yùn)算符“”表示向右表示向右cout是標(biāo)準(zhǔn)輸出流,在程序中代表標(biāo)準(zhǔn)輸出設(shè)備,即屏幕。是標(biāo)準(zhǔn)輸出流,在程序中代表標(biāo)準(zhǔn)輸出設(shè)備,即屏幕。 運(yùn)算符運(yùn)算符“”表示向左表示向左使用使用cin或或cout進(jìn)行進(jìn)行I/O操作時,在程序中必須嵌入頭文件操作時,在程序中必須嵌入頭文件iostream.h/例例2.3#
6、include int main( ) char name20; coutname; coutnameendl; return 0;/例例2.4#include void main( ) int x=25;couthexxdecxoctx=0;k-) . .以上的寫法在以上的寫法在C程序中都是錯誤的,但在程序中都是錯誤的,但在C+程序中都是正確的。程序中都是正確的。5C語言復(fù)習(xí)及C基礎(chǔ)知識講座2.3.4 結(jié)構(gòu)、聯(lián)合和枚舉名可直接作為類型名結(jié)構(gòu)、聯(lián)合和枚舉名可直接作為類型名定義枚舉類型名:定義枚舉類型名:enum bool FALSE, TRUE;定義結(jié)構(gòu)枚舉類型名:定義結(jié)構(gòu)枚舉類型名:Stru
7、ct student int sno; char *sneme;C語言中定義枚舉類型變量:語言中定義枚舉類型變量: enum bool done;定義結(jié)構(gòu)類型變量:定義結(jié)構(gòu)類型變量: struct student s1, s2;C+語言中定義枚舉類型變量:語言中定義枚舉類型變量: bool done;定義結(jié)構(gòu)類型變量:定義結(jié)構(gòu)類型變量: student s1, s2;6C語言復(fù)習(xí)及C基礎(chǔ)知識講座2.3.5 const修飾符修飾符#define LIMIT 100這里這里 LIMIT 是一個標(biāo)志,代表是一個標(biāo)志,代表 100const int LIMIT=100;這里這里 LIMIT 是一個常量
8、名,在內(nèi)存有空間放了是一個常量名,在內(nèi)存有空間放了100,因此有地址,因此有地址,可以用指針指向這空間,但不能修改它??梢杂弥羔樦赶蜻@空間,但不能修改它。int i=100;這里這里 i 是一個變量名,在內(nèi)存有空間放了是一個變量名,在內(nèi)存有空間放了100,因此有地址,可以用,因此有地址,可以用指針指向這空間,且可以改放別的整數(shù)。指針指向這空間,且可以改放別的整數(shù)。(1) 可以用一個指向常量的指針變量指向常量:可以用一個指向常量的指針變量指向常量: const char *name=“chen”; name3=a; /錯誤錯誤 name=“zhang”;/正確正確(2)指針常量指針常量 char
9、 *const name=“chen”; name3=a; /正確正確 name=“zhang”; /錯誤錯誤(3) const char *const name =“chen”;namechen常量常量zhang常量常量nXanamechenzhang常量常量an aX7C語言復(fù)習(xí)及C基礎(chǔ)知識講座/例例2.5#include main( ) int a=1; #define T1 a+a #define T2 T1-T1 coutT2 is T2endl; return 0; cout“T2 is “a+a-a+aendl;/例例2.6#include main( ) int a=1; co
10、nst T1=a+a; const T2=T1-T1; coutT2 is T2endl; return 0;T2a+aa+aT1-T18C語言復(fù)習(xí)及C基礎(chǔ)知識講座2.3.6 內(nèi)置函數(shù)內(nèi)置函數(shù)/例例2.7#include int main( ) 3次次 for(int i=1;i=3;i+) coutr=i area=circle(i)endl; return 0;在函數(shù)前加以在函數(shù)前加以 inline ,成為內(nèi)置函數(shù)成為內(nèi)置函數(shù)#include int main( ) 代碼嵌入代碼嵌入 for(int i=1;i=3;i+) coutr=i area=circle(i)endl; retur
11、n 0;float circle(float r) return 3.1416*r*r; inline float circle(float r) return 3.1416*r*r; 9C語言復(fù)習(xí)及C基礎(chǔ)知識講座/例例2.8#include #define doub(x) x*2int main( ) for(int i=1;i=3;i+) couti doubled is doub(i)endl; cout1+2 doubled is doub(1+2)endl; return 0;/例例2.9#include inline int doub(int x) return x*2; int
12、main( ) for(int i=1;i=3;i+) couti doubled is doub(i)endl; cout1+2 doubled is doub(1+2)endl; return 0;10C語言復(fù)習(xí)及C基礎(chǔ)知識講座2.3.7 函數(shù)原型函數(shù)原型返回類型返回類型 函數(shù)名(參數(shù)表)函數(shù)名(參數(shù)表);/例例2.10#include void write(char *s); /函數(shù)原型或叫函數(shù)聲明函數(shù)原型或叫函數(shù)聲明 void main( ) write(Hello, world!); void write(char *s)無分號無分號 coutsendl; 使用在前,定義在后,要先聲
13、明。使用在前,定義在后,要先聲明。若定義在前,使用在后,就可不必聲明。若定義在前,使用在后,就可不必聲明。說明說明: (1) - (8)11C語言復(fù)習(xí)及C基礎(chǔ)知識講座2.3.8 帶有缺省參數(shù)的函數(shù)帶有缺省參數(shù)的函數(shù)C+在說明函數(shù)原型時,可以為一個或多個參數(shù)指定缺省參數(shù)值,在說明函數(shù)原型時,可以為一個或多個參數(shù)指定缺省參數(shù)值,以后調(diào)用此函數(shù)時,若省略其中某一實(shí)參,以后調(diào)用此函數(shù)時,若省略其中某一實(shí)參,C+自動以缺省值作為自動以缺省值作為相應(yīng)參數(shù)的值。相應(yīng)參數(shù)的值。int special(int x=5, float y=5.3);合法的調(diào)用;合法的調(diào)用;special();special(25)
14、;special(100,79.8);說明說明:(1)所有取缺省值參數(shù)都必須出現(xiàn)在不取缺省值參數(shù)的右邊。所有取缺省值參數(shù)都必須出現(xiàn)在不取缺省值參數(shù)的右邊。 int fun(int i,int j=5, int k) 是錯誤的是錯誤的 int fun(int i, int k,int j=5) 是正確的是正確的(2)調(diào)用時,若某個參數(shù)省略,則其后的參數(shù)皆應(yīng)省略。調(diào)用時,若某個參數(shù)省略,則其后的參數(shù)皆應(yīng)省略。不合法的調(diào)用;不合法的調(diào)用;special(,21.5);12C語言復(fù)習(xí)及C基礎(chǔ)知識講座2.3.9 函數(shù)重載函數(shù)重載C+中,只要函數(shù)的參數(shù)的類型不同,或者參數(shù)個數(shù)不同,或者二中,只要函數(shù)的參數(shù)
15、的類型不同,或者參數(shù)個數(shù)不同,或者二兼有之,幾個函數(shù)可以用相同的函數(shù)名。稱為函數(shù)重載兼有之,幾個函數(shù)可以用相同的函數(shù)名。稱為函數(shù)重載/*例例2.11#include int square(int i) return i*i; float square(float f) return f*f; double square(double d) return d*d; void main( ) int i=12; float f=3.4; double d=5.67; couti*i=square(i)endl; coutf*f=square(f)endl; coutd*d=square(d)end
16、l;13C語言復(fù)習(xí)及C基礎(chǔ)知識講座/*例例2.12#include int mul(int x, int y) return x*y; int mul(int x, int y, int z) return x*y*z; void main( ) int a=3,b=4,c=5; couta*b=mul(a,b)endl; couta*b*c=mul(a,b,c)endl; 說明:說明:(1)重載函數(shù)應(yīng)在參數(shù)個數(shù)或參數(shù)類型上有所不同,編譯才能識別調(diào)重載函數(shù)應(yīng)在參數(shù)個數(shù)或參數(shù)類型上有所不同,編譯才能識別調(diào)用哪一個重載版本,即使返回類型不同也不行。用哪一個重載版本,即使返回類型不同也不行。如:如:
17、int mul(int x, int y) ;和和 double mul(int x, int y); 是不能重載的。是不能重載的。(2)一般而言,重載函數(shù)應(yīng)對不同的參數(shù)情況執(zhí)行相同的功能。一般而言,重載函數(shù)應(yīng)對不同的參數(shù)情況執(zhí)行相同的功能。如:如:abs(int x); 和和 abs(float x);都是求絕對值,一個是整數(shù)的絕對值都是求絕對值,一個是整數(shù)的絕對值,一個是實(shí)數(shù)的。,一個是實(shí)數(shù)的。14C語言復(fù)習(xí)及C基礎(chǔ)知識講座(3) 函數(shù)的重載與帶默認(rèn)值的函數(shù)一起使用時,有可能引起二義性函數(shù)的重載與帶默認(rèn)值的函數(shù)一起使用時,有可能引起二義性如:如: void Drawcircle(int r
18、=0; int x=0; int y=0); void Drawcircle(int r);當(dāng)調(diào)用:當(dāng)調(diào)用: Drawcircle(20); 編譯程序無法確定用哪一個函數(shù)。編譯程序無法確定用哪一個函數(shù)。(4) 在函數(shù)調(diào)用時,當(dāng)實(shí)參與形參類型不相符,在函數(shù)調(diào)用時,當(dāng)實(shí)參與形參類型不相符,C+會自動做類型轉(zhuǎn)會自動做類型轉(zhuǎn)換,但有時也可能產(chǎn)生錯誤:換,但有時也可能產(chǎn)生錯誤: void f_a(int x); void f_a(long x); int c=f_a(5.56); ?C語言復(fù)習(xí)及C基礎(chǔ)知識講座2.3.10 作用域運(yùn)算符作用域運(yùn)算符:當(dāng)全局變量和局部變量同名時,函數(shù)中不能使用全局變量。當(dāng)全
19、局變量和局部變量同名時,函數(shù)中不能使用全局變量。/*例例2.13#include int avar=10; /全局變量全局變量void main( ) int avar=25; /局部變量局部變量 coutavar is avarendl; 局部變量局部變量可用作用域運(yùn)算符可用作用域運(yùn)算符 : /*例例2.13#include int avar;void main( ) int avar; avar=25; /局部變量局部變量avar :avar=10; /全局變量全局變量avar coutlocal avar = avarendl; coutglobal avar = :avarendl;1
20、5C語言復(fù)習(xí)及C基礎(chǔ)知識講座2.3.11 無名聯(lián)合無名聯(lián)合C語言的共用體:語言的共用體:union data int i; char ch; float f;union data a,b,c;引用:引用:a.i a.ch a.f 等等C+的無名聯(lián)合:的無名聯(lián)合:union int i; char ch; float f; 直接可用直接可用 i ch f 等等16a4字字節(jié)節(jié)ichfC語言復(fù)習(xí)及C基礎(chǔ)知識講座2.3.12 強(qiáng)制類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換C語言的強(qiáng)制類型轉(zhuǎn)換:語言的強(qiáng)制類型轉(zhuǎn)換:int i=10;float x=(float)i;C+的強(qiáng)制類型轉(zhuǎn)換:的強(qiáng)制類型轉(zhuǎn)換:int i=10;fl
21、oat x=float(i);float y=(float)i;兩種方法兩種方法C+都可以。都可以。17C語言復(fù)習(xí)及C基礎(chǔ)知識講座2.3.13 new和和delete C語言用函數(shù)語言用函數(shù)malloc()和和free()動態(tài)分配內(nèi)存和釋放動態(tài)分配的動態(tài)分配內(nèi)存和釋放動態(tài)分配的內(nèi)存。內(nèi)存。C+使用運(yùn)算符使用運(yùn)算符new和和delete能更好、更簡單地進(jìn)行內(nèi)存的分能更好、更簡單地進(jìn)行內(nèi)存的分配和釋放。配和釋放。 如如C語言中用:語言中用: int *p; p=(int *) malloc ( sizeof(int) ); *p=10; 而而C+語言中語言中 /*2.14#include void
22、 main( ) int *p; /定義一個整型指針變量定義一個整型指針變量p p=new int; /動態(tài)分配一個整型存儲區(qū)動態(tài)分配一個整型存儲區(qū),并把首地址賦給并把首地址賦給p *p=10; cout*pendl; delete p; /釋放釋放p指的空間指的空間,撤消指針撤消指針pnew 和和 delete 的優(yōu)點(diǎn):的優(yōu)點(diǎn):(1)new可以自動計(jì)算所要分配內(nèi)存的類型的大小,而不必用可以自動計(jì)算所要分配內(nèi)存的類型的大小,而不必用sizeof來來計(jì)算。計(jì)算。p18C語言復(fù)習(xí)及C基礎(chǔ)知識講座(2)new能夠自動返回正確的指針類型,而不必進(jìn)行類型轉(zhuǎn)換。能夠自動返回正確的指針類型,而不必進(jìn)行類型轉(zhuǎn)
23、換。(3)可以用可以用new將分配的對象初始化。將分配的對象初始化。(4)new 和和 delete 都可以被重載,允許建立自定義的分配系統(tǒng)。都可以被重載,允許建立自定義的分配系統(tǒng)。說明:說明:(1)使用使用new可以為數(shù)組動態(tài)分配內(nèi)存空間(但不能賦初值)??梢詾閿?shù)組動態(tài)分配內(nèi)存空間(但不能賦初值)。 int *pi=new int10; int *pi=new int234;(2)new可在為簡單變量分配內(nèi)存空間的同時,進(jìn)行初始化??稍跒楹唵巫兞糠峙鋬?nèi)存空間的同時,進(jìn)行初始化。/*例例2.16#include void main( ) int *p; p=new int(99); /動態(tài)分配
24、內(nèi)存動態(tài)分配內(nèi)存,并將并將99作為初始值賦給它作為初始值賦給它 cout*pendl; delete p;(3)釋放動態(tài)分配的數(shù)組存儲區(qū):釋放動態(tài)分配的數(shù)組存儲區(qū): delete p;19C語言復(fù)習(xí)及C基礎(chǔ)知識講座(4)使用動態(tài)分配內(nèi)存時,分配失敗,將返回空指針(使用動態(tài)分配內(nèi)存時,分配失敗,將返回空指針(NULL)。)。因此通常要對內(nèi)存的動態(tài)分配是否成功進(jìn)行檢查。因此通常要對內(nèi)存的動態(tài)分配是否成功進(jìn)行檢查。 分配內(nèi)存失敗,分配內(nèi)存失敗,p=NULL/*例例2.17#include void main( ) int *p; p=new int; if(!p) /若分配內(nèi)存失敗若分配內(nèi)存失敗 c
25、outallocation failuren; return ; *p=20; cout*pendl; delete p;(5) 用用new分配的空間,使用結(jié)束后應(yīng)用分配的空間,使用結(jié)束后應(yīng)用delete顯式地釋放。顯式地釋放。p NULL20C語言復(fù)習(xí)及C基礎(chǔ)知識講座2.3.14 引用引用引用可為變量起別名,主要有變量的引用、函數(shù)參數(shù)的引用、函數(shù)引用可為變量起別名,主要有變量的引用、函數(shù)參數(shù)的引用、函數(shù)返回值的引用。返回值的引用。1.引用變量引用變量 數(shù)據(jù)類型數(shù)據(jù)類型 &別名別名=已定義的變量名;已定義的變量名;/*例例2.18#include void main( ) int i;
26、 int &j=i; / i 又叫又叫 j i i=30; j couti=ij=jn; j=80; couti=ij=jn; cout“Address of i ”&i“n”; /顯示顯示 i 的地址的地址 coutAddress of j &jn;(1)定義引用時,必須立即對它進(jìn)行初始化,不能以后再賦值。定義引用時,必須立即對它進(jìn)行初始化,不能以后再賦值。 int i; int &j; /錯誤錯誤 j=i;21C語言復(fù)習(xí)及C基礎(chǔ)知識講座(2) 引用實(shí)際上是一種隱式指針,可以少用引用實(shí)際上是一種隱式指針,可以少用 “*” 號號 /*例例2.19 #includ
27、e void main( ) int i=15; /整型變量整型變量i int *iptr=&i; /iptr指向指向i int &rptr=i; /rptr引用引用i couti is iendl; cout*iptr is *iptrendl; coutrptr is rptrendl; i=29; cout After changing i to 29endl; couti is iendl; cout*iptr is *iptrendl; coutrptr is rptrendl;i is 15 i is 29*iptr is 15 *iptr is 29rptr is
28、 15 rptr is 29iptrirptr22C語言復(fù)習(xí)及C基礎(chǔ)知識講座(3)引用不可重新賦值,不可使其作為另一個變量的別名。引用不可重新賦值,不可使其作為另一個變量的別名。int i, k;int &j=i;j=&k; /錯誤錯誤(4)并不是任何類型的數(shù)據(jù)都可引:并不是任何類型的數(shù)據(jù)都可引:int &a10; /不能建立引用數(shù)組不能建立引用數(shù)組int &*p; /不能建立指向引用的指針不能建立指向引用的指針int &r; /不能建立引用的引用不能建立引用的引用(5)當(dāng)使用取地址運(yùn)算符時當(dāng)使用取地址運(yùn)算符時&,取的是被引用變量的地址。,取的是
29、被引用變量的地址。int num=50;int &ref=num;int *p=&ref;則則p中保存的是變量中保存的是變量num的地址。的地址。(6) 引用符雖然與地址符一樣,但不會引起二義性。引用符雖然與地址符一樣,但不會引起二義性。2. 引用作為函數(shù)參數(shù)引用作為函數(shù)參數(shù)引用參數(shù)的方法可以代替引用參數(shù)的方法可以代替C語言中的指針地址調(diào)用的方式。語言中的指針地址調(diào)用的方式。23C語言復(fù)習(xí)及C基礎(chǔ)知識講座/*例例2.20 C語言中的指針地址調(diào)用的方式語言中的指針地址調(diào)用的方式#include void s *m, int *n) int temp; temp=*m; *m=*n
30、; *n=temp;void main( ) int a=5,b=10; couta=a b=bendl; s); couta=a b=bendl;a=5 b=10a=10 b=524m &aatemn &bbC語言復(fù)習(xí)及C基礎(chǔ)知識講座/*例例2.21 引用參數(shù)的方法引用參數(shù)的方法#include void s &m, int &n) int temp; temp=m; m=n; n=temp;main( ) int a=5,b=10; couta=a b=bendl; s); couta=a b=bendl; return 0;a=5 b=10a=10 b=5
31、25 matem nbC語言復(fù)習(xí)及C基礎(chǔ)知識講座3. 引用返回值引用返回值函數(shù)可返回一個引用,其目的是可將函數(shù)用在賦值運(yùn)算符的左邊。函數(shù)可返回一個引用,其目的是可將函數(shù)用在賦值運(yùn)算符的左邊。/*例例2.22#include int a=1,3,5,7,9;int &index(int); /聲明返回引用的函數(shù)聲明返回引用的函數(shù)void main( ) index(2)=25; /將將a2重新賦值為重新賦值為25 coutindex(2)endl;int &index(int i) return ai; 26C語言復(fù)習(xí)及C基礎(chǔ)知識講座4. 引用舉例引用舉例例例2.23 /引用參數(shù)
32、和引用返回值引用參數(shù)和引用返回值#include int &max(int &num1, int &num2);int &min(int &num1, int &num2);main( ) int num1, num2; coutnum1; coutnum2; max(num1,num2)=0; coutn把大的數(shù)置成把大的數(shù)置成 0 后后, 這兩個數(shù)是這兩個數(shù)是:; coutnnum1 和和 num2n; coutn再一次輸入二個數(shù)再一次輸入二個數(shù):n; coutnum1; coutnum2;27C語言復(fù)習(xí)及C基礎(chǔ)知識講座 min(num1,n
33、um2)=0; coutn把小的數(shù)置成把小的數(shù)置成 0 后后, 這兩個數(shù)是這兩個數(shù)是:; coutnnum1 和和 num2num2)?num1:num2; int &min(int &num1, int &num2) /兩數(shù)中找小數(shù)兩數(shù)中找小數(shù) return (num1num2)?num1:num2; 運(yùn)行結(jié)果:運(yùn)行結(jié)果:輸入第一個數(shù)輸入第一個數(shù): 45輸入第二個數(shù)輸入第二個數(shù): 78把大的數(shù)置成把大的數(shù)置成 0 后后, 這兩個數(shù)是這兩個數(shù)是: 45 和和 0 再一次輸入二個數(shù)再一次輸入二個數(shù):輸入第一個數(shù)輸入第一個數(shù): 13輸入第二個數(shù)輸入第二個數(shù): 56把小的數(shù)置
34、成把小的數(shù)置成 0 后后, 這兩個數(shù)是這兩個數(shù)是:0 和和 5628C語言復(fù)習(xí)及C基礎(chǔ)知識講座 2.3.15 void 指針指針void 型指針是一通用型指針,可指任何類型:型指針是一通用型指針,可指任何類型:void pa; /錯誤,不能聲明錯誤,不能聲明void類型的變量類型的變量void *pa; /正確,可以聲明正確,可以聲明void類型的指針類型的指針 int i=456; char c=a; pc=&i; pc=&c;例例2.24#include void main() void *pc; int i=456; char c=a; pc=&i; cout*(
35、int*)pcendl; pc=&c; cout*(char*)pcendl;C語言復(fù)習(xí)及C基礎(chǔ)知識講座以下部分是以下部分是C語言復(fù)習(xí)參考語言復(fù)習(xí)參考2.4 存儲類存儲類存儲類存儲類 類型修飾符類型修飾符 類型類型 變量名表列變量名表列;存儲類存儲類 auto static extern register 類型修飾符類型修飾符 const volatile2.4.1 自動變量和寄存器變量自動變量和寄存器變量2.4.2 靜態(tài)變量靜態(tài)變量2.4.3 外部變量外部變量29C語言復(fù)習(xí)及C基礎(chǔ)知識講座2.5 基本運(yùn)算符和表達(dá)式基本運(yùn)算符和表達(dá)式2.5.1 關(guān)系運(yùn)算符關(guān)系運(yùn)算符2.5.2 算術(shù)運(yùn)算
36、符算術(shù)運(yùn)算符2.5.3 邏輯運(yùn)算符邏輯運(yùn)算符2.5.4 位運(yùn)算符位運(yùn)算符2.5.5 條件運(yùn)算符條件運(yùn)算符2.5.6 逗號表達(dá)式逗號表達(dá)式2.5.7sizeof運(yùn)算符運(yùn)算符2.6賦值及運(yùn)算順序賦值及運(yùn)算順序2.7 類型轉(zhuǎn)換類型轉(zhuǎn)換30C語言復(fù)習(xí)及C基礎(chǔ)知識講座2.8 語句語句2.8.1 表達(dá)式語句、空語句和塊語句表達(dá)式語句、空語句和塊語句2.8.2 選擇語句選擇語句 1. if 語句語句 2. switch 語句語句2.8.3 循環(huán)循環(huán) 1. while 語句語句 2. do while 語句語句 3. for 語句語句2.8.4 轉(zhuǎn)移轉(zhuǎn)移 1. break 與與 continue 語句語句 2
37、. goto 語句語句2.8.5 return 語句語句31C語言復(fù)習(xí)及C基礎(chǔ)知識講座2.9 函數(shù)函數(shù)2.9.1 函數(shù)的基礎(chǔ)知識函數(shù)的基礎(chǔ)知識 函數(shù)先聲明再調(diào)用后定義的例子函數(shù)先聲明再調(diào)用后定義的例子 #include void main( ) int a,b,c; int sum(int, int); /先申明先申明sum()函數(shù)函數(shù) a=25; b=36; c=sum(a,b); /調(diào)用調(diào)用sum()函數(shù)函數(shù) cout c endl; int sum(int x, int y) /定義定義sum()函數(shù)函數(shù) int temp; temp=x+y; return temp; 32C語言復(fù)習(xí)及
38、C基礎(chǔ)知識講座/習(xí)題習(xí)題 函數(shù)函數(shù)(7.1)#include void main() int m,n,l,s; int maxj(int a, int b); int minb(int a, int b); printf(輸入個正整數(shù)輸入個正整數(shù):); scanf(%d,%d,&m,&n); if (m0 & n0) l=maxj(m,n); s=minb(m,n); printf(%d和和%d的最大公約數(shù)為的最大公約數(shù)為%dn,m,n,l); printf(%d和和%d的最小公倍數(shù)為的最小公倍數(shù)為%dn,m,n,s); else printf(輸入了負(fù)數(shù)輸入了負(fù)數(shù)!n
39、); return;int maxj(int a, int b) int r,t; if(ab) t=a;a=b;b=t; r=a%b; while(r!=0) a=b; b=r; r=a%b; return b;int minb(int a, int b) int r; r=maxj(a,b); if (r!=0) return a*b/r; else return 0;sln78m 56trb78a56rb78a5633C語言復(fù)習(xí)及C基礎(chǔ)知識講座/習(xí)題習(xí)題 函數(shù)函數(shù)(7.5)#include #include #include void main() char a255; void con
40、vert(char b); printf(請輸入一個字符串請輸入一個字符串: n); gets(a); convert(a); printf(該字符串反序?yàn)樵撟址葱驗(yàn)? n); puts(a); return;void convert(char b) int l,i; char c; l=strlen(b); for(i=0; i=l/2 ;i+) c=bi; bi=bl-i-1; bl-i-1=c; return ;caba1a0b1b0acbdefa254034C語言復(fù)習(xí)及C基礎(chǔ)知識講座m#include #include void main() float a,b,c,d,x2; v
41、oid root0(float a, float b, float c, float d,float x); void root1(float a, float b, float c,float x); void root2(float a, float b, float c, float d, float x); printf(請輸入一元二次方程的三個系數(shù)請輸入一元二次方程的三個系數(shù) a,b,c:n); scanf(%f,%f,%f,&a,&b,&c); if(a=1e-6) printf(不是一元二次方程不是一元二次方程!n); else printf(方程方程 (
42、%4.1f)x*x+(%4.1f)x+(%4.1f)=0n,a,b,c); d=b*b-4*a*c; if (d0) root0(a,b,c,d,x); printf(由于由于b*b-4*a*c0 因此有二個實(shí)根因此有二個實(shí)根:n); printf(x1 = %f n,x1); printf(x2 = %f n,x2); return;36C語言復(fù)習(xí)及C基礎(chǔ)知識講座2.9.2 參數(shù)傳遞及函數(shù)返回值參數(shù)傳遞及函數(shù)返回值 (1) 值傳值傳 一般變量一般變量 (2) 傳地址傳地址 結(jié)構(gòu)結(jié)構(gòu), 數(shù)組數(shù)組 (3) 傳引用傳引用 一般變量一般變量, 結(jié)構(gòu)結(jié)構(gòu), 數(shù)組數(shù)組 缺省參數(shù)缺省參數(shù)2.9.3 使用使
43、用C+系統(tǒng)函數(shù)系統(tǒng)函數(shù)37C語言復(fù)習(xí)及C基礎(chǔ)知識講座2.10 數(shù)組數(shù)組定義定義 類型類型 數(shù)組名數(shù)組名大小大小; int a4; int b34; int c234;使用時數(shù)組元素使用時數(shù)組元素 數(shù)組名數(shù)組名表達(dá)式表達(dá)式 a0=10; i=3; ai=5; b03=20; 初始值初始值 定義時定義時 int a=2,4,6,8,10; int b3=2,4,6,8,10,12;38C語言復(fù)習(xí)及C基礎(chǔ)知識講座2.11 指針指針定義定義 類型類型 *指針變量名指針變量名;2.11.1 使用指針使用指針 取地址運(yùn)算符取地址運(yùn)算符 & 取內(nèi)容運(yùn)算符取內(nèi)容運(yùn)算符 * 位移取值位移取值 #incl
44、ude void main( ) int a10=2,4,6,8,10; for(int *p=a;pa+10;p+) cout p+0 endl; 這里這里 p+0 位移位移+0 ,等價于,等價于 *p p=a; p+2 即即 *(p+2) p-i 即即 *(p-i)39C語言復(fù)習(xí)及C基礎(chǔ)知識講座2.11.2 指針運(yùn)算指針運(yùn)算1. 賦值賦值 int x,*px,*q; px=&x; q=px; 表示表示 q 和和 px 同指一個地方同指一個地方(q跟著跟著px指指)2. 比較比較 px= =q q!=px 判斷判斷 q 和和 px 是否同指一個地方是否同指一個地方 p q 判斷判斷
45、p 和和 q 指在數(shù)組元素的前后指在數(shù)組元素的前后3. 移動指針移動指針 p=p+3; + - 運(yùn)算運(yùn)算 y=*px+; /y=*(px+); y=*+px; /y=*(+px); y=+*px; /y=+(*px); y=(*px)+; 40C語言復(fù)習(xí)及C基礎(chǔ)知識講座2.11.3 指針和數(shù)組指針和數(shù)組1. 指向一維數(shù)組的指針指向一維數(shù)組的指針 int a4, *p; p=a; 或或 p=&a0; 即即 p 指向指向 a0; 2. 指針數(shù)組指針數(shù)組 許多個指針變量在一起都可用來指向整數(shù)許多個指針變量在一起都可用來指向整數(shù) int *pa2; char *pc57; 例例#include
46、 void main( ) int a23=2,4,6,8,10,12; int *pa2; /有二個指針有二個指針 pa0 和和 pa1 pa0=a0; pa1=a1; for (int i=0; i2; i+) for(int j=0; j3; j+,pai+) cout aij=” *paiendl; 41C語言復(fù)習(xí)及C基礎(chǔ)知識講座3. 指向整個數(shù)組的指針指向整個數(shù)組的指針(行指針行指針) 如:如:int (*a)5; int b25=0,1,2,3,4,5,6,7,8,9 a=b; a b 0 1 2 3 4 5 6 7 8 9 #include void main( ) int (*
47、a)5; int b25=0,1,2,3,4,5,6,7,8,9; a=b; for(int i=0;i5;i+) cout i : *(*a+i)endl; a+; for(int i=0;i5;i+) cout i : *(*a+i)endl; 42C語言復(fù)習(xí)及C基礎(chǔ)知識講座一維數(shù)組的地址 int a4; a+0 是第是第 0 列的地址列的地址 a+i 是第是第 i 列的地址列的地址 *( a+0) 是第是第 0 列的列的數(shù)據(jù)數(shù)據(jù) * *( (a+i) 是第是第 i 列的列的數(shù)據(jù)數(shù)據(jù)地址 a 數(shù)據(jù) *a &a0 a0一維數(shù)組的指針 int a4, *p; p=a; 可以可以p+p+
48、指針p 數(shù)據(jù) *p a043C語言復(fù)習(xí)及C基礎(chǔ)知識講座二維數(shù)組的地址 * *a a0a a0 int a34; *(a+i)+j是第 i 行第 j 列地址 * *( (* *(a+i)+j) a+0 是第是第 0 行的地址行的地址 . a+i 是第是第 i 行的地址行的地址 * *( a+0)是第是第 0 行第行第 0 列的地址列的地址.* *( (a+0)+j是第是第 0 行第行第 j 列的地址列的地址 * *(a+i)是第是第 i 行第行第 0 列的地址列的地址 . * *(a+i)+j是第是第 i 行第行第 j 列的地址列的地址 * *( (* *( (a+0)+0)是第是第0行第行第0
49、列的列的數(shù)據(jù)數(shù)據(jù).(.(* *(a+0)+j) 是第是第0行第行第j列的列的數(shù)據(jù)數(shù)據(jù) * *( (* *( (a+i)+0)是第是第i行第行第0列的列的數(shù)據(jù)數(shù)據(jù).* *( (* *(a+i)+j) 是第是第i行第行第j列的列的數(shù)據(jù)數(shù)據(jù)行地址 a+0 列地址 *(a+0)行地址 a+i 44C語言復(fù)習(xí)及C基礎(chǔ)知識講座二維數(shù)組的指針 * *a a0a a0 int a34; (p+i*4+j)是第i行第j列地址 (1)(1) int *p;(小指針) p=p=* *a;a; p=a; p=a; p=a0; p=a0; *(p+i*4+j) p=&a00; p=&a00; 元素地址元
50、素地址: p=p=* *a+j;a+j; p+jp+j p+;p+; 元素?cái)?shù)據(jù)元素?cái)?shù)據(jù): * *p p * *(p+j) pj(p+j) pj * *( a+0)是第是第 0 行第行第 0 列的地址列的地址.* *( (a+0)+j是第是第 0 行第行第 j 列的地址列的地址 * *(a+i)是第是第 i 行第行第 0 列的地址列的地址 . * *(a+i)+j是第是第 i 行第行第 j 列的地址列的地址 * *( (* *( (a+0)+0)是第是第0行第行第0列的列的數(shù)據(jù)數(shù)據(jù).(.(* *(a+0)+j) 是第是第0行第行第j列的列的數(shù)據(jù)數(shù)據(jù) * *( (* *( (a+i)+0)是第是第
51、i行第行第0列的列的數(shù)據(jù)數(shù)據(jù).* *( (* *(a+i)+j) 是第是第i行第行第j列的列的數(shù)據(jù)數(shù)據(jù) p 當(dāng)一維數(shù)組名用但可當(dāng)一維數(shù)組名用但可 p=p+i p+ 走走 (i)一行一行 元素地址元素地址: * *p+jp+j 數(shù)據(jù)數(shù)據(jù): * *( (* *p+j) (p+j) (* *p)jp)j列地址 *(a+0)45C語言復(fù)習(xí)及C基礎(chǔ)知識講座struct student struct student int num; int num; float score; float score; struct student struct student * *nextnext;struct stu
52、dent struct student * *p; p; nextnumscore結(jié)點(diǎn)結(jié)點(diǎn)#include #include 申請空間函數(shù):申請空間函數(shù):malloc(malloc(字節(jié)數(shù)字節(jié)數(shù)) )測試字節(jié)運(yùn)算符:測試字節(jié)運(yùn)算符:sizeof(sizeof(類型類型) )p=(struct student p=(struct student * * )malloc(sizeof(struct student) )malloc(sizeof(struct student);釋放空間函數(shù):釋放空間函數(shù):free(free(指針);指針); free( p );free( p );nextnums
53、core結(jié)點(diǎn)結(jié)點(diǎn)p46C語言復(fù)習(xí)及C基礎(chǔ)知識講座p1=p2=(struct student p1=p2=(struct student * * )malloc(LEN) )malloc(LEN);scanf(“%d,%f”,&p1-num,&p1-score)scanf(“%d,%f”,&p1-num,&p1-score);nextnumscore結(jié)點(diǎn)結(jié)點(diǎn)p1p p2 220101 89.5headNULLn= 0n= 0 1 1head=p1;headnextnumscorep1p1=(struct student p1=(struct student * *
54、 )malloc(LEN) )malloc(LEN);201032010390902(n=2) p2-next=p1;(n=2) p2-next=p1;p2=p1p2=p1; p p2 2scanf(“%d,%f”,&p1-num,&p1-score);scanf(“%d,%f”,&p1-num,&p1-score);nextnumscore p p1 10 0NULLNULLp1-num=0p1-num=047C語言復(fù)習(xí)及C基礎(chǔ)知識講座p pp p0103070811NULLNULLheadheadp p1 1p p2 2p1p20103070811NULLN
55、ULLheadheadp p0 005p p1 1p p01030811headheadNULLp p1 1p2p248C語言復(fù)習(xí)及C基礎(chǔ)知識講座2.11.4 引用引用 引用可為變量起別名,它主要用作函數(shù)參數(shù)以及函數(shù)的返回類引用可為變量起別名,它主要用作函數(shù)參數(shù)以及函數(shù)的返回類型。有參數(shù)引用和返回值引用。型。有參數(shù)引用和返回值引用。 1. 引用說明引用說明 int num=50; int& ref=num; 表示放整數(shù)表示放整數(shù) 50 的內(nèi)存空間的內(nèi)存空間 可叫可叫 num,又可叫,又可叫 ref 引用實(shí)質(zhì)上是為另一個變量建立別名。引用實(shí)質(zhì)上是為另一個變量建立別名。 2. 引用參數(shù)引用
56、參數(shù)(傳引用傳引用) 49C語言復(fù)習(xí)及C基礎(chǔ)知識講座3. 返回引用的函數(shù)返回引用的函數(shù)當(dāng)一個函數(shù)的返回值需重新賦值的時候,我們也可對當(dāng)一個函數(shù)的返回值需重新賦值的時候,我們也可對返回值進(jìn)行引用,這時函數(shù)可出現(xiàn)在賦值號的左邊。返回值進(jìn)行引用,這時函數(shù)可出現(xiàn)在賦值號的左邊。這種函數(shù)稱為返回引用的函數(shù)。這種函數(shù)稱為返回引用的函數(shù)。 形式形式 類型類型& 函數(shù)名函數(shù)名(參數(shù)參數(shù))#include int a=2,4,6,8,10,12; int& index(int i); void main( ) index(3)=16; /index(3) 即返回值即返回值ai,i=3,a3改為改
57、為16 coutindex(3)endl; cout a3endl; int& index(int i) return ai; 注意注意: 返回值是函數(shù)內(nèi)的局部變量時不能引用返回值是函數(shù)內(nèi)的局部變量時不能引用 50C語言復(fù)習(xí)及C基礎(chǔ)知識講座例例#include int e(int i) return i+1; int &f() int i=1; return +i;int g(int &i) i=i+1; return i;main() int r1=e(3); int &r2=e(4); int r3=f(); int &r4=f(); int a=0,b=0,c=0,d; d=g(4); a+=g(g(c); b+=g(e(3); return 1;51C語言復(fù)習(xí)及C基礎(chǔ)知識講座2.11.5 void類型指針類型指針 void指針是一個特殊指針,它可以指向任一類型的指針是一個特殊指針,它可以指向任一類型的C+對象。對象。 void main() void *vp; int i=5; floatf=7.8; char c=A; int *ip; float *fp; char *cp; ip=&i; vp=&i; cp=&c
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人運(yùn)營線路合同范例
- 2025-2030年中國Xmass樹木和井口行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025年建造師考試階段計(jì)劃試題及答案
- 質(zhì)量工程師考試復(fù)習(xí)試題及答案
- 小技巧揭秘的二級消防工程師試題及答案
- 2025-2030年中國5G毫米波設(shè)備行業(yè)市場發(fā)展分析及上下游與發(fā)展機(jī)遇風(fēng)險研究報告
- 開放性思維的入團(tuán)考試試題及答案
- 2025-2030嬰兒濕巾行業(yè)市場發(fā)展分析及發(fā)展趨勢前景預(yù)測報告
- 逐步攻克難點(diǎn)2024年紡織機(jī)械操作證書考試試題及答案
- 個人安裝勞務(wù)合同范例
- 交響音樂賞析智慧樹知到期末考試答案章節(jié)答案2024年西安交通大學(xué)
- DZ∕T 0248-2014 巖石地球化學(xué)測量技術(shù)規(guī)程(正式版)
- JTG-T 3331-07-2024 公路膨脹土路基設(shè)計(jì)與施工技術(shù)規(guī)范
- 護(hù)理研究中的偏倚及控制課件
- 醫(yī)院檢驗(yàn)檢查管理制度
- 提高門診患者滿意度品管圈
- 醫(yī)院手衛(wèi)生知識考試題庫100題(含答案)
- 管片基礎(chǔ)知識與管片選型
- 2024-2026年版中國運(yùn)動康復(fù)產(chǎn)業(yè)白皮書
- 建筑設(shè)計(jì)防火要求規(guī)范2024修訂版
- 2021年武漢中考數(shù)學(xué)試題(附答案)
評論
0/150
提交評論