C語(yǔ)言程序設(shè)計(jì)教程(第2版)-課件全套 余琴 第1-10章 C概述-文件_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)教程(第2版)-課件全套 余琴 第1-10章 C概述-文件_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)教程(第2版)-課件全套 余琴 第1-10章 C概述-文件_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)教程(第2版)-課件全套 余琴 第1-10章 C概述-文件_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)教程(第2版)-課件全套 余琴 第1-10章 C概述-文件_第5頁(yè)
已閱讀5頁(yè),還剩495頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

C語(yǔ)言程序設(shè)計(jì)為什么要學(xué)習(xí)C語(yǔ)言?(1)計(jì)算機(jī)相關(guān)專業(yè):

其他高級(jí)語(yǔ)言的基礎(chǔ),與其他語(yǔ)言進(jìn)行混合編程(2)非計(jì)算機(jī)理工專業(yè):?jiǎn)滩妓拐f(shuō)過(guò):每個(gè)人都應(yīng)該學(xué)習(xí)編程,因?yàn)樗虝?huì)你如何思考。C語(yǔ)言編程---教會(huì)編程思路、方法、設(shè)計(jì)模式IOS、Android底層開(kāi)發(fā)---C語(yǔ)言

編程語(yǔ)言受歡迎程度排行2023年1月TOP10語(yǔ)言C語(yǔ)言的設(shè)計(jì)者兩個(gè)骨灰級(jí)游戲玩家無(wú)心插柳柳成蔭1969年,ken夢(mèng)想能遨游宇宙,

設(shè)計(jì)了一款模擬在太陽(yáng)系航行

的電子游戲—SpaceTravel,

1971年dmr加入游戲在PDP-7小型機(jī)上開(kāi)發(fā),因

為這臺(tái)機(jī)器免費(fèi),但免費(fèi)的機(jī)

器沒(méi)有操作系統(tǒng)玩游戲前,先給PDP-7做個(gè)操作系統(tǒng),命名為UNIX無(wú)心插柳柳成蔭匯編編寫UNIX太慢,而一般的高級(jí)語(yǔ)言難以實(shí)現(xiàn)匯編語(yǔ)言的某些功能Dmr改造B語(yǔ)言,設(shè)計(jì)了一種新的高級(jí)語(yǔ)言,命名C語(yǔ)言,把UNIX的90%以上代碼用C改寫1983年,因?yàn)閁NIX和C語(yǔ)言的巨大成功,ken和dmr共同獲得當(dāng)年度計(jì)算機(jī)界最高獎(jiǎng)—圖靈獎(jiǎng)C語(yǔ)言適合做什么?選語(yǔ)言的標(biāo)準(zhǔn)——適合的才是最好的?。?)編寫系統(tǒng)軟件(例如OS)和工具軟件(2)運(yùn)行效率要求較高的系統(tǒng)設(shè)備驅(qū)動(dòng)程序,嵌入式系統(tǒng)(機(jī)器人、手機(jī)和智能家電)高性能、實(shí)時(shí)系統(tǒng)我能學(xué)好C語(yǔ)言嗎?C語(yǔ)言枯燥不好學(xué)數(shù)學(xué)和英語(yǔ)不好能學(xué)好C語(yǔ)言嗎?只要有小學(xué)四年級(jí)的水平和基礎(chǔ)就能學(xué)好C語(yǔ)言!——啊哈磊(全國(guó)信息學(xué)奧林匹克競(jìng)賽NOI金牌教練)C語(yǔ)言程序設(shè)計(jì)

課程目標(biāo)

熟記C語(yǔ)言的基本概念熟悉VisualC++的上機(jī)操作環(huán)境會(huì)讀、會(huì)編、會(huì)調(diào)試C程序課程要求

多上機(jī)實(shí)踐

考核形式機(jī)考(50%)+平時(shí)(50%)硬件系統(tǒng)(Hardware)軟件系統(tǒng)(Software)內(nèi)存儲(chǔ)器隨機(jī)存儲(chǔ)器(RAM)只讀存儲(chǔ)器(ROM)輸入設(shè)備:鍵盤鼠標(biāo)掃描儀輸出設(shè)備:顯示器打印機(jī)繪圖儀中央處理器(CPU)

運(yùn)算器控制器系統(tǒng)軟件應(yīng)用軟件高速緩存(Cache)主機(jī)外設(shè)外存:軟盤硬盤光盤優(yōu)盤網(wǎng)絡(luò)設(shè)備:網(wǎng)絡(luò)適配器調(diào)制解調(diào)器集線器操作系統(tǒng):WindowsUNIXLinuxDOS語(yǔ)言處理程序:CJavaVBVF實(shí)用程序:診斷程序排錯(cuò)程序等通用應(yīng)用軟件:辦公軟件包等專用應(yīng)用軟件:各企業(yè)單位的管理信息系統(tǒng)等計(jì)算機(jī)系統(tǒng)知識(shí)回顧C(jī)語(yǔ)言與自然語(yǔ)言的比較

自然語(yǔ)言

C語(yǔ)言信息交流(地位平等)人-機(jī)對(duì)話(命令方式)(有思維、推理能力)(無(wú)思維、推理能力)語(yǔ)法規(guī)則、句法規(guī)則靈活語(yǔ)法規(guī)則、句法規(guī)則固定(可省略、顛倒)(一般不可省略、顛倒,必須按部就班)如:走,去曬太陽(yáng)!如:x=a+b

去曬太陽(yáng),走!scanf(“%d%d”,a,b);表達(dá)方式多樣算法多樣√√scanf(“%d%d”,&a,&b);x=a+b;學(xué)習(xí)要點(diǎn):熟記C語(yǔ)言的語(yǔ)法、句法學(xué)會(huì)算法分析與算法設(shè)計(jì)本課重點(diǎn):第二章~第九章本課難點(diǎn):第六章、第七章、第八章第一章C語(yǔ)言概述本章要點(diǎn)C語(yǔ)言的特點(diǎn)

C程序的結(jié)構(gòu)

C程序的上機(jī)步驟1.1

C語(yǔ)言出現(xiàn)的歷史背景C語(yǔ)言是國(guó)際上廣泛流行的高級(jí)語(yǔ)言。C語(yǔ)言是在B語(yǔ)言的基礎(chǔ)上發(fā)展起來(lái)的。1983年,美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)(ANSI)制定了新的標(biāo)準(zhǔn)ANSIC,比標(biāo)準(zhǔn)C有了很大的發(fā)展。1987年,ANSI公布了新標(biāo)準(zhǔn)——87ANSIC。1990年,國(guó)際標(biāo)準(zhǔn)化組織接受了87ANSIC為ISOC的標(biāo)準(zhǔn)(ISO9899—1990)。1994年,ISO又修訂了C語(yǔ)言標(biāo)準(zhǔn)。目前流行的C語(yǔ)言編譯系統(tǒng)大多是以ANSIC為基礎(chǔ)進(jìn)行開(kāi)發(fā)的。1.2C語(yǔ)言的特點(diǎn)(1)語(yǔ)言簡(jiǎn)潔、緊湊,使用方便、靈活。

