C語言程序設計課件_第1頁
C語言程序設計課件_第2頁
C語言程序設計課件_第3頁
C語言程序設計課件_第4頁
C語言程序設計課件_第5頁
已閱讀5頁,還剩351頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第一章C語言概述C語言發(fā)展歷史C語言特點簡單的c程序介紹C程序上機步驟1.1C語言出現(xiàn)的歷史背景1.C語言的誕生與發(fā)展(1)在C語言誕生以前,系統(tǒng)軟件主要是用匯編語言編寫的。由于匯編語言程序依賴于計算機硬件,其可讀性和可移植性都很差;但一般的高級語言又難以實現(xiàn)對計算機硬件的直接操作(這正是匯編語言的優(yōu)勢),于是人們盼望有一種兼有匯編語言和高級語言特性的新語言。(2)C語言是貝爾實驗室于70年代初研制出來的,后來又被多次改進,并出現(xiàn)了多種版本。80年代初,美國國家標準化協(xié)會(ANSI),根據(jù)C語言問世以來各種版本對C語言的發(fā)展和擴充,制定了ANSIC標準(1989年再次做了修訂)。本書以ANSIC新標準來介紹。(3)目前,在微機上廣泛使用的C語言編譯系統(tǒng)有MicrosoftC、TurboC、BorlandC等。雖然它們的基本部分都是相同的,但還是有一些差異,所以請大家注意自己所使用的C編譯系統(tǒng)的特點和規(guī)定(參閱相的手冊)。本書選定的上機環(huán)境是TCV2.0(DOS操作系統(tǒng))。

1.2C語言特點語言簡潔、緊湊、靈活運算符和數(shù)據(jù)類型豐富程序設計結構化、模塊化生成目標代碼質(zhì)量高可移植性好<>>>>>>中級語言

C語言程序設計

第一章C語言概述>32個關鍵字:(由系統(tǒng)定義,不能重作其它定義)autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhile<

C語言程序設計

第一章C語言概述9種控制語句:if()~else~for()~while()~do~while()continuebreakswitchgotoreturn<

C語言程序設計

第一章C語言概述例C語言與Pascal語言比較C語言

Pascal語言含義{}

BEGIN….END

復合語句if(e)s;

IF(e)THENs

條件語句inti;

VARi:INTEGER

定義i為整型變量inta[10];

VARa:ARRAY[1..10]OFINTEGER

定義整型數(shù)組aintf();

FUNCTIONf():INTEGER

定義f為返值整型的函數(shù)int*p;

VARp:INTEGER

定義p為指向整型變量的指針i+=2;

i=i+2

賦值i+2ii++,++i;

i=i+1 i自增值結論:C比Pascal簡練,源程序短。<

C語言程序設計

第一章C語言概述34種運算符:算術運算符:+-*/%++--關系運算符:<<===>>=!=邏輯運算符:!&&||位運算符:<<>>~|^&賦值運算符:=及其擴展條件運算符:?:逗號運算符:,指針運算符:*&求字節(jié)數(shù):sizeof強制類型轉換:(類型)分量運算符:.->下標運算符:[]其它:()-<

C語言程序設計

第一章C語言概述C數(shù)據(jù)類型基本類型構造類型指針類型空類型void定義類型typedef數(shù)值類型字符類型char枚舉類型enum整型浮點型單精度型float雙精度型double短整型short長整型long整型int數(shù)組結構體struct共用體union<

C語言程序設計

第一章C語言概述1.3

簡單的C程序介紹例1.1第一個程序Hello,World!/*example1.1ThefirstCProgram*/#include<stdio.h>main(){printf(“Hello,World!”);}

C語言程序設計

第一章C語言概述注釋編譯預處理函數(shù)語句輸出:Hello,World!例1.3

由main()函數(shù)和1個其它函數(shù)max()構成的C語言程序。/main()/*主函數(shù)*/{inta,b,c;/*聲明部分,定義變量*/scanf(“%d,%d”,&a,&b);/*輸入變量a和b的值*/c=max(a,b);/*調(diào)用max函數(shù),將得到的值賦給c*/printf(“max=%d”,c);/*輸出c的值*/}intmax(intx,inty)/*定義max函數(shù)*/{intz;/*定義變量z*/if(x>y)z=x;elsez=y;return(z);/*將z的值返回,通過max帶回調(diào)用*/}

格式特點習慣用小寫字母,大小寫敏感不使用行號,無程序行概念可使用空行和空格常用鋸齒形書寫格式<>

C語言程序設計

第一章C語言概述main(){

……………….………………

…………..…………..

……………….

………………………….

……………….………………..}main(){

inti,j,sum;sum=0;for(i=1;i<10;i++){for(j=1;j<10;j++){sum+=i*j;}}printf(“%d\n”,sum);}優(yōu)秀程序員的素質(zhì)之一:使用TAB縮進{}對齊有足夠的注釋有合適的空行結構特點函數(shù)與主函數(shù)程序由一個或多個函數(shù)組成必須有且只能有一個主函數(shù)main()程序執(zhí)行從main開始,在main中結束,其它函數(shù)通過嵌套調(diào)用得以執(zhí)行。程序語句C程序由語句組成用“;”作為語句終止符注釋/**/為注釋,不能嵌套不產(chǎn)生編譯代碼<>例:/*Thisisthemain/*ofexample1.1*/*/非法編譯預處理命令

