程序設(shè)計(jì)與算法基礎(chǔ)

目錄:

一惩阶,計(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í)行程序的?


存儲程序式計(jì)算機(jī)

存儲器:

衡量存儲能力大锌笫荨枕面;

程序能夠控制的最小單位: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è)句式是夠的函卒;

三種語句



順序語句
分支語句


循環(huán)語句

期刊:Communication of the ACM

小節(jié):

C++編程語言:30幾個(gè)關(guān)鍵字 + (十幾種基本數(shù)據(jù)類型 + 30幾個(gè)運(yùn)算符) +? 三種基本的邏輯語句;?



數(shù)據(jù)類型
運(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語言;


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ù)的傳輸我擂;

程序設(shè)計(jì)語言的構(gòu)成


學(xué)習(xí)攻略

下面開始理性認(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ù)的分類


sizeof運(yùn)算


數(shù)據(jù)分類

數(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)算或衡,效率會高很多;

負(fù)數(shù)的存儲


負(fù)數(shù)補(bǔ)碼的求法


整數(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)拯欧;

十六進(jìn)制輸入程序


輸入八進(jìn)制
打印一個(gè)數(shù)的八進(jìn)制

最大详囤、最小的整數(shù)(5/9)

某一種數(shù)據(jù)整數(shù)的最大值(整型無符號:42億,定義的數(shù)不能超過這個(gè)數(shù)镐作,整型有符號:最大21億藏姐,最小-21億);

1000 0000 0000 0000 0000 0000 ,此處该贾,1即表示符號位羔杨,也表示最高位;

使用須知:

變量一定要初始化杨蛋,不初始化兜材,值會錯(cuò)亂理澎;


最小的整數(shù)


整型數(shù)據(jù)范圍


浮點(diǎn)型的分類(6/9)

浮點(diǎn)型=實(shí)型;

精度:


浮點(diǎn)型





字符型(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;)

布爾型


C++基本數(shù)據(jù)類型


常量(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)識符

什么樣的名字才是好名字?

匈牙利命名法喘漏;

駝峰命名法:

駝峰命名法

沒必要使用一種命名法护蝶,命名所有的標(biāo)識符,合適的地方使用合適的命名方法翩迈;

可以有自己的命名方法滓走,清晰易懂即可(正確性的前提下,增加可讀性)帽馋;最好給變量加注釋搅方;


正確的學(xué)習(xí)方式:了解但不陷入細(xì)節(jié);知道他的參考資料在哪里绽族,但不是馬上去了解姨涡;



計(jì)算概論(A) 程序設(shè)計(jì)部分????C語言的構(gòu)成部分-運(yùn)算成分

C語言中的運(yùn)算符(1/9);

C語言中的運(yùn)算符

賦值運(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ù)值可能會變)何鸡;

賦值運(yùn)算符


賦值運(yùn)算符


賦值運(yùn)算符


賦值運(yùn)算符-要點(diǎn)3



小節(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ù)下去贩幻,才更有生命力);

表達(dá)式


賦值表達(dá)式
賦值表達(dá)式


算術(shù)運(yùn)算符之符號優(yōu)先級(4/9)

編譯器不同两嘴,小數(shù)的精確取值方法有可能不同丛楚,有可能四舍五入,有可能是五舍六入憔辫;

優(yōu)先級的問題很重要:%(模運(yùn)算)與乘數(shù)是同一級的趣些;

加減:同一級別的混合,從左向右計(jì)算螺垢;

算術(shù)運(yùn)算符和算術(shù)表達(dá)式



橫向箭頭是計(jì)算之前必定要先進(jìn)行的一步轉(zhuǎn)換喧务;

縱向箭頭是,低級別的數(shù)要轉(zhuǎn)換成高級別的之后再進(jìn)行計(jì)算枉圃;

類型轉(zhuǎn)換


算術(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)算符坯屿;

關(guān)系運(yùn)算符


運(yùn)算符的優(yōu)先級


邏輯運(yùn)算(7/9)

三種最基本的邏輯運(yùn)算:與&& 、或 || 晴股,非愿伴!

邏輯運(yùn)算符的優(yōu)先級: 非 》 與 》 或;

在不熟悉各種運(yùn)算優(yōu)先級的情況下电湘,加括號;

邏輯運(yùn)算的取舍鹅经;

邏輯運(yùn)算之混合運(yùn)算寂呛;

邏輯運(yùn)算符


邏輯表達(dá)式的值


混合運(yùn)算的優(yōu)先級


路基運(yùn)算的取舍


路基運(yùn)算的取舍---舉例


示例


運(yùn)算對象的擴(kuò)展


示例


其他運(yùn)算符(8/9)

1,逗號運(yùn)算符

在所有運(yùn)算符的優(yōu)先級中瘾晃,級別是最低的贷痪;

2,條件運(yùn)算符(等同于if語句蹦误,if語句可讀性更高)

3劫拢,強(qiáng)制類型轉(zhuǎn)換;

逗號運(yùn)算和表達(dá)式


條件運(yùn)算符


