




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C語(yǔ)言基本語(yǔ)法歸納及實(shí)例介紹計(jì)算機(jī)教學(xué)中心李雪飛提 綱vC C語(yǔ)言概況語(yǔ)言概況vC C程序的結(jié)構(gòu)程序的結(jié)構(gòu)v數(shù)據(jù)類(lèi)型、運(yùn)算符與表達(dá)式數(shù)據(jù)類(lèi)型、運(yùn)算符與表達(dá)式v最簡(jiǎn)單的最簡(jiǎn)單的C C程序設(shè)計(jì)程序設(shè)計(jì)順序程序設(shè)計(jì)順序程序設(shè)計(jì)v選擇結(jié)構(gòu)程序設(shè)計(jì)選擇結(jié)構(gòu)程序設(shè)計(jì)v循環(huán)控制循環(huán)控制v數(shù)組數(shù)組v函數(shù)函數(shù)v指針指針C C語(yǔ)言概況語(yǔ)言概況vC的優(yōu)點(diǎn)的優(yōu)點(diǎn)1)、高效)、高效2)、可移植)、可移植3)、靈活)、靈活vC的缺點(diǎn)的缺點(diǎn)可讀性差,學(xué)習(xí)應(yīng)用較難可讀性差,學(xué)習(xí)應(yīng)用較難。C C語(yǔ)言概況語(yǔ)言概況-簡(jiǎn)單的簡(jiǎn)單的C C程序程序 例例1.1 main( ) printf(This is a C program.n);
2、 該程序的作用:在屏幕上輸出一行信息: This is a C program. 1 1、main( ) main( ) 表示表示“主函數(shù)主函數(shù)”,每一個(gè),每一個(gè)C C程序都必須有程序都必須有且只有一個(gè)主函數(shù)。且只有一個(gè)主函數(shù)。 2 2、mainmain函數(shù)體由大括號(hào)函數(shù)體由大括號(hào) 括起來(lái)。括起來(lái)。3 3、語(yǔ)句后面有一個(gè)分號(hào)。、語(yǔ)句后面有一個(gè)分號(hào)。. .4 4、printfprintf( )( )是是C C語(yǔ)言的輸出函數(shù)。雙引號(hào)內(nèi)的字符語(yǔ)言的輸出函數(shù)。雙引號(hào)內(nèi)的字符 被原樣輸出。被原樣輸出。5 5、“n”n”是換行符,即在輸出是換行符,即在輸出This is a C programThis i
3、s a C program之后換行。之后換行。 例例1.2求兩數(shù)之和。求兩數(shù)之和。 main( ) int a, b, sum; /*定義三個(gè)整型變量。(定義三個(gè)整型變量。(int = integer)。)。*/ a = 123;b = 456; /*把常數(shù)把常數(shù)123賦給變量賦給變量a,把常數(shù),把常數(shù)456賦給變量賦給變量b*/ sum = a + b; /*計(jì)算計(jì)算a、b之和,并把和值賦變量給之和,并把和值賦變量給sum*/ printf(“Sum is %dn”, sum);/*輸出輸出sum的值的值*/ 程序的輸出信息為:程序的輸出信息為: sum is 579v/* */中間的內(nèi)容表
4、示中間的內(nèi)容表示“注釋注釋”。注釋是程序員對(duì)程序某部分的功能和作用所做的。注釋是程序員對(duì)程序某部分的功能和作用所做的說(shuō)明,是給人看的,對(duì)編譯和運(yùn)行不起作用。說(shuō)明,是給人看的,對(duì)編譯和運(yùn)行不起作用。v%d表示輸出的數(shù)據(jù)類(lèi)型是十進(jìn)制整數(shù)類(lèi)型。在輸出時(shí),該位置用對(duì)應(yīng)變量表示輸出的數(shù)據(jù)類(lèi)型是十進(jìn)制整數(shù)類(lèi)型。在輸出時(shí),該位置用對(duì)應(yīng)變量sum的值代替。的值代替。例例1.3輸入兩個(gè)整數(shù),輸出其中的最大值。輸入兩個(gè)整數(shù),輸出其中的最大值。int max(int x,int y) /*求兩數(shù)最大值函數(shù)求兩數(shù)最大值函數(shù)max*/ int z;if(xy) z=x;else z=y;return (z); /*將將
5、z的值返回給主函數(shù)的值返回給主函數(shù)main*/ /*返回值通過(guò)函數(shù)名返回值通過(guò)函數(shù)名max帶回帶回main函數(shù)調(diào)用處函數(shù)調(diào)用處*/ main ( ) /*主函數(shù)主函數(shù)*/ int a,b,c;scanf(“%d,%d”,&a,&b); /*輸入輸入a,b的值的值*/c=max(a,b); /*調(diào)用調(diào)用max函數(shù),將實(shí)參函數(shù),將實(shí)參a,b的值給形參的值給形參x,y*/printf(“max=%d”,c); /*輸出最大值輸出最大值*/C C程序的結(jié)構(gòu)程序的結(jié)構(gòu)v、C 程序是由函數(shù)構(gòu)成的。一個(gè)程序是由函數(shù)構(gòu)成的。一個(gè)C源程序至少源程序至少包括一個(gè)函數(shù)包括一個(gè)函數(shù)(main函數(shù):函數(shù):它代表程序開(kāi)始
6、執(zhí)行它代表程序開(kāi)始執(zhí)行的起始位置的起始位置),也可以包括一個(gè),也可以包括一個(gè)main函數(shù)和若干函數(shù)和若干其它函數(shù)。因此,函數(shù)是其它函數(shù)。因此,函數(shù)是C程序的基本單位。程序的基本單位。v C程序中有三種類(lèi)型的函數(shù):程序中有三種類(lèi)型的函數(shù):1).main():主函數(shù)主函數(shù),每一個(gè),每一個(gè)C程序必須且只有一個(gè)程序必須且只有一個(gè)main()函數(shù)。函數(shù)。2).開(kāi)發(fā)系統(tǒng)提供的特殊函數(shù)開(kāi)發(fā)系統(tǒng)提供的特殊函數(shù),如,如printf( )、scanf( )等。等。 Turbo C開(kāi)發(fā)系統(tǒng)提供三百多個(gè)函數(shù)。開(kāi)發(fā)系統(tǒng)提供三百多個(gè)函數(shù)。3).程序員自己設(shè)計(jì)的函數(shù)程序員自己設(shè)計(jì)的函數(shù),如例,如例1.3中的函數(shù)中的函數(shù)ma
7、x()。 C的函數(shù)相當(dāng)于其它語(yǔ)言中的子程序。用函數(shù)來(lái)實(shí)的函數(shù)相當(dāng)于其它語(yǔ)言中的子程序。用函數(shù)來(lái)實(shí)現(xiàn)特定的功能??梢哉f(shuō)現(xiàn)特定的功能。可以說(shuō)C是函數(shù)式的語(yǔ)言。程序全部是函數(shù)式的語(yǔ)言。程序全部工作都是由函數(shù)來(lái)完成的。工作都是由函數(shù)來(lái)完成的。C的這種特性很容易實(shí)現(xiàn)的這種特性很容易實(shí)現(xiàn)模塊化模塊化。C C程序的結(jié)構(gòu)程序的結(jié)構(gòu)C C程序的結(jié)構(gòu)程序的結(jié)構(gòu)v、一個(gè)函數(shù)由兩部分組成:、一個(gè)函數(shù)由兩部分組成: ()()函數(shù)的說(shuō)明部分函數(shù)的說(shuō)明部分。包括函數(shù)名、函數(shù)類(lèi)型、函數(shù)。包括函數(shù)名、函數(shù)類(lèi)型、函數(shù)屬性、函數(shù)參數(shù)屬性、函數(shù)參數(shù)(形參形參)名、形式參數(shù)類(lèi)型。名、形式參數(shù)類(lèi)型。v如如int max (int x,
8、int y) 函數(shù)類(lèi)型函數(shù)類(lèi)型 函數(shù)名函數(shù)名 函數(shù)參數(shù)類(lèi)型函數(shù)參數(shù)類(lèi)型 函數(shù)參數(shù)名函數(shù)參數(shù)名 函數(shù)參數(shù)類(lèi)型函數(shù)參數(shù)類(lèi)型 函數(shù)參數(shù)名函數(shù)參數(shù)名v()()函數(shù)體函數(shù)體。即函數(shù)說(shuō)明部分下面的大括弧。即函數(shù)說(shuō)明部分下面的大括弧.內(nèi)的內(nèi)的部分。如果一個(gè)函數(shù)內(nèi)有多個(gè)大括弧,則最外層的一對(duì)部分。如果一個(gè)函數(shù)內(nèi)有多個(gè)大括弧,則最外層的一對(duì) 為函數(shù)體的范圍。為函數(shù)體的范圍。 函數(shù)體一般包括:函數(shù)體一般包括: 變量定義。如變量定義。如例例1.3中中main函數(shù)中的函數(shù)中的“int a,b,c;” 執(zhí)行部分。由若干個(gè)語(yǔ)句組成。執(zhí)行部分。由若干個(gè)語(yǔ)句組成。 當(dāng)然,在某些情況下也可以沒(méi)有變量定義部分當(dāng)然,在某些情況下也
9、可以沒(méi)有變量定義部分(例如例如例例1.1)。甚至可以既無(wú)變量定義也無(wú)執(zhí)行部分,如:甚至可以既無(wú)變量定義也無(wú)執(zhí)行部分,如:dump() 它是一個(gè)空函數(shù),什么也不干,但這是合法的。它是一個(gè)空函數(shù),什么也不干,但這是合法的。C C程序的結(jié)構(gòu)程序的結(jié)構(gòu)、一個(gè)、一個(gè)C程序程序總是從總是從main函數(shù)開(kāi)始執(zhí)行函數(shù)開(kāi)始執(zhí)行的,而不論的,而不論main函數(shù)在整個(gè)程序中的位置如何(函數(shù)在整個(gè)程序中的位置如何(main函數(shù)可以放函數(shù)可以放在程序最前頭,也可以放在程序最后,或在一些函數(shù)之在程序最前頭,也可以放在程序最后,或在一些函數(shù)之前在另一些函數(shù)之后)。前在另一些函數(shù)之后)。 、 C程序書(shū)寫(xiě)格式自由,一行內(nèi)可以寫(xiě)
10、幾個(gè)語(yǔ)句,程序書(shū)寫(xiě)格式自由,一行內(nèi)可以寫(xiě)幾個(gè)語(yǔ)句,一個(gè)語(yǔ)句可以分寫(xiě)在多行上。一個(gè)語(yǔ)句可以分寫(xiě)在多行上。C程序沒(méi)有行號(hào)程序沒(méi)有行號(hào),也不象,也不象fortran或或cobol那樣嚴(yán)格規(guī)定書(shū)寫(xiě)格式那樣嚴(yán)格規(guī)定書(shū)寫(xiě)格式(語(yǔ)句必須從某語(yǔ)句必須從某一列開(kāi)始書(shū)寫(xiě)一列開(kāi)始書(shū)寫(xiě))。 C C程序的結(jié)構(gòu)程序的結(jié)構(gòu)、每個(gè)語(yǔ)句和數(shù)據(jù)定義的最后必須有一個(gè)分號(hào)。分號(hào)、每個(gè)語(yǔ)句和數(shù)據(jù)定義的最后必須有一個(gè)分號(hào)。分號(hào)是是C語(yǔ)句的必要組成部分。例如:語(yǔ)句的必要組成部分。例如:c=a+b; 分號(hào)不可少分號(hào)不可少。即使是程序中最后一個(gè)語(yǔ)句也應(yīng)包含分號(hào)即使是程序中最后一個(gè)語(yǔ)句也應(yīng)包含分號(hào)(這是和這是和pascal語(yǔ)言不同的語(yǔ)言不同的)
11、。、C語(yǔ)言本身語(yǔ)言本身沒(méi)有輸入輸出語(yǔ)句沒(méi)有輸入輸出語(yǔ)句。輸入和輸出的操作。輸入和輸出的操作是由庫(kù)函數(shù)是由庫(kù)函數(shù)scanf和和printf等函數(shù)來(lái)完成的。等函數(shù)來(lái)完成的。C對(duì)輸入輸對(duì)輸入輸出實(shí)行出實(shí)行“函數(shù)化函數(shù)化”。、可以用、可以用/*/對(duì)對(duì)C程序中的任何部分作注釋??沙绦蛑械娜魏尾糠肿髯⑨???梢栽黾映绦虻目勺x性。以增加程序的可讀性。 C C程序的結(jié)構(gòu)程序的結(jié)構(gòu)程序開(kāi)發(fā)過(guò)程程序開(kāi)發(fā)過(guò)程v v C源代源代碼碼編編譯譯程程序序目標(biāo)目標(biāo)代碼代碼鏈鏈接接程程序序可可執(zhí)執(zhí)行行代代碼碼庫(kù)庫(kù)C源代源代碼碼編編譯譯程程序序目標(biāo)目標(biāo)代碼代碼數(shù)據(jù)類(lèi)型、運(yùn)算符與表達(dá)式數(shù)據(jù)類(lèi)型、運(yùn)算符與表達(dá)式3.1 信息在計(jì)算機(jī)中的
12、存儲(chǔ)與表示v計(jì)算機(jī)的基本功能是進(jìn)行數(shù)據(jù)的計(jì)算和加工處理,程序和數(shù)據(jù)在計(jì)算機(jī)的存儲(chǔ)是用二進(jìn)制形式表示的。v數(shù)與字符是自然信息與計(jì)算機(jī)二進(jìn)制信息的中轉(zhuǎn)環(huán)節(jié)。v數(shù)制:就是用一組固定的數(shù)字和一套統(tǒng)一的規(guī)則來(lái)表示數(shù)據(jù)的方法。日常使用的十進(jìn)制(逢十進(jìn)一)機(jī)器內(nèi)部的二進(jìn)制(逢二進(jìn)一)其它常用的數(shù)制:八進(jìn)制,十六進(jìn)制不同數(shù)制之間的對(duì)應(yīng)表示十進(jìn)制decimal二進(jìn)制binary八進(jìn)制octal十六進(jìn)制hexdecimal000011112102231133410044510155611066711177十進(jìn)制decimal二進(jìn)制binary八進(jìn)制octal十六進(jìn)制hexdecimal81000891001910
13、1010111011121100131101141110151111161000010ABCDEF201011121314151617數(shù)制間的轉(zhuǎn)換v1.二、八、十六進(jìn)制轉(zhuǎn)換為十進(jìn)制按權(quán)展開(kāi)法。例:(101.11)2=122+021+120+12-1+12-2 =(5.75) 10(127.4)8=182+281+780+42-1 =(87.5) 10數(shù)制間的轉(zhuǎn)換v2.十進(jìn)制轉(zhuǎn)換為二、八、十六進(jìn)制整數(shù)部分:除R取余法(先余為低,后余為高)小數(shù)部分:乘R取整法(先整為高,后整為低)轉(zhuǎn)換精度問(wèn)題例:(4.6875)10=(?) 2 結(jié)果: (100.1011) 2 (87.5)10=(?) 8 結(jié)果
14、: (127.47) 8 數(shù)制間的轉(zhuǎn)換v3.二進(jìn)制與八、十六進(jìn)制之間的轉(zhuǎn)換八、十六進(jìn)制轉(zhuǎn)換為二進(jìn)制一分為三、一分為四例:(23.54)8=(010011.101100) 2 =(10011.1011) 2(13.B)16=(00010011.1011) 2 =(10011.1011) 2二進(jìn)制轉(zhuǎn)換為八、十六進(jìn)制合三為一、合四為一3.2 3.2 C的數(shù)據(jù)類(lèi)型v數(shù)據(jù)結(jié)構(gòu)指的是數(shù)據(jù)的組織形式。 v不同的計(jì)算機(jī)語(yǔ)言所允許定義和使用的數(shù)據(jù)結(jié)構(gòu)是不同的。v處理同一類(lèi)問(wèn)題,如果數(shù)據(jù)結(jié)構(gòu)不同,算法也會(huì)不同。v所以,我們應(yīng)當(dāng)綜合考慮算法和數(shù)據(jù)結(jié)構(gòu),選擇最佳的數(shù)據(jù)結(jié)構(gòu)和算法。 數(shù)據(jù)結(jié)構(gòu)+算法=程序v對(duì)程序當(dāng)中所用
15、到的所有數(shù)據(jù)都必須指定其數(shù)據(jù)類(lèi)型。vC語(yǔ)言的數(shù)據(jù)結(jié)構(gòu)是以數(shù)據(jù)類(lèi)型形式出現(xiàn)的。 C的數(shù)據(jù)類(lèi)型如下:3.2 3.2 常量與變量v3.2.1 常量和符號(hào)常量v3.2.2 變量3.2.1 常量和符號(hào)常量v在程序運(yùn)行過(guò)程中,其值不能被改變的量稱(chēng)為常量。v常量分為: (1)整型常量;如12,0,3等; (2)實(shí)型常量;如4.6,1.23等; (3)字符常量;如a,d等;(將在后面的小節(jié)中詳細(xì)講解)v常量一般從其字面形式即可判別,這種常量稱(chēng)為字面常量或直接常量。v也可以用一個(gè)標(biāo)識(shí)符代表一個(gè)常量。如例3.1例 3.1 符號(hào)常量的使用。#define PRICE 30main()int num,total; n
16、um=10; total=num*PRICE; printf(“total=%d”,total); 程序中用#define 命令行定義PRICE代表常量30,此后凡在本文件中出現(xiàn)的PRICE都代表30,可以和常量一樣進(jìn)行運(yùn)算。 程序運(yùn)行結(jié)果為:total=300符號(hào)常量v用一個(gè)標(biāo)識(shí)符代表一個(gè)常量的,稱(chēng)為符號(hào)常量,即標(biāo)識(shí)符形式的常量。v注意:符號(hào)常量不同于變量。符號(hào)常量的值在其作用域(例3.1中即為main()函數(shù))內(nèi)不能被改變,也不能被再次賦值。如:在主函數(shù)main中再次用“PRICE=40”語(yǔ)句對(duì)PRICE賦值是錯(cuò)誤的。v為了方便區(qū)分符號(hào)常量與變量,習(xí)慣上符號(hào)常量名大寫(xiě),變量名小寫(xiě)。使用符號(hào)
17、常量的好處(1)含義清楚。 定義符號(hào)常量名時(shí)應(yīng)考慮“見(jiàn)名知意”,在一個(gè)規(guī)范的程序中不提倡使用很多的常數(shù),如:sum=15*30*23.5*43.在檢查程序時(shí)搞不清各個(gè)常數(shù)究竟代表什么。應(yīng)盡量使用“見(jiàn)名知意”的變量名和符號(hào)常量。(2)在需要改變一個(gè)常量時(shí)能夠做到“一改全改”。例如,在程序中多處用到某物品的價(jià)格,如果價(jià)格用常數(shù)表示,則在價(jià)格進(jìn)行調(diào)整時(shí),需要在程序中作多處修改;若使用符號(hào)常量PRICE代表價(jià)格,則只需在定義該符號(hào)常量處作一次修改即可。如:#define PRICE=35 3.2.2 變量v其值可以改變的量稱(chēng)為變量。一個(gè)變量應(yīng)該有一個(gè)名字,在內(nèi)存中占據(jù)一定的存儲(chǔ)單元。在該存儲(chǔ)單元中存放
18、該變量的值。v注意:變量名與變量值的區(qū)別。 3a變量名(一個(gè)符號(hào)地址,在對(duì)程序編譯時(shí)系統(tǒng)分配給它一個(gè)內(nèi)存地址)變量值(在程序中對(duì)變量取值,實(shí)際上是通過(guò)變量名找到相應(yīng)內(nèi)存地址,從其存儲(chǔ)單元中讀取數(shù)據(jù))存儲(chǔ)單元v變量的使用是程序設(shè)計(jì)的中心環(huán)節(jié)之一,應(yīng)掌握: (1) 變量的定義:某一時(shí)刻值是確定的,不同時(shí)刻可能取不同的值,其改變是不連續(xù)的。 (2) 變量的兩個(gè)要素 變量名:它是一個(gè)標(biāo)識(shí)符,代表一定的內(nèi)存存儲(chǔ)單元,存儲(chǔ)單元有一個(gè)地址。C語(yǔ)言以“&變量名”表示變量的地址。 變量值:它存放在相應(yīng)的存儲(chǔ)單元中,C語(yǔ)言在使用變量名時(shí),實(shí)際上是在使用存儲(chǔ)單元中存放的變量的值。 變量的命名規(guī)則v變量的命名符合一般
19、標(biāo)識(shí)符(名字)的命名規(guī)則 。(1)“字母數(shù)字串” ; 以字母開(kāi)頭,后邊跟以字母或者數(shù)字,下劃線等同于字母。(漢字看作字母,但編程時(shí)盡量避免使用漢字,因?yàn)闈h字的兼容性不好) (2) 建議長(zhǎng)度不超過(guò)8個(gè)字符(可移植性要求); (3) 區(qū)分大小寫(xiě) (一般使用小寫(xiě)字母);(4) 盡量做到“見(jiàn)名知意”,避免使用代數(shù)符號(hào)(如a,b); (5) 不能有空格,不能有小數(shù)點(diǎn)。 變量的強(qiáng)制定義v在C語(yǔ)言中,要求對(duì)所有用到的變量作強(qiáng)制定義,就是“先定義,后使用”。這樣做的目的是:(1)凡是沒(méi)有被事先定義的,不作為變量名,這就能保證程序中變量名使用的正確;(2)每一個(gè)變量被指定為一確定類(lèi)型,在編譯時(shí)就能為其分配相應(yīng)的
20、存儲(chǔ)單元;(3)制定每一變量屬于一個(gè)類(lèi)型,這就便于在編譯時(shí),據(jù)此檢查該變量所進(jìn)行的運(yùn)算是否合法。3.3 3.3 整型數(shù)據(jù)v3.3.1 整型常量的表示方法v3.3.2 整型變量v3.3.3 整型常量的類(lèi)型 3.3.1 整型常量的表示方法v整形常量即整常數(shù)。C整常數(shù)可用以下三種形式表示: (1)十進(jìn)制整數(shù)。如123、-456、0 (2)八進(jìn)制整數(shù)。以0開(kāi)頭的數(shù)是八進(jìn)制數(shù)。如0123表示八進(jìn)制數(shù)123,即(123)8,等于十進(jìn)制數(shù)83)。-011表示八進(jìn)制數(shù)-11,即十進(jìn)制數(shù)-9。 (3)十六進(jìn)制整數(shù)。以0 x開(kāi)頭的數(shù)是16進(jìn)制數(shù)。如0 x123,代表16進(jìn)制數(shù)123。 3
21、.3.2 整型變量v1.整型數(shù)據(jù)在內(nèi)存中的存放形式v2.整型變量的分類(lèi)v3.整型變量的定義v4.整型數(shù)據(jù)的溢出整型變量的分類(lèi)v(1)基本型,以int表示。 v(2)短整型,以short int表示,或以short表示。 v(3)長(zhǎng)整型,以long int表示,或以long表示。 v(4)無(wú)符號(hào)型,以存儲(chǔ)單元中全部二進(jìn)位(bit)存放數(shù)本身,而不必空出最高位作為符號(hào)位。無(wú)符號(hào)型中又分為無(wú)符號(hào)整型、無(wú)符號(hào)短整型和無(wú)符號(hào)長(zhǎng)整型,分別以u(píng)nsigned int, unsigned short, unsigned long表示。v 如果整量在內(nèi)存中占2個(gè)字節(jié)(16位),則int型變量數(shù)的范圍為-3276
22、832767。而unsigned int型變量數(shù)的范圍為065535. 各類(lèi)數(shù)據(jù)所占內(nèi)存字節(jié)數(shù)vC標(biāo)準(zhǔn)沒(méi)有具體規(guī)定以上各類(lèi)數(shù)據(jù)所占內(nèi)存的字節(jié)數(shù),只要求long型數(shù)據(jù)長(zhǎng)度不短于int型,short型不長(zhǎng)于int型。具體如何實(shí)現(xiàn),有各計(jì)算機(jī)系統(tǒng)自行決定。v通常的做法是:把long定為32位,把short定為16位,而int可以是16位,也可以是32位。v在微機(jī)上用long型可以得到大范圍的整數(shù),但同時(shí)會(huì)降低運(yùn)算速度,因此不要隨便使用long型。整型變量的定義v前面已提到,C規(guī)定在程序中所有用到的變量都必須在程序中指定其類(lèi)型,即“定義”。這和BASIC, FORTRAN不同,而和PASCAL相類(lèi)似。
23、例如: vint a,b;(指定變量a,b為整型)unsigned short c,d; (指定變量c,d為無(wú)符號(hào)短整型)long e,f (指定變量e,f為長(zhǎng)整型)v對(duì)變量的定義,一般是放在一個(gè)函數(shù)的開(kāi)頭部分的聲明部分,變量的作用域是整個(gè)函數(shù);也可以放在函數(shù)中的某一分程序內(nèi),但變量的作用域只限于該分程序內(nèi)(這將在第8章介紹)。例3.2 整型變量的定義與使用main() int a,b,c,d; /*指定a,b,c,d為整型變量*/ unsigned u; /*指定u為無(wú)符號(hào)整型變量*/ a=12;b=-24;u=10; c=a+u;d=b+u; printf(“a+u=%d,b+u=%dn”
24、,c,d);運(yùn)行結(jié)果為:a+u=22,b+u=-14 可以看到:不同種類(lèi)的整型數(shù)據(jù)可以進(jìn)行算術(shù)運(yùn)算。在本例中是int型數(shù)據(jù)與unsigned int型數(shù)據(jù)進(jìn)行加減運(yùn)算。3.4 3.4 實(shí)型數(shù)據(jù)v3.4.1 實(shí)型常量的表示方法v3.4.2 實(shí)型變量v3.4.3 實(shí)型常量的類(lèi)型3.4.1 實(shí)型常量的表示方法v實(shí)數(shù)在C語(yǔ)句中又稱(chēng)為浮點(diǎn)數(shù)。實(shí)數(shù)有兩種表示形式: (1)十進(jìn)制數(shù)形式。它由數(shù)字和小數(shù)點(diǎn)組成(注意必須有小數(shù)點(diǎn))。0.123, .123, 123.0, 123., 0.0都是十進(jìn)制數(shù)形式。 (2)指數(shù)形式。如123e3或123E3都代表123103 。但注意字母e(或E)之前必須有數(shù)字,且e后
25、面指數(shù)必須為整數(shù),如e3, 2.1e3.5, .e3, e等都不是合法的指數(shù)形式。 3.4.2 實(shí)型變量v1. 實(shí)型數(shù)據(jù)在內(nèi)存中的存放形式v2. 實(shí)型變量的分類(lèi)v3. 實(shí)型數(shù)據(jù)的舍入誤差3.4.2 實(shí)型變量v1. 實(shí)型數(shù)據(jù)在內(nèi)存中的存放形式v2. 實(shí)型變量的分類(lèi)v3. 實(shí)型數(shù)據(jù)的舍入誤差3.5 3.5 字符型數(shù)據(jù)v3.5.1 字符常量v3.5.2 字符變量v3.5.3 字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式v3.5.4 字符串常量3.5.1 字符常量C的字符常量是用單引號(hào)括起來(lái)的一個(gè)字符。如a, D, ?等都是字符常量。注意,a和A是不同的字符的常量。v除了以上形式的字符常量外,C還允許用一種特殊的字符常
26、,就是以一個(gè)“”開(kāi)關(guān)的字符序列。例如,前面已經(jīng)遇到過(guò)的,在printf函數(shù)中的n,它代表一個(gè)“換行”符,這種非顯示字符難以用一般形式的字符表示,故規(guī)定用這種特殊形式表示。v這類(lèi)特殊的字符稱(chēng)為“轉(zhuǎn)義字符”。轉(zhuǎn)義字符va. 控制字符: t 水平制表(跳到下一個(gè)tab位置); r 回車(chē); n 換行; b. 疑難字符: 單引號(hào)字符 反斜杠字符c. 指定ASCII碼對(duì)應(yīng)的字符:格式1: xhh:1到2位十六進(jìn)制數(shù)ASCII碼對(duì)應(yīng)的字符如:x42表示字符“B”;格式2:ddd: 1到3位八進(jìn)制數(shù)ASCII碼對(duì)應(yīng)的字符 如:102同樣表示字符“B”;3.5.2 字符變量字符型變量用來(lái)存放字符常量,注意只能放
27、一個(gè)字符,不要以為在一個(gè)字符變量中可以放一個(gè)字符串(包括若干字符)。字符變量的字義如下: char c1,c2; 它表示c1和c2為字符型變量,各可以放一個(gè)字符。因此可以用下面語(yǔ)句對(duì)c1,c2賦值: c1=a;c2=b v一般以一個(gè)字節(jié)來(lái)存放一個(gè)字符,或者說(shuō)一個(gè)字符變量在內(nèi)存中占一個(gè)字節(jié)。 3.5.3 字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式v將一個(gè)字符常量放到一個(gè)字符變量中,并不是把該字符本身放到內(nèi)存單元中,而是將該字符的ASCII碼放到存儲(chǔ)單元中,而且以二進(jìn)制形式存放。例如:執(zhí)行賦值語(yǔ)句c1=a;c2=b;字符a的ASCII碼為97,b為98,在內(nèi)存中變量c1,c2的值如圖所示:v既然在內(nèi)存中,字符數(shù)據(jù)
28、以ASCII碼存放,它的存儲(chǔ)形式就與整數(shù)的存儲(chǔ)類(lèi)似,這使得字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用。9798c1c20110000101100010c1c2字符型數(shù)據(jù)和整型數(shù)據(jù)的通用性v一個(gè)字符數(shù)據(jù)既可以以字符形式輸出,也可以以整數(shù)形式輸出。v兩種通用形式的輸出;以字符形式輸出時(shí),需要先將存儲(chǔ)單元中的ASCII碼轉(zhuǎn)換成相應(yīng)字符,然后輸出;以整數(shù)形式輸出時(shí),直接將ASCII碼作為整數(shù)輸出。v對(duì)字符數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算;相當(dāng)于對(duì)它們的ASCII碼進(jìn)行整數(shù)的算術(shù)運(yùn)算。v相互賦值;字符數(shù)據(jù)與整型數(shù)據(jù)可以相互賦值。兩種通用形式的輸出 main() char c1,c2; c1=97;c2=98; (等價(jià)于c1=a;
29、c2=b;) printf(“%c%cn”,c1,c2); printf(“%d%dn”,c1,c2); 將97和98兩個(gè)整數(shù)直接存放到c1和c2的內(nèi)存單元中。 先將字符a 和b化成ASCII碼97和98,然后放到內(nèi)存單元中。兩者的作用和結(jié)果是完全相同的程序輸出如下:a b97 98對(duì)字符數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算例3.7 大小寫(xiě)字母的轉(zhuǎn)換。main()char c1,c2; c1=a;c2=b; c1=c1-32;c2=c2-32; printf(“%c%c”,c1,c2);運(yùn)行結(jié)果為: A Ba的ASCII碼為97,A為65;b為98,B為66。從ASCII代碼表中可以發(fā)現(xiàn):每一個(gè)小寫(xiě)字母比它相應(yīng)的
30、大寫(xiě)字母的ASCII碼大32。C語(yǔ)言允許字符數(shù)據(jù)與整數(shù)直接進(jìn)行算術(shù)運(yùn)算。相互賦值v字符數(shù)據(jù)與整型數(shù)據(jù)可以相互賦值。main()int i; char c; i=a; c=97; printf(“%c,%dn”,c,c); printf (“%c,%dn”,i,i);運(yùn)行結(jié)果:a,97 a,973.5.4 字符串常量前面已提到,字符常量是由一對(duì)單引號(hào)括起來(lái)的單個(gè)字符。C語(yǔ)言除了允許使用字符常量外,還允許使用字符串常量。字符串常量是一對(duì)雙引號(hào)括起來(lái)的字符序列。如:“How do you do.”, “CHINA”, “$123.45”都是字符串常量??梢暂敵鲆粋€(gè)字符串,如printf(How do
31、 you do.); v不要將字符常量與字符串?;煜?。a是字符常量,“a”是字符串常量,二者不同。v假設(shè)C被指定為字符變量: char c; c=a; 是正確的; 而 c=“a”; 是錯(cuò)誤的。c=“CHINA”, 也是錯(cuò)誤的。v不能把一個(gè)字符串賦給一個(gè)字符變量。 究竟為什么c=a就是正確的,而c“a”就錯(cuò)了呢?3.6 3.6 變量賦初值v程序中常需要對(duì)一些變量預(yù)先設(shè)置初值。C語(yǔ)言允許在定義變量的同時(shí)使變量初始化。vint a=3; /*指定a為整型變量,初值為3*/ float f=3.56; /*指定f為實(shí)型變量,初值為3.56*/ char c=a; /*指定c為字符變量,初值為a*/v也
32、可以使被定義的變量的一部分賦初值。 int a,b,c=5; /*指定a,b,c為整型變量,只對(duì)c初始化*/v如果對(duì)幾個(gè)變量賦予初值3,應(yīng)寫(xiě)為:int a=3,b=3,c=3; 不能寫(xiě)成:int a=b=c=3 v初始化不是在編譯階段完成的(只有在第8章中介紹的靜態(tài)存儲(chǔ)變量和外部變量的初始化時(shí)在編譯階段完成的)。v如:int a=3; 相當(dāng)于:int a; /*指定a為整型變量*/ a=3; /*賦值語(yǔ)句,將3賦給a*/v如:int a,b,c=5; 相當(dāng)于:int a,b,c; /*指定a,b,c為整型變量*/ c=5; /*賦值語(yǔ)句,將5賦給c*/ 3.7 3.7 算術(shù)運(yùn)算符和算術(shù)表達(dá)式v
33、3.7.1 C運(yùn)算符簡(jiǎn)介v3.7.2 算術(shù)運(yùn)算符和算術(shù)表達(dá)式 1. 基本的算術(shù)運(yùn)算符 2. 算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級(jí)與結(jié)合性 3. 強(qiáng)制類(lèi)型轉(zhuǎn)換運(yùn)算符 4. 自增、自減運(yùn)算符 5. 有關(guān)表達(dá)式使用中的問(wèn)題說(shuō)明3.7.1 C運(yùn)算符簡(jiǎn)介vC語(yǔ)言是表達(dá)式語(yǔ)言,除了控制語(yǔ)句和輸入輸出外幾乎都是表達(dá)式。如:賦值符“”作為賦值運(yùn)算符,而方括號(hào)“”作為下標(biāo)運(yùn)算符等。vC的運(yùn)算符有13類(lèi)之多。 C的運(yùn)算符1. 算術(shù)運(yùn)算符(+,-,*,/,%,即加,減,乘,除,求余)2. 關(guān)系運(yùn)算符( ,=,=,!=)3. 邏輯運(yùn)算符(!,&,|)4. 位運(yùn)算符(,|,&)5. 賦值運(yùn)算符(=及其擴(kuò)展賦值運(yùn)算符)6. 條件運(yùn)
34、算符(?,:)7. 逗號(hào)運(yùn)算符(,)8. 指針運(yùn)算符(*和&)9. 求字節(jié)數(shù)運(yùn)算符(sizeof)10.強(qiáng)制類(lèi)型轉(zhuǎn)換運(yùn)算符(類(lèi)型)11.分量運(yùn)算符(. )12.下標(biāo)運(yùn)算符( )13.其他(如函數(shù)調(diào)用運(yùn)算符() 運(yùn)算符詳見(jiàn)本書(shū)附錄III基本的算術(shù)運(yùn)算符v四則運(yùn)算: (加法運(yùn)算符,或正值運(yùn)算符。如35、3) (減法運(yùn)算符,或負(fù)值運(yùn)算符。如52、2) *( 乘法運(yùn)算符。如3*5) /(除法運(yùn)算符。如5/3) %(模運(yùn)算符,或求余運(yùn)算符,%兩則應(yīng)均為整型數(shù)據(jù))說(shuō)明:/運(yùn)算如果除數(shù)或被除數(shù)中有一個(gè)為負(fù)數(shù),則舍入的方向是不固定的。如5/3有的機(jī)器上結(jié)果為1,有的為2。但多數(shù)機(jī)器采取“向零取整”的方法,即5
35、/3=1,-5/3=-1,取整后向零靠攏。算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級(jí)與結(jié)合性v用算術(shù)運(yùn)算符和括號(hào)將運(yùn)算對(duì)象(操作數(shù))連接起來(lái),符合C語(yǔ)法規(guī)則的式子,稱(chēng)C算術(shù)表達(dá)式。運(yùn)算對(duì)象包括常量、變量、函數(shù)。v合法的C算術(shù)表達(dá)式如:a*b/c-1.5+a v優(yōu)先級(jí):若運(yùn)算對(duì)象兩側(cè)運(yùn)算符的優(yōu)先級(jí)不同,則先乘除后加減。 v結(jié)合性:若一個(gè)運(yùn)算對(duì)象兩側(cè)的運(yùn)算符的優(yōu)先級(jí)相同,則滿足結(jié)合性規(guī)則,自左向右,左結(jié)合性(運(yùn)算對(duì)象先與左面的運(yùn)算符結(jié)合)。 自增、自減運(yùn)算符v有前置和后置兩種形式:前置形式: + +變量名 ,變量名后置形式: 變量名+ , 變量名 v功能:對(duì)變量的值進(jìn)行自加1(自減1)的運(yùn)算。v例:語(yǔ)句+a; 相
36、當(dāng)于執(zhí)行a=a+1; 前置形式運(yùn)算規(guī)則:先對(duì)表達(dá)式中含有前置自增(減)運(yùn)算符的變量進(jìn)行自加(減)1,然后用這些變量的新值參與表達(dá)式運(yùn)算。后置形式運(yùn)算規(guī)則:先用變量原值參與表達(dá)式運(yùn)算,然后對(duì)含有后置自加(減)運(yùn)算符的變量進(jìn)行自加(減)1運(yùn)算。 main() main()int j,i=3; int j,i=3; j=+i;(相當(dāng)于i=i+1;j=i) j=i+;(相當(dāng)于j=i;i=i+1) printf(“%d,%d”,i,j); printf(“%d,%d”,i,j);運(yùn)行結(jié)果:4,4 運(yùn)行結(jié)果:4,3(1)自增運(yùn)算符()和自減運(yùn)算符(),只能用于變量,不能用于常量或表達(dá)式;(2)和的結(jié)合方向
37、為“自右至左”。 考慮:若i的初值為3,那么print(“%d”,-i+)的結(jié)果 應(yīng)該為多少呢?3.8 3.8 賦值運(yùn)算符和賦值表達(dá)式v1. 賦值運(yùn)算符v2. 類(lèi)型轉(zhuǎn)換v3. 復(fù)合的賦值運(yùn)算符v4. 賦值表達(dá)式1. 賦值運(yùn)算符v賦值符號(hào)“”就是賦值運(yùn)算符,作用是將一個(gè)數(shù)據(jù)賦給一個(gè)變量。v如“a=3”的作用是執(zhí)行一次賦值操作(或稱(chēng)賦值運(yùn)算),把常量3賦給變量a。v也可以將一個(gè)表達(dá)式的值賦給一個(gè)變量。如“a=3+5-8%5”,相當(dāng)于把結(jié)果值5賦給變量a(“a=5”)。2. 類(lèi)型轉(zhuǎn)換v如果賦值運(yùn)算符兩側(cè)的類(lèi)型不一致,但都是數(shù)值型或字符型時(shí),在賦值時(shí)要進(jìn)行類(lèi)型轉(zhuǎn)換。3. 復(fù)合的賦值運(yùn)算符v在賦值符“”
38、之前加上其他運(yùn)算符,可以構(gòu)成復(fù)合的運(yùn)算符。如:a+=3等價(jià)于a=a+3,x%=3等價(jià)于x=x%3。v注意:賦值符“”右邊看作一項(xiàng)。v凡是二元運(yùn)算符,都可以與賦值符一起組成復(fù)合賦值符。C語(yǔ)言規(guī)定了10種復(fù)合賦值運(yùn)算符:+=,-=,*=,/=,%=,=,&=,=,|= v規(guī)則:(1)“=”后邊先加括號(hào); (2) “=”前邊復(fù)制到“=”后邊 ;4. 賦值表達(dá)式v由賦值運(yùn)算符將一個(gè)變量和一個(gè)表達(dá)式連接起來(lái)的式子稱(chēng)為“賦值表達(dá)式”。v一般形式為: v賦值表達(dá)式求解過(guò)程:將賦值運(yùn)算符右側(cè)“表達(dá)式”的值賦給左側(cè)的變量。表達(dá)式的值就是被賦值的變量的值。v上述一般形式中的“表達(dá)式”還可以是一個(gè)賦值表達(dá)式。如:a
39、=(b=5)。所以,C語(yǔ)言允許連續(xù)賦值。vint a,b,c; a=b=c=0; 連續(xù)使用等號(hào)時(shí),從右向左順序賦值: a=(b=(c=0);v賦值表達(dá)式也可以包含復(fù)合的賦值運(yùn)算符。如: a+=a-=a*a也是一個(gè)賦值表達(dá)式。 若a的初值為12,則: 先進(jìn)行“a-=a*a”,相當(dāng)于a= a- a*a,a的值為 12-144=-132; 再進(jìn)行“a+=-132”的運(yùn)算,相當(dāng)于“a= a+(-132)”,a的值為-132-132=-264。3.9 3.9 逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式v逗號(hào)運(yùn)算符(又稱(chēng)順序求值運(yùn)算符):,v逗號(hào)表達(dá)式:用逗號(hào)運(yùn)算符把兩個(gè)表達(dá)式連接起來(lái)的表達(dá)式。v一般形式為:表達(dá)式1,表達(dá)式
40、2,.,表達(dá)式nv逗號(hào)表達(dá)式的值:表達(dá)式n的值.v如:逗號(hào)表達(dá)式“3+5,6+8”的值為14。v如:“a=3*5,a*4”,由于賦值運(yùn)算符的優(yōu)先級(jí)高于逗號(hào)運(yùn)算符(逗號(hào)運(yùn)算符在所有運(yùn)算符中級(jí)別最低),因此應(yīng)先求解a=3*5,再求解a*4,得到逗號(hào)表達(dá)式的值60。v一個(gè)逗號(hào)表達(dá)式又可以與另一個(gè)表達(dá)式組成一個(gè)新的逗號(hào)表達(dá)式,如:(a=3*5,a*4),a+5,先計(jì)算出a的值為15,由于a*4的操作并沒(méi)有改變a的值,所以a+5的值為20。因此,逗號(hào)表達(dá)式最終的值為20。v在許多情況下,使用逗號(hào)表達(dá)式的目的只是想分別得到各個(gè)表達(dá)式的值。v逗號(hào)表達(dá)式最常用于循環(huán)(for)語(yǔ)句。v注意:并不是任何地方出現(xiàn)的
41、逗號(hào)都作為逗號(hào)運(yùn)算符。例如函數(shù)參數(shù)也是用逗號(hào)來(lái)間隔的,如:printf(“%d,%d,%d”,a,b,c);課堂作業(yè)課堂作業(yè):2.1 指出下面哪些是合法的變量名指出下面哪些是合法的變量名: 123 abc a+b a_b pad ?12 Li_Li *P2.2 a在內(nèi)存中占在內(nèi)存中占 個(gè)字節(jié)個(gè)字節(jié),“a”在在內(nèi)存中占在在內(nèi)存中占 個(gè)字節(jié)個(gè)字節(jié).2.3 寫(xiě)出下面程序的運(yùn)行結(jié)果寫(xiě)出下面程序的運(yùn)行結(jié)果: main() char ch; ch=B; /*B的的ascii碼的值為碼的值為66*/ printf(“%c,%dn”,ch,ch) 1 2B 662.4 寫(xiě)出下面程序的運(yùn)行結(jié)果寫(xiě)出下面程序的運(yùn)行
42、結(jié)果:main() int a=10, b , c , d ; int b,c; a+=6; b = (c=20, 6, a+2 ); printf(a=%d,b=%d,c=%dn,a,b,c); 運(yùn)行結(jié)果:運(yùn)行結(jié)果:a=16,b=18,c=202.5寫(xiě)出下面程序的運(yùn)行結(jié)果寫(xiě)出下面程序的運(yùn)行結(jié)果:main() int a=4; int b,c; c=a+(b=2); a+=a-=a*a; printf(%d,%d,%dn,a,b,c); 2.6 寫(xiě)出下面程序的運(yùn)行結(jié)果寫(xiě)出下面程序的運(yùn)行結(jié)果: main() int a,b,c=9; a=3,b=4; c%= a+b; printf(“%dn”,
43、c) 運(yùn)行結(jié)果:運(yùn)行結(jié)果:-24,2,6運(yùn)行結(jié)果:運(yùn)行結(jié)果:22.7 寫(xiě)出下面程序的運(yùn)行結(jié)果寫(xiě)出下面程序的運(yùn)行結(jié)果: main()int i,j,m,n;i=8;j=10;m=+i;n=j+;printf(%d,%d,%d,%dn,i,j,m,n);運(yùn)行結(jié)果:運(yùn)行結(jié)果:9,11,9,102.8 寫(xiě)出下面程序的運(yùn)行結(jié)果寫(xiě)出下面程序的運(yùn)行結(jié)果: main()float x=5.4;int i;i=(int)x;printf(”x=%f,i=%dn,x,i);運(yùn)行結(jié)果:運(yùn)行結(jié)果:x=5.400000,I=5第四章第四章 最簡(jiǎn)單的最簡(jiǎn)單的C C程序設(shè)計(jì)程序設(shè)計(jì)順序程序設(shè)計(jì)順序程序設(shè)計(jì)v4.1 C語(yǔ)句概
44、述v4.2 賦值語(yǔ)句v4.3 數(shù)據(jù)輸入輸出的概念及實(shí)現(xiàn)v4.4 字符數(shù)據(jù)輸入輸出函數(shù)v4.5 格式輸入與輸出v4.6 順序結(jié)構(gòu)程序設(shè)計(jì)舉例4.1 C語(yǔ)句概述v與其他高級(jí)語(yǔ)言一樣,C語(yǔ)言的語(yǔ)句用來(lái)向計(jì)算機(jī)系統(tǒng)發(fā)出操作指令。v一個(gè)語(yǔ)句經(jīng)編譯后產(chǎn)生若干條機(jī)器指令。v一個(gè)實(shí)際的程序應(yīng)當(dāng)包含若干條語(yǔ)句。vC語(yǔ)句都是用來(lái)完成一定的操作任務(wù)的;聲明部分的內(nèi)容不應(yīng)稱(chēng)為語(yǔ)句。如:int a;不是一個(gè)C語(yǔ)句,它不產(chǎn)生機(jī)器操作,而只是對(duì)變量的定義。C程序結(jié)構(gòu)C程序源程序文件1源程序文件2源程序文件n預(yù)處理命令全局變量聲明函數(shù)1函數(shù)n函數(shù)首部函數(shù)體局部變量聲明執(zhí)行語(yǔ)句.C語(yǔ)句分類(lèi)vC語(yǔ)句可以分為以下5類(lèi): 1. 控制
45、語(yǔ)句; 2. 函數(shù)調(diào)用語(yǔ)句; 3. 表達(dá)式語(yǔ)句; 4. 空語(yǔ)句; 5. 復(fù)合語(yǔ)句;1. 控制語(yǔ)句v完成一定的控制功能。C只有9種控制語(yǔ)句: if()else (條件語(yǔ)句) for() (循環(huán)語(yǔ)句) while() (循環(huán)語(yǔ)句) dowhile() (循環(huán)語(yǔ)句) continue (結(jié)束本次循環(huán)語(yǔ)句) break (中止switch或循環(huán)語(yǔ)句) switch (多分支選擇語(yǔ)句) goto (轉(zhuǎn)向語(yǔ)句) return (從函數(shù)返回語(yǔ)句) ( )表示條件,表示內(nèi)嵌的語(yǔ)句表示條件,表示內(nèi)嵌的語(yǔ)句。2. 函數(shù)調(diào)用語(yǔ)句v由一次函數(shù)調(diào)用加一個(gè)分號(hào)構(gòu)成一個(gè)語(yǔ)句。v如:printf(“This is a C s
46、tatement.”);一次函數(shù)調(diào)用分號(hào)3. 表達(dá)式語(yǔ)句v由一個(gè)表達(dá)式構(gòu)成一個(gè)語(yǔ)句;最典型的是,由賦值表達(dá)式構(gòu)成一個(gè)賦值語(yǔ)句(表達(dá)式后面加分號(hào)即構(gòu)成語(yǔ)句)。如:a=3是一個(gè)賦值表達(dá)式,而a=3;是一個(gè)賦值語(yǔ)句。v一個(gè)語(yǔ)句必須在最后出現(xiàn)分號(hào)。v任何表達(dá)式都可以加上分號(hào)而成為語(yǔ)句。如:x+y;是語(yǔ)句,但沒(méi)有意義(沒(méi)有將相加之和賦給另一個(gè)變量)。v表達(dá)式能構(gòu)成語(yǔ)句是C語(yǔ)言的一個(gè)重要特色。C中大多數(shù)語(yǔ)句是表達(dá)式語(yǔ)句(包括函數(shù)調(diào)用語(yǔ)句),所以有人稱(chēng)C語(yǔ)言為“表達(dá)式語(yǔ)言”。4. 空語(yǔ)句 空語(yǔ)句:僅包含一個(gè)分號(hào)的語(yǔ)句,它什么都不做。有時(shí)用來(lái)做被轉(zhuǎn)向點(diǎn),或是循環(huán)語(yǔ)句中的循環(huán)體(循環(huán)體是空語(yǔ)句,表示循環(huán)體什么也
47、不做。) 如:;5. 復(fù)合語(yǔ)句 由大括號(hào) 括起來(lái)的語(yǔ)句序列,稱(chēng)為復(fù)合語(yǔ)句,或是分程序。 如: z = x + y; t = z / 100; printf(%f,t); 注意:復(fù)合語(yǔ)句中最后一個(gè)語(yǔ)句最后的分號(hào)不能忽略不寫(xiě)。 C語(yǔ)言允許一行寫(xiě)幾個(gè)語(yǔ)句,也可以一個(gè)語(yǔ)句拆開(kāi)寫(xiě)在幾行上。4.2 賦值語(yǔ)句vC語(yǔ)言的賦值語(yǔ)句具有其他高級(jí)語(yǔ)言賦值語(yǔ)句的一切特點(diǎn)和功能,但也有不同之處: 1、C語(yǔ)言中的賦值號(hào)“=”是一個(gè)運(yùn)算符,而其它大多數(shù)語(yǔ)言中賦值號(hào)“=”不是運(yùn)算符。2、關(guān)于賦值表達(dá)式和賦值語(yǔ)句的概念。其他大多數(shù)高級(jí)語(yǔ)言中沒(méi)有“賦值表達(dá)式”這一概念。作為賦值表達(dá)式可以包括在其他表達(dá)式之中,如: if(a=b)
48、0) t=a;(先賦值,將b的值賦給a;再判斷a是 否0,若0,則執(zhí)行t=a; ) if(a=b;)0) t=a;(不合法:if條件不能包含賦值語(yǔ)句)4.3 數(shù)據(jù)輸入輸出的概念及實(shí)現(xiàn)v所謂輸入輸出是以計(jì)算機(jī)主機(jī)為主體而言的。從計(jì)算機(jī)向外部輸出設(shè)備(顯屏,打印機(jī))輸出數(shù)據(jù)稱(chēng)為“輸出”;從輸入設(shè)備(鍵盤(pán),磁盤(pán))向計(jì)算機(jī)輸入數(shù)據(jù)稱(chēng)為“輸入”。vC語(yǔ)言本身不提供輸入輸出語(yǔ)句,輸入和輸出操作是由函數(shù)來(lái)實(shí)現(xiàn)的。v在C的標(biāo)準(zhǔn)函數(shù)庫(kù)中提供了一些輸入輸出函數(shù),例如,printf函數(shù)和scanf函數(shù)。在使用它們時(shí),千萬(wàn)不要簡(jiǎn)單地認(rèn)為它們是C語(yǔ)言的“輸入輸出語(yǔ)句”。printf和scanf不是C語(yǔ)言的關(guān)鍵字。完全可
49、以不用printf和scanf這兩個(gè)名字,而另外編兩個(gè)函數(shù),另用其它函數(shù)名。 vC提供的函數(shù)以庫(kù)的形式存放在系統(tǒng)中,它們不是C語(yǔ)言文本中的組成部分。因此各函數(shù)的功能和名,在各種不同的計(jì)算機(jī)系統(tǒng)所不同。v有些通用的函數(shù)(如printf和scanf等),各種計(jì)算機(jī)系統(tǒng)都提供,成為各種計(jì)算機(jī)系統(tǒng)的標(biāo)準(zhǔn)函數(shù)(標(biāo)準(zhǔn)輸入輸出庫(kù)的一部分)。在程序編譯連接時(shí),用戶程序與標(biāo)準(zhǔn)文件相連,所以在程序中可以直接使用printf和scanf函數(shù)。 v注意:在源程序中有printf函數(shù),在編譯時(shí)并不把它翻譯成目標(biāo)指令,而是在執(zhí)行階段中調(diào)用已被連接的函數(shù)庫(kù)中的printf函數(shù)。vC語(yǔ)言函數(shù)庫(kù)中有一批“標(biāo)準(zhǔn)輸入輸出函數(shù)”,它
50、是以標(biāo)準(zhǔn)的輸入輸出設(shè)備(一般為終端設(shè)備)為輸入輸出對(duì)象的。其中有: putchar(輸出字符) getchar(輸入字符) printf(格式輸出) scanf(格式輸入) puts(輸出字符串) gets(輸入字符串)v在使用標(biāo)準(zhǔn)I/O庫(kù)函數(shù)時(shí),要用預(yù)編譯命令“#include”將“stdio.h”文件包括到用戶源文件中。即#include “stdio.h”(或#include )。stdio.h是standart input & output的縮寫(xiě),它包括了標(biāo)準(zhǔn)I/O庫(kù)有關(guān)的變量定義和宏定義(有關(guān)預(yù)編譯命令見(jiàn)第九章)。v在需要使用標(biāo)準(zhǔn)I/O庫(kù)中的函數(shù)時(shí),應(yīng)在程序前使用上述預(yù)編譯命令,但在
51、用printf和scanf函數(shù)時(shí),則可以不要(只有printf和scanf例外)。v預(yù)編譯命令“#include”都是放在程序的開(kāi)頭,因此這類(lèi)文件被稱(chēng)為“頭文件”。4.4 字符數(shù)據(jù)輸入輸出函數(shù)v4.4.1 putchar函數(shù)(字符輸出函數(shù))v4.4.2 getchar函數(shù)(字符輸入函數(shù))4.4.1 putchar函數(shù)vputchar函數(shù)的作用是向終端輸出一個(gè)字符。v例如:putchar(c)輸出字符串變量C的值。C可以是字符型變量或整型變量。 v例4.1:#include stdio.hmain()char a,b,c;a=B; b=O; c=Y;putchar(a); putchar(b);
52、 putchar(c);運(yùn)行結(jié)果:BOYv也可以輸出控制字符,如putchar(n)輸出一個(gè)換行符。如果將例4.1程序最后一行改為:putchar(a);putchar(n);putchar(b);putchar(n); putchar(c);putchar(n);則輸出結(jié)果為:BOYv也可以輸出其它轉(zhuǎn)義字符,如:putchar(101) (輸出字符A)putchar() (輸出單引號(hào)字符)putchar(015)(輸出回車(chē),不換行,使輸出的 位置移到本行開(kāi)頭) 4.4.2 getchar函數(shù)v此函數(shù)的作用是從終端(或系統(tǒng)隱含指定的輸入設(shè)備)輸入一個(gè)字符。getchar函數(shù)沒(méi)有參數(shù),其一般形式
53、為:getchar()v函數(shù)的值就是從輸入設(shè)備得到的字符。v例4.2:#include stdio.h main() char c; c=getchar(); putchar(c); 在運(yùn)行時(shí),如果從鍵盤(pán)輸入字aa (輸入a后,按“回車(chē)” 鍵,字符才送到內(nèi)存)a (輸出變量c的值a)v請(qǐng)注意,getchar()只能接收一個(gè)字符。getchar函數(shù)得到的字符可以賦給一個(gè)字符變量或整型變量,也可以不賦給任何變量,作為表達(dá)式的一部分。v例如,例4.2第4、5行可以用下面一行代替:putchar(getchar();v也可以用printf函數(shù):printf(%c,getchar();v在函數(shù)中要用ge
54、tchar函數(shù),應(yīng)該在函數(shù)的前面(或本文件開(kāi)頭)用#include stdio.h”。因?yàn)樵谑褂脴?biāo)準(zhǔn)I/O庫(kù)中的函數(shù)時(shí)需要用到“stdio.h”文件中包含的一些信息。 4.5 格式輸入與輸出v4.5.1 printf函數(shù)(格式輸出函數(shù))v4.5.2 scanf函數(shù)(格式輸入函數(shù))4.5.1 printf函數(shù)v1. printf函數(shù)的一般格式v2. 格式字符printf函數(shù)的一般格式vprintf函數(shù)的作用是:向終端(或系統(tǒng)隱含指定的輸出設(shè)備)輸出若干個(gè)任意類(lèi)型的數(shù)據(jù)。v注意:putchar只能輸出字符,而且只能是一個(gè)字符;而printf可以輸出多個(gè)數(shù)據(jù),且為任意類(lèi)型。v一般格式:printf(
55、格式控制,輸出列表)v如:printf(“%d , %c n” , i,c)格式說(shuō)明:將數(shù)據(jù)轉(zhuǎn)換為指定格式輸出。普通字符:即需要原樣輸出的字符(逗號(hào),空格和換行符)輸出列表:需要輸出的數(shù)據(jù),可以是表達(dá)式。v例:printf(“a=%d_b=%d”,a,b); 雙引號(hào)中的字符除了“%d”和“%d”以外,還有非格式說(shuō)明的普通字符“a=”、“b=”及空格“_”,它們按原樣輸出。若a=3,b=4,則輸出為:a=3_b=4格式字符v對(duì)不同類(lèi)型的數(shù)據(jù)用不同的格式字符。v常用的有以下幾種格式字符: (1) d格式符 (6) s格式符 (2) o格式符 (7) f格式符 (3) x格式符 (8) e格式符 (
56、4) u格式符 (9) g格式符 (5) c格式符 d格式符:輸出十進(jìn)制整數(shù)v%d: 按整型數(shù)據(jù)的實(shí)際長(zhǎng)度 輸出;v%md: 輸出m位(指定的輸出字段寬度); (數(shù)據(jù)位數(shù)小于m位時(shí)左端補(bǔ)空格,大于m位時(shí)按實(shí)際長(zhǎng)度輸出); v%ld,%mld:l表示輸出“長(zhǎng)整型”數(shù)據(jù),也可以指定輸出字段寬度;v一個(gè)int型數(shù)據(jù)可以用%d或%ld格式輸出; v注:%后面的m(位數(shù)控制) 對(duì)于其它格式符也適用。例、(表示空格)int i = 123; long j = 123456; printf(%d,%5d,%ld, %8ld ,i ,i , j, j); 輸出:123, 123,123456, 123456c
57、格式符:輸出一個(gè)字符v一個(gè)整數(shù),只要它的值在0255之間,也可以用字符形式輸出。在輸出前,系統(tǒng)會(huì)將該整數(shù)作為ASCII碼轉(zhuǎn)換成相應(yīng)的字符;反之,字符數(shù)據(jù)也可以用整數(shù)形式輸出。 例例:4.4 main() char c=a; int i=97; printf(%c,%dn,c,c); printf(%c,%dn,i,i); 可以指定輸出字段寬度:printf(“%3c”,c);則輸出:_a 輸出: a,97 a,97 s格式符:輸出一個(gè)字符串(1)%s:原樣輸出字符串;如:printf(“%s”,“CHINA”)輸出:CHINA(2)%ms:輸出字符串占m列;m全輸出m左補(bǔ)空格;(3)%-ms:
58、輸出字符串占m列;m,則m自動(dòng)取n值,即保證n個(gè)字符正常輸出。例例 4.5main() printf(%3s,%7.2s,%.4s,%-5.3sn,CHINA,CHINA,CHINA,CHINA);輸出: CHINA, CH,CHIN,CHI m自動(dòng)取n值,即等價(jià)于:4.4sf格式符:以小數(shù)形式輸出實(shí)數(shù)(單/雙精度)(1)%f:由系統(tǒng)自動(dòng)指定字段寬度,使整數(shù)部分全部輸出,并輸出6位小數(shù)。(2)%m.nf:指定輸出的數(shù)據(jù)共占m列,其中由n位小數(shù)。若數(shù)值長(zhǎng)度m,則左端補(bǔ)空格。(3)%-m.nf:同%m.nf,只是輸出的數(shù)值向左端靠,右端補(bǔ)空格。 注意:并非全部數(shù)字都是有效數(shù)字。 單精度實(shí)數(shù)的有效位
59、數(shù)一般為7位,而雙精度實(shí)數(shù)的有效位數(shù)一般為16位(小數(shù)6位)。v例4.6main()float x,y; x=111111.111;y=222222.222; printf(“%f”,x+y);運(yùn)行結(jié)果為:333333.328125顯然,只有前7位數(shù)字是有效數(shù)字。v例4.7main()double x,y; x=1111111111111.111111111; y=2222222222222.222222222; printf(“%f”,x+y);運(yùn)行結(jié)果為:3333333333333.333010可以看到,最后3位小數(shù)(超過(guò)16位)是無(wú)意義的。例例: 4.8main() float f=12
60、3.456; printf(%f %10f %10.2f %.2f %-10.2fn,f,f,f,f,f); 輸出: 123.455994 123.455994 123.46 123.46 123.46 按原樣輸出的字符由于格式定義而輸出的字符4.5.2 scanf函數(shù)vgetchar函數(shù)只能用來(lái)輸入一個(gè)字符,用scanf函數(shù)可以用來(lái)輸入任何類(lèi)型的多個(gè)數(shù)據(jù)。v在前面已初步接觸到了scanf函數(shù),在本節(jié)中再作詳細(xì)介紹。 1. 一般形式 2. 格式說(shuō)明 3. 使用scanf函數(shù)時(shí)應(yīng)注意的問(wèn)題一般形式vscanf(格式控制,地址表列)v“格式控制”含義同printf函數(shù)?!暗刂繁砹小笔怯扇舾蓚€(gè)地址組
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 云計(jì)算資源共享平臺(tái)服務(wù)合同
- 綠色能源開(kāi)發(fā)與儲(chǔ)備合作協(xié)議
- 黑龍江省齊齊哈爾市2025屆高考一模地理試卷(含答案)
- 鋼管買(mǎi)賣(mài)合同協(xié)議書(shū)
- 企業(yè)人力資源信息統(tǒng)計(jì)表
- 登鸛雀樓探究及其意境體驗(yàn):小學(xué)語(yǔ)文古詩(shī)教學(xué)教案
- 投資合同協(xié)議
- 《初中物理力學(xué)與電磁學(xué)探究活動(dòng)》
- 中學(xué)生物理知識(shí)解讀的感悟
- 環(huán)境科學(xué)氣候變化與環(huán)境治理案例分析題集
- 智能建造施工技術(shù) 課件全套 王春林 項(xiàng)目1-11 智能建造施工概論- 外墻保溫與建筑施工碳排放計(jì)算
- 全國(guó)職業(yè)院校技能大賽高職組(法律實(shí)務(wù)賽項(xiàng))考試題及答案
- 幼兒園中班社會(huì)禮儀《讓一讓》課件
- 壓力與焦慮高中生心理健康教案
- 小學(xué)生衛(wèi)生知識(shí)健康教育精課件
- 完整廣東梅大高速路面塌方災(zāi)害學(xué)習(xí)課件
- 超豎井施工安全技術(shù)規(guī)范
- DL∕T 2609-2023 主動(dòng)干預(yù)型消弧裝置驗(yàn)收運(yùn)維規(guī)范
- 【正版授權(quán)】 ISO 724:2023 EN ISO general purpose metric screw threads - Basic dimensions
- 2024年河南省鄭州市中原區(qū)小升初數(shù)學(xué)試卷
- 基于街區(qū)尺度的精細(xì)化大氣污染溯源模型建設(shè)需求
評(píng)論
0/150
提交評(píng)論