C語言程序設計

第一章C語言概述編輯鏈接編譯執(zhí)行1.4

C程序的上機步驟C程序開發(fā)步驟<>file.exe

C語言程序設計

第一章C語言概述程序代碼的錄入,生成源程序*.c語法分析查錯,翻譯生成目標程序*.obj與其它目標程序或庫鏈接裝配,生成可執(zhí)行程序*.exe進入TurboCD:\TC>TC.exe

主控菜單文件操作FILE:New

Load

Save

Writeto編輯操作EDIT:插入/修改

查找/替換編譯鏈接COMPILE

LINK

MAKE執(zhí)行RUN退出TurboCAlt+xAlt+F,Q幫助HelpF1Ctrl+F1運行一個C語言程序的一般過程

TurboC是一個集源程序編輯、編譯、連接、運行與調(diào)試于一體、用菜單驅動的集成軟件環(huán)境。運行一個C語言程序的一般過程:(1)啟動TC,進入TC集成環(huán)境。(2)編輯(或修改)源程序。(3)編譯。如果編譯成功,則可進行下一步操作;否則,返回(2)修改源程序,再重新編譯,直至編譯成功。(4)連接。如果連接成功,則可進行下一步操作;否則,根據(jù)系統(tǒng)的錯誤提示,進行相應修改,再重新連接,直至連接成功。(5)運行。通過觀察程序運行結果,驗證程序的正確性。如果出現(xiàn)邏輯錯誤,則必須返回(2)修改源程序,再重新編譯、連接和運行,直至程序正確。(6)退出TC集成環(huán)境,結束本次程序運行。進入TurboC2.0集成開發(fā)環(huán)境中后,屏幕上顯示:小結:一、函數(shù)是C語言程序的基本單位。C語言程序總是從main()函數(shù)開始執(zhí)行

被調(diào)用的函數(shù)可以是系統(tǒng)提供的庫函數(shù),也可以使用戶根據(jù)需要自己編制設計的函數(shù)。C的函數(shù)相當于其他語言的子程序,用函數(shù)來實現(xiàn)特定的功能。main()函數(shù)的作用,相當于其它高級語言中的主程序;其它函數(shù)的作用,相當于子程序。一個C語言程序,總是從main()函數(shù)開始執(zhí)行,而不論其在程序中的位置。當主函數(shù)執(zhí)行完畢時,亦即程序執(zhí)行完畢。習慣上,將主函數(shù)main()放在最前頭。二、源程序書寫格式1.所有語句都必須以分號“;”結束,函數(shù)的最后一個語句也不例外。2.程序行的書寫格式自由,既允許1行內(nèi)寫幾條語句,也允許1條語句分寫在幾行上。3.允許使用注釋。C語言的注釋格式為:/*……*/

第二章算法2.1算法的概念

做任何事情都有一定的步驟。為解決一個問題而采取的方法和步驟,就稱為算法。計算機算法:計算機能夠執(zhí)行的算法。計算機算法可分為兩大類:

數(shù)值運算算法:求解數(shù)值;非數(shù)值運算算法:事務管理領域。

2.2

簡單算法舉例【例2.1】求1×2×3×4×5。最原始方法:步驟1:先求1×2,得到結果2。步驟2:將步驟1得到的乘積2乘以3,得到結果6。步驟3:將6再乘以4,得24。步驟4:將24再乘以5,得120。這樣的算法雖然正確,但太繁。改進的算法:S1:使t=1S2:使i=2S3:使t×i,乘積仍然放在在變量t中,可表示為t×i→tS4:使i的值+1,即i+1→iS5:如果i≤5,返回重新執(zhí)行步驟S3以及其后的S4和S5;否則,算法結束。

如果該求1×3×5×7×9×11,算法也只需做很少的改動:S1:1→tS2:3→iS3:t×i→tS4:i+2→tS5:若i≤11,返回S3,否則,結束。該算法不僅正確,而且是計算機較好的算法,因為計算機是高速運算的自動機器,實現(xiàn)循環(huán)輕而易舉。思考:若將

S5寫成:S5:若i<11,返回S3;否則,結束。

【例2.2】有50個學生,要求將他們之中成績在80分以上者打印出來。如果,n表示學生學號,ni表示第個學生學號;g表示學生成績,gi表示第個學生成績;則算法可表示如下:S1:1→iS2:如果gi≥80,則打印ni和gi,否則不打印S3:i+1→iS4:若i≤50,返回S2,否則,結束?!纠?.3】判定2000—2500年中的每一年是否閏年,將結果輸出。潤年的條件:

1)

能被4整除,但不能被100整除的年份;

2)

能被100整除,又能被400整除的年份;設y為被檢測的年份,則算法可表示如下:S1:2000→yS2:若y不能被4整除,則輸出y“不是閏年”,然后轉到S6S3:若y能被4整除,不能被100整除,則輸出y“是閏年”,然后轉到S6S4:若y能被100整除,又能被400整除,輸出y“是閏年”否則輸出y“不是閏年”,然后轉到S6S5:輸出y“不是閏年”。S6:y+1→yS7:當y≤2500時,返回S2繼續(xù)執(zhí)行,否則,結束。

