C语言程序设计课件_第1页
C语言程序设计课件_第2页
C语言程序设计课件_第3页
C语言程序设计课件_第4页
C语言程序设计课件_第5页
已阅读5页,还剩392页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

1.2C語言特點語言簡潔、緊湊、靈活運算符和數據類型豐富程式設計結構化、模組化生成目標代碼品質高可移植性好<>>>>>>中級語言

C語言程式設計

第一章C語言概述>32個關鍵字:(由系統定義,不能重作其他定義)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

定義整型數組aintf();

FUNCTIONf():INTEGER

定義f為返值整型的函數int*p;

VARp:INTEGER

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

i=i+2

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

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

C語言程式設計

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

C語言程式設計

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

C語言程式設計

第一章C語言概述1.3

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

C語言程式設計

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

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

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

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);}優秀程式員的素質之一:使用TAB縮進{}對齊有足夠的注釋有合適的空行結構特點函數與主函數程式由一個或多個函數組成必須有且只能有一個主函數main()程式執行從main開始,在main中結束,其他函數通過嵌套調用得以執行。程式語句C程式由語句組成用“;”作為語句終止符注釋/**/為注釋,不能嵌套不產生編譯代碼<>例:/*Thisisthemain/*ofexample1.1*/*/非法編譯預處理命令

C語言程式設計

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

C程式的上機步驟C程式開發步驟<>file.exe

C語言程式設計

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

主控菜單檔操作FILE:New

Load

Save

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

查找/替換編譯鏈接COMPILE

LINK

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

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

被調用的函數可以是系統提供的庫函數,也可以使用戶根據需要自己編制設計的函數。C的函數相當於其他語言的副程式,用函數來實現特定的功能。main()函數的作用,相當於其他高級語言中的主程序;其他函數的作用,相當於副程式。一個C語言程式,總是從main()函數開始執行,而不論其在程式中的位置。當主函數執行完畢時,亦即程式執行完畢。習慣上,將主函數main()放在最前頭。2.1演算法的概念

做任何事情都有一定的步驟。為解決一個問題而採取的方法和步驟,就稱為演算法。電腦演算法:電腦能夠執行的演算法。電腦演算法可分為兩大類:

數值運算演算法:求解數值;非數值運算演算法:事務管理領域。

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,返回重新執行步驟S3以及其後的S4和S5;否則,演算法結束。

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

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,否則,結束。【例2.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繼續執行,否則,結束。

【例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;否則,結束。【例2.5】對一個大於或等於3的正整數,判斷它是不是一個素數。演算法可表示如下:S1:輸入n的值S2:i=2S3:n被i除,得餘數rS4:如果r=0,表示n能被i整除,則列印n“不是素數”,演算法結束;否則執行S5S5:i+1→iS6:如果i≤n-1,返回S3;否則列印n“是素數”;然後演算法結束。改進:S6:如果i≤,返回S3;否則列印n“是素數”;然後演算法結束。

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

有一個或多個輸出。l有效性:演算法中每一個步驟應當能有效地執行,並得到確定的結果。對於程式設計人員,必須會設計演算法,並根據演算法寫出程式。2.4怎樣表示一個演算法2.4.1

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

2.4.2

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

5的階乘2.4.4

用N-S流程圖表示演算法1973年美國學者提出了一種新型流程圖:N-S流程圖。順序結構:選擇結構:迴圈結構:

2.4.5

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

任務是用電腦解題,就是用電腦實現演算法;l用電腦語言表示演算法必須嚴格遵循所用語言的語法規則。【例2.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

結構化程式設計方法

自頂向下;

逐步細化;

模組化設計;結構化編碼

第一、二章作業【題1.1】一個C程式的執行是從

。A)

本程式的main函數開始,到main函數結束B)

本程式檔的第一個函數開始,到本程式檔的最後一個函數結束C)

本程式的main函數開始,到本程式檔的最後一個函數結束D)

本程式檔的第一個函數開始,到本程式main函數結束

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

。A)

在C程式中,main函數必須位於程式的最前面B)

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

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

在對一個C程式進行編譯的過程中,可發現注釋中的拼寫錯誤

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

。A)

一個C根源程式可由一個或多個函數組成B)

一個C根源程式必須包含一個main函數C)