32個(gè)關(guān)鍵字、9種控制語(yǔ)句,程序形式自由。(2)運(yùn)算符豐富。(3)數(shù)據(jù)類型豐富,具有現(xiàn)代語(yǔ)言的各種數(shù)據(jù)結(jié)構(gòu)。(4)具有結(jié)構(gòu)化的控制語(yǔ)句,是完全模塊化和結(jié)構(gòu)化的語(yǔ)言。(5)語(yǔ)法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大。(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.3簡(jiǎn)單的C語(yǔ)言程序幾個(gè)簡(jiǎn)單的C語(yǔ)言程序例子例1.1

#include<stdio.h>intmain(){printf("ThisisaCprogram.\n");return0;}/*文件包含*//*主函數(shù)*//*函數(shù)體開(kāi)始*//*輸出語(yǔ)句*//*返回語(yǔ)句*//*函數(shù)體結(jié)束*/說(shuō)明:main-主函數(shù)名,int-函數(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)頭一行寫:

#include<stdio.h>說(shuō)明:

本程序的作用是輸出一行信息:ThisisaCprogram.例1.2求兩數(shù)之和

#include<stdio.h>

intmain()/*求兩數(shù)之和*/

{

inta,b,sum;/*聲明,定義變量為整型*/

/*以下3行為C語(yǔ)句*/

a=123;b=456;

sum=a+b;

printf(″sumis%d\n″,sum);

return0;

}說(shuō)明:

/*……*/表示注釋。注釋只是給人看的,對(duì)編譯和運(yùn)行不起作用。所以可以用漢字或英文字符表示,可以出現(xiàn)在一行中的最右側(cè),也可以單獨(dú)成為一行。說(shuō)明:

輸出一行信息:sumis579例1.3求2個(gè)數(shù)中較大者。

#include<stdio.h>

intmain()/*主函數(shù)*/

{

intmax(intx,inty);/對(duì)被調(diào)用函數(shù)max的聲明*/

inta,b,c;/*定義變量a、b、c*/

scanf(″%d,%d″,&a,&b);/*輸入變量a和b的值*/

c=max(a,b);

/*調(diào)用max函數(shù),將得到的值賦給c*/

printf(″max=%d\n″,c);/*輸出c的值*/

return0;

}程序運(yùn)行情況如下:8,5↙(輸入8和5賦給a和b)max=8(輸出c的值)intmax(intx,inty){intz;if(x>y)z=x;elsez=y;return(z);}說(shuō)明:本程序包括main和被調(diào)用函數(shù)max兩個(gè)函數(shù)。max函數(shù)的作用是將x和y中較大者的值賦給變量z。return語(yǔ)句將z的值返回給主調(diào)函數(shù)main。C程序小結(jié):(1)C程序是由函數(shù)構(gòu)成的。這使得程序容易實(shí)現(xiàn)模塊化。(2)一個(gè)函數(shù)由兩部分組成:

函數(shù)首部:如intmax(intx,inty)

函數(shù)體:花括號(hào)內(nèi)的部分。若一個(gè)函數(shù)有多個(gè)花括號(hào),則最外層的一對(duì)花括號(hào)為函數(shù)體的范圍。函數(shù)體包括:聲明部分:inta,b,c,可省執(zhí)行部分:由若干語(yǔ)句組成,可省注意:函數(shù)的聲明部分和執(zhí)行部分都可缺省,例如:intdump(){}

這是一個(gè)空函數(shù),什么也不做,但是是合法的函數(shù)。(3)C程序總是從main函數(shù)開(kāi)始執(zhí)行的,與main函數(shù)的位置無(wú)關(guān)。(4)C程序書(shū)寫格式自由,一行內(nèi)可以寫幾個(gè)語(yǔ)句,一個(gè)語(yǔ)句可以分寫在多行上,C程序沒(méi)有行號(hào)。(5)每個(gè)語(yǔ)句和數(shù)據(jù)聲明的最后必須有一個(gè)分號(hào)。(6)C語(yǔ)言本身沒(méi)有輸入輸出語(yǔ)句。輸入和輸出的操作是由庫(kù)函數(shù)scanf和printf等函數(shù)來(lái)完成的。C對(duì)輸入輸出實(shí)行“函數(shù)化”。使用輸入輸出函數(shù)時(shí)必須在程序開(kāi)頭插入引用庫(kù)函數(shù)所在頭文件的聲明。(7)用/*…*/或//做注釋。1.4運(yùn)行C程序的步驟與方法1.4.1運(yùn)行C程序的步驟1.4.2常用IDE1.4.3Dev-C++介紹1.4.4Dev-C++安裝1.4.5Dev-C++使用1.4.1運(yùn)行C程序的步驟上機(jī)輸入與編輯源程序?qū)υ闯绦蜻M(jìn)行編譯與庫(kù)函數(shù)連接運(yùn)行目標(biāo)程序1.4.2常用IDE目前使用的大多數(shù)C編譯系統(tǒng)都是集成環(huán)境(IDE)的。可以用不同的編譯系統(tǒng)對(duì)C程序進(jìn)行操作。常見(jiàn)的有TurboC、VisualC++、QtCreator、Code::Blocks、Dev-C++等。1.4.3Dev-C++介紹Dev-C++是Windows環(huán)境下的一個(gè)輕量級(jí)C/C++免費(fèi)開(kāi)源的IDE開(kāi)發(fā)環(huán)境,它遵守GPL許可協(xié)議,是一款自由軟件。Dev-C++使用MingW64/TDM-GCC等編譯器,遵循C99標(biāo)準(zhǔn),同時(shí)兼容C90標(biāo)準(zhǔn)。官方最新版為Dev-C++5.11。Dev-C++安裝卸載方便,打開(kāi)和運(yùn)行速度都非???,功能簡(jiǎn)單實(shí)用。開(kāi)發(fā)環(huán)境包括多頁(yè)面窗口、工程管理、調(diào)試器等,集成了C/C++編譯器、自定義編譯器配置、調(diào)試等功能,提供高亮度語(yǔ)法顯示,安裝與調(diào)試方便,支持多國(guó)語(yǔ)言,是C語(yǔ)言初學(xué)者的首選開(kāi)發(fā)工具。1.4.3Dev-C++介紹Dev-C++工具具有代碼編寫、代碼分析、代碼編譯和調(diào)試等功能,又具有體積小、易上手等特點(diǎn),是適合C語(yǔ)言初學(xué)者使用的輕量級(jí)開(kāi)發(fā)工具。盡管Dev-C++5.11在2016年已停止,第三方DevC++工具功能更強(qiáng)大,比如基于原版DevC++4.9的RedPandaDevC++6.7,增加了代碼自動(dòng)補(bǔ)全,并修復(fù)了一些DevC++的bug等,但是作為初學(xué)者,還是建議以原版學(xué)習(xí)為宜。本課選用官方最新的Dev-C++5.11作為開(kāi)發(fā)環(huán)境1.4.4Dev-C++安裝(p11-p13)(1)打開(kāi)Dev-C++的官網(wǎng)下載地址/projects/orwelldevcpp/,進(jìn)入軟件下載頁(yè)面,如圖所示。單擊圖中的【Download】按鈕,選擇文件存放路徑,開(kāi)始下載軟件安裝包。

(2)下載完成后,開(kāi)始安裝軟件。安裝比較簡(jiǎn)單,雙擊軟件安裝包文件打開(kāi)安裝程序,將彈出“InstallerLanguage”對(duì)話框,用戶可在該窗口選擇語(yǔ)言。此處保持默認(rèn)選項(xiàng)“English”。(3)單擊步驟(2)中的【OK】按鈕,進(jìn)入“LicenseAgreement”窗口。該窗口用于展示許可證協(xié)議,如圖所示。(4)單擊步驟(3)中的【IAgree】按鈕,接受許可證協(xié)議,進(jìn)入“ChooseComponents”窗口,在該窗口可選擇Dev-C++的組件。單擊該窗口的下拉列表,選擇【Full】,安裝所有組件,如圖所示。(5)單擊步驟(4)中的【Next】按鈕,進(jìn)入“ChooseInstallLocation”窗口,設(shè)置Dev-C++安裝路徑,如圖所示??蓡螕魣D中的【Browse】按鈕自行選擇安裝路徑,亦可使用默認(rèn)安裝路徑。此處保持默認(rèn)設(shè)置。(6)單擊圖步驟(5)中的【Install】按鈕,開(kāi)始安裝Dev-C++。安裝完成后的界面如圖所示。如果步驟(6)中勾選了“RunDev-C++5.11”,那么單擊【Finish】按鈕后會(huì)彈出首次運(yùn)行配置的對(duì)話框,可以為Dev-C++設(shè)置語(yǔ)言和主題,具體如圖所示。Dev-C++編輯界面包含菜單欄、快捷按鈕、項(xiàng)目管理區(qū)、代碼編輯區(qū)、編譯信息顯示區(qū)5個(gè)部分。(1)菜單欄:Dev-C++軟件、編譯器、代碼風(fēng)格等設(shè)置。(2)快捷按鈕:快捷按鈕是使用Dev-C++的快捷方式,單擊后執(zhí)行相關(guān)功能。(3)項(xiàng)目管理區(qū):管理建立項(xiàng)目的所有工程文件,可以查看函數(shù)、結(jié)構(gòu)體。(4)代碼編輯區(qū):在編輯器中輸入代碼,每行都有對(duì)應(yīng)的編號(hào)。(5)編譯信息顯示區(qū):用于在程序編譯過(guò)程中顯示編程中的錯(cuò)誤信息、查看資源文件、記錄編譯過(guò)程中的日志信息及顯示調(diào)試信息。1.4.5Dev-C++使用(p13-p15)(1)新建文件。打開(kāi)Dev-C++后,在菜單欄依次單擊【文件】→【新建】→【源代碼】,如圖所示。

1.4.5Dev-C++使用(p13-p15)(2)編寫程序代碼,如圖所示。

1.4.5Dev-C++使用(p13-p15)(3)保存文件。編寫完成之后單擊菜單中【文件】→【保存】選項(xiàng),將會(huì)彈出路徑選擇窗口,在該窗口可為文件選擇保存路徑,并設(shè)置文件名與文件類型,如圖所示。此處將文件保存在本地目錄下,設(shè)置文件名為HelloWorld,文件類型為Csourcefiles(*.c)。設(shè)置完成后單擊【保存】按鈕,保存文件。

1.4.5Dev-C++使用(p13-p15)(4)編譯運(yùn)行程序。在菜單欄選擇【運(yùn)行】→【編譯運(yùn)行】來(lái)運(yùn)行程序,或按快捷鍵【F11】運(yùn)行程序。編譯運(yùn)行結(jié)果如上圖所示。編譯完成后,會(huì)彈出打印有程序運(yùn)行結(jié)果的命令行窗口,如下圖所示。

第二章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式

本章要點(diǎn)數(shù)據(jù)的描述規(guī)則數(shù)據(jù)的操作規(guī)則C語(yǔ)言的基本元素一、符號(hào)集(字符集)(1)大寫字母:A~Z(2)小寫字母a~z(3)阿拉伯?dāng)?shù)字:0~9(4)下劃線:_(5)標(biāo)點(diǎn)符號(hào)和運(yùn)算符二、標(biāo)識(shí)符用來(lái)標(biāo)記常量、變量、函數(shù)及文件名字的字符序列。標(biāo)識(shí)符的構(gòu)成規(guī)則:(1)以字母(大小寫皆可)或下劃線開(kāi)頭(2)隨后可跟若干個(gè)(包括0個(gè))字母、數(shù)字、下劃線如:xy3_imaxELSEX

