版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 C C語(yǔ)言的發(fā)展及主要特點(diǎn)語(yǔ)言的發(fā)展及主要特點(diǎn)1.1 C C程序設(shè)計(jì)相關(guān)知識(shí)程序設(shè)計(jì)相關(guān)知識(shí)1.2 C C語(yǔ)言上機(jī)過(guò)程語(yǔ)言上機(jī)過(guò)程1.3 教學(xué)目標(biāo) 了解C語(yǔ)言的發(fā)展及主要特點(diǎn); 掌握C語(yǔ)言的結(jié)構(gòu); 熟練掌握C語(yǔ)言的運(yùn)行及其運(yùn)行環(huán)境Turbo C的使用。1.1 C語(yǔ)言的發(fā)展及主要特點(diǎn) 1.1.1 C語(yǔ)言的發(fā)展史 1963年 將ALGOL60發(fā)展成PCL 1967年將CPL改寫成BCPL; 1970年將BCPL修改成B語(yǔ)言 1972年將B語(yǔ)言改成了C語(yǔ)言。 1987年,Borland公司首次推出了Turbo C 1.0, 1988年,ANSI公布了標(biāo)準(zhǔn)ANSI C。 1.1.2 C語(yǔ)言的主要特點(diǎn)
2、 (1)C語(yǔ)言基本組成部分緊湊簡(jiǎn)潔。 (2)C語(yǔ)言運(yùn)算符豐富,表達(dá)能力強(qiáng)。 (3)C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)豐富,結(jié)構(gòu)化好。 (4)C語(yǔ)言具有結(jié)構(gòu)化的控制語(yǔ)句。 (5)C語(yǔ)言提供了某些接近匯編語(yǔ)言的功能,有利于編寫系統(tǒng)軟件。 (6)C語(yǔ)言程序所生成的目標(biāo)代碼質(zhì)量高。(7)C語(yǔ)言程序可移植性好。1.2 C程序設(shè)計(jì)相關(guān)知識(shí) 1.2.1 程序設(shè)計(jì)的基本概念 1計(jì)算機(jī)語(yǔ)言和程序 計(jì)算機(jī)語(yǔ)言分成機(jī)器語(yǔ)言、匯編語(yǔ)言和高級(jí)語(yǔ)言三大類。 機(jī)器語(yǔ)言:計(jì)算機(jī)能直接識(shí)別的語(yǔ)言,由0和1構(gòu)成的代碼。非常難于記憶和識(shí)別。 匯編語(yǔ)言:直接對(duì)硬件操作,助記符,更容易識(shí)別和記憶,執(zhí)行速度快。冗長(zhǎng)、復(fù)雜,容易出錯(cuò),需要有計(jì)算機(jī)專業(yè)知識(shí)。
3、高級(jí)語(yǔ)言:不能直接被計(jì)算機(jī)識(shí)別,經(jīng)過(guò)轉(zhuǎn)換才能被執(zhí)行。 按轉(zhuǎn)換方式分為兩類: 解釋類:執(zhí)行一條解釋一條。效率比較低,不能生成可獨(dú)立執(zhí)行文件,方式比較靈活。 編譯類:編譯是指在應(yīng)用源程序執(zhí)行之前,就將程序源代碼“翻譯”成目標(biāo)代碼(機(jī)器語(yǔ)言),使用比較方便,效率較高。修改很不方便。 2算法和算法設(shè)計(jì) 所謂算法,是指為解決某一特定的問(wèn)題,所給出的一系列確切的、有限的操作步驟。 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語(yǔ)言程序的結(jié)構(gòu)特點(diǎn) (1)C語(yǔ)言程序是由函數(shù)構(gòu)成的,一個(gè)源程序可以包
4、含若干個(gè)函數(shù),但必須有且只有一個(gè)函數(shù)為主函數(shù)main()。 (2)由大括號(hào)括起來(lái)的部分為函數(shù)體,函數(shù)體可以包含若干條C語(yǔ)言。每條語(yǔ)句必須以分號(hào)“;”結(jié)束。 (3)C語(yǔ)言一般用小寫字母書寫。 (4)程序可以加注釋以增加可讀性,其內(nèi)容必須用/*/。 (5) 除主函數(shù)外,C語(yǔ)言系統(tǒng)還提供一些可直接使用的庫(kù)函數(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ù)說(shuō)明 說(shuō)明部分 C語(yǔ)句 2C語(yǔ)句格式分類 C語(yǔ)句按形式可分為如下3種。 (1)單語(yǔ)句: 即一條可
5、執(zhí)行語(yǔ)句,以分號(hào)“;”結(jié)束。 例如:i-; (2)復(fù)合語(yǔ)句(也稱為分程序): 整體上用一對(duì)花括號(hào)括起來(lái),語(yǔ)法等效于一個(gè)單語(yǔ)句。 其一般形式為 說(shuō)明語(yǔ)句 語(yǔ)句1 語(yǔ)句n 例如: int x=100; x-; printf(&dn, x): (3)空語(yǔ)句: 只有一個(gè)分號(hào)的語(yǔ)句,無(wú)語(yǔ)句內(nèi)容。 例如: ; 3C語(yǔ)句構(gòu)造分類 C語(yǔ)句按構(gòu)造可分為如下兩種。 (1)表達(dá)式語(yǔ)句: 由表達(dá)式加分號(hào)“;”構(gòu)成。 例如: x=100; (2)控制語(yǔ)句: 既可以是單語(yǔ)句,也可以是復(fù)合語(yǔ)句,主要有以下幾種。 If else for while do while continue break switch goto re
6、turn 這些語(yǔ)句的作用是控制C程序的流程,即決定C語(yǔ)句的執(zhí)行順序。 通過(guò)下面的例子可以了解C語(yǔ)言的基本程序結(jié)構(gòu)。 【例1-1】簡(jiǎn)單的C語(yǔ)言程序。 main() /*主函數(shù)*/ int x, y, s; /*定義變量*/ x=3:b=7:s=(x+y)/2; /*賦值語(yǔ)句*/ printf(s=%d, s): /*輸出語(yǔ)句*/ 運(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)庫(kù)簡(jiǎn)介 標(biāo)準(zhǔn)庫(kù)函數(shù)提供了用戶與操作系統(tǒng)之間的接口。 例:#include 函數(shù)printf()就是在stdio.h中說(shuō)明的一個(gè)庫(kù)函數(shù)。 編譯時(shí),當(dāng)遇到一
8、個(gè)不是用戶定義的函數(shù)時(shí),編譯器就到頭文件中去查找,如果找到了,連接時(shí)就將該函數(shù)對(duì)應(yīng)庫(kù)中的代碼段加到調(diào)用它的函數(shù)中,形成可執(zhí)行文件。1.3 C語(yǔ)言上機(jī)過(guò)程 源程序(.C)編譯目標(biāo)程序(.OBJ)連接可以執(zhí)行程序(.EXE)。 開(kāi)發(fā)一個(gè)C程序要經(jīng)過(guò)編輯、編譯、連接和運(yùn)行4個(gè)步驟。 1編輯 編輯是指C語(yǔ)言源程序的輸入和修改。 2編譯 源程序翻譯成可重定位的二進(jìn)制的目標(biāo)程序。 3連接 目標(biāo)程序和程序中用到的庫(kù)函數(shù)連接裝配在一起,形成可執(zhí)行的目標(biāo)程序。 4運(yùn)行 連接后生成的可執(zhí)行文件裝入內(nèi)存即可以運(yùn)行,并輸出運(yùn)行結(jié)果。 如果在運(yùn)行程序的過(guò)程中得不到預(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簡(jiǎn)單數(shù)據(jù)類型簡(jiǎn)單數(shù)據(jù)類型2.2運(yùn)算符和表達(dá)式運(yùn)算符和表達(dá)式2.3案案 例例 分分 析析2.4 教學(xué)目標(biāo) 掌握C語(yǔ)言的各種數(shù)據(jù)類型; 掌握常量、變量的定義; 掌握運(yùn)算符及其各種運(yùn)算,學(xué)會(huì)構(gòu)建各種C語(yǔ)言表達(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 說(shuō)明: 1、C語(yǔ)言中是區(qū)分大小寫; 2、一般的計(jì)算機(jī)系統(tǒng)標(biāo)識(shí)符的長(zhǎng)度8個(gè)字符有效。 3
11、、不能和用戶已編制的函數(shù)或C語(yǔ)言庫(kù)函數(shù)同名。 C語(yǔ)言的標(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變量 變量:其值可以改變的量。 變量名:以字母或下劃線開(kāi)頭,由數(shù)字、字母、下劃線構(gòu)成。最多8個(gè)
12、字符 變量先定義、后使用,這樣做的目的如下: (1)凡是未被事先定義的,不作為變量名,這就能保證程序中變量名使用得正確。 (2)每一個(gè)變量被指定為一確定類型,在編譯時(shí)就能為其分配相應(yīng)的存儲(chǔ)單元。 (3)每一變量屬于一個(gè)類型,便于在編譯時(shí)據(jù)此檢查該變量所進(jìn)行的運(yùn)算是否合法。2.2 簡(jiǎn)單數(shù)據(jù)類型 2.2.1 整型數(shù)據(jù) 1整型常量 在C語(yǔ)言中,整型常量可以用十進(jìn)制、八進(jìn)制和十六進(jìn)制形式來(lái)表示。 (1)十進(jìn)制整數(shù)。 (2)八進(jìn)制整數(shù)(數(shù)字0開(kāi)頭)。例如,010,011,016。 (3)十六進(jìn)制整數(shù)。(數(shù)字0 x或大寫字母X開(kāi)頭)。例如,0 x10,0 xde,0 xf。 2整型變量 (1)整型變量的分
13、類。 類型說(shuō)明符類型說(shuō)明符數(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語(yǔ)言中整型量的內(nèi)存字節(jié)數(shù)及表示范圍語(yǔ)言中整型量的內(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為無(wú)符號(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值來(lái)存儲(chǔ)的,一個(gè)字符占一個(gè)字節(jié)。例如,字符ASCII值(十進(jìn)制)A為65,B為66,a為97,b為98。 字符常量是指用一對(duì)單引號(hào)括起來(lái)的一個(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走紙換頁(yè)走紙換頁(yè)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語(yǔ)言中常用的轉(zhuǎn)義字符語(yǔ)言中常用的轉(zhuǎn)義字符 2字符串常量 字符串常量是一對(duì)雙引號(hào)括起來(lái)的字符序列。例如: 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è)字符。因此可以用下面的語(yǔ)句對(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)算符 +、*、/、% 說(shuō)明: (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語(yǔ)言中,所有實(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ù))連接起來(lái)的,符合C語(yǔ)法的表達(dá)式稱為算術(shù)表達(dá)式。 在計(jì)算機(jī)語(yǔ)言中,算術(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)開(kāi)始,由內(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á)式中使用說(shuō)明 (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簡(jiǎn)單賦值運(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 的求解步驟是怎樣的呢?其求解過(guò)程如下。 (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問(wèn)號(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 說(shuō)明: (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é) 合合 方方 向向說(shuō)明說(shuō)明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é) 合合 方方 向向說(shuō)明說(shuō)明/ /除除表達(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)用語(yǔ)句的輸出項(xiàng)包含了a=a+1形式,不合法 D中printf函數(shù)調(diào)用語(yǔ)句的格式描述符不夠,輸出無(wú)定值 輸出2 分析:通過(guò)本例,讀者應(yīng)當(dāng)弄清C語(yǔ)言中逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式的特點(diǎn)。 在C語(yǔ)言中,允許用逗號(hào)運(yùn)算符把兩個(gè)或多個(gè)表達(dá)式連接起來(lái)形成一個(gè)逗號(hào)表達(dá)式,表達(dá)式的求值順序是自左至右,并以最右邊表達(dá)式的結(jié)果作為整個(gè)逗號(hào)表達(dá)式的結(jié)果。需要注意的是,并非在C程序中任何地方出現(xiàn)的逗號(hào)都是作為逗號(hào)運(yùn)算符。 例如,本題程序1中的printf語(yǔ)句的輸出項(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語(yǔ)句的輸出項(xiàng)a=a+1, a+b, b+1不是逗號(hào)表達(dá)式,而是以逗號(hào)分隔的3個(gè)表達(dá)式,其中第一個(gè)表達(dá)式a=a+1稱做賦值表達(dá)式。 由于本語(yǔ)句中只給出了一個(gè)格式描述符%d,因此只能輸出第一個(gè)表達(dá)式a=a+1的值,即輸出2。 由以上分析可知,本題的正確答案為B。 【案例2】已知字母a的ASCII十進(jìn)制代碼為97,則執(zhí)行以下語(yǔ)句后的輸出為 。 char a=a; a-; printf(%d, %cn, a+20, a+3 0); Ab, c Ba-運(yùn)算不合法,故有語(yǔ)法錯(cuò) C98,c D格式描述和輸出項(xiàng)不匹配,輸出無(wú)定值 分析:
33、C語(yǔ)言規(guī)定,所有字符常量都可以作為整型常量來(lái)處理,因而字符常量也可參與算術(shù)運(yùn)算。本題中字符變量a的初值為字符a,其對(duì)應(yīng)的整數(shù)值就是a的ASCII十進(jìn)制代碼97。 經(jīng)過(guò)自減運(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); 分析:輸出語(yǔ)句1中的+y,是在y=6的基礎(chǔ)上先自加1后輸出,即y=7;輸出語(yǔ)句2中的y,是在y=7的基礎(chǔ)上先自減1后輸出,即y=6;輸出語(yǔ)句3中的y +,是在y=6的基礎(chǔ)上先輸出后自加1,即輸出時(shí)y=6,輸出后y=7; 輸出
36、語(yǔ)句4中的+y,是在y=7的基礎(chǔ)上先輸出后自減1,即輸出時(shí)y=7,輸出后y=6;輸出語(yǔ)句5中的y+,負(fù)號(hào)運(yùn)算符優(yōu)先于自加運(yùn)算符+,先輸出取負(fù)之后的值,再將其值自加,即輸出時(shí)y=6,輸出后y=7; 輸出語(yǔ)句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語(yǔ)言中數(shù)據(jù)的輸入輸出語(yǔ)言中數(shù)據(jù)的輸入輸出3.4 C C語(yǔ)言基本語(yǔ)句語(yǔ)言基本語(yǔ)句3.3 教學(xué)目標(biāo) 了解算法的有關(guān)知識(shí); 掌握C語(yǔ)言的基本語(yǔ)句; 熟練輸入輸出函數(shù)的使用; 掌
37、握順序結(jié)構(gòu)。3.1 算法 3.1.1算法的概念 【例3-1】輸入3個(gè)數(shù),求其最大值。 問(wèn)題分析:設(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 算法的描述 自然語(yǔ)言、傳統(tǒng)流程圖、N-S結(jié)構(gòu)圖、偽代碼、PAD圖等。 1自然語(yǔ)言 自然語(yǔ)言就是人們?nèi)粘J褂玫恼Z(yǔ)言。 2傳統(tǒng)流程圖 符號(hào)符號(hào)符符 號(hào)號(hào) 名名 稱稱含義含義起止框起止框表示算法的開(kāi)始和結(jié)束表示算法的開(kāi)始和結(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)注釋框注釋框表示注釋說(shuō)明表示注釋說(shuō)明 3N-S結(jié)構(gòu)圖 1973年提出一種新的結(jié)構(gòu)化流程圖形式,即簡(jiǎn)稱為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)圖來(lái)描述例3-1,求3個(gè)數(shù)中最大值的算法。 用N-S結(jié)構(gòu)圖來(lái)描述如圖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è)算法,分別用自然語(yǔ)言、傳統(tǒng)流程圖及N-S結(jié)構(gòu)圖來(lái)表示出來(lái)。 為了解決該問(wèn)題,可以設(shè)兩個(gè)變量,變量p代表被乘數(shù),變量i代表乘數(shù),用循環(huán)算法來(lái)求結(jié)果。用自
42、然語(yǔ)言表示該算法如下。 (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語(yǔ)言基本語(yǔ)句 分為4類,分別是聲明語(yǔ)句、表達(dá)式語(yǔ)句、復(fù)合語(yǔ)句和流程控制語(yǔ)句。 1聲明語(yǔ)句 int x; char ch15; vo
43、id fun(int n); 注意:聲明語(yǔ)句寫在其他語(yǔ)句的前面。 2表達(dá)式語(yǔ)句 表達(dá)式; 表達(dá)式語(yǔ)句可分為賦值語(yǔ)句、函數(shù)調(diào)用語(yǔ)句和空語(yǔ)句3種基本類型。 (1)賦值語(yǔ)句: a=3; (2)函數(shù)調(diào)用語(yǔ)句: printf(This is a C program.); (3)空語(yǔ)句: “;”。 3復(fù)合語(yǔ)句 x=y+z; a=b+c; printf(%d %d, x, a); 4控制語(yǔ)句 語(yǔ)句語(yǔ)句名稱名稱語(yǔ)句語(yǔ)句名稱名稱If()If()elseelse條件語(yǔ)句條件語(yǔ)句breakbreak中止執(zhí)行中止執(zhí)行switchswitch或循環(huán)語(yǔ)句或循環(huán)語(yǔ)句For()For()循環(huán)語(yǔ)句循環(huán)語(yǔ)句switchswitc
44、h多分支選擇語(yǔ)句多分支選擇語(yǔ)句while()while()循環(huán)語(yǔ)句循環(huán)語(yǔ)句gotogoto轉(zhuǎn)向語(yǔ)句轉(zhuǎn)向語(yǔ)句dodowhile()while()循環(huán)語(yǔ)句循環(huán)語(yǔ)句returnreturn從函數(shù)返回語(yǔ)句從函數(shù)返回語(yǔ)句continuecontinue結(jié)束本次循環(huán)語(yǔ)句結(jié)束本次循環(huán)語(yǔ)句表表3-23-2 C C語(yǔ)言的控制語(yǔ)句語(yǔ)言的控制語(yǔ)句3.4 C語(yǔ)言中數(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)制形式輸出無(wú)符號(hào)整數(shù)(不輸無(wú)
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)制形式輸出無(wú)符號(hào)整數(shù)(不出無(wú)符號(hào)整數(shù)(不輸出前綴輸出前綴0 x0 x)int a=255;int a=255;printf(%x, a);printf(%x, a);ffffu u以十進(jìn)制形式輸出以十進(jìn)制形式輸出無(wú)符號(hào)整數(shù)無(wú)符號(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ù)長(zhǎng)度輸出數(shù)據(jù)域?qū)挘瑪?shù)據(jù)長(zhǎng)度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ù)寬度長(zhǎng)度格式符 格式符:表示輸入數(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輸入無(wú)符號(hào)十進(jìn)制輸入無(wú)符號(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被跳過(guò),3賦予b。 寬度: scanf(%5d, &a); 當(dāng)輸入為12345678時(shí),只把12345賦予變量a,其余部分被截去。 scanf(%4d%4d, &a, &b); 當(dāng)輸入為12345678時(shí),將把1234賦予a,而把5678賦予b。 長(zhǎng)度: l表示輸入長(zhǎng)整型數(shù)據(jù)(如%ld)和雙精度浮點(diǎn)數(shù)(如%lf)。 例如: long x;double y; scanf(%ld%lf, &x, &y); 使用scanf函數(shù)注意以下問(wèn)題 (1)scanf函數(shù)中沒(méi)有精度控制, scanf(%5.2f, &a);是非法的。 (2)scanf中要求給出變量地址,如給
55、出變量名則會(huì)出錯(cuò)。例如 scanf(%d, a);是非法的,應(yīng)改為scnaf(%d, &a);才是合法的。 (3)在輸入多個(gè)數(shù)值數(shù)據(jù)時(shí),若格式控制串中沒(méi)有非格式字符作為輸入數(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í),若格式控制串中無(wú)非格式字符,則認(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éi)有空格,輸入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í),雖然編譯能夠通過(guò),但結(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ù)改為長(zhǎng)整型后,輸入輸出數(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é)長(zhǎng)度。
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. 本站所有資源如無(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版裝修工程合同范本:合同生效與解除條件2篇
- 2024跨區(qū)域電網(wǎng)工程建設(shè)與運(yùn)營(yíng)管理合同
- 二零二五版家居行業(yè)導(dǎo)購(gòu)員聘用與考核合同3篇
- 二零二五年餐飲行業(yè)食堂承包合作協(xié)議范本3篇
- 二零二五版家庭住家保姆綜合能力培訓(xùn)聘用合同3篇
- 2025年度新能源出租車特許經(jīng)營(yíng)合同3篇
- 二零二五年度跨境電商進(jìn)口商品代理銷售合同9篇
- 二零二五年股權(quán)質(zhì)押貸款擔(dān)保合同3篇
- 二零二五按揭房離婚財(cái)產(chǎn)分割與子女監(jiān)護(hù)協(xié)議范本3篇
- 2024淘寶店鋪加盟合作協(xié)議范本3篇
- 處理后事授權(quán)委托書
- 臨床診療規(guī)范與操作指南制度
- DLT 5285-2018 輸變電工程架空導(dǎo)線(800mm以下)及地線液壓壓接工藝規(guī)程
- 新員工入職培訓(xùn)測(cè)試題附有答案
- 勞動(dòng)合同續(xù)簽意見(jiàn)單
- 大學(xué)生國(guó)家安全教育意義
- 2024年保育員(初級(jí))培訓(xùn)計(jì)劃和教學(xué)大綱-(目錄版)
- 河北省石家莊市2023-2024學(xué)年高二上學(xué)期期末考試 語(yǔ)文 Word版含答案
- 企業(yè)正確認(rèn)識(shí)和運(yùn)用矩陣式管理
- 分布式光伏高處作業(yè)專項(xiàng)施工方案
- 陳閱增普通生物學(xué)全部課件
評(píng)論
0/150
提交評(píng)論