【例2.4】求算法可表示如下:S1:sigh=1S2:sum=1S3:deno=2S4:sigh=(-1)×sighS5:term=sigh×(1/deno)S6:term=sum+termS7:deno=deno+1S8:若deno≤100,返回S4;否則,結束?!纠?.5】對一個大于或等于3的正整數(shù),判斷它是不是一個素數(shù)。算法可表示如下:S1:輸入n的值S2:i=2S3:n被i除,得余數(shù)rS4:如果r=0,表示n能被i整除,則打印n“不是素數(shù)”,算法結束;否則執(zhí)行S5S5:i+1→iS6:如果i≤n-1,返回S3;否則打印n“是素數(shù)”;然后算法結束。改進:S6:如果i≤,返回S3;否則打印n“是素數(shù)”;然后算法結束。

2.3算法的特性l有窮性:一個算法應包含有限的操作步驟而不能是無限的。l確定性:算法中每一個步驟應當是確定的,而不能應當是含糊的、模棱兩可的。l有零個或多個輸入。l

有一個或多個輸出。l有效性:算法中每一個步驟應當能有效地執(zhí)行,并得到確定的結果。對于程序設計人員,必須會設計算法,并根據(jù)算法寫出程序。2.4怎樣表示一個算法2.4.1

用自然語言表示算法除了很簡單的問題,一般不用自然語言表示算法。

2.4.2

用流程圖表示算法流程圖表示算法,直觀形象,易于理解。

5的階乘2.4.4

用N-S流程圖表示算法1973年美國學者提出了一種新型流程圖:N-S流程圖。順序結構:選擇結構:循環(huán)結構:

2.4.5

用偽代碼表示算法偽代碼使用介于自然語言和計算機語言之間的文字和符號來描述算法。2.4.6用計算機語言表示算法l

任務是用計算機解題,就是用計算機實現(xiàn)算法;l用計算機語言表示算法必須嚴格遵循所用語言的語法規(guī)則?!纠?.20】求1×2×3×4×5用C語言表示。

main(){inti,t;t=1;i=2;while(i<=5){t=t*i;i=i+1;}printf(“%d”,t);}2.5

結構化程序設計方法

自頂向下;

逐步細化;

模塊化設計;結構化編碼

第一、二章作業(yè)【題1.1】一個C程序的執(zhí)行是從

。A)

本程序的main函數(shù)開始,到main函數(shù)結束B)

本程序文件的第一個函數(shù)開始,到本程序文件的最后一個函數(shù)結束C)

本程序的main函數(shù)開始,到本程序文件的最后一個函數(shù)結束D)

本程序文件的第一個函數(shù)開始,到本程序main函數(shù)結束

【題1.2】以下敘述正確的是

。A)

在C程序中,main函數(shù)必須位于程序的最前面B)

C程序的每行中只能寫一條語句C)

C語言本身沒有輸入輸出語句D)

在對一個C程序進行編譯的過程中,可發(fā)現(xiàn)注釋中的拼寫錯誤

【題1.3】以下敘述不正確的是

。A)

一個C源程序可由一個或多個函數(shù)組成B)

一個C源程序必須包含一個main函數(shù)C)

C程序的基本組成單位是函數(shù)D)

在C程序中,注釋說明只能位于一條語句的后面【題1.4】C語言規(guī)定:在一個源程序中,main函數(shù)的位置

。A)

必須在最開始B)

必須在系統(tǒng)調(diào)用的庫函數(shù)的后面C)

可以任意D)

必須在最后

【題1.5】一個C語言程序是由

。A)

一個主程序和若干子程序組成B)

函數(shù)組成C)

若干過程組成

D)若干子程序組成

【題1.6】C源程序的基本單位是【

】。

【題1.7】一個C源程序至少應包括一個【

】。

【題1.8】在一個C源程序中,注釋部分兩側的分界符分別為【1】和【2】。【題1.9】在C語言中,輸入操作是由庫函數(shù)【1】完成的,輸出操作是由庫函數(shù)【2】完成的。P372.42.8【題1.1-1.5】ACDCB【題1.6】函數(shù)【題1.7】主函數(shù)(或:main函數(shù))【題1.8】【1】/* 【2】*/【題1.9】【1】scanf 【2】printf

第三章數(shù)據(jù)類型運算符與表達式預備知識數(shù)據(jù)類型常量與變量不同類型數(shù)據(jù)間的轉換運算符和表達式3.0