(合法)

7xint#Nobadone(不合法)注意:C語(yǔ)言區(qū)分大小寫,如sum和SUM是兩個(gè)標(biāo)識(shí)符。三、關(guān)鍵字(附錄B)也稱“保留字”,它是C語(yǔ)言中具有特定含義、專門用作語(yǔ)言特定成分的一類標(biāo)識(shí)符。ANSI推薦的C語(yǔ)言的關(guān)鍵字是32個(gè)如:int、char、float、void等注意:所有的關(guān)鍵字都有固定的意義,不能用作其他。所有關(guān)鍵字都必須小寫。如:else與ELSE代表不同含義

else是關(guān)鍵字,ELSE用戶定義的標(biāo)識(shí)符2.1C的數(shù)據(jù)類型C語(yǔ)言提供了以下一些數(shù)據(jù)類型。數(shù)據(jù)類型構(gòu)造類型指針類型空類型(無(wú)值類型)void枚舉類型enum數(shù)組類型結(jié)構(gòu)類型

struct聯(lián)合類型union

基本類型整型int字符型char實(shí)型(浮點(diǎn)型)單精度實(shí)型

float雙精度實(shí)型

double

2.2常量與變量1、常量:在程序運(yùn)行過(guò)程中,其值不能被改變的量稱為常量。常量區(qū)分為不同的類型:整型100,125,-100,0實(shí)型3.14,0.125,-3.789字符型‘a(chǎn)’,‘b’,‘2’字符串“a”,“ab”,“1232”常量和符號(hào)常量2、符號(hào)常量:用一個(gè)標(biāo)識(shí)符代表的一個(gè)常量。定義方法:#define標(biāo)識(shí)符常量例2.1符號(hào)常量的使用

#definePRICE30

#include<stdio.h>

intmain()

{

intnum,total;

num=10;

total=num*PRICE;

printf("total=%d\n",total);}運(yùn)行結(jié)果:

total=300說(shuō)明:如再用賦值語(yǔ)句給PRICE賦值是錯(cuò)的

PRICE=40;/*錯(cuò)誤,不能給符號(hào)常量賦值*/說(shuō)明:程序中用#define命令行定義PRICE代表常量30,此后凡在本文件中出現(xiàn)的PRICE都代表30,可以和常量一樣進(jìn)行運(yùn)算變量其值是可以改變的量,它用標(biāo)識(shí)符(變量名)來(lái)表示,在內(nèi)存中占據(jù)一定的存儲(chǔ)單元。變量名實(shí)際上是以一個(gè)名字代表一個(gè)地址,在對(duì)程序編譯連接時(shí)由編譯系統(tǒng)給每一個(gè)變量名分配對(duì)應(yīng)的內(nèi)存地址。從變量中取值,實(shí)際上是通過(guò)變量名找到相應(yīng)的內(nèi)存地址,從該存儲(chǔ)單元中讀取數(shù)據(jù)。變量的定義方法

類型符標(biāo)識(shí)符如:inti,j;charc1,c2;floatx,y;doublez;變量命名的規(guī)定:C語(yǔ)言規(guī)定標(biāo)識(shí)符只能由字母、數(shù)字和下劃線三種字符組成,且第一個(gè)字符必須為字母或下劃線。例:sum,_total,month,Student_name,

lotus_1_2_3,BASIC,li_ling

M.D.John,¥123,3D64,a>b

注意:編譯系統(tǒng)將大寫字母和小寫字母認(rèn)為是兩個(gè)不同的字符(習(xí)慣上,符號(hào)常量用大寫)。建議變量名的長(zhǎng)度最好不要超過(guò)8個(gè)字符。在選擇變量名和其它標(biāo)識(shí)符時(shí),應(yīng)注意做到“見(jiàn)名知意”,即選有含意的英文單詞(或其縮寫)作標(biāo)識(shí)符。要求對(duì)所有用到的變量作強(qiáng)制定義,也就是“先定義,后使用”。student_name->s_namestudent_num->s_num2.3整型數(shù)據(jù)整型常量即整常數(shù)。在C語(yǔ)言中,整常數(shù)可用以下三種形式表示:(1)十進(jìn)制整數(shù)。

如:123,-456,4。(2)八進(jìn)制整數(shù)。以0開(kāi)頭的數(shù)是八進(jìn)制數(shù)。

如:0123表示八進(jìn)制數(shù)123,等于十進(jìn)制數(shù)83,(3)十六進(jìn)制整數(shù)。以0x開(kāi)頭的數(shù)是16進(jìn)制數(shù)。如:0x123,代表16進(jìn)制數(shù)123,等于十進(jìn)制數(shù)291。

整型常量的表示方法整型變量(1)整型數(shù)據(jù)在內(nèi)存中的存放形式在內(nèi)存中是以二進(jìn)制的補(bǔ)碼表示。如:inti;/*定義為整型變量*/i=10;/*給i賦以整數(shù)10*/補(bǔ)碼:

