全書配套課件:C語言程序設(shè)計(jì)_第1頁
全書配套課件:C語言程序設(shè)計(jì)_第2頁
全書配套課件:C語言程序設(shè)計(jì)_第3頁
全書配套課件:C語言程序設(shè)計(jì)_第4頁
全書配套課件:C語言程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩1032頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 C C語言的發(fā)展及主要特點(diǎn)語言的發(fā)展及主要特點(diǎn)1.1 C C程序設(shè)計(jì)相關(guān)知識(shí)程序設(shè)計(jì)相關(guān)知識(shí)1.2 C C語言上機(jī)過程語言上機(jī)過程1.3 教學(xué)目標(biāo) 了解C語言的發(fā)展及主要特點(diǎn); 掌握C語言的結(jié)構(gòu); 熟練掌握C語言的運(yùn)行及其運(yùn)行環(huán)境Turbo C的使用。1.1 C語言的發(fā)展及主要特點(diǎn) 1.1.1 C語言的發(fā)展史 1963年 將ALGOL60發(fā)展成PCL 1967年將CPL改寫成BCPL; 1970年將BCPL修改成B語言 1972年將B語言改成了C語言。 1987年,Borland公司首次推出了Turbo C 1.0, 1988年,ANSI公布了標(biāo)準(zhǔn)ANSI C。 1.1.2 C語言的主要特點(diǎn)

2、 (1)C語言基本組成部分緊湊簡潔。 (2)C語言運(yùn)算符豐富,表達(dá)能力強(qiáng)。 (3)C語言數(shù)據(jù)結(jié)構(gòu)豐富,結(jié)構(gòu)化好。 (4)C語言具有結(jié)構(gòu)化的控制語句。 (5)C語言提供了某些接近匯編語言的功能,有利于編寫系統(tǒng)軟件。 (6)C語言程序所生成的目標(biāo)代碼質(zhì)量高。(7)C語言程序可移植性好。1.2 C程序設(shè)計(jì)相關(guān)知識(shí) 1.2.1 程序設(shè)計(jì)的基本概念 1計(jì)算機(jī)語言和程序 計(jì)算機(jī)語言分成機(jī)器語言、匯編語言和高級(jí)語言三大類。 機(jī)器語言:計(jì)算機(jī)能直接識(shí)別的語言,由0和1構(gòu)成的代碼。非常難于記憶和識(shí)別。 匯編語言:直接對(duì)硬件操作,助記符,更容易識(shí)別和記憶,執(zhí)行速度快。冗長、復(fù)雜,容易出錯(cuò),需要有計(jì)算機(jī)專業(yè)知識(shí)。

3、高級(jí)語言:不能直接被計(jì)算機(jī)識(shí)別,經(jīng)過轉(zhuǎn)換才能被執(zhí)行。 按轉(zhuǎn)換方式分為兩類: 解釋類:執(zhí)行一條解釋一條。效率比較低,不能生成可獨(dú)立執(zhí)行文件,方式比較靈活。 編譯類:編譯是指在應(yīng)用源程序執(zhí)行之前,就將程序源代碼“翻譯”成目標(biāo)代碼(機(jī)器語言),使用比較方便,效率較高。修改很不方便。 2算法和算法設(shè)計(jì) 所謂算法,是指為解決某一特定的問題,所給出的一系列確切的、有限的操作步驟。 3程序設(shè)計(jì) 程序設(shè)計(jì)一般按以下步驟進(jìn)行。 (1)確定數(shù)據(jù)結(jié)構(gòu) (2)確定算法 (3)編程 (4)調(diào)試 (5)整理源程序并總結(jié)資料。 1.2.2 C程序結(jié)構(gòu) 1C語言程序的結(jié)構(gòu)特點(diǎn) (1)C語言程序是由函數(shù)構(gòu)成的,一個(gè)源程序可以包

4、含若干個(gè)函數(shù),但必須有且只有一個(gè)函數(shù)為主函數(shù)main()。 (2)由大括號(hào)括起來的部分為函數(shù)體,函數(shù)體可以包含若干條C語言。每條語句必須以分號(hào)“;”結(jié)束。 (3)C語言一般用小寫字母書寫。 (4)程序可以加注釋以增加可讀性,其內(nèi)容必須用/*/。 (5) 除主函數(shù)外,C語言系統(tǒng)還提供一些可直接使用的庫函數(shù),例如printf(),scanf()等。用戶也可以根據(jù)需要,自己定義函數(shù)。 C程序的結(jié)構(gòu)形式如下: C程序=預(yù)編譯命令+外部定義+C函數(shù)1+C函 數(shù)2+C函數(shù)n C函數(shù)=類型 函數(shù)名(參數(shù)表) 參數(shù)說明 說明部分 C語句 2C語句格式分類 C語句按形式可分為如下3種。 (1)單語句: 即一條可

5、執(zhí)行語句,以分號(hào)“;”結(jié)束。 例如:i-; (2)復(fù)合語句(也稱為分程序): 整體上用一對(duì)花括號(hào)括起來,語法等效于一個(gè)單語句。 其一般形式為 說明語句 語句1 語句n 例如: int x=100; x-; printf(&dn, x): (3)空語句: 只有一個(gè)分號(hào)的語句,無語句內(nèi)容。 例如: ; 3C語句構(gòu)造分類 C語句按構(gòu)造可分為如下兩種。 (1)表達(dá)式語句: 由表達(dá)式加分號(hào)“;”構(gòu)成。 例如: x=100; (2)控制語句: 既可以是單語句,也可以是復(fù)合語句,主要有以下幾種。 If else for while do while continue break switch goto re

6、turn 這些語句的作用是控制C程序的流程,即決定C語句的執(zhí)行順序。 通過下面的例子可以了解C語言的基本程序結(jié)構(gòu)。 【例1-1】簡單的C語言程序。 main() /*主函數(shù)*/ int x, y, s; /*定義變量*/ x=3:b=7:s=(x+y)/2; /*賦值語句*/ printf(s=%d, s): /*輸出語句*/ 運(yùn)行結(jié)果為 s=5 【例1-2】一個(gè)復(fù)雜的C程序。 #include /*inclue為文件包含命令*/ #include main() /*主函數(shù)*/ double a, b; /*定義變量*/ printf(input number :); /*輸入字符串“inpu

7、t number :”*/ scanf(%lf, & a); /*輸入變量a的值*/ b=sqrt( a ); /*求a的平方根,并把它賦給變量b*/ printf(sqrt of %lf is %lf n, a , b); /*顯示程序運(yùn)算結(jié)果*/ 這個(gè)程序的功能是求從鍵盤上輸入一個(gè)數(shù)的a(a不能小于0)的平方根值,然后輸出結(jié)果。 運(yùn)行結(jié)果為 input number :4 sqrt of 4.00000 is 2.0000 1.2.3 標(biāo)準(zhǔn)庫簡介 標(biāo)準(zhǔn)庫函數(shù)提供了用戶與操作系統(tǒng)之間的接口。 例:#include 函數(shù)printf()就是在stdio.h中說明的一個(gè)庫函數(shù)。 編譯時(shí),當(dāng)遇到一

