翁愷C語(yǔ)言



輾轉(zhuǎn)相除法,
計(jì)算機(jī)—程序—算法。
枚舉法,二分法。


編輯器---.>編譯器--.>運(yùn)行。
開發(fā)效率決定了C語(yǔ)言是一種工業(yè)語(yǔ)言。
IDE=集成開發(fā)環(huán)境。
Dev C++;

Dev c++ 5.6.3.Hello World!

cuocuow錯(cuò)誤提示在前后,不確定。

變量定義的一般形式——<類型名稱><變量名稱> ;


fufuzhi賦值,初始化。



scanf-0-其中末尾format格式,&指針。


const常量的名稱一般用全大寫來強(qiáng)調(diào)是一個(gè)常量。

%d %d之間的空格有講究。不能是其他符號(hào)。
\" \"表示引號(hào)


double ==%lf
float == %f
int ==%d [-2^31,2^31-1]


zhuzhuyi注意=也是運(yùn)算符。
計(jì)算時(shí)間差。
平均值。

嵌入式賦值不被推薦==因?yàn)椴灰组喿x。

計(jì)算復(fù)利:變量,算法,輸入輸出。
交換變量。
復(fù)合賦值=--兩個(gè)之間不能有空格。
遞增遞減運(yùn)算符---他的算子必須是變量,否則沒有意義無效。
前綴與后綴有細(xì)微的區(qū)別。




%x--以十六進(jìn)制格式輸出。
0與o的故事。
if (){}判斷語(yǔ)句。
if (){
}
else {}

C語(yǔ)言中-關(guān)系運(yùn)算符的結(jié)果是1或者0;
JAVA中則是boolean。
優(yōu)先級(jí):算術(shù)運(yùn)算>關(guān)系運(yùn)算>賦值。
判斷是否相等的==與!=的優(yōu)先級(jí)比其他的關(guān)系運(yùn)算低,連續(xù)的關(guān)系運(yùn)算是從左到右的。
//C99注釋comment不執(zhí)行,只是為了方便讀懂;
/* */---C99 and ANSI.

i嵌套的if-else一定要加大括號(hào);容易讀懂。
else總是和最近的那個(gè)if匹配。
注意:else的縮進(jìn)并不影響if 的匹配。

在if或else后面總是用{}
即使是只有一條語(yǔ)句的時(shí)候。
級(jí)聯(lián):


單一出口。
if只要求()里的值是零或者非零。

在if和else之后必須加上大括號(hào)形成語(yǔ)句塊;
大括號(hào)內(nèi)的語(yǔ)句縮進(jìn)一個(gè)tab的位置。
多路分支利用switch-case。
switch (type){
case 1: break;
case 2:
break;
default:
}
控制表達(dá)式只能是整數(shù)型的結(jié)果;
常量可以是常數(shù),也可以是常數(shù)計(jì)算的表達(dá)式。


注意case并沒有被分割,只有遇到breake才能不執(zhí)行case。將case視為路牌。


數(shù)數(shù)字。計(jì)算機(jī)從右往左。
while
do-while循環(huán)。



循環(huán)體內(nèi)要有改變條件的機(jī)會(huì)。
語(yǔ)法上對(duì),不代表邏輯對(duì)。也就是注意死循環(huán)。

邊界數(shù)據(jù)。

print發(fā)(“in loop/here”)



cnt -1
0 0
-1 -1
循環(huán)體中代碼行的次序?qū)Y(jié)果有細(xì)微的差別。
#include <stdlib.h>
#include <time.h>
srand (time(0));
int a = rand ();產(chǎn)生真的隨機(jī)數(shù)。
rand()產(chǎn)生隨機(jī)數(shù)。
1234%10
x%n 的結(jié)果是【0,n-1】的一個(gè)整數(shù)。




123
3
0+3=3 12
2
32ret
1 +320=321

階乘!





for===while



break;打破跳出循環(huán)
continue;跳過循環(huán)這一輪剩下的語(yǔ)句進(jìn)入下一輪。
4個(gè)人唱歌比喻。

100以內(nèi)的素?cái)?shù)。=嵌套的循環(huán)。
前50個(gè)素?cái)?shù)呢?
\t制表位。
湊硬幣。:100元 由10元,20元,50元湊的結(jié)果有多少種。 ____bianlbi遍歷。
a=100/50,
b=(100%50)/20,
c=((100%50)%20)/10,
100 Yuan == a*50+b*20+c*10.