C程式的基本組成單位是函數D)

在C程式中,注釋說明只能位於一條語句的後面【題1.4】C語言規定:在一個根源程式中,main函數的位置

。A)

必須在最開始B)

必須在系統調用的庫函數的後面C)

可以任意D)

必須在最後【題1.5】一個C語言程式是由

。A)

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

函數組成C)

若干過程組成

D)若干副程式組成

【題1.6】C根源程式的基本單位是【】。

【題1.7】一個C根源程式至少應包括一個【】。

【題1.8】在一個C根源程式中,注釋部分兩側的分界符分別為【1】和【2】。【題1.9】在C語言中,輸入操作是由庫函數【1】完成的,輸出操作是由庫函數【2】完成的。P372.42.83.0

預備知識電腦中數的表示及進制轉換數碼、基與權數碼:表示數的符號基:數碼的個數權:每一位所具有的值數制<>語言程式設計第三章數據描述C各種進制之間的轉換二進位、八進制、十六進制轉換成十進位方法:按權相加<>語言程式設計第三章數據描述C各種進制之間的轉換(整數)二進位、八進制、十六進制轉換成十進位方法:按權相加十進位轉換成二進位、八進制、十六進制方法:連續除以基,從低到高記錄餘數,直至商為0例把十進位數59轉換成二進位數5922921427232120(59)10=(111011)2110111111011餘餘餘餘餘餘例把十進位數159轉換成八進制數1598198280(159)10=(237)8237餘7餘3餘2例把十進位數459轉換成十六進制數4591628161160(459)10=(1CB)161CB餘11餘12餘1語言程式設計第三章數據描述C二進位與八進制之間的轉換二進位轉換成八進制:從右向左,每3位一組(不足3位左補0),轉換成八進制八進制轉換成二進位:用3位二進位數代替每一位八進制數例(1101001)2=(001,101,001)2=(151)8例(246)8=(010,100,110)2=(10100110)2000~0001~1010~2011~3100~4101~5110~6111~7<>語言程式設計第三章數據描述C二進位與十六進制之間的轉換二進位轉換成十六進制:從右向左,每4位一組(不足4位左補0),轉換成十六進制十六進制轉換成二進位:用4位二進位數代替每一位十六進制數例(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<>語言程式設計第三章數據描述C位元組和位記憶體以位元組為單元組成每個位元組有一個地址一個位元組一般由8個二進位位組成每個二進位的值是0或101234567012345678910……...<>語言程式設計第三章數據描述C7643251數值的表示方法——原碼、反碼和補數原碼:最高位為符號位,其餘各位為數值本身的絕對值反碼:正數:反碼與原碼相同負數:符號位為1,其餘位對原碼取反補數:正數:原碼、反碼、補數相同負數:最高位為1,其餘位為原碼取反,再對整個數加1<>語言程式設計第三章數據描述C原碼反碼補數+7000001110000011100000111-7100001111111100011111001+0000000000000000000000000-0100000001111111100000000數的範圍01111111~11111111(-127~+127)01111111~10000000(-127~+127)01111111~10000000(-128~+127)(用一位元組表示數)負數補數轉換成十進位數:最高位不動,其餘位取反加1例補數:11111001

取反:10000110

加1:10000111=-7<>語言程式設計第三章數據描述C3.1

數據類型數據類型總表<>C數據類型基本類型構造類型指針類型空類型void定義類型typedef字元類型char枚舉類型enum整型實型單精確度型float雙精度型double數組結構體struct共用體union短整型short長整型long整型int數據類型決定:1.數據占記憶體位元組數2.數據取值範圍3.其上可進行的操作語言程式設計第三章數據描述C基本數據類型<>類型符號關鍵字數的表示範圍所占位數整型字元型實型有無(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說明:數據類型所占位元組數隨機器硬體不同而不同,上表以IBMPC機為例:語言程式設計第三章數據描述C3.2

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

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

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

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

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

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

‘0’——48,‘\n’——10如‘a’‘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”在內存中aa\0例‘a’“a”例空串“”\0例:charch;ch=“A”;例:charch;ch=‘A’;語言程式設計第三章數據描述C編譯程序根據變數定義為其分配指定位元組的記憶體單元…...地址inta=1,b=-3,c;abc2位元組2位元組2位元組地址地址…...記憶體1-3

亂數變數概念:其值可以改變的量變數名與變數值變數定義的一般格式:

數據類型變數1[,變數2,…,變數n];<>變數初始化:定義時賦初值例:inta,b,c;floatdata;決定分配位元組數和數的表示範圍合法識別字例: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

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

變數名3變數值存儲單元整型變數占位元組數隨機器不同而不同,一般占一個機器字short≤int≤long可用sizeof(類型識別字)測量實型變數float:占4位元組,提供7位有效數字double:占8位元組,提供15~16位有效數字字元型變數字元變數存放字元ASCII碼char與int數據間可進行算術運算例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;*/<>沒有字串變數,用字符數組存放Ch2_006.c語言程式設計第三章數據描述C例/*ch2_003.c*/#definePRICE12.5main(){intnum=3;floattotal;charch1,ch2=‘D’;total=num*PRICE;ch1=ch2-‘A’+‘a’;printf(“total=%f,ch1=%c\n”,total,ch1);}宏定義變數定義輸出結果運行結果:total=37.500000,ch1=d語言程式設計第三章數據描述C3.3不同類型數據間的轉換隱式轉換什麼情況下發生運算轉換不同類型數據混合運算時賦值轉換把一個值賦給與其類型不同的變數時輸出轉換輸出時轉換成指定的輸出格式函數調用轉換實參與形參類型不一致時轉換運算轉換規則:不同類型數據運算時先自動轉換成同一類型<>語言程式設計第三章數據描述Cdoublefloatlongunsignedintchar,short低高說明:必定的轉換運算對象類型不同時轉換例charch;inti;floatf;doubled;ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+‘a’+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精度損失問題較高類型向較低類型轉換時可能發生<>Ch2_007.cCh2_008.c語言程式設計第三章數據描述C3.4

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

說明:“-”可為單目運算符時,右結合性兩整數相除,結果為整數%要求兩側均為整型數據例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()語言程式設計第三章數據描述C自增、自減運算符++--作用:使變數值加1或減1種類:前置++i,--i(先執行i+1或i-1,再使用i值)後置i++,i--(先使用i值,再執行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語言程式設計第三章數據描述C自增、自減運算符++--作用:使變數值加1或減1種類:前置++i,--i(先執行i+1或i-1,再使用i值)後置i++,i--(先使用i值,再執行i+1或i-1)說明:++--不能用於常量和運算式,如5++,(a+b)++++--結合方向:自右向左優先順序:-++-->*/%>+-

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

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

exp1=exp1opexp2a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3<>例a=3;d=func();c=d+2;語言程式設計第三章數據描述C說明:結合方向:自右向左優先順序:14左側必須是變數,不能是常量或運算式賦值運算式的值與變數值相等,且可嵌套賦值轉換規則:使賦值號右邊運算式值自動轉換成其左邊變數的類型例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語言程式設計第二章數據描述C說明:結合方向:自右向左優先順序:14左側必須是變數,不能是常量或運算式賦值運算式的值與變數值相等,且可嵌套賦值轉換規則:使賦值號右邊運算式值自動轉換成其左邊變數的類型例: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語言程式設計第三章數據描述C逗號運算符和運算式形式:運算式1,運算式2,……運算式n結合性:從左向右優先順序:15逗號運算式的值:等於運算式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語言程式設計第二章數據描述C逗號運算符和運算式形式:運算式1,運算式2,……運算式n結合性:從左向右優先順序:15逗號運算式的值:等於運算式n的值用途:常用於迴圈for語句中<>語言程式設計第三章數據描述C0111111111111111int型:最大:327671000000000000000最小:-327681111111111111111unsignedint型:最大:655350000000000000000最小:0語言程式設計第三章數據描述C【題3.44】在C語言中(以16位PC機為例),一個char型數據在內存中所占的位元組數為【】;一個int型數據在內存中所占的位元組數為【】。

【題3.45】在C語言中(以16位PC機為例),一個float型數據在內存中所占的位元組數為【】;一個double型數據在內存中所占的位元組數為【】。

【題3.46】若有以下定義,則執行運算式y+=y-=m*=y後的y值是【】。

intm=5,y=2;

【題3.47】設C語言中,一個int型數據在內存中占2個位元組,則int型數據的取值範圍為【 】。【題3.48】在C語言中的實型變數分為兩種類型,它們是【1】和【2】。

【題3.49】C語言所提供的基本數據類型包括:單精確度型、雙精度型、【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§4.2C語句分類1.控制語句有關選擇、迴圈、轉向、返回

2.函數調用printf(...)3.運算式語句運算式;

4.空語句;什麼也不做

5.複合語句{語句1語句n}§4.3程式的三種基本結構順序結構AB迴圈結構PATFAPFT選擇結構ABPTF格式賦值運算式;

即變數=運算式;或

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

其中a=b是運算式而不是語句上句相當於

a=b;if(a>0)t=a;可見使用了賦值語句能使程式得到簡化。§4.4賦值語句§4.5數據輸出一般每個程式都要用到數據的輸入輸出。數據輸入:通過外設將數據輸入記憶體。數據輸出:將記憶體的數據通過外設輸出。C語言的輸入輸出通過調用函數實現,這些輸入輸出函數一般存於stdio.h和io.h(TURBOC)庫檔。使用輸入輸出函數要用預編譯命令指出連接的庫檔,程式編譯連接時將其與用戶程式相連。4.5.1putchar函數(字元輸出函數)格式

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

▲使用該函數將庫函數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函數其中▲格式控制是由雙引號括起來的字串,包括兩種資訊

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

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

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

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

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

%d按整數的實際長度輸出

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

%ldl表示輸出長整型數據例#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注整型的數據必須使用%d

長整型的數據必須使用%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格式字元用來輸出實數的基本型(包括單、雙精度)%f

整數部分全部輸出,小數部分6位%m.nf

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

輸出數據共占m位,其中n位小數。如數值長度<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注

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

數據輸入4.6.1getchar()函數格式

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

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

格式

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

(1)

格式說明由%和格式字元構成,說明輸入數據的格式格式字元見page43表3.3、表3.4

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

2.地址列表是輸入數據存入記憶體的地址,可以是變數的地址、字串的首地址,每個記憶體地址之間用逗號分隔。怎麼知道變數的地址?利用地址運算符求出變數的地址格式&變數名例inta,b;則&a,&b表示取a,b變數的地址操作將鍵盤鍵入的數據按指定類型格式存入指定記憶體存儲單元例#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.鍵入數據之間可用空格、<Tab>或<Enter>分隔,即多各空格分格。上例輸入可改為345<enter><Tab><Tab>一個<Tab>跳8個空格或3<Enter>4<Enter>5<Enter>注2.在格式說明中使用了普通字元,則要用普通字元作為數據之間的分隔符號。如上例改用輸入函數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↙,則系統將字母'A'賦值給ch1,空格'□'賦值給ch2,字母'B'賦值給ch3。C語言的格式輸入輸出的規定比較繁瑣,在學習本書時不必花許多精力去死摳每一個細節,重點掌握最常用的一些規則即可。通過上機編寫和調試程式來逐步深入面自然地學會輸入輸出的應用。提高人機交互性建議:為改善人機交互性,同時簡化輸入操作,在設計輸入操作時,一般先用printf()函數輸出一個提示資訊,再用scanf()函數進行數據輸入。例如,將scanf("num1=%d,num2=%d\n",&num1,&num2);改為:

printf("num1=");scanf("%d",&num1);printf("num2=");scanf("%d",&num2);考慮到printf和scanf函數使用頻繁,系統允許在使用這兩個函數時可不加#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)求平方根函數:sqrt()在math.h中說明

(3)其他一些函數,如:cos(),pow(),exp(),fabs(),log(),log10()#include<stdio.h>#include<math.h>main(){ floata,b,c,s,area; scanf(“%f,%f,%f”,&a,&b,&c); s=(a+b+c)/2.0; area=sqrt(s*(s-a)*(s-b)*(s-c)); printf(“%f\n”,area);}[例3]求二元一次方程分析已知b*b-4ac>0則實根為x1,2=-b±b-4ac2a2演算法1.輸入已知值a,b,c2.代入公式求x1,x23.輸出x1,x2的實根,已知b*b-4ac>0。#include<stdio.h>#include<math.h>main(){ 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;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论