8、個(gè)不是用戶定義的函數(shù)時(shí),編譯器就到頭文件中去查找,如果找到了,連接時(shí)就將該函數(shù)對(duì)應(yīng)庫中的代碼段加到調(diào)用它的函數(shù)中,形成可執(zhí)行文件。1.3 C語言上機(jī)過程 源程序(.C)編譯目標(biāo)程序(.OBJ)連接可以執(zhí)行程序(.EXE)。 開發(fā)一個(gè)C程序要經(jīng)過編輯、編譯、連接和運(yùn)行4個(gè)步驟。 1編輯 編輯是指C語言源程序的輸入和修改。 2編譯 源程序翻譯成可重定位的二進(jìn)制的目標(biāo)程序。 3連接 目標(biāo)程序和程序中用到的庫函數(shù)連接裝配在一起,形成可執(zhí)行的目標(biāo)程序。 4運(yùn)行 連接后生成的可執(zhí)行文件裝入內(nèi)存即可以運(yùn)行,并輸出運(yùn)行結(jié)果。 如果在運(yùn)行程序的過程中得不到預(yù)期的結(jié)果,就要重復(fù)進(jìn)行編輯、編譯、連接和運(yùn)行 4個(gè)步驟

9、。 1.3.1 Turbo C集成環(huán)境的使用 1.3.2 程序調(diào)試方法 1設(shè)置和使用觀察變量 2單步執(zhí)行程序 3設(shè)置和使用斷點(diǎn) 設(shè)置斷點(diǎn)的步驟如下。 (1)在編輯窗口將光標(biāo)移到欲設(shè)置斷點(diǎn)一行上。 (2)選擇“Break/Watch”“Toggle breakpoint”命令或按Ctrl+F8組合鍵,被設(shè)置斷點(diǎn)的一行呈高亮度顯示。 (3)要設(shè)多個(gè)斷點(diǎn),可以重復(fù)步驟(1)、(2),斷點(diǎn)所在的行均呈高亮度顯示。 (4)如果要?jiǎng)h除斷點(diǎn),將光標(biāo)移到欲刪除斷點(diǎn)所在行,選擇“Break/Watch”“Toggle breakpoint”命令或按Ctrl+F8組合鍵即可。 標(biāo)識(shí)符、常量和變量標(biāo)識(shí)符、常量和變量

10、2.1簡單數(shù)據(jù)類型簡單數(shù)據(jù)類型2.2運(yùn)算符和表達(dá)式運(yùn)算符和表達(dá)式2.3案案 例例 分分 析析2.4 教學(xué)目標(biāo) 掌握C語言的各種數(shù)據(jù)類型; 掌握常量、變量的定義; 掌握運(yùn)算符及其各種運(yùn)算,學(xué)會(huì)構(gòu)建各種C語言表達(dá)式; 理解運(yùn)算符及表達(dá)式的含義。2.1 標(biāo)識(shí)符、常量和變量 2.1.1 標(biāo)識(shí)符 標(biāo)識(shí)符可用作變量名、符號(hào)名、函數(shù)名和數(shù)組名、文件名以及一些具有專門含義的名字。 組成:字母、數(shù)字和下劃線。 合法的:pear,PI,sum,a_array,s2,P10 非法的標(biāo)識(shí)符:365t,cade-y,www.,a&b 說明: 1、C語言中是區(qū)分大小寫; 2、一般的計(jì)算機(jī)系統(tǒng)標(biāo)識(shí)符的長度8個(gè)字符有效。 3

11、、不能和用戶已編制的函數(shù)或C語言庫函數(shù)同名。 C語言的標(biāo)識(shí)符可以分為以下3類。 1關(guān)鍵字 2預(yù)定義標(biāo)識(shí)符 3用戶標(biāo)識(shí)符 2.1.2 常量和變量 1常量常常量量類類型型整型整型實(shí)型實(shí)型 字符行字符行 字符串字符串 符號(hào)符號(hào) 【例2-1】計(jì)算圓面積。 #include stdio.h #define PI 3.14159 /*定義符號(hào)名PI為3.14159*/ main() float r, s; r=5.0; s=PI*r*r; printf(s=%fn, s); 運(yùn)行結(jié)果為 s=78.539749 2變量 變量:其值可以改變的量。 變量名:以字母或下劃線開頭,由數(shù)字、字母、下劃線構(gòu)成。最多8個(gè)

12、字符 變量先定義、后使用,這樣做的目的如下: (1)凡是未被事先定義的,不作為變量名,這就能保證程序中變量名使用得正確。 (2)每一個(gè)變量被指定為一確定類型,在編譯時(shí)就能為其分配相應(yīng)的存儲(chǔ)單元。 (3)每一變量屬于一個(gè)類型,便于在編譯時(shí)據(jù)此檢查該變量所進(jìn)行的運(yùn)算是否合法。2.2 簡單數(shù)據(jù)類型 2.2.1 整型數(shù)據(jù) 1整型常量 在C語言中,整型常量可以用十進(jìn)制、八進(jìn)制和十六進(jìn)制形式來表示。 (1)十進(jìn)制整數(shù)。 (2)八進(jìn)制整數(shù)(數(shù)字0開頭)。例如,010,011,016。 (3)十六進(jìn)制整數(shù)。(數(shù)字0 x或大寫字母X開頭)。例如,0 x10,0 xde,0 xf。 2整型變量 (1)整型變量的分

13、類。 類型說明符類型說明符數(shù)數(shù) 的的 范范 圍圍分配字節(jié)數(shù)分配字節(jié)數(shù)intint327683276832767327672 2short intshort int327683276832767327672 2signed intsigned int327683276832767327672 2unsigned intunsigned int0 065535655352 2long intlong int21474836482147483648214748364721474836474 4unsigned longunsigned long0 0429496729542949672954 4表表

14、2-12-1 C C語言中整型量的內(nèi)存字節(jié)數(shù)及表示范圍語言中整型量的內(nèi)存字節(jié)數(shù)及表示范圍 (2)整型變量的定義。 int a, b;/*指定變量a,b為整型*/ 【例2-2】整型變量示例。 main() int a, b, c, d;/*指定a, b, c, d為整型變量*/ unsigned u;/*指定u為無符號(hào)整型變量*/ a=12; b=24; u=10; c=a+u; d=b+u; printf(a+u=%d, b+u=%dn, c, d); 運(yùn)行結(jié)果為 a+u=22, b+u=14 2.2.2 實(shí)型數(shù)據(jù) 1實(shí)型常量 (1)十進(jìn)制數(shù)形式。 (2)指數(shù)形式: 2.3026可以表示為0.

15、2306E1,2.3026e0,23.026e1。字母e(或E)之前必須要有數(shù)字,且e或E后面的指數(shù)必須為整數(shù),在字母的前后以及數(shù)字之間不得插入空格。 2實(shí)型變量 float a, b, c;/*a,b,c為單精度實(shí)型量,4個(gè)字節(jié),10381038,7位有效位*/ double x, y, z;/*x,y,z為雙精度實(shí)型量,8個(gè)字節(jié),1030810308,1516位有效位*/ 2.2.3 字符型數(shù)據(jù) 1字符常量 字符是按其所對(duì)應(yīng)的ASCII值來存儲(chǔ)的,一個(gè)字符占一個(gè)字節(jié)。例如,字符ASCII值(十進(jìn)制)A為65,B為66,a為97,b為98。 字符常量是指用一對(duì)單引號(hào)括起來的一個(gè)字符,如a,8