預備知識計算機中數(shù)的表示及進制轉換數(shù)碼、基與權數(shù)碼:表示數(shù)的符號基:數(shù)碼的個數(shù)權:每一位所具有的值數(shù)制<>語言程序設計第三章數(shù)據(jù)描述C各種進制之間的轉換二進制、八進制、十六進制轉換成十進制方法:按權相加<>語言程序設計第三章數(shù)據(jù)描述C各種進制之間的轉換(整數(shù))二進制、八進制、十六進制轉換成十進制方法:按權相加十進制轉換成二進制、八進制、十六進制方法:連續(xù)除以基,從低到高記錄余數(shù),直至商為0例把十進制數(shù)59轉換成二進制數(shù)5922921427232120(59)10=(111011)2110111111011余余余余余余例把十進制數(shù)159轉換成八進制數(shù)1598198280(159)10=(237)8237余7余3余2例把十進制數(shù)459轉換成十六進制數(shù)4591628161160(459)10=(1CB)161CB余11余12余1語言程序設計第三章數(shù)據(jù)描述C二進制與八進制之間的轉換二進制轉換成八進制:從右向左,每3位一組(不足3位左補0),轉換成八進制八進制轉換成二進制:用3位二進制數(shù)代替每一位八進制數(shù)例(1101001)2=(001,101,001)2=(151)8例(246)8=(010,100,110)2=(10100110)2000~0001~1010~2011~3100~4101~5110~6111~7<>語言程序設計第三章數(shù)據(jù)描述C二進制與十六進制之間的轉換二進制轉換成十六進制:從右向左,每4位一組(不足4位左補0),轉換成十六進制十六進制轉換成二進制:用4位二進制數(shù)代替每一位十六進制數(shù)例(11010101111101)2=(0011,0101,0111,1101)2=(357D)16例(4B9E)16=(0100,1011,1001,1110)2=(100101110011110)20000~00001~10010~20011~30100~40101~50110~60111~71000~81001~91010~A1011~B1100~C1101~D1110~E1111~F<>語言程序設計第三章數(shù)據(jù)描述C字節(jié)和位內(nèi)存以字節(jié)為單元組成每個字節(jié)有一個地址一個字節(jié)一般由8個二進制位組成每個二進位的值是0或101234567012345678910……...<>語言程序設計第三章數(shù)據(jù)描述C7643251數(shù)值的表示方法——原碼、反碼和補碼原碼:最高位為符號位,其余各位為數(shù)值本身的絕對值反碼:正數(shù):反碼與原碼相同負數(shù):符號位為1,其余位對原碼取反補碼:正數(shù):原碼、反碼、補碼相同負數(shù):最高位為1,其余位為原碼取反,再對整個數(shù)加1<>語言程序設計第三章數(shù)據(jù)描述C原碼反碼補碼+7000001110000011100000111-7100001111111100011111001+0000000000000000000000000-0100000001111111100000000數(shù)的范圍01111111~11111111(-127~+127)01111111~10000000(-127~+127)01111111~10000000(-128~+127)(用一字節(jié)表示數(shù))負數(shù)補碼轉換成十進制數(shù):最高位不動,其余位取反加1例補碼:11111001

取反:10000110

加1:10000111=-7<>語言程序設計第三章數(shù)據(jù)描述C3.1

數(shù)據(jù)類型數(shù)據(jù)類型總表<>C數(shù)據(jù)類型基本類型構造類型指針類型空類型void定義類型typedef字符類型char枚舉類型enum整型實型單精度型float雙精度型double數(shù)組結構體struct共用體union短整型short長整型long整型int數(shù)據(jù)類型決定:1.數(shù)據(jù)占內(nèi)存字節(jié)數(shù)2.數(shù)據(jù)取值范圍3.其上可進行的操作語言程序設計第三章數(shù)據(jù)描述C基本數(shù)據(jù)類型<>類型符號關鍵字數(shù)的表示范圍所占位數(shù)整型字符型實型有無(signed)int16-32768~32767(signed)short16-32768~32767(signed)long32-2147483648~214748364716unsigned

int0~65535320~4294967295unsigned

longunsigned

short160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127無unsignedchar80~255說明:數(shù)據(jù)類型所占字節(jié)數(shù)隨機器硬件不同而不同,上表以IBMPC機為例:語言程序設計第三章數(shù)據(jù)描述C3.2

常量與變量標識符定義:用來標識變量、常量、函數(shù)等的字符序列組成:只能由字母、數(shù)字、下劃線組成,且第一個字母必須是字母或下劃線大小寫敏感不能使用關鍵字長度:最長32個字符命名原則:見名知意不宜混淆如l與I,o與0例:判斷下列標識符號合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3chara>b_above$123<>M.D.John3days#33char$123a>b語言程序設計第三章數(shù)據(jù)描述C一般用大寫字母是宏定義預處理命令,不是C語句直接常量:整型常量實型常量字符常量字符串常量如#definePRICE30常量定義:程序運行時其值不能改變的量(即常數(shù))分類:符號常量:用標識符代表常量定義格式:#define

符號常量常量>>>><>例符號常量舉例(ch2_1.c)#definePRICE30main(){intnum,total;num=10;total=num*PRICE;printf("total=%d",total);}運行結果:total=300語言程序設計第三章數(shù)據(jù)描述C整型常量(整常數(shù))三種形式:十進制整數(shù):由數(shù)字0~9和正負號表示.如123,-456,0八進制整數(shù):由數(shù)字0開頭,后跟數(shù)字0~7表示.如0123,011十六進制整數(shù):由0x開頭,后跟0~9,a~f,A~F表示.如0x123,0Xff<例12與12L例30000為int型65536為longint型整型常量的類型根據(jù)其值所在范圍確定其數(shù)據(jù)類型在整常量后加字母l或L,認為它是longint

型常量問題:0123=()100x123=()100Xff=()1083291255問題:0123=()100x123=()100Xff=()10語言程序設計第三章數(shù)據(jù)描述C實型常量(實數(shù)或浮點數(shù))表示形式:十進制數(shù)形式:(必須有小數(shù)點)如0.123,.123,123.0,0.0,123.指數(shù)形式:(e或E之前必須有數(shù)字;指數(shù)必須為整數(shù))如12.3e3,123E2,1.23e4,e-5,1.2E-3.5

<實型常量的類型默認double型在實型常量后加字母f或F,認為它是float型語言程序設計第三章數(shù)據(jù)描述C字符常量定義:用單引號括起來的單個普通字符或轉義字符.

