




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第一章l 本章要點(diǎn)本章要點(diǎn) 1-1 語(yǔ)言出現(xiàn)的歷史背景c語(yǔ)言是國(guó)際上廣泛流行的高級(jí)語(yǔ)言。c語(yǔ)言是在b語(yǔ)言的基礎(chǔ)上發(fā)展起來(lái)的。b (bcpl)語(yǔ)言是1970年由美國(guó)貝爾實(shí)驗(yàn)室設(shè)計(jì)的, 并用于編寫(xiě)了第一個(gè)unix操作系統(tǒng),在pdp 7上實(shí)現(xiàn)。優(yōu)點(diǎn):精練,接近硬件,缺點(diǎn):過(guò)于簡(jiǎn)單,數(shù)據(jù)無(wú)類型。 1973年貝爾實(shí)驗(yàn)室的d.m.ritchie 在b語(yǔ)言的基礎(chǔ)上設(shè)計(jì)出了c語(yǔ)言,對(duì)b取長(zhǎng)補(bǔ)短,并用之改寫(xiě)了原來(lái)用匯編編寫(xiě)的unix,(即unix第5版),但僅在貝爾實(shí)驗(yàn)室使用。 1-1語(yǔ)言出現(xiàn)的歷史背景1975年unix第6版發(fā)布,c優(yōu)點(diǎn)突出引起關(guān)注。1977年出現(xiàn)了可移植c語(yǔ)言編譯程序 ,推動(dòng)了unix在各種
2、機(jī)器上實(shí)現(xiàn) ,c語(yǔ)言也得到推廣,其發(fā)展相輔相成。1978年影響深遠(yuǎn)的名著the c programming language由 brian w.kernighan和dennis m.ritchie 合著,被稱為標(biāo)準(zhǔn)c。之后,c語(yǔ)言先后移植到大、中、小、微型計(jì)算機(jī)上,已獨(dú)立于unix和pdp,風(fēng)靡世界,成為最廣泛的幾種計(jì)算機(jī)語(yǔ)言之一。 1-1語(yǔ)言出現(xiàn)的歷史背景1983年,美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)(ansi)根據(jù)c語(yǔ)言各種版本對(duì)c的發(fā)展和擴(kuò)充,制定了新的標(biāo)準(zhǔn)ansi c ,比標(biāo)準(zhǔn)c有了很大的發(fā)展。1988年k & r按照 ansi c修改了他們的the c programming language。19
3、87年,ansi公布了新標(biāo)準(zhǔn)87 ansi c。1990年,國(guó)際標(biāo)準(zhǔn)化組織接受了87 ansi c為iso c 的標(biāo)準(zhǔn)(iso98991990)。1994年,iso又修訂了c語(yǔ)言標(biāo)準(zhǔn)。目前流行的c語(yǔ)言編譯系統(tǒng)大多是以ansi c為基礎(chǔ)進(jìn)行開(kāi)發(fā)的。 1-1語(yǔ)言出現(xiàn)的歷史背景 不同版本的c編譯系統(tǒng)所實(shí)現(xiàn)的語(yǔ)言功能和語(yǔ)法規(guī)則又略有差別,因此讀者應(yīng)了解所用的c語(yǔ)言編譯系統(tǒng)的特點(diǎn)(可以參閱有關(guān)手冊(cè))。本書(shū)的敘述基本上以ansi c 為基礎(chǔ)。 1-2 語(yǔ)言的特點(diǎn)(1)語(yǔ)言簡(jiǎn)潔、緊湊,使用方便、靈活。 32個(gè)關(guān)鍵字、9種控制語(yǔ)句,程序形式自由(2)運(yùn)算符豐富。34種運(yùn)算符 (3)數(shù)據(jù)類型豐富,具有現(xiàn)代語(yǔ)言的
4、各種數(shù)據(jù)結(jié)構(gòu)。(4)具有結(jié)構(gòu)化的控制語(yǔ)句 ,是完全模塊化和結(jié)構(gòu)化的語(yǔ)言。 (5)語(yǔ)法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大。 1-2 語(yǔ)言的特點(diǎn)(6)允許直接訪問(wèn)物理地址,能進(jìn)行位操作,能實(shí)現(xiàn)匯編語(yǔ)言的大部分功能,可直接對(duì)硬件進(jìn)行操作。兼有高級(jí)和低級(jí)語(yǔ)言的特點(diǎn) 。(7)目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高。只比匯編程序生成的目標(biāo)代碼效率低10-20%。(8)程序可移植性好(與匯編語(yǔ)言比)?;旧喜蛔鲂薷木湍苡糜诟鞣N型號(hào)的計(jì)算機(jī)和各種操作系統(tǒng)。 1-2 語(yǔ)言的特點(diǎn)c+是由于開(kāi)發(fā)大型應(yīng)用軟件的需要而產(chǎn)生的,并不是所有的人都要去編寫(xiě)大型軟件;面向?qū)ο蟮幕A(chǔ)是面向過(guò)程。c+是面向?qū)ο蟮恼Z(yǔ)言,c是面向過(guò)程的,學(xué)起來(lái)比
5、c語(yǔ)言困難得多,所以不太適合程序設(shè)計(jì)的初學(xué)者。既然有了面向?qū)ο蟮募热挥辛嗣嫦驅(qū)ο蟮腸+c+語(yǔ)言,為什么還要學(xué)習(xí)語(yǔ)言,為什么還要學(xué)習(xí)c c語(yǔ)言?語(yǔ)言? 1-3 簡(jiǎn)單的c語(yǔ)言程序介紹#include void main( ) printf (this is a c program.n); /*文件包含*/*主函數(shù) */*函數(shù)體開(kāi)始*/*輸出語(yǔ)句*/*函數(shù)體結(jié)束*/ main-主函數(shù)名, void-函數(shù)類型每個(gè)c程序必須有一個(gè)主函數(shù)main 是函數(shù)開(kāi)始和結(jié)束的標(biāo)志,不可省每個(gè)c語(yǔ)句以分號(hào)結(jié)束使用標(biāo)準(zhǔn)庫(kù)函數(shù)時(shí)應(yīng)在程序開(kāi)頭一行寫(xiě): #include 說(shuō)明:說(shuō)明: 本程序的作用是輸出一行信息本程序的作用是
6、輸出一行信息: :this is a c program.this is a c program.例1.2 求兩數(shù)之和#include stdio#include .hvoid main( ) void main( ) / /* *求兩數(shù)之和求兩數(shù)之和* */ / int int a,b,sum; a,b,sum; / /* *聲明,定義變量為整型聲明,定義變量為整型* */ / / /* *以下以下3 3行為行為c c語(yǔ)句語(yǔ)句 * */ / a=123; b=456; a=123; b=456; sum=a+b; sum=a+b; printf printf(sum is %d(sum is
7、 %dn,sum);n,sum); /*/表示注釋。注釋只是給人看的,對(duì)編譯和運(yùn)行不起作用。所以可以用漢字或英文字符表示,可以出現(xiàn)在一行中的最右側(cè),也可以單獨(dú)成為一行。說(shuō)明:說(shuō)明: 輸出一行信息輸出一行信息:sum is 579:sum is 579例1.3 求3個(gè)數(shù)中較大者。#include stdio#include .hvoid main( ) void main( ) / /* * 主函數(shù)主函數(shù)* */ / int max(int x,int int max(int x,int y); y); / / 對(duì)被調(diào)用函數(shù)對(duì)被調(diào)用函數(shù)maxmax的聲明的聲明 * */ / int int a,
8、 b, c; a, b, c; / /* *定義變量定義變量a a、b b、c c * */ / scanfscanf(d,d,d,&a,&b); d,&a,&b); / /* *輸入變量輸入變量a a和和b b的值的值* */ / c=max(a,b); c=max(a,b); / /* *調(diào)用調(diào)用maxmax函數(shù)函數(shù), ,將得到的值賦給將得到的值賦給c c * */ / printfprintf(max=(max=dn,c); dn,c); / /* *輸出輸出c c的值的值* */ / 程序運(yùn)行情況如下程序運(yùn)行情況如下:8,5 8,5 ( (輸入輸入8 8和和5 5賦給賦給a a和和b)
9、b)max=8 (max=8 (輸出輸出c c的值的值) )int max(int x, int y) int z; if (xy) z=x; else z=y; return (z); max(int x,int y); max(max(a,a,b);b); 本程序包括main和被調(diào)用函數(shù)max兩個(gè)函數(shù)。max函數(shù)的作用是將x和y中較大者的值賦給變量z。return語(yǔ)句將z的值返回給主調(diào)函數(shù)main。 1-3 簡(jiǎn)單的c語(yǔ)言程序介紹(1) c程序是由函數(shù)構(gòu)成的。 這使得程序容易實(shí)現(xiàn)模塊化。 (2) 一個(gè)函數(shù)由兩部分組成: 函數(shù)的首部:例1.3中的max函數(shù)首部 int max(int x,in
10、t y ) 函數(shù)體:花括號(hào)內(nèi)的部分。若一個(gè)函數(shù)有多個(gè)花括號(hào),則最外層的一對(duì)花括號(hào)為函數(shù)體的范圍。 函數(shù)體包括兩部分 :聲明部分:int a,b,c; 可缺省執(zhí)行部分:由若干個(gè)語(yǔ)句組成。可缺省 1-3 簡(jiǎn)單的c語(yǔ)言程序介紹函數(shù)的聲明部分和執(zhí)行部分都可缺省,例如:void dump ( ) 這是一個(gè)空函數(shù),什么也不做,但是合法的函數(shù)。 1-3 簡(jiǎn)單的c語(yǔ)言程序介紹小結(jié)小結(jié):(3) c程序總是從main函數(shù)開(kāi)始執(zhí)行的,與main函數(shù)的位置無(wú)關(guān)。(4) c程序書(shū)寫(xiě)格式自由,一行內(nèi)可以寫(xiě)幾個(gè)語(yǔ)句, 一個(gè)語(yǔ)句可以分寫(xiě)在多行上,c程序沒(méi)有行號(hào)。(5) 每個(gè)語(yǔ)句和數(shù)據(jù)聲明的最后必須有一個(gè)分號(hào)。(6) c語(yǔ)言本
11、身沒(méi)有輸入輸出語(yǔ)句。輸入和輸出的操作是由庫(kù)函數(shù)scanf和printf等函數(shù)來(lái)完成的。c對(duì)輸入輸出實(shí)行“函數(shù)化”。 1-4 運(yùn)行程序的步驟和方法一、上機(jī)輸入與編輯源程序?qū)υ闯绦蜻M(jìn)行編譯與庫(kù)函數(shù)連接運(yùn)行目標(biāo)程序 1-4 運(yùn)行程序的步驟和方法l目前使用的大多數(shù)c編譯系統(tǒng)都是集成環(huán)境(ide)的。可以用不同的編譯系統(tǒng)對(duì)c程序進(jìn)行操作l常用的有turbo c 2.0、turbo c+ 3.0、visual c+等 lturbo c+ 3.0:是一個(gè)集成環(huán)境,它具有方便、直觀和易用的界面,雖然它也是dos環(huán)境下的集成環(huán)境,但是可以把啟動(dòng)turbo c+ 3.0 集成環(huán)境的dos執(zhí)行文件tc.exe生成快
12、捷方式,也可以用鼠標(biāo)操作。lvisual c+:也可以用visual c+對(duì)c程序進(jìn)行編譯。將turbo c+ 3.0編譯程序裝入磁盤(pán)某一目錄下,例如:放在c盤(pán)根目錄下一級(jí)tc3.0子目錄下。(1)進(jìn)入進(jìn)入turbo c+ 3.0集成環(huán)境集成環(huán)境在在dos環(huán)境下環(huán)境下 c:tc3.0tc 找到可執(zhí)行文件tc.exe,執(zhí)行該文件。 在編輯(edit) 狀態(tài)下光標(biāo)表示當(dāng)前進(jìn)行編輯的位置,在此位置可以進(jìn)行插入、刪除或修改,直到自已滿意為止。 保存:在編輯(edit) 狀態(tài)下光標(biāo)表示當(dāng)前進(jìn)行編輯的位置,在此位置可以進(jìn)行插入、刪除或修改,直到自已滿意為止。 (3) 對(duì)源程序進(jìn)行編譯對(duì)源程序進(jìn)行編譯選擇“
13、compile”(或“alt+f9”)對(duì)源程序進(jìn)行編譯。 c1.cpp源程序,出現(xiàn)1個(gè)錯(cuò)誤(error) ,0個(gè)警告(warming)。 (4) 將目標(biāo)程序進(jìn)行連接將目標(biāo)程序進(jìn)行連接 選擇菜單“compile” “l(fā)ink” ,如果不出現(xiàn)錯(cuò)誤,會(huì)得到一個(gè)后綴為.exe的可執(zhí)行文件。 (5) 執(zhí)行程序執(zhí)行程序。 選菜單“run” “run”( 或按“ctrl+f9” 鍵)。(6) 退出turbo c+ 3.0環(huán)境 選擇“file”“quit” 。 第二章l 本章要點(diǎn)本章要點(diǎn)l 主要內(nèi)容主要內(nèi)容2.1 2.1 算法的概念算法的概念2.2 2.2 簡(jiǎn)單算法舉例簡(jiǎn)單算法舉例2.3 2.3 算法的特性算
14、法的特性2.4 2.4 怎樣表示一個(gè)算法怎樣表示一個(gè)算法2.5 2.5 化程序設(shè)計(jì)方法化程序設(shè)計(jì)方法 一個(gè)程序應(yīng)包括兩個(gè)方面的內(nèi)容:對(duì)數(shù)據(jù)的描述:數(shù)據(jù)結(jié)構(gòu)(data structure)對(duì)操作的描述:算法(algorithm)著名計(jì)算機(jī)科學(xué)家沃思提出一個(gè)公式: 數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu) + 算法算法 = 程序程序數(shù)據(jù)結(jié)構(gòu)算法程序設(shè)計(jì)方法語(yǔ)言工具數(shù)據(jù)結(jié)構(gòu)算法程序設(shè)計(jì)方法語(yǔ)言工具完整的程序設(shè)計(jì)應(yīng)該是: 2.1 算法的概念 廣義地說(shuō),為解決一個(gè)問(wèn)題而采取的方法和步驟,就稱為“算法”。方法1:1+2,+3,+4,一直加到100 加99次方法2:100+(1+99)+(2+98)+(49 +51)+50 = 1
15、00 + 49100 +50 加51次對(duì)同一個(gè)問(wèn)題,可有不同的解題方法和步驟例: 求1001nn 2.1 算法的概念 為了有效地進(jìn)行解題,不僅需要保證算法正確,還要考慮算法的質(zhì)量,選擇合適的算法。希望方法簡(jiǎn)單,運(yùn)算步驟少。計(jì)算機(jī)算法可分為兩大類別:數(shù)值運(yùn)算算法:求數(shù)值解,例如求方程的根、求函數(shù)的定積分等。非數(shù)值運(yùn)算:包括的面十分廣泛,最常見(jiàn)的是用于事務(wù)管理領(lǐng)域,例如圖書(shū)檢索、人事管理、行車調(diào)度管理等。 2.2 簡(jiǎn)單算法舉例例例2.1: 求求12345 步驟1:先求12,得到結(jié)果2步驟2:將步驟1得到的乘積2再乘以3,得到結(jié)果6步驟3:將6再乘以4,得24步驟4:將24再乘以5,得120如果要求
16、如果要求1 12 210001000,則要寫(xiě),則要寫(xiě)999999個(gè)步驟個(gè)步驟 s1:使p=1 s2:使i=2 s3:使pi,乘積仍放在變量p中,可表示為:pip s4:使i的值加1,即i+1i。 s5:如果i不大于5,返回重新執(zhí)行步驟s3以及其后的步驟s4和s5;否則,算法結(jié)束。最后得到p的值就是5!的值??梢栽O(shè)兩個(gè)變量:可以設(shè)兩個(gè)變量:一個(gè)變量代表被乘數(shù),一個(gè)變量代表乘數(shù)。不另設(shè)變量存放乘積結(jié)果,而直接將每一步驟的乘積放在被乘數(shù)變量中。設(shè)p為被乘數(shù),i為乘數(shù)。用循環(huán)算法來(lái)求結(jié)果, 算法可改寫(xiě): s1:1ps2:3is3:pips4:i+2ps5:若i11,返回s3。否則,結(jié)束。 如果題目改為
17、:求1351000算法只需作很少的改動(dòng): 用這種方法表示的算法具有通用性、靈活性。s3到s5組成一個(gè)循環(huán),在實(shí)現(xiàn)算法時(shí) 要反復(fù)多次執(zhí)行s3,s4,s5等步驟,直到某一時(shí)刻,執(zhí)行s5步驟時(shí)經(jīng)過(guò)判斷,乘數(shù)i已超過(guò)規(guī)定的數(shù)值而不返回s3步驟為止。此時(shí)算法結(jié)束,變量p的值就是所求結(jié)果。例例2.2 有有50個(gè)學(xué)生,要求將他們之中成績(jī)?cè)趥€(gè)學(xué)生,要求將他們之中成績(jī)?cè)?0分以上者打印出來(lái)。設(shè)分以上者打印出來(lái)。設(shè)n表示表示學(xué)號(hào),學(xué)號(hào), n1代表第一個(gè)學(xué)生學(xué)號(hào),代表第一個(gè)學(xué)生學(xué)號(hào), 代表第代表第i個(gè)學(xué)生學(xué)號(hào)。用個(gè)學(xué)生學(xué)號(hào)。用g代表學(xué)生成代表學(xué)生成績(jī)績(jī) , gi代表第代表第i個(gè)學(xué)生成績(jī),算法表示如下個(gè)學(xué)生成績(jī),算法
18、表示如下: s1:1i s2:如果80,則打印和,否則不打印。 s3:i+1i s4:如果i50,返回s2,繼續(xù)執(zhí)行。否則算法結(jié)束 變量i作為下標(biāo),用來(lái)控制序號(hào)(第幾個(gè)學(xué)生,第幾個(gè)成績(jī))。當(dāng)i超過(guò)50時(shí),表示 已對(duì)50個(gè)學(xué)生的成績(jī)處理完畢,算法結(jié)束。例例2.3 判定判定20002500年中的每一年是否閏年,將結(jié)果輸出。年中的每一年是否閏年,將結(jié)果輸出。 變量變量i i作為下標(biāo),用來(lái)控制序號(hào)作為下標(biāo),用來(lái)控制序號(hào)( (第幾個(gè)學(xué)生,第幾個(gè)成績(jī)第幾個(gè)學(xué)生,第幾個(gè)成績(jī)) )。當(dāng)。當(dāng)i i超過(guò)超過(guò)5050時(shí),表示時(shí),表示 已對(duì)已對(duì)5050個(gè)學(xué)生的成績(jī)處理完畢,算法結(jié)束。個(gè)學(xué)生的成績(jī)處理完畢,算法結(jié)束。分
19、析:分析:閏年的條件是:(1)能被4整除,但不能被100整除的年份都是閏年,如1996,2004年是閏年;(2)能被100整除,又能被400整除的年份是閏年。如1600,2000年是閏年。不符合這兩個(gè)條件的年份不是閏年。 設(shè)y為被檢測(cè)的年份,算法可表示如下 :s1:2000ys2:若y不能被4整除,則輸出y “不是閏年”。然后轉(zhuǎn)到s6。s3:若y能被4整除,不能被100整除,則輸出y “是閏年”。然后轉(zhuǎn)到s6。s4:若y能被100整除,又能被400整除,輸出y“是閏年”,否則輸出“不是閏年”。 然后轉(zhuǎn)到s6。s5: 輸出y “不是閏年”。s6:y+1ys7:當(dāng)y2500時(shí),轉(zhuǎn)s2繼續(xù)執(zhí)行,如y
20、2500,算法停止。 以上算法中每做一步都分別分離出一些范圍(巳能判定為閏年或非閏年),逐步縮小范圍,直至執(zhí)行s5時(shí),只可能是非閏年?!捌渌?包括能被4整除,又能被100整除,而不能被400整除的那些年份(如1990) 是非閏年。例例2.4 求求算法如下 :1001991.4131211 s1:sign=1 s2:sum=1 s3:deno=2 s4:sign=(-1)sign s5:term=sign(1/deno) s6:sum=sum+term s7:deno=deno+1 s8:若deno100返回s4,否則算法結(jié)束。單詞作變量名,以使算法更易于理解:sum表示累加和,deno是英文
21、分母(denom inator)縮寫(xiě),sign代表數(shù)值的符號(hào),term代表某一項(xiàng)。 反復(fù)執(zhí)行s4到s8步驟,直到分母大于100為止。一共執(zhí)行了99次循環(huán),向sum累加入了99個(gè)分?jǐn)?shù)。sum最后的值就是多項(xiàng)式的值。 例例2.5 對(duì)一個(gè)大于或等于對(duì)一個(gè)大于或等于3的正整數(shù),判斷它是不是一個(gè)素?cái)?shù)。的正整數(shù),判斷它是不是一個(gè)素?cái)?shù)。 概念:概念:所謂素?cái)?shù),是指除了1和該數(shù)本身之外,不能被其它任何整數(shù)整除的數(shù)。例如,13是素?cái)?shù)。因?yàn)樗荒鼙?,3,4,12整除。分析:分析:判斷一個(gè)數(shù)n(n3)是否素?cái)?shù)的方法: 將n作為被除數(shù),將2到(n-1)各個(gè)整數(shù)輪流作為除數(shù),如果都不能被整除,則n為素?cái)?shù)。 算法如下
22、:s1:輸入n的值s2:i=2 (i作為除數(shù))s3:n被i除,得余數(shù)rs4:如果r=0,表示n能被i整除,則打印n“不是素?cái)?shù)”,算法結(jié)束。否則執(zhí)行s5s5:i+1is6:如果in-1,返回s3。否則打印 n “是素?cái)?shù)”。然后結(jié)束。 實(shí)際上,n不必被2到(n-1)的整數(shù)除,只需被2到n/2間整數(shù)除,甚至只需被2到 之間的整數(shù)除即可。n 2.3 算法的特性有窮性:包含有限的操作步驟確定性:算法中的每一個(gè)步驟都應(yīng)當(dāng)是確定的 有零個(gè)或多個(gè)輸入:輸入是指在執(zhí)行算法時(shí)需要從外界取得必要的信息 有一個(gè)或多個(gè)輸出:算法的目的是為了求解,“解” 就是輸出 有效性:算法中的每一個(gè)步驟都應(yīng)當(dāng)能有效地執(zhí)行,并得到確定
23、的結(jié)果 。一個(gè)算法應(yīng)該具有以下特點(diǎn):一個(gè)算法應(yīng)該具有以下特點(diǎn): 2.4 算法的表示可以用不同的方法表示算法,常用的有:自然語(yǔ)言傳統(tǒng)流程圖結(jié)構(gòu)化流程圖偽代碼pad圖 2.4.1 用自然語(yǔ)言表示算法 自然語(yǔ)言就是人們?nèi)粘J褂玫恼Z(yǔ)言,可以是漢語(yǔ)或英語(yǔ)或其它語(yǔ)言。用自然語(yǔ)言表示通俗易懂,但文字冗長(zhǎng),容易出現(xiàn)“歧義性”。自然語(yǔ)言表示的含義往往不大嚴(yán)格,要根據(jù)上下文才能判斷其正確含義,描述包含分支和循環(huán)的算法時(shí)也不很方便。因此,除了那些很簡(jiǎn)單的問(wèn)題外,一般不用自然語(yǔ)言描述算法。 2.4.2 用流程圖表示算法美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)ansi(american national standard institute
24、)規(guī)定了一些常用的流程圖符號(hào):起止框起止框判斷框判斷框處理框處理框輸入輸入/輸出框輸出框注釋框注釋框流向線流向線連接點(diǎn)連接點(diǎn)例例2.6 將求將求5!的算法用流程圖表示的算法用流程圖表示如果需要將最后結(jié)果打印出來(lái),可在菱形框的下面加一個(gè)輸出框。 例例2.7 將例將例2.2的算法用流程圖表的算法用流程圖表示。打印示。打印50名名 學(xué)生中成績(jī)?cè)趯W(xué)生中成績(jī)?cè)?0分分以上者的學(xué)號(hào)和成績(jī)。以上者的學(xué)號(hào)和成績(jī)。如果如果包括這個(gè)輸入數(shù)據(jù)的部分,流程圖為 例例2.8 將例將例2.3判定判定閏年的算法用流程閏年的算法用流程圖表示圖表示 用流程圖表示算法要比用文字描述算法邏輯清晰、易于理解。 例例2.9 將例將例2
25、.4的算法用流程圖表示的算法用流程圖表示 1001991.4131211 例例2.10 將例將例2.5判斷素?cái)?shù)的算法用流程圖判斷素?cái)?shù)的算法用流程圖表示表示 小結(jié): 流程圖是表示算法的較好的工具。一個(gè)流程圖包括以下幾部分 :(1)表示相應(yīng)操作的框;(2)帶箭頭的流程線;(3)框內(nèi)外必要的文字說(shuō)明。 2.4.3 三種基本結(jié)構(gòu)和改進(jìn)的流程圖1、傳統(tǒng)流程圖的弊端 傳統(tǒng)流程圖用流程線指出各框的執(zhí)行順序,對(duì)流程線的使用沒(méi)有嚴(yán)格限制。因此,使用者可以毫不受限制地使流程隨意地轉(zhuǎn)向,使流程圖變得毫無(wú)規(guī)律,閱讀者要花很大精力去追蹤流程,使人難以理解算法的邏輯。如圖:傳統(tǒng)流程圖的流程可以是: 這種如同亂麻一樣的算法
26、稱為bs型算法,意為一碗面條(a bowl of spaghetti),亂無(wú)頭緒。缺點(diǎn):難以閱讀、修改,使算法的可靠性和可維護(hù)性難以保證。解決辦法:必須限制箭頭的濫用,即不允許無(wú)規(guī)律地使流程隨意轉(zhuǎn)向,只能順序地進(jìn)行下去。 2、三種基本結(jié)構(gòu) bohra和jacopini提出了以下三種基本結(jié)構(gòu): 順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu) 用這三種基本結(jié)構(gòu)作為表示一個(gè)良好算法的基本單元。三種基本結(jié)構(gòu)的圖示: 順序結(jié)構(gòu)順序結(jié)構(gòu)選擇結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)循環(huán)結(jié)構(gòu)的圖示: 當(dāng)型當(dāng)型(while型型)循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu) 直到型直到型(until型型)循環(huán)循環(huán) 三種基本結(jié)構(gòu)的共同特點(diǎn):(1)只有一個(gè)入
27、口; (2)只有一個(gè)出口;(請(qǐng)注意:一個(gè)菱形判斷框有兩個(gè)出口,而一個(gè)選擇結(jié)構(gòu)只有一個(gè)出口。不要將菱形框的出口和選擇結(jié)構(gòu)的出口混淆。)(3)結(jié)構(gòu)內(nèi)的每一部分都有機(jī)會(huì)被執(zhí)行到;(4)結(jié)構(gòu)內(nèi)不存在“死循環(huán)”(無(wú)終止的循環(huán))。 圖中沒(méi)有一條從入口到出口的路徑通過(guò)a框。不正確的流程表示:流程內(nèi)的死循環(huán)小結(jié): 由三種基本結(jié)構(gòu)順序組成的算法結(jié)構(gòu),可以解決任何復(fù)雜的問(wèn)題。由基本結(jié)構(gòu)所構(gòu)成的算法屬于“結(jié)構(gòu)化”的算法,它不存在無(wú)規(guī)律的轉(zhuǎn)向,只在本基本結(jié)構(gòu)內(nèi)才允許存在分支和向前或向后的跳轉(zhuǎn)。擴(kuò)展: 只要具有上述四個(gè)特點(diǎn)的都可以作為基本結(jié)構(gòu)??梢宰约憾x基本結(jié)構(gòu),并由這些基本結(jié)構(gòu)組成結(jié)構(gòu)化程序。此圖符合基本結(jié)構(gòu)的特點(diǎn)
28、 這是一個(gè)多分支選擇結(jié)構(gòu),根據(jù)表達(dá)式的值決定執(zhí)行路線。虛線框內(nèi)的結(jié)構(gòu)是一個(gè)入口一個(gè)出口,并且有上述全部的四個(gè)特點(diǎn)。由此構(gòu)成的算法結(jié)構(gòu)也是結(jié)構(gòu)化的算法??梢哉J(rèn)為這是由三種基本結(jié)構(gòu)所派生出來(lái)的。 2.4.4 用n-s流程圖表示算法 1973年美國(guó)學(xué)者i.nassi和b.shneiderman提出了一種新的流程圖形式。在這種流程圖中,完全去掉了帶箭頭的流程線。全部算法寫(xiě)在一個(gè)矩形框內(nèi),在該框內(nèi)還可以包含其它的從屬于它的框,或者說(shuō),由一些基本的框組成一個(gè)大的框。這種流程圖又稱n-s結(jié)構(gòu)化流程圖 。 n-s流程圖用以下的流程圖符號(hào): (1)順序結(jié)構(gòu)(2)選擇結(jié)構(gòu)(3)循環(huán)結(jié)構(gòu) 用三種n-s流程圖中的基本
29、框,可以組成復(fù)雜的n-s流程圖。圖中的a框或b框,可以是一個(gè)簡(jiǎn)單的操作,也可以是三個(gè)基本結(jié)構(gòu)之一。 a框可以是一個(gè)選擇結(jié)構(gòu) b框可以是一個(gè)循環(huán)結(jié)構(gòu) 例例2.11 將例將例2.1的求的求5!算算法用法用n-s圖表示圖表示例例2.12 將例將例2.2的算法用的算法用n-s圖表示。(打印圖表示。(打印50名學(xué)生中成績(jī)高于名學(xué)生中成績(jī)高于80分的學(xué)號(hào)和成績(jī))分的學(xué)號(hào)和成績(jī))沒(méi)有輸入數(shù)據(jù)例例2.12 將例將例2.2的算法用的算法用n-s圖表示。(打印圖表示。(打印50名學(xué)生中成績(jī)高于名學(xué)生中成績(jī)高于80分的學(xué)號(hào)和成績(jī))分的學(xué)號(hào)和成績(jī))有輸入數(shù)據(jù)例例2.13 將例將例2.3判定閏判定閏年的算法用年的算法用
30、n-s圖表示圖表示例例2.14 將例將例2.4的算法用的算法用n-s圖表圖表示示1001991.4131211例例2.15 將例將例2.5判別素?cái)?shù)的算法用判別素?cái)?shù)的算法用n-s流程圖表示。流程圖表示。傳統(tǒng)流程圖分析:出口出口1出口出口2此圖不符合基本結(jié)構(gòu)特點(diǎn)!由于不能分解為三種基本結(jié)構(gòu),就無(wú)法直接用n-s流程圖的三種基本結(jié)構(gòu)的符號(hào)來(lái)表示。因此,應(yīng)當(dāng)先作必要的變換。例例2.15 將例將例2.5判別素?cái)?shù)的算法用判別素?cái)?shù)的算法用n-s流程圖表示。流程圖表示。傳統(tǒng)流程圖變換為:一個(gè)出口一個(gè)出口用用n-s流程圖表示:流程圖表示:n-s圖表示算法的優(yōu)點(diǎn) 比文字描述直觀、形象、 易于理解;比傳統(tǒng)流程圖緊湊易
31、畫(huà)。尤其是它廢除了流程線,整個(gè)算法結(jié)構(gòu)是由各個(gè)基本結(jié)構(gòu)按順序組成的,n-s流程圖中的上下順序就是執(zhí)行時(shí)的順序。用n-s圖表示的算法都是結(jié)構(gòu)化的算法,因?yàn)樗豢赡艹霈F(xiàn)流程無(wú)規(guī)律的跳轉(zhuǎn),而只能自上而下地順序執(zhí)行。小結(jié): 一個(gè)結(jié)構(gòu)化的算法是由一些基本結(jié)構(gòu)順序組成的。在基本結(jié)構(gòu)之間不存在向前或向后的跳轉(zhuǎn),流程的轉(zhuǎn)移只存在于一個(gè)基本結(jié)構(gòu)范圍之內(nèi)(如循環(huán)中流程的跳轉(zhuǎn));一 個(gè)非結(jié)構(gòu)化的算法可以用一個(gè)等價(jià)的結(jié)構(gòu)化算法代替,其功能不變 。如果一個(gè)算法不能分解為若干個(gè)基本結(jié)構(gòu),則它必然不是一個(gè)結(jié)構(gòu)化的算法。 2.4.5 用位代碼表示算法概念:偽代碼是用介于自然語(yǔ)言和計(jì)算機(jī)語(yǔ)言之間的文字和符號(hào)來(lái)描述算法。特點(diǎn):它
32、如同一篇文章一樣 ,自上而下地寫(xiě)下來(lái)。每一行(或幾行)表示一個(gè)基本操作。它不用圖形符號(hào),因此書(shū)寫(xiě)方便 、格式緊湊,也比較好懂,也便于向計(jì)算機(jī)語(yǔ)言算法(即程序)過(guò)渡。用處:適用于設(shè)計(jì)過(guò)程中需要反復(fù)修改時(shí)的流程描述。 if x is positive then print x else print -x也可以用漢字偽代碼表示:也可以用漢字偽代碼表示: 若若 x為正為正 打印打印 x 否則否則 打印打印 -x也可以中英文混用,如:也可以中英文混用,如: if x 為正為正 print x else print -x例: “打印x的絕對(duì)值”的算法可以用偽代碼表示為:開(kāi)始開(kāi)始 置置t的初值為的初值為1
33、置置i的初值為的初值為2 當(dāng)當(dāng)i=5,執(zhí)行下面操作:,執(zhí)行下面操作: 使使t=ti 使使i=i+1 循環(huán)體到此結(jié)束循環(huán)體到此結(jié)束 輸出輸出t的值的值 結(jié)束結(jié)束也可以寫(xiě)成以下形式:也可以寫(xiě)成以下形式: begin算法開(kāi)始算法開(kāi)始 1t 2 i while i5 ti t i+1 i print t end算法結(jié)束算法結(jié)束例例2.16 求求5!。用偽代碼表示算法:。用偽代碼表示算法:例例2.17 輸出輸出50個(gè)學(xué)生中成績(jī)高于個(gè)學(xué)生中成績(jī)高于80分者的學(xué)號(hào)和成績(jī)。分者的學(xué)號(hào)和成績(jī)。用偽代碼表示算法:用偽代碼表示算法:begin算法開(kāi)始算法開(kāi)始 1 i while i50 input and i+1
34、i 1 i while i50 if 80 print and i+1 i end算法結(jié)束算法結(jié)束 2.4.6 用計(jì)算機(jī)語(yǔ)言表示算法概念:用計(jì)算機(jī)實(shí)現(xiàn)算法。計(jì)算機(jī)是無(wú)法識(shí)別流程圖和偽代碼的。只有用計(jì)算機(jī)語(yǔ)言編寫(xiě)的程序才能被計(jì)算機(jī)執(zhí)行。因此在用流程圖或偽代碼描述出一個(gè)算法后,還要將它轉(zhuǎn)換成計(jì)算機(jī)語(yǔ)言程序。 特點(diǎn):用計(jì)算機(jī)語(yǔ)言表示算法必須嚴(yán)格遵循所用的語(yǔ)言的語(yǔ)法規(guī)則,這是和偽代碼不同的。用處:要完成一件工作,包括設(shè)計(jì)算法和實(shí)現(xiàn)算法兩個(gè)部分。設(shè)計(jì)算法的目的是為了實(shí)現(xiàn)算法。#include void main( ) int i,t; t=1; i=2; while(i=5) t=t*i; i=i+1;
35、 printf(“%dn”,t); 例例 2.20 將例將例2.16表示的算法(求表示的算法(求5!)用)用c語(yǔ)言表示。語(yǔ)言表示。應(yīng)當(dāng)強(qiáng)調(diào)說(shuō)明:寫(xiě)出了c程序,仍然只是描述了算法,并未實(shí)現(xiàn)算法。只有運(yùn)行程序才是實(shí)現(xiàn)算法。應(yīng)該說(shuō),用計(jì)算機(jī)語(yǔ)言表示的算法是計(jì)算機(jī)能夠執(zhí)行的算法。 2.5 結(jié)構(gòu)化程序設(shè)計(jì)方法一個(gè)結(jié)構(gòu)化程序 就是用高級(jí)語(yǔ)言表示的結(jié)構(gòu)化算法。用三種基本結(jié)構(gòu)組成的程序必然是結(jié)構(gòu)化的程序,這種程序便于編寫(xiě)、便于閱讀、便于修改和維護(hù)。 結(jié)構(gòu)化程序設(shè)計(jì)強(qiáng)調(diào)程序設(shè)計(jì)風(fēng)格和程序結(jié)構(gòu)的規(guī)范化,提倡清晰的結(jié)構(gòu)。結(jié)構(gòu)化程序設(shè)計(jì)方法的基本思路是:把一個(gè)復(fù)雜問(wèn)題的求解過(guò)程 分階段進(jìn)行,每個(gè)階段處理的問(wèn)題都控制在
36、人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi)。 2.5 結(jié)構(gòu)化程序設(shè)計(jì)方法采取以下方法來(lái)保證得到結(jié)構(gòu)化的程序:自頂向下;逐步細(xì)化;模塊化設(shè)計(jì);結(jié)構(gòu)化編碼。兩種不同的方法:自頂向下,逐步細(xì)化;自下而上,逐步積累。 用這種方法逐步分解,直到作者認(rèn)為可以直接將各小段表達(dá)為文字語(yǔ)句為止。這種方法就叫 做“自頂向下,逐步細(xì)化”。 自頂向下,逐步細(xì)化方法的優(yōu)點(diǎn): 考慮周全,結(jié)構(gòu)清晰,層次分明,作者容易寫(xiě),讀者容易看。如果發(fā)現(xiàn)某一部分中有一段內(nèi)容不妥,需要修改,只需找出該部分修改有關(guān)段落即可,與其它部分無(wú)關(guān)。我們提倡用這種方法設(shè)計(jì)程序。這就是用工程的方法設(shè)計(jì)程序。模塊設(shè)計(jì)的方法:模塊化設(shè)計(jì)的思想實(shí)際上是一種“分而治之”的思想
37、,把一個(gè)大任務(wù)分為若干個(gè)子任務(wù),每一個(gè)子任務(wù)就相對(duì)簡(jiǎn)單了。在拿到一個(gè)程序模塊以后,根據(jù)程序模塊的功能將它劃分為若干個(gè)子模塊,如果這些子模塊的規(guī)模還嫌大,還再可以劃分為更小的模塊。這個(gè)過(guò)程采用自頂向下方法來(lái)實(shí)現(xiàn)。子模塊一般不超過(guò)50行劃分子模塊時(shí)應(yīng)注意模塊的獨(dú)立性,即:使一個(gè)模塊完成一項(xiàng)功能,耦合性愈少愈好。 第三章l 本章要點(diǎn)本章要點(diǎn)l 主要內(nèi)容主要內(nèi)容3.1 c3.1 c的數(shù)據(jù)類型的數(shù)據(jù)類型3.2 3.2 常量與變量常量與變量3.3 3.3 整型數(shù)據(jù)整型數(shù)據(jù)3.4 3.4 浮點(diǎn)型數(shù)據(jù)運(yùn)行浮點(diǎn)型數(shù)據(jù)運(yùn)行3.5 3.5 字符型數(shù)據(jù)字符型數(shù)據(jù) l 主要內(nèi)容主要內(nèi)容3. 3.變量賦初值變量賦初值 3
38、.7 3.7 各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算 3.8 3.8 算術(shù)運(yùn)算符和算術(shù)表達(dá)式算術(shù)運(yùn)算符和算術(shù)表達(dá)式 3.9 3.9 賦值運(yùn)算符和賦值表達(dá)式賦值運(yùn)算符和賦值表達(dá)式 3.10 3.10 逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式 3.1 c的數(shù)據(jù)類型c語(yǔ)言提供了以下一些數(shù)據(jù)類型。 3.2 常量與變量3.2.1 常量和符號(hào)常量常量和符號(hào)常量在程序運(yùn)行過(guò)程中,其值不能被改變的量稱為常量常量區(qū)分為不同的類型:整型 100,125,-100,0實(shí)型 3.14 , 0.125,-3.789字符型 a, b,2字符串 a, ab,1232例3.1 符號(hào)常量的使用#define
39、price 30#define price 30#include #include void main ( )void main ( ) int num, total;int num, total; num=10;num=10; total=num total=num * * price; price; printfprintf(total=%dn,total);(total=%dn,total); 程序中用#define命令行定義price代表常量30,此后凡在本文件中出現(xiàn)的price都代表30,可以和常量一樣進(jìn)行運(yùn)算用一個(gè)標(biāo)識(shí)符代表一個(gè)常量的,稱為符號(hào)常量,即以標(biāo)識(shí)符形式出現(xiàn)的常量。符號(hào)常
40、量的值在其作用域(在本例中為主函數(shù))內(nèi)不能改變,也不能再被賦值。 如再用賦值語(yǔ)句給price賦值是錯(cuò)誤的。 price=40; /* 錯(cuò)誤,不能給符號(hào)常量賦值。 運(yùn)行結(jié)果:運(yùn)行結(jié)果: total=300total=300 3.2 常量與變量3.2.2變量變量變量代表內(nèi)存中具有特定屬性的一個(gè)存儲(chǔ)單元,它用來(lái)存放數(shù)據(jù),這就是變量的值,在程序運(yùn)行期間,這些值是可以改變的。變量名實(shí)際上是一個(gè)以一個(gè)名字對(duì)應(yīng)代表一個(gè)地址,在對(duì)程序編譯連接時(shí)由編譯系統(tǒng)給每一個(gè)變量名分配對(duì)應(yīng)的內(nèi)存地址。從變量中取值,實(shí)際上是通過(guò)變量名找到相應(yīng)的內(nèi)存地址,從該存儲(chǔ)單元中讀取數(shù)據(jù)。圖 3.2 常量與變量 變量命名的規(guī)定:語(yǔ)言規(guī)定
41、標(biāo)識(shí)符只能由字母、數(shù)字和下劃線三種字符組成,且第一個(gè)字符必須為字母或下劃線。 例:例:sum,_total, month, student_name, lotus_1_2_,basic, li_ling m.d.john, ¥123,3d64,ab 3.2 常量與變量編譯系統(tǒng)將大寫(xiě)字母和小寫(xiě)字母認(rèn)為是兩個(gè)不同的字符。 建議變量名的長(zhǎng)度最好不要超過(guò)8個(gè)字符。在選擇變量名和其它標(biāo)識(shí)符時(shí),應(yīng)注意做到“見(jiàn)名知意”,即選有含意的英文單詞 (或其縮寫(xiě))作標(biāo)識(shí)符。要求對(duì)所有用到的變量作強(qiáng)制定義,也就是“先定義,后使用” 。 3.3 整型數(shù)據(jù)3.3.1整型常量的表示方法整型常量的表示方法 整型常量即整常數(shù)。在
42、語(yǔ)言中,整常數(shù)可用以下三種形式表示:(1)十進(jìn)制整數(shù)。 如:如:123, -456.4。(2)八進(jìn)制整數(shù)。以0頭的數(shù)是八進(jìn)制數(shù)。 如:如:0123表示八進(jìn)制數(shù)123,等于十進(jìn)制數(shù)83,-011表示八進(jìn)制數(shù)-11,即十進(jìn)制數(shù)-9。 3.3 整型數(shù)據(jù)(3)十六進(jìn)制整數(shù)。以0 x開(kāi)頭的數(shù)是16進(jìn)制數(shù)。 如:如:0 x123,代表16進(jìn)制數(shù)123,等于十進(jìn)制數(shù) 291。 -0 x12等于十進(jìn)制數(shù)10。 3.3.2 整型變量整型變量 (1)(1)整型數(shù)據(jù)在內(nèi)存中的存放形式整型數(shù)據(jù)在內(nèi)存中的存放形式 數(shù)據(jù)在內(nèi)存中是以二進(jìn)制形式存放的。 如如: : int i; /* 定義為整型變量 */ i=10; /*
43、 給i賦以整數(shù)10 */ 圖3.3 整型數(shù)據(jù)十進(jìn)制數(shù)10的二進(jìn)制形式為1010,turbo c 2.0和turbo c+ 3.0為一個(gè)整型變量在內(nèi)存中分配2個(gè)字節(jié)的存儲(chǔ)單元(不同的編譯系統(tǒng)為整型數(shù)據(jù)分配的字節(jié)數(shù)是不相同的,vc+ 6.0則分配4個(gè)字節(jié))。數(shù)值是以補(bǔ)碼(complement) 表示的。 3.3 整型數(shù)據(jù)(2)(2)整型變量的分類:整型變量的分類:共六種共六種有符號(hào)基本整型有符號(hào)短整型有符號(hào)長(zhǎng)整型無(wú)符號(hào)基本整型無(wú)符號(hào)短整型無(wú)符號(hào)長(zhǎng)整型(signed)int (signed)short (int )(signed) long (int)unsigned intunsigned sho
44、rt (int)unsigned long (int) 注意:注意:括號(hào)表示其中的內(nèi)容是可選的. 3.3 整型數(shù)據(jù)整數(shù)類型的有關(guān)數(shù)據(jù): 3.3 整型數(shù)據(jù)(3)(3)整型變量的定義整型變量的定義: : 規(guī)定在程序中所有用到的變量都必須在程序中定義,即“強(qiáng)制類型定義”。 例如例如: : intint a,b a,b(指定變量、為整型) unsigned short c,d;unsigned short c,d;(指定變量、為無(wú)符號(hào)短整型) long e,f;long e,f;(指定變量、為長(zhǎng)整型)例3.2 整型變量的定義與使用#include stdio#include .hvoid main()
45、() int a,b,c,d; /*指定、為整指定、為整型變量型變量* unsigned ; *指定為無(wú)符號(hào)整型變指定為無(wú)符號(hào)整型變量量* 12;-24;10; ; printf(,);,); 可以看到不同種類的整型數(shù)據(jù)可以進(jìn)行算術(shù)運(yùn)算 運(yùn)行結(jié)果:運(yùn)行結(jié)果: , 例3.3 整型數(shù)據(jù)的溢出#include #include void main()void main()int a,b; int a,b; a=32767; a=32767; b=a+1; b=a+1; printf printf(“%d,%dn”,a,b);(“%d,%dn”,a,b); 數(shù)值是以補(bǔ)碼表示的。一個(gè)整型變量只能容納-3
46、276832767范圍內(nèi)的數(shù),無(wú)法表示大于32767或小于-32768的數(shù)。遇此情況就發(fā)生“溢出”。運(yùn)行結(jié)果:運(yùn)行結(jié)果: 32767,-3276832767,-32768 3.3 整型數(shù)據(jù)3.3.3 整型常量的類型整型常量的類型 (1)一個(gè)整數(shù),如果其值在-32768+32767范圍內(nèi),認(rèn)為它是int型,它可以賦值給int型和long int型變量。 (2) 一個(gè)整數(shù),如果其值超過(guò)了上述范圍,而在-2147483637+2147483647范圍內(nèi),則認(rèn)為它是為長(zhǎng)整型。可以將它賦值給一個(gè)long int型變量。 3.3 整型數(shù)據(jù)(3) 如果所用的c版本(如turbo c)分配給short int
47、與int型數(shù)據(jù)在內(nèi)存中占據(jù)的長(zhǎng)度相同,則它的表數(shù)范圍與int型相同。因此一個(gè)int型的常量同時(shí)也是一個(gè)short int型常量,可以賦給int型或short int型變量。 3.3 整型數(shù)據(jù)(4) 一個(gè)整常量后面加一個(gè)字母u或u,認(rèn)為是unsigned int型,如12345u,在內(nèi)存中按unsigned int規(guī)定的方式存放(存儲(chǔ)單元中最高位不作為符號(hào)位,而用來(lái)存儲(chǔ)數(shù)據(jù))。如果寫(xiě)成-12345u,則先將-12345轉(zhuǎn)換成其補(bǔ)碼53191,然后按無(wú)符號(hào)數(shù)存儲(chǔ)。 3.3 整型數(shù)據(jù)(5) 在一個(gè)整常量后面加一個(gè)字母l或l,則認(rèn)為是long int型常量。例如123l.432l.0l等。這往往用于函
48、數(shù)調(diào)用中。如果函數(shù)的形參為long int型,則要求實(shí)參也為long int型。 3.4 浮點(diǎn)型數(shù)據(jù)3.4.13.4.1浮點(diǎn)型常量的表示方法浮點(diǎn)型常量的表示方法兩種表兩種表示形式示形式小數(shù)小數(shù)指數(shù)指數(shù)0.1230.1233e-33e-3注意注意: :字母e(或e)之前必須有數(shù)字,且e后面的指數(shù)必須為整數(shù) 3.4 浮點(diǎn)型數(shù)據(jù)規(guī)范化的指數(shù)形式:規(guī)范化的指數(shù)形式: 在字母e(或e)之前的小數(shù)部分中,小數(shù)點(diǎn)左邊應(yīng)有一位(且只能有一位)非零的數(shù)字. 例如例如: : 123.456可以表示為: 123.456e0, 12.3456e1, 1.23456e2, 0.123456e3, 0.0123456e4
49、, 0.00123456e 其中的1.23456e31.23456e3稱為“規(guī)范化的指數(shù)形式”。 3.4 浮點(diǎn)型數(shù)據(jù)3.4.2 浮點(diǎn)型變量浮點(diǎn)型變量(1)(1)浮點(diǎn)型數(shù)據(jù)在內(nèi)存中的存放形式浮點(diǎn)型數(shù)據(jù)在內(nèi)存中的存放形式 一個(gè)浮點(diǎn)型數(shù)據(jù)一般在內(nèi)存中占4個(gè)字節(jié)(32位)。與整型數(shù)據(jù)的存儲(chǔ)方式不同,浮點(diǎn)型數(shù)據(jù)是按照指數(shù)形式存儲(chǔ)的。系統(tǒng)把一個(gè)浮點(diǎn)型數(shù)據(jù)分成小數(shù)部分和指數(shù)部分,分別存放。指數(shù)部分采用規(guī)范化的指數(shù)形式。圖 3.4 浮點(diǎn)型數(shù)據(jù)(2) (2) 浮點(diǎn)型變量的分類浮點(diǎn)型變量的分類 浮點(diǎn)型變量分為單精度(float型)、雙精度(double型)和長(zhǎng)雙精度型(long double)三類形式。例3.4
50、浮點(diǎn)型數(shù)據(jù)的舍入誤差#include #include void main()void main()float a,b;float a,b; a = 123456.789e5; a = 123456.789e5; b = a + 20 ; b = a + 20 ; printf printf(“%fn”,b);(“%fn”,b); 一個(gè)浮點(diǎn)型變量只能保證的有效數(shù)字是7位有效數(shù)字,后面的數(shù)字是無(wú)意義的,并不準(zhǔn)確地表示該數(shù)。應(yīng)當(dāng)避免將一個(gè)很大的數(shù)和一個(gè)很小的數(shù)直接相加或相減,否則就會(huì)“丟失”小的數(shù)運(yùn)行結(jié)果:運(yùn)行結(jié)果: 123456.789e5123456.789e5 3.4 浮點(diǎn)型數(shù)據(jù)3.4.3
51、浮點(diǎn)型常量的類型浮點(diǎn)型常量的類型 c編譯系統(tǒng)將浮點(diǎn)型常量作為雙精度來(lái)處理。 例如例如:f = 2.45678 * 4523.65 系統(tǒng)先把2.45678和4523.65作為雙精度數(shù),然后進(jìn)行相乘的運(yùn)算,得到的乘也是一個(gè)雙精度數(shù)。最后取其前7位賦給浮點(diǎn)型變量f。如是在數(shù)的后面加字母f或f(如1.65f, 654.87f),這樣編譯系統(tǒng)就會(huì)把它們按單精度(32位)處理。 3.5字符型數(shù)據(jù) 3.5.1 字符常量字符常量(1)用單引號(hào)包含的一個(gè)字符是字符型常量(2)只能包含一個(gè)字符a,a, 1a,a, 1abcabc、“a”a” 3.5字符型數(shù)據(jù) 有些以有些以“”開(kāi)頭的特殊字符稱為轉(zhuǎn)義字符開(kāi)頭的特殊字
52、符稱為轉(zhuǎn)義字符n 換行t 橫向跳格r 回車 反斜杠ddd ddd表示1到3位八進(jìn)制數(shù)字xhh hh表示1到2位十六進(jìn)制數(shù)字例3.5 轉(zhuǎn)義字符的使用#include stdio#include .hvoid void ()() ( ab ct ab ct derftgnderftgn); ; printf(htibbj printf(htibbj kn); kn);打印機(jī)上的顯示結(jié)果:打印機(jī)上的顯示結(jié)果: fab c gde h jik顯示屏上顯示屏上的運(yùn)行結(jié)果:的運(yùn)行結(jié)果: f gde j k 3.5字符型數(shù)據(jù) 3.5.2字符變量字符變量字符型變量用來(lái)存放字符常量,注意只能放一個(gè)字符。字符變量
53、的定義形式如下:char c1,c2;在本函數(shù)中可以用下面語(yǔ)句對(duì)c1,c2賦值: c1a;c2 b ;一個(gè)字符變量在內(nèi)存中占一個(gè)字節(jié)。 3.5字符型數(shù)據(jù) 3.5.3字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式及其使用方法字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式及其使用方法將一個(gè)字符常量放到一個(gè)字符變量中,實(shí)際上并不是把該字符本身放到內(nèi)存單元中去,而是將該字符的相應(yīng)的ascii代碼放到存儲(chǔ)單元中。圖這樣使字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用。一個(gè)字符數(shù)據(jù)既可以以字符形式輸出,也可以以整數(shù)形式輸出。例3.6 向字符變量賦以整數(shù)。 #include #include void main()void main() char c1,c2;
54、 char c1,c2; c1=97; c1=97; c2=98; c2=98; printf(“%c %cn”,c1,c2); printf(“%c %cn”,c1,c2); printf printf(“%d %dn”,c1,c2);(“%d %dn”,c1,c2); 在第和第4行中,將整數(shù)和分別賦給c1和c2,它的作用相當(dāng)于以下兩個(gè)賦值語(yǔ)句:c1;c2;因?yàn)閍和b的ascii碼為和運(yùn)行結(jié)果:運(yùn)行結(jié)果: 97 9897 98例3.7 大小寫(xiě)字母的轉(zhuǎn)換 #include #include void main()void main() char c1,c2 char c1,c2; c1=a;c
55、1=a; c2=b; c2=b;c1=c1-32;c1=c1-32;c2=c2-32;c2=c2-32; printf printf(“(“c c cc,c1,c2c1,c2);); 程序的作用是將兩個(gè)小寫(xiě)字母a和b轉(zhuǎn)換成大寫(xiě)字母a和b。從代碼表中可以看到每一個(gè)小寫(xiě)字母比它相應(yīng)的大寫(xiě)字母的碼大。語(yǔ)言允許字符數(shù)據(jù)與整數(shù)直接進(jìn)行算術(shù)運(yùn)算。 運(yùn)行結(jié)果:運(yùn)行結(jié)果: 3.5字符型數(shù)據(jù) 有些系統(tǒng)(如turbo c)將字符變量定義為signed char型。其存儲(chǔ)單元中的最高位作為符號(hào)位,它的取值范圍是-128127。如果在字符變量中存放一個(gè)ascii碼為0127間的字符,由于字節(jié)中最高位為0,因此用%d輸
56、出字符變量時(shí),輸出的是一個(gè)正整數(shù)。如果在字符變量中存放一個(gè)ascii碼為128255間的字符,由于在字節(jié)中最高位為1,用%d格式符輸出時(shí),就會(huì)得到一個(gè)負(fù)整數(shù)。 3.5字符型數(shù)據(jù)3.5.4字符串常量字符串常量字符串常量是一對(duì)雙撇號(hào)括起來(lái)的字符序列.合法的字符串常量:“how do you do.”, “china”, “a” , “$123.45”可以輸出一個(gè)字符串,如printf(“how do you do.”); 3.5字符型數(shù)據(jù) 是字符常量,”是字符串常量,二者不同。 如:如:假設(shè)被指定為字符變量 :char c c=a; ”a”;c”china”; 結(jié)論:結(jié)論:不能把一個(gè)字符串常量賦給
57、一個(gè)字符變量。 3.5字符型數(shù)據(jù)規(guī)定:在每一個(gè)字符串常量的結(jié)尾加一個(gè) “字符串結(jié)束標(biāo)志”,以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。規(guī)定以字符作為字符串結(jié)束標(biāo)志。 如:如:如果有一個(gè)字符串常量” ,實(shí)際上在內(nèi)存中是:china0 它占內(nèi)存單元不是個(gè)字符,而是個(gè)字符,最后一個(gè)字符為。但在輸出時(shí)不輸出。 3.6變量賦初值 字符串常量(1)語(yǔ)言允許在定義變量的同時(shí)使變量初始化如如: : int a=3; / 指定為整型變量,初值為 float f=3.56; / 指定為浮點(diǎn)型變量,初值為.56 char c= a; / 指定為字符變量,初值為a 3.6變量賦初值 (2)可以使被定義的變量的一部分賦初值。 如如
58、: : int a,b,c=5; 表示指定、為整型變量,但只對(duì)初始化,c的初值為(3)如果對(duì)幾個(gè)變量賦以同一個(gè)初值, 應(yīng)寫(xiě)成:int a=3,b=3,c=3; 表示、的初值都是。 不能寫(xiě)成 int a=b=c3; 注意:注意:初始化不是在編譯階段完成的而是在程序運(yùn)行時(shí)執(zhí)行本函數(shù)時(shí)賦初值的,相當(dāng)于有一個(gè)賦值語(yǔ)句。 3.7各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算 整型(包括int,short,long)、浮點(diǎn)型(包括float,double)可以混合運(yùn)算。在進(jìn)行運(yùn)算時(shí),不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算.圖上述的類型轉(zhuǎn)換是由系統(tǒng)自動(dòng)進(jìn)行的 3.8算術(shù)運(yùn)算符和算術(shù)表達(dá)式3.8.1 運(yùn)算符簡(jiǎn)介運(yùn)算符簡(jiǎn)介
59、 的運(yùn)算符有以下幾類:的運(yùn)算符有以下幾類:(1)算術(shù)運(yùn)算符 (+ - * / %)(2)關(guān)系運(yùn)算符 (?。?3)邏輯運(yùn)算符 (!|)(4)位運(yùn)算符 ( |)(5)賦值運(yùn)算符 (及其擴(kuò)展賦值運(yùn)算符)(6)條件運(yùn)算符 (?:)(7)逗號(hào)運(yùn)算符 (,) 3.8算術(shù)運(yùn)算符和算術(shù)表達(dá)式(8)指針運(yùn)算符 (*和)(9)求字節(jié)數(shù)運(yùn)算符()(10)強(qiáng)制類型轉(zhuǎn)換運(yùn)算符( (類型) )(11)分量運(yùn)算符(-)(12)下標(biāo)運(yùn)算符()(13)其他 (如函數(shù)調(diào)用運(yùn)算符() 3.8算術(shù)運(yùn)算符和算術(shù)表達(dá)式3.8.2 算術(shù)運(yùn)算符和算術(shù)表達(dá)式算術(shù)運(yùn)算符和算術(shù)表達(dá)式 (1)(1)基本的算術(shù)運(yùn)算符基本的算術(shù)運(yùn)算符: : (加法運(yùn)算
60、符,或正值運(yùn)算符。如:、) (減法運(yùn)算符,或負(fù)值運(yùn)算符。如:、)* * (乘法運(yùn)算符。如:*) (除法運(yùn)算符。如:) (模運(yùn)算符,或稱求余運(yùn)算符,兩側(cè)均應(yīng)為整型數(shù)據(jù),如:的值為)。 3.8算術(shù)運(yùn)算符和算術(shù)表達(dá)式(2) (2) 算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級(jí)與結(jié)合性基本的算術(shù)運(yùn)算符算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級(jí)與結(jié)合性基本的算術(shù)運(yùn)算符: : 用算術(shù)運(yùn)算符和括號(hào)將運(yùn)算對(duì)象(也稱操作數(shù))連接起來(lái)的、符合語(yǔ)法規(guī)則的式子,稱為算術(shù)表達(dá)式。運(yùn)算對(duì)象包括常量、變量、函數(shù)等。 例如例如: : *.5a 是一個(gè)合法的表達(dá)式 3.2 常量與變量語(yǔ)言規(guī)定了運(yùn)算符的優(yōu)先級(jí)和結(jié)合性。 在表達(dá)式求值時(shí),先按運(yùn)算符的優(yōu)先級(jí)別高低次
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 大連航運(yùn)職業(yè)技術(shù)學(xué)院《舞蹈專業(yè)教學(xué)法》2023-2024學(xué)年第二學(xué)期期末試卷
- 益陽(yáng)醫(yī)學(xué)高等??茖W(xué)校《ExportMarketing》2023-2024學(xué)年第二學(xué)期期末試卷
- 滄州幼兒師范高等??茖W(xué)校《工程造價(jià)管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 冀中職業(yè)學(xué)院《行政職業(yè)能力》2023-2024學(xué)年第二學(xué)期期末試卷
- 江西青年職業(yè)學(xué)院《創(chuàng)業(yè)教育與就業(yè)指導(dǎo)下》2023-2024學(xué)年第二學(xué)期期末試卷
- 黑龍江林業(yè)職業(yè)技術(shù)學(xué)院《小動(dòng)物臨床用藥專題》2023-2024學(xué)年第二學(xué)期期末試卷
- 北京藝術(shù)傳媒職業(yè)學(xué)院《機(jī)械制圖1(下)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2021年電力工程室外落水管及散水施工作業(yè)指導(dǎo)書(shū)
- 武漢工程科技學(xué)院《中學(xué)政治教學(xué)論》2023-2024學(xué)年第二學(xué)期期末試卷
- 寧夏醫(yī)科大學(xué)《媒介倫理學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 學(xué)生心理健康測(cè)量表
- GA745-2017銀行自助設(shè)備、自助銀行安全防范要求國(guó)標(biāo)
- 邯鄲市垃圾填埋場(chǎng)封場(chǎng)方案
- 2020閩教版信息技術(shù)四年級(jí)(下冊(cè))全冊(cè)教案
- introduction to pipeline pilot在處理數(shù)據(jù)中的一些應(yīng)用
- 智能中臺(tái)數(shù)據(jù)底座解決方案
- 突發(fā)性聾診療指南 (2015版)
- 光伏發(fā)電工程施工組織設(shè)計(jì)施工工程光伏發(fā)電工程光伏發(fā)電施工組織設(shè)計(jì)
- 11鋼的表面淬火解析
- 導(dǎo)數(shù)應(yīng)用舉例
- 第三講文獻(xiàn)的形成與流布1
評(píng)論
0/150
提交評(píng)論