16、,!。 a32;/*執(zhí)行結(jié)果9732=65*/ A+32;/*執(zhí)行結(jié)果65+32=97*/ 99;/*執(zhí)行結(jié)果579=48*/ “轉(zhuǎn)義字符”:是將反斜杠()后面的字符轉(zhuǎn)變成其他意義。 字字 符符 形形 式式功功 能能字字 符符 形形 式式功功 能能nn換行換行ff走紙換頁走紙換頁tt橫向跳格(即跳到下一橫向跳格(即跳到下一個(gè)輸出區(qū))個(gè)輸出區(qū))反斜杠字符反斜杠字符“ ”vv豎向跳格豎向跳格單引號(hào)(撇號(hào))字符單引號(hào)(撇號(hào))字符bb退格退格dddddd1 13 3位八進(jìn)制數(shù)所代表位八進(jìn)制數(shù)所代表的字符的字符rr回車回車xhhxhh1 12 2位十六進(jìn)制數(shù)所代位十六進(jìn)制數(shù)所代表的字符表的字符表表2-2

17、2-2 C C語言中常用的轉(zhuǎn)義字符語言中常用的轉(zhuǎn)義字符 2字符串常量 字符串常量是一對(duì)雙引號(hào)括起來的字符序列。例如: How are you?,TOM,¥23.45 a和a究竟有什么區(qū)別:a是字符常量,a是字符串常量。0字符是系統(tǒng)自動(dòng)加上的。 “a” a0a a a00a a 3字符變量 形式如下: char c1, c2; 它表示c1和c2為字符變量,各放一個(gè)字符。因此可以用下面的語句對(duì)c1,c2賦值: c1=a; c2=b; 【例2-3】字符變量示例1。 main() char c1, c2; c1=97; c2=98; printf(%c, %c, c1, c2); 運(yùn)行結(jié)果為 a, b

18、 【例2-4】字符變量示例2。 main() char c1, c2; c1=a; c2=b; c1=c132; c2=c232; printf(%c%c, c1, c2); 運(yùn)行結(jié)果為 A B 它的作用是將兩個(gè)小寫字母轉(zhuǎn)換為大寫字母。a的ASCII值為97,而A的ASCII值為65,b的ASCII值為98,B的ASCII值為66。從ASCII表中可以看到每一個(gè)小寫字母比大寫字母的ASCII值大32,即a=A+32。2.3 運(yùn)算符和表達(dá)式 2.3.1 算術(shù)運(yùn)算符及其表達(dá)式 1基本的算術(shù)運(yùn)算符 +、*、/、% 說明: (1)雙目運(yùn)算符兩邊運(yùn)算數(shù)的類型必須一致才能進(jìn)行操作。所得結(jié)果的類型與運(yùn)算數(shù)的

19、類型一致。例如1.0/2.0,其運(yùn)算結(jié)果為0.5;1/2,其運(yùn)算結(jié)果為0。 (2)如果雙目運(yùn)算符兩邊運(yùn)算數(shù)的類型不一致,如一邊是整型數(shù),一邊是實(shí)型數(shù)時(shí),系統(tǒng)將自動(dòng)把整型轉(zhuǎn)換為實(shí)型數(shù),使運(yùn)算符兩邊的類型達(dá)到一致后,再進(jìn)行運(yùn)算。 (3)在C語言中,所有實(shí)型數(shù)的運(yùn)算均以雙精度方式進(jìn)行。若是單精度數(shù),則在尾數(shù)部分補(bǔ)0,使之轉(zhuǎn)化為雙精度數(shù)。 2運(yùn)算符的優(yōu)先級(jí)、結(jié)合性和算術(shù)表達(dá)式 (1)算術(shù)運(yùn)算符的優(yōu)先級(jí)。 ()、+(單目)、(單目)、*、/、%、+、 (2)算術(shù)運(yùn)算符和圓括號(hào)的結(jié)合性。 以上所列的運(yùn)算符中,只有單目運(yùn)算符“”和“+”的結(jié)合性是從右到左,其余運(yùn)算符的結(jié)合性都是從左到右。 (3)算術(shù)表達(dá)式。

20、 用算術(shù)運(yùn)算符和一對(duì)圓括號(hào)將運(yùn)算量(或稱操作數(shù))連接起來的,符合C語法的表達(dá)式稱為算術(shù)表達(dá)式。 在計(jì)算機(jī)語言中,算術(shù)表達(dá)式求值規(guī)律與數(shù)學(xué)中的四則運(yùn)算的規(guī)律類似,其運(yùn)算規(guī)則和要求如下。 在算術(shù)表達(dá)式中,可使用多層圓括號(hào),但左右括號(hào)必須配對(duì)。運(yùn)算時(shí)從內(nèi)層圓括號(hào)開始,由內(nèi)向外依次計(jì)算表達(dá)式的值。 在算術(shù)表達(dá)式中,若包含不同優(yōu)先級(jí)的運(yùn)算符,則按運(yùn)算符的優(yōu)先級(jí)別由高到低進(jìn)行,若表達(dá)式中運(yùn)算符的級(jí)別相同,則按運(yùn)算符的結(jié)合方向進(jìn)行。例如表達(dá)式a+bc,因?yàn)榧犹?hào)和減號(hào)的優(yōu)先級(jí)相同,它們的結(jié)合性為從左到右,因此先計(jì)算a+b,然后把所得結(jié)果減去c。 2.3.2 自加、自減運(yùn)算符 1自加運(yùn)算符(+)和自減運(yùn)算符()

21、i+, + i 相當(dāng)于i=i+1;i,-i相當(dāng)于i=i1。 +i和i是在使用i之前,先使i的值加1或減1;而i+和i則是在使用i之后,使i的值加1或減1。 j=+i; j的值為6 j=i+; j的值為5,然后i變?yōu)?。 2+和在表達(dá)式中使用說明 (1)n=(m+)+(m+)+(m+)先對(duì)m進(jìn)行相加,然后m三次自加 q=(+p)+(+p)+(+p)先對(duì)p進(jìn)行三次自加,然后相加 (2)單目運(yùn)算右結(jié)合性 s=q+p: 即s=(q+)+p,q運(yùn)行后加1 2.3.3 賦值運(yùn)算符與賦值表達(dá)式 1簡單賦值運(yùn)算符和表達(dá)式 x=10/*將10賦給變量x*/ y=3*x+5*a/*將表達(dá)式之值賦給變量y*/ a=