強(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語言的基本成分-控制成分

位運(yùn)算


與運(yùn)算


或運(yùn)算


異或運(yùn)算


取反運(yùn)算


左移運(yùn)算


右移運(yùn)算


右移運(yùn)算的符號處理



不同長度數(shù)據(jù)的位運(yùn)算


復(fù)合賦值運(yùn)算


算符優(yōu)先級


按位與的用途


異或的用途


抑或用途


計(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岁钓;

計(jì)算機(jī)程序的基本結(jié)構(gòu)


if語句


switch語句


舉例


早期的程序控制方法????goto的故事(3/3)

goto 無條件暫轉(zhuǎn)換升略;不建議使用,

Goto 之爭屡限;牛人站出來說句話:高德納



Goto語句的討論


Goto語句的討論


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ù)組的定義


變量不能做下標(biāo)


符號常量可以做下標(biāo)


宏定義可以做下標(biāo)


數(shù)組的初始化:

數(shù)組的初始化


元素都不賦值的情況


只初始化元素不寫下標(biāo)


為一部分元素賦值


只給第一個(gè)元素賦值


元素個(gè)數(shù)超過下標(biāo)


二維數(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ù)組


二維數(shù)組的存儲


二維數(shù)組的初始化


不寫小括號


不寫行的下標(biāo)


下標(biāo)或元素不全


初始化為0


使用下標(biāo)


三維數(shù)組的定義(3/5)

二維數(shù)組也可以看做由多個(gè)一維數(shù)組的集合孙乖;或多個(gè)二維數(shù)組的排列;

存儲:將三維數(shù)組切成二維數(shù)組來存儲,二維數(shù)組再拉成一維數(shù)組唯袄;

最好不要定義三維以上的數(shù)組弯屈,減少出錯(cuò)概率,提高程序可讀性恋拷;

三維數(shù)組


三維數(shù)組的存儲


數(shù)組的作用之用數(shù)組做統(tǒng)計(jì)(4/5)

數(shù)組的下標(biāo)與數(shù)據(jù)的對應(yīng)關(guān)系资厉,可以用來做整數(shù)的統(tǒng)計(jì);下標(biāo)特別有用蔬顾;

數(shù)組的作用


數(shù)組統(tǒng)計(jì)應(yīng)用1


數(shù)組統(tǒng)計(jì)應(yīng)用1


數(shù)組統(tǒng)計(jì)應(yīng)用2


數(shù)組統(tǒng)計(jì)應(yīng)用2


數(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ù)組統(tǒng)計(jì)應(yīng)用3


數(shù)組統(tǒng)計(jì)應(yīng)用3


數(shù)組統(tǒng)計(jì)應(yīng)用3


數(shù)組統(tǒng)計(jì)應(yīng)用3


數(shù)組統(tǒng)計(jì)應(yīng)用3



字符數(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é)束



課程結(jié)束

下次課程:

C程序設(shè)計(jì)進(jìn)階





參考資料:

程序設(shè)計(jì)與算法基礎(chǔ)

網(wǎng)易公開課計(jì)算機(jī)專業(yè)課程體系



短綆不汲深泉框往!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市闯捎,隨后出現(xiàn)的幾起案子椰弊,更是在濱河造成了極大的恐慌,老刑警劉巖瓤鼻,帶你破解...
    沈念sama閱讀 212,294評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秉版,死亡現(xiàn)場離奇詭異,居然都是意外死亡茬祷,警方通過查閱死者的電腦和手機(jī)清焕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,493評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人秸妥,你說我怎么就攤上這事滚停。” “怎么了粥惧?”我有些...
    開封第一講書人閱讀 157,790評論 0 348
  • 文/不壞的土叔 我叫張陵键畴,是天一觀的道長。 經(jīng)常有香客問我突雪,道長起惕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,595評論 1 284
  • 正文 為了忘掉前任咏删,我火速辦了婚禮惹想,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘督函。我一直安慰自己嘀粱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,718評論 6 386
  • 文/花漫 我一把揭開白布辰狡。 她就那樣靜靜地躺著草穆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪搓译。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,906評論 1 290
  • 那天锋喜,我揣著相機(jī)與錄音些己,去河邊找鬼。 笑死嘿般,一個(gè)胖子當(dāng)著我的面吹牛段标,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播炉奴,決...
    沈念sama閱讀 39,053評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼逼庞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瞻赶?” 一聲冷哼從身側(cè)響起赛糟,我...
    開封第一講書人閱讀 37,797評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎砸逊,沒想到半個(gè)月后璧南,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,250評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡师逸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,570評論 2 327
  • 正文 我和宋清朗相戀三年司倚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,711評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡动知,死狀恐怖皿伺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盒粮,我是刑警寧澤鸵鸥,帶...
    沈念sama閱讀 34,388評論 4 332
  • 正文 年R本政府宣布地熄,位于F島的核電站若厚,受9級特大地震影響裁蚁,放射性物質(zhì)發(fā)生泄漏痹届。R本人自食惡果不足惜蟆淀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,018評論 3 316
  • 文/蒙蒙 一形入、第九天 我趴在偏房一處隱蔽的房頂上張望穴墅。 院中可真熱鬧颤难,春花似錦爽室、人聲如沸汁讼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,796評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嘿架。三九已至,卻和暖如春啸箫,著一層夾襖步出監(jiān)牢的瞬間耸彪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,023評論 1 266
  • 我被黑心中介騙來泰國打工忘苛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蝉娜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,461評論 2 360
  • 正文 我出身青樓扎唾,卻偏偏與公主長得像召川,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子胸遇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,595評論 2 350

推薦閱讀更多精彩內(nèi)容