字符常量的值:該字符的ASCII碼值<轉義字符及其含義:轉義字符含義\n\v\r\a\‘\ddd\t\b\f\\\“\xhh轉義字符含義換行垂直制表回車響鈴單引號3位8進制數(shù)代表的字符水平制表退格換頁反斜線雙引號2位16進制數(shù)代表的字符如‘\101’‘A’‘\012’’\n’‘\376’’’‘\x61’’a’‘\60’’0’‘\483’(

)例:‘A’’\101’’\x41’65<如‘A’——65,‘a(chǎn)’——97,

‘0’——48,‘\n’——10如‘a(chǎn)’‘A’‘?’‘\n’‘\101’轉義字符:反斜線后面跟一個字符或一個代碼值表示例轉義字符舉例(ch2_001.c,ch2_004.c)

main(){printf("\101\x42C\n");printf("Isay:\"Howareyou?\"\n");printf("\\CProgram\\\n");printf("Turbo\'C\'");}運行結果:(屏幕顯示)ABCIsay:”Howareyou?”\CProgram\Turbo‘C’<字符常量與字符串常量不同字符串常量定義:用雙引號(“”)括起來的字符序列存儲:每個字符串尾自動加一個‘\0’作為字符串結束標志hello\0例字符串“hello”在內(nèi)存中aa\0例‘a(chǎn)’“a”例空串“”\0例:charch;ch=“A”;例:charch;ch=‘A’;語言程序設計第三章數(shù)據(jù)描述C編譯程序根據(jù)變量定義為其分配指定字節(jié)的內(nèi)存單元…...地址inta=1,b=-3,c;abc2字節(jié)2字節(jié)2字節(jié)地址地址…...內(nèi)存1-3

隨機數(shù)變量概念:其值可以改變的量變量名與變量值變量定義的一般格式:

數(shù)據(jù)類型變量1[,變量2,…,變量n];<>變量初始化:定義時賦初值例:inta,b,c;floatdata;決定分配字節(jié)數(shù)和數(shù)的表示范圍合法標識符例:inta=2,b,c=4;floatdata=3.67;charch=‘A’;intx=1,y=1,z=1;

intx=y=z=1;變量的使用:先定義,后使用例1intstudent;stadent=19;//Undefinedsymbol‘statent’infunctionmain

例2floata,b,c;c=a%b;//Illegaluseoffloatingpointinfunctionmain

變量定義位置:一般放在函數(shù)開頭main(){inta,b=2;floatdata;a=1;data=(a+b)*1.2;printf(“data=%f\n”,data);}變量定義可執(zhí)行語句main(){inta,b=2;a=1;floatdata;data=(a+b)*1.2;printf(“data=%f\n”,data);}Ch2_005.c語言程序設計第三章數(shù)據(jù)描述Ca

變量名3變量值存儲單元整型變量占字節(jié)數(shù)隨機器不同而不同,一般占一個機器字short≤int≤long可用sizeof(類型標識符)測量實型變量float:占4字節(jié),提供7位有效數(shù)字double:占8字節(jié),提供15~16位有效數(shù)字字符型變量字符變量存放字符ASCII碼char與int數(shù)據(jù)間可進行算術運算例floata;a=111111.111;/*a=111111.1*/doubleb;b=111111.111;/*b=111111.111*/例a=‘D’;/*a=68;*/x=‘A’+5;/*x=65+5;*/s=‘!’+‘G’/*s=33+71;*/<>沒有字符串變量,用字符數(shù)組存放Ch2_006.c語言程序設計第三章數(shù)據(jù)描述C例/*ch2_003.c*/#definePRICE12.5main(){intnum=3;floattotal;charch1,ch2=‘D’;total=num*PRICE;ch1=ch2-‘A’+‘a(chǎn)’;printf(“total=%f,ch1=%c\n”,total,ch1);}宏定義變量定義輸出結果運行結果:total=37.500000,ch1=d語言程序設計第三章數(shù)據(jù)描述C3.3不同類型數(shù)據(jù)間的轉換隱式轉換什么情況下發(fā)生運算轉換不同類型數(shù)據(jù)混合運算時賦值轉換把一個值賦給與其類型不同的變量時輸出轉換輸出時轉換成指定的輸出格式函數(shù)調(diào)用轉換實參與形參類型不一致時轉換運算轉換規(guī)則:不同類型數(shù)據(jù)運算時先自動轉換成同一類型<>語言程序設計第三章數(shù)據(jù)描述Cdoublefloatlongunsignedintchar,short低高說明:必定的轉換運算對象類型不同時轉換例charch;inti;floatf;doubled;ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+‘a(chǎn)’+i*f-d/l例inti;floatf;doubled;longl;<>顯式轉換(強制轉換)一般形式:(類型名)(表達式)例(int)(x+y)(int)x+y(double)(3/2)(int)3.6說明:強制轉換得到所需類型的中間變量,原變量類型不變例main(){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}結果:x=3.600000,i=3精度損失問題較高類型向較低類型轉換時可能發(fā)生<>Ch2_007.cCh2_008.c語言程序設計第三章數(shù)據(jù)描述C3.4