22、b=c=5 等價(jià) a=(b=(c=5) x=y=3*z/w 型換成左邊的類型。具體規(guī)定如下。 (1)實(shí)型賦予整型: 舍去小數(shù)部分。 (2)整型賦予實(shí)型: 數(shù)值不變,但將以浮點(diǎn)形式存放,即增加小數(shù)部分(小數(shù)部分的值為0)。 (3)字符型賦予整型: 由于字符型為一個(gè)字節(jié),而整型為兩個(gè)字節(jié),故將字符的ASCII值放到整型量的低8位中,高8位為0。 (4)整型賦予字符型: 只把低8位賦予字符量。 賦值運(yùn)算符優(yōu)先級(jí)低于算術(shù)運(yùn)算符、關(guān)系運(yùn)算符和邏輯運(yùn)算符,例如: x=6y 先求關(guān)系表達(dá)式6y的值0或1,再將其值賦給變量x。 2復(fù)合賦值運(yùn)算符 復(fù)合的運(yùn)算符:在賦值符“=”之前加上其他運(yùn)算符。C有10種。 它

23、們是: +=、=、*=、/=、%=(與算術(shù)運(yùn)算符組合) =(與位移運(yùn)算符組合) &=、=、|=(與位邏輯運(yùn)算符組合) 例如: x+=a+y*3 等價(jià)于 x=x+(a+y*3) 若a的初值為12,則a+=a=a*a 的求解步驟是怎樣的呢?其求解過程如下。 (1)先進(jìn)行a=a*a的運(yùn)算,它相當(dāng)于a=aa*a=12144=132。 (2)再進(jìn)行a+=132的運(yùn)算,它相當(dāng)于a=a+(132)= 132132=264。 2.3.4 關(guān)系運(yùn)算符和邏輯運(yùn)算符 關(guān)系運(yùn)算符是比較兩個(gè)操作數(shù)大小的符號(hào)。邏輯運(yùn)算符是對(duì)邏輯量進(jìn)行操作的運(yùn)算符。使用關(guān)系或邏輯運(yùn)算符的表達(dá)式結(jié)果只有“真”和“假”,它們分別用“1或非0”

24、和“0”表示。 1邏輯運(yùn)算符 操作符操作符作用作用操作符操作符作用作用&邏輯與邏輯與!邏輯非邏輯非|邏輯或邏輯或表表2-32-3邏輯運(yùn)算符邏輯運(yùn)算符 2關(guān)系運(yùn)算符操作符操作符作用作用操作符操作符作用作用大于大于= =小于等于小于等于= =大于等于大于等于=等于等于小于小于!= =不等于不等于表表2-42-4關(guān)系運(yùn)算符關(guān)系運(yùn)算符 2.3.5問號(hào)運(yùn)算符及表達(dá)式 是三元運(yùn)算符,其一般形式為 e1? e2 :e3 規(guī)則是:當(dāng)表達(dá)式e1的值為“真”時(shí),結(jié)果取e2的值;否則,結(jié)果取e3的值。注意冒號(hào)的用法和位置。例如: x=10; y=x9?100:200; 例中,賦給y的數(shù)值是100,如果x被賦給比9小

25、的值,y的值將為200 2.3.6 不同類型數(shù)據(jù)間的轉(zhuǎn)換 強(qiáng)制類型轉(zhuǎn)換表達(dá)式的形式如下: (類型名) (表達(dá)式) 例如: (int)3.234 把3.234轉(zhuǎn)換成整數(shù)3。 【例2-5】強(qiáng)制類型轉(zhuǎn)換示例。 main() char c1, c2; c1=a; c2=b; c1=c132; c2=c232; printf(%c%c, c1, c2); 運(yùn)行結(jié)果為 x=3.140000, i=3 x類型仍為float型,值仍等于3.14。 2.3.7 逗號(hào)運(yùn)算符及其表達(dá)式 形式為 表達(dá)式1, 表達(dá)式2, , 表達(dá)式n 它按從左到右的順序執(zhí)行組成逗號(hào)表達(dá)式的各表達(dá)式,而將最后一個(gè)表達(dá)式(即表達(dá)式 n)的

26、值作為逗號(hào)表達(dá)式的值。 【例2-6】逗號(hào)運(yùn)算符示例。 main() int x, y; x=50; y=(x=x5, x/5); printf(x=%d, y=%d, x, y); 運(yùn)行結(jié)果為 x=45, y=9 說明: (1)逗號(hào)運(yùn)算符的結(jié)合性為從左到右,例如(i=5, i+, +i, i+5),這個(gè)逗號(hào)表達(dá)式的值是12,i的值為7。 (2)在所有運(yùn)算符中,逗號(hào)運(yùn)算符的優(yōu)先級(jí)別最低。 因此,下面兩個(gè)表達(dá)式的作用是不同的: x=(a=3, 6*3) x=a=3, 6*a printf(%d, %d, %d, (a, b, c), b, c); 2.3.8 運(yùn)算符的優(yōu)先順序 優(yōu)先級(jí)優(yōu)先級(jí)運(yùn)算符運(yùn)

27、算符名稱或含義名稱或含義使使 用用 形形 式式結(jié)結(jié) 合合 方方 向向說明說明1 1()()圓括號(hào)圓括號(hào)(表達(dá)式)(表達(dá)式)/ /函數(shù)名(形函數(shù)名(形參表)參表)左到右左到右負(fù)號(hào)運(yùn)算符負(fù)號(hào)運(yùn)算符表達(dá)式表達(dá)式右到左右到左單目運(yùn)算符單目運(yùn)算符+自增運(yùn)算符自增運(yùn)算符+變量名變量名/ /變量名變量名+單目運(yùn)算符單目運(yùn)算符 自減運(yùn)算符自減運(yùn)算符 變量名變量名/ /變量名變量名 單目運(yùn)算符單目運(yùn)算符* *取值運(yùn)算符取值運(yùn)算符* *指針變量指針變量單目運(yùn)算符單目運(yùn)算符!邏輯非運(yùn)算符邏輯非運(yùn)算符!表達(dá)式!表達(dá)式單目運(yùn)算符單目運(yùn)算符按位取反運(yùn)算按位取反運(yùn)算符符表達(dá)式表達(dá)式單目運(yùn)算符單目運(yùn)算符表表2-5 2-5 常

28、用運(yùn)算符優(yōu)先順序常用運(yùn)算符優(yōu)先順序 優(yōu)先級(jí)優(yōu)先級(jí)運(yùn)算符運(yùn)算符名稱或含義名稱或含義使使 用用 形形 式式結(jié)結(jié) 合合 方方 向向說明說明/ /除除表達(dá)式表達(dá)式/ /表達(dá)式表達(dá)式左到右左到右雙目運(yùn)算符雙目運(yùn)算符* *乘乘表達(dá)式表達(dá)式* *表達(dá)式表達(dá)式雙目運(yùn)算符雙目運(yùn)算符% %余數(shù)(取模)余數(shù)(取模)整型表達(dá)式整型表達(dá)式/ /整型表達(dá)式整型表達(dá)式雙目運(yùn)算符雙目運(yùn)算符+ +加加表達(dá)式表達(dá)式+ +表達(dá)式表達(dá)式左到右左到右雙目運(yùn)算符雙目運(yùn)算符減減表達(dá)式表達(dá)式表達(dá)式表達(dá)式雙目運(yùn)算符雙目運(yùn)算符大于大于表達(dá)式表達(dá)式表達(dá)式表達(dá)式左到右左到右雙目運(yùn)算符雙目運(yùn)算符= =大于等于大于等于表達(dá)式表達(dá)式= =表達(dá)式表達(dá)式雙目

29、運(yùn)算符雙目運(yùn)算符小于小于表達(dá)式表達(dá)式表達(dá)式表達(dá)式雙目運(yùn)算符雙目運(yùn)算符= =小于等于小于等于表達(dá)式表達(dá)式= =表達(dá)式表達(dá)式雙目運(yùn)算符雙目運(yùn)算符續(xù)表續(xù)表 =等于等于表達(dá)式表達(dá)式=表達(dá)式表達(dá)式左到右左到右雙目運(yùn)算符雙目運(yùn)算符!= =不等于不等于表達(dá)式!表達(dá)式!= = 表達(dá)式表達(dá)式雙目運(yùn)算符雙目運(yùn)算符7 7& &按位與按位與表達(dá)式表達(dá)式& &表達(dá)式表達(dá)式左到右左到右雙目運(yùn)算符雙目運(yùn)算符8 8 按位異或按位異或表達(dá)式表達(dá)式 表達(dá)式表達(dá)式左到右左到右雙目運(yùn)算符雙目運(yùn)算符9 9| |按位或按位或表達(dá)式表達(dá)式| |表達(dá)式表達(dá)式左到右左到右雙目運(yùn)算符雙目運(yùn)算符1010&邏輯與邏輯與表達(dá)式表達(dá)式&表達(dá)式表達(dá)式左到

30、右左到右雙目運(yùn)算符雙目運(yùn)算符1111|邏輯或邏輯或表達(dá)式表達(dá)式|表達(dá)式表達(dá)式左到右左到右雙目運(yùn)算符雙目運(yùn)算符1212?:?:條件運(yùn)算符條件運(yùn)算符表達(dá)式表達(dá)式1 1?表達(dá)式?表達(dá)式2 2:表達(dá):表達(dá)式式3 3右到左右到左三目運(yùn)算符三目運(yùn)算符1313,逗號(hào)運(yùn)算符逗號(hào)運(yùn)算符表達(dá)式表達(dá)式, , 表達(dá)式表達(dá)式, , 左到右左到右續(xù)表續(xù)表2.4 案 例 分 析 【案例1】若給出以下程序和,判斷它們的輸出為 。 #include main() int a=4, b=7; printf(%dn, (a=a+1, b+a, b+1); #include main() int a=1, b=2; printf(%

31、dn, a=a+1, a+b, b+1); A輸出5 B輸出8 輸出2 輸出2 C輸出5 中printf函數(shù)調(diào)用語句的輸出項(xiàng)包含了a=a+1形式,不合法 D中printf函數(shù)調(diào)用語句的格式描述符不夠,輸出無定值 輸出2 分析:通過本例,讀者應(yīng)當(dāng)弄清C語言中逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式的特點(diǎn)。 在C語言中,允許用逗號(hào)運(yùn)算符把兩個(gè)或多個(gè)表達(dá)式連接起來形成一個(gè)逗號(hào)表達(dá)式,表達(dá)式的求值順序是自左至右,并以最右邊表達(dá)式的結(jié)果作為整個(gè)逗號(hào)表達(dá)式的結(jié)果。需要注意的是,并非在C程序中任何地方出現(xiàn)的逗號(hào)都是作為逗號(hào)運(yùn)算符。 例如,本題程序1中的printf語句的輸出項(xiàng)(a=a+1, b+a, b+1)是一個(gè)逗號(hào)表達(dá)式