一個(gè)正整數(shù)的補(bǔ)碼和該數(shù)的原碼(即該數(shù)的二進(jìn)制形式)相同。如果數(shù)值是負(fù)的,求負(fù)數(shù)的補(bǔ)碼方法是:將該數(shù)的絕對(duì)值的二進(jìn)制形式,按位取反再加1。注意:十進(jìn)制數(shù)10的二進(jìn)制形式為1010,TurboC2.0和TurboC++3.0為一個(gè)整型變量在內(nèi)存中分配2個(gè)字節(jié)的存儲(chǔ)單元(不同的編譯系統(tǒng)為整型數(shù)據(jù)分配的字節(jié)數(shù)是不相同的,VC++6.0則分配4個(gè)字節(jié))。數(shù)值是以補(bǔ)碼(complement)表示的。存儲(chǔ)有符號(hào)整數(shù)時(shí)存儲(chǔ)單元中的第一個(gè)二進(jìn)制位(即最高位)用來(lái)代表數(shù)值符號(hào)。(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)unsignedintunsignedshort(int)unsignedlong(int)注意:括號(hào)表示其中的內(nèi)容是可選的。例如:整數(shù)13在內(nèi)存中實(shí)際存放的情況:(3)整型變量的定義:

C規(guī)定在程序中所有用到的變量都必須在程序中定義,即“強(qiáng)制類型定義”。例如:inta,b;(指定變量a、b為整型)

unsignedshortc,d;

(指定變量c、d為無(wú)符號(hào)短整型)

longe,f;(指定變量e、f為長(zhǎng)整型)例2.2整型變量的定義與使用#include<stdio.h>intmain()

{inta,b,c,d;/*指定a、b、c、d為整型變量*/

unsignedu;/*指定u為無(wú)符號(hào)整型變量*/

a=12;b=-24;u=10;

c=a+u;d=b+u;

printf(”a+u=%d,b+u=%d\n”,c,d);

}運(yùn)行結(jié)果:a+u=22,b+u=-14

說(shuō)明:可以看到不同種類的整型數(shù)據(jù)可以進(jìn)行算術(shù)運(yùn)算.

0000000000001100a0000000000001010u0000000000010110a+u1111111111101000b0000000000001010u1111111111110010b+ub=-24先計(jì)算其絕對(duì)值24的二進(jìn)制形式0000000000011000

按位取反再加1為11111111111010001111111111110001減1取反0000000000001110負(fù)數(shù)的絕對(duì)值14是負(fù)數(shù)-?整型常量的類型

(1)一個(gè)整數(shù),如果其值在-32768~+32767范圍內(nèi),認(rèn)為它是int型,它可以賦值給int型和longint型變量。(2)一個(gè)整數(shù),如果其值超過(guò)了上述范圍,而在-2147483648~+2147483647范圍內(nèi),則認(rèn)為它是為長(zhǎng)整型。可以將它賦值給一個(gè)longint型變量。(3)如果所用的C版本(如TurboC)分配給shortint與int型數(shù)據(jù)在內(nèi)存中占據(jù)的長(zhǎng)度相同,則它的表數(shù)范圍與int型相同。因此一個(gè)int型的常量同時(shí)也是一個(gè)shortint型常量,可以賦給int型或shortint型量。

(4)一個(gè)整常量后面加一個(gè)字母u或U,認(rèn)為是unsignedint型,如12345u,在內(nèi)存中按unsignedint規(guī)定的方式存放(存儲(chǔ)單元中最高位不作為符號(hào)位,而用來(lái)存儲(chǔ)數(shù)據(jù))。(5)在一個(gè)整常量后面加一個(gè)字母l或L,則認(rèn)為是longint型常量。例如:123l,432L,0L用于函數(shù)調(diào)用中。2.4浮點(diǎn)型數(shù)據(jù)兩種表示形式浮點(diǎn)型常量的表示方法小數(shù)指數(shù)0.1233e-3注意:字母e(或E)前后必須有數(shù)字,且e后面的指數(shù)必須為整數(shù).1e3、1.8e-3、-123e-6e3、2.1e3.5、.e3、e

類型:缺省為double;后綴f或F,為float型;后綴l或L,為longdouble型。規(guī)范化的指數(shù)形式:在字母e(或E)之前的小數(shù)部分中,小數(shù)點(diǎn)左邊應(yīng)有一位(且只能有一位)非零的數(shù)字.

例如:123.456可以表示為:

123.456e0,12.3456e1,1.23456e2,0.123456e3,0.0123456e4,0.00123456e其中的1.23456e3稱為“規(guī)范化的指數(shù)形式”。浮點(diǎn)型變量(1)浮點(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ù)形式。(2)浮點(diǎn)型變量的分類浮點(diǎn)型變量分為單精度(float型)、雙精度(double型)和長(zhǎng)雙精度型(longdouble)三類形式。單精度(float型):占4個(gè)字節(jié),7位有效數(shù)字(3.4e-38~3.4e+38)雙精度(double型):占8個(gè)字節(jié),15~16位有效數(shù)字(1.7e-308~1.7e+308)

longdouble型:占10個(gè)字節(jié),15~16位有效數(shù)字(3.4e-4932~1.1e+4932)(3)浮點(diǎn)型數(shù)據(jù)的舍入誤差

#include<stdio.h>

intmain()

{floata,b;

a=123456.789e5;

b=a+20;

printf(“a=%f,b=%f\n”,a,b);

}

運(yùn)行結(jié)果:a=12345678848.000000,b=12345678868.000000說(shuō)明:一個(gè)浮點(diǎn)型變量只能保證的有效數(shù)字是7位有效數(shù)字,后面的數(shù)字是無(wú)意義的,并不準(zhǔn)確地表示該數(shù)。應(yīng)當(dāng)避免將一個(gè)很大的數(shù)和一個(gè)很小的數(shù)直接相加或相減,否則就會(huì)“丟失”小的數(shù).若數(shù)據(jù)超過(guò)有效位,則被舍去,故可能產(chǎn)生誤差。

2.5字符型數(shù)據(jù)

(1)用單引號(hào)包含的一個(gè)字符是字符型常量如:‘a(chǎn)’、‘A’、‘b’、‘*’、‘$’(2)轉(zhuǎn)義字符:特殊的字符常量,都以“\”開(kāi)頭(代表一個(gè)字符)\n換行,移到下一行開(kāi)頭\0空值\t橫向跳格(每8列為一制表位)\v縱向跳格\r回車,移到本行開(kāi)頭\a報(bào)警\b退格\f走紙換頁(yè)\\反斜杠\’

輸出單引號(hào)\dddddd表示1到3位八進(jìn)制數(shù)字(字符的ASCII碼)

如:‘\101’

代表字符‘A’\xhh

hh表示1到2位十六進(jìn)制數(shù)字如:‘\x41’

代表字符‘A’字符常量輸出格式控制輸出字符例2.5轉(zhuǎn)義字符的使用

#include<stdio.h>