C語(yǔ)言:goto 語(yǔ)句。label也就是標(biāo)號(hào);
goto label:
JAVA語(yǔ)言:break label:。
goto適合嵌套循環(huán)跳到最外層。
前n項(xiàng)求和。








pow(10,n)=10的n次方。




符合給定條件的整數(shù)集。
index


遍歷










sizeof()是一個(gè)靜態(tài)運(yùn)算符,他的結(jié)果在編譯時(shí)刻就決定了,不要在sizeof的括號(hào)里做運(yùn)算,這些運(yùn)算不會(huì)執(zhí)行的。
char 1,short 2Byte,int 4,long 8,long long 8.
-m32 cahr 1 ,short 2, int 4, long 4, long long 8.










unsign char 不以補(bǔ)碼的形式表示,純二進(jìn)制數(shù)字表示。副作用是無法表示負(fù)數(shù)。,





計(jì)算機(jī)內(nèi)部數(shù)據(jù)不變只是取決于比怎樣讀取怎么讀。printf強(qiáng)制讀取int


%o八進(jìn)制輸出。%x十六進(jìn)制輸出。


為了準(zhǔn)確表達(dá)硬件。+早期規(guī)范。


%e輸出形式是科學(xué)計(jì)數(shù)法。%E大寫字母。


%.16f表示小數(shù)點(diǎn)后十六位,即輸出精度。

浮點(diǎn)數(shù)有誤差。非常正常。
-0.0045浮點(diǎn)數(shù)四舍五入則是-0.004因?yàn)楦↑c(diǎn)數(shù)有誤差,我們其實(shí)是對(duì)-0.0044999做四舍五入。

printf輸出inf表示超過范圍的浮點(diǎn)數(shù):+-無窮大
printf輸出nan表示不存在的浮點(diǎn)數(shù)。

wuwu無窮大可以用浮點(diǎn)表示。浮點(diǎn)
浮點(diǎn)運(yùn)算有精度。





ASCII。
字符的輸入輸出:如何輸入'1'這個(gè)字符給char c?
scanf(“%c”,&c);-->1
scanf(“%d”,&c);-->49

字符計(jì)算





常見ASCII碼的大小規(guī)則:數(shù)字< 大寫字母 < 小寫字母。
1.數(shù)字比字母要小。如 “7”<“F”;
2.數(shù)字0比數(shù)字9要小,并按0到9順序遞增。如 “3”<“8” ;
3.字母A比字母Z要小,并按A到Z順序遞增。如“A”<“Z” ;
4.同個(gè)字母的大寫字母比小寫字母要小32。如“A”<“a” 。
幾個(gè)常見字母的ASCII碼大小: “A”為65;“a”為97;“0”為 48???。



shell 與hello word!
\b回退一格,back space若有再次輸入將覆蓋,否則不覆蓋。

自動(dòng)類型轉(zhuǎn)換




























函數(shù)名與參數(shù)值之間不能有空格。



dan單一出口原則。






函數(shù)的原型聲明(告訴編譯器不要亂猜);函數(shù)的定義;





















函數(shù)聲明一定 要在括號(hào)里明確參數(shù)是什么或者void。



可以嵌套聲明。



main()其實(shí)也是一個(gè)函數(shù),在它之前還有一系列準(zhǔn)備工作(yu預(yù)編譯),所以return 0是有效的;
p處理文件,bat文件。
數(shù)組。數(shù)組的索引從零開始。




數(shù)組的使用:如何定義和使用數(shù)組。



左值、右值在指針中講在c語(yǔ)言中的含義。

c語(yǔ)言開始數(shù)組的小標(biāo)從零開始。

c語(yǔ)言的函數(shù)到底是怎么輸入輸出的?本質(zhì)是什么?





magic number避免。


搜索:在一組給定的數(shù)據(jù)中,如何找出某個(gè)數(shù)據(jù)是否存在?


數(shù)組的集成初始化、。










一個(gè)數(shù)組給另一個(gè)數(shù)組只能采用遍歷。










副作用C++

在c語(yǔ)言中平白無故的加入一對(duì)大括號(hào)往往是用來調(diào)試的。


C99中的i內(nèi)部取代外部。




二維數(shù)組。


a[i,j]--括號(hào)里邊是逗號(hào)運(yùn)算符,表示j。







運(yùn)算符&



地址符占16字節(jié),p定義了整形所以需要強(qiáng)制類型轉(zhuǎn)換。
64位架構(gòu)

32位架構(gòu)



