C语言基础知识总结
知識點的回憶與鞏固
一. 條件分支結(jié)構(gòu)
1.if分支語句
2.switch語句
二、循環(huán)體部分知識點整理
1.for循環(huán)
2.while循環(huán)-適合不確定循環(huán)次數(shù)時使用
三、字符串與數(shù)組
數(shù)組的操作
1°memcpy函數(shù)(頭文件<cstring)
數(shù)組不能直接復(fù)制,可利用memcpy函數(shù)
void *memcpy(void *dest, void *src, unsigned int count);
memcpy 函數(shù)用于 把資源內(nèi)存(src所指向的內(nèi)存區(qū)域) 拷貝到目標(biāo)內(nèi)存(dest所指向的內(nèi)存區(qū)域);一個size變量控制拷貝的字節(jié)數(shù);
使用方式memcpy(b,a,sizeof(int)*k) 從a中賦值k個元素到b數(shù)組。
sizeof(int)*k表示計算int型所占字節(jié)數(shù),然后再乘以k。
類比sizeof(int*k),表示計算指向整型的指針變量k所占的字節(jié)數(shù)。
再淺顯討論sizeof的作用
sizeof(int)*k之所以用sizeof(int)*k而不是用k,因為sizeof(int)*k返回的是字節(jié)數(shù),因為數(shù)組是int 型的sizeof計算每個元素的字節(jié)長度,在乘以k既k個元素的字節(jié),因為memcyp需要知道拷貝內(nèi)存的字節(jié)數(shù)。所以拷貝是從開頭開始計算,即k個元素是從a[0]開始計算。由此可以推出將a中元素全部拷貝到b數(shù)組中,memcpy(b,a,sizeof(a))。
2°memset函數(shù)(頭文件<cstring)
void *memset(void *s , int ch , size_t n ) 在一段內(nèi)存塊中填充某一個給定的值,常用于較大的對結(jié)構(gòu)體和數(shù)組的清零操作。
memset(結(jié)構(gòu)體/數(shù)組名 , "用于替換的字符“ , 前n個字符 );
用法可以參考memcpy,也要用sizeof來計算字節(jié)。
總結(jié)內(nèi)存復(fù)制需要計算字節(jié)。
字符串操作
strcpy(p, p1) 復(fù)制字符串
strncpy(p, p1, n) 復(fù)制指定長度字符串
strcat(p, p1) 附加字符串
strncat(p, p1, n) 附加指定長度字符串
strlen§ 取字符串長度
strcmp(p, p1) 比較字符串
strcasecmp忽略大小寫比較字符串
strncmp(p, p1, n) 比較指定長度字符串
strchr(p, c) 在字符串中查找指定字符
strrchr(p, c) 在字符串中反向查找
strstr(p, p1) 查找字符串
strlwr§將大寫字母全部換為小寫字母
strupr§將小寫字母全部換為大寫字母
相對于字符型數(shù)組,字符串還可以有以下操作
四、函數(shù)
概念:組成C語言源程序的基本單位,完成特定功能的代碼段.
例如main()為主函數(shù):程序入口
函數(shù)定義到使用分三步:
1.聲明
2.定義函數(shù)
3.調(diào)用函數(shù)。
一、函數(shù)的聲明:
在調(diào)用函數(shù)之前,進(jìn)行該函數(shù)的聲明 ,由于程序是由上到下執(zhí)行,編譯器不知道我們是否已經(jīng)定義了某個函數(shù),為了防止編譯器編譯的時候報錯(函數(shù)調(diào)用)所以,要告訴編譯器,我已經(jīng)定義了哪些函數(shù)。
二、函數(shù)的定義:
返回值類型 函數(shù)名(形式參數(shù)類型 參數(shù)名1,……){函數(shù)體;//return (返回值)}目前接觸的返回值類型有兩種:
有參無返回值:void test(int x,float y){ }
有參有返回值: int max(int x,int y){ return x>y?x:y; }
1.函數(shù)的參數(shù)
1)形參和實參
形參:在定義函數(shù)的時候,函數(shù)名后面小括號中的參數(shù) , 格式: 數(shù)據(jù)類型 變量 如:int x;
形參的作用域:只能在本函數(shù)中使用
實參:調(diào)用函數(shù)的時候傳遞的參數(shù)
2)參數(shù)的傳遞的過程
實參的值拷貝一份放到函數(shù)形參中
3)函數(shù)傳參有三種傳參方式:傳值、傳址、傳引用
1°按值傳遞
(1)形參和實參各占一個獨立的存儲空間。
(2)形參的存儲空間是函數(shù)被調(diào)用時才分配的,調(diào)用開始,系統(tǒng)為形參開辟一個臨時的存儲區(qū),然后將各實參傳遞給形參,這是形參就得到了實參的值。
2°地址傳遞
地址傳遞與值傳遞的不同在于,它把實參的存儲地址傳送給形參,使得形參指針和實參指針指向同一塊地址。因此,被調(diào)用函數(shù)中對形參指針?biāo)赶虻牡刂分袃?nèi)容的任何改變都會影響到實參。
3°引用傳遞
引用傳遞是以引用為參數(shù),則既可以使得對形參的任何操作都能改變相應(yīng)數(shù)據(jù),又使函數(shù)調(diào)用方便。引用傳遞是在形參調(diào)用前加入引用運算符“&”。引用為實參的別名,和實參是同一個變量,則他們的值也相同,該引用改變則它的實參也改變。
2、函數(shù)的返回值
概念:執(zhí)行函數(shù)體中的程序段,最后獲取的值并返回給主調(diào)函數(shù),函數(shù)的返回值只能通過return 關(guān)鍵字進(jìn)行返回
格式:return 表達(dá)式;/ return (表達(dá)式);
返回值類型要與返回值相同。
是否要定義形參看是否有未知內(nèi)容參與運算,調(diào)用時實參必須對應(yīng).參數(shù)傳遞的是值。
函數(shù)中可以有多個return ,但是只有一個起作用,因為函數(shù)會結(jié)束后會帶回一個值。
三、函數(shù)的調(diào)用
定義:函數(shù)名(實參列表);
1)形參變量只有在被調(diào)用時才分配內(nèi)存單元,在調(diào)用結(jié)束時,即刻釋放所分配的內(nèi)存單元。
2)實參可以是常量、變量、表達(dá)式、函數(shù)等,無論實參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時,它們都必須具有確定的值 。
3)實參和形參在數(shù)量上,類型上,順序上應(yīng)嚴(yán)格一致,否則會發(fā)生類型不匹配的錯誤。
零碎知識點的總結(jié)
頭文件
#include <iomanip> 小數(shù)點出入輸出 #include<algorithm> STL,主要是用sort #include <cstdio> C語言的輸入輸出及其他c部分素數(shù)的判斷
1定義法
除了1與自身外無其他因數(shù)。
2.對定義法的改進(jìn),若a不是素數(shù)則在2到sqrt(a)的范圍內(nèi)一定存在其因數(shù)。所以
int main() {int a;char b='y';cin>>a;for(int i=2;i<=sqrt(a);i++) //等號必須存在{if(a%i==0) {b='N';break;}}if(b=='N') cout<<"不是";else cout<<"是";return 0; }最大公約數(shù)最小公倍數(shù)
a,b最小公倍數(shù)=a*b/最大公約數(shù)
最大公約數(shù)用輾轉(zhuǎn)相除法
經(jīng)驗教訓(xùn)
一、基礎(chǔ)的語法很重要,只有學(xué)好了這些語法,才會寫程序,看程序,會修改程序,知道自己程序的流程,以及每一項的操做的結(jié)果與作用。
二、要多練習(xí)敲代碼,只有寫過足夠多的代碼才能熟練的運用,紙上談兵,眼高手低,馬馬虎虎,到了自己真正要用到的時候才發(fā)現(xiàn)有些東西只是看明白了,自己寫的時候根本寫不出來。
三、自學(xué)很重要。不會的盡量自己思考,百度查,從開始到現(xiàn)在我沒有去問過別人代碼,有時候有思路沒能力實現(xiàn),就回去查這些東西怎么才能辦到,就拿上一篇hash那個題來講,我最早想到的是哈希算法,我想如果將字符轉(zhuǎn)化為數(shù)字,根據(jù)數(shù)字來存儲到數(shù)組內(nèi),就不會爆內(nèi)存,可是哈希算法太難實現(xiàn),我就想怎樣才能開出比1000000*100的大的數(shù)組,無果而終,知道看到容器是隨開隨用的,看題要看思路,而不是忙目的做,盲目的問,盲目的抄,不是自己的東西,用一次下次就不會了,就再也想不到了。
總結(jié)
- 上一篇: C/C++头文件一览表
- 下一篇: 疯子的算法总结(六) 简单排序总 选择排