intmain(){printf(“a\t\rf\tg\n″);

顯示屏上的運(yùn)行結(jié)果:fg例2.5轉(zhuǎn)義字符的使用

#include<stdio.h>

intmain(){printf(“a\t\rf\tg\n″);

printf("h\ti\b\bjk\n″);

顯示屏上的運(yùn)行結(jié)果:fghjk例2.5轉(zhuǎn)義字符的使用

#include<stdio.h>

intmain(){printf("abc\tde\rf\tg\n″);

printf("h\ti\b\bjk\n″);

顯示屏上的運(yùn)行結(jié)果:fgdehjk字符變量字符型變量用來(lái)存放字符常量,注意只能放一個(gè)字符。字符變量的定義形式如下:

charc1,c2;unsignedcharc3,c4;

字符型變量的賦值方法:

c1=‘a(chǎn)’;c2=‘\101’;c3=0xff;c4=‘\377’;一個(gè)字符變量在內(nèi)存中占一個(gè)字節(jié)。字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式及其使用方法(1)一個(gè)字符常量存放到一個(gè)字符變量中,實(shí)際上并不是把該字符的字型放到內(nèi)存中去,而是將該字符的相應(yīng)的ASCII代碼放到存儲(chǔ)單元中。這樣使字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用。abab

#include<stdio.h>intmain(){charcl,c2;c1='a';c2='b'printf("oc%c",cl,c2);c1=97;c2=98;printf("oc%c",cl,c2);}(2)字符數(shù)據(jù)與整型數(shù)據(jù)可以相互賦值(3)字符數(shù)據(jù)可以以字符形式輸出,也可以用整型數(shù)形式輸出。intmain(){inti;charc;i=‘a(chǎn)’;c=97;printf(“%c,%d\n”,c,c);printf(“%c,%d\n”,i,i);}等同于:i=97;c=‘a(chǎn)’;例2.6向字符變量賦以整數(shù)。

#include<stdio.h>

intmain()

{charc1,c2;

c1=97;

c2=98;

printf(“%c%c\n”,c1,c2);

printf(“%d%d\n”,c1,c2);

}運(yùn)行結(jié)果:ab

9798說(shuō)明:在第4和第5行中,將整數(shù)97和98分別賦給c1和c2,它的作用相當(dāng)于以下兩個(gè)賦值語(yǔ)句:

c1=’a’;c2=’b’;因?yàn)椤痑’和’b’的ASCII碼為97和98例2.7大小寫字母的轉(zhuǎn)換

#include<stdio.h>

intmain()

{charc1,c2;

c1=’a’;

c2=’b’;

c1=c1-32;

c2=c2-32;

printf(“%c%c”,c1,c2);

}運(yùn)行結(jié)果:AB說(shuō)明:程序的作用是將兩個(gè)小寫字母a和b轉(zhuǎn)換成大寫字母A和B。從ASCII代碼表中可以看到每一個(gè)小寫字母比它相應(yīng)的大寫字母的ASCII碼大32。C語(yǔ)言允許字符數(shù)據(jù)與整數(shù)直接進(jìn)行算術(shù)運(yùn)算。字符’a’的存儲(chǔ)形式

01100001intmain(){charc;c=‘\376’;printf(“%c,%d\n”,c,c);}八進(jìn)制數(shù)376(十進(jìn)制為254)ASCII碼字符為:11111110unsignedcharc;

,-2,2541111110100000010字符串常量1、字符串常量是一對(duì)雙引號(hào)括起來(lái)的字符序列.

合法的字符串常量:

“Howdoyoudo.”,“CHINA”,“a”

,“$123.45”

可以輸出一個(gè)字符串,如

printf(“Howdoyoudo.”);‘a’是字符常量,“a”是字符串常量,二者不同。如:假設(shè)c被指定為字符變量:charc;c=’a’;c=“a”;c=“CHINA”;

結(jié)論:不能把一個(gè)字符串常量賦給一個(gè)字符變量。2、C規(guī)定:在每一個(gè)字符串常量的結(jié)尾加一個(gè)“字符串結(jié)束標(biāo)志”,以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。C規(guī)定以字符’\0’作為字符串結(jié)束標(biāo)志。如:如果有一個(gè)字符串常量”CHINA”

,實(shí)際上在內(nèi)存中是:CHINA\0

它占內(nèi)存單元不是5個(gè)字符,而是6個(gè)字符,最后一個(gè)字符為’\0’。但在輸出時(shí)不輸出’\0’。2.6變量賦初值(1)C語(yǔ)言允許在定義變量的同時(shí)使變量初始化如:inta=3;//指定a為整型變量,初值為3

floatf=3.56;//指定f為浮點(diǎn)型變量,初 // 值為3.56charc=‘a(chǎn)’;//指定c為字符變量,初值為‘a(chǎn)’(2)可以使被定義的變量的一部分賦初值。如:inta,b,c=5;表示指定a、b、c為整型變量,但只對(duì)c初始化,c的初值為5(3)如果對(duì)幾個(gè)變量賦以同一個(gè)初值,應(yīng)寫成:inta=3,b=3,c=3;

表示a、b、c的初值都是3。

不能寫成:inta=b=c=3;

2.7各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算

整型(包括int,short,long)、浮點(diǎn)型(包括float,double)等可以混合運(yùn)算。例如:10+’a’+12.3-3.14*’x’是合法的。在進(jìn)行運(yùn)算時(shí),不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算。

2.8算術(shù)運(yùn)算符和算術(shù)表達(dá)式C運(yùn)算符(1)基本的算術(shù)運(yùn)算符:+(加法運(yùn)算符,或正值運(yùn)算符。如:3+5、+3)-(減法運(yùn)算符,或負(fù)值運(yùn)算符。如:5-2、-3)*(乘法運(yùn)算符。如:3*5,2*x,3*(a+b))/(除法運(yùn)算符。如:5/3,(x+y)/(a+b))1)兩個(gè)整數(shù)相除,其值為整數(shù),如:5/3值為1,舍去小數(shù)部分;2)除數(shù)、被除數(shù)有一個(gè)為負(fù)值時(shí),結(jié)果”向零取整”,如-5/3=-1;3)除數(shù)、被除數(shù)有一個(gè)為實(shí)數(shù)時(shí),結(jié)果為double型(1)基本的算術(shù)運(yùn)算符:%(模運(yùn)算符,或稱求余運(yùn)算符,%兩側(cè)均應(yīng)為整型數(shù)據(jù),如:7%4的值為3)。-7%4,7%-4,-7%-4的值為多少?-3,3,-3符號(hào)由被除數(shù)決定(2)算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級(jí)與結(jié)合性用算術(shù)運(yùn)算符和括號(hào)將運(yùn)算對(duì)象(也稱操作數(shù))連接起來(lái)的、符合C語(yǔ)法規(guī)則的式子,稱為C算術(shù)表達(dá)式。運(yùn)算對(duì)象包括常量、變量、函數(shù)等。例如:a*b/c-1.5+’a’3.14*r*rx+sqrt(0.25*y)/(abs(a+b)-3.6)

優(yōu)先級(jí)在表達(dá)式求值時(shí),先按運(yùn)算符的優(yōu)先級(jí)別高低次序執(zhí)行,例如先乘除后加減。結(jié)合性算術(shù)運(yùn)算符的結(jié)合方向?yàn)椤白宰笾劣摇?,即先左后右?3)強(qiáng)制類型轉(zhuǎn)換運(yùn)算符可以利用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符將一個(gè)表達(dá)式轉(zhuǎn)換成所需類型。一般形式:(類型名)(表達(dá)式)例如:(double)a將a轉(zhuǎn)換成double類型(int)(x+y)將x+y的值轉(zhuǎn)換成整型(float)(5%3)將5%3的值轉(zhuǎn)換成float型注意:與(int)x+y不同例2.8強(qiáng)制類型轉(zhuǎn)換。

#include<stdio.h>

intmain(){floatx;

inti;

x=3.6;

i=(int)x;/*不影響x單元的內(nèi)容*/printf("x=%f,i=%d\n",x,i);

運(yùn)行結(jié)果:x=3.600000,i=3說(shuō)明:有兩種類型轉(zhuǎn)換,一種是在運(yùn)算時(shí)不必用戶指定,系統(tǒng)自動(dòng)進(jìn)行的類型轉(zhuǎn)換,如3+6.5。第二種是強(qiáng)制類型轉(zhuǎn)換。當(dāng)自動(dòng)類型轉(zhuǎn)換不能實(shí)現(xiàn)目的時(shí),可以用強(qiáng)制類型轉(zhuǎn)換。注意:x的類型沒(méi)有發(fā)生改變。(4)自增、自減運(yùn)算符作用是使變量的值增1或減1如:++i,--i(在使用i之前,先使i的值加(減)1)i++,i--(在使用i之后,使i的值加(減)1)i++與++i的區(qū)別:++i是先執(zhí)行i=i+1后,再使用i的值;i++是先使用i的值后,再執(zhí)行i=i+1。例2.9:

#include<stdio.h>intmain(){inti=0,j;j=i++;printf(“%d%d\n”,i,j);i=0;j=++i;printf(“%d%d\n”,i,j);}區(qū)分:j=i+1;j=++i;011注意:

(1)自增運(yùn)算符(++),自減運(yùn)算符(--),只能用于變量,而不能用于常量或表達(dá)式。如:5++、--(a+b)不合法。(2)++和--的優(yōu)先級(jí)高于算術(shù)運(yùn)算符,結(jié)合方向是“自右至左”。如:-i++相當(dāng)于-(i++)。(3)C語(yǔ)言中有的運(yùn)算符為一個(gè)字符,有的運(yùn)算符由兩個(gè)字符組成,為避免誤解,最好采取大家都能理解的寫法。例如:不要寫成i+++j的形式,而應(yīng)寫成

(i++)+j的形式2.9逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式逗號(hào)運(yùn)算符:將兩個(gè)表達(dá)式連接起來(lái),又稱為“順序求值運(yùn)算符”.

如:3+5,6+8

一般形式:

表達(dá)式1,表達(dá)式2求解過(guò)程:

1)求解表達(dá)式1