運算符和表達式C運算符算術運算符:(+-*/%++--)關系運算符:(<<===>>=!=)邏輯運算符:((!&&||)位運算符:(<<>>~|^&)賦值運算符:(=及其擴展)條件運算符:(?:)逗號運算符:(,)指針運算符:(*&)求字節(jié)數(shù):(sizeof)強制類型轉換:(類型)分量運算符:(.->)下標運算符:([])其它:(()-)<>語言程序設計第三章數(shù)據(jù)描述C學習運算符應注意:運算符功能與運算量關系要求運算量個數(shù)要求運算量類型運算符優(yōu)先級別結合方向結果的類型<>語言程序設計第三章數(shù)據(jù)描述C算術運算符和表達式基本算術運算符:+-*/%結合方向:從左向右優(yōu)先級:->*/%>+-(2)(3)(4)

說明:“-”可為單目運算符時,右結合性兩整數(shù)相除,結果為整數(shù)%要求兩側均為整型數(shù)據(jù)例5/2=-5/2.0=例5%2=-5%2=1%10=

5%1=5.5%2<>例5/2=2

-5/2.0=-2.5例5%2=1

-5%2=-17%3=

1

5%1=

05.5%2()語言程序設計第三章數(shù)據(jù)描述C自增、自減運算符++--作用:使變量值加1或減1種類:前置++i,--i(先執(zhí)行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再執(zhí)行i+1或i-1)例j=3;k=++j;j=3;k=j++;j=3;printf(“%d”,++j);j=3;printf(“%d”,j++);a=3;b=5;c=(++a)*b;a=3;b=5;c=(a++)*b;<>//k=4,j=4//k=3,j=4//4//3//c=20,a=4//c=15,a=4語言程序設計第三章數(shù)據(jù)描述C自增、自減運算符++--作用:使變量值加1或減1種類:前置++i,--i(先執(zhí)行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再執(zhí)行i+1或i-1)說明:++--不能用于常量和表達式,如5++,(a+b)++++--結合方向:自右向左優(yōu)先級:-++-->*/%>+-

(2)(3)(4)例-i++-(i++)i=3;printf(“%d”,-i++);//-3

例j+++k;(j++)+k;例-i++i=3;printf(“%d”,-i++);Ch2_009.c語言程序設計第三章數(shù)據(jù)描述C賦值運算符和表達式簡單賦值運算符符號:=格式:變量標識符=表達式作用:將一個數(shù)據(jù)(常量或表達式)賦給一個變量復合賦值運算符種類:+=-=*=/=%=《=》=&=^=|=含義:exp1op=exp2

exp1=exp1opexp2a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3<>例a=3;d=func();c=d+2;語言程序設計第三章數(shù)據(jù)描述C說明:結合方向:自右向左優(yōu)先級:14左側必須是變量,不能是常量或表達式賦值表達式的值與變量值相等,且可嵌套賦值轉換規(guī)則:使賦值號右邊表達式值自動轉換成其左邊變量的類型例3=x-2*y;a+b=3;例

floatf;inti;i=10;f=i;則

f=10.0例inti;i=2.56;//結果i=2;例:a=b=c=5a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)<>//表達式值為5,a,b,c值為5//b=5;a=5//表達式值11,c=6,a=11//表達式值10,a=10,b=4,c=6//表達式值5,a=5,b=10,c=2語言程序設計第二章數(shù)據(jù)描述C說明:結合方向:自右向左優(yōu)先級:14左側必須是變量,不能是常量或表達式賦值表達式的值與變量值相等,且可嵌套賦值轉換規(guī)則:使賦值號右邊表達式值自動轉換成其左邊變量的類型例:a=12;a+=a-=a*a例:main(){inta=3;printf(“%d\n”,(a+=a-=a*a));}<>//a=-264等價于a=a+(a=a-(a*a))//a=-12語言程序設計第三章數(shù)據(jù)描述C逗號運算符和表達式形式:表達式1,表達式2,……表達式n結合性:從左向右優(yōu)先級:15逗號表達式的值:等于表達式n的值用途:常用于循環(huán)for語句中例a=3*5,a*4a=3*5,a*4,a+5例x=(a=3,6*3)x=a=3,6*a例a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);<>//a=15,表達式值60//a=15,表達式值20//賦值表達式,表達式值18,x=18//逗號表達式,表達式值18,x=3//1,2,3//3,2,3語言程序設計第二章數(shù)據(jù)描述C逗號運算符和表達式形式:表達式1,表達式2,……表達式n結合性:從左向右優(yōu)先級:15逗號表達式的值:等于表達式n的值用途:常用于循環(huán)for語句中<>語言程序設計第三章數(shù)據(jù)描述C0111111111111111int型:最大:327671000000000000000最小:-327681111111111111111unsignedint型:最大:655350000000000000000最小:0語言程序設計第三章數(shù)據(jù)描述C【題3.44】在C語言中(以16位PC機為例),一個char型數(shù)據(jù)在內(nèi)存中所占的字節(jié)數(shù)為【】;一個int型數(shù)據(jù)在內(nèi)存中所占的字節(jié)數(shù)為【】。

【題3.45】在C語言中(以16位PC機為例),一個float型數(shù)據(jù)在內(nèi)存中所占的字節(jié)數(shù)為【】;一個double型數(shù)據(jù)在內(nèi)存中所占的字節(jié)數(shù)為【】。

【題3.46】若有以下定義,則執(zhí)行表達式y(tǒng)+=y-=m*=y后的y值是【

】。

intm=5,y=2;

【題3.47】設C語言中,一個int型數(shù)據(jù)在內(nèi)存中占2個字節(jié),則int型數(shù)據(jù)的取值范圍為【 】?!绢}3.48】在C語言中的實型變量分為兩種類型,它們是【1】和【2】。

