




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
實訓項目簡介第5章計算機程序設計基礎第5章計算機程序設計基礎5.1算法5.2程序設計概述5.3程序設計基礎5.4程序設計方法5.5編譯原理第5章計算機程序設計基礎重點:算法的概念,算法的表示;程序的概念;程序設計語言的分類;C/C++程序設計基礎。難點:C/C++程序設計基礎;編譯過程。5.1算法5.1.1什么是算法5.1.2簡單的算法舉例5.1.3算法的特性5.1.4怎樣表示一個算法5.1.5算法的評價標準5.1.1什么是算法做個游戲
一個農夫帶著一條狼、一只山羊和一籃蔬菜過河,但只有一條小船,并且每次只能讓農夫帶一樣東西過河。農夫在場的情況下一切相安無事,一旦農夫不在,狼會吃羊,羊會吃蔬菜。問聰明的農夫如何解決過河問題。5.1.1什么是算法5.1.1什么是算法5.1.1什么是算法?5.1.1什么是算法解決方案方案1:先帶羊過去,空船回,再帶菜過去,帶羊回,然后帶狼過去,空船回,最后帶羊過去。方案2:先帶羊過去,空船回,再帶狼過去,帶羊回,然后帶菜過去,空船回,最后帶羊過去。
解決問題的關鍵是先帶羊,且第二次回來時也要帶羊回來。5.1.1什么是算法把大象放進冰箱里需要幾步?2000春晚小品《鐘點工》
1、把冰箱門打開2、把大象裝進去3、把冰箱門關上又如家中燒開水的過程分幾步?5.1.1什么是算法廣義地說,為解決一個問題而采取的方法和步驟,就稱為“算法”。例如:從家到學校,煎雞蛋等。注意:對同一個問題,可以有不同的解題方法和步驟。為了有效地進行解題,不僅需要保證算法正確,還要考慮算法的質量(算法分析),選擇合適的算法。5.1.1什么是算法計算機算法:一個能夠被計算機處理的,有限長的操作序列。計算機算法可分為兩大類別:數值運算算法數值運算的目的是求數值解。非數值運算算法非數值運算包括的面十分廣泛,最常見的是用于事務管理領域。算法是程序的靈魂,解決“做什么”和“怎么做”的問題。5.1.2簡單的算法舉例例1求1×2×3×4×5可以用最原始的方法進行:步驟1:先求1*2,得到結果2。步驟2:將步驟1得到的乘積2再乘以3,得到結果6。步驟3:將6再乘以4,得24。步驟4:將24再乘以5,得120。這就是最后的結果。例1求1×2×3×4×5×…×1000太繁瑣5.1.2簡單的算法舉例改進的算法:設變量p為被乘數變量i為乘數用循環算法求結果5.1.2簡單的算法舉例S1:使p=1,或寫成1pS2:使i=2,或寫成2iS3:使p與i相乘,乘積仍放在變量p中,可表示為:p*ipS4:使i的值加1,即i+1iS5:如果i不大于5,返回重新執行S3;否則,算法結束最后得到p的值就是
5!的值若是1000,求什么?5.1.2簡單的算法舉例S1:使p=1,或寫成1pS2:使i=2,或寫成2iS3:使p與i相乘,乘積仍放在變量p中,可表示為:p*ipS4:使i的值加1,即i+1iS5:如果i不大于5,返回重新執行S3;否則,算法結束最后得到p的值就是
5!的值若求1×3×5×7×9×11332211所求相當于i≦115.1.2簡單的算法舉例例2有50個學生,要求將成績在80分以上的學生的學號和成績輸出。用ni代表第i個學生學號,gi表示第i個學生成績S1:1iS2:如果gi≥80,
則輸出ni和gi,否則不輸出S3:i+1iS4:如果i≤50,返回到步驟S2,繼續執行,否則,算法結束5.1.2簡單的算法舉例例3判定2000—2500年中的每一年是否閏年,并將結果輸出。閏年的條件:
(1)能被4整除,但不能被100整除的年份都是閏年,如2008、2012、2048年
(2)能被400整除的年份是閏年,如2000年不符合這兩個條件的年份不是閏年例如2009、2100年5.1.2簡單的算法舉例設year為被檢測的年份。算法表示如下:S1:2000yearS2:若year不能被4整除,則輸出year的值和“不是閏年”。然后轉到S6S3:若year能被4整除,不能被100整除,則輸出year的值和“是閏年”。然后轉到S6S4:若year能被400整除,則輸出year的值和“是閏年”,然后轉到S6S5:其他情況輸出year的值和“不是閏年”S6:year+1yearS7:當year≤2500時,轉S2,否則停止year不能被4整除非閏年year被4整除,但不能被100整除閏年year被100整除,又能被400整除閏年其他非閏年逐漸縮小判斷的范圍5.1.2簡單的算法舉例5.1.3算法的特性一個有效算法應該具有以下特點:(1)
有窮性。一個算法應包含有限的操作步驟,而不能是無限的。(2)
確定性。算法中的每一個步驟都應當是確定的,而不應當是含糊的、模棱兩可的。(3)
有零個或多個輸入。所謂輸入是指在執行算法時需要從外界取得必要的信息。(4)
有一個或多個輸出。算法的目的是為了求解,“解”就是輸出。沒有輸出的算法是沒有意義的。(5)
有效性。算法中的每一個步驟都應當能有效地執行,并得到確定的結果。5.1.3算法的特性對于算法使用者來說:可以使用別人已設計好的現成算法和程序;只需根據已知算法的要求給予必要的輸入,就能得到輸出的結果;對使用者來說算法就像一個黑盒子。對于算法設計者來說:必須知道算法的細節。輸入3個數黑箱子3個數中最大數求3個數的最大數5.1.4怎樣表示一個算法1、用自然語言表示算法2、用流程圖表示算法3、用N-S流程圖表示算法4、用偽代碼表示算法5、用計算機語言表示算法5.1.2節介紹的算法是用自然語言表示的。用自然語言表示通俗易懂,但文字冗長,容易出現歧義性。用自然語言描述包含分支和循環的算法,不很方便。除了很簡單的問題外,一般不用自然語言。1、用自然語言表示算法2、用流程圖表示算法流程圖表示法:使用圖形符號描述解決問題的邏輯步驟,并顯示各步驟之間的相互關系。它使用圖的形式掩蓋了處理步驟的所有細節,只顯示從開始到結束的整個流程。用圖形表示算法,直觀形象,易于理解起止框輸入輸出框處理框判斷框流程線連接點注釋框x≧0Y……N……一個入口兩個出口2、用流程圖表示算法起止框輸入輸出框處理框判斷框流程線連接點注釋框③①②①③②③位置不夠防止交叉2、用流程圖表示算法例1將求1×2×3×4×5的
算法用流程圖表示。如果需要將最后結果輸出:1ti>5開始2it*iti+1i結束NY例1將求1×2×3×4×5的
算法用流程圖表示。如果需要將最后結果輸出:1t輸出ti>5開始2it*iti+1i結束NY2、用流程圖表示算法2、用流程圖表示算法
例2有50個學生,要求將成績在80分以上的學生的學號和成績輸出。將此問題的算法用流程圖表示。1ii>50開始i+1i結束NY輸入ni、gi1i開始gi≧80輸出ni、gii+1ii>50NYYN如果包括輸入數據部分①1ii>50開始i+1i結束NY輸入ni、gi1igi≧80輸出ni、gii+1ii>50NYYN如果包括輸入數據部分①①2、用流程圖表示算法例3判定2000—2500年中的每一年是否閏年,將結果輸出。將此問題的算法用流程圖表示。NYN開始2000yearyear不能被4整除year是閏年year不能被100整除year+1yearyear>2500結束Yyear不能被400整除year不是閏年year是閏年year不是閏年YNYN3、用N-S流程圖表示算法流程圖用流程線指出各框的執行順序,對流程線的使用沒有嚴格限制。使用者可以毫不受限制地使流程隨意地轉來轉去,使人難以理解算法的邏輯。歸納起來,算法的處理邏輯可以通過三種基本結構來表示。順序結構、選擇結構、循環結構N-S流程圖就是基于這三種基本結構的算法表示方法。3、用N-S流程圖表示算法(1)順序結構AB3、用N-S流程圖表示算法(2)選擇結構ABYpNAYpN3、用N-S流程圖表示算法(3)循環結構①當型循環結構whileAYp1NYx<5N0x輸出x的值x+1x輸出0,1,2,3,43、用N-S流程圖表示算法(3)循環結構②直到型循環結構untilAYp2NYx≧5N0x輸出x的值x+1x輸出1,2,3,4,53、用N-S流程圖表示算法以上三種基本結構,有以下共同特點:(1)只有一個入口(2)只有一個出口一個判斷框有兩個出口一個選擇結構只有一個出口(3)結構內的每一部分都有機會被執行到。也就是說,對每一個框來說,都應當有一條從入口到出口的路徑通過它(4)結構內不存在“死循環”3、用N-S流程圖表示算法N-S流程圖也稱盒圖。N-S流程圖用以下的流程圖符號:ABABYNpA當p1成立A直到p2成立順序結構選擇結構循環結構(當型)循環結構(直到型)3、用N-S流程圖表示算法例1將求5!的算法用N-S圖表示。直到i>51t輸出t2it*iti+1i3、用N-S流程圖表示算法
例2
將50名學生中成績高于80分者的學號和成績輸出。將此算法用N-S圖表示。直到i>501i1ii+1i輸入ni、gii+1i直到i>50gi≧80否是輸出ni,gi例3將判定閏年的算法用N-S圖表示。直到year>25002000yearyear+1year否是year%4為0否是輸出year非閏年year%100不為0year%400為0是否輸出year非閏年輸出year閏年輸出year閏年4、用偽代碼表示算法偽代碼是用介于自然語言和計算機語言之間的文字和符號來描述算法。用偽代碼寫算法并無固定的、嚴格的語法規則,可以用英文,也可以中英文混用。4、用偽代碼表示算法例
求5!。begin(算法開始)1
t2iwhilei≤5{t*iti+1i}printtend(算法結束)5、用計算機語言表示算法要完成一項工作,包括設計算法和實現算法兩個部分。設計算法的目的是為了實現算法。不僅要考慮如何設計一個算法,也要考慮如何實現一個算法。5.1.5算法的評價標準可以從以下幾個方面對算法進行評價:(1)算法的正確性:指算法能正確地完成所要解決的問題。就目前的研究來看,要想通過理論方式證明一個算法的正確性是非常復雜和困難的,一般采用測試的方法,基于算法編寫程序,然后對程序進行測試。針對所要解決的問題,選定一些有代表性的輸入數據,經程序執行后,查看輸出結果是否和預期結果一致,如果不一致,則說明程序中存在錯誤,應予以查找并改正。經過一定范圍的測試和程序改正,不再發現新的錯誤,程序可以交付使用,在使用過程中仍有可能發現錯誤,再繼續改正,這時的改正稱為程序維護。5.1.5算法的評價標準(2)算法的時間復雜度:指依據算法編寫出程序后在計算機上運行時所耗費的時間度量。算法的時間復雜度T(n)實際上表示:當問題規模n充分大時,該程序運行時間的一個數量級,用O表示。比較兩個算法的時間復雜度時,不是比較兩個算法對應程序的具體執行時間,這涉及編程語言、編程水平和計算機速度等多種因素,而是比較兩個算法相對于問題規模n所耗費時間的數量級。
eg:O(1),O(n),O(n2)5.1.5算法的評價標準(3)算法的空間復雜度:依據算法編寫出程序后在計算機上運行時所需內存空間大小的度量,也是和問題規模n有關的度量。(4)算法的可理解性:算法是為了人們的閱讀與交流,可理解性好的算法有利于人們的正確理解,有利于程序員據此編寫出正確的程序。5.2程序設計概述5.2.1程序的概念5.2.2程序設計語言5.2.3程序設計的任務5.2.1程序的概念程序:指為讓計算機完成特定的任務而設計的指令序列或語句序列。程序是程序設計人員用某種計算機語言編寫的、計算機能夠理解并執行的命令集合,能夠在目標計算機執行。程序是算法在計算機中的實現。程序設計是溝通算法與計算機的橋梁。使用計算機解決問題時先設計算法,再使用程序設計語言將算法描述為程序,最后由計算機執行程序。5.2.2程序設計語言程序設計語言(programminglanguage):是人類與計算機交流的工具。
是告訴計算機完成某項工作的語言,是一種讓人與計算機之間進行交流,讓計算機理解人的意圖并按照人的意圖完成工作的符號系統。程序設計語言分類按程序設計語言的發展階段可分為:1、機器語言2、匯編語言3、高級語言1、機器語言由計算機硬件系統可以識別的二進制指令組成的語言稱為機器語言。機器語言的特點:由二進制編碼指令構成的語言。是一種依附于機器硬件的語言。機器語言程序可以直接執行。機器語言指令的組成:操作碼+操作數
操作碼——用于說明指令的功能;操作數——用于說明參與操作的數據或數據所在單元的地址。操作碼和操作數都是以二進制的形式表示。1、機器語言【例1】機器語言程序示例。程序功能:把兩個內存單元中的數相加,并將結果存入另外一個單元。0001
010101101100
//把地址為01101100的內存單元中的數裝入
0101號寄存器0001
0110
01101101
//把地址為01101101的內存單元中的數裝入
0110號寄存器0101
000001010110
//把0101和0110寄存器中的數相加,結果存入
0000號寄存器0011000001101110
//把0000號寄存器中的數存入地址為01101110的內存單元中1、機器語言機器語言的優缺點缺點:指令難以準確記憶;程序容易寫錯;程序難以理解和修改。優點:可直接執行,運行效率高2、匯編語言用一些簡潔的英文字母符號串(助記符)來替代一個特定指令的二進制串,這種助記符語言稱為匯編語言。匯編語言的特點:由助記符指令構成的語言。也是一種依附于機器硬件的語言。匯編語言源程序需要翻譯后才能執行?!獏R編程序匯編語言指令的組成:助記符:表示指令的操作碼。(如MOV表示數據傳送操作,ADD表示加法操作等。)存儲單元/寄存器:表示操作數。2、匯編語言【例2】匯編語言程序示例。程序功能:把兩個內存單元中的數據相加,并將結果存入另外一個單元。MOVR5,X
//把內存單元X中的數裝入R5寄存器ADDR5,Y
//把R5中的數與Y單元中的數相加,結果存入R5MOVZ,R5
//把R5中的數存入Z單元中匯編語言的優缺點優點:指令容易記憶,程序容易編寫和理解;——相對機器語言缺點:助記符比較難以記憶,需要編程人員對計算機的硬件結構有比較深入的了解。抽象層次很低,仍然是低級語言。3、高級語言高級語言的特點
由自然語言和數學公式表示的語言。是一種獨立于機器硬件的語言。高級語言程序需要編譯后才能執行?!纠?】高級語言程序示例。程序功能:把兩個內存單元中的數相加,并將結果存入另外一個單元。Z=X+Y
//把內存單元X中的數與Y中的數相加,結果存入Z單元3、高級語言高級語言源程序需要先翻譯成等價的目標程序,才能為計算機理解和執行。翻譯程序的兩種模式:(高級語言的兩個執行方式)編譯方式:先把高級語言的源程序翻譯成目標程序,然后經過連接裝配程序生成可執行程序,最后運行可執行程序。解釋方式:邊翻譯邊執行,不需要翻譯成目標程序。5.2.2程序設計語言三種語言的應用比較:機器語言—目前一般不直接用來編寫程序。匯編語言—靠近機器,能夠充分利用計算機硬件的特性,編寫出的程序效率較高,用于對效率要求較高的規模不大的程序(如外設驅動程序、計算機控制程序等)。高級語言—用于編寫規模較大的程序。5.2.3程序設計的任務1.分析問題對于接手的任務要進行認真的分析研究所給定的條件分析最后應達到的目標找出解決問題的規律選擇解題的方法建立數學模型5.2.3程序設計的任務2.設計算法設計出解題的方法和具體步驟3.用計算機語言描述算法(即寫出源程序)4.對源程序進行編輯、編譯和連接5.運行程序,分析結果結果錯了,程序肯定錯結果對了,程序未必對1、分析問題分析解決問題所需要的數據(條件)——輸入;此例中要求輸入圓半徑確定要計算機解決什么問題,即“做什么”——處理;此例中要求計算圓面積和周長明確最后得到的結果——輸出。此例中要求輸出圓面積和周長練習:已知圓的半徑,求圓的面積和周長,并輸出結果。5.2.3程序設計的任務2、設計算法設計出解決某一問題的一組(有限個)求解步驟,即怎么做。本例用計算圓面積和周長公式即可得到結果注意:
為計算機設計算法就必須依據計算機的工作原理(馮?諾依曼型計算機),因為設計的算法和程序最終要讓計算機去執行。有些問題的算法計算機與人工的方法是不同的,例如:記錄原始數據和中間結果,計算機要利用存儲器,而人工需要紙和筆。5.2.3程序設計的任務2、設計算法自然語言描述流程圖描述
先用鍵盤輸入圓的半徑,再利用公式計算出圓的面積和周長,最后輸出圓面積和周長。5.2.3程序設計的任務2、設計算法自然語言描述流程圖描述5.2.3程序設計的任務3、編寫程序#include<stdio.h>intmain(){floatr,length,area;printf("Entertheradius\n");scanf("%f",&r);length=2*3.14*r;area=3.14*r*r;printf("Radiusis%f\n",r);printf("Areais%f\n",area);printf("Lengthis%f\n",length);getchar();return0;}5.2.3程序設計的任務#include<iostream.h>intmain(){ doubler;
cout<<"Entertheradius\n";
cin>>r; doublelength=2*3.14*r; doublearea=3.14*r*r;
cout<<"園的周長是:"<<length<<endl <<"圓的面積是:"<<area<<endl;
return0;}5.3程序設計基礎5.3.1C++語言的基本要素5.3.2C++語言的數據類型5.3.3常量變量和對象5.3.4運算符和表達式5.3.5基本語句5.3.6三種基本程序結構(以C++語言為例)5.3.1C++語言的基本要素自然語言的學習過程:(語法規則)單字->組詞->造句->句子構成文章計算機語言的學習過程:(語法規則)合法字符->單詞(標識符、常量、表達式等)->語句->程序5.3.1C++語言的基本要素1.字符集C++語言中最小的語法單位是字符,所有合法字符的集合稱為字符集。(1)英文字母(大小寫不同)(2)數字:0,1,2,…,9。(3)標點符號:逗號(,)、分號(;)、單引號(’)、雙引號(”)、冒號(:)、空格()、左花括號({)、右花括號(})、回車(Enter)。5.3.1C++語言的基本要素1.字符集(4)單字符運算符號:左右圓括號()、左右方括號[]、加(+)、減(-)、乘(*)、除(/)、取余數(%)、小數點(.)、大于(>)、等于(=)、小于(<)、嘆號(!)、破折號(~)、和號(&)、尖號(^)、分割符(|)、問號(?)。(5)特殊用途的符號:井字號(#)、反斜線(\)、下劃線(_)。注意:以上字符均為英文字符。5.3.1C++語言的基本要素2.標識符C++語言中各種對象的名字用標識符表示。例如常量名、變量名、函數名、類名、對象名、文件名等。標識符是由字母、數字和下劃線三種字符構成的且第一個字符必須是字母或下劃線的字符序列。5.3.1C++語言的基本要素2.標識符標識符的分類(1)關鍵字(保留字):預先定義好的標識符,具有特定的含義和用途,C++編譯器對其進行特殊處理。注:每個關鍵字都有固定的含義,用戶不能改變關鍵字的用途。如何識別關鍵字?
使用VC++6.0的編輯環境時,缺省是藍色的字符即為關鍵字。5.3.1C++語言的基本要素(1)關鍵字(保留字):5.3.1C++語言的基本要素2.標識符標識符的分類(2)預定義標識符::也具有特定含義,如庫函數名;但允許用戶將這類標識符另作他用,改變其原有意義。(3)用戶標識符:用戶根據自己需要定義的標識符。注:不能與關鍵字同名,也盡量不要與預定義標識符同名。5.3.1C++語言的基本要素2.標識符用戶標識符的命名規則:①由字母、數字和下劃線組成;②必須以字母或下劃線開頭;③對大小寫敏感;④不能與關鍵字同名。例如:intchar;//char是關鍵字,不能用做變量名char89_name;//變量名不能以數字開頭intis-loan;//中劃線不能出現在變量名中
//字符間的連接應該采用下劃線5.3.1C++語言的基本要素一般的編程操作流程為:編輯(edit)編譯(compile)鏈接(link或make或build)調試運行(debug或run)該過程循環往復,直至完成。編輯源程序(鍵入程序).cpp編譯程序.obj鏈接.exe調試運行編輯將源程序輸入到計算機中,生成后綴為.cpp的源程序文件。編譯將源程序轉換為后綴為.obj的目標程序文件。鏈接將若干目標文件與庫文件連在一起,生成一個后綴為.exe的可執行文件。運行調試5.3.1C++語言的基本要素源程序用源語言寫的,有待翻譯的程序“.cpp”-cplusplusfile目標程序也稱為“結果程序”,是源程序通過翻譯程序加工以后所生成的程序?!?obj”-objectfile目標代碼為機器代碼(機器指令)可執行文件可以直接執行的機器語言文件“.exe”-executablefile5.3.1C++語言的基本要素5.3.1C++語言的基本要素C++集成開發環境:1.TurboC++2.
C++Builder3.
Dev-C++4.
VisualC++VisualC++6.0在項目文件管理、調試及操作的親和力等方面上都略勝一籌,故本書以其比較流行的漢化版本VisualC++6.05SP6中文企業版作為編程環境。5.3.1C++語言的基本要素使用VC++6.0創建C++程序的過程:1.創建工作文件夾2.啟動VisualC++6.0
3.添加C++程序
1)創建工程:新建->工程->win32consoleapplication->輸入工程名稱,指定工程存儲位置,確定->空的工程,確定。2)創建源文件新建->文件->c++源文件->輸入文件名,確定。4.編輯源程序(即輸入源程序)5.編譯、鏈接和運行5.3.1C++語言的基本要素方法建議:1)課前準備、課后復習2)看懂課件上的內容,不懂?提問、email、網上查找3)務必要自己動手編程、調試、運行4)從模仿、照抄開始,多練習5)上機:課前準備、不做其他無關事5.3.1C++語言的基本要素最簡單的C++語言程序舉例例:要求在屏幕上輸出以下一行信息。
Helloworld!#include<iostream.h>intmain(){
cout<<”Helloworld!\n”;return0;}函數的名字,表示主函數C++程序必須有一個
main函數5.3.1C++語言的基本要素#include<iostream.h>intmain(){
cout<<”Helloworld!\n”;return0;}
主函數類型5.3.1C++語言的基本要素#include<iostream.h>intmain(){
cout<<”Helloworld!\n”;return0;}
函數體5.3.1C++語言的基本要素#include<iostream.h>intmain(){
cout<<”Helloworld!\n”;return0;}
輸出流cout,
是標準輸出設備的名稱輸出語句5.3.1C++語言的基本要素插入運算符“<<”;
指示將后面的數據送到輸出設備上去;#include<iostream.h>intmain(){
cout<<”Helloworld!\n”;return0;}
換行符5.3.1C++語言的基本要素“…”:表示字符串常量,
原樣輸出。#include<iostream.h>intmain(){
cout<<”Helloworld!.\n”;return0;}
當main函數執行結束前將整數0作為函數值5.3.1C++語言的基本要素#include<iostream.h>intmain(){
cout<<”Helloworld!\n”;return0;}
表示語句結束預處理指令5.3.1C++語言的基本要素C++庫文件5.3.1C++語言的基本要素C++語言程序的結構特點:1.一個程序由一個或多個源程序文件組成小程序往往只包括一個源程序文件一個源程序文件中可以包括四個部分:預處理指令全局聲明函數定義類定義#include<stdio.h>等在函數之外進行的數據聲明每個函數用來實現一定的功能5.3.1C++語言的基本要素2.函數是C++程序的主要組成部分一個C程序是由一個或多個函數組成的必須包含一個main函數(只能有一個)程序總是從main開始執行。3.一個函數定義包括兩個部分:函數首部(函數頭):intmain()函數體:函數首部下面的花括號內的部分{}。intmain(){}C++程序源文件1源文件2源文件n全局聲明函數定義1編譯預處理函數首部函數體類定義...C++語言程序構成5.3.1C++語言的基本要素5.3.1C++語言的基本要素#include<iostream.h>intmain(){
cout<<”Helloworld!\n”;return0;}
5.3.2C++語言的數據類型數據類型規定了該類型數據所占內存空間的大小,及其所能夠進行的操作。高級語言內部通常提供一組基本數據類型,包括類型名,各種類型值的文字量寫法,并為每個類型提供一組可用操作。使用者不必了解每個類型值的具體表示形式,不必了解操作的實現方式,就可以通過類型名和相應操作,使用各個基本類型。高級語言也允許程序員根據需要構建數據類型,稱為構造數據類型。5.3.2C++語言的數據類型5.3.2C++語言的數據類型1、整型int整型規定了整數的表示形式,整數的運算(操作),以及整數在計算機中的表示范圍。整型數的內部表示:二進制補碼整型數的表示范圍:取決于二進制位數整型類型標識符:int類型修飾符:long,short,signed,unsignedc++規定:
char<=shortint<=int<=longint5.3.2C++語言的數據類型1、整型int
在32位編譯器中:int(基本整型):占4個字節short(短型)2字節long(長型)4字節signed(有符號,缺省值)unsigned(無符號)注意:long,short,signed,unsigned修飾int時int可省略5.3.2C++語言的數據類型1、整型int
擴充的整型類型如下:有符號基本整型
[signed]int;無符號基本整型
unsignedint;有符號短整型
[signed]short[int];無符號短整型
unsignedshort[int];有符號長整型
[signed]long[int];無符號長整型
unsignedlong[int]5.3.2C++語言的數據類型在32位編譯器中整型的表示范圍類型長度(位數)前綴表示范圍short[int]16[signed]-32768~32767unsigned0~65535int32
[signed]-2147483648~2147483647unsigned0~4294967295long[int]32[signed]-2147483648~2147483647unsigned0~42949672955.3.2C++語言的數據類型2、實型實型又稱浮點型,是用來表示具有小數點的實數。數值以規范化的二進制數指數形式存放。浮點型,用于表示實型的類型有float(單精度)、double(雙精度)和longdouble(長雙精度)。5.3.2C++語言的數據類型2、實型取值范圍類型長度(位數)表示范圍有效位float32-3.4x1038~3.4x10387位double64-1.8x10308~1.8x1030815位longdouble80-1.2x104932~1.2x10493219位注:賦值范圍是參考的錢能的教材;5.3.2C++語言的數據類型3、布爾類型bool用于表示邏輯量的“真”和“假”,因此也稱為邏輯類型。0表示false,1表示true占1字節的存儲空間注意:任何數值都可自動轉換成bool值0可被轉換成false任何不等于0的數值都被轉換成true5.3.2C++語言的數據類型4、字符型char字符類型用于表示ASCII編碼字符。在32位系統中字符型數據占1字節。它有三種不同的類型:char1字節signedchar1字節unsignedchar1字節系統表示字符型數據時,不是將字符本身的形狀存入內存,而是將字符的ASCII碼存入內存。5.3.2C++語言的數據類型在32位編譯器中字符型的表示范圍類型長度(位數)前綴表示范圍char8[signed]-128~1278unsigned0~2555.3.3常量變量和對象1、常量在程序的執行過程中其值不能被改變的量。(1)整型常量:如1000,12345,0,-345(2)浮點型常量(實型常量):十進制小數形式:如0.34-56.790.0指數形式:如12.34e3(代表12.34103)
(E或e前必須有數字,且指數必須是整數)5.3.3常量變量和對象1、常量(3)字符常量普通字符常量:由單引號括起來的單個字符,
如‘A’,‘a’,‘x’,‘?’,‘$’,‘‘
。轉義字符:以轉義符“\”開頭的格式字符。使用轉義字符的目的是表示不可見的字符。經常用的不可見字符用一個轉義符后跟一個專門的字符來表示;當轉義字符引導符后接數字時,用來指定字符的ASCII碼值。默認為八進制,數字前加x/X為十六進制。5.3.3常量變量和對象常見轉義字符 字符形式 功能
\‘ 單引號
\“ 雙引號
\? 問號
\\ 反斜杠字符“\” \a 響鈴
\b 退格
\n 換行
\t 水平制表符
\v 垂直制表符
\r 回車
\ooo o表示八進制數,與該八進制對應的字符
\xhh
h表示十六進制數,與該十六進制對應的字符5.3.3常量變量和對象1、常量(3)字符常量轉義字符:例如:’\101’,表示’A’;‘\x41’,表示’A’注意:0、‘0’和‘\0’的區別0表示整數‘0’表示數字0字符‘\0’表示ASCII碼值為0的字符,“空操作”1、常量(4)字符串常量由一對雙引號括起來的字符序列,
如”CHINA”,”a”,”123”。字符串常量中字符的個數稱為字符串長度。在C++中,存儲字符串常量時總是以‘\0’結束。"CHINA""a"'a'CHINA\0a
\0a注意:字符常量和字符串常量區別開來字符串長度和字符串所占內存空間數的區別5.3.3常量變量和對象5.3.3常量變量和對象2、變量在程序運行過程中,其值可以被改變的量;用來存放初始值、中間結果或最終結果。變量的作用是存取程序中需要處理的數據,對應內存中的一塊存儲區域,該區域的名稱即為變量名,該區域的內容是變量的值。變量有3個基本要素合法的變量名變量的數據類型變量的數值
12a5.3.3常量變量和對象…………1243078124307912430801243081124308212430831243084124308512430861243087124308812430891243090內存空間內存地址存儲單元(1Byte)12變量a的地址變量a的數值例:inta=12;2、變量一般要先定義,再使用,變量定義的一般形式為:
數據類型名變量名;5.3.3常量變量和對象2、變量變量名是內存空間的一個標識,對變量名的操作也是對其內存空間的操作。如:int
myAge,myWeight;
myAge=20;
myWeight=100;
myAge=myAge+1;5.3.3常量變量和對象2、變量變量模式:變量保存數據的方式,稱為“變量模式”。變量模式包括值模式和引用模式兩種。值模式指的是變量是保存值的容器,其中保存相應的值。12x5.3.3常量變量和對象2、變量變量模式:引用模式則在變量里保存對一個數據對象的引用,數據對象里保存著數據值。12x5.3.3常量變量和對象3、對象對象的概念很廣泛,通常指在程序運行中存在的任何元素。例如:變量、有名的常量、代碼段、動態分配的內存塊、程序中的文字量、字符串等等。在程序運行中,需要創建和使用的各種程序對象有:(1)程序變量(2)程序常量(3)匿名數據對象
(4)動態分配的匿名數據對象
(5)計算中生成的臨時數據對象,如函數返回值、運算符的計算結果等
(6)其他對象,如程序的運行系統所需要的對象。5.3.3常量變量和對象例子:假設圓的半徑r=2,計算圓的面積并輸出結果。#include<iostream.h>intmain(){
intr=2;doublearea; area=3.14159*r*r;
cout<<"圓的面積為:"<<area<<"\n"; return0; }5.3.4運算符和表達式運算符和表達式是實現數據操作的兩個重要組成部分。運算符:即操作符,如+,-,*,/等操作數:是運算符的運算對象,變量、常量、函數等。表達式:是由運算符和操作數按照一定規則組合而成的式子。例:(2*x+a)*sin(b)-201、運算符根據運算符的操作數的個數不同,可將其分為:單目運算符(一元):對一個操作數運算雙目運算符(二元):對二個操作數運算三目運算符(三元):對三個操作數運算5.3.4運算符和表達式1、運算符在C++中運算符大致可以分為:算術運算符:+-*/%賦值運算符:=+=-=*=/=%=自增/自減運算符:++、--關系運算符:<<=>>===!=邏輯運算符:&&||位運算符:~&^|<<>>條件運算符:?:逗號運算符:,指針運算符:*&求字節數運算符:sizeof強制類型轉換運算符:類型分量運算符:.->下標運算符:[]5.3.4運算符和表達式5.3.4運算符和表達式(1).算術運算符+,-,*,/,%(求余數)。除法運算“/
”,兩個整數相除,結果為整數,否則為實數。例如:
5/2=25.0/2=2.55%2=1(x+5)*y+6(2).賦值運算符在C++中,=稱為賦值運算符,其使用形式為:
變量名=表達式“=”不同于數學中的等號。inta;a=3;5.3.4運算符和表達式(2).賦值運算符在賦值符“=”之前加上算術運算符,可以構成復合賦值運算符。算術運算+=加賦值-=減賦值*=乘賦值/=除賦值%=求余賦值5.3.4運算符和表達式(2).賦值運算符例如:inta,b;a+=b等效于a=a+ba*=b-4/c+d等效于:
a=a*(b-4/c+d)
不等效于:
a=a*b-4/c+d(3).自增、自減運算符——單目運算符自增:++++i:先加1后使用i++:先使用后加1例:i=3;j1=++i;j1=4相當于執行:i=i+1;j1=i;j2=i++;j2=3相當于執行:j2=i;i=i+1;自減:----i:先減1后使用i--:先使用后減1例:i=3;j1=--i;j1=2相當于執行:i=i-1;j1=i;j2=i--;j2=3相當于執行:j2=i;i=i-1;5.3.4運算符和表達式5.3.4運算符和表達式(4).關系運算符——雙目運算符,結果值為真/假。大小判斷>、>=、<、<=。相等判斷==、!=。2<36>=8a==3a=3
2+3<4-12+(3<4)-15.3.4運算符和表達式(5).邏輯運算符:&&(邏輯與)
||(邏輯或)
!(邏輯非)&&和||是雙目(元)運算符!是一目(元)運算符a&&b
:a和b都為真,
a&&b才為真,
否則為假a||b
:a和b都為假,
a||b才為假,
否則為真!a:a真!a假,a假!a真5.3.4運算符和表達式例子:判斷年齡在13至17歲之內?age>13&&age<17(不能寫成13<age<17)判斷年齡小于12或大于65?age<12||age>65判別某一年是否閏年,用邏輯表達式表示:(year%4==0&&year%100!=0)||(year%400==0)如果表達式值為1,則閏年;否則為非閏年例子:(1)若a=4,則!a的值為0(2)若a=4,b=5,則a&&b的值為1(3)若a=4,b=5,則a||b的值為1(4)若a=4,b=5,則!a||b的值為1(5)4&&0||2的值為1(6).運算符的優先級與結合性:優先級,表達式中不同操作符的執行順序的規定。上述運算符中單目運算符的優先級最高,其次是算術運算,再次是關系運算,然后是邏輯運算,最后是賦值運算。如:a=-5*6+3;5.3.4運算符和表達式!++--(高)算術運算符關系運算符
&&和||賦值運算符(低)(6).運算符的優先級與結合性:結合性,是指表達式中出現同等優先級的操作時,該先做那個操作的規定。它有從左至右和從右至左兩種。從右至左:單目運算符,賦值運算符;從左至右:算術運算符,關系運算符;
如:a=3+d*e/5;
注:只有當兩個同級運算符共用一個操作數時,結合性才會起作用。5.3.4運算符和表達式5.3.4運算符和表達式2、表達式是由運算符和操作數按照語法規則構成的操作序列,其目的是用來描述一個計算。對于計算過程的控制手段包括:優先級、結合性、括號、運算對象的求值順序。所謂求值次序,是指表達式中各個操作符的求值次序視編譯器不同而不同。 如:doublee=3*d+d++;5.3.5基本語句語句是命令,基本語句提供了語言的基本動作。1、C++語句分類(1)控制語句:
用于實現一定的控制功能。條件語句:用于實現程序執行過程中的條件轉移。循環語句:用于實現程序中重復進行某些操作。(2)表達式語句;
a=3; b=3+d*e/5;(3)空語句
;5.3.5基本語句1、C++語句分類(4)函數調用語句;sqrt(4);(5)復合語句;由一對花括號{}括起來的一組語句。如果要在只執行一條語句的地方執行多條語句,那么這多條語句要寫成一條復合語句。5.3.5基本語句2、賦值語句(1)賦值語句的基本形式為:
<對象>=<表達式>;
表示把賦值號右側表達式的值復制給左側的對象。
例如:a=5;
a的原值為7a7a5
a的新值變成了5
執行賦值語句a=55.3.5基本語句2、賦值語句(2)左值和右值:左值(L-value):可出現在賦值運算符左邊的表達式。左值表達式具有存放數據的空間,并且該內存空間可以執行寫操作。例如:inta,b;a=3;//ok(a+b)=8;//error賦值表達式的值和類型是左值的值和類型。5.3.5基本語句2、賦值語句(2)左值和右值:右值(R-value)
:可出現在賦值運算符右邊的可求值的表達式。說明:左值既可以出現在賦值運算符的左邊,又可以出現在右邊例如:inta;intb;b=8;//b是左值,8是右值a=b;//a是左值,b為右值32=a+2;//error,32是常量,只能作右值5.3.5基本語句2、賦值語句例子:怎樣實現兩個變量值的互換?★●AB互換前●★AB互換后★●ABT★5.3.5基本語句2、賦值語句例子:★●ABT★●5.3.5基本語句2、賦值語句例子:ABT★●★●5.3.5基本語句2、賦值語句例子:int
a,b,t;a=3;b=5;t=a;a=b;b=t;5.3.5基本語句3、輸入輸出語句幾乎每一個程序都包含輸入輸出,輸入輸出是程序中最基本的操作之一。所謂輸入輸出是以計算機主機為主體而言的;從輸入設備(如鍵盤、磁盤、光盤、掃描儀等)向主機輸入數據稱為輸入。從主機向輸出設備(如顯示器、打印機等)輸出數據稱為輸出。5.3.5基本語句3、輸入輸出語句(1)C語言格式輸出函數printf
printf(格式控制,輸出表列);“格式控制”是用雙引號括起來的字符串,包括兩種信息:
格式說明—由“%”和格式字符組成,如%d,%f等。其作用是將輸出的數據轉換為指定的格式輸出。
普通字符—即需要原樣輸出的字符。“輸出表列”是需要輸出的一些數據,可以是變量、表達式。例如:inta=3;charb=‘s’;
printf(“a=%d,b=%c\n”,a,b);結果:a=3,b=s5.3.5基本語句格式字符說明%d按實際位數輸出十進制整型數據。
%mdm為指定的輸出字段的寬度。如果數據的位數小于m,則左端補以空格,若大于m,則按實際位數輸出。%o以八進制數形式輸出整數。%x以十六進制數形式輸出整數。%c輸出一個字符。%s輸出一個字符串。%f輸出實數,以小數形式輸出。3、輸入輸出語句(1)C語言格式輸出函數printf5.3.5基本語句3、輸入輸出語句(2)C語言格式輸入函數scanf
scanf(格式控制,地址表列)“格式控制”的含義同printf函數;“地址表列”是由若干個地址組成的表列,可以是變量的地址,或字符串的首地址。例如:
int
a,b,c;
scanf(“%d%d%d”,&a,&b,&c);
printf(“%d,%d,%d\n”,a,b,c);運行結果:3453,4,55.3.5基本語句3、輸入輸出語句C++語言中使用面向對象的I/O流,定義了兩個輸入輸出對象:cin和cout。流是C++的一個核心概念,數據從一個位置到另一個位置的流動抽象為“流”。當數據從鍵盤流入到程序中時,這樣的流稱為輸入流當數據從程序中流向屏幕或磁盤文件時,這樣的流稱為輸出流5.3.5基本語句(1)輸入流對象(cin)cin標準輸入流對象,對應的輸入設備是鍵盤,可以獲得鍵盤的多個輸入值。提取運算符“>>”可以連續寫多個,每個提取運算符后面跟一個獲得輸入值的變量或對象。提取運算符“>>”能自動將cin輸入值轉換成相應變量的數據類型。從鍵盤輸入的數據的個數、數據類型及順序,必須與cin中的列舉的變量一一匹配。
cin>><對象1>{>><對象2>…};5.3.5基本語句(1)輸入流對象(cin)intnum1,num2,num3;cin>>num1>>num2>>num3;1246doubled;cin>>num1>>d>>num2;232.345.3.5基本語句(2)輸出流對象(cout)cout是標準輸出流對象,對應的輸出設備是顯示器,通過cout可以輸出一個整數、實數、字符及字符串。插入運算符“<<”可以連續寫多個,每個后面可以跟一個要輸出的常量、變量、轉義序列符及表達式等。
cout<<<對象1>{<<<對象2>…};5.3.5基本語句(2)輸出流對象(cout)例如:cout<<"ABCD\t"<<1234<<"\t"<<endl;ABCD 1234
5.3.5基本語句例子:輸入兩個整數,交換后輸出。#include<iostream.h> //頭文件,處理C++中的輸入和輸出操作intmain(){
inta,b,temp;
cin>>a>>b;
//輸入兩個整數,分別保存在變量a和b中
temp=a; a=b; b=temp;
cout<<"Afterswap…"<<endl; //輸出字符串,然后換行
cout<<a<<","<<b<<endl;
//輸出變量a和b中的值,然后換行
return0;}5.3.6三種基本程序結構1、順序結構程序的執行按照語句出現的先后次序順序進行。程序中的每個語句都會被執行到。5.3.6三種基本程序結構例子:通過鍵盤輸入一個三角形的底和高,計算其面積并輸出。#include<iostream.h>
intmain(){floatwidth,height,area;
/*定義變量*/
cout<<"Enterwidthandheight:";
/*輸出提示信息*/cin>>width>>height;/*通過鍵盤輸入底和高*/area=(width*height)/2.0;/*計算面積*/cout<<"Thearaeis:"<<area<<endl;/*輸出面積的值*/
retrun0;}5.3.6三種基本程序結構說明:(1)C++程序由函數構成,可以包含多個函數,但最少也要包含一個函數,即main()函數。(2)C++程序書寫格式自由。(3)C++程序可以包含語句的注釋,有助于對程序的理解,不參與程序的運行。
//
單行注釋
/*……*/是多行注釋;
5.3.6三種基本程序結構2、選擇結構對給定條件進行判斷,根據判斷的結果(真或假)來決定執行兩個分支或多個分支程序段中的一個分支。也稱為“分支結構”。C++語言有兩種選擇語句:(1)if語句(2)switch語句if語句的形式簡單的if語句:單分支if…else語句:雙分支嵌套的if語句:多分支(1)if語句簡單的if語句——單分支格式說明if后的()不能省略。語句s可以是0條、1條或多條語句。若為多條語句,語句前后須加上{},變成塊語句。if(<e>){<s>}[another]if(<e>)<s>[another]或測試es否是(1)if語句例子:輸入兩個整數按從小到大排序后輸出#include<iostream>usingnamespacestd;intmain(){
inta,b,temp;
cout<<"請輸入兩個整數:";
cin>>a>>b;
if(a>b)
{
//塊開始,另起一行,與if對齊
temp=a;a=b;b=temp;
//縮進
}
//塊結束,與最靠近它的{對齊
cout<<"排序的結果為:"<<a<<"\t"<<b<<endl; return0;}
例子:將兩個整數按從小到大排序說明:名稱空間以“.h”為擴展名,C語言為了使iostream中的定義對程序有效,還需使用下面的名稱空間編譯指令來指定:usingnamespacestd;std是“名空間”,避免名稱沖突。#include<iostream.h>#include<iostream>usingnamespacestd;ANSI/ISOC++if…else語句——雙分支格式if(<e>){<s1>}else{
<s2>}[another]if(<e>)<s1>else<s2>[another]或es1否是s2(1)if語句例子:輸入兩個整數,輸出其中的較大值。//**************//*求a、b中的較大值*//**************#include<iostream.h>intmain(){
inta,b,max;
cin>>a>>b;//輸入a、b的值
if(a>b) max=a;
else max=b;
cout<<a<<"和"<<b<<"的較大值為:"<<max<<endl; return0; }嵌套的if語句——多分支if-else語句的else分支語句中包含if-else語句。舉例:if(<e1>){<s1>}else{
if(<e2>)
{
<s2>
}else{<s3>
}
<s4>}
if(<e1>)
<s1>
elseif(<e2>)<s2>
elseif(<e3>)<s3>
┆
elseif(<em>)<sm>
else<sm+1>(1)if語句#include<iostream.h>intmain(){ floatfScore;
cout<<"請輸入一個百分制成績:";
cin>>fScore;
if(fScore>=90)
cout<<"A"<<endl;
else
if(fScore>=80)
cout<<"B"<<endl;
else
if(fScore>=70)
cout<<"C"<<endl;
else
if(fScore>=60)
cout<<"D"<<endl;
else
cout<<"E"<<endl; return0;}例子:將輸入的百分制成績轉換成等級。(1)if語句說明:1)如果在if、esle后有多條語句,則必須用花括號將這些語句括起來,否則只有后跟的第1條語句有效。2)if語句中的條件表達式一般為關系表達式或邏輯表達式,也可以是任意的數值類型。if(a>0)
cout<<“OK\n”;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 界面設計1+x習題庫(附參考答案)
- 社會文化對語言表達的影響試題及答案
- 證券從業資格考試問答試題及答案
- 現代加工技術選擇題復習試題含答案
- 口腔知識基礎培訓課件
- 工會知識培訓課件
- 圖書管理員用戶培訓方法試題及答案
- 消防產品監督管理規定
- 車間5S管理制度
- 食堂經營承包方案計劃書
- 2025中考道德與法治核心知識點+易錯易混改錯
- 2025年日語n2考前試題及答案
- 1889-13-15-食堂承包協議工地食堂承包協議書
- T-NYA 007-2023 多味草本足浴包技術規范
- 課題開題報告:教育家精神在當代教育實踐中的傳承與創新研究
- 防洪防澇知識培訓課件
- 高等職業學校辦學能力評價的策略及實施方案
- 水上安全教育課件
- PE特種設備焊工理論復習題庫(帶解析)
- 2025年度全款文化演出門票購買合同4篇
- 臨床基于高級健康評估的高血壓Ⅲ級合并腦梗死患者康復個案護理
評論
0/150
提交評論