2)再求解表達(dá)式2

3)整個(gè)逗號(hào)表達(dá)式的值是表達(dá)式2的值。逗號(hào)表達(dá)式的值為14例:逗號(hào)表達(dá)式a=3*5,a*4分析:逗號(hào)運(yùn)算符是所有運(yùn)算符中級(jí)別最低的,因此應(yīng)先求解a=3*5。a的值為15,然后求解a*4,得60。整個(gè)逗號(hào)表達(dá)式的值為60。

一個(gè)逗號(hào)表達(dá)式又可以與另一個(gè)表達(dá)式組成一個(gè)新的逗號(hào)表達(dá)式如:(a=3*5,a*4),a+5先計(jì)算出a的值等于15,再進(jìn)行a*4的運(yùn)算得60(但a值未變,仍為15),再進(jìn)行a+5得20,即整個(gè)表達(dá)式的值為20。逗號(hào)表達(dá)式的一般形式可以擴(kuò)展為表達(dá)式1,表達(dá)式2,表達(dá)式3,……,表達(dá)式n它的值為表達(dá)式n的值。逗號(hào)運(yùn)算符是所有運(yùn)算符中級(jí)別最低的例:①x=(a=3,6*3)②x=a=3,6*a逗號(hào)表達(dá)式,包括一個(gè)賦值表達(dá)式和一個(gè)算術(shù)表達(dá)式,x的值為3,整個(gè)逗號(hào)表達(dá)式的值為18。

注意:并不是任何地方出現(xiàn)的逗號(hào)都是作為逗號(hào)運(yùn)算符。

如:printf(“%d,%d,%d”,a,b,c);“a,b,c”并不是一個(gè)逗號(hào)表達(dá)式,它是printf函數(shù)的3個(gè)參數(shù)printf(“%d,%d,%d”,(a,b,c),b,c);

“(a,b,c)”是一個(gè)逗號(hào)表達(dá)式,它的值等于c的值。例:#include<stdio.h>intmain(){inta=1;printf(“結(jié)果為:%d\n”,a=3*a,3*a);}結(jié)果為:3(a=3*a,3*a)結(jié)果為:92.10賦值表達(dá)式和賦值語(yǔ)句一、賦值運(yùn)算符“=”用法:變量=表達(dá)式作用:將表達(dá)式的值賦給變量(常量、變量是表達(dá)式的特例)如:a=5;

ave=(a+b)/10;注意:與數(shù)學(xué)中的等式不同!二、復(fù)合的賦值運(yùn)算符在賦值符“=”之前加上其他運(yùn)算符,構(gòu)成復(fù)合賦值運(yùn)算符+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=如:a+=3等價(jià)于a=a+3x*=y+8等價(jià)于x=x*(y+8)x%=3等價(jià)于x=x%3三、賦值表達(dá)式由賦值運(yùn)算符將一個(gè)變量和一個(gè)表達(dá)式連接起來(lái)的式子稱為“賦值表達(dá)式”。形式:變量=表達(dá)式如:a=5、a=b=5(右結(jié)合)計(jì)算1)計(jì)算賦值運(yùn)算符右側(cè)“表達(dá)式”的值過(guò)程:2)將計(jì)算結(jié)果賦給左側(cè)的變量

3)賦值表達(dá)式的值就是被賦值的變量的值例:a=b=c=5a=(b=10)/(c=2)a=5+(c=6)a+=a-=a*aa=(b=4)+(c=6)四、賦值結(jié)果與類型轉(zhuǎn)換1、實(shí)型數(shù)據(jù)(單、雙精度)賦給整型變量時(shí),舍棄實(shí)數(shù)的小數(shù)部分。2、整型數(shù)據(jù)賦給單、雙精度變量時(shí),數(shù)值不變,但以浮點(diǎn)數(shù)形式存儲(chǔ)到變量中。

例:#include<stdio.h>intmain(){inti;floatf;i=5.34;f=23;printf(“%d%f\n”,i,f);}523.0000003、長(zhǎng)度相同的有符號(hào)與無(wú)符號(hào)整型數(shù)間,原樣賦值(但數(shù)值有時(shí)會(huì)有變化)#include<stdio.h>intmain(){unsigneda;

intb=-1;a=b;

printf(“%d->%u\n”,b,a);a=65534u;b=a;

printf(“%d->%u\n”,b,a);}-1->65535-2->655344、char、int、long等類型的轉(zhuǎn)換

1)“短”數(shù)據(jù)賦給“長(zhǎng)”變量符號(hào)擴(kuò)展:若最高位為1(負(fù)數(shù)),則變量高字節(jié)補(bǔ)1;反之,補(bǔ)0。#include<stdio.h>intmain(){charc;inti;c=43;i=c;

printf(“i=%d\n”,i);c=‘\376’;i=c;

printf(“i=%d\n”,i);}2)“長(zhǎng)”數(shù)據(jù)賦給“短”變量只將數(shù)據(jù)的低字節(jié)位原封不動(dòng)送到變量中(數(shù)據(jù)有可能有差錯(cuò))#include<stdio.h>intmain(){inta;longb=6324232L;a=b;

printf(“a=%d,b=%ld\n”,a,b);}a=-32760,b=6324232五、賦值語(yǔ)句

即賦值表達(dá)式后加“;”構(gòu)成。

要區(qū)分賦值表達(dá)式與賦值語(yǔ)句如:if((a=b)>0)t=a;

表達(dá)式語(yǔ)句注意:賦值表達(dá)式可包含在其它表達(dá)式之中,而賦值語(yǔ)句不行;賦值語(yǔ)句只能作為一條單獨(dú)的語(yǔ)句,或放在復(fù)合語(yǔ)句中。第三章最簡(jiǎn)單的C程序設(shè)計(jì)順序程序設(shè)計(jì)內(nèi)容提要:C語(yǔ)句概述

基本的數(shù)據(jù)輸入/輸出函數(shù)簡(jiǎn)單的C程序設(shè)計(jì)著名計(jì)算機(jī)科學(xué)家沃思提出:數(shù)據(jù)結(jié)構(gòu)+算法=程序描述數(shù)據(jù)的類型、組織形式描述對(duì)數(shù)據(jù)的操作步驟3.1算法的概念

做事情都有---方法、步驟(順序)---決定事情成敗1、算法:計(jì)算機(jī)求解某一問(wèn)題而采用的具體方法、步驟2、兩大類計(jì)算機(jī)算法:數(shù)值運(yùn)算算法、非數(shù)值運(yùn)算算法(求數(shù)值解、成熟)(事務(wù)管理、廣泛)3、算法的特性:有窮性、確定性、有效性等4、算法描述:描述算法的方法有多種歸納為二大類:①文字②圖形(符號(hào))3.2算法的描述方法常用的算法描述方法:(1)帶序號(hào)的自然語(yǔ)言描述易懂卻不直觀,不嚴(yán)格(2)流程圖:靈活、自由、形象、直觀,可表示任何算法輸入/輸出處理判斷起止連接點(diǎn)流程線(3)N-S圖(盒圖):完全去掉了帶箭頭的流程線,算法的所有處理步驟都寫在一個(gè)大矩形框(表示簡(jiǎn)單、符合結(jié)構(gòu)化思想)(4)偽代碼:用介于自然語(yǔ)言與計(jì)算機(jī)語(yǔ)言之間的文字及符號(hào)來(lái)描述算法(方便、易懂、便于向計(jì)算機(jī)語(yǔ)言過(guò)渡)例1:計(jì)算S=,寫出其算法。自然語(yǔ)言描述:流程圖描述:N-S圖描述:偽代碼描述:3.3結(jié)構(gòu)化程序設(shè)計(jì)方法一、結(jié)構(gòu)化程序的三種基本結(jié)構(gòu)

