目錄:
一惩阶,計(jì)算機(jī)為什么能夠?qū)崿F(xiàn)計(jì)算挎狸;
二扣汪,第二講:
三,第三講:程序運(yùn)行的基本原理
參考資料:
說明:學(xué)習(xí)筆記锨匆;
CPU公頃桑:AMD崭别、英特爾、IBM
世界超級計(jì)算機(jī)排名:www.top500.org
綠色計(jì)算的課題:Google一下所消耗的電量:11瓦的燈泡亮1個(gè)小時(shí)恐锣;/可以煮熟一杯咖啡茅主;》新型計(jì)算:云計(jì)算;
未來的計(jì)算:從摩爾定律到量子計(jì)算機(jī)土榴;
李戈:lige@sei.pku.edu.cn
摩爾定律/規(guī)律:1965年提出诀姚;
主流的結(jié)論:摩爾定律是由英特爾(Intel)創(chuàng)始人之一戈登·摩爾(Gordon Moore)提出來的。其內(nèi)容為:當(dāng)價(jià)格不變時(shí)玷禽,集成電路上可容納的元器件的數(shù)目赫段,約每隔18-24個(gè)月便會增加一倍,性能也將提升一倍
摩爾定律還能堅(jiān)持多久/挑戰(zhàn)矢赁?
1糯笙,散熱:單位面積晶體管的密度和速度的提高,芯片會產(chǎn)生更多的電力撩银,產(chǎn)生更多的熱能给涕;
2,晶體管的代銷顯示:晶體管不斷變小额获,小到一個(gè)與那紫那么大就沒辦法了够庙;
3,晶體管變小抄邀,電泄漏的情形增加耘眨;
芯片做大一點(diǎn),需要的電壓就會越高撤摸,是不能擴(kuò)大芯片的體積的原因之一毅桃;
摩爾定律失效之后怎么辦/尋找創(chuàng)造全新的計(jì)算理論和計(jì)算模式褒纲?
量子計(jì)算機(jī)的原理:利用量子體系實(shí)現(xiàn)通用計(jì)算;
量子計(jì)算機(jī)的進(jìn)展相對較快钥飞;
使用傳統(tǒng)計(jì)算機(jī)進(jìn)行對量子進(jìn)行分析計(jì)算(使用傳統(tǒng)的計(jì)算機(jī)對量子世界進(jìn)行量子現(xiàn)象的模擬和分析)莺掠,遠(yuǎn)遠(yuǎn)不能滿足需求;
功能與創(chuàng)痛計(jì)算機(jī)的區(qū)別是指數(shù)級的读宙;
量子計(jì)算機(jī)存在的困難:
1彻秆,量子的計(jì)算:與外界環(huán)境隔離才能保持良好的相干性;
2结闸,量子計(jì)算機(jī)的制造:與外界環(huán)境良好的耦合才能控制演化并讀出結(jié)果唇兑;
1000個(gè)量子比特就相當(dāng)于目前(傳統(tǒng))計(jì)算機(jī)計(jì)算能力(有14億個(gè)晶體管);
當(dāng)前量子計(jì)算機(jī)的成果:
首臺可編程通用量子計(jì)算機(jī)桦锄,2個(gè)量子比特扎附;需要絕對零度的環(huán)境;
Opportunity:Leading in a? Changing World;
第一講:計(jì)算機(jī)為什么能夠?qū)崿F(xiàn)計(jì)算结耀;
第二講:
帶三講:程序運(yùn)行的基本原理
什么是存儲程序式計(jì)算機(jī)留夜?它都包含哪些部分?
命令是什么樣子图甜?它是怎么被執(zhí)行的碍粥?
程序是什么樣子?跟命令一樣嗎黑毅?計(jì)算機(jī)怎么能認(rèn)識程序嚼摩,并執(zhí)行程序的?
存儲器:
衡量存儲能力大锌笫荨枕面;
程序能夠控制的最小單位:1字節(jié)/B;
存儲空間的單位:bit,Byte,KB,MB,GB,TB,PB,YB;
存儲器的原理是什么匪凡?為什么能夠 存住 數(shù)據(jù)技矮?
存儲器的種類有哪些箍鼓?DDR什么意思扶认?
為什么32位的CPU最多只能配備4G內(nèi)存狭吼?》尋址空間只有那么大;
命令的執(zhí)行衬衬;
程序解決了什么問題买猖?
CPU能執(zhí)行那些程序,怎么執(zhí)行的滋尉?
指令集:
CPU中用來計(jì)算和控制計(jì)算機(jī)系統(tǒng)的一套指令集合玉控;
CPU只能執(zhí)行指令集里的指令;
CPU設(shè)計(jì)的時(shí)候就預(yù)先定義好了狮惜;是CPU性能的重要標(biāo)志高诺;
指令:
都是二進(jìn)制碼碌识,包含指令碼(說明要做的動(dòng)作)和操作數(shù)(指要操作的數(shù)或地址,可以有一個(gè)虱而、多個(gè)或沒有操作數(shù))筏餐;
把你的指令轉(zhuǎn)換成 滿足指令集要求的二進(jìn)制碼,才能在計(jì)算機(jī)上運(yùn)行牡拇,然后才能在CPU上執(zhí)行魁瞪;
CPU中指令的執(zhí)行:
工作方式:
運(yùn)算器(ALU):專門執(zhí)行算數(shù)和邏輯運(yùn)算的數(shù)字電路;
寄存器:暫存信息惠呼;
控制器:程序計(jì)數(shù)器PC:存放下一條指令的地址导俘;指令寄存器IR:存放當(dāng)前正在執(zhí)行的指令;地址寄存器MAR:存放要訪問的主存地址剔蹋;
程序的執(zhí)行:
程序和匯編代碼都是CPU不能理解的旅薄;
程序》編譯》轉(zhuǎn)換成匯編代碼》轉(zhuǎn)換成機(jī)器碼》CPU運(yùn)行;
代碼區(qū):
數(shù)據(jù)區(qū):
控制區(qū):逐條執(zhí)行程序滩租;
運(yùn)算區(qū):
輸入赋秀、輸出利朵;
程序必須經(jīng)過編譯才能轉(zhuǎn)換成CPU所能接受的指令律想;
一句程序可能轉(zhuǎn)換為多條語句;
在控制器的協(xié)調(diào)下連續(xù)绍弟,依次執(zhí)行相關(guān)的指令技即;
程序的執(zhí)行過程是在內(nèi)存中完成的;
程序在執(zhí)行過程中樟遣,在內(nèi)存中的不同區(qū)域而叼,存放代碼和相關(guān)的數(shù)據(jù)
小節(jié):
1,計(jì)算機(jī)是能用電路進(jìn)行計(jì)算的豹悬!
數(shù)》二進(jìn)制數(shù)》都可以用布爾運(yùn)算來算》都能用電路實(shí)現(xiàn)葵陵;
2,CPU是制造號的電路瞻佛,它能完成指令集里的運(yùn)算脱篙!
指令是二進(jìn)制的碼,CPU能看懂伤柄,并執(zhí)行它绊困;
3,想要讓CPU按照我們的想法做事情适刀,我們應(yīng)該:
把我們想要租的事情寫出來(某種計(jì)算機(jī)語言)秤朗;
把這個(gè)寫出來的東西,翻譯成CPU能看懂的二級制指令笔喉;CPU就會按照我們的想法去運(yùn)行取视;
C++的學(xué)習(xí)方法論:
1硝皂,訓(xùn)練得技能;
2作谭,抓大放邪杀搿(對提高編程水平有用的東西);
3丢早,多練簡單題姨裸,由模仿開始,抄程序怨酝;
4傀缩,選一本薄書作參考;
感性認(rèn)識C++程序
本質(zhì)為C程序农猬,C是C++的一部分赡艰;
程序:你告訴計(jì)算機(jī)的話;編程序的方式代替插線的事情斤葱,告訴計(jì)算機(jī)做什么慷垮,怎么做;
如何創(chuàng)造一門 程序設(shè)計(jì)語言揍堕?
1料身,寫什么樣的詞計(jì)算機(jī)才能明白,是不是什么樣的詞都能明白衩茸?
編程語言定義了一些特殊的“特殊的關(guān)鍵字”芹血,計(jì)算機(jī)只能明白這些“詞”的含義;C++里能夠認(rèn)識到 關(guān)鍵詞 只有有限的35個(gè)楞慈,都有特殊的含義幔烛;以少量的“詞”來定義可能用到的更多的詞;
2囊蓝,是不是什么樣的數(shù)和計(jì)算符計(jì)算機(jī)都能明白饿悬?
計(jì)算機(jī)只能看懂某些類型的數(shù)據(jù),這些“數(shù)據(jù)的類型”和相應(yīng)的“操作符號”也是定義好的聚霜;
3狡恬,世界上需要“程序表達(dá)的邏輯”去做的事紛繁復(fù)雜,程序設(shè)計(jì)語言里面得有多少種“句式”才能夠夠用俯萎?
三種:順序語句傲宜、循環(huán)語句(for)、分支語句(if)夫啊;
1966年被證明這三個(gè)句式是夠的函卒;
期刊:Communication of the ACM
小節(jié):
C++編程語言:30幾個(gè)關(guān)鍵字 + (十幾種基本數(shù)據(jù)類型 + 30幾個(gè)運(yùn)算符) +? 三種基本的邏輯語句;?
只要你客觀的觀察這個(gè)世界,你就會發(fā)現(xiàn)他是如此的簡單报嵌,以至于像我們所想象的那樣虱咧,正因?yàn)槿绱耍覀兊乃伎疾庞袃r(jià)值锚国!
程序中的“套話”(引導(dǎo)執(zhí)行程序+結(jié)束)腕巡;
定義變量并給與初始值,形成習(xí)慣血筑;
順序結(jié)構(gòu):
int a = 0;
Cunt << “請輸入一個(gè)數(shù)” << endl
cin >> a //鍵盤輸入值給a;
Cunt << a << endl
Cunt::輸出绘沉;
<< “” :必須為雙引號;
分支結(jié)構(gòu):
循環(huán)結(jié)構(gòu):
char :只能放一個(gè)字符豺总,單引號车伞;
char =? ‘A’;
常用的結(jié)構(gòu):
數(shù)組;
注釋喻喳,縮進(jìn):復(fù)雜的程序易讀另玖、可讀性;
break:循環(huán)結(jié)束表伦;
什么樣的程序是好程序谦去?
重視:
程序正確,解決了問題蹦哼;
程序容易看懂鳄哭;易于看懂的程序才會被維護(hù)下去,才會有生命力翔怎;
程序結(jié)構(gòu)清楚窃诉,更美;
不重視:變量數(shù)目赤套,行數(shù),運(yùn)行快慢珊膜;
積少成多容握!
IDE安裝(都有免費(fèi)版本):
Windows環(huán)境下:
Visual Studio;
Eclip :支持多種語言,跨平臺;
NetBeans:
調(diào)試:http://open.163.com/movie/2018/11/T/8/MDVKV3H5A_ME04JM7T8.html车柠;
《計(jì)算導(dǎo)論A》課程 程序設(shè)計(jì)部分
從現(xiàn)實(shí)問題到計(jì)算機(jī)程序
李戈
有了解決方案之后才會有程序剔氏;
問題》找到解決方案》寫成程序》計(jì)算機(jī)執(zhí)行;
1竹祷,在沒有想到解決方案的時(shí)候谈跛,不要急著動(dòng)手寫程序刷喜;(急著寫程序页响,會導(dǎo)致你找不到擦混高新興的解決方案席覆;改來改去的寫程序员凝,會造成程序的混亂折汞,引入更多的錯(cuò)誤;)
2翔烁,在結(jié)構(gòu)化程序設(shè)計(jì)中慨削,總是按照先粗后細(xì),先抽象后具體 的辦法嫂沉,對所描述的解決方案稽寒,進(jìn)行窮盡分解,直到分解為順序趟章,分支杏糙,循環(huán)三種結(jié)構(gòu);
3蚓土,可以先用 建模工具 建立框架搔啊,實(shí)現(xiàn)框架之后再填充;
Guanhu C程序設(shè)計(jì)語言學(xué)習(xí)進(jìn)度:
課程內(nèi)容:感性認(rèn)識》理性認(rèn)識》函數(shù)》指針等北戏;
作業(yè)練習(xí):初級階段聯(lián)系 》 正常聯(lián)系负芋;
為什么叫“C”語言?因效率高被稱為高級語言(相對機(jī)器語言嗜愈,匯編語言來說)旧蛾;
計(jì)算機(jī)的發(fā)展史上,貝爾實(shí)驗(yàn)室做出了重大的貢獻(xiàn)蠕嫁;
關(guān)于語言:A語言》B語言》C語言锨天;
1954年-1956年,第一門高級程序設(shè)計(jì)語言:FORTRAN,特別適合做數(shù)學(xué)計(jì)算剃毒;
1960年1月病袄,Alan J.Perlis 在巴黎的軟件專家討論會上發(fā)表了“算法語言Algo 60報(bào)告”,宣告了長須設(shè)計(jì)語言的Algo 60 的誕生赘阀,標(biāo)志著計(jì)算科學(xué)的誕生益缠,是計(jì)算科學(xué)的里程碑,簡稱:A 語言基公;
1970年幅慌,貝爾實(shí)驗(yàn)室的 Ken Thompson 為了寫一個(gè)游戲發(fā)現(xiàn)沒有操作系統(tǒng),寫一個(gè)操作系統(tǒng)發(fā)現(xiàn)沒有好用的語言轰豆,所以在A語言的基礎(chǔ)上創(chuàng)造了 B 語言胰伍,然后寫了一個(gè)操作系統(tǒng),這個(gè)操作系統(tǒng)的名字叫做:UNIX酸休,UNIX在計(jì)算機(jī)操作系統(tǒng)發(fā)展史上骂租,具有不可撼動(dòng)的位置,是當(dāng)時(shí)甚至是現(xiàn)在斑司,最先進(jìn)的操作系統(tǒng)之一渗饮;
1972-1973 年的時(shí)候,貝爾實(shí)驗(yàn)室的另一個(gè)人Dennis Ritchie 和? Ken Thompson? 在B語言的基礎(chǔ)上發(fā)展和完善出C語言,并在C語言的基礎(chǔ)上重寫了 UNIX抽米;
留有大胡子的程序員寫出系統(tǒng)都會被流行特占;
目前為止,C語言的國際版本最新版本:C11云茸,此標(biāo)準(zhǔn)下載需付錢是目,但可以搜索免費(fèi)版;
C++ 語言的國際版本最新版本:C++2011(正文1180頁)标捺;
C語言規(guī)范和C++語言規(guī)范是兩個(gè)不同的規(guī)范懊纳,是相互獨(dú)立的,C++包含了C 的所有的特性亡容;
本次課程:才C++的環(huán)境中嗤疯,學(xué)習(xí)C語言;
學(xué)習(xí)一門的程序設(shè)計(jì)語言怎么學(xué)(學(xué)習(xí)攻略)闺兢?
語言的種類千差萬別茂缚,但是一般來說,基本成分不外四種(所有的程序設(shè)計(jì)語言屋谭,關(guān)注這4個(gè)部分就夠了——計(jì)算機(jī)科學(xué)技術(shù)百科全書):
數(shù)據(jù)成分:用以描述程序中所涉及的數(shù)據(jù)脚囊;
運(yùn)算成分:用以描述程序中所包含的運(yùn)算;
控制成分:用以表達(dá)程序中的控制構(gòu)造(順序桐磁,分支悔耘,循環(huán));
傳輸成分:用以表達(dá)程序中數(shù)據(jù)的傳輸我擂;
下面開始理性認(rèn)識C程序階段(感性》理性》函數(shù)》指針)衬以;
感性:程序抄寫;
理性:練習(xí)校摩;
C語言的基本構(gòu)成成分(1/9)看峻;
數(shù)據(jù)成分:
內(nèi)存的認(rèn)識:
每個(gè)字節(jié)屬于一個(gè)存儲單元,每個(gè)存儲單元都有自己的地址秧耗,用十六進(jìn)制的表示备籽;
變量:C++里的變量必須先定義,再使用分井;
定義一個(gè)變量,計(jì)算機(jī)所做的操作:找到幾個(gè)連續(xù)的存儲空間霉猛,為這片存儲空間取一個(gè)名字(變量名)尺锚,將變量的初始值放到存儲空間里,記下變量的名字和這片存儲空間的起始地址的對應(yīng)關(guān)系惜浅;然后就可以使用變量名對這片空間進(jìn)行讀寫瘫辩;
整形數(shù)據(jù)的分類(2/9)
基本型:int
短整型:short /short int
長整型:long /long int
按照在存儲單元中所占的內(nèi)存大小來區(qū)分的;
C語言的定于寬泛,整型和長整型長度相同的(所以C++里的長整型基本不用)伐厌;
Sizeof 運(yùn)算符 測定某種數(shù)據(jù)類型的長度(字節(jié)):
根據(jù)有無符號區(qū)分(無符號的不能表示負(fù)數(shù)承绸,有符號的:第一位表示符號位,0表示正數(shù)挣轨,1表示負(fù)數(shù)):
在不寫明的情況下军熏,默認(rèn)為都是有符號;
數(shù)據(jù)的存儲(3/9):
signed? VS. unsigned?
正整數(shù)的表示方法卷扮,和負(fù)整數(shù)的表示方法是不同的荡澎;正整數(shù)存儲的是原碼,負(fù)整數(shù)存儲的是補(bǔ)碼晤锹;
負(fù)數(shù)補(bǔ)碼的求法摩幔;
負(fù)數(shù)為什么不存儲原碼?計(jì)算機(jī)原理的課會說明鞭铆,總的來說是非常有利于在計(jì)算機(jī)中的運(yùn)算或衡,效率會高很多;
整數(shù)的輸出(4/9):
打印一個(gè)數(shù)的二進(jìn)制表示》打印一個(gè)數(shù)的十六進(jìn)制表示即可车遂,打印控制寫成 hex封断,可以看到任何一個(gè)數(shù)的十六進(jìn)制表示,也就看到了2進(jìn)制的表示艰额,(f:1111)澄港;八進(jìn)制表示:oct(7:111);十進(jìn)制:dec柄沮;
把一個(gè)二進(jìn)制數(shù)寫入到程序里:
轉(zhuǎn)化為十六進(jìn)制回梧,再寫(只要以0x開頭,如oxffff 計(jì)算機(jī)就會把ffff識別為十六進(jìn)制數(shù)祖搓,同理狱意,以0開通的數(shù),默認(rèn)為是八進(jìn)制的數(shù)如0375)拯欧;
最大详囤、最小的整數(shù)(5/9)
某一種數(shù)據(jù)整數(shù)的最大值(整型無符號:42億,定義的數(shù)不能超過這個(gè)數(shù)镐作,整型有符號:最大21億藏姐,最小-21億);
1000 0000 0000 0000 0000 0000 ,此處该贾,1即表示符號位羔杨,也表示最高位;
使用須知:
變量一定要初始化杨蛋,不初始化兜材,值會錯(cuò)亂理澎;
浮點(diǎn)型的分類(6/9)
浮點(diǎn)型=實(shí)型;
精度:
字符型(7/9)
字符集不超過256個(gè)曙寡;ASCII Character Codes糠爬;
字符型的是可以和整型的數(shù)混用;
轉(zhuǎn)義字符(利用字符的方式举庶,表達(dá)一些相關(guān)的信息):
\n:換行执隧; \a :滴 響一下朗鸠;
布爾型(8/9)
占一個(gè)字節(jié)陋守;
字節(jié)是計(jì)算機(jī)所能控制的,最小存儲單位翘地,布爾雖然只用一位就可以了添祸,但是要分配一個(gè)字節(jié)滚粟;
即使是位運(yùn)算,也是以字節(jié)為單位進(jìn)行操作的刃泌;
布爾類型的存儲:非0即1凡壤;(BOOL A = -100; 打印結(jié)果:A= 1;)
常量(9/9)
程序中,所有數(shù)都是有類型的—常量也一樣耙替;
常量的數(shù)據(jù)類型怎么表示亚侠?
字面常量:寫在程序中的數(shù);
符號常量:用一個(gè)標(biāo)識符代表一個(gè)常量的俗扇,稱為符號常量硝烂;
容易改;使用把過程中铜幽,它的值不會被改變滞谢;
是通過常量的后綴來表示的;
不寫L即當(dāng)做除抛,整型數(shù)據(jù)來處理狮杨;
后綴可以聯(lián)合使用;
變量的名字(9+1)
什么樣的名字是合法的:標(biāo)識符到忽;標(biāo)識符不能與保留字相同橄教;
什么樣的名字才是好名字?
匈牙利命名法喘漏;
駝峰命名法:
沒必要使用一種命名法护蝶,命名所有的標(biāo)識符,合適的地方使用合適的命名方法翩迈;
可以有自己的命名方法滓走,清晰易懂即可(正確性的前提下,增加可讀性)帽馋;最好給變量加注釋搅方;
正確的學(xué)習(xí)方式:了解但不陷入細(xì)節(jié);知道他的參考資料在哪里绽族,但不是馬上去了解姨涡;
計(jì)算概論(A) 程序設(shè)計(jì)部分????C語言的構(gòu)成部分-運(yùn)算成分
C語言中的運(yùn)算符(1/9);
賦值運(yùn)算的基本功能(2/9)
1吧慢,當(dāng)兩邊的類型不同的時(shí)候涛漂;
2,長數(shù)賦值給短數(shù)(數(shù)值可能會變):
????????2-1检诗,長數(shù)的低位按照短數(shù)的長度截?cái)嘈僬蹋x值給短數(shù);
????????2-2逢慌,賦值賦的是什么悠轩,短數(shù)的值就是什么,有可能與長數(shù)的值相差很多攻泼;
3火架,短數(shù)賦值給長數(shù);
4忙菠,符號位的處理(數(shù)值可能會變)何鸡;
小節(jié):
1,當(dāng)兩邊類型不同牛欢,自動(dòng)完成類型轉(zhuǎn)換骡男;
2,當(dāng)長數(shù)賦值給短數(shù)傍睹,截取長數(shù)的低位給短數(shù)隔盛;
3,當(dāng)短數(shù)賦值給長數(shù)焰望,原來什么數(shù)骚亿,現(xiàn)在還是什么數(shù);
4熊赖,符號位的賦值處理来屠,直接賦值,不管是符號位還是數(shù)字位震鹉;
賦值運(yùn)算 附加說明-表達(dá)式
C語言‘=’ 屬于表達(dá)式俱笛;
1,賦值語句也是一種表達(dá)式传趾,也是有返回值的迎膜;
2,復(fù)合的賦值運(yùn)算算浆兰;
3磕仅,連續(xù)的賦值運(yùn)算珊豹;
表達(dá)式:運(yùn)算符的優(yōu)先級,同一級別的榕订,自右向左的結(jié)合順序店茶;
連續(xù)賦值運(yùn)算可讀性不好,不建議寫(容易被別人讀懂的程序劫恒,才更有可能被維護(hù)下去贩幻,才更有生命力);
算術(shù)運(yùn)算符之符號優(yōu)先級(4/9)
編譯器不同两嘴,小數(shù)的精確取值方法有可能不同丛楚,有可能四舍五入,有可能是五舍六入憔辫;
優(yōu)先級的問題很重要:%(模運(yùn)算)與乘數(shù)是同一級的趣些;
加減:同一級別的混合,從左向右計(jì)算螺垢;
橫向箭頭是計(jì)算之前必定要先進(jìn)行的一步轉(zhuǎn)換喧务;
縱向箭頭是,低級別的數(shù)要轉(zhuǎn)換成高級別的之后再進(jìn)行計(jì)算枉圃;
算術(shù)運(yùn)算符之輸出自增功茴、自減(5/9)
?++ 和 — — 只適用于變量,不適用于表達(dá)式孽亲;(-i)++ ;報(bào)錯(cuò)坎穿; ++i++ ;也會報(bào)錯(cuò)因?yàn)?右邊++優(yōu)先計(jì)算返劲,i++而且本身就是表達(dá)式玲昧,而++ 不能修飾表達(dá)式;也會報(bào)錯(cuò)篮绿;
VC下面打印中孵延,如果包含多個(gè)表達(dá)式,是遵循從右向左計(jì)算的亲配;
注意:d = (a=b++)+(e=b)的運(yùn)算尘应,‘+’ 運(yùn)算之后再 ‘++ ’ ;結(jié)果:d = d*2;
如果對運(yùn)算的順序感興趣吼虎,編譯器在debug的狀態(tài)下可以看到每一步的編譯順序/運(yùn)算順序犬钢;
關(guān)系運(yùn)算(6/9)
關(guān)系運(yùn)算表達(dá)式的值,成立返回‘真’洒疚,不成立返回‘假’歹颓;
運(yùn)算符的優(yōu)先級:算術(shù)運(yùn)算符》關(guān)系運(yùn)算符》賦值運(yùn)算符坯屿;
邏輯運(yùn)算(7/9)
三種最基本的邏輯運(yùn)算:與&& 、或 || 晴股,非愿伴!
邏輯運(yùn)算符的優(yōu)先級: 非 》 與 》 或;
在不熟悉各種運(yùn)算優(yōu)先級的情況下电湘,加括號;
邏輯運(yùn)算的取舍鹅经;
邏輯運(yùn)算之混合運(yùn)算寂呛;
其他運(yùn)算符(8/9)
1,逗號運(yùn)算符
在所有運(yùn)算符的優(yōu)先級中瘾晃,級別是最低的贷痪;
2,條件運(yùn)算符(等同于if語句蹦误,if語句可讀性更高)
3劫拢,強(qiáng)制類型轉(zhuǎn)換;
選講內(nèi)容 --- 位運(yùn)算(9/9)
通過對字節(jié)為單位的操作實(shí)現(xiàn)位運(yùn)算强胰;
雙目運(yùn)算符:由兩個(gè)操作數(shù)參與舱沧;
單目運(yùn)算符:只有一個(gè)操作數(shù)參與;
與運(yùn)算:按位與偶洋;
或運(yùn)算:按位或熟吏;
異或運(yùn)算:按位與或;
取反運(yùn)算:每一位都取反玄窝;
左移位運(yùn)算:
在沒有溢出(有1 被移出)的情況下相當(dāng)于乘以/除以2倍牵寺;
優(yōu)先級,具體參照運(yùn)算優(yōu)先級列表恩脂;
C語言的基本成分-控制成分
計(jì)算機(jī)長須的基本結(jié)構(gòu)
控制成分(1/3)
順序語句帽氓,分支語句瘫证,循環(huán)語句榨馁;
單入口,單出口的程序:我們所寫的所有的程序都具備這個(gè)特點(diǎn)乐导,任何程序的執(zhí)行典阵,都是有唯一的一個(gè)入口奋渔,唯一的一個(gè)出口的;這是結(jié)構(gòu)化程序語言的特點(diǎn)壮啊;
結(jié)構(gòu)化程序設(shè)計(jì)(后面講)嫉鲸;
分支語句:if ,switch歹啼;
Case 只提供一個(gè)執(zhí)行的入口玄渗;不加break的情況下座菠,找到入口會一直向下執(zhí)行,直到遇到break藤树;
default 也是一個(gè)入口浴滴,與default放在前面或后面都一樣,而且需要break岁钓;
早期的程序控制方法????goto的故事(3/3)
goto 無條件暫轉(zhuǎn)換升略;不建議使用,
Goto 之爭屡限;牛人站出來說句話:高德納
C程序中的數(shù)組
數(shù)組是最常用的數(shù)據(jù)結(jié)構(gòu)品嚣;
數(shù)組的定義(1/5)
補(bǔ)充說明:
數(shù)組的大小:定義下標(biāo)不能為變量钧大,C語言不支持變長的數(shù)組翰撑,可以使用符號常量或者宏定義來定義數(shù)組大小,以便于修改啊央;
數(shù)組的初始化:只定義沒有對元素進(jìn)行初始化眶诈,數(shù)值為默認(rèn)一個(gè)最大的負(fù)值;可以初始化但不給大泄霞ⅰ逝撬;定義了大小,只給部分元素賦值压固,其他剩余的元素默認(rèn)為賦值0球拦,如之定義第一個(gè)元素為0,剩余默認(rèn)為全是0帐我;定于元素多于下標(biāo)坎炼,報(bào)錯(cuò);
注意:下標(biāo)從0開始拦键;
數(shù)組的初始化:
二維數(shù)組的定義(2/5)
二維數(shù)組可以看做由多個(gè)一維數(shù)組的集合谣光;
存儲數(shù)據(jù)列表;
存儲:拉成一條直線芬为,存儲到內(nèi)存里萄金;
初始化:內(nèi)層的大括號可以不用寫;只指定行數(shù)或列數(shù)也可以媚朦;只對部分元素進(jìn)行初始化氧敢,剩下的默認(rèn)賦值0;
可以利用下標(biāo)的對應(yīng)關(guān)系進(jìn)行賦值询张;
三維數(shù)組的定義(3/5)
二維數(shù)組也可以看做由多個(gè)一維數(shù)組的集合孙乖;或多個(gè)二維數(shù)組的排列;
存儲:將三維數(shù)組切成二維數(shù)組來存儲,二維數(shù)組再拉成一維數(shù)組唯袄;
最好不要定義三維以上的數(shù)組弯屈,減少出錯(cuò)概率,提高程序可讀性恋拷;
數(shù)組的作用之用數(shù)組做統(tǒng)計(jì)(4/5)
數(shù)組的下標(biāo)與數(shù)據(jù)的對應(yīng)關(guān)系资厉,可以用來做整數(shù)的統(tǒng)計(jì);下標(biāo)特別有用蔬顾;
數(shù)組的作用之下標(biāo)做數(shù)軸(5/5)
篩法求素?cái)?shù):
找素?cái)?shù):
方法1:一個(gè)一個(gè)的區(qū)分是不是素?cái)?shù)宴偿;
方法2:篩法求素?cái)?shù)(刪除所有的合數(shù)剩下的全是素?cái)?shù));
求開方阎抒,被開方的數(shù)必須為double酪我,所以被開方數(shù)要寫成小數(shù);
以打基礎(chǔ)為主且叁,而不是達(dá)到一定的水平;
字符數(shù)組與字符串
什么是字符串(1/5)
字符數(shù)組的初始化
認(rèn)識字符串:
所有的字符串都是以 \0 結(jié)尾的秩伞,所有以 \0 結(jié)尾的字符數(shù)組都可以被看作為“xxx”的字符串逞带;
關(guān)于賦值:字符串對字符數(shù)組賦值,只能出現(xiàn)在定義環(huán)節(jié)纱新;但可以對單個(gè)元素進(jìn)行賦值展氓;
字符數(shù)組可以當(dāng)數(shù)組使用;
二維字符數(shù)組:也是直接賦值字符串脸爱;
輸入緩沖區(qū)(2/5)
單獨(dú)來講:太常用了遇汞;
字符/字符數(shù)組/字符串的輸入與輸出
輸入緩沖區(qū):鍵盤打印完畢 回車,輸入內(nèi)容包括回車就會被臨時(shí)存儲到一個(gè)叫做輸入緩沖區(qū)的地方簿废;程序就會到輸入緩沖區(qū)讀取字符空入;使用指針來標(biāo)定哪些字符是被讀取過的,那些是尚未被讀取的族檬;指針只能向后移動(dòng)歪赢;
關(guān)于cin輸入:數(shù)據(jù)存儲到數(shù)據(jù)緩沖區(qū)之后,cin就負(fù)責(zé)讀取這一塊數(shù)據(jù)单料,將數(shù)據(jù)給與對應(yīng)的變量埋凯;cin不能進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換,輸入的數(shù)據(jù)類型不正確扫尖,cin即沒辦法讀劝锥浴;cin會把空格和回車都當(dāng)做數(shù)據(jù)輸入?yún)^(qū)分的標(biāo)志换怖;如果cin能夠讀到正確的數(shù)甩恼,就會返回一個(gè)非零的數(shù),否則就會返回0,表示讀取錯(cuò)誤媳拴,可以使用cin這個(gè)特性黄橘,來書寫很多支持連續(xù)輸入的程序;
一個(gè)字符的輸入(3/5)
方法1屈溉,cin輸入塞关;
cin讀取的時(shí)候,會跳過空格和回車子巾;如何終止輸入:control+z;
方法2帆赢,cin.get()輸入;是cin里面的一個(gè)方法线梗;cin.get()讀取的過程中椰于,不會跳過空格和回車,會將空格和回車都讀取并且打印出來仪搔;停止:control+z;
EOF:文件結(jié)束的標(biāo)志瘾婿;
cin.get(char)
讀取賦值給C,并且打涌具帧偏陪;
方法3,getchar()輸入
讀取的時(shí)候不跳過任何字符煮嫌,把^Z也會打印出來笛谦;
第66節(jié)和第67節(jié)是一樣的,沒有(4/5)
字符串例題(5/5)
字符串加密:凡是使用字符串替換字符串的方法昌阿,都容易被破解饥脑,使用自出出現(xiàn)的概率進(jìn)行破解;
字符串拼接
統(tǒng)計(jì)單詞數(shù):
找到一個(gè)單詞開始的標(biāo)志位懦冰;不用關(guān)心單詞是什么有多長灶轰;
講述這么多細(xì)節(jié),是因?yàn)槿鄙倭吮贝蟮膶?shí)驗(yàn)課而網(wǎng)絡(luò)課沒有試驗(yàn)課儿奶;
課程結(jié)束
下次課程:
C程序設(shè)計(jì)進(jìn)階
參考資料:
網(wǎng)易公開課計(jì)算機(jī)專業(yè)課程體系
短綆不汲深泉框往!