版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1章程序設(shè)計(jì)基礎(chǔ)2024/8/271《程序設(shè)計(jì)》課程《程序設(shè)計(jì)》教學(xué)目標(biāo)通過(guò)這門課程的學(xué)習(xí),掌握C語(yǔ)言的基本語(yǔ)法和基本結(jié)構(gòu),熟悉程序設(shè)計(jì)的基本原理和基本算法,熟悉使用C編程平臺(tái)和調(diào)試方法。教學(xué)方式課程講授上機(jī)實(shí)驗(yàn)和輔導(dǎo)本課程是一門理論與實(shí)踐緊密結(jié)合的實(shí)用技術(shù)課程,在講授知識(shí)的同時(shí),系統(tǒng)、全面磨礪學(xué)生運(yùn)用C語(yǔ)言編程解決問(wèn)題的能力。2024/8/272教材吳永輝,周娟。C語(yǔ)言程序設(shè)計(jì)。西安電子科技大學(xué)出版社。2024。ISBN:978-7-5606-7260-1。實(shí)驗(yàn)教材周娟,吳永輝《程序設(shè)計(jì)實(shí)踐入門》,機(jī)械工業(yè)出版社,2021。周娟,吳永輝。提升程式設(shè)計(jì)力|國(guó)際程式設(shè)計(jì)競(jìng)賽精選解題解析。碁峰。2022。2024/8/274第1章程序設(shè)計(jì)基礎(chǔ)1.1計(jì)算和計(jì)算機(jī)的發(fā)展:需求是發(fā)展之母1.2程序設(shè)計(jì)語(yǔ)言的綜述念1.3C語(yǔ)言基礎(chǔ)知識(shí)1.4C程序設(shè)計(jì)基礎(chǔ)知識(shí)2024/8/2751.1計(jì)算和計(jì)算機(jī)的發(fā)展:需求是發(fā)展之母社會(huì)發(fā)展對(duì)于計(jì)算的需求推動(dòng)了計(jì)算機(jī)和程序設(shè)計(jì)語(yǔ)言的發(fā)展;計(jì)算機(jī)和程序設(shè)計(jì)語(yǔ)言的發(fā)展又進(jìn)一步推動(dòng)的計(jì)算的發(fā)展,也產(chǎn)生了新的計(jì)算需求。歷史,并不僅僅是一系列事件的時(shí)間、地點(diǎn)、人物的羅列;對(duì)于歷史,我們要善于通過(guò)對(duì)一系列事件的表象進(jìn)行分析,看到推動(dòng)歷史發(fā)展的本質(zhì)。2024/8/276計(jì)算機(jī)的發(fā)展機(jī)械計(jì)算機(jī)電子計(jì)算機(jī)晶體管計(jì)算機(jī)中、小規(guī)模集成電路計(jì)算機(jī)大規(guī)模及超大規(guī)模集成電路計(jì)算機(jī)2024/8/277計(jì)算機(jī)簡(jiǎn)介:計(jì)算機(jī)和程序設(shè)計(jì)計(jì)算工具:手動(dòng)輔助計(jì)算裝置,如算盤(公元1200年前后)、計(jì)算尺==》機(jī)械計(jì)算機(jī)==》計(jì)算機(jī)計(jì)算機(jī)、程序設(shè)計(jì)、程序設(shè)計(jì)語(yǔ)言可以追溯到20世紀(jì)40年代中期。南宋:經(jīng)貿(mào)(外貿(mào))高度發(fā)達(dá)人類使用的計(jì)算工具隨著生產(chǎn)力的發(fā)展和社會(huì)的進(jìn)步,經(jīng)歷了從簡(jiǎn)單到復(fù)雜、由低級(jí)到高級(jí)發(fā)展的過(guò)程。2024/8/278機(jī)械計(jì)算機(jī)機(jī)械計(jì)算機(jī)(mechanicalcomputer):由杠桿、齒輪等機(jī)械部件而非電子部件構(gòu)成。1642年,19歲的法國(guó)數(shù)學(xué)家、哲學(xué)家布茨·帕斯卡(BlaisePascal),為了幫助在稅務(wù)局任職的父親完成繁重的計(jì)算工作,發(fā)明了世界上第一臺(tái)齒輪式機(jī)械計(jì)算機(jī):通過(guò)齒輪系統(tǒng)的聯(lián)動(dòng)來(lái)進(jìn)行加法和減法的運(yùn)算。
1640年,英國(guó)資產(chǎn)階級(jí)革命開(kāi)始。明朝末年2024/8/279電腦先驅(qū)查爾斯·巴貝奇(Charles
Babbage)1822年,英國(guó)人查爾斯·巴貝奇發(fā)現(xiàn)許多有關(guān)時(shí)間的計(jì)算設(shè)備在測(cè)量時(shí)(如天文圖、潮汐圖、航海圖),都存在臨界誤差,并且測(cè)量繁瑣。1823年得到政府的支持,1834年發(fā)明了分析機(jī)(現(xiàn)代計(jì)算機(jī)的前身)的原理,在只讀存儲(chǔ)器(穿孔卡片)中存儲(chǔ)程序和數(shù)據(jù)。但因1842年政府拒絕進(jìn)一步支持他的工作,巴貝奇的計(jì)算器未能完成。西方工業(yè)革命第一次鴉片戰(zhàn)爭(zhēng)前夕2024/8/2710第一個(gè)程序員:詩(shī)人拜倫之女艾達(dá)(Ada)她為巴貝奇分析機(jī)編寫(xiě)了一組求解伯努利數(shù)列的計(jì)算指令,這套指令也是人類歷史上第一套計(jì)算機(jī)算法程序,它將硬件和軟件分離,第一次出現(xiàn)程序的概念。艾達(dá)和第一個(gè)計(jì)算機(jī)程序:隨著西方國(guó)家進(jìn)入工業(yè)時(shí)代,由杠桿、齒輪等機(jī)械部件構(gòu)成的機(jī)械計(jì)算機(jī)被廣泛地研發(fā)和運(yùn)用1890年,美國(guó)人口普查部門希望能得到一臺(tái)機(jī)器幫助提高普查效率。赫爾曼·何樂(lè)禮(HermanHollerith)(后來(lái)他的公司發(fā)展成了IBM公司)借鑒Babbage的發(fā)明,用穿孔卡片存儲(chǔ)數(shù)據(jù),并設(shè)計(jì)了機(jī)器。結(jié)果僅用6周就得出了準(zhǔn)確的人口統(tǒng)計(jì)數(shù)據(jù)(如果用人工方法,大概要花10年時(shí)間)。機(jī)械計(jì)算機(jī)在二戰(zhàn)期間達(dá)到頂峰,在1960年代使用,在1970年代逐漸消失,到1980年代絕跡。晚清2024/8/2712電子計(jì)算機(jī):?jiǎn)柺涝谝詸C(jī)械方式運(yùn)行的計(jì)算器誕生百年之后,隨著電子技術(shù)的突飛猛進(jìn),計(jì)算機(jī)開(kāi)始了真正意義上的由機(jī)械向電子時(shí)代的過(guò)渡,電子器件逐漸演變成為計(jì)算機(jī)的主體,而機(jī)械部件則漸漸處于從屬位置。二者地位發(fā)生轉(zhuǎn)化的時(shí)候,計(jì)算機(jī)也正式開(kāi)始了由量到質(zhì)的轉(zhuǎn)變,由此導(dǎo)致電子計(jì)算機(jī)正式問(wèn)世。1904年,美國(guó)人LeeDeForest發(fā)明電子管,為電子計(jì)算機(jī)的發(fā)展奠定了基礎(chǔ)。1937年,英國(guó)科學(xué)家艾蘭·圖靈(AlanTuring)提出了一種理想的計(jì)算機(jī)器的數(shù)學(xué)模型——圖靈機(jī),發(fā)展了可計(jì)算性理論?,F(xiàn)在該理論不僅是計(jì)算機(jī)科學(xué)的基礎(chǔ),也是數(shù)學(xué)的基礎(chǔ)之一,為紀(jì)念圖靈而設(shè)立的圖靈獎(jiǎng)已成為計(jì)算機(jī)界的諾貝爾獎(jiǎng)。2024/8/2713艾蘭·圖靈(AllanTuring)1912年生于英國(guó)倫敦1931年進(jìn)入劍橋大學(xué)國(guó)王學(xué)院學(xué)習(xí)1937年發(fā)表論文“OncomputablenumberswithanapplicationtotheEntscheidungsproblem”,提出圖靈機(jī)“TuringMachine”模型(理想的計(jì)算機(jī)器的數(shù)學(xué)模型)1938年在普林斯頓大學(xué)獲博士學(xué)位1939年服役,從事密碼破譯研究1945-1948年在英國(guó)國(guó)家物理實(shí)驗(yàn)室,研制ACE計(jì)算機(jī)此后,加盟曼切斯特大學(xué)皇家學(xué)會(huì)計(jì)算實(shí)驗(yàn)室,此期間發(fā)表著名論文“ComputingMachineandIntelligence”1951年被選為英國(guó)皇家學(xué)會(huì)院士1954年自殺身亡2024/8/27142024/8/2715ACMTuringAward(圖靈獎(jiǎng))美國(guó)計(jì)算機(jī)協(xié)會(huì)(AssociationforComputingMachinery)于1966年設(shè)立的第一個(gè)獎(jiǎng)項(xiàng)宗旨:獎(jiǎng)勵(lì)在計(jì)算機(jī)科學(xué)研究中做出創(chuàng)造性貢獻(xiàn)、推動(dòng)計(jì)算機(jī)科學(xué)技術(shù)發(fā)展的杰出計(jì)算機(jī)科學(xué)家獎(jiǎng)金額:最初2萬(wàn)美金;1989年增至2萬(wàn)5千美金2024/8/2716二戰(zhàn)時(shí)期,美國(guó)進(jìn)行武器研制,彈道計(jì)算和原子彈研制的計(jì)算量非常龐大。為了解決這一問(wèn)題,1943年,在賓夕法尼亞大學(xué),開(kāi)始研制電子計(jì)算機(jī),主要參加人員:JohnW.Mauchly(莫奇萊)J.PresperEckert(??颂兀㎎ohnVonNeumann(馮·諾依曼)電子計(jì)算機(jī)(1946~1956)1946年,第一臺(tái)真正意義上的數(shù)字電子計(jì)算機(jī)ENIAC(埃尼阿克,ElectronicNumericalIntegratorAndComputer)誕生,開(kāi)始研制于1943年,完成于1946年,負(fù)責(zé)人是JohnW.Mauchly和J.PresperEckert,重30噸,用了18000個(gè)電子管,功率25千瓦,主要用于計(jì)算彈道和氫彈的研制。其中重要參與者美籍匈牙利科學(xué)家約翰·馮·諾依曼(John·von·Neumann)提出的“在電子計(jì)算機(jī)中存儲(chǔ)程序和程序控制”的概念,確立了現(xiàn)代計(jì)算機(jī)的基本結(jié)構(gòu),該結(jié)構(gòu)一直沿用至今,所以他也被譽(yù)為“現(xiàn)代計(jì)算機(jī)之父”。2024/8/2718馮
諾依曼體系構(gòu)架由馮·諾依曼等人在1946年6月在一篇報(bào)告“FirstDraftofaReportontheEDVAC
”中首先明確提出來(lái)的,其實(shí)這是基于J.PresperEckert和JohnWillianMauchy在UPen開(kāi)發(fā)的ENIAC計(jì)算機(jī)體系結(jié)構(gòu)。這種計(jì)算機(jī)體系結(jié)構(gòu)的特點(diǎn)可以簡(jiǎn)要地概括為以下幾點(diǎn):計(jì)算機(jī)(指硬件)應(yīng)由運(yùn)算器、控制器、存儲(chǔ)器、輸入設(shè)備和輸出設(shè)備5大基本部件組成計(jì)算機(jī)內(nèi)部采用二進(jìn)制來(lái)表示指令和數(shù)據(jù)將編好的程序的原始數(shù)據(jù)先存入存儲(chǔ)器中,然后再啟動(dòng)計(jì)算機(jī)工作2024/8/27191956年5月,中國(guó)第一臺(tái)電子計(jì)算機(jī)——復(fù)旦601型電子積分機(jī)在復(fù)旦大學(xué)誕生(攝于復(fù)旦大學(xué)校史館)2024/8/2720在電子管計(jì)算機(jī)時(shí)代,程序設(shè)計(jì)語(yǔ)言是用二進(jìn)制代碼表示的機(jī)器語(yǔ)言,以及使用助記符來(lái)表示機(jī)器指令或操作碼的匯編語(yǔ)言。計(jì)算機(jī)能直接識(shí)別和執(zhí)行機(jī)器語(yǔ)言;匯編語(yǔ)言要通過(guò)匯編程序?qū)⒎?hào)翻譯成二進(jìn)制數(shù)的機(jī)器語(yǔ)言。二十世紀(jì)上半葉,出現(xiàn)了布爾代數(shù)(數(shù)學(xué))、圖靈機(jī)(計(jì)算模型)、馮諾依曼體系結(jié)構(gòu)(架構(gòu))、晶體管(器件)這四個(gè)現(xiàn)代計(jì)算技術(shù)的科學(xué)基礎(chǔ)。布爾代數(shù):描述程序和硬件如CPU的底層邏輯;圖靈機(jī):一種通用的計(jì)算模型,將復(fù)雜任務(wù)轉(zhuǎn)化為自動(dòng)計(jì)算、不需人工干預(yù)的自動(dòng)化過(guò)程;馮
諾依曼體系結(jié)構(gòu)(構(gòu)造計(jì)算機(jī)的三個(gè)基本原則):采用二進(jìn)制邏輯;程序存儲(chǔ)執(zhí)行;計(jì)算機(jī)由運(yùn)算器、控制器、存儲(chǔ)器、輸入設(shè)備、輸出設(shè)備這五個(gè)基本單元組成;晶體管:構(gòu)成基本的邏輯電路和存儲(chǔ)電路的半導(dǎo)體器件,是建造現(xiàn)代計(jì)算機(jī)之塔的“磚塊”?;谝陨峡茖W(xué)基礎(chǔ),計(jì)算技術(shù)得以高速發(fā)展,形成規(guī)模龐大的產(chǎn)業(yè)。晶體管計(jì)算機(jī)(1956~1964):產(chǎn)生電子管計(jì)算機(jī)已經(jīng)步入了現(xiàn)代計(jì)算機(jī)的范疇,但因其體積大、能耗高、故障多、價(jià)格貴,從而制約了它的普及和應(yīng)用。1948年,Bell實(shí)驗(yàn)室發(fā)明晶體管1950年,日本東京帝國(guó)大學(xué)的YoshiroNakamats發(fā)明了軟磁盤,其銷售權(quán)由IBM公司獲得。1953年,磁芯存儲(chǔ)器被開(kāi)發(fā)出來(lái)。1956年,美國(guó)貝爾實(shí)驗(yàn)室用晶體管代替電子管,制成了世界上第一臺(tái)全晶體管計(jì)算機(jī)Lepreachaun。2024/8/2723晶體管計(jì)算機(jī)(1956~1964):發(fā)展晶體管計(jì)算機(jī):主機(jī)采用晶體管等半導(dǎo)體器件,以磁鼓和磁盤為輔助存儲(chǔ)器,采用算法語(yǔ)言(高級(jí)語(yǔ)言)編程,開(kāi)始出現(xiàn)操作系統(tǒng)。1954年,IBM的JohnBackus和他的研究小組開(kāi)始開(kāi)發(fā)FORTRAN語(yǔ)言,1957年完成。這是一種適合科學(xué)研究使用的計(jì)算機(jī)高級(jí)語(yǔ)言。1959年,GraceMurrayHopper開(kāi)始開(kāi)發(fā)COBOL語(yǔ)言,完成于1961年。1960年,第一個(gè)結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言ALGOL推出。2024/8/2724中、小規(guī)模集成電路計(jì)算機(jī)(1964-1971)1958年JackKilby發(fā)明了集成電路(IntegratedCircuit,IC),它是一種把晶體管、三極管、電阻、電容、電感及布線都加工到一片小小的硅片上的電子器件,不久科學(xué)家們又把更多的電子元件集成到了單一的半導(dǎo)體芯片上。于是,計(jì)算機(jī)變得更小,功耗更低,速度更快。1965年,DouglasEnglebart提出鼠標(biāo)器的設(shè)想,但沒(méi)有進(jìn)一步研究,直到1983年才被蘋果電腦公司大量采用。1969年,ARPANet(AdvancedResearchProjectsAgencyNetwork)計(jì)劃開(kāi)始啟動(dòng),這是現(xiàn)代Internet的雛形。1971年完成。1967年,NiklausWirth開(kāi)始開(kāi)發(fā)PASCAL
語(yǔ)言,1971年完成。1970年,KenThomson和DennisRitchie開(kāi)始開(kāi)發(fā)UNIX操作系統(tǒng)。2024/8/2725大規(guī)模及超大規(guī)模集成電路計(jì)算機(jī)(1971年至今)計(jì)算機(jī)邏輯器件采用大規(guī)模集成電路(LargeScaleIntegration,LSI)和超大規(guī)模集成電路(VeryLargeScaleIntegration,VLSI)技術(shù),在硅半導(dǎo)體上集成了大量的電子元器件,集成度很高的半導(dǎo)體存儲(chǔ)器也取代了磁芯存儲(chǔ)器。同時(shí),操作系統(tǒng)不斷完善,各種應(yīng)用軟件也成為了現(xiàn)代工業(yè)的一部分。1972年,C語(yǔ)言開(kāi)發(fā)完成。其主要設(shè)計(jì)者是UNIX系統(tǒng)的開(kāi)發(fā)者之一DennisRitche。1985年11月,MicrosoftWindows發(fā)布。1989年,歐洲物理粒子研究所的TimBerners-Lee創(chuàng)立WorldWideWeb雛形。通過(guò)超文本鏈接,新手也可以輕松上網(wǎng)瀏覽。1993年,Internet開(kāi)始商業(yè)化運(yùn)行。1994年,Netscape1.0瀏覽器發(fā)布。2024/8/2726計(jì)算機(jī)系統(tǒng)組成2024/8/2727計(jì)算機(jī)系統(tǒng)的硬件組成2024/8/27282024/8/27291.2程序設(shè)計(jì)語(yǔ)言的綜述指令(Instruction)可以被計(jì)算機(jī)理解并執(zhí)行的基本操作命令。程序(Program)供計(jì)算機(jī)執(zhí)行后,能完成特定功能的指令序列(Instructionssequence)程序=計(jì)算機(jī)指令序列軟件(Software)與計(jì)算機(jī)系統(tǒng)操作有關(guān)的計(jì)算機(jī)程序、規(guī)程、規(guī)則,以及可能有的文件、文檔及數(shù)據(jù)。2024/8/2730程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)語(yǔ)言是人與計(jì)算機(jī)對(duì)話的工具,是用來(lái)書(shū)寫(xiě)計(jì)算機(jī)程序的語(yǔ)言。2024/8/2731程序設(shè)計(jì)語(yǔ)言高級(jí)語(yǔ)言High-levelLanguage機(jī)器語(yǔ)言Machinelanguage匯編語(yǔ)言AssemblyLanguage自然語(yǔ)言NaturalLanguage2024/8/2732匯編語(yǔ)言匯編語(yǔ)言:用類英語(yǔ)單詞縮寫(xiě)的符號(hào)指令代替機(jī)器語(yǔ)言的二進(jìn)制代碼指令匯編程序用匯編語(yǔ)言編寫(xiě)的程序在計(jì)算機(jī)上執(zhí)行,先要將用匯編語(yǔ)言編寫(xiě)的源程序轉(zhuǎn)換成機(jī)器語(yǔ)言程序。稱完成這個(gè)轉(zhuǎn)換功能的程序?yàn)椤皡R編程序“(assembler)2024/8/2733高級(jí)程序主要由語(yǔ)句(statements)構(gòu)成,語(yǔ)句是要計(jì)算機(jī)完成任務(wù)的命令有統(tǒng)一的語(yǔ)法,獨(dú)立于具體機(jī)器,便于人們編碼,閱讀和理解用高級(jí)語(yǔ)言編寫(xiě)的程序(源程序)在計(jì)算機(jī)上執(zhí)行,先要由編譯器(也稱為編譯程序)將源程序轉(zhuǎn)換成機(jī)器語(yǔ)言程序既能方便地描述客觀對(duì)象,又能借助于編譯器轉(zhuǎn)換為計(jì)算機(jī)所接受的語(yǔ)言最接近自然語(yǔ)言的程序設(shè)計(jì)語(yǔ)言2024/8/2734機(jī)器語(yǔ)言/匯編語(yǔ)言/高級(jí)語(yǔ)言機(jī)器語(yǔ)言計(jì)算機(jī)匯編程序解釋器編譯器高級(jí)語(yǔ)言匯編語(yǔ)言AssemblerInterpreterCompiler高級(jí)語(yǔ)言的發(fā)展2024/8/27352024/8/2736非結(jié)構(gòu)化語(yǔ)言非結(jié)構(gòu)化語(yǔ)言是高級(jí)語(yǔ)言發(fā)展的第一階段,編程只要符合語(yǔ)法規(guī)則即可;程序的結(jié)構(gòu)性比較差,邏輯也較為復(fù)雜,由此導(dǎo)致程序變得難以閱讀和維護(hù)。COBOL、FORTRAN2024/8/2737結(jié)構(gòu)化語(yǔ)言為了解決非結(jié)構(gòu)化語(yǔ)言存在的問(wèn)題,提出結(jié)構(gòu)化程序設(shè)計(jì)方法:自頂向下、逐步求精、功能分解程序由順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)構(gòu)成,這些結(jié)構(gòu)可以嵌套,并且程序中的流程不允許隨意跳轉(zhuǎn)。用結(jié)構(gòu)化程序設(shè)計(jì)方法編寫(xiě)的程序結(jié)構(gòu)清晰,易于閱讀和維護(hù)。PASCAL、C2024/8/2738面向?qū)ο蟮恼Z(yǔ)言目的是克服面向過(guò)程語(yǔ)言過(guò)分強(qiáng)調(diào)求解過(guò)程細(xì)節(jié),程序不易復(fù)用的缺點(diǎn)引入了對(duì)象、消息、類、繼承、封裝、抽象、多態(tài)性等機(jī)制和概念用面向?qū)ο笳Z(yǔ)言進(jìn)行程序設(shè)計(jì)時(shí),以問(wèn)題中的對(duì)象為基礎(chǔ),將具有類似性質(zhì)的對(duì)象抽象成類,利用繼承機(jī)制,對(duì)差異進(jìn)行程序設(shè)計(jì)C++,Java等2024/8/2739結(jié)構(gòu)化程序設(shè)計(jì)方法程序結(jié)構(gòu)自頂向下(top-down)模塊化設(shè)計(jì)方法模塊算法的逐步求精(stepwiserefinement)設(shè)計(jì)方法用結(jié)構(gòu)化控制結(jié)構(gòu)描述算法和編寫(xiě)程序自頂向下、逐步求精、功能分解2024/8/2740自頂向下模塊化設(shè)計(jì)方法核心思想是限制程序設(shè)計(jì)的復(fù)雜性把大程序按功能劃分成一些較小的部分,每個(gè)完成獨(dú)立功能分解模塊的原則是簡(jiǎn)單性、獨(dú)立性和完整性模塊化設(shè)計(jì)方法使程序具有較高的可靠性和靈活性,同時(shí)便于程序的測(cè)試和維護(hù)2024/8/2741自頂向下模塊化設(shè)計(jì)方法(續(xù))在用模塊化方法劃分程序模塊時(shí),應(yīng)盡量讓模塊具有如下良好性質(zhì):模塊具有單一入口和單一出口:輸入==處理==輸出模塊不宜過(guò)大,模塊功能單一模塊的執(zhí)行不對(duì)環(huán)境產(chǎn)生副作用讓模塊與環(huán)境的聯(lián)系僅限于輸入和輸出參數(shù),模塊的內(nèi)部結(jié)構(gòu)與調(diào)用它的程序無(wú)關(guān)盡量用模塊的名字調(diào)用模塊1.3C語(yǔ)言基礎(chǔ)知識(shí)C語(yǔ)言是當(dāng)前使得的最多的程序設(shè)計(jì)語(yǔ)言(C、C++、Java、Python)中的一種C語(yǔ)言簡(jiǎn)史C語(yǔ)言特點(diǎn)C語(yǔ)言詞匯、數(shù)據(jù)類型、常量和變量2024/8/27422024/8/2743C語(yǔ)言之父:丹尼斯·里奇(DennisM.Ritchie)HarvardUniversity獲學(xué)士和博士學(xué)位1967年加入Bell實(shí)驗(yàn)室工作至今1972年發(fā)明C語(yǔ)言1978年,BrianW.Kernighan和DennisM.Ritchie合著《TheCProgrammingLanguage》Turing獎(jiǎng)(1983)和IEEE先驅(qū)獎(jiǎng)(1992)獲得者、美國(guó)工程院院士2024/8/27441.3.1C語(yǔ)言簡(jiǎn)史1960年出現(xiàn)的ALGOL60是一種面向問(wèn)題的高級(jí)語(yǔ)言,它離硬件比較遠(yuǎn),不宜用來(lái)編寫(xiě)系統(tǒng)程序1963年英國(guó)的劍橋大學(xué)推出了CPL(combinedprogramminglanguage)語(yǔ)言。CPL語(yǔ)言在ALGOL60的基礎(chǔ)上接近硬件一些,但規(guī)模比較大,難以實(shí)現(xiàn)1967年英國(guó)劍橋大學(xué)的MartinRichards對(duì)CPL語(yǔ)言做了簡(jiǎn)化,推出了BCPL(basiccombinedprogramminglanguage)語(yǔ)言2024/8/2745C語(yǔ)言發(fā)展史(續(xù))1970年美國(guó)貝爾實(shí)驗(yàn)室的KenThompson以BCPL語(yǔ)言為基礎(chǔ),設(shè)計(jì)出了簡(jiǎn)單且很接近硬件的B語(yǔ)言(取BCPL的第一個(gè)字母),并用B語(yǔ)言寫(xiě)了第一個(gè)UNIX操作系統(tǒng)。但B語(yǔ)言過(guò)于簡(jiǎn)單,功能有限1972年至1973年間,貝爾實(shí)驗(yàn)室的D.M.Ritchie在B語(yǔ)言的基礎(chǔ)上設(shè)計(jì)出了C語(yǔ)言(取BCPL的第二個(gè)字母)。C語(yǔ)言既保持了BCPL和B語(yǔ)言的優(yōu)點(diǎn)(精練,接近硬件),又克服了它們的缺點(diǎn)(過(guò)于簡(jiǎn)單,數(shù)據(jù)無(wú)類型等)。1973年,K.Thompson和D.M.Ritchie兩人合作把UNIX的90%以上用C改寫(xiě),即UNIX第5版2024/8/2746C語(yǔ)言發(fā)展史(續(xù))1983年,美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)(ANSI)根據(jù)C語(yǔ)言問(wèn)世以來(lái)各種版本對(duì)C的發(fā)展和擴(kuò)充,制定了新的標(biāo)準(zhǔn),稱為ANSIC1987年,ANSI又公布了新標(biāo)準(zhǔn)—87ANSIC1990年,國(guó)際標(biāo)準(zhǔn)化組織ISO(InternationalStandardOrganization)接受87ANSIC為ISOC的標(biāo)準(zhǔn)(ISO9899—1990)2024/8/27471.3.2C語(yǔ)言特點(diǎn)一個(gè)只輸出一行信息的C程序#include<stdio.h>voidmain()/*主函數(shù)*/{
printf("Thisbookis<ProgrammingwithCandc++languages>.\n");}2024/8/2748C程序特點(diǎn)一個(gè)C程序有一個(gè)名為main的主函數(shù)主函數(shù)前的關(guān)鍵字void表示該函數(shù)不返回結(jié)果在函數(shù)名之后要有一對(duì)圓括號(hào),里面定義參數(shù)函數(shù)體用花括號(hào)“{}”括住?;ɡㄌ?hào)可以用來(lái)括起任何一組C代碼,從而構(gòu)成復(fù)合語(yǔ)句或分程序簡(jiǎn)單C語(yǔ)句之后有一個(gè)分號(hào)“;”程序中的“/*…*/”表示程序的注釋部分。注釋便于人閱讀程序,對(duì)程序編譯和運(yùn)行都沒(méi)有作用#include<stdio.h>是編譯預(yù)處理命令行,指明有關(guān)C的輸入和輸出標(biāo)準(zhǔn)函數(shù)也將是程序的一部分2024/8/2749【例】讀入兩個(gè)整數(shù),輸出它們的和/*1*/#include<stdio.h>/*2*/voidmain()/*3*/{/*變量定義部分*//*4*/
intx,y,sum;/*定義x,y,sum*//*5*/
/*以下為語(yǔ)句序列*//*6*/
printf("Inputxandy\n");/*提示輸入數(shù)據(jù)*//*7*/
scanf("%d%d",&x,&y);/*輸入x和y的值*//*8*/
sum=x+y;/*完成x+y的計(jì)算,求sum=x+y*//*9*/printf("x+y=%d\n",sum);/*輸出結(jié)果*//*10*/}2024/8/2750【例】利用公式:C=(5/9)(F-32)輸出F氏溫度與C氏溫度對(duì)照表,設(shè)已知F氏溫度取0、20、…、200。#include<stdio.h>voidmain(){floatf,c;/*變量定義*/
intlower,upper,step;lower=0;upper=200;step=20;f=lower;while(f<=upper){/*循環(huán)計(jì)算*/
c=5.0/9.0*(f-32.0);printf(“%3.0f%6.1f\n”,f,c);f=f+step;}}2024/8/2751【例】輸入兩個(gè)實(shí)數(shù),輸出它們中的小的數(shù)#include<stdio.h>floatmin(floata,floatb){floattemp;/*函數(shù)使用的變量的定義*/
if(a<b)temp=a;elsetemp=b; returntemp;/*返回temp到調(diào)用min()函數(shù)處*/}voidmain(){floatx,y,c;/*變量定義*/printf(“輸入x和y.\n");scanf("%f%f",&x,&y);c=min(x,y);/*調(diào)用函數(shù)min()*/printf("MIN(%.2f,%.2f)=%.2f\n",x,y,c);}C語(yǔ)言特點(diǎn)語(yǔ)言表達(dá)能力強(qiáng)具有數(shù)據(jù)類型的構(gòu)造能力和結(jié)構(gòu)化的程序控制結(jié)構(gòu)語(yǔ)言簡(jiǎn)潔、緊湊、使用靈活方便能使編譯程序產(chǎn)生執(zhí)行效率較高的代碼用C語(yǔ)言可編寫(xiě)移植性較好的程序自由度太大2024/8/27531.3.3C語(yǔ)言詞匯、數(shù)據(jù)類型、常量和變量C語(yǔ)言詞匯C語(yǔ)言數(shù)據(jù)類型常量和變量2024/8/2754C語(yǔ)言詞匯基本符號(hào)數(shù)字10個(gè)(0~9)英文字母大、小寫(xiě)各26個(gè)(A~Z,a~z)下線字符“_”其它構(gòu)成特殊符號(hào)的字符集基本詞匯字面形式常量特殊符號(hào)(運(yùn)算符)關(guān)鍵字標(biāo)識(shí)符(命名數(shù)據(jù)對(duì)象)2024/8/2755關(guān)鍵詞(Keyword)autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedstaticstructswitchtypedefunionunsignedvoidvolatilewhile2024/8/2756關(guān)鍵詞(續(xù))下面幾個(gè)雖不屬于關(guān)鍵字,但建議把它們看作關(guān)鍵字,不要在程序中隨便使用。它們用在C程序的預(yù)處理命令行中defineundefincludeifdefifndefendiflineelif2024/8/2757標(biāo)識(shí)符(Identifier)作用:用來(lái)標(biāo)識(shí)變量、常量、類型、函數(shù)、語(yǔ)句等程序?qū)ο?,C語(yǔ)言用標(biāo)識(shí)符給它們命名命名規(guī)則:在C語(yǔ)言中,一個(gè)合理的標(biāo)識(shí)符由英文字母或下線符開(kāi)頭,后跟由字母、下線符、數(shù)字符組成的字符序列。一般以下線符開(kāi)頭的標(biāo)識(shí)符作內(nèi)部使用2024/8/2758標(biāo)識(shí)符(續(xù))命名要求:標(biāo)識(shí)符作為程序成分對(duì)象的名稱,為了便于聯(lián)想和記憶,建議使用能反映該對(duì)象意義的標(biāo)識(shí)符限制:注意不同C系統(tǒng)對(duì)標(biāo)識(shí)符的有效字符個(gè)數(shù)有不同的規(guī)定。對(duì)于限制標(biāo)識(shí)符8個(gè)有效字符的系統(tǒng)來(lái)說(shuō),兩個(gè)超過(guò)8個(gè)字符的不同標(biāo)識(shí)符,當(dāng)前8個(gè)字符依次相同時(shí),系統(tǒng)就認(rèn)為它們是同一個(gè)標(biāo)識(shí)符2024/8/2759C語(yǔ)言數(shù)據(jù)類型三種數(shù)據(jù)類型基本數(shù)據(jù)類型、指針類型、復(fù)合數(shù)據(jù)類型基本數(shù)據(jù)類型:三種整型(short,int,long)實(shí)型(float,double,longdouble)字符型(char)2024/8/2760C語(yǔ)言數(shù)據(jù)類型(續(xù))復(fù)合數(shù)據(jù)類型數(shù)組、結(jié)構(gòu)、聯(lián)合和枚舉指針類型指針類型直接賦予數(shù)據(jù)對(duì)象在內(nèi)存中的地址2024/8/2761常量(Constant)在程序運(yùn)行過(guò)程中,其值不能改變或不允許改變的數(shù)據(jù)對(duì)象常量按值的表示形式區(qū)分它的類型整型常量:15浮點(diǎn)型常量:5.0字符型常量:’a’指針常量:NULL字符串常量:”ABC”2024/8/2762常量(續(xù))可用宏定義給常量命名其一般形式是
#define標(biāo)識(shí)符字符列如:#definePI3.141592024/8/2763變量(Variable)在程序運(yùn)行過(guò)程中,其值可以改變的數(shù)據(jù)對(duì)象變量在內(nèi)存中占據(jù)一定的存貯單元,存放變量的值與變量有關(guān)的概念有:變量名;變量數(shù)據(jù)類型;變量在程序中的有效作用范圍;變量在程序執(zhí)行期間的存在時(shí)間;等等2024/8/2764變量(續(xù))程序通過(guò)變量定義引入變量,變量定義的一般形式:
類型變量名列表;其中,變量名列表由一個(gè)或多個(gè)變量名組成。例如:inti,j,sum;/*定義三個(gè)int型變量*/intindex=100,big_int=100002024/8/27651.3.4C程序開(kāi)發(fā)環(huán)境基礎(chǔ)知識(shí)C程序從開(kāi)發(fā)到運(yùn)行大致要經(jīng)歷六個(gè)階段編輯(Edit)預(yù)處理(Pre-process)編繹(Compile)連接(Link)加載(Load)執(zhí)行(Execute)2024/8/2766編輯、預(yù)處理與編譯編輯程序員用系統(tǒng)環(huán)境提供的編輯器編輯源程序,產(chǎn)生一個(gè)源程序文件.c或.h
預(yù)處理編譯前,C編繹器先自動(dòng)調(diào)用預(yù)處理程序,對(duì)源程序文件作文字轉(zhuǎn)換,產(chǎn)生一個(gè)新的內(nèi)部程序代碼編譯若編譯過(guò)程中發(fā)現(xiàn)程序有錯(cuò)誤,則輸出錯(cuò)誤的詳細(xì)信息;對(duì)正確的源程序產(chǎn)生機(jī)器語(yǔ)言程序,稱為源程序的目的代碼2024/8/2767連接、加載與執(zhí)行連接連接程序?qū)⒛康拇a和一些庫(kù)函數(shù)的目的代碼連接起來(lái),產(chǎn)生計(jì)算機(jī)可直接執(zhí)行的程序映象文件靜態(tài)連接vs.動(dòng)態(tài)連接加載將要執(zhí)行的程序裝入內(nèi)存執(zhí)行裝入內(nèi)存的程序在計(jì)算機(jī)的操作系統(tǒng)控制下執(zhí)行DevC++Dev-C++(或者叫做Dev-Cpp)是Windows環(huán)境下的一個(gè)輕量級(jí)C/C++集成開(kāi)發(fā)環(huán)境(IntegratedDevelopmentEnvironment,IDE,用于提供程序開(kāi)發(fā)環(huán)境的應(yīng)用程序,一般包括代碼編輯器、編譯器、調(diào)試器和圖形用戶界面等工具)。自由軟件,遵守GPL許可協(xié)議分發(fā)源代碼。集合了功能強(qiáng)大的源碼編輯器、MingW64/TDM-GCC編譯器、GDB調(diào)試器和AStyle格式整理器等眾多自由軟件適合于在教學(xué)中供C/C++語(yǔ)言初學(xué)者使用非商業(yè)級(jí)普通開(kāi)發(fā)者使用DevC++下載C語(yǔ)言、C++語(yǔ)言的編譯器有很多,初學(xué)者可以使用簡(jiǎn)單的BloodshedDev-C++,它是一個(gè)跨平臺(tái)的編譯器,可以到網(wǎng)上下載然后安裝。DevC++5.11簡(jiǎn)體中文版下載地址:官方下載:/projects/orwelldevcpp/百度網(wǎng)盤:/s/1mhHDjO8
提取密碼:mken
DevC++安裝DevC++下載完成后會(huì)得到一個(gè)安裝包(.exe程序),雙擊該文件即可開(kāi)始安裝。1)首先加載安裝程序(只需要幾十秒)2)開(kāi)始安裝:DevC++支持多國(guó)語(yǔ)言,包括簡(jiǎn)體中文,但是要等到安裝完成以后才能設(shè)置,在安裝過(guò)程中不能使用簡(jiǎn)體中文,所以這里我們選擇英文(English)。3)同意DevC++的各項(xiàng)條款4)選擇要安裝的組件:選擇“Full”,全部安裝。5)選擇安裝路徑:可以將DevC++安裝在任意位置,但是路徑中最好不要包含中文。6)等待安裝7)安裝完成配置DevC++首次使用DevC++還需要簡(jiǎn)單的配置,包括設(shè)置語(yǔ)言、字體、和主題風(fēng)格。1)第一次啟動(dòng)DevC++后,提示選擇語(yǔ)言(這里選擇簡(jiǎn)體中文)。2)選擇字體和主題風(fēng)格(這里保持默認(rèn))。3)提示設(shè)置成功。點(diǎn)擊“OK”按鈕,進(jìn)入DevC++,就可以編寫(xiě)代碼了。Dev-C++操作示范1)運(yùn)行Dev-C++,單擊工具欄上新建按鈕,新建一個(gè)源程序。2)輸入C語(yǔ)言源代碼,如下圖所示,每個(gè)單詞和字符會(huì)呈現(xiàn)不同的顏色。一種顏色代表一個(gè)類別的符號(hào),這樣閱讀起來(lái)十分清晰。3)單擊工具欄中保存按鈕(或快捷鍵Ctrl+S),在對(duì)話框中輸入文名1-1,然后保存。4)單擊編譯(或快捷鍵F9),可以看到屏幕下方出現(xiàn):表示編譯成功了,也有些版本會(huì)出現(xiàn)一個(gè)CompileProgress,里面的Status顯示為Done,表示編譯成功了。5)單擊工具欄的運(yùn)行按鈕(或快捷鍵F10),程序就運(yùn)行了,這里你需要從鍵盤輸入“1”,再輸入一個(gè)空格,再輸入“2”,再按回車Enter鍵,就可以看到上面的結(jié)果3了。1.4C程序設(shè)計(jì)基礎(chǔ)知識(shí)存儲(chǔ)和二進(jìn)制算法+數(shù)據(jù)結(jié)構(gòu)=程序編譯操作系統(tǒng)存儲(chǔ)和二進(jìn)制信息處理的基本單位:“比特”其英文為“bit”,它是binarydigit的縮寫(xiě),中文譯為“二進(jìn)制數(shù)字”或“二進(jìn)位”,一般簡(jiǎn)稱為“位”,用小寫(xiě)字母“b”表示比特只有兩種狀態(tài):0或1,它們不分大小,是組成數(shù)字信息的最小單位。2024/8/2784存儲(chǔ)的有關(guān)術(shù)語(yǔ)8位二進(jìn)制數(shù)表示一個(gè)字節(jié)英文用Byte表示,簡(jiǎn)寫(xiě)為B字節(jié)是計(jì)算機(jī)中用來(lái)表示存儲(chǔ)空間大小的最基本的容量單位千字節(jié)(KB)、兆字節(jié)(MB)、十億字節(jié)(GB),換算關(guān)系:B:1B=8bitKB:1KB=210字節(jié)=1024B(千字節(jié))MB:1MB=220字節(jié)=1024KB(兆字節(jié))GB:1GB=230字節(jié)=1024MB(吉字節(jié)、千兆字節(jié))TB:1TB=240字節(jié)=1024GB(太字節(jié)、兆兆字節(jié))2024/8/2785二進(jìn)制數(shù)十進(jìn)制數(shù)轉(zhuǎn)二進(jìn)制數(shù),采用除以2取余的方法,例如,求14的二進(jìn)制數(shù),14
2=7余0;7
2=3余1;3
2=1余1;1
2=0余1;將余數(shù)從最后的1開(kāi)始,從后向前倒序?qū)?,就?4的二進(jìn)制數(shù):1110。二進(jìn)制數(shù)轉(zhuǎn)十進(jìn)制數(shù),從右往左依次用二進(jìn)制位上的數(shù)字乘以2的n次冪的和(n大于等于0),例如,二進(jìn)制數(shù)1110轉(zhuǎn)十進(jìn)制數(shù),1
23+1
22+1
21+0
20=8+4+2=14。算法+數(shù)據(jù)結(jié)構(gòu)=程序“算法+數(shù)據(jù)結(jié)構(gòu)=程序”,1984年圖靈獎(jiǎng)獲得者NiklausWirth提出的著名公式概括了程序設(shè)計(jì)的知識(shí)體系,也是計(jì)算機(jī)學(xué)科知識(shí)體系的核心部分。2024/8/2787NiklausWirth(1934~2024)1959年獲ETH(蘇黎世聯(lián)邦理工學(xué)院,Eidgen?ssischeTechni
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度高級(jí)轎車買賣與維修服務(wù)合同3篇
- 小學(xué)文言文教學(xué)的教師培訓(xùn)與能力提升
- 學(xué)校運(yùn)動(dòng)場(chǎng)館的衛(wèi)生管理規(guī)定與執(zhí)行
- 教育技術(shù)助力學(xué)校體育教育發(fā)展
- 基于科學(xué)研究的小學(xué)科學(xué)實(shí)驗(yàn)教學(xué)的實(shí)踐與反思
- 教育體系中的健康飲食習(xí)慣培養(yǎng)
- 學(xué)校品牌的國(guó)際傳播策略研究
- 小米公司營(yíng)銷策略的未來(lái)趨勢(shì)預(yù)測(cè)
- 第11課《 變廢為寶有妙招》 減少垃圾 變廢為寶 說(shuō)課稿-2024-2025學(xué)年道德與法治四年級(jí)上冊(cè)統(tǒng)編版
- 2025年房地產(chǎn)開(kāi)發(fā)項(xiàng)目借款協(xié)議書(shū)標(biāo)準(zhǔn)版2篇
- TSDPIA 05-2022 寵物貓砂通用技術(shù)規(guī)范
- 驗(yàn)貨報(bào)告范本(英文版)
- 理想氣體熱力過(guò)程
- 2022度機(jī)構(gòu)編制重要事項(xiàng)的報(bào)告【3篇】
- GB/T 25772-2010滾動(dòng)軸承鐵路客車軸承
- GB 31247-2014電纜及光纜燃燒性能分級(jí)
- 專利評(píng)估報(bào)告模板
- 士卓曼種植系統(tǒng)外科植入流程課件
- 二年級(jí)下冊(cè)《一起長(zhǎng)大的玩具》導(dǎo)讀教學(xué)-一場(chǎng)別樣的童年之旅
- 二尖瓣狹窄并關(guān)閉不全共17張課件
- 心臟瓣膜病護(hù)理課件
評(píng)論
0/150
提交評(píng)論