【題3.49】C語言所提供的基本數(shù)據(jù)類型包括:單精度型、雙精度型、【1】、【2】和【3】。

【題3.50】若s是int型變量,且s=6,則下面表達式的值為【

】。

s%2+(s+1)%2

【題3.51】若a是int型變量,則下面表達式的值為【

】。

(a=4*5,a*2),a+6【題3.44】【1】1 【2】2【題3.45】【1】4 【2】8【題3.46】-16【題3.47】-32768~32767【題3.48】【1】單精度型(或:float) 【2】雙精度型(或:double)【題3.49】【1】整型 【2】字符型 【3】枚舉類型【題3.50】1【題3.51】26第四章最簡單的C程序設計§4.1C語句概述一、C程序結構┌1┌預編譯命令│2│函數(shù)1C程序┤若干源程序.──┤函數(shù)2┌函數(shù)名│.│.──┤說明部分│.│.└執(zhí)行部分└n└函數(shù)n(語句)§4.2C語句分類1.控制語句有關選擇、循環(huán)、轉向、返回

2.函數(shù)調(diào)用printf(...)3.表達式語句表達式;

4.空語句;什么也不做

5.復合語句{語句1語句n}§4.3程序的三種基本結構順序結構AB循環(huán)結構PATFAPFT選擇結構ABPTF格式賦值表達式;

即變量=表達式;或

變量<復合賦值號>表達式;操作計算表達式的值,將該值賦予變量。例a=r*r*3.1415926;注▲賦值語句與賦值表達式的不同概念例if((a=b)>0)t=a;

其中a=b是表達式而不是語句上句相當于

a=b;if(a>0)t=a;可見使用了賦值語句能使程序得到簡化?!?.4賦值語句§4.5數(shù)據(jù)輸出一般每個程序都要用到數(shù)據(jù)的輸入輸出。數(shù)據(jù)輸入:通過外設將數(shù)據(jù)輸入內(nèi)存。數(shù)據(jù)輸出:將內(nèi)存的數(shù)據(jù)通過外設輸出。C語言的輸入輸出通過調(diào)用函數(shù)實現(xiàn),這些輸入輸出函數(shù)一般存于stdio.h和io.h(TURBOC)庫文件。使用輸入輸出函數(shù)要用預編譯命令指出連接的庫文件,程序編譯連接時將其與用戶程序相連。4.5.1putchar函數(shù)(字符輸出函數(shù))格式

putchar(C);其中C:一個實參,可以是字符變量、整型變量、整型常量及整型表達式操作輸出C值對應的ASCII碼,僅輸出一個字符注

▲使用該函數(shù)將庫函數(shù)stdio.h要預編譯命令說明

格式#include"stdio.h"

或#include<stdio.h>例#include<stdio.h>main(){chara,b,c;a='B';b='O';c='Y';putchar(a);putchar(b);putchar(c);}輸出結果BOY例putchar('\n');輸出換行

putchar('\101');putchar('A');putchar(65);

輸出AAA4.5.2

printf函數(shù)其中▲格式控制是由雙引號括起來的字符串,包括兩種信息

(1)格式說明%格式字符說明輸出的數(shù)據(jù)按制定的類型格式輸出如%d%10.2f(2)普通字符照原樣輸出字符或轉義符如abcde\n▲輸出表列是輸出的數(shù)據(jù),可以是常數(shù)、變量和表達式,

每個輸出數(shù)據(jù)之間用逗號分隔。如123.45,x,2*a+b操作將輸出表列中的數(shù)據(jù)按格式控制說明類型在顯示屏輸出格式

printf(格式控制,輸出表列);例printf("a=%db=%d\n",a,b);格式控制輸出表列其中%d格式說明;a=b=普通字符;\n轉義符

a,b輸出表列兩個變量設a=3,b=4則輸出a=3b=4

掌握使用printf()函數(shù)關鍵在于理解格式控制,格式控制中有格式字符和附加格式字符1.d格式字符用來輸出十進制整數(shù)

%d按整數(shù)的實際長度輸出

%mdm為指定輸出長度。如數(shù)據(jù)位數(shù)小于m,則數(shù)據(jù)左端補上空格,數(shù)據(jù)位數(shù)大于m,數(shù)據(jù)按實際長度輸出

%ldl表示輸出長整型數(shù)據(jù)例#include<stdio.h>main(){inta=123,b=12345;printf("%d,%d\n",a,b);printf("%4d,%4d\n",a,b);}輸出123,12345123,12345例#include<stdio.h>main(){longc;c=123456789;printf("%ld\n",c);}輸出123456789注整型的數(shù)據(jù)必須使用%d

長整型的數(shù)據(jù)必須使用%ld

兩者不能互換使用6.

s

格式字符用來輸出字符串

%s

按字符串的實際長度輸出

%ms

輸出字符串占m列字符串長度小于m,則字符串向右靠,左補空格字符串長度大于m,則字符串按實際長度輸出

%-ms

字符串長度小于m,則字符串向左靠,右補空格

%m.ns

輸出字符串占m列,只取字符串中左端n個字符,字符串向

右靠,左補空格

%-m.ns