32、,它的值應(yīng)當(dāng)?shù)扔谧詈笠粋€(gè)表達(dá)式b+1的結(jié)果,即等于8。而程序中printf語句的輸出項(xiàng)a=a+1, a+b, b+1不是逗號(hào)表達(dá)式,而是以逗號(hào)分隔的3個(gè)表達(dá)式,其中第一個(gè)表達(dá)式a=a+1稱做賦值表達(dá)式。 由于本語句中只給出了一個(gè)格式描述符%d,因此只能輸出第一個(gè)表達(dá)式a=a+1的值,即輸出2。 由以上分析可知,本題的正確答案為B。 【案例2】已知字母a的ASCII十進(jìn)制代碼為97,則執(zhí)行以下語句后的輸出為 。 char a=a; a-; printf(%d, %cn, a+20, a+3 0); Ab, c Ba-運(yùn)算不合法,故有語法錯(cuò) C98,c D格式描述和輸出項(xiàng)不匹配,輸出無定值 分析:

33、C語言規(guī)定,所有字符常量都可以作為整型常量來處理,因而字符常量也可參與算術(shù)運(yùn)算。本題中字符變量a的初值為字符a,其對(duì)應(yīng)的整數(shù)值就是a的ASCII十進(jìn)制代碼97。 經(jīng)過自減運(yùn)算a 后,變量a所對(duì)應(yīng)的整數(shù)值為96。雖然題中未給出字符2和0的ASCII值,但讀者應(yīng)當(dāng)知道20是將字符2轉(zhuǎn)換成整數(shù)2的表達(dá)式,故a+2 0的值為98。 同理可知,第二個(gè)輸出項(xiàng)相當(dāng)于算術(shù)表達(dá)式96+3,其值為99。按照題中所給定的格式描述符,第一個(gè)輸出項(xiàng)應(yīng)當(dāng)以%d格式輸出98;第二個(gè)輸出項(xiàng)應(yīng)當(dāng)以%c格式輸出字符,已知a的ASCII值為97,故不難推出99的對(duì)應(yīng)字符應(yīng)該是字母c。 【案例3】以下程序的輸出為 。 #includ

34、e main() int m=7, n=4; float a=38.4, b=6.4, x; x=m/2+n*a/b+1/2; printf(%fn, x); A27.000000 B27.500000 C28.000000 D28.500000 分析:本題的關(guān)鍵是正確計(jì)算混合類型運(yùn)算表達(dá)式的值。題中表達(dá)式m/2+n*a/b+1/2的運(yùn)算順序?yàn)椋哼M(jìn)行整除運(yùn)算,計(jì)算出m/2(即7/2)的值是3;計(jì)算n*a,先把n值轉(zhuǎn)換成實(shí)型,然后求出乘積為153.6; 將該乘積與b相除,得到的運(yùn)算結(jié)果為實(shí)型數(shù)24.0;得到1/2的整除結(jié)果為0;整數(shù)3被轉(zhuǎn)換成3.0,與24.0相加,結(jié)果為27.0; 將整數(shù)0轉(zhuǎn)換

35、成0.0與27.0相加,得到表達(dá)式的最終結(jié)果為27.0。 因此,本題答案是A。 【案例4】分析下列程序的輸出結(jié)果。 # include void main() int y=6; printf(%dn, +y); printf(%dn, y); printf(%dn, y+); printf(%dn, y); printf(%dn, y+); printf(%dn, y); 分析:輸出語句1中的+y,是在y=6的基礎(chǔ)上先自加1后輸出,即y=7;輸出語句2中的y,是在y=7的基礎(chǔ)上先自減1后輸出,即y=6;輸出語句3中的y +,是在y=6的基礎(chǔ)上先輸出后自加1,即輸出時(shí)y=6,輸出后y=7; 輸出

