




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、C語言復習及C基礎(chǔ)知識講座第二章第二章 C語言復習及語言復習及C+基礎(chǔ)知識基礎(chǔ)知識C語言復習及C基礎(chǔ)知識講座2.1.1 C+的起源的起源2.1.2 C+的特點的特點 *.c C的源程序的源程序 以下的文件以下的文件C和和C+都可用:都可用: *.h C的頭包含文件的頭包含文件 *.cpp C+的源程序的源程序 *.hpp C+的頭包含文件的頭包含文件 /* */ C的注釋的注釋 / C +的注釋的注釋2.1 C+的起源和特點的起源和特點1C語言復習及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語言復習及C基礎(chǔ)知識講座2.2.2 C+程序的結(jié)構(gòu)特性程序的結(jié)構(gòu)特性1.包含文件及頭文件包含文件及頭文件2.標準輸入與輸出標準輸入與輸出 printf(格式說明格式說明,表達式表列表達式表列); 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語言復習及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、語言復習及C基礎(chǔ)知識講座2.3 C+在非面向?qū)ο蠓矫娴囊恍┨匦栽诜敲嫦驅(qū)ο蠓矫娴囊恍┨匦?.3.1 注釋行注釋行/* */ C的注釋的注釋 / C +的注釋的注釋2.3.2 新的新的I/O流流cin是標準輸入流,在程序中代表標準輸入設(shè)備,即鍵盤。是標準輸入流,在程序中代表標準輸入設(shè)備,即鍵盤。 運算符運算符“”表示向右表示向右cout是標準輸出流,在程序中代表標準輸出設(shè)備,即屏幕。是標準輸出流,在程序中代表標準輸出設(shè)備,即屏幕。 運算符運算符“”表示向左表示向左使用使用cin或或cout進行進行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語言復習及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語言復習及C基礎(chǔ)知識講座2.3.5 const修飾符修飾符#define LIMIT 100這里這里 LIMIT 是一個標志,代表是一個標志,代表 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語言復習及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語言復習及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語言復習及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語言復習及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語言復習及C基礎(chǔ)知識講座2.3.8 帶有缺省參數(shù)的函數(shù)帶有缺省參數(shù)的函數(shù)C+在說明函數(shù)原型時,可以為一個或多個參數(shù)指定缺省參數(shù)值,在說明函數(shù)原型時,可以為一個或多個參數(shù)指定缺省參數(shù)值,以后調(diào)用此函數(shù)時,若省略其中某一實參,以后調(diào)用此函數(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語言復習及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語言復習及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ù)的。14C語言復習及C基礎(chǔ)知識講座(3) 函數(shù)的重載與帶默認值的函數(shù)一起使用時,有可能引起二義性函數(shù)的重載與帶默認值的函數(shù)一起使用時,有可能引起二義性如:如: void Drawcircle(int r
18、=0; int x=0; int y=0); void Drawcircle(int r);當調(diào)用:當調(diào)用: Drawcircle(20); 編譯程序無法確定用哪一個函數(shù)。編譯程序無法確定用哪一個函數(shù)。(4) 在函數(shù)調(diào)用時,當實參與形參類型不相符,在函數(shù)調(diào)用時,當實參與形參類型不相符,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語言復習及C基礎(chǔ)知識講座2.3.10 作用域運算符作用域運算符:當全局變量和局部變量同名時,函數(shù)中不能使用全局變量。當全
19、局變量和局部變量同名時,函數(shù)中不能使用全局變量。/*例例2.13#include int avar=10; /全局變量全局變量void main( ) int avar=25; /局部變量局部變量 coutavar is avarendl; 局部變量局部變量可用作用域運算符可用作用域運算符 : /*例例2.13#include int avar;void main( ) int avar; avar=25; /局部變量局部變量avar :avar=10; /全局變量全局變量avar coutlocal avar = avarendl; coutglobal avar = :avarendl;1
20、5C語言復習及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語言復習及C基礎(chǔ)知識講座2.3.12 強制類型轉(zhuǎn)換強制類型轉(zhuǎn)換C語言的強制類型轉(zhuǎn)換:語言的強制類型轉(zhuǎn)換:int i=10;float x=(float)i;C+的強制類型轉(zhuǎn)換:的強制類型轉(zhuǎn)換:int i=10;fl
21、oat x=float(i);float y=(float)i;兩種方法兩種方法C+都可以。都可以。17C語言復習及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+使用運算符使用運算符new和和delete能更好、更簡單地進行內(nèi)存的分能更好、更簡單地進行內(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)點:的優(yōu)點:(1)new可以自動計算所要分配內(nèi)存的類型的大小,而不必用可以自動計算所要分配內(nèi)存的類型的大小,而不必用sizeof來來計算。計算。p18C語言復習及C基礎(chǔ)知識講座(2)new能夠自動返回正確的指針類型,而不必進行類型轉(zhuǎ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)存空間的同時,進行初始化??稍跒楹唵巫兞糠峙鋬?nèi)存空間的同時,進行初始化。/*例例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語言復習及C基礎(chǔ)知識講座(4)使用動態(tài)分配內(nèi)存時,分配失敗,將返回空指針(使用動態(tài)分配內(nèi)存時,分配失敗,將返回空指針(NULL)。)。因此通常要對內(nèi)存的動態(tài)分配是否成功進行檢查。因此通常要對內(nèi)存的動態(tài)分配是否成功進行檢查。 分配內(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語言復習及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)定義引用時,必須立即對它進行初始化,不能以后再賦值。定義引用時,必須立即對它進行初始化,不能以后再賦值。 int i; int &j; /錯誤錯誤 j=i;21C語言復習及C基礎(chǔ)知識講座(2) 引用實際上是一種隱式指針,可以少用引用實際上是一種隱式指針,可以少用 “*” 號號 /*例例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語言復習及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)當使用取地址運算符時當使用取地址運算符時&,取的是被引用變量的地址。,取的是
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語言復習及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語言復習及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語言復習及C基礎(chǔ)知識講座3. 引用返回值引用返回值函數(shù)可返回一個引用,其目的是可將函數(shù)用在賦值運算符的左邊。函數(shù)可返回一個引用,其目的是可將函數(shù)用在賦值運算符的左邊。/*例例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語言復習及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語言復習及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; 運行結(jié)果:運行結(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語言復習及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語言復習及C基礎(chǔ)知識講座以下部分是以下部分是C語言復習參考語言復習參考2.4 存儲類存儲類存儲類存儲類 類型修飾符類型修飾符 類型類型 變量名表列變量名表列;存儲類存儲類 auto static extern register 類型修飾符類型修飾符 const volatile2.4.1 自動變量和寄存器變量自動變量和寄存器變量2.4.2 靜態(tài)變量靜態(tài)變量2.4.3 外部變量外部變量29C語言復習及C基礎(chǔ)知識講座2.5 基本運算符和表達式基本運算符和表達式2.5.1 關(guān)系運算符關(guān)系運算符2.5.2 算術(shù)運算
36、符算術(shù)運算符2.5.3 邏輯運算符邏輯運算符2.5.4 位運算符位運算符2.5.5 條件運算符條件運算符2.5.6 逗號表達式逗號表達式2.5.7sizeof運算符運算符2.6賦值及運算順序賦值及運算順序2.7 類型轉(zhuǎn)換類型轉(zhuǎn)換30C語言復習及C基礎(chǔ)知識講座2.8 語句語句2.8.1 表達式語句、空語句和塊語句表達式語句、空語句和塊語句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語言復習及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語言復習及
38、C基礎(chǔ)知識講座/習題習題 函數(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(輸入了負數(shù)輸入了負數(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語言復習及C基礎(chǔ)知識講座/習題習題 函數(shù)函數(shù)(7.5)#include #include #include void main() char a255; void con
40、vert(char b); printf(請輸入一個字符串請輸入一個字符串: n); gets(a); convert(a); printf(該字符串反序為該字符串反序為: 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語言復習及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 因此有二個實根因此有二個實根:n); printf(x1 = %f n,x1); printf(x2 = %f n,x2); return;36C語言復習及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語言復習及C基礎(chǔ)知識講座2.10 數(shù)組數(shù)組定義定義 類型類型 數(shù)組名數(shù)組名大小大小; int a4; int b34; int c234;使用時數(shù)組元素使用時數(shù)組元素 數(shù)組名數(shù)組名表達式表達式 a0=10; i=3; ai=5; b03=20; 初始值初始值 定義時定義時 int a=2,4,6,8,10; int b3=2,4,6,8,10,12;38C語言復習及C基礎(chǔ)知識講座2.11 指針指針定義定義 類型類型 *指針變量名指針變量名;2.11.1 使用指針使用指針 取地址運算符取地址運算符 & 取內(nèi)容運算符取內(nèi)容運算符 * 位移取值位移取值 #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語言復習及C基礎(chǔ)知識講座2.11.2 指針運算指針運算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=*px+; /y=*(px+); y=*+px; /y=*(+px); y=+*px; /y=+(*px); y=(*px)+; 40C語言復習及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語言復習及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語言復習及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語言復習及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語言復習及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+; 元素數(shù)據(jù)元素數(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 當一維數(shù)組名用但可當一維數(shù)組名用但可 p=p+i p+ 走走 (i)一行一行 元素地址元素地址: * *p+jp+j 數(shù)據(jù)數(shù)據(jù): * *( (* *p+j) (p+j) (* *p)jp)j列地址 *(a+0)45C語言復習及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é)點結(jié)點#include #include 申請空間函數(shù):申請空間函數(shù):malloc(malloc(字節(jié)數(shù)字節(jié)數(shù)) )測試字節(jié)運算符:測試字節(jié)運算符: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é)點結(jié)點p46C語言復習及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é)點結(jié)點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語言復習及C基礎(chǔ)知識講座p pp p0103070811NULLNULLheadheadp p1 1p p2 2p1p20103070811NULLN
55、ULLheadheadp p0 005p p1 1p p01030811headheadNULLp p1 1p2p248C語言復習及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 引用實質(zhì)上是為另一個變量建立別名。引用實質(zhì)上是為另一個變量建立別名。 2. 引用參數(shù)引用
56、參數(shù)(傳引用傳引用) 49C語言復習及C基礎(chǔ)知識講座3. 返回引用的函數(shù)返回引用的函數(shù)當一個函數(shù)的返回值需重新賦值的時候,我們也可對當一個函數(shù)的返回值需重新賦值的時候,我們也可對返回值進行引用,這時函數(shù)可出現(xià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語言復習及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語言復習及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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 環(huán)境樣品分析技術(shù)-洞察闡釋
- 經(jīng)濟全球化與文化認同的當代挑戰(zhàn)-洞察闡釋
- 超聲波清洗機升級行業(yè)跨境出海項目商業(yè)計劃書
- 大數(shù)據(jù)驅(qū)動下企業(yè)財務(wù)分析的趨勢與發(fā)展
- 蘇州健雄職業(yè)技術(shù)學院《基因技術(shù)的臨床應(yīng)用》2023-2024學年第二學期期末試卷
- 濟南大學《醫(yī)學細胞生物學討論》2023-2024學年第二學期期末試卷
- 湖南三一工業(yè)職業(yè)技術(shù)學院《專業(yè)英語聽說》2023-2024學年第二學期期末試卷
- 揚州華泰外輪物資供應(yīng)有限公司鎮(zhèn)江分公司介紹企業(yè)發(fā)展分析報告模板
- 煙煤市場未來發(fā)展趨勢及投資戰(zhàn)略可行性研究報告
- 鄭州幼兒師范高等??茖W?!豆こ添椖坎邉澟c管理概論》2023-2024學年第二學期期末試卷
- 托育服務(wù)政策法規(guī)與職業(yè)倫理 課件全套 黃鑫 第1-8章 緒論、托育服務(wù)政策法規(guī)概述-托育職業(yè)倫理教育、修養(yǎng)與評價
- 中學歷史教學中存在的問題與對策建議
- 安徽省歷年中考作文題與審題指導(2001-2024)
- 數(shù)字頻率計的設(shè)計與實現(xiàn)課程設(shè)計
- 《古文觀止解讀》課件
- 道德與法治三年級下冊知識點歸納
- 廣東省江門市2023-2024學年高二下學期7月期末考試 英語 含解析
- 臨床專業(yè)認證
- 醫(yī)美美學設(shè)計培訓
- 2024年中考模擬試卷物理(江蘇南通卷)
- 定額〔2025〕2號文-關(guān)于發(fā)布2020版電網(wǎng)技術(shù)改造及檢修工程概預算定額2024年下半年價格
評論
0/150
提交評論