輸出字符串占m列,只取字符串中左端n個字符,字符串向

左靠,右補空格例#include<stdio.h>main(){printf("%3s,%7.2s,%.4s,%-5.3s\n","CHINA","CHINA","CHINA","CHINA");}輸出CHINA,□□□□□CH,CHIN,CHI□□注

%.ns表示%m.ns中m=n。例中%.4等價%4.4s7.f格式字符用來輸出實數(shù)的基本型(包括單、雙精度)%f

整數(shù)部分全部輸出,小數(shù)部分6位%m.nf

輸出數(shù)據(jù)共占m位,其中n位小數(shù)。如數(shù)值長度<m,則左端補空格%-m.nf

輸出數(shù)據(jù)共占m位,其中n位小數(shù)。如數(shù)值長度<m,則右端補空格

例#include<stdio.h>main(){floatf=123.456;printf("%f,%10f,%10.2f,%-10.2f,%.2f\n",f,f,f,f,f);}輸出123.456001,123.456001,123.46,123.46,123.46%f%10f%10.2%-10.2%.2注

一般格式說明與輸出表列的個數(shù)、類型必須一一對應若格式符的個數(shù)>輸出對象的個數(shù),多余格式符按零值輸出若格式符的個數(shù)<輸出對象的個數(shù),多余輸出對象無用§4.6

數(shù)據(jù)輸入4.6.1getchar()函數(shù)格式

getchar()操作執(zhí)行該函數(shù)時,等待鍵盤輸入一個字符。即從鍵盤接受一個字符注無參函數(shù),括弧必須保留。

例3.8#include<stdio.h>main(){charc;c=getchar();putchar(c);}執(zhí)行到c=getchar();等待鍵盤鍵入一個字符輸入a<Enter>輸出a注輸完數(shù)據(jù)必須按<Enter>4.6.2scanf()函數(shù)

格式

scanf(格式控制,地址表列)其中1.格式控制是用雙引號括起來的字符串,字符串由格式說明和普通字符構成

(1)

格式說明由%和格式字符構成,說明輸入數(shù)據(jù)的格式格式字符見page43表3.3、表3.4

(2)普通字符作為輸入數(shù)據(jù)之間的分隔符。如,空格

2.地址列表是輸入數(shù)據(jù)存入內(nèi)存的地址,可以是變量的地址、字符串的首地址,每個內(nèi)存地址之間用逗號分隔。怎么知道變量的地址?利用地址運算符求出變量的地址格式&變量名例inta,b;則&a,&b表示取a,b變量的地址操作將鍵盤鍵入的數(shù)據(jù)按指定類型格式存入指定內(nèi)存存儲單元例#include<stdio.h>main(){inta,b,c;scanf("%d%d%d",&a,&b,&c);/*格式控制,地址表列*/printf("%d,%d,%d\n",a,b,c);}運行輸入345<Enter>

輸出3,4,5注1.鍵入數(shù)據(jù)之間可用空格、<Tab>或<Enter>分隔,即多各空格分格。上例輸入可改為345<enter><Tab><Tab>一個<Tab>跳8個空格或3<Enter>4<Enter>5<Enter>注2.在格式說明中使用了普通字符,則要用普通字符作為數(shù)據(jù)之間的分隔符。如上例改用輸入函數(shù)scanf()為

scanf("%d,%d,%d",&a,&b,&c);

輸入則為3,4,5<Enter>3使用格式說明符“%c”輸入單個字符時,空格和轉義字符均作為有效字符被輸入。例如,scanf("%c%c%c",&ch1,&ch2,&ch3);printf("ch1=%c,ch2=%c,ch3=%c\n",ch1,ch2,ch3);

假設輸入:A□B□C↙,則系統(tǒng)將字母'A'賦值給ch1,空格'□'賦值給ch2,字母'B'賦值給ch3。C語言的格式輸入輸出的規(guī)定比較繁瑣,在學習本書時不必花許多精力去死摳每一個細節(jié),重點掌握最常用的一些規(guī)則即可。通過上機編寫和調(diào)試程序來逐步深入面自然地學會輸入輸出的應用。提高人機交互性建議:為改善人機交互性,同時簡化輸入操作,在設計輸入操作時,一般先用printf()函數(shù)輸出一個提示信息,再用scanf()函數(shù)進行數(shù)據(jù)輸入。例如,將scanf("num1=%d,num2=%d\n",&num1,&num2);改為:

printf("num1=");scanf("%d",&num1);printf("num2=");scanf("%d",&num2);考慮到printf和scanf函數(shù)使用頻繁,系統(tǒng)允許在使用這兩個函數(shù)時可不加#include<stdio.h>或#include”stdio.h”§4.7舉例[例1]從鍵盤輸入一個小寫字母,要求用大小寫字母形式輸出該字母及對應的ASCII碼值。分析:如何將一個小寫字母轉換成大寫字母?一般表達式: (c2=c1-32)#include"stdio.h"main(){charc1,c2;c1=getchar();printf(“%c,%d\n",c1,c1);c2=c1-32; /*將小寫字母轉換成對應的大寫字母*/printf("%c,%d\n",c2,c2);}程序運行情況如下:

A↙A,65 a,97[例2]輸入三角形的三邊長,求三角形面積。

分析:(1)(2)求平方根函數(shù):sqrt()在math.h中說明

(3)其它一些函數(shù),如:cos(),pow(),exp(),

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論