36、語句4中的+y,是在y=7的基礎(chǔ)上先輸出后自減1,即輸出時(shí)y=7,輸出后y=6;輸出語句5中的y+,負(fù)號(hào)運(yùn)算符優(yōu)先于自加運(yùn)算符+,先輸出取負(fù)之后的值,再將其值自加,即輸出時(shí)y=6,輸出后y=7; 輸出語句6中的y,負(fù)號(hào)運(yùn)算符-優(yōu)先于自減運(yùn)算符,先輸出取負(fù)之后的值,再將其值自減,即輸出時(shí)y=7,輸出后y=6。 運(yùn)行結(jié)果為 7 6 6 7 6 7 算法算法3.1結(jié)構(gòu)化程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)3.2案案 例例 分分 析析3.5 C C語言中數(shù)據(jù)的輸入輸出語言中數(shù)據(jù)的輸入輸出3.4 C C語言基本語句語言基本語句3.3 教學(xué)目標(biāo) 了解算法的有關(guān)知識(shí); 掌握C語言的基本語句; 熟練輸入輸出函數(shù)的使用; 掌

37、握順序結(jié)構(gòu)。3.1 算法 3.1.1算法的概念 【例3-1】輸入3個(gè)數(shù),求其最大值。 問題分析:設(shè)num1,num2,num3存放3個(gè)數(shù),max存放其最大值。 為求最大值,就必須對(duì)3個(gè)數(shù)進(jìn)行比較,可按如下步驟進(jìn)行。 (1)輸入3個(gè)數(shù)num1,num2,num3。 (2)先把第1個(gè)數(shù)num1的值賦給max。 (3)將第2個(gè)數(shù)num2與max比較,如果num2max,則把第2個(gè)數(shù)num2的值賦給max(否則不做任何工作)。 (4)將第3個(gè)數(shù)num3與max比較,如果num3max,則把第3個(gè)數(shù)num3的值賦給max(否則不做任何工作)。 (5)輸出max的值,即最大值。 算法特性: (1)有窮性。

38、 (2)確定性。 (3)有效性。 (4)有零個(gè)或多個(gè)輸入。 (5)有一個(gè)或多個(gè)輸出。 3.1.2 算法的描述 自然語言、傳統(tǒng)流程圖、N-S結(jié)構(gòu)圖、偽代碼、PAD圖等。 1自然語言 自然語言就是人們?nèi)粘J褂玫恼Z言。 2傳統(tǒng)流程圖 符號(hào)符號(hào)符符 號(hào)號(hào) 名名 稱稱含義含義起止框起止框表示算法的開始和結(jié)束表示算法的開始和結(jié)束輸入輸入/ /輸出框輸出框表示輸入表示輸入/ /輸出操作輸出操作處理框處理框表示對(duì)框內(nèi)的內(nèi)容進(jìn)行處理表示對(duì)框內(nèi)的內(nèi)容進(jìn)行處理表表3-13-1 傳統(tǒng)流程圖常用的符號(hào)傳統(tǒng)流程圖常用的符號(hào) 判斷框判斷框表示對(duì)框內(nèi)的條件進(jìn)行判斷表示對(duì)框內(nèi)的條件進(jìn)行判斷流程線流程線表示流程的方向表示流程的方

39、向連接點(diǎn)連接點(diǎn)表示兩個(gè)具有同一標(biāo)記的表示兩個(gè)具有同一標(biāo)記的“連連接點(diǎn)接點(diǎn)”應(yīng)連接成一個(gè)點(diǎn)應(yīng)連接成一個(gè)點(diǎn)注釋框注釋框表示注釋說明表示注釋說明 3N-S結(jié)構(gòu)圖 1973年提出一種新的結(jié)構(gòu)化流程圖形式,即簡稱為N-S結(jié)構(gòu)圖。 特點(diǎn):是完全取消了流程線,不允許有隨意的控制流,全部算法寫在一個(gè)矩形框內(nèi),該矩形框以3種基本結(jié)構(gòu)(順序、選擇和循環(huán))描述符號(hào)為基本,復(fù)合而成。3.2 結(jié)構(gòu)化程序設(shè)計(jì) 3.2.1 基本結(jié)構(gòu) 結(jié)構(gòu)化程序由如下3種基本結(jié)構(gòu)組成。 1順序結(jié)構(gòu)圖3-1 順序結(jié)構(gòu) 圖3-1(a)傳統(tǒng)流程圖表示的順序結(jié)構(gòu) 圖3-1(b)N-S結(jié)構(gòu)圖表示的順序結(jié)構(gòu) (a) 處理 A 處理 B 處理 A 處理

40、B (b) 圖圖3-1 3-1 順序結(jié)構(gòu)順序結(jié)構(gòu) 2選擇結(jié)構(gòu) 如圖3-2所示。 條件 處理 A 處理 B 條件 成立 不成立 處理 A 處理 B (a) (b) 圖圖3-2 3-2 選擇結(jié)構(gòu)選擇結(jié)構(gòu) 3循環(huán)結(jié)構(gòu) 循環(huán)結(jié)構(gòu)一般分為當(dāng)型循環(huán)和直到型循環(huán)。 (1)當(dāng)型循環(huán)。 在當(dāng)型循結(jié)構(gòu)中,當(dāng)邏輯條件成立時(shí),就反復(fù)執(zhí)行處理A(稱為循環(huán)體),直到邏輯條件不成立時(shí)結(jié)束,如圖3-3所示。 真 假 條件 處理 A 當(dāng)條件成立時(shí)繼續(xù) 處理 A (a) (b) 圖圖3-3 3-3 當(dāng)型循環(huán)當(dāng)型循環(huán) (2)直到型循環(huán)。 在直到型循環(huán)結(jié)構(gòu)中,反復(fù)執(zhí)行處理A,直到邏輯條件不成立時(shí)結(jié)束,如圖3-4所示。 真 假 條件

41、處理 A (a) (b) 處理 A 直到條件不成立時(shí)結(jié)束 圖圖3-4 3-4 直到型循環(huán)直到型循環(huán) 3.2.2 程序設(shè)計(jì)舉例 【例3-3】用傳統(tǒng)流程圖和N-S結(jié)構(gòu)圖來描述例3-1,求3個(gè)數(shù)中最大值的算法。 用N-S結(jié)構(gòu)圖來描述如圖3-5所示。 用傳統(tǒng)流程圖描述如圖3-6所示。 圖圖3-5 3-5 例例3-3N-S3-3N-S結(jié)構(gòu)圖結(jié)構(gòu)圖 圖圖3-6 3-6 例例3-33-3傳統(tǒng)流程圖傳統(tǒng)流程圖 【例3-4】求5!的值(即12345的值),設(shè)計(jì)一個(gè)算法,分別用自然語言、傳統(tǒng)流程圖及N-S結(jié)構(gòu)圖來表示出來。 為了解決該問題,可以設(shè)兩個(gè)變量,變量p代表被乘數(shù),變量i代表乘數(shù),用循環(huán)算法來求結(jié)果。用自