1966年提出三種基本結(jié)構(gòu),用這三種基本結(jié)構(gòu)作為表示一種良好算法的基本單元:順序、選擇、循環(huán)任何復(fù)雜的算法都是由這三種基本結(jié)構(gòu)按一定規(guī)律組成。(1)順序結(jié)構(gòu)ABABa=3;b=4;c=a+b;操作步驟按書(shū)寫順序執(zhí)行(2)選擇結(jié)構(gòu)PABTFABTFPif(x!=0)y=sin(x)/x;elsey=1;

(3)循環(huán)結(jié)構(gòu)根據(jù)條件P決定是否重復(fù)執(zhí)行循環(huán)體中的操作。sum=0;i=1;while(i<=100){sum+=i;i++;}sum=0;i=1;do{sum+=i;i++;}while(i<=100);二、三種基本結(jié)構(gòu)的共同特點(diǎn)

(1)單入口單出口(2)結(jié)構(gòu)內(nèi)的每一部分都有機(jī)會(huì)被執(zhí)行(3)不存在“死循環(huán)”三、結(jié)構(gòu)化程序設(shè)計(jì)的優(yōu)點(diǎn)用三種基本結(jié)構(gòu)組成的程序是結(jié)構(gòu)化程序優(yōu)點(diǎn):易編、易讀、易懂、易維護(hù)強(qiáng)調(diào)程序設(shè)計(jì)風(fēng)格和程序結(jié)構(gòu)的規(guī)范化核心思想:自頂向下、逐步細(xì)化,模塊化設(shè)計(jì),結(jié)構(gòu)化編碼舉例:張丘建《算經(jīng)》中提出“百雞問(wèn)題”:雞翁一值錢五,雞母一值錢三,雞雛三值錢一。百錢買百雞,問(wèn)雞翁、母、雛各幾何?(體會(huì)編程步驟)分析:cocks+hens+chicks=1005*cocks+3*hens+chicks/3=100

其中:0≤cocks≤190≤hens≤330≤chicks≤100

思路:依次取cocks的值域中的值,然后求其余兩數(shù),看是否合乎題意算法描述:cocks=0當(dāng)cocks≤19時(shí)

{找滿足題意hens,chicks數(shù)

cocks加1}cocks=0當(dāng)cocks≤19時(shí){hens=0

當(dāng)hens≤33時(shí)

{chicks=100-cocks-hens

如果(5*cocks+3*hens+chicks/3=100)則輸出hens加1}cocks加1}cocks=0

當(dāng)cocks≤19時(shí)

{hens=0

當(dāng)hens≤33時(shí)

{找滿足題意的chicks數(shù)

hens加1}cocks加1}細(xì)化細(xì)化用計(jì)算機(jī)語(yǔ)言寫出程序

intmain(){intcocks=0,hens,chicks;while(cocks<=19){hens=0;while(hens<=33){chicks=100-cocks-hens;if(5.0*cocks+3.0*hens+chicks/3.0==100)printf(“%d%d%d\n”,cocks,hens,chicks);hens++;}cocks++;}}025752077187813801181683124843.4C語(yǔ)句的概述一、語(yǔ)句用來(lái)對(duì)數(shù)據(jù)進(jìn)行加工(完成操作任務(wù)),是構(gòu)成程序的基本單位,通常一個(gè)C程序由若干個(gè)函數(shù)(系統(tǒng)、用戶提供)組成。每一函數(shù)由若干條語(yǔ)句組成。每條語(yǔ)句總是以“;”結(jié)束。二、C語(yǔ)句的分類(簡(jiǎn)單語(yǔ)句、復(fù)合語(yǔ)句、空語(yǔ)句)(一)簡(jiǎn)單語(yǔ)句1)表達(dá)式語(yǔ)句:由一個(gè)表達(dá)式后跟“;”組成如:a=3(賦值表達(dá)式)a=3;(賦值語(yǔ)句)i++i++;2)函數(shù)調(diào)用語(yǔ)句:函數(shù)調(diào)用表達(dá)式加一個(gè)“;”如:printf(“Hello,world!\n”);3)結(jié)構(gòu)控制語(yǔ)句:控制程序流程選擇語(yǔ)句:if…else…switch

循環(huán)語(yǔ)句:forwhiledo…while…

轉(zhuǎn)向語(yǔ)句:continuebreakreturngoto(二)復(fù)合語(yǔ)句:將一組語(yǔ)句括在一對(duì){}中如:while(i<100){sum+=i;i++;}

說(shuō)明:

1)復(fù)合語(yǔ)句的{}之后不能有“;”

2)復(fù)合語(yǔ)句中可以是簡(jiǎn)單語(yǔ)句、復(fù)合語(yǔ)句、空語(yǔ)句(三)空語(yǔ)句:;/*僅有一個(gè);*/

空語(yǔ)句什么也不做。有時(shí)用作被轉(zhuǎn)向點(diǎn),或?yàn)檠h(huán)語(yǔ)句提供空體。如:for(i=0;i<=10;i++);3.5字符數(shù)據(jù)的輸入輸出引言:C語(yǔ)言沒(méi)有輸入/輸出語(yǔ)句,I/O操作通過(guò)調(diào)用系統(tǒng)函數(shù)實(shí)現(xiàn)。在程序開(kāi)頭要有:#include“stdio.h”

或#include<stdio.h>默認(rèn)的輸入設(shè)備——鍵盤默認(rèn)的輸出設(shè)備——顯示器一、字符輸出函數(shù)putchar()形式:putchar(c)作用:向顯示器上輸出一個(gè)字符(將c的值輸出到顯示器上,c可以是字符型和整型的常量、變量、表達(dá)式)#include<stdio.h>intmain(){charc1,c2;c1=‘b’;c2=98;putchar(c1);putchar(c2);putchar(‘b’);putchar(98);}#include<stdio.h>intmain(){putchar(‘\101’);putchar(‘\n’);putchar(‘\\’);}二、字符輸入函數(shù)getchar()形式:getchar()作用:從鍵盤緩沖區(qū)讀入一個(gè)字符注意:1)當(dāng)輸入多個(gè)字符時(shí),多余字符作廢

(按回車后才開(kāi)始接收字符)例:#include<stdio.h>intmain(){intc;printf(“Enteracharacter:”);c=getchar();printf(“%c:%d\n”,c,c);}Enteracharacter:aa:972)用getchar()得到的字符可以賦給字符型變量、整型變量,或作為表達(dá)式的一部分。如:c=getchar()+32;putchar(c);

若輸入是:A

則輸出是:a例:#include<stdio.h>intmain(){putchar(getchar());}aa3.6格式輸入輸出一、格式輸出函數(shù)printf作用:向終端輸出若干個(gè)類型任意的數(shù)據(jù)。形式:printf(格式控制符,輸出項(xiàng)列表)雙引號(hào)括起來(lái)的字符串要輸出的內(nèi)容(常量、變量、表達(dá)式等)格式控制字符串:

i=%3df=%5.1f%5.1f引導(dǎo)符寬度小數(shù)位數(shù)精度類型符#include<stdio.h>intmain(){inti=5;floatf=32.345;printf(“i=%3df=%5.1f\n”,i,f);printf(“End.\n”);}i=5f=32.3End.格式控制符完整的格式:

