版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第02章 編程初步,現在讀者一定很渴望編寫程序,讓計算機與外界進行實際的交互。我們不希望程序只能做打字員的工作,顯示包含在程序代碼中的固定信息。的確,編程的內涵遠不止此。 理想情況下,我們應能從鍵盤上輸入數據,讓程序把它們存儲在某個地方,這會讓程序更具多樣性。程序可以訪問和處理這些數據,而且每次執(zhí)行時,都可以處理不同的數據值。每次運行程序時輸入不同的信息正是整個編程業(yè)的關鍵。在程序中存儲數據項的地方是可以變化的,所以叫做變量(variable),而這正是本章的主題,2.1 計算機的內存,首先看看計算機如何存儲程序要處理的數據。為此,就要了解計算機的內存,在開始編寫第一個程序之前,先簡要介紹計算
2、機的內存。 計算機執(zhí)行程序時,組成程序的指令和程序所操作的數據都必須存儲到某個地方。這個地方就是機器的內存,也稱為主內存(main memory),或隨機訪問存儲器(Random Access Memory,RAM)。,2.2 什么是變量,變量是計算機里一塊特定的內存,它是由一個或多個連續(xù)的字節(jié)所組成。每個變量都有一個名稱,可以用該名稱表示內存的這個位置,以提取它包含的數據或存儲一個新數值 。,2.3 計算機繪圖系統的硬件組成,變量有幾種不同的類型,每種變量都用于存儲特定類型的數據。首先看看用于存儲數值的變量。在程序里存放數字的方法很多,下面從最簡單的方法開始 。 整數變量 變量的命名 變量的
3、使用 變量的初始化 算術語句,2.3.1 整數變量,首先是存儲整數的變量。整數是沒有小數點的數字。例如: 1 10,999,000,000 -1 這些數值是整數,但這對程序而言并不完全正確。整數是不能包含逗號的,所以第二個值在程序里應該寫成10999000000。,2.3.2 變量的命名,給變量指定的名稱一般稱為變量名。變量的命名是很有彈性的。它可以是一個或多個大寫或小寫字母、數字和下劃線( _ )(有時下劃線也算做字母)。下面是一些正確的變量名: Radius diameter Auntie_May Knotted_Wool D678,2.3.3 變量的使用,前面介紹了如何聲明及命名變量,但
4、這和在第一章學到的知識相比并沒有太多用處。下面編寫另一個程序,在產生輸出前使用變量的值。,2.3.4 變量的初始化,在上面的例子,用下面的語句聲明每個變量: int Cats; /* The number of cats as pets */ 用下面的語句設定變量Cats的值: Cats = 2; 將變量Cats的值設為2。,2.3.5 算術語句,上面的程序是第一個真正做了些事情的程序。它非常簡單,僅僅相加了幾個數字,但這是非常重要的一步。它是運用算術語句進行運算的一個基本例子。下面介紹一些更復雜的計算 。,2.4 變量與內存,前面介紹了整數變量,但未考慮過它們占用多少內存空間。每次聲明變量時
5、,計算機都會給它分配一塊足夠大的內存空間,來保存該類型的變量。相同類型的不同變量總是占據相同大小的內存(字節(jié)數)。但不同類型的變量需要分配的內存空間就不一樣了。,2.5 整數變量類型,有5種基本的變量類型可以聲明為存儲帶符號的整數值(無符號的整數值參見下一節(jié))。每種類型都用不同的關鍵字或關鍵字組合來指定 。 無符號的整數類型 使用整數類型 指定整數常量,2.5.1 無符號的整數類型,對于每個存儲帶符號整數的類型,都有一個對應的類型來存儲無符號的整數,它們占用的內存空間與無符號類型相同。每個無符號的類型名稱都與帶符號的類型名稱相同,但要在前面加上關鍵字unsigned。,2.5.2 使用整數類型
6、,在大多數情況下,int或long類型的變量就能滿足我們的需求,偶爾需要unsigned int或unsigned long。下面是聲明這些類型的例子: unsigned int count = 10; unsigned long inchesPerMile = 63360UL; int balance = -500;,2.5.3 指定整數常量,整數變量有不同的類型,整數常量也有不同的類型。例如,如果將整數寫成100,它的類型就是int。如果要確保它是long類型,就必須在這個數值的后面加上一個大寫L或小寫l。所以,long類型的整數100應寫為100L。雖然寫為100l也是合法的,但應盡量避
7、免,因為小寫字母l與數字1很難辨別。,2.6 浮點數,浮點變量用來存儲浮點數。浮點數包含的值帶小數點,也可以表示分數和整數。下面是浮點數的例子: 1.6 0.00008 7655.899 由于浮點數的表示方式,它的位數是固定的。然而它的取值范圍要比整數大得多。浮點數通常表示為一個小數值乘以10的次方。 。,2.7 浮點數變量,浮點數變量的聲明方式和整數變量類似。只需給浮點數類型使用對應的關鍵字即可: float Radius; double Biggest; 如果需要存儲至多有7位精確值的數(范圍從10-38到10+38),就應需要使用float類型的變量。類型float的值稱為單精度浮點數。
8、從表2-6中得知,它占用4個字節(jié)。使用類型double的變量可以存儲雙精度浮點數。類型double的變量占用8個字節(jié),有15位精確值,范圍從10-308到10+308。它足以滿足大多數的需求。但某些特殊的應用程序需要更精確、更大的范圍,此時可以使用long double。 。,2.8 使用浮點數完成除法運算,如前所見,除法運算使用的是整數操作數時,通常會得到整數結果。除非除法運算的左操作數剛好是右操作數的整數倍,否則其結果是不正確的。當然,在將餅干分給孩子們的例子中,整數除法運算的方式是沒問題的,但將10尺長的厚板均分成4塊時,就有問題了。這時就需要用到浮點數了 。 控制小數位數 控制輸出字段
9、寬度,2.8.1 控制小數位數,在上個例子的輸出中有太多不必要的0。擅長使用量尺和鋸子,并不說明能用長度為2.500000量尺切割木板,更不用說用2.500001長度的量尺了。可以用格式指定符指定小數點后面的位數。例如,要使輸出的小數點后有兩位數,就可以使用格式指定符%.2f。如果小數點后需要有3位數,則可以使用%.3f。,2.8.2 控制輸出字段寬度,輸出的字段寬度是輸出值所使用的總字符數(包括空格),它一般是默認的。printf()函數確定了輸出值需要占用多少個字符位置,小數點后的位數由我們指定,并將它用作字段寬度。但我們可以自己確定字段寬度。如果要求輸出一列排列整齊的數值,就應確定其字段
10、寬度。如果讓printf()函數指定字段寬度,輸出的數字列就不整齊 。,2.9 較復雜的表達式,算術要比兩個數相除復雜得多。事實上,如果要進行復雜的算術運算,也可以使用筆和紙。有了加減乘除的工具,就可以開始進行一些真正復雜的計算了。 對于較復雜的的計算,需要更多地控制表達式的計算順序。括號可以提供這方面的能力。當遇到錯綜復雜的情況時,括號還有助于使表達式更清晰 。,2.10 定義常量,前面的例子將Pi定義為變量,但它是一個不會改變的常量,的值是一個不循環(huán)的無限小數,其值總是固定不變。唯一的問題是,在指定它時精確到幾位數。最好確保它的值在程序里保持不變,使之不會因錯誤而改變 。 極限值 size
11、of運算符,2.10.1 極限值,當然,一定要確定程序中給定的整數類型可以存儲的極限值。頭文件定義的符號表示每種類型的極限值 。,2.10.2 sizeof運算符,使用sizeof運算符可以確定給定的類型占據多少字節(jié)。當然,在C語言中sizeof是一個關鍵字。表達式sizeof(int)會得到int類型的變量所占的字節(jié)數,所得的值是一個size_t類型的整數。size_t類型在標準頭文件(和其他頭文件如)中定義,對應于一個基本整數類型。但是,與size_t類型對應的類型可能在不同的C庫中有所不同,所以最好使用size_t變量存儲sizeof運算符生成的值,即使知道它對應的基本類型,也應如此。,
12、2.11 選擇正確的類型,必須仔細選擇在計算過程中使用的變量類型,使之能包含我們期望的值。如果使用了錯誤的類型,程序就可能出現很難檢測出來的錯誤 。,2.12 定義常量,在程序2.14計算季度收入的表達式中,可以控制操作的執(zhí)行,得到正確的結果: RevQuarter = QuarterSold/150*Revenue_Per_150; 要使結果正確,必須修改這個語句,以浮點數的方式計算表達式。如果可以把QuarterSold的值轉換為float類型,該表達式就會以浮點數的方式計算,問題就解決了。要把變量從一種類型轉換為另一種類型,應把目標類型放在變量前面的括號中 。 自動轉換類型 隱式類型轉換
13、的規(guī)則 賦值語句中的隱式類型轉換,2.12.1 自動轉換類型,該程序的第二個版本的輸出如下: Sales revenue this quarter is :$1930.50 即使表達式中沒有顯式轉換類型,結果也是浮點數形式,但它仍是錯誤的。這是因為編譯器在處理涉及不同類型的值操作時,會自動把其中一個操作數的類型轉換為另一個操作數的類型,2.12.2 隱式類型轉換的規(guī)則,確定二元運算中的哪個操作數要轉換為另一個操作數的類型時,其機制相當簡單。其基本規(guī)則是,將值域較小的操作數類型轉換為另一個操作數類型,但在一些情況下,兩個操作數都要轉換類型。,2.13 再談數值數據類型,為了完整論述數值數據類型,
14、下面討論一些前面未提及的內容。第一個未涉及的類型是char。char類型的變量可以存儲單個字符的代碼。它只能存儲一個字符代碼(即一個整數),所以被看作整數類型??梢韵衿渌麛殿愋湍菢犹幚韈har類型存儲的值,因此可以在算術運算中使用它 。 字符類型 字符的輸入輸出 寬字符類型 枚舉 存儲布爾值的變量 復數類型,2.13.1 字符類型,在所有數據的類型中,char類型占用的內存空間最少。它一般只需一個字節(jié)。存儲在char類型變量的整數可以表示為帶符號或無符號的值,這取決于編譯器 。,2.13.2 字符的輸入輸出,使用scanf()函數和格式指定符%c,可以從鍵盤上讀取單個字符,將它存儲在char
15、類型的變量中 。,2.13.3 寬字符類型,wchar_t類型的變量存儲多字節(jié)字符碼,一般占用兩個字節(jié)。在處理Unicode字符時,就需要使用wchar_t類型。wchar_t類型在標準頭文件中定義,所以需要在使用該類型的源文件中包含該頭文件。在char類型的字符常量前面加上修飾符L,就可以定義一個寬字符常量 。,2.13.4 枚舉,在編程時,常常希望變量存儲一組可能值中的一個。例如一個變量存儲表示當前月份的值。這個變量應只存儲12個可能值中的一個,分別對應于112月。C語言中的枚舉(enumeration)就用于這種情形 。,2.13.5 存儲布爾值的變量,_Bool類型存儲布爾值。布爾值一
16、般是比較的結果true或false;第3章將學習比較操作,并使用其結果做出判斷。_Bool類型的變量值可以是0或1,對應于布爾值false和true。由于值0和1是整數,所以_Bool類型也被看作整數類型 。,2.13.6 復數類型,本節(jié)假定讀者學過復數。如果讀者未學過這個內容,可以跳過本節(jié)。如果對復數的概念比較模糊,這里將介紹它的基本特性。 復數的形式是a + bi(在電子學中是a + bj),其中i是1的平方根,a和b是實數。A是實數部分,bi是復數的虛數部分。復數可以看作實數(a, b)的有序對,2.14 賦值操作的op=形式,C語言是一種非常簡潔的語言,提供了一些操作的縮寫形式??紤]下
17、面的代碼: number = number + 10; 這類賦值操作是給一個變量遞增或遞減一個數字,它非常常見,所以有一個縮寫形式: number += 10;,2.15 數學函數,math.h頭文件包含各種數學函數的聲明。為了了解這些數學函數,下面介紹最常用的函數。所有的函數都返回一個double類型的值。,2.16 設計一個程序,下面設計本章末的一個真實例子。在一個新程序中試用一些數值類型是一個很不錯的想法。這里將從頭開始編寫一個程序,涉及編程的所有基本要素,包括問題的初始描述、問題的分析、解決方案的準備、編寫程序、運行程序,以及測試它,確保它正常工作。該過程的每一步都會引入新問題,而不僅
18、僅是紙上談兵 。 問題 分析 解決方案,2.16.1 問題,許多人都對樹的高度很感興趣。如果將樹砍倒,量出它的高度,就可以確定離樹多遠才是安全的。這對于患有神經衰弱的人來說非常重要。問題是如何不使用非常長的梯子,就可以確定樹的高度,因為長梯也會對人和樹枝帶來危險。為了確定樹的高度,可以向朋友求助,最好找一個個子比較矮的朋友。假定要測量的樹比自己和朋友都高。比自己還矮的樹很容易測量出其高度,除非這棵樹長滿了刺 。,2.16.2 分析,現實問題很少能用適合于編程的方式來表達。在編寫代碼之前,需要確保完全理解了問題及其解決方式。只有這樣,才能估計出創(chuàng)建解決方案所需的時間和精力。 分析階段應增強對問題的理解,確定解決它的邏輯過程。一般這需要大量的工作,這包括找出問題闡述中模糊或遺漏的細節(jié)。只有全面理解了問題,才能開始以適合編程的形式
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高職學前教育(幼兒語言發(fā)展)試題及答案
- 2025年大學醫(yī)學美容技術(美容技術研究)試題及答案
- 2025年大學護理學(中醫(yī)護理基礎)試題及答案
- 2026年熱水器清洗(水垢去除)試題及答案
- 2025年注冊會計師(CPA)考試 會計科目深度沖刺試卷與答案解析
- 醫(yī)患關系溫暖文案集
- 人工智能:典型應用實例
- 神奇的埃及科普講解
- 祛斑知識培訓課件
- 天津理工大學就業(yè)指南
- 14 請幫我一下吧(說課稿)-部編版道德與法治一年級下冊
- 《橋梁施工安全培訓課件》
- 中學政治名師工作室2025年工作計劃
- 手術室表面環(huán)境清潔與消毒
- DB41T 877-2013 食用菊花栽培技術規(guī)程
- 大學生創(chuàng)業(yè)導論學習通超星期末考試答案章節(jié)答案2024年
- DB23T 3735-2024云杉花墨天牛防治技術規(guī)程
- 放射科醫(yī)院感染管理:加強院感控制
- 建筑防水工程技術規(guī)程DBJ-T 15-19-2020
- 《公路橋涵養(yǎng)護規(guī)范》(JTG5120-2021)
- 矢量網絡分析儀校準規(guī)范
評論
0/150
提交評論