42、然語言表示該算法如下。 (1)使p=1。 (2)使i=2。 (3)使pi,乘積仍放在變量p中,可表示為pip。 (4)使i的值加1,即i+1i。 (5)如果i不大于5,返回重新執(zhí)行步驟(3)以及其后步驟(4)、(5);否則,算法結(jié)束。 最后得到p的值就是5!的值。 此算法用傳統(tǒng)流程圖表示如圖3-7所示,用N-S結(jié)構(gòu)圖表示如圖3-8所示。 圖圖3-7 3-7 例例3-43-4傳統(tǒng)流程圖傳統(tǒng)流程圖 圖圖3-8 3-8 例例3-4N-S3-4N-S結(jié)構(gòu)圖結(jié)構(gòu)圖 3.3 C語言基本語句 分為4類,分別是聲明語句、表達(dá)式語句、復(fù)合語句和流程控制語句。 1聲明語句 int x; char ch15; vo

43、id fun(int n); 注意:聲明語句寫在其他語句的前面。 2表達(dá)式語句 表達(dá)式; 表達(dá)式語句可分為賦值語句、函數(shù)調(diào)用語句和空語句3種基本類型。 (1)賦值語句: a=3; (2)函數(shù)調(diào)用語句: printf(This is a C program.); (3)空語句: “;”。 3復(fù)合語句 x=y+z; a=b+c; printf(%d %d, x, a); 4控制語句 語句語句名稱名稱語句語句名稱名稱If()If()elseelse條件語句條件語句breakbreak中止執(zhí)行中止執(zhí)行switchswitch或循環(huán)語句或循環(huán)語句For()For()循環(huán)語句循環(huán)語句switchswitc

44、h多分支選擇語句多分支選擇語句while()while()循環(huán)語句循環(huán)語句gotogoto轉(zhuǎn)向語句轉(zhuǎn)向語句dodowhile()while()循環(huán)語句循環(huán)語句returnreturn從函數(shù)返回語句從函數(shù)返回語句continuecontinue結(jié)束本次循環(huán)語句結(jié)束本次循環(huán)語句表表3-23-2 C C語言的控制語句語言的控制語句3.4 C語言中數(shù)據(jù)的輸入輸出 3.4.1 格式輸入與輸出 1printf函數(shù)(格式輸出函數(shù)) (1)形式為 printf(格式控制字符串, 輸出表列) 【例3-5】printf函數(shù)的一般形式示例。 int a=88, b=89; printf(%d %dn, a, b);

