版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C語言程序設(shè)計(jì)教程第1章緒論-2-第1章緒論——學(xué)習(xí)目標(biāo)了解程序設(shè)計(jì)的基本概念了解C語言的發(fā)展掌握程序設(shè)計(jì)算法的設(shè)計(jì)及其表示方法了解C程序的結(jié)構(gòu)熟悉C程序的運(yùn)行環(huán)境-3-第1章緒論——主要內(nèi)容C程序設(shè)計(jì)概念C語言簡(jiǎn)介算法與算法描述程序基本結(jié)構(gòu)開發(fā)環(huán)境與程序調(diào)試
-4-1.1程序及程序設(shè)計(jì)方法
1.1.1程序設(shè)計(jì)概念第1章緒論1.程序:是指為解決某一問題而向計(jì)算機(jī)發(fā)出的一連串的操作命令。2.程序設(shè)計(jì)語言:是程序設(shè)計(jì)人員和計(jì)算機(jī)進(jìn)行信息交流的工具。3.程序設(shè)計(jì)方法:
分為面向過程的結(jié)構(gòu)化程序設(shè)計(jì)方法和面向?qū)ο蟮某绦蛟O(shè)計(jì)方法兩種。-5-第1章緒論機(jī)器語言:計(jì)算機(jī)硬件能直接識(shí)別和執(zhí)行的指令系統(tǒng)。特點(diǎn):占用資源少、運(yùn)行速度快、效率高;可讀性和可移植性差、不易編寫、調(diào)試和查錯(cuò);主要用于編寫計(jì)算機(jī)最底層的核心系統(tǒng)程序。
匯編語言:用助記符號(hào)代替機(jī)器語言的二進(jìn)制代碼。特點(diǎn):較機(jī)器語言的可讀性、編寫效率和質(zhì)量有所提高;不能直接執(zhí)行,需要翻譯成機(jī)器語言后才能執(zhí)行,運(yùn)行效率較機(jī)器語言低,記憶的指令繁多,不便于普及。高級(jí)語言:用接近自然語言和數(shù)學(xué)公式的形式編寫程序的計(jì)算機(jī)語言。特點(diǎn):可讀性和可移植性好,易于理解和調(diào)試修改;運(yùn)行效率較匯編語言低。程序設(shè)計(jì)語言:-6-面向過程的結(jié)構(gòu)化程序設(shè)計(jì)方法:自頂向下、逐步求精。其程序結(jié)構(gòu)是按功能劃分為若干個(gè)基本模塊,這些模塊形成一個(gè)樹狀結(jié)構(gòu);各模塊之間的關(guān)系盡可能簡(jiǎn)單,在功能上相對(duì)獨(dú)立;每一模塊內(nèi)部均是由順序、選擇和循環(huán)三種基本結(jié)構(gòu)組成;其模塊化實(shí)現(xiàn)的具體方法是使用函數(shù)。面向?qū)ο蟮某绦蛟O(shè)計(jì)方法:它將數(shù)據(jù)及對(duì)數(shù)據(jù)的操作方法放在一起,作為一個(gè)相互依存、不可分離的整體——對(duì)象。對(duì)同類型對(duì)象抽象出其共性,相成類。類中的大多數(shù)數(shù)據(jù),只能用本類的方法處理。類通過一個(gè)簡(jiǎn)單的外部接口與外界發(fā)生關(guān)系,對(duì)象與對(duì)象之間通過消息進(jìn)行通信。程序設(shè)計(jì)方法:第1章緒論-7-1.1.2C語言簡(jiǎn)介第1章緒論1.C語言發(fā)展1960年將ALGOL60發(fā)展成CPL;1967年將CPL改寫成BCPL;1970年將BCPL修改成B語言;1972年B語言改進(jìn)為C語言;1978年《TheCProgrammingLanguage》出版;1983年美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)ANSI制定了C語言標(biāo)準(zhǔn);1987年開始實(shí)施ANSIC。-8-1.1.2C語言簡(jiǎn)介
第1章緒論2.C語言版本MicrosoftC或稱MSC;BorlandTurboC或稱TurboC;AT&TC。-9-1.1.2C語言簡(jiǎn)介
第1章緒論3.C語言特點(diǎn)C語言簡(jiǎn)潔、緊湊,使用方便、靈活;C語言運(yùn)算符豐富,一共有34種運(yùn)算符;C語言數(shù)據(jù)結(jié)構(gòu)類型豐富;C語言具有強(qiáng)大的圖形功能;C語言允許直接訪問物理地址,能進(jìn)行位操作;C語言生成目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高、可移植性好。-10-1.2算法與程序基本結(jié)構(gòu)
1.2.1算法與算法描述第1章緒論1.算法的概念為解決某一個(gè)問題而采取的某種方法和步驟。2.算法的特性有窮性;確定性;有效性;輸入;輸出。-11-第1章緒論3.算法的表示法自然語言描述法通俗易懂,但文字冗長(zhǎng),且易出現(xiàn)“歧義性”。
幾何圖形表示法分ANSI圖和N-S圖兩種表示法。偽代碼表示法用一種介于自然語言和計(jì)算機(jī)語言之間的文字和符號(hào)來描述算法。計(jì)算機(jī)語言表示法用某種計(jì)算機(jī)語言表示算法,即計(jì)算機(jī)能夠執(zhí)行的算法。
-12-自然語言描述法:【例1-1】對(duì)一個(gè)大于或等于3的正整數(shù),判斷它是不是一個(gè)素?cái)?shù)。自然語言描述的算法可表示為:第1章緒論S1:輸入n的值;S2:i=2;S3:n被i除,得余數(shù)r;S4:如果r=0,表示n能被i整除,則打印n“不是素?cái)?shù)”,算法結(jié)束;否則執(zhí)行S5;S5:i+1→i;S6:如果i≤n-1,返回S3;否則打印n“是素?cái)?shù)”;然后算法結(jié)束。-13-第1章緒論ANSI圖表示法:由一些特定意義的圖形、流程線及簡(jiǎn)要的文字說明構(gòu)成,它能清晰明確地表示程序的運(yùn)行過程,ANSI圖又稱流程圖。ANSI圖表示法特點(diǎn):直觀形象,易于理解。
ANSI圖表示法常用的五種符號(hào):幾何圖形表示法:-14-【例1-2】求某班某同學(xué)3門課程數(shù)學(xué)(xs)、英語(yy)、計(jì)算機(jī)(jsj)的總分(zf)。用ANSI圖表示該算法如下圖:第1章緒論-15-N-S圖表示法:N-S圖是無線的流程圖,它把整個(gè)程序?qū)懺谝粋€(gè)大框圖內(nèi),這個(gè)大框圖由若干個(gè)小的基本框圖構(gòu)成,N-S圖又稱盒圖。N-S圖表示法特點(diǎn):是取消了流程線,既不允許流程任意轉(zhuǎn)移,只能從上到下順序進(jìn)行N-S圖表示法三種基本結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu),如下圖所示:第1章緒論-16-【例1-3】輸入50個(gè)學(xué)生的成績(jī),統(tǒng)計(jì)出不及格人數(shù)。用N-S圖表示該算法如下圖:第1章緒論-17-偽代碼表示法:【例1-4】輸入50個(gè)學(xué)生的成績(jī),統(tǒng)計(jì)出不及格人數(shù)。用偽代碼表示該算法如下:第1章緒論n=0
m=0
whilenlessthan50
inputg
ifglessthan60thenm=m+1
n=n+1
whileend
outputm-18-計(jì)算機(jī)語言表示法:【例1-5】用C語言表示輸入三個(gè)整數(shù),求出最大數(shù)和最小數(shù)的算法。算法如下:第1章緒論#include“stdio.h”main(){inta,b,c,max,min;
printf("inputthreenumbers:");
scanf("%d%d%d",&a,&b,&c);
if(a>b)
{max=a;min=b;}
else
{max=b;min=a;}
if(max<c)
max=c;
if(min>c)
min=c;
printf("max=%d\nmin=%d",max,min);}
-19-第1章緒論4.算法設(shè)計(jì)的目標(biāo)正確性:在合法的數(shù)據(jù)輸入時(shí),能在有限的運(yùn)行時(shí)間內(nèi),得出正確的結(jié)果;可讀性:方便閱讀和交流;健壯性:當(dāng)有非法的數(shù)據(jù)時(shí),能正確做出反應(yīng)和處理,不會(huì)出現(xiàn)莫名其妙的結(jié)果;高效和低存儲(chǔ)性:執(zhí)行時(shí)間短,存儲(chǔ)需求低。-20-第1章緒論1.2.2程序基本結(jié)構(gòu)
1.C程序的基本結(jié)構(gòu)函數(shù)是C語言程序的基本結(jié)構(gòu),一個(gè)C語言程序由一個(gè)或者多個(gè)函數(shù)組成,一個(gè)C函數(shù)由若干條C語句構(gòu)成,一個(gè)C語句由若干基本單詞組成。C函數(shù)是完成某個(gè)整體功能的最小單位,是相對(duì)對(duì)立的模塊。一個(gè)C語言程序可以包含一個(gè)主函數(shù)和若干個(gè)其他函數(shù)。所有C函數(shù)的結(jié)構(gòu)都包括三個(gè)部分:函數(shù)名、形式參數(shù)和函數(shù)體-21-第1章緒論C程序說明:C源程序文件是一個(gè)文本文件,其擴(kuò)展名是*.c,一個(gè)C程序除了源程序文件外,還包含其它文件。C程序由注釋部分、程序頭部分(編譯預(yù)處理部分)、程序主體部分組成,注釋可以出現(xiàn)在主體部分中。注釋部分以//或/**/作為標(biāo)記。程序主體部分由n個(gè)(n>=1)函數(shù)并列組成,且僅能有一個(gè)main函數(shù)。一個(gè)應(yīng)用系統(tǒng)可以包含若干個(gè)源程序文件。-22-第1章緒論2.C程序的書寫格式C程序書寫格式自由,一行可以寫一個(gè)或多個(gè)語句,一個(gè)語句也可以分寫在多行上,每個(gè)語句以分號(hào)“;”作為結(jié)束標(biāo)志。用大括號(hào){}表示程序的層次范圍,一個(gè)完整的程序模塊要用一對(duì){}括號(hào)相括。C程序中的名字(標(biāo)識(shí)符)區(qū)分大小寫字母。-23-第1章緒論1.3開發(fā)環(huán)境與程序調(diào)試
C語言編譯連接過程圖示:-24-第1章緒論1.3開發(fā)環(huán)境與程序調(diào)試
TurboC2.0集成開發(fā)環(huán)境
-25-第1章緒論編輯窗口在主菜單窗口的下面,對(duì)TurboC源程序進(jìn)行輸入和編輯。源程序都在這個(gè)窗口中顯示,在編輯窗口的上部有一行英文:Line1Col1InsertIndentTabFillUnindentC:NONAME.C告訴用戶光標(biāo)當(dāng)前所在的位置及當(dāng)前正在編輯的文件名等信息。信息窗口在屏幕的下部,用來顯示編譯和連接時(shí)的有關(guān)信息。在信息窗口上方有“Message”字樣作為標(biāo)志。在編輯源程序時(shí)不用此窗口。功能鍵提示行
在屏幕信息窗口的下面。它顯示一些功能鍵的作用。命令菜單按下功能鍵F10,激活主菜單。程序的編輯、編譯、調(diào)試和運(yùn)行均可在主菜單的各功能子菜單上完成。-26-第1章緒論2.TurboC/C++forWindows集成開發(fā)環(huán)境程序編輯窗口資源瀏覽窗口錯(cuò)誤信息的英文顯示窗口錯(cuò)誤信息的中文顯示窗口-27-第1章緒論資源瀏覽窗口在資源瀏覽窗口中,提供了“軟件應(yīng)用問題解答”項(xiàng),雙擊它就可看到該軟件的使用幫助信息。同時(shí)還有學(xué)習(xí)方法指導(dǎo)、典型源程序、典型例題分析等大量的學(xué)習(xí)內(nèi)容。錯(cuò)誤信息窗口有中文和英文兩種信息提示窗口。用戶可以根據(jù)需要進(jìn)行選擇,打開“工具”菜單的“選項(xiàng)”對(duì)話框進(jìn)行相應(yīng)設(shè)置。另外在該對(duì)話框中還可以設(shè)置“編譯器”的類型、“源程序的擴(kuò)展名”以及我的程序文件夾的路徑設(shè)置。編輯窗口用來編輯源程序,菜單或工具欄上的命令均可用。另外該軟件具有自動(dòng)縮進(jìn)、語法著色、錯(cuò)誤信息自動(dòng)定位、運(yùn)行結(jié)果:可顯示漢字的功能。程序的運(yùn)行程序編輯好后,可單擊工具欄的“運(yùn)行”命令或選擇菜單欄上的“運(yùn)行”菜單,也可直接按Ctrl+F9運(yùn)行程序。C語言程序設(shè)計(jì)教程第2章程序設(shè)計(jì)基礎(chǔ)-29-第2章程序設(shè)計(jì)基礎(chǔ)——學(xué)習(xí)目標(biāo)掌握C語言基本數(shù)據(jù)類型掌握數(shù)據(jù)的常量、變量的表示方法掌握運(yùn)算符和表達(dá)式的表示方法掌握數(shù)據(jù)的輸入和輸出方法——主要內(nèi)容C語言數(shù)據(jù)類型、常量和變量運(yùn)算符和表達(dá)式數(shù)據(jù)類型的轉(zhuǎn)換優(yōu)先級(jí)和結(jié)合性數(shù)據(jù)的輸入和輸出清屏幕函數(shù)光標(biāo)定位函數(shù)
-30-第2章程序設(shè)計(jì)基礎(chǔ)-31-2.1C語言數(shù)據(jù)類型、常量和變量
2.1.1數(shù)據(jù)類型
第2章程序設(shè)計(jì)基礎(chǔ)數(shù)據(jù)類型基本類型復(fù)雜類型指針類型()空類型(void)字符型(char)數(shù)值類型枚舉類型(enum)數(shù)組類型([])結(jié)構(gòu)體類型(struct)共用體類型(union)整型(short,int,long,unsigbed)實(shí)型單精度型(float)雙精度型(double)基本數(shù)據(jù)類型表基本數(shù)據(jù)類型類型標(biāo)識(shí)符占內(nèi)存字節(jié)數(shù)值范圍字符型char1C字符集(0~255)基本整型int2-32768~32767短整型shortint2-32768~32767長(zhǎng)整型longint4-214783648~214783647無符號(hào)型unsigned20~65535無符號(hào)長(zhǎng)整型unsignedlong40~4294967295單精度實(shí)型float410-38~1038雙精度實(shí)型double810-308~10308-32-第2章程序設(shè)計(jì)基礎(chǔ)2.1.2常量和變量-33-1.常量程序運(yùn)行過程中不能被改變的量。1)數(shù)值常量整型常量整型常量即整常數(shù)。整常數(shù)有三種表示形式:十進(jìn)制:直接書寫,如15。八進(jìn)制:以0頭的數(shù)是八進(jìn)制數(shù),如015。十六進(jìn)制:以0x開頭的數(shù)是16進(jìn)制數(shù),如0x15。實(shí)型常量實(shí)型常量就是帶小數(shù)點(diǎn)的常數(shù)。有兩種表示形式:定點(diǎn)表示:小數(shù)點(diǎn)的位置固定不變,如4.6、-1.23。浮點(diǎn)表示:指數(shù)表示nE±m(xù),其中n為小數(shù),且小數(shù)點(diǎn)前只能有一位非零數(shù)字,m為整數(shù)。如1.568e+5,表示1.568×105。
第2章程序設(shè)計(jì)基礎(chǔ)2)字符常量-34-字符常量:用單引號(hào)括起來的單字符,如’a’、’d’
。字符串:用雙引號(hào)括起來的零個(gè)或多個(gè)字符,如“hello”、“a”。
C語言規(guī)定:在存儲(chǔ)字符串常量時(shí),由系統(tǒng)在字符串的末尾自動(dòng)加一個(gè)‘\0’作為字符串的結(jié)束標(biāo)志。轉(zhuǎn)義字符:用‘\’再加個(gè)字符,表示特殊的意義。如\n、\t,見教材表2-2。3)符號(hào)常量定義格式:#define標(biāo)識(shí)符常量如:#definePI3.1415926
使用符號(hào)具有含義清楚、見名知意、修改方便、一改全改的優(yōu)點(diǎn)。第2章程序設(shè)計(jì)基礎(chǔ)
類型:即變量所存儲(chǔ)數(shù)據(jù)的類型。變量名:每個(gè)變量都必須有一個(gè)名字,在對(duì)程序編譯連接時(shí)由編譯系統(tǒng)給每一個(gè)變量名分配對(duì)應(yīng)的內(nèi)存地址。變量的命名遵循標(biāo)識(shí)符的命名規(guī)則:C語言規(guī)定標(biāo)識(shí)符只能由字母、數(shù)字和下劃線三種字符組成,且第一個(gè)字符必須為字母或下劃線。變量的值:從變量中取值,實(shí)際上是通過變量名找到相應(yīng)的內(nèi)存地址,從該存儲(chǔ)單元中讀取數(shù)據(jù)。
例如:intx=5;表示變量的名稱為x,類型為int,變量的值為5。-35-2.變量程序運(yùn)行過程中其值可以被改變的量。1)變量的要素:類型、名稱、值第2章程序設(shè)計(jì)基礎(chǔ)-36-注意:編譯系統(tǒng)將大寫字母和小寫字母認(rèn)為是兩個(gè)不同的字符。建議變量名的長(zhǎng)度最好不要超過8個(gè)字符。在選擇變量名和其它標(biāo)識(shí)符時(shí),應(yīng)注意做到“見名知意”,即選有含意的英文單詞(或其縮寫)作標(biāo)識(shí)符。要求對(duì)所有用到的變量作強(qiáng)制定義,也就是“先定義,后使用”。第2章程序設(shè)計(jì)基礎(chǔ)2)變量的定義和初始化-37-變量定義的一般格式:數(shù)據(jù)類型標(biāo)識(shí)符變量1[,變量2,……];例如:inta,b,c;/*定義a,b,c均為整型變量*/floatd;/*定義d為浮點(diǎn)型變量*/charch;/*定義ch為字符型變量*/變量賦初值:在定義變量的同時(shí)使變量初始化。數(shù)據(jù)類型標(biāo)識(shí)符變量1[=初值][,變量2[=初值2],……];例如:floatr=2.5,pi=3.14159;第2章程序設(shè)計(jì)基礎(chǔ)-38-可以使被定義的變量的一部分賦初值。如:
inta,b,c=5;表示指定a、b、c為整型變量,但只對(duì)c初始化,c的初值為5如果對(duì)幾個(gè)變量賦以同一個(gè)初值,應(yīng)寫成:inta=3,b=3,c=3;表示a、b、c的初值都是3。不能寫成∶
inta=b=c3;
注意:初始化不是在編譯階段完成的而是在程序運(yùn)行時(shí)執(zhí)行本函數(shù)時(shí)賦初值的,相當(dāng)于有一個(gè)賦值語句。第2章程序設(shè)計(jì)基礎(chǔ)
2.2運(yùn)算符和表達(dá)式C語言運(yùn)算符豐富,范圍很寬,把除了控制語句和輸入/輸出以外的幾乎所有的基本操作都作為運(yùn)算符處理,所以C語言運(yùn)算符可以看作是操作符。C語言豐富的運(yùn)算符構(gòu)成C語言豐富的表達(dá)式(是運(yùn)算符就可以構(gòu)成表達(dá)式)。運(yùn)算符豐富、表達(dá)式豐富、靈活。在C語言中了提供算術(shù)、關(guān)系、邏輯運(yùn)算符、賦值運(yùn)算符,位操作運(yùn)算符、自增自減運(yùn)算符等等。-39-第2章程序設(shè)計(jì)基礎(chǔ)2.2.1算術(shù)運(yùn)算符及其表達(dá)式1.算術(shù)運(yùn)算符:+加法運(yùn)算符,如:3+5、+3)-減法運(yùn)算符,如:5-2、-3)*乘法運(yùn)算符,如:3*5/除法運(yùn)算符,如:5/3%求余運(yùn)算符,%兩側(cè)均應(yīng)為整型數(shù)據(jù),如:7%4的值為3余數(shù)的符號(hào)取被除數(shù)的符號(hào)
如:-13%5值為-3。
13%-5值為3。-40-第2章程序設(shè)計(jì)基礎(chǔ)自增(++)、自減(--)運(yùn)算符
-41-
“++”和“--”分別完成使變量增1或減1的運(yùn)算功能,右結(jié)合性。既可放在變量前也可放在變量后,如++x,x++,都是使x增1。但作為表達(dá)式引用時(shí)是有區(qū)別的。注意:不能對(duì)常量或表達(dá)式進(jìn)行這樣的操作,如++5是錯(cuò)誤的。如:
y=++x;等價(jià)于x=x+1;y=x;——前置運(yùn)算,先自增后引用
y=x++;等價(jià)于y=x;x=x+1;——后置運(yùn)算,先引用后自增
y=--x;等價(jià)于x=x-1;y=x;——前置運(yùn)算,先自減后引用
y=x--;等價(jià)于y=x;x=x-1;——后置運(yùn)算,先引用后自減第2章程序設(shè)計(jì)基礎(chǔ)2.算術(shù)表達(dá)式:-42-用算術(shù)運(yùn)算符將常量、變量或函數(shù)連接起來所構(gòu)成的式子。例如:a+2*b、-b+sqrt(b*b-4*a*c)/(2*a)、2%5注意:表達(dá)式值的類型取決于參與運(yùn)算的操作數(shù)類型長(zhǎng)(在內(nèi)存占字節(jié)多的類型)的類型。例如:1/2的值為0。1.0/2的值為0.5。第2章程序設(shè)計(jì)基礎(chǔ)2.2.2賦值運(yùn)算符及其表達(dá)式
“=”
就是賦值運(yùn)算符(賦值號(hào))。包含賦值運(yùn)算符的表達(dá)式叫做賦值表達(dá)式。-43-
例如:
a=4;/*把常量4賦給變量a*/()
b=(a+5)*c;/*把一個(gè)表達(dá)式的值賦給變量b*/()
3+b=6;()
注意:當(dāng)賦值運(yùn)算符兩側(cè)的運(yùn)算對(duì)象的數(shù)據(jù)類型不同時(shí),系統(tǒng)自動(dòng)進(jìn)行類型轉(zhuǎn)換,把賦值運(yùn)算符右邊的數(shù)據(jù)轉(zhuǎn)換成符號(hào)左邊的數(shù)據(jù)類型。
注意:賦值號(hào)的左邊只能是變量,而不允許是算術(shù)表達(dá)式或常量。第2章程序設(shè)計(jì)基礎(chǔ)2.2.3復(fù)合運(yùn)算符及其表達(dá)式賦值運(yùn)算符和算術(shù)運(yùn)算符組合成為復(fù)合賦值運(yùn)算符。
-44-例如
a+=a–=aa(設(shè)a12)步驟:
aa144.a–=aaa=a–aa=12–144=–132a+=–132a=a+(–132)=–264
+=加賦值a+=ba=a+b
-=
減賦值a-=ba=a-b*=
乘賦值a*=ba=a*b
/=
除賦值a/=ba=a/b
%=
求余賦值a%=ba=a%b例如:a+=2;等價(jià)于a=a+2;第2章程序設(shè)計(jì)基礎(chǔ)2.2.4關(guān)系運(yùn)算符及其表達(dá)式
1)關(guān)系運(yùn)算符關(guān)系運(yùn)算符是對(duì)兩個(gè)操作數(shù)進(jìn)行大小關(guān)系比較的運(yùn)算符,其操作結(jié)果是“真”或“假”。由于C語言中沒有邏輯類型的數(shù)據(jù),所以通常以非零即真,實(shí)際上常用整數(shù)“1”表示“真”,用“0”表示“假”。關(guān)系運(yùn)算符有6種:<(小于)<=(小于或等于)>(大于)>=(大于或等于)==(等于)!=(不等于)-45-優(yōu)先級(jí)相同(高)優(yōu)先級(jí)相同(低)第2章程序設(shè)計(jì)基礎(chǔ)-46-2)關(guān)系表達(dá)式用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式(可以是算術(shù)表達(dá)式或關(guān)系表達(dá)式,邏輯表達(dá)式,賦值表達(dá)式,字符表達(dá)式)接起來的式子,稱關(guān)系表達(dá)式C語言中沒有專用的邏輯值,1代表真,0代表假例:
5!=4其值為1(真)
a+5>b+3(若a=2,b=5)其值為0(假)例:a>b,a+b>b+c,(a=3)>(b=5),’a’<‘b’,(a>b)>(b<c)關(guān)系表達(dá)式的值是一個(gè)邏輯值,即“真”或“假”。第2章程序設(shè)計(jì)基礎(chǔ)邏輯運(yùn)算符是對(duì)邏輯量進(jìn)行操作的運(yùn)算符。邏輯量只有“真”和“假”兩個(gè)值,分別用1和0表示。運(yùn)算符含義說明
!
邏輯非,表示否定&&
邏輯與,表示且(相當(dāng)于AND)||
邏輯或,表示或者(相當(dāng)于OR)例如:若x為非零,則可描述為:!(x==0)或x!=0。若x大于a且小于b,則可描述為:x>a&&x<b。若x大于等于a或x小于等于b,則可描述為:x>=a||x<=b。-47-第2章程序設(shè)計(jì)基礎(chǔ)2.2.5邏輯運(yùn)算符及其表達(dá)式注意:在計(jì)算關(guān)系表達(dá)式的值時(shí),&&、||存在短路規(guī)則,即當(dāng)計(jì)算機(jī)從左向右依次計(jì)算關(guān)系表達(dá)式的值,若計(jì)算到某一個(gè)關(guān)系表達(dá)式時(shí)已經(jīng)能夠得出整個(gè)表達(dá)式的值時(shí),就不再計(jì)算其后邊的關(guān)系表達(dá)式。這樣可以使計(jì)算機(jī)計(jì)算關(guān)系表達(dá)式的值速度更快。-48-第2章程序設(shè)計(jì)基礎(chǔ)例如:設(shè)有intx=0,y=0,z=0執(zhí)行++x||++y&&++z后,x=1,y=0,z=0執(zhí)行++x&&++y||++z后,x=1,y=1,z=0-49-第2章程序設(shè)計(jì)基礎(chǔ)2.3數(shù)據(jù)類型的轉(zhuǎn)換2.3.1自動(dòng)轉(zhuǎn)換規(guī)則
-50-第2章程序設(shè)計(jì)基礎(chǔ)箭頭只表示轉(zhuǎn)換方向,并不是依次轉(zhuǎn)換。轉(zhuǎn)換過程是自動(dòng)完成的。【例2-1】計(jì)算半徑為5的圓的面積。-51-#include"stdio.h"#definePI3.14159;main(){intss,ri=5;ss=ri*ri*PI;printf("ss=%d\n",ss);}運(yùn)行結(jié)果:ss=78第2章程序設(shè)計(jì)基礎(chǔ)2.3.2強(qiáng)制轉(zhuǎn)換格式:
(類型標(biāo)識(shí)符)(表達(dá)式)功能:將表達(dá)式的運(yùn)算結(jié)果強(qiáng)制轉(zhuǎn)換成類型標(biāo)識(shí)符所表示的類型。例如:(float)a把a(bǔ)轉(zhuǎn)換為實(shí)型(int)(b+c)把b+c的結(jié)果轉(zhuǎn)換為整型注意:1.類型標(biāo)識(shí)符和表達(dá)式都必須加括號(hào)(單個(gè)變量可以不加括號(hào))。2.無論是強(qiáng)制轉(zhuǎn)換或是自動(dòng)轉(zhuǎn)換,都只是為了本次運(yùn)算的需要而對(duì)變量的數(shù)據(jù)長(zhǎng)度進(jìn)行的臨時(shí)性轉(zhuǎn)換,而不改變數(shù)據(jù)說明時(shí)對(duì)該變量定義的類型。-52-第2章程序設(shè)計(jì)基礎(chǔ)【例2-2】數(shù)據(jù)類型強(qiáng)制轉(zhuǎn)換應(yīng)用main(){floatf=5.75;printf("(int)f=%d,f=%f\n",(int)f,f);}運(yùn)行結(jié)果:(int)f=5,f=5.750000
-53-第2章程序設(shè)計(jì)基礎(chǔ)2.4優(yōu)先級(jí)和結(jié)合性優(yōu)先級(jí):優(yōu)先運(yùn)算的級(jí)別。在表達(dá)式中,優(yōu)先級(jí)較高的先于優(yōu)先級(jí)較低的進(jìn)行運(yùn)算。而在一個(gè)運(yùn)算量?jī)蓚?cè)的運(yùn)算符優(yōu)先級(jí)相同時(shí),則按運(yùn)算符的結(jié)合性所規(guī)定的結(jié)合方向處理。結(jié)合性:指運(yùn)算時(shí)的運(yùn)算次序,即從左到右還是從右到左。
-54-第2章程序設(shè)計(jì)基礎(chǔ)-55-C中各類運(yùn)算符的優(yōu)先級(jí):初等運(yùn)算符 ()、[]、單目運(yùn)算符 !、+
+、–
–、+、–
、(類型)算術(shù)運(yùn)算符 、/、%,+、
–關(guān)系運(yùn)算符 <、>、<=、>=,=
=、!
=邏輯運(yùn)算符 &&、||條件運(yùn)算符 ?:賦值運(yùn)算符 =、+=、–=、=、/=、%=逗號(hào)運(yùn)算符 ,第2章程序設(shè)計(jì)基礎(chǔ)2.5數(shù)據(jù)的輸入和輸出
2.5.1數(shù)據(jù)的格式輸入和輸出格式輸出函數(shù)printf()格式為:printf("格式控制串",輸出表列);功能:按指定格式輸出數(shù)據(jù)項(xiàng)。說明:格式控制串:
%“開始,后跟一個(gè)或幾個(gè)規(guī)定字符,用于指定輸出數(shù)據(jù)的格式。見表2-7
。有時(shí)也可是非格式控制的普通字符,這些字符將按原樣輸出。輸出表列:是需要輸出的一系列數(shù)據(jù)項(xiàng),各數(shù)據(jù)項(xiàng)之間用“,”分開,其個(gè)數(shù)和類型必須與格式控制串所說明的輸出項(xiàng)參數(shù)一樣多,且順序一一對(duì)應(yīng)。
-56-第2章程序設(shè)計(jì)基礎(chǔ)%md表示輸出整數(shù)占m位寬度,右對(duì)齊。若數(shù)據(jù)實(shí)際寬度超過規(guī)定寬度,則按數(shù)據(jù)實(shí)際寬度輸出。%-md表示輸出整數(shù)占m位寬度,左對(duì)齊;%m.nf表示輸出浮點(diǎn)數(shù)據(jù)占m位寬度(小數(shù)點(diǎn)算一位),其中n位小數(shù),右對(duì)齊;%-m.nf表示輸出浮點(diǎn)數(shù)據(jù)占m位寬度(小數(shù)點(diǎn)算一位),其中n位小數(shù),左對(duì)齊?!纠?-3】標(biāo)準(zhǔn)輸出函數(shù)應(yīng)用-57-第2章程序設(shè)計(jì)基礎(chǔ)printf()的格式控制串中還可插入數(shù)值來控制輸出數(shù)據(jù)在屏幕上的輸出寬度和對(duì)齊方式
格式輸入函數(shù)scanf()格式為:scanf(“格式控制符”,參數(shù)地址表);功能:按指定格式輸入數(shù)據(jù)。說明:格式控制符:%[長(zhǎng)度]類型,類型表示輸入數(shù)據(jù)的類型,其格式說明符和意義與printf()函數(shù)的格式說明符基本相同。長(zhǎng)度格式符為l或h。參數(shù)地址表:是需要讀入的所有變量的地址,而不是變量本身。這與printf()函數(shù)完全不同,要特別注意。各個(gè)變量的地址之間用","分開。“&”是地址運(yùn)算符,“&a”表示變量a的地址。-58-第2章程序設(shè)計(jì)基礎(chǔ)注意:當(dāng)輸入多個(gè)數(shù)值數(shù)據(jù)時(shí),若控制串中沒有非格式字符作為輸入數(shù)據(jù)之間的間隔,則可用空格、TAB或回車作間隔。如:scanf(“%d%d%d”,&a,&b,&c);若控制串中有非格式符(逗號(hào)或空格),則輸入數(shù)據(jù)間用指定的非格式符分隔。如:scanf(“%d,%d,%d”,&a,&b,&c);
輸入數(shù)據(jù)間必需用逗號(hào)‘,’分隔。如輸入數(shù)據(jù)格式應(yīng)為:3,4,5當(dāng)輸入多個(gè)字符數(shù)據(jù)時(shí),若控制串中沒有非格式字符,則認(rèn)為所有輸入的字符均為有效字符。如:scanf("%c%c%c",&a,&b,&c);若輸入為:xyz,則a的值為'x',b的值為空格'',c的值為'y'。若輸入為:xyz,則a的值為'x',b的值為'y',c的值為'z'。輸入數(shù)據(jù)的類型應(yīng)與格式控制串對(duì)應(yīng)的類型相一致。-59-第2章程序設(shè)計(jì)基礎(chǔ)【例2-4】從標(biāo)準(zhǔn)鍵盤讀入兩個(gè)數(shù),然后再將其輸出。#include"stdio.h"voidmain(){inti,j;printf("請(qǐng)輸入兩個(gè)整數(shù),用空格分隔:i,j=?\n");scanf("%d%d",&i,&j);printf("i=%d,j=%d",i,j);}-60-第2章程序設(shè)計(jì)基礎(chǔ)運(yùn)行結(jié)果:請(qǐng)輸入兩個(gè)整數(shù),用空格分隔:i,j=?510↙i=5,j=10【例2-5】多個(gè)字符變量的輸入。#include"stdio.h"main(){charc1,c2;printf("輸入兩個(gè)字符");scanf("%c",&c1);scanf("%c",&c2);printf("c1is%c,c2is%c",c1,c2);}-61-第2章程序設(shè)計(jì)基礎(chǔ)2.5.2非格式輸入輸出函數(shù)-62-第2章程序設(shè)計(jì)基礎(chǔ)1.非格式輸出函數(shù)putchar()格式:putchar(字符常量或字符變量);功能:向標(biāo)準(zhǔn)輸出設(shè)備輸出一個(gè)字符,等同于printf("%c",ch);例題2-62.非格式輸入函數(shù)getch()、getche()和getchar()其一般格式為:getch();/*無回顯,無回車*/getche();/*有回顯,無需回車*/getchar();/*有回顯,需回車*/功能:都是從鍵盤上讀入一個(gè)字符?!纠?-7】非格式化輸入/輸出函數(shù)的應(yīng)用程序#include"stdio.h"main(){charc1,c2,c3; printf("Pleaseinputacharacter:"); c1=getchar(); putchar(c1); getch(); printf("Pleaseinputacharacter:");c2=getche();putchar(c2);getch();printf("Pleaseinputacharacter:");c3=getchar();putchar(c3);}-63-第2章程序設(shè)計(jì)基礎(chǔ)2.6清屏幕函數(shù)
-64-第2章程序設(shè)計(jì)基礎(chǔ)一般形式為:clrscr();功能:清除屏幕上的所有字符,并且把光標(biāo)定位于左上角(0,0)處。該函數(shù)包含在頭文件"conio.h"中。2.7光標(biāo)定位函數(shù)一般形式為:gotoxy(x,y);功能:將光標(biāo)定位到指定位置,分別由水平(列)和垂直(行)兩個(gè)參數(shù)x、y確定。其中x為列號(hào),y為行號(hào)。左上角和右下角的坐標(biāo)(x,y)分別為:(0,0)和(79,24)。該函數(shù)包含在頭文件"conio.h"中?!纠?-8】在屏幕的第20列第15行顯示字符串"歡迎走進(jìn)C語言!"-65-第2章程序設(shè)計(jì)基礎(chǔ)#include"stdio.h"#include"conio.h"main(){gotoxy(20,15);printf("歡迎走進(jìn)C語言!");}案例2-1
編寫一個(gè)計(jì)算器的顯示菜單程序。菜單如下:********************************簡(jiǎn)單計(jì)算器菜單功能********************************+加法運(yùn)算-減法運(yùn)算*
乘法運(yùn)算/除法運(yùn)算#退出請(qǐng)選擇菜單功能(+-*/):*********************************-66-第2章程序設(shè)計(jì)基礎(chǔ)設(shè)計(jì)要求
-67-第2章程序設(shè)計(jì)基礎(chǔ)設(shè)計(jì)分析
若在屏幕上的指定位置顯示菜單,就需將光標(biāo)定位到指定位置,然后用基本輸入輸出函數(shù)來完成菜單內(nèi)容顯示和用戶的輸入選擇。在屏幕上顯示計(jì)算器程序的菜單。表示當(dāng)輸入字符分別為'+','-','*','/'時(shí),顯示進(jìn)行相應(yīng)的計(jì)算。程序參考代碼
模擬2-1編寫一個(gè)菜單顯示程序,菜單界面如下:主菜單===========================1.顯示記錄 2.添加記錄3.刪除記錄 4.保存記錄===========================請(qǐng)選擇1-4:-68-第2章程序設(shè)計(jì)基礎(chǔ)C語言程序設(shè)計(jì)教程第3章結(jié)構(gòu)化程序的基本結(jié)構(gòu)-70-——學(xué)習(xí)目標(biāo)掌握順序結(jié)構(gòu)程序的設(shè)計(jì)方法;掌握選擇結(jié)構(gòu)程序設(shè)計(jì)方法及相關(guān)語句;掌握循環(huán)結(jié)構(gòu)程序設(shè)計(jì)方法及相關(guān)語句;能夠完成一般問題的程序設(shè)計(jì)。第3章結(jié)構(gòu)化程序的基本結(jié)構(gòu)——主要內(nèi)容順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)-71-3.1順序結(jié)構(gòu)
順序結(jié)構(gòu)是由一組順序執(zhí)行的程序語句組成的,是按照語句的排列順序依次執(zhí)行。流程為:-72-
順序結(jié)構(gòu)可以獨(dú)立使用構(gòu)成一個(gè)簡(jiǎn)單的完整程序,常見的輸入、計(jì)算(賦值),輸出三步曲的程序就是順序結(jié)構(gòu)。
賦值語句的一般格式:變量=表達(dá)式;功能:先計(jì)算賦值號(hào)“=”右邊表達(dá)式的值,然后將其賦給賦值號(hào)左邊的變量。注意:賦值左邊只能是變量,而右邊的表達(dá)式可以是常量或表達(dá)式?!纠?-1】設(shè)有a=0,b=99,交換兩個(gè)變量的值。-73-#include“stdio.h”main(){inta,b,c;a=0;b=99;c=a;a=b;b=c;printf(“a=%d,b=%d”,a,b);}運(yùn)行結(jié)果:A=99,b=0若將程序改為:#include“stdio.h”voidmain(){inta,b;intc;a=0;b=99;a=b;c=a;b=c;printf(“a=%d,b=%d”,a,b);}-74-則結(jié)果為:a=99,b=993.2選擇結(jié)構(gòu)
3.2.1if選擇結(jié)構(gòu)-75-1.單分支選擇結(jié)構(gòu)一般格式:if(表達(dá)式){
語句塊}功能:若表達(dá)式的值為真,則執(zhí)行語句塊,否則跳過語句塊,執(zhí)行其后續(xù)語句。【例3-2】
計(jì)算x的絕對(duì)值
#include"stdio.h"main(){intx;printf("請(qǐng)輸入數(shù)據(jù):");scanf("%d",&x);if(x<0)x=-x;printf("%d",x);}-76-2.二分支選擇結(jié)構(gòu)-77-一般格式:if(表達(dá)式){語句塊1}else{語句塊2}功能:如果表達(dá)式為真,執(zhí)行語句塊1,否則執(zhí)行語句塊2。其中:語句塊1和語句塊2都由1條或若干條語句構(gòu)成?!纠?-3】鍵盤輸入兩個(gè)整數(shù),求其中的最大值,并輸出。#include"stdio.h"main(){intx,y,max;printf("請(qǐng)輸入數(shù)據(jù):");scanf("%d,%d",&x,&y);if(x>=y)max=x;elsemax=y;printf("最大值是:%d",max);}-78-3.多分支選擇結(jié)構(gòu)一般格式:
if(表達(dá)式1){語句塊1};elseif(表達(dá)式2){語句塊2};
elseif(表達(dá)式3){語句塊3};
……elseif(表達(dá)式n){語句塊n};
else{語句塊n+1};-79-功能:先判斷表達(dá)式1,若為真,則執(zhí)行語句塊1跳過其它語句塊結(jié)束if語句;否則判斷表達(dá)式2,若表達(dá)式2為真,則執(zhí)行語句塊2,以此類推……;若表達(dá)式n為真,則執(zhí)行語句塊n;否則執(zhí)行語句塊n+1。-80-說明:if后面的“表達(dá)式”,可以是任何類型的表達(dá)式,一般為邏輯表達(dá)或關(guān)系表達(dá)式。例如:if(a==b&&x==y)printf("a=b,x=y");if(3);都是是合法的。當(dāng)語句塊是多個(gè)操作語句時(shí),要用花括號(hào)“{}”將幾個(gè)語句括起來成為一個(gè)復(fù)合語句。當(dāng)連續(xù)使用if/else格式時(shí),else總是否定與離它最近的尚未被否定的if條件。-81-【例3-4】
計(jì)算分段函數(shù)的值。-82-分析:y的計(jì)算值是由x的取值的范圍決定的,所以要先輸入x的值,然后根據(jù)x的取值情況,再?zèng)Q定y的計(jì)算表達(dá)式。程序參考代碼為:3.2.2switch語句
一般形式為:switch(表達(dá)式){case常量表達(dá)式1:語句塊1;break;
case常量表達(dá)式2:語句塊2;break;
…
case常量表達(dá)式n:語句塊n;break;
default:語句塊n+1;}-83-功能:計(jì)算表達(dá)式的值,并逐個(gè)與case后的常量表達(dá)式值相比較,當(dāng)表達(dá)式的值與某個(gè)常量表達(dá)式的值相等時(shí),即執(zhí)行其后的語句,若遇到break則退出switch語句,否則不再進(jìn)行判斷,繼續(xù)執(zhí)行其它c(diǎn)ase后的語句。-84-注意:在case后的各常量表達(dá)式的值不能相同,否則會(huì)出現(xiàn)錯(cuò)誤。在case后,允許有多個(gè)語句,可以不用{}括起來。各case和default子句的先后順序可以變動(dòng),而不會(huì)影響程序執(zhí)行結(jié)果。default子句可以省略不寫。-85-【例3-5】由鍵盤輸入任意一個(gè)數(shù)字[0~5],輸出它所對(duì)應(yīng)的英文單詞。-86-程序參考代碼運(yùn)行結(jié)果:Pleaseinputadata:3↙Three.if語句的嵌套
當(dāng)if后表達(dá)式值為真時(shí)所執(zhí)行的語句又是一個(gè)if語句,這種情況稱為if語句的嵌套。
-87-【例3-6】從鍵盤輸入3個(gè)數(shù),求出其中的最大數(shù)。程序參考代碼-88-案例3-1
簡(jiǎn)單計(jì)算器功能菜單的選擇執(zhí)行設(shè)計(jì)。設(shè)計(jì)要求設(shè)計(jì)簡(jiǎn)單計(jì)算器的帶選擇判斷的完整主菜單程序,即能根據(jù)用戶的回答實(shí)現(xiàn)菜單的控制選擇,并完成相應(yīng)的計(jì)算功能。設(shè)計(jì)分析根據(jù)菜單上的顯示,用戶輸入的運(yùn)算符后,要判斷是什么運(yùn)算符才能去執(zhí)行相對(duì)應(yīng)計(jì)算操作,所以如何判斷和執(zhí)行是解決問題的關(guān)鍵,多條件選擇控制可以用switch語句完成。
程序參考代碼
模擬3-1
分別用if-elseif語句和switch()語句編寫程序,實(shí)現(xiàn)如下功能:由鍵盤輸入學(xué)生的成績(jī),判斷學(xué)生成績(jī)的等級(jí)。等級(jí)標(biāo)準(zhǔn)如下:優(yōu)秀:100分-90分;良好:80分-89分;合格:60分-79分;不及格:0分-59分。-89-3.3循環(huán)結(jié)構(gòu)
3.3.1for循環(huán)-90-一般格式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3){循環(huán)體語句組;}執(zhí)行過程:先計(jì)算表達(dá)式1;為循環(huán)初始化(賦初值)。計(jì)算表達(dá)式2,判斷循環(huán)是否成立(值為真),則執(zhí)行循環(huán)體語句組;否則轉(zhuǎn)到第⑤步。計(jì)算表達(dá)式3,使循環(huán)變量按增量變化。(此表達(dá)式必不可少,否則會(huì)陷入死循環(huán),即循環(huán)永不停止)。轉(zhuǎn)回到2)繼續(xù)執(zhí)行。結(jié)束for語句,執(zhí)行下一語句。-91-【例3-7】求自然數(shù)1到100的和,即1+2+3+…+99+100。分析:由于要加100次,所以考慮用循環(huán)來完成。假設(shè)累加和存放在變量sum中,初始值為0,每次要加的數(shù)為i,則sum+=i是需要多次反復(fù)執(zhí)行的,i的值應(yīng)從1變化到100,即i的初始值為1,循環(huán)條件為i<=100,i每次增量為1,即表達(dá)式3為i++。
-92-參考程序代碼:#include"stdio.h"main(){inti,sum=0;for(i=0;i<=100;i++)sum+=i;printf("sum=%d",sum);}運(yùn)行結(jié)果:Sum=5050【例3-8】求n的階乘值。-93-分析:為了求階乘,首先必須對(duì)n進(jìn)行分類:若n<0,則提示輸入錯(cuò)誤;若n==0,則規(guī)定其階乘值等于1;若n>0,則其階乘值等于1×2×3×…×n,若使用fact=fact*k的運(yùn)算來完成,k的值從1-n變化。程序參考代碼for語句的三個(gè)表達(dá)式可適當(dāng)省略,甚至全部省略,但每個(gè)表達(dá)式間的分號(hào)不能省略。若省略表達(dá)式1,則循環(huán)變量的初值要在循環(huán)之上完成;若省略表達(dá)式2,則應(yīng)在循環(huán)體內(nèi)用if和break配合退出循環(huán),避免出現(xiàn)死循環(huán);若省略表達(dá)式3,則循環(huán)變量的改變要在循環(huán)體內(nèi)進(jìn)行,避免死循環(huán)。例3-8可改寫為:#include"stdio.h"main(){intk=1,n;longintfact=1;printf("n=?");scanf("%d",&n);if(n<0)printf("輸入錯(cuò)誤!");elseif(n==0)printf("0!=%d",fact);else{ for(;;){if(k>n)break;fact*=k;k++;}printf("%d!=%ld",n,fact);}}-94-3.3.2while循環(huán)一般格式:while(表達(dá)式){循環(huán)體語句組;}-95-執(zhí)行過程:先計(jì)算表達(dá)式的值,若為真值,則執(zhí)行循環(huán)體語句塊,然后返回繼續(xù)判斷表達(dá)式的值,否則結(jié)束while循環(huán)。相當(dāng)于for語句中表達(dá)式1和表達(dá)式3省略的情況。【例3-9】求S=1+1//2+1/3+…+1/n,直到最后一項(xiàng)1/n的值小于10-6。分析:在該計(jì)算公式中除了第一項(xiàng)外,其他項(xiàng)都具有相似性,即分子為1,分母比前一項(xiàng)的分母大1,因此可以考慮將累加和S的初值設(shè)為1,然后每次循環(huán)加上一個(gè)1/n項(xiàng),n的值從2開始變化,不斷增加,直到1/n的值小于10-6為止,即1/n≥10-6作為循環(huán)條件,一旦1/n<10-6就停止循環(huán)。-96-程序參考代碼3.3.3do-while循環(huán)一般格式:do{循環(huán)體語句組;}while(表達(dá)式);-97-執(zhí)行過程:
先執(zhí)行循環(huán)體語句組,然后判斷表達(dá)式,若為真值,則繼續(xù)執(zhí)行循環(huán)體語句組,直到表達(dá)式的值為假才結(jié)束循環(huán)。【例3-10】將例3-9用do-while語句改寫。
#include"stdio.h"main(){longintn=2; doublet,s=1; t=1.0/n; do { s=s+t; n++; t=1.0/n; }while(t>=1e-6); printf("s=%f,n=%ld,t=%f",s,n,t);}-98-3.3.4循環(huán)的嵌套
1.for循環(huán)的嵌套-99-【例3-11】打印九九乘法表分析:要輸出直角三角形的九九表,要控制輸出9行,每行的列數(shù)與行數(shù)相同。所以要用雙重循環(huán)來完成。定義變量i,j用來表示行和列的取值,設(shè)外循環(huán)i為行循環(huán),i的取值為1-9,i每次增1;內(nèi)循環(huán)j為列循環(huán),j的取值為1-i,每輸出一行后要換行。
-100-程序參考代碼2.三種循環(huán)語句的互相嵌套while循環(huán)、do-while循環(huán)和for循環(huán)也可以互相嵌套(但不能交叉!)-101-【例3-12】求3-100以內(nèi)的素?cái)?shù)(只能被1和自身整除的數(shù))。
分析:這顯然是二重循環(huán):用外循環(huán)控制n的取值3~100的奇數(shù),內(nèi)層循環(huán)判斷n是否為素?cái)?shù)。用標(biāo)志法來實(shí)現(xiàn),開始假設(shè)n是素?cái)?shù),設(shè)一標(biāo)志變量flag=1,若n能否被2到n-1之間的任意數(shù)整除,則flag=0,退出內(nèi)層循環(huán)。然后判斷flag的值,若為1,則n是素?cái)?shù),否則不是素?cái)?shù)。程序參考代碼3.4其它控制語句break語句格式:break;功能:強(qiáng)行退出本層循環(huán)語句或switch語句。-102-2.continue語句格式:continue;功能:結(jié)束本次循環(huán)。即跳過循環(huán)體中下面尚未執(zhí)行的語句,繼續(xù)進(jìn)行下一次的循環(huán)判定。案例3-2簡(jiǎn)單計(jì)算器功能菜單的循環(huán)選擇執(zhí)行設(shè)計(jì)
設(shè)計(jì)要求設(shè)計(jì)一個(gè)能夠循環(huán)選擇菜單并進(jìn)行計(jì)算的程序。設(shè)計(jì)分析案例3-1每次運(yùn)行只能執(zhí)行一次,要想實(shí)現(xiàn)多次計(jì)算的功能,有些程序段就需反復(fù)循環(huán)執(zhí)行,所以要用循環(huán)控制語句實(shí)現(xiàn)菜單的循環(huán)選擇的功能。實(shí)際就是在案例3-1的基礎(chǔ)上加上循環(huán)即可。-103-程序參考代碼模擬3-2
按從小到大的順序找出所有四位數(shù)中的完全平方數(shù)。根據(jù)公式/4=1-1/3+1/5-1/7+…,計(jì)算的值,精確到最后一項(xiàng)的絕對(duì)值小于或等于10-6為止。-104-C語言程序設(shè)計(jì)教程第4章數(shù)組的應(yīng)用-106-第4章數(shù)組的應(yīng)用——學(xué)習(xí)目標(biāo)掌握數(shù)組的定義和數(shù)組元素的引用掌握一維數(shù)組、二維數(shù)組、字符數(shù)組的初始化掌握字符串處理函數(shù)掌握數(shù)組的應(yīng)用——主要內(nèi)容掌握數(shù)組的定義和數(shù)組元素的引用掌握一維數(shù)組、二維數(shù)組、字符數(shù)組的初始化掌握字符串處理函數(shù)數(shù)組中數(shù)據(jù)的檢索向數(shù)組中插入新的元素刪除數(shù)組中指定的元素?cái)?shù)組中數(shù)據(jù)的排序-107-第4章數(shù)組的應(yīng)用-108-4.1一維數(shù)組第4章數(shù)組的應(yīng)用
數(shù)組是同類型數(shù)據(jù)的有序集合,即數(shù)組由若干類型相同、屬性(所表示的含義)相同的數(shù)組元素組成,且它們的先后次序是確定的。數(shù)組由一個(gè)數(shù)組名來識(shí)別,每個(gè)數(shù)組元素均可通過數(shù)組名及其所在數(shù)組中的位置(下標(biāo))來確定。如:num[5],name[10],a[2][3]等。數(shù)組按下標(biāo)個(gè)數(shù)可分為一維數(shù)組、二維數(shù)組等,二維以上的均稱為多維數(shù)組。數(shù)組和變量一樣也遵循先定義后使用的原則。-109-第4章數(shù)組的應(yīng)用
4.1.1一維數(shù)組的定義說明:類型標(biāo)識(shí)符:說明了數(shù)組元素所屬的數(shù)據(jù)類型,可以是任意一種基本類型或構(gòu)造類型;數(shù)組名:是用戶定義的標(biāo)識(shí)符,不能與其他變量同名;常量表達(dá)式:指定數(shù)組的長(zhǎng)度,即數(shù)組中元素的個(gè)數(shù),必須是整常量或符號(hào)常量,不能含有變量;方括號(hào)[]:表示一個(gè)數(shù)組的維數(shù)。定義格式:類型標(biāo)識(shí)符數(shù)組名[常量表達(dá)式];例如:inta[10];定義一個(gè)整型數(shù)組,數(shù)組名為a,10個(gè)元素分別為a[0]、a[1]、a[2]、…、a[9],每個(gè)元素都是整型數(shù)據(jù)。-110-第4章數(shù)組的應(yīng)用注意:在C語言中數(shù)組元素的下標(biāo)總是從0開始,因此下標(biāo)為i時(shí)表示的是數(shù)組的第i+1個(gè)元素。所以定義含有n個(gè)元素的數(shù)組的下標(biāo)范圍是0到n-1,超出這個(gè)范圍就稱為數(shù)組下標(biāo)越界。
在定義數(shù)組時(shí),系統(tǒng)負(fù)責(zé)在內(nèi)存中給數(shù)組元素分配一片連續(xù)的存儲(chǔ)單元,存儲(chǔ)單元的個(gè)數(shù)由數(shù)組長(zhǎng)度和類型決定,數(shù)組名是這片存儲(chǔ)單元的起始地址。-111-第4章數(shù)組的應(yīng)用
4.1.2一維數(shù)組的初始化例如:inta[10]={0,1,2,3,4,5,6,7,8,9};
則各元素的初值為:a[0]=0,a[1]=1,a[2]=2,…a[9]=9;
數(shù)組初始化一般格式為:類型標(biāo)識(shí)符數(shù)組名[常量表達(dá)式]={值1,值2,…,值n};對(duì)數(shù)組全部元素初始化例如:inta[5]={1,2,3,4,5};對(duì)數(shù)組部分元素初始化例如:inta[5]={1,2,3};
與inta[5]={1,2,3,0,0};等效。對(duì)數(shù)組全部元素顯示賦值時(shí)可不指定數(shù)組長(zhǎng)度例如:int[]={1,2,3,4,5};一維數(shù)組初始化有很多方法,具體有以下幾種形式:-112-第4章數(shù)組的應(yīng)用4.1.3一維數(shù)組元素的引用引用格式:數(shù)組名[下標(biāo)];注意:下標(biāo)可以是常量或表達(dá)式,值必須是整型,不要越界。【例4-1】輸入一個(gè)班級(jí)3個(gè)學(xué)生的學(xué)號(hào)和三門課成績(jī),并按每行一個(gè)的格式輸出。分析:首先定義4個(gè)數(shù)組,長(zhǎng)度均為3,用于分別存放學(xué)生的學(xué)號(hào)和三門課的成績(jī)。然后利用循環(huán)輸入每個(gè)學(xué)生的學(xué)號(hào)和三門課的成績(jī),最后再循環(huán)輸出每個(gè)學(xué)生的數(shù)據(jù)。程序參考代碼:-113-
4.2二維數(shù)組第4章數(shù)組的應(yīng)用
4.2.1二維數(shù)組的定義定義的一般形式:類型標(biāo)識(shí)符數(shù)組名[行表達(dá)式1][列表達(dá)式2];其中,行表達(dá)式和列表達(dá)式均為整常量表達(dá)式。二維數(shù)組的長(zhǎng)度(所含元素個(gè)數(shù))等于行表達(dá)式和列表達(dá)式的乘積。例如:inta[3][4];/*定義a為3×4(3行4列)的整型二維數(shù)組*/數(shù)組元素分別為:a[0][0]、a[0][1]、a[0][2]、a[0][3]a[1][0]、a[1][1]、a[1][2]、a[1][3]。-114-第4章數(shù)組的應(yīng)用再如:charname[3][10];定義name為3×10(3行10列)的字符二維數(shù)組,可將其看成是特殊的一維數(shù)組:即數(shù)組name含有3個(gè)元素:name[0]、name[1]、name[2];而每個(gè)元素又是一個(gè)含有10個(gè)元素的一維數(shù)組。相當(dāng)于charname[0][10],name[1][10],name[2][10];這里把name[0]、name[1]、name[2]作為一維數(shù)組的名字。若每個(gè)一維數(shù)組存放一個(gè)字符串,則charname[3][5]可以存放3個(gè)字符串,即可以存放三個(gè)人的姓名。-115-4.2.2二維數(shù)組元素的引用第4章數(shù)組的應(yīng)用
引用形式:數(shù)組名[行下標(biāo)][列下標(biāo)]
如:a[2][3]表示是a數(shù)組中第3行第4列的元素。二維數(shù)組的輸入和輸出一般要用雙重循環(huán)來實(shí)現(xiàn)。例如:#include"stdio.h"main(){inta[3][4],i,j;for(i=0;i<3;i++)for(j=0;j<4;j++)scanf("%d",&a[i][j]);/*輸入每個(gè)元素的值*/for(i=0;i<3;i++)for(j=0;j<4;j++)printf("%d",a[i][j]);/*輸出每個(gè)元素的值*/}-116-第4章數(shù)組的應(yīng)用
有4種形式:按行依次對(duì)二維數(shù)組賦初值:即把二維數(shù)組看做是一維數(shù)組的一維數(shù)組。例如:staticinta[2][5]={{1,2,3,4,5},{14,20,23,58,99}};即:a[0][0]=1a[0][1]=2a[0][2]=3a[0][3]=4a[0][4]=5a[1][0]=14a[1][1]=20a[1][2]=23a[1][3]=58a[1][4]=99將所有的數(shù)據(jù)都寫在一個(gè)大括弧內(nèi),按數(shù)組排列的順序按行的順序?qū)Ω鲾?shù)組元素賦初。實(shí)質(zhì)上,二維數(shù)組本質(zhì)上是一個(gè)一維數(shù)組,它在機(jī)器中與一維數(shù)組的處理是一樣的。例如:inta[2][5]={1,2,3,4,5,14,20,23,58,99};4.2.3二維數(shù)組的初始化-117-第4章數(shù)組的應(yīng)用對(duì)部分元素顯示賦初值例如:inta[2][3]={{1},{4}};未顯示賦初值的元素將自動(dòng)設(shè)為0,故相當(dāng)于:
inta[2][3]={{1,0,0},{4,0,0}};若全部元素顯示賦初值,則數(shù)組第一維的元素個(gè)數(shù)在說明時(shí)可不指定,但是第二維的元素的個(gè)數(shù)不能缺省。編譯程序自動(dòng)計(jì)算出第一維的元素個(gè)數(shù)?!纠?-2】用戶輸入一個(gè)55的整數(shù)矩陣,編寫程序求其兩個(gè)對(duì)角線上的元素之和。程序清單-118-4.3字符數(shù)組第4章數(shù)組的應(yīng)用
用來存放字符數(shù)據(jù)的數(shù)組是字符數(shù)組,字符型數(shù)組中的每個(gè)元素只能存放一個(gè)字符型數(shù)據(jù)。4.3.1字符數(shù)組的定義一維字符數(shù)組的定義形式為:char數(shù)組名[常量表達(dá)式];例如:charch[6];該語句定義了一個(gè)元素個(gè)數(shù)為6的字符數(shù)組,可以存放6個(gè)字符型的數(shù)據(jù)。例如:ch[0]='h';ch[1]='e';ch[2]='l';ch[3]='l';ch[4]='o';ch[5]='!';-119-第4章數(shù)組的應(yīng)用
C語言沒有提供字符串?dāng)?shù)據(jù)類型,可以通過字符數(shù)組來處理字符串。需注意,這時(shí)必須在字符數(shù)組末尾加上串結(jié)束符'\0',如對(duì)于字符數(shù)組chars[10],若將它用來存放字符串“AString”,則在內(nèi)存中的該字符數(shù)組存放形式為:
s[0]s[1]s[2]s[3]s[4]s[5]s[6]s[7]s[8]s[9]“AString\0”如果沒有這個(gè)串結(jié)束符,則s是一個(gè)一般的字符數(shù)組。若用字符數(shù)組來存放N個(gè)字符的字符串,則字符數(shù)組長(zhǎng)度至少應(yīng)說明為N+1。AString\0-120-4.3.2字符數(shù)組的初始化第4章數(shù)組的應(yīng)用
字符串初始化有以下兩種形式:
(1)與字符數(shù)組的初始化形式相同例如:charstr[7]={'h','e','l','l','o','!','\0'};或
charstr[]={'h','e','l','l','o','!','\0'};(2)用字符串常量來初始化(系統(tǒng)自動(dòng)增加一個(gè)串結(jié)束符'\0')例如:
charstr[7]={"hello!"};或
charstr[7]="hello!";-121-
4.3.3字符串的輸入和輸出
第4章數(shù)組的應(yīng)用
1.字符串輸入
scanf("%s",str);/*輸入字符串中不能含空格字符*/gets(str);/*輸入字符串中可含空格字符,以回車為結(jié)束*/2.字符串輸出
printf("%s",str);puts(str);【例4-3】從鍵盤上輸入一串字符到數(shù)組str中,再顯示到屏幕上。程序清單
-122-4.3.4字符串處理函數(shù)第4章數(shù)組的應(yīng)用1.輸入字符串──gets()函數(shù)字符串函數(shù)均放在“string.h”頭文件中,所以使用時(shí)要包含該文件。調(diào)用格式:gets(字符數(shù)組)函數(shù)功能:從標(biāo)準(zhǔn)輸入設(shè)備(stdin)──鍵盤上,讀取1個(gè)字符串(可以包含空格),并將其存儲(chǔ)到字符數(shù)組中去。說明:gets()讀取的字符串,其長(zhǎng)度沒有限制,編程者要保證字符數(shù)組有足夠大的空間,存放輸入的字符串。該函數(shù)輸入的字符串中允許包含空格,而scanf()函數(shù)不允許。-123-第4章數(shù)組的應(yīng)用調(diào)用格式:puts(字符數(shù)組)函數(shù)功能:把字符數(shù)組中所存放的字符串,輸出到標(biāo)準(zhǔn)輸出設(shè)備中去,并用'\n'取代字符串的結(jié)束標(biāo)志'k'\0'。所以用puts()函數(shù)輸出字符串時(shí),不要求另加換行符。說明:字符串中允許包含轉(zhuǎn)義字符,輸出時(shí)產(chǎn)生一個(gè)控制操作。該函數(shù)一次只能輸出一個(gè)字符串,而printf()函數(shù)也能用來輸出字符串,且一次能輸出多個(gè)。2.輸出字符串──puts()函數(shù)-124-第4章數(shù)組的應(yīng)用調(diào)用格式:strcmp(字符串1,字符串2)其中:字符串”可以是串常量,也可以是1維字符數(shù)組。函數(shù)功能:比較兩個(gè)字符串的大小。如果:字符串1=字符串2,函數(shù)返回值等于0;字符串1字符串2,函數(shù)返回值正整數(shù)。說明:如果一個(gè)字符串是另一個(gè)字符串從頭開始的子串,則母串為大。不能使用關(guān)系運(yùn)算符“==”來比較兩個(gè)字符串,只能用strcmp()函數(shù)來處理。3.字符串比較──strcmp()函數(shù)-125-第4章數(shù)組的應(yīng)用調(diào)用格式:strcpy(字符數(shù)組,字符串)其中:“字符串”可以是串常量,也可以是字符數(shù)組。函數(shù)功能:將“字符串”完整地復(fù)制到“字符數(shù)組”中,字符數(shù)組中原有內(nèi)容被覆蓋。說明:字符數(shù)組必須定義得足夠大,以便容納復(fù)制過來的字符串。復(fù)制時(shí),連同結(jié)束標(biāo)志'\0'一起復(fù)制。不能用賦值運(yùn)算符“=”將一個(gè)字符串直接賦值給一個(gè)字符數(shù)組,只能用strcpy()函數(shù)來處理。4.復(fù)制字符串──strcpy()函數(shù)-126-第4章數(shù)組的應(yīng)用調(diào)用格式:strcat(字符數(shù)組,字符串)函數(shù)功能:把“字符串”連接到“字符數(shù)組”中的字符串尾端,并存儲(chǔ)于“字符數(shù)組”中?!白址麛?shù)組”中原來的結(jié)束標(biāo)志,被“字符串”的第一個(gè)字符覆蓋,而“字符串”在操作中未被修改。說明:由于沒有邊界檢查,編程者要注意保證“字符數(shù)組”定義得足夠大,以便容納連接后的目標(biāo)字符串;否則,會(huì)因長(zhǎng)度不夠而產(chǎn)生問題。連接前兩個(gè)字符串都有結(jié)束標(biāo)志'\0',連接后“字符數(shù)組”中存儲(chǔ)的字符串的結(jié)束標(biāo)志'\0'被舍棄,只在目標(biāo)串的最后保留一個(gè)'\0'。5.連接字符串──strcat()函數(shù)-127-第4章數(shù)組的應(yīng)用
6.求字符串長(zhǎng)度──strlen()函數(shù)調(diào)用格式:strlen(字符串)
函數(shù)功能:求字符串(常量或字符數(shù)組)的實(shí)際長(zhǎng)度(不包含結(jié)束標(biāo)志),返回一個(gè)正整型值。7.將字符串中大寫字母轉(zhuǎn)換成小寫──strlwr()函數(shù)調(diào)用格式:strlwr(字符串)函數(shù)功能:將字符串中的大寫字母轉(zhuǎn)換成小寫,其它字符(包括小寫字母和非字母字符)不轉(zhuǎn)換。
8.將字符串中小寫字母轉(zhuǎn)換成大寫──strupr()函數(shù)調(diào)用格式:strupr(字符串)函數(shù)功能:將小寫字母轉(zhuǎn)換成大寫,其它字符不轉(zhuǎn)換。-128-第4章數(shù)組的應(yīng)用【例4-4】密碼驗(yàn)證。用戶進(jìn)入某系統(tǒng),要從鍵盤回答密碼一般有3次機(jī)會(huì)。3次中任何一次回答正確均可進(jìn)入系統(tǒng)(顯示“歡迎進(jìn)入本系統(tǒng)!”),否則不能進(jìn)入系統(tǒng)(顯示“密碼錯(cuò)誤!請(qǐng)重新輸入”)程序清單【例4-5】字符串處理函數(shù)的綜合應(yīng)用程序清單-129-第4章數(shù)組的應(yīng)用案例4-1歌詠比賽項(xiàng)目中輸入N名選手的編號(hào)、姓名及每位評(píng)委對(duì)各選手的打分并保存。設(shè)計(jì)要求:在某次歌詠比賽中,有N名(假設(shè)10人)選手參加,有M個(gè)(設(shè)有8人)評(píng)委,要求鍵盤輸入這N名選手的編號(hào)和姓名和評(píng)委對(duì)每位選手的打分并保存。程序清單-130-4.4數(shù)組的應(yīng)用第4章數(shù)組的應(yīng)用順序查找也稱線性查找,這種方法的查找過程為:從數(shù)組中的第一個(gè)元素開始進(jìn)行比較,判斷當(dāng)前的數(shù)組元素是否與查找的數(shù)據(jù)相等,如果相等則結(jié)束比較;否則比較數(shù)組中的下一個(gè)數(shù),直至找到或比較到到最后一個(gè)數(shù)組元素為止。順序查找法雖然算法簡(jiǎn)單,但查找效率較低。按照順序查找法的算法,在一個(gè)具有n個(gè)元素的數(shù)組中進(jìn)行查找時(shí),在最好的情況下(即查找的數(shù)據(jù)正好為數(shù)組的第一個(gè)元素)需要比較1次,在最壞的情況下(即查找的數(shù)據(jù)在數(shù)組中不存在時(shí))需要比較n次。4.4.1數(shù)據(jù)的檢索數(shù)據(jù)檢索就是在數(shù)據(jù)中查找有無指定的數(shù)據(jù),并給出相應(yīng)的查找信息。常用的數(shù)據(jù)檢索方法有順序查找和二分查找。1.順序查找法-131-第4章數(shù)組的應(yīng)用【例4-6】輸入一個(gè)數(shù)據(jù),在數(shù)組中查找有無該數(shù)據(jù),若有輸出“找到該數(shù)據(jù)!”的信息,并指出是數(shù)組中的第幾個(gè)元素,若沒有則輸出“未找到給數(shù)據(jù)!”的信息。程序清單-132-第4章數(shù)組的應(yīng)用順序查找法雖然簡(jiǎn)單,但效率較低,當(dāng)數(shù)據(jù)量很大時(shí)不宜采用。對(duì)于大量數(shù)據(jù)的數(shù)組則采用二分查找法速度更快更好,采用二分查找法要求數(shù)組是已經(jīng)排序好的。二分查找法要求被查找的文件中記錄是按關(guān)鍵字值大小順序排列的。將文件一分為二,把給定關(guān)鍵字值與中點(diǎn)的記錄比較,若匹配,則查找成功;否則判斷所要查找的記錄可能在上半部分,還是在下半部分。然后,對(duì)確定的部分繼續(xù)上述過程,直至找到要求的記錄,查找成功;或最后只剩下一個(gè)記錄仍不能
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 混凝土結(jié)構(gòu)工程試題+答案
- 平安內(nèi)勤合同范例
- 木工吊頂施工合同范例
- 家紡廠銷售合同范例
- 山東環(huán)保設(shè)備工程合同范例
- 招商合作意向合同范例
- 臨建分包合同范例
- 用工單位工作合同范例
- 買賣店鋪合同范例
- 彩板房合同范例
- 武漢理工大學(xué)2019-2020學(xué)年第一學(xué)期2018級(jí)軟件工程專業(yè)《Java語言程序設(shè)計(jì)》期末考試-
- 工地項(xiàng)目現(xiàn)場(chǎng)標(biāo)準(zhǔn)、規(guī)范、圖集臺(tái)賬(現(xiàn)場(chǎng)檢查用規(guī)范)全套
- 公園園區(qū)安保服務(wù)方案
- 地下室后澆帶超前止水施工工法
- 醫(yī)院科研論文自查方案
- 專家咨詢服務(wù)合同
- 五年級(jí)中隊(duì)日志全解
- 意大利(百得)TBG 系列燃燒機(jī)說明書
- 2023年中國(guó)近現(xiàn)代史綱要
- 公司合同審批流程
- 第八章-二元一次方程組單元達(dá)標(biāo)提高題檢測(cè)試卷
評(píng)論
0/150
提交評(píng)論