%-Om.nl/h格式字符說(shuō)明:1、格式字符:指定輸出項(xiàng)的數(shù)據(jù)類型和輸出的格式

1)d——十進(jìn)制整數(shù)

2)o——無(wú)符號(hào)八進(jìn)制數(shù)

3)x——無(wú)符號(hào)十六進(jìn)制數(shù)

4)u——不帶符號(hào)的十進(jìn)制整數(shù)#include<stdio.h>intmain(){unsignedinta=65535;intb=-2;printf(“a=%d,%o,%x,%u\n”,a,a,a,a);printf(“b=%d,%o,%x,%u\n”,b,b,b,b);}a=-1,177777,ffff,65535b=-2,177776,fffe,65534有符號(hào)的整型數(shù)b可以用%u輸出無(wú)符號(hào)的整型數(shù)a可以用%d輸出5)c輸出一字符6)s輸出一字符串7)e以指數(shù)的形式輸出實(shí)型數(shù)8)f以小數(shù)的形式輸出實(shí)型數(shù)9)%輸出%#include<stdio.h>intmain(){floatt;charb=‘a(chǎn)’;inti=97;t=28.333;printf(“%f\n”,t);printf(“%c,%d\n”,b,b);printf(“%c,%d\n”,i,i);printf(“%s,%%\n”,“china”);}28.333000a,97a,97china,%

%-Om.nl/h格式字符2、長(zhǎng)度修正符

l:對(duì)整型指長(zhǎng)整型long

例:%ld,%lx,%lo,%lu

對(duì)實(shí)型指雙精度double

例:%lf3、域?qū)捈熬鹊拿枋?/p>

m:域?qū)挘磳?duì)應(yīng)的輸出項(xiàng)在輸出設(shè)備上所占的字符數(shù)若實(shí)際數(shù)據(jù)寬度>m,按實(shí)際數(shù)據(jù)寬度輸出若實(shí)際數(shù)據(jù)寬度<m,左邊補(bǔ)空

n:精度,說(shuō)明輸出的實(shí)型數(shù)的小數(shù)位數(shù)幾點(diǎn)說(shuō)明:編譯程序只是檢查printf函數(shù)的調(diào)用形式,不分析格式控制字符串,如果格式字符與輸出項(xiàng)的類型不匹配,不進(jìn)行類型轉(zhuǎn)換;格式字符要用小寫字母;格式控制字符串中可以包含轉(zhuǎn)義字符;格式控制字符串中的普通字符則原樣輸出;輸出項(xiàng)的參數(shù)除了常數(shù)、變量外還可以是表達(dá)式、函數(shù)調(diào)用如:printf(“max=%d\ti=%d\n”,imax(a,b),i++);#include<stdio.h>intmain(){inti=321;floatf=123.456;printf(“%5d:”,i);

printf(“%5.2f\n”,i);

printf(“%5d:”,f);printf(“%5.2f\n”,f);}321:403022178.210:123.463.6格式輸入輸出二、格式輸入函數(shù)scanf作用:按格式控制符的要求將數(shù)據(jù)從終端傳送到變量地址所指定的內(nèi)存空間形式:scanf(格式控制符,變量地址列表)1、變量地址:通過(guò)對(duì)變量名“求地址”運(yùn)算得到形式:&變量名#include<stdio.h>intmain(){inta;floatb;scanf(“%d%f”,&a,&b);printf(“%d,%f\n”,a,b);}

&a得到2字節(jié)空間的首地址&b得到4字節(jié)空間的首地址2、格式控制符(1)格式說(shuō)明項(xiàng)例:#include<stdio.h>intmain(){inta,b,c,d;scanf(“%d%d”,&a,&b);printf(“%d,%d\n”,a,b);scanf(“%3d%3d”,&c,&d);printf(“%d,%d\n”,c,d);}123412,34111222111,222(2)輸入數(shù)據(jù)的分隔采用隱含的分隔符:空格、回車鍵、Tab鍵例:#include<stdio.h>intmain(){inta;floatb,c;printf(“inputa,b,c:”);scanf(“%d%f%f”,&a,&b,&c);printf(“a=%d,b=%f,c=%f\n”,a,b,c);}inputa,b,c:1234a=12,b=3.000000,c=4.000000根據(jù)格式中指定的域?qū)挿指魯?shù)據(jù)項(xiàng)(不提倡)采用用戶指定的分隔符例:#include<stdio.h>intmain(){inta;floatb,c;scanf(“%2d%3f%2f”,&a,&b,&c);printf(“a=%d,b=%f,c=%f\n”,a,b,c);}scanf(“%d,%f,%f”,&a,&b,&c);12,3,4a=12,b=3.000000,c=4.000000scanf(“a=%d,b=%f,c=%f”,&a,&b,&c);a=12,b=3,c=4a=12,b=3.000000,c=4.000000注意:scanf中對(duì)unsigned型數(shù)據(jù)用u,o,x說(shuō)明符輸入輸入數(shù)據(jù)時(shí)不能規(guī)定數(shù)據(jù)的精度如:scanf(“%4.2f”,&a);在“格式控制”字符串中,若有格式說(shuō)明以外的其他字符,輸入時(shí)應(yīng)照原樣輸入如:scanf(“a=%d,b=%f”,&a,&b);

輸入:a=123,b=45.678%c一次接收一個(gè)字符,無(wú)需單引號(hào),空格字符是有效字符。思考:scanf(“Enteranumber?%d”,&n);的輸入格式?3.7程序舉例例:輸入一個(gè)小寫字母,打印該字母及其大寫字母,以及它們的后續(xù)字母分析:大寫字母的ASCII碼比對(duì)應(yīng)的小寫字母小32

后續(xù)字母的ASCII碼比該字母大1。#include<stdio.h>intmain(){charc;printf(“請(qǐng)輸入任意一個(gè)小寫字符:”);

c=getchar();printf(“%c,%c\n”,c,c+1);printf(“%c,%c\n”,c-32,c-31);}請(qǐng)輸入任意一個(gè)小寫字符:xx,yX,Y能否通過(guò)其他方法輸入、輸出?#include<stdio.h>intmain(){charc;printf(“請(qǐng)輸入任意一個(gè)小寫字符:”);

c=getchar();printf(“%c,%c\n”,c,c+1);printf(“%c,%c\n”,c-32,c-31);}可用putchar函數(shù)代替:putchar(c);putchar(c+1);若輸入一個(gè)非字母字符,輸出怎樣?例:求ax2+bx+c=0方程的根。a,b,c由鍵盤輸入,設(shè)b2-4ac>0。I處理O#include<stdio.h>

#include<math.h>

intmain()

{floata,b,c,disc,x1,x2,p,q;

scanf("a=%f,b=%f,c=%f",&a,&b,&c);

disc=b*b-4*a*c;

p=-b/(2*a);

q=sqrt(disc)/(2*a);

x1=p+q;x2=p-q;

printf("x1=%5.2f\nx2=%5.2f\n",x1,x2);

}運(yùn)行情況:

a=1,b=3,c=2↙

x1=-1.00

x2=-2.00習(xí)題3-6#definePI3.14#include<stdio.h>intmain(){inth; floatr,l,s,s1,v1,v2; printf("請(qǐng)輸入圓半徑和圓柱高:\n"); scanf("%f,%d",&r,&h); l=2*PI*r; s=PI*r*r; s1=4*PI*r*r; v1=4*PI*r*r*r/3; v2=s*h; printf("圓周長(zhǎng)=%.2f\n圓面積=%.2f\n圓球表面積=%.2f\n圓球體積=%.2f\n圓柱體體積=%.2f\n",l,s,s1,v1,v2);}雞兔同籠已知雞兔總頭數(shù)為h,總腳數(shù)為f,求雞兔各多少只?(要求通過(guò)輸入語(yǔ)句給h和f賦值,并且在輸入輸出時(shí)加上必要的提示語(yǔ)句)例如:請(qǐng)輸入總頭數(shù)h,總腳數(shù)f:2,6雞:1,兔:1#incl

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論