45、 printf(%d, %dn, a, b); printf(%c, %cn, a, b); printf(a=%d, b=%d, a, b); 運(yùn)行結(jié)果為 88 89 88, 89 X, Y a=88, b=89 (2)格式字符串。 在C中格式字符串的一般形式為 %修飾符格式符 格格 式式 字字 符符意義意義舉例舉例輸輸 出出 結(jié)結(jié) 果果d d以十進(jìn)制形式輸出以十進(jìn)制形式輸出帶符號(hào)整數(shù)(正數(shù)帶符號(hào)整數(shù)(正數(shù)不輸出符號(hào))不輸出符號(hào))int a=567;int a=567;printf(%d, a);printf(%d, a);567567o o以八進(jìn)制形式輸出以八進(jìn)制形式輸出無符號(hào)整數(shù)(不輸無

46、符號(hào)整數(shù)(不輸出前綴出前綴0 0)int a=65;int a=65;printf(%o, a);printf(%o, a);101101X X(或(或X X)以十六進(jìn)制形式輸以十六進(jìn)制形式輸出無符號(hào)整數(shù)(不出無符號(hào)整數(shù)(不輸出前綴輸出前綴0 x0 x)int a=255;int a=255;printf(%x, a);printf(%x, a);ffffu u以十進(jìn)制形式輸出以十進(jìn)制形式輸出無符號(hào)整數(shù)無符號(hào)整數(shù)int a=567;int a=567;printf(%u, a);printf(%u, a);567567表表3-33-3 printf printf格式符格式符 f f以小數(shù)形式輸

47、出單、雙以小數(shù)形式輸出單、雙精度實(shí)數(shù)精度實(shí)數(shù)float a=567.789;float a=567.789;printf(%fprintf(%f, a);, a);567.789000567.789000E E(或(或E E)以指數(shù)形式輸出單、雙以指數(shù)形式輸出單、雙精度實(shí)數(shù)精度實(shí)數(shù)float a=567.789;float a=567.789;printf(%eprintf(%e, a);, a);5.677890e+025.677890e+02g g,G G以以%f%f或或%e%e中較短的輸出中較短的輸出寬度輸出單、雙精度實(shí)寬度輸出單、雙精度實(shí)數(shù)數(shù)float a=567.789;float

48、a=567.789;printf(%gprintf(%g, a);, a);567.789567.789c c輸出單個(gè)字符輸出單個(gè)字符char a= A;char a= A;printf(%cprintf(%c, a);, a);A As s輸出字符串輸出字符串printf(%sprintf(%s, , abcdeabcde););abcdeabcde% %輸出輸出% %printfprintf(%);(%);% % (3)修飾符。 不能單獨(dú)使用,必須與格式符連用,對(duì)輸出格式進(jìn)行修飾。 標(biāo)志標(biāo)志意義意義結(jié)果左對(duì)齊,右邊填空格結(jié)果左對(duì)齊,右邊填空格+ +輸出符號(hào)(正號(hào)或負(fù)號(hào))輸出符號(hào)(正號(hào)或負(fù)號(hào)

49、)# #對(duì)對(duì)o o類,在輸出時(shí)加前綴類,在輸出時(shí)加前綴o o;對(duì)對(duì)x x類,在輸出時(shí)加前綴類,在輸出時(shí)加前綴0 x0 x表表3-43-4修飾符及其作用修飾符及其作用 標(biāo)志標(biāo)志意義意義l l在在d d,o o,x x,u u前,指定輸出精度為前,指定輸出精度為longlong型型在在e e,f f,g g前,指定輸出精度為前,指定輸出精度為doubledouble型型m m輸出數(shù)據(jù)域?qū)?,?shù)據(jù)長度輸出數(shù)據(jù)域?qū)?,?shù)據(jù)長度m m,左補(bǔ)空格,否則,左補(bǔ)空格,否則按原樣輸出按原樣輸出.n.n對(duì)實(shí)數(shù)指定小數(shù)點(diǎn)后的位數(shù),多則四舍五入對(duì)實(shí)數(shù)指定小數(shù)點(diǎn)后的位數(shù),多則四舍五入對(duì)字符串指定輸出位數(shù)對(duì)字符串指定輸出位數(shù)

50、續(xù)表續(xù)表 【例3-6】修飾符示例。 main() int a=15; float b=123.1234567; double c=12345678.1234567; char d= p; printf(a=%d, %5d, %o, %xn, a, a, a, a); printf(b=%f, %lf, %5.4lf, %en, b, b, b, b); printf(c=%lf, %f, %8.4lfn, c, c, c); printf(d=%c, %8cn, d, d); 運(yùn)行結(jié)果為 a=15, 15, 17, f b=123.123459, 123459, 123.1235, 1.231

51、23e+02 c=12345678.123457, 12345678.123457, 12345678.1235 d=p, p 【例3-7】printf函數(shù)輸出表列求值順序1。 main() int i=8; printf(%dn%dn%dn%dn%dn%dn, +i, i, i+, i, i+, i); 運(yùn)行結(jié)果為 8 7 7 8 7 8 【例3-8】printf函數(shù)輸出表列求值順序2。 main() int i=8; printf(%dn, +i); printf(%dn, i); printf(%dn, i+); printf(%dn, i); printf(%dn, i+); prin

52、tf(%dn, i); 運(yùn)行結(jié)果為 9 8 8 9 8 9 2scanf函數(shù)(格式輸入函數(shù)) (1)形式為 scanf(格式控制字符串, 地址表列); 地址表列中給出各變量的地址。地址是由地址運(yùn)算符“&”后跟變量名組成的。 例如: &a, &b /*分別表示變量a和變量b的地址。*/ 【例3-9】scanf函數(shù)的一般形式示例。 main() int a, b, c; printf(input a, b, cn); /*在輸入前,輸出一個(gè)提示*/ scanf(%d%d%d, &a, &b, &c); printf(a=%d, b=%d, c=%d, a, b, c); 7 8 9 或 7 8 9

53、 (2)格式字符串形式為 %*輸入數(shù)據(jù)寬度長度格式符 格式符:表示輸入數(shù)據(jù)的類型,其格式符和意義如表3-5所示。 格式格式字字 符符 意意 義義格式格式字字 符符 意意 義義d d輸入十進(jìn)制整數(shù)輸入十進(jìn)制整數(shù)F F(或(或e e)輸入實(shí)型數(shù)(用小輸入實(shí)型數(shù)(用小數(shù)形式或指數(shù)形式)數(shù)形式或指數(shù)形式)o o輸入八進(jìn)制整數(shù)輸入八進(jìn)制整數(shù)c c輸入單個(gè)字符輸入單個(gè)字符x x輸入十六進(jìn)制整數(shù)輸入十六進(jìn)制整數(shù)s s輸入字符串輸入字符串u u輸入無符號(hào)十進(jìn)制輸入無符號(hào)十進(jìn)制整數(shù)整數(shù)表表3-53-5scanfscanf格式符格式符 修飾符: “*”符:例如: Scanf(%d %*d %d, &a, &b);

54、 當(dāng)輸入為1 2 3時(shí),把1賦予a,2被跳過,3賦予b。 寬度: scanf(%5d, &a); 當(dāng)輸入為12345678時(shí),只把12345賦予變量a,其余部分被截去。 scanf(%4d%4d, &a, &b); 當(dāng)輸入為12345678時(shí),將把1234賦予a,而把5678賦予b。 長度: l表示輸入長整型數(shù)據(jù)(如%ld)和雙精度浮點(diǎn)數(shù)(如%lf)。 例如: long x;double y; scanf(%ld%lf, &x, &y); 使用scanf函數(shù)注意以下問題 (1)scanf函數(shù)中沒有精度控制, scanf(%5.2f, &a);是非法的。 (2)scanf中要求給出變量地址,如給

55、出變量名則會(huì)出錯(cuò)。例如 scanf(%d, a);是非法的,應(yīng)改為scnaf(%d, &a);才是合法的。 (3)在輸入多個(gè)數(shù)值數(shù)據(jù)時(shí),若格式控制串中沒有非格式字符作為輸入數(shù)據(jù)之間的間隔則可用空格鍵、TAB鍵或Enter鍵作為間隔。C編譯在碰到空格鍵、TAB、Enter鍵或非法數(shù)據(jù)(例如對(duì)“%d”輸入“12A”時(shí),A即為非法數(shù)據(jù))時(shí)即認(rèn)為該數(shù)據(jù)結(jié)束。 (4)在輸入字符數(shù)據(jù)時(shí),若格式控制串中無非格式字符,則認(rèn)為所有輸入的字符均為有效字符。 例如: scanf(%c%c%c, &a, &b, &c); 輸入為 d e f 則把d賦予a, 賦予b,e賦予c。 只有當(dāng)輸入為 def 才能把d賦予a,e

56、賦予b,f 賦予c。 如果在格式控制中加入空格作為間隔,例如: Scanf (%c %c %c, &a, &b, &c); 則輸入時(shí)各數(shù)據(jù)之間可加空格。 【例3-10】scanf函數(shù)應(yīng)用示例1。 main() char a, b; printf(input character a, bn); scanf(%c%c, &a, &b); printf(%c%cn, a, b); 由于scanf函數(shù)的“%c%c”中沒有空格,輸入M N,結(jié)果輸出只有M。而輸入改為MN時(shí)則可輸出MN兩字符。 【例3-11】scanf函數(shù)應(yīng)用示例2。 main() char a, b; printf(input char

57、acter a, bn); scanf(%c %c, &a, &b); printf(n%c%cn, a, b); 本例表示scanf格式控制串“%c %c”之間有空格時(shí),輸入的數(shù)據(jù)之間可以有空格間隔。 (5)如果格式控制串中有非格式字符則輸入時(shí),也要輸入該非格式字符。 scanf(%d, %d, %d, &a, &b, &c); 輸入時(shí)應(yīng)為 5, 6, 7 (6)如輸入的數(shù)據(jù)與輸出的類型不一致時(shí),雖然編譯能夠通過,但結(jié)果將不正確。 【例3-12】scanf函數(shù)應(yīng)用示例3。 main() int a; printf(input a numbern); scanf(%d, &a); printf

58、(%ld, a); 運(yùn)行結(jié)果為 input a number 123 8061051 【例3-13】scanf函數(shù)應(yīng)用示例4。 main() long a; printf(input a long integern); scanf(%ld, &a); printf(%ld, a); 運(yùn)行結(jié)果為 input a long integer 1234567890 1234567890 本例當(dāng)輸入數(shù)據(jù)改為長整型后,輸入輸出數(shù)據(jù)相等。 【例3-14】scanf函數(shù)應(yīng)用示例5。 main() char a, b, c; printf(input character a, b, cn); scanf(%c

59、%c %c, &a, &b, &c); printf(%d, %d, %dn%c, %c, %cn, a, b, c, a32, b32, c32); 本例輸入3個(gè)小寫字母,輸出其ASCII值和對(duì)應(yīng)的大寫字母。 【例3-15】scanf函數(shù)應(yīng)用示例6。 main() int a; long b; float f; double d; char c; printf(nint:%dnlong:%dnfloat:%dndouble:%dnchar:%dn, sizeof(a), sizeof(b), sizeof(f), sizeof(d), sizeof(c); 本例輸出各種數(shù)據(jù)類型的字節(jié)長度。

60、3.4.2 字符數(shù)據(jù)的輸入輸出 1putchar 函數(shù)(字符輸出函數(shù)) 形式為 putchar(字符變量) 例如: putchar(A); (輸出大寫字母A) putchar(x); (輸出字符變量x的值) 使用本函數(shù)前必須要用文件包含命令: #include或#include stdio.h 【例3-16】輸出單個(gè)字符。 #include main() char a=B, b=o, c=k; putchar(a);putchar(b);putchar(b);putchar(c);putchar(t); putchar(a);putchar(b); putchar(n); putchar(b)

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論