上邊A++,++A,A+B均不能取地址。

stack堆棧,分配變量自定向下存儲(chǔ)數(shù)據(jù)變量。


對(duì)于數(shù)組的地址



指針就是保存地址的變量point


*p是一個(gè)int,p是一個(gè)指針。
int *p,q 與int* p,q的區(qū)別。










32位架構(gòu)恰好不變,編譯不會(huì)報(bào)錯(cuò),但運(yùn)行一定會(huì)出錯(cuò)。




狀態(tài)用return 返回,實(shí)際的值用指針方式返回。








一個(gè)演員演了兩個(gè)雙胞胎。








數(shù)組其實(shí)可視為一個(gè)常量,故不可以被用來賦值運(yùn)算。



上邊圖片是說不能通過*p修改。


如果const在*的后面表示指針不能修改。
在*前邊表示*所指的東西不能修改。




指針運(yùn)算。



指針加一是加一個(gè)sizeof()。





兩個(gè)指針相減是地址差除以sizeof的結(jié)果。







動(dòng)態(tài)內(nèi)存分布。


<stdlib.h>引用malloc返回void *。動(dòng)態(tài)內(nèi)存分配。free()




1024==1k
1024*1024==1m
1024*1024*100=100m.





malloc+free.架構(gòu)+經(jīng)驗(yàn)。
字符串



‘\0’一個(gè)字節(jié)。0是int4個(gè)字節(jié)。'0'ASCII=0x30==48十進(jìn)制。

注意結(jié)尾的0需要占據(jù)一個(gè)字節(jié)。



字符串變量















空格






字符串?dāng)?shù)組






end of file.











spaceASCII32.





chongchongdi不能重疊。







concatenate鏈接。



不會(huì)越界。

返回的是指針,strrchr從右邊開始。




保護(hù)字符串。


strcasestr忽略大小寫來尋找字符串。
枚舉








結(jié)構(gòu)













































小端(低位優(yōu)先)=存儲(chǔ)從右向左來存。IBM從左向右,大端小端
x86cpu小段-低位在前。
全局變量









強(qiáng)龍不壓地頭蛇。




static靜態(tài)本地變量保持變量。


全局變量存放在代碼區(qū),本地變量存放在棧區(qū)。
全局變量貼士



二房東。

全局變量是不可存入的。對(duì)于多線程是不安全的。
宏定義


macro宏定義。








帶參數(shù)的宏







macro宏不要加分號(hào)


inline機(jī)制取代帶參數(shù)的宏,屬于一種函數(shù)。

大程序






自己的頭文件用“”系統(tǒng)給的標(biāo)準(zhǔn)庫(kù)的用<>.



extern gAll全局變量聲明。



函數(shù)的定義是定義,函數(shù)的原型是聲明。





*格式化輸入輸出*







9.2表示共有9位且小數(shù)點(diǎn)后有2位。





%n讀取、寫入的個(gè)數(shù)



gps1083協(xié)議。



文件輸入輸出




<輸入
>輸出




二進(jìn)制文件


vim














shu數(shù)據(jù)庫(kù)、第三方庫(kù)
**按位運(yùn)算**








取反與補(bǔ)碼是不一樣的。



2次異或相當(dāng)于什么都沒做。
**移位運(yùn)算**




**位運(yùn)算例子8**


SFR?= special funtion register //特殊功能寄存器





**可變數(shù)組==resizable array**




結(jié)構(gòu)不帶指針更好,因?yàn)榭梢宰鳛樽兞俊?/p>









free安定&create


封裝。

獲得指針就可以對(duì)其進(jìn)行賦值或者修改。




可變數(shù)組的增長(zhǎng)










memcpy
可變數(shù)組的缺陷



沒有連續(xù)的內(nèi)存

**鏈表**



數(shù)據(jù)+節(jié)點(diǎn)。上圖代碼行不能使用Node因?yàn)樗?行才定義出現(xiàn)。








不要使用全局變量因?yàn)椴豢蓹z測(cè)。


第四種方法







尾指針——————沒有展開講述。
遍歷list鏈表
鏈表的搜索







鏈表的刪除

lianbiao此時(shí)學(xué)的都是單向鏈表



邊界條件

鏈表的清除


哨兵節(jié)點(diǎn),雙向鏈表
圖形界面軟件







DCshe設(shè)備上下文



項(xiàng)目屬性





acllib的基本繪圖函數(shù)




坐標(biāo)系unix也一樣。


unix習(xí)慣于這樣









