程序設(shè)計基礎(chǔ)套課件幻燈片完整版ppt教學教程最全電子講義(最新)_第1頁
程序設(shè)計基礎(chǔ)套課件幻燈片完整版ppt教學教程最全電子講義(最新)_第2頁
程序設(shè)計基礎(chǔ)套課件幻燈片完整版ppt教學教程最全電子講義(最新)_第3頁
程序設(shè)計基礎(chǔ)套課件幻燈片完整版ppt教學教程最全電子講義(最新)_第4頁
程序設(shè)計基礎(chǔ)套課件幻燈片完整版ppt教學教程最全電子講義(最新)_第5頁
已閱讀5頁,還剩647頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第1章 緒論程序設(shè)計基礎(chǔ)(C語言版)1.1 程序設(shè)計語言 程序設(shè)計語言是一組用來定義計算機程序的語法規(guī)則,即程序設(shè)計語言必須是計算機能夠理解的 用程序設(shè)計語言編寫的程序稱為源程序(source program)或源代碼(source code) 程序設(shè)計語言的發(fā)展:機器語言(machine language)匯編語言(assembly language)高級語言解釋方式編譯方式1.2 C語言概況一、C語言的發(fā)展歷史 C語言標準的變遷C89ANSI CC90ISO/IEC 9899:1990C99ISO/IEC 9899:1999C11ISO/IEC 9899:2011 注:Microsoft

2、Visual C+(簡稱VC)僅支持C90二、C語言的特點1.3 C語言程序的基本結(jié)構(gòu)【例1.1】 輸出Hello!#include int main(void) printf(Hello, the world!n); return 0;【例1.2】 求兩個整數(shù)的和并輸出#include int main(void) int a, b, sum; a = 10; b = 20; sum = a + b; printf(sum = %dn, sum); return 0; C 語言程序書寫格式自由【例1.1】 輸出Hello!#include int main(void) printf(Hell

3、o, the world!n); return 0;#include int main(void)printf(Hello!n);return 0; 為增強程序的可讀性,通常書寫C語言程序時應遵循以下規(guī)則:一行內(nèi)僅寫一條語句正反大括號分別各占一行每對大括號上下對齊語句采用縮進格式,錯落有致1.4 C語言程序的上機執(zhí)行過程可執(zhí)行文件(.exe)Executable File目標文件(.obj)Object File源文件(.c)Source Fileedit編輯compile編譯其他目標文件(可選)C標準庫C standard library link連接第2章 標記、類型與表達式程序設(shè)計基礎(chǔ)(

4、C語言版)2.1 標記 標記(token)是具有唯一含義的語言的最小單位,分為五種:關(guān)鍵字(keyword)標識符(identifier)常量(constant)串字面量(string literal)標點符號(punctuator)一、關(guān)鍵字 關(guān)鍵字也稱為保留字,所有關(guān)鍵字都有固定的含義,且其含義不可改變 C語言共有44個關(guān)鍵字:autoexternshortwhilebreakfloatsigned_Alignascaseforsizeof_Alignofchargotostatic_Atomicconstifstruct_Boolcontinueinlineswitch_Complexd

5、efaultinttypedef_Genericdolongunion_Imaginarydoubleregisterunsigned_Noreturnelserestrictvoid_Static_assertenumreturnvolatile_Thread_local二、標識符 標識符用于表示程序中的對象(object)函數(shù)(function)結(jié)構(gòu)體(structure)的標記(tag)或成員(member)共同體(union)的標記或成員枚舉(enumeration)的標記或成員typedef名(typedef name)標號名(label name)宏名(macro name)宏參數(shù)

6、(macro parameter) 標識符由小寫字母、大寫字母、數(shù)字、下畫線、通用字符名(universal character name)或?qū)崿F(xiàn)定義的字符(implementation-defined character)構(gòu)成 注意:數(shù)字不能作為標識符的第一個字符關(guān)鍵字不能作為標識符 標識符的例子:areaPerimeter_3wu03b1w VC允許在標識符中使用$,因此,$123在VC中是標識符 不是標識符的例子:6abccheck-itemint 大寫字母和小寫字母是有區(qū)別的,即所謂大小寫敏感Ageage C語言對標識符的最大長度沒有具體的限制,VC允許標識符的最大長度為247個字符

7、應該選擇相應的英文單詞或其縮寫作為標識符,做到見名知義 表示長方體的長、寬、高abclengthwidthheight(更合適)三、常量 在程序運行過程中,其值不變的量稱為常量。常量分為四種類型:整數(shù)常量(integer constant)浮點常量(floating constant)枚舉常量(enumeration constant)字符常量(character constant)1、整數(shù)常量 整數(shù)包括正整數(shù)、零和負整數(shù) 整數(shù)常量只包括正整數(shù)和零,不包括負整數(shù)。整數(shù)常量分為:十進制整數(shù)常量八進制整數(shù)常量十六進制整數(shù)常量 十進制整數(shù)常量由 09 組成,且以非零數(shù)字開頭1231000 八進制整數(shù)

8、常量由 07 組成,且以 0 開頭,或者只有一個 00170 十六進制整數(shù)常量由 AF(或af)、09 組成,且以 0 x 或 0X 開頭0 x1a0XD5【例2.1】 八進制、十進制、十六進制整數(shù)常量之間的混合運算#include int main(void) printf(sum = %dn, 014 + 12 + 0 xc); return 0;2、浮點常量 數(shù)學中的實數(shù)包括有理數(shù)和無理數(shù)。其中,有理數(shù)包括整數(shù)和分數(shù);無理數(shù)是無限不循環(huán)小數(shù) 計算機中的浮點數(shù)(floating-point number)只能近似地表示值在某個范圍之內(nèi)的有理數(shù)和一些特殊值,如NAN(非數(shù)值)、+INF(正無

9、窮大)、-INF(負無窮大)等 浮點常量是非負的浮點數(shù),其十進制書寫形式有兩種:小數(shù)表示法 由數(shù)字09和小數(shù)點組成,必須有小數(shù)點123.00.4520.01.25123.4520.0指數(shù)表示法60000.0的指數(shù)表示法為6E40.000035的指數(shù)表示法為3.5e-5十進制整數(shù)常量E符號位 十進制整數(shù)常量浮點常量的小數(shù)表示法E符號位 十進制整數(shù)常量3、枚舉常量 枚舉常量是類型為int的標識符4、字符常量 ASCII碼-American Standard Code for Information Interchange 字符常量分為:整數(shù)字符常量(integer character consta

10、nt)寬字符常量(wide character constant) 整數(shù)字符常量是由一對單引號括起來的一個或多個字符,其類型為int,在內(nèi)存中占4個字節(jié)aababc 本課程討論的字符常量是指單引號內(nèi)只有一個字符的整數(shù)字符常量 單引號內(nèi)的字符可以是普通字符?A09 printf(%d, %d, %d, %d, A, b + 2, 0, 1 + 3); 單引號內(nèi)的字符還可以是轉(zhuǎn)義序列(escape sequence)141x61u03b1四、串字面量 串字面量分為三種:字符串字面量(character string literal)UTF-8串字面量(UTF-8 string literal)寬串

11、字面量(wide string literal) 本課程僅討論字符串字面量 字符串字面量是用一對雙引號括起來的零個或多個字符 在翻譯的第七個階段,空字符(null character)即 0 被加到字符串字面量的末尾,然后字符串字面量以數(shù)組元素類型為char的數(shù)組的形式存儲在內(nèi)存中 如果字符串字面量中不含0,則該字符串字面量又稱為字符串(character string),即字符串是以空字符0結(jié)束的連續(xù)字符序列ab0c 是字符串字面量,但不是字符串a(chǎn)bc 既是字符串字面量,又是字符串 字符串的長度是指空字符前的字符在內(nèi)存中所占的字節(jié)數(shù)。因此,長度為n的字符串,在內(nèi)存中占n + 1個字節(jié)字符串字

12、符串的長度占用內(nèi)存/字節(jié)01 12hello56hellon67hx65llon67c是字符常量,占4個字節(jié)c是字符串,占2個字節(jié)【例2.2】 輸出字符串#include int main(void) printf(12345678901234567890n); printf(abcnabdbcn); printf(efgr); printf(110 x49tijkn); return 0;五、標點符號2.2 類型 類型(type)分為:基本類型(basic type)枚舉類型(enumerated type)空類型(void)派生類型(derived type) 基本類型分為四種: char

13、有符號整數(shù)類型(signed integer type)標準有符號整數(shù)類型(standard signed integer type)擴展有符號整數(shù)類型(extended signed integer type)無符號整數(shù)類型(unsigned integer type)標準無符號整數(shù)類型(standard unsigned integer type)擴展無符號整數(shù)類型(extended unsigned integer type)浮點類型(floating type)實數(shù)浮點類型(real floating type)復數(shù)類型(complex type) 在聲明(declaration)中必

14、須使用類型說明符(type specifier) 本節(jié)中用斜體字表示類型說明符,例如:charsigned charint 或 signed 或 signed intunsigned charunsigned 或 unsigned intfloatdouble 字符類型(character type)包括:charsigned charunsigned char 整數(shù)類型(integer type)包括:char枚舉類型有符號整數(shù)類型無符號整數(shù)類型 實數(shù)類型(real type)包括:整數(shù)類型實數(shù)浮點類型 算數(shù)類型(arithmetic type)包括:整數(shù)類型浮點類型2.3 變量與常用類型說

15、明符一、變量 對象(object)是執(zhí)行環(huán)境中的數(shù)據(jù)存儲區(qū),其內(nèi)容表示值 變量(variable)是有名字的對象 變量聲明(variable declaration)的簡單形式:類型說明符 變量名1 , 變量名2, , 變量名n; 其中,變量名是一個標識符int area;int length, width; 變量必須先聲明后使用 C語言允許在程序的任何位置聲明變量,只要滿足先聲明后使用的原則即可 VC要求函數(shù)內(nèi)的變量聲明必須緊接在開始大括號之后【例2.3】 變量聲明的位置#include int main(void) int length, width; length = 10; width

16、 = 8; int area; / 符合C語言的語法,但在VC中是錯誤的 area = length * width; printf(area = %dn, area); return 0;#include int main(void) int length, width, area; length = 10; width = 8; area = length * width; printf(area = %dn, area); return 0;二、int 類型 int 屬于整數(shù)類型 在不同的C編譯系統(tǒng)中,int 類型的數(shù)據(jù)所占用的內(nèi)存大小不同,能表示的數(shù)據(jù)范圍也不同 在VC中,int 類型

17、的數(shù)據(jù)占 4 個字節(jié),能表示的數(shù)據(jù)范圍是-231231-1即:-21474836482147483647【例2.4】 int 類型數(shù)據(jù)的溢出#include int main(void) int x, y; x = 2147483646 + 1; y = 2147483646 + 2;/ 溢出 printf(x = %dn, x); printf(y = %dn, y); return 0;三、char 類型 char 屬于整數(shù)類型 char 類型的數(shù)據(jù)占1個字節(jié) 在VC中,char類型的數(shù)據(jù)默認能表示的數(shù)據(jù)范圍是 -128127【例2.5】 使用庫函數(shù) putchar 輸出字符#includ

18、e int main(void) char ch; ch = c; putchar(ch); putchar(o); putchar(155); putchar(n); return 0;【例2.6】 使用庫函數(shù) getchar 輸入小寫字母,輸出其對應的大寫字母#include int main(void) char ch; ch = getchar(); putchar(ch - 32); putchar(n); return 0; 【例2.7】 輸入兩個數(shù)字字符,求其和并輸出char ch1, ch2;int n1, n2, sum;ch1 = getchar();ch2 = getch

19、ar();n1 = ch1 - 0;n2 = ch2 - 0;sum = n1 + n2;printf(sum = %dn, sum);四、float 類型和 double 類型 float 和 double 都屬于實數(shù)浮點類型 雙精度浮點類型 double 比單精度浮點類型 float 的精度更高,表示數(shù)據(jù)的范圍更大 在不同的C編譯系統(tǒng)中,float 類型的數(shù)據(jù)和 double 類型的數(shù)據(jù)所占用的內(nèi)存大小不同,能表示的數(shù)據(jù)范圍也不同在VC中, float 和 double 的區(qū)別float類型數(shù)據(jù)double類型數(shù)據(jù)數(shù)據(jù)長度4字節(jié)8字節(jié)最小正值1382.225073

20、858507201410-308最大正值3.40282346610381.797693134862315810308精度6位15位 浮點常量默認是 double 類型,在浮點常量后加后綴 f 或 F 則是 float 類型7.45/ double 類型7.45f/ float 類型7.45F/ float 類型 在VC中,將double類型的浮點常量存放到float類型的變量中,會產(chǎn)生警告:truncation from const double to floatfloat price;price = 7.45;/ 產(chǎn)生警告double price;price = 7.45;float pri

21、ce;price = 7.45f;2.4 運算符與表達式一、表達式 表達式(expression)是由運算符(operator)和運算對象(operand)構(gòu)成的序列。表達式具有以下一個或多個功能:描述一個值的計算指定一個對象或一個函數(shù)產(chǎn)生副作用(side effect) 訪問易變對象(volatile object),修改對象或文件(file),或者調(diào)用包含這些操作的函數(shù)(function)都是副作用 基本表達式(primary expression)包括:標識符常量串字面量用小括號括起來的表達式generic選擇 根據(jù)運算符的運算對象的數(shù)量,可將運算符分為:單目運算符(unary oper

22、ator)雙目運算符(binary operator)三目運算符(ternary operator)二、乘法類運算符 乘法類運算符(multiplicative operators)有三個,分別是:乘法運算符 *除法運算符 /模運算符(又稱求余數(shù)運算符) % 乘法類運算符都是雙目運算符5.0 / 2.0的值是 2.55.0 / 2的值是 2.55 / 2.0的值是 2.55 / 2的值是 28 / -3的值是 -2表達式 5.0 / 2.0的值是 2.5表達式 5.0 / 2的值是 2.5表達式 5 / 2.0的值是 2.5表達式 5 / 2的值是 2表達式 8 / -3的值是 -2表達式 5

23、.0 % 2.0錯誤表達式 5.0 % 2錯誤表達式 5 % 2.0錯誤表達式 5 % 2的值是 1表達式 8 % -3的值是 2三、加法類運算符 加法類運算符(addtive operators)有兩個,分別是:加法運算符 +減法運算符 - 加法類運算符都是雙目運算符四、運算符的優(yōu)先級與結(jié)合性 優(yōu)先級(precedence)高的運算符先綁定(binding)運算對象6 + 2 * 5 結(jié)合性(associativity)分兩種:左結(jié)合性(left-associativity)右結(jié)合性(right-associativity) 優(yōu)先級相同的運算符按結(jié)合性綁定運算對象,左結(jié)合性指左邊的運算符先綁

24、定運算對象,依次向右進行;右結(jié)合性指右邊的運算符先綁定運算對象,依次向左進行6 - 3 + 53 + 7 - 2 * 53 + 7 - (2 * 5)(3 + 7) - (2 * 5)五、sizeof 運算符 sizeof 運算符是單目運算符,表達式的值是運算對象所占內(nèi)存大小(按字節(jié)計算),其運算對象是表達式或用小括號括起來的類型名printf(sizeof(char) = %dn, sizeof(char);printf(sizeof(int) = %dn, sizeof(int);printf(sizeof(float) = %dn, sizeof(float);printf(sizeof

25、(double) = %dn, sizeof(double);printf(sizeof 5 = %dn, sizeof 5); printf(sizeof A = %dn, sizeof A);printf(sizeof 5.0f = %dn, sizeof 5.0f);printf(sizeof 5.0 = %dn, sizeof 5.0);printf(sizeof hello = %dn, sizeof hello);int n;printf(sizeof n = %dn, sizeof n);printf(sizeof 2 + 3 = %dn, sizeof 2 + 3);print

26、f(sizeof(2 + 3) = %dn, sizeof(2 + 3);六、一元加運算符與一元減運算符一元加運算符(unary plus operator) + 是單目運算符,表達式的值是運算對象的值一元減運算符(unary minus operator) - 是單目運算符,表達式的值是運算對象的相反數(shù) 如果運算對象是整數(shù)類型,要先對運算對象的值進行整數(shù)提升(integer promotions),表達式的類型是提升以后的類型 對于常用類型char、int、float和double,只有char類型的值需要整數(shù)提升,即將char類型的值轉(zhuǎn)換為int類型的值char ch; printf(si

27、zeof +ch = %dn, sizeof +ch);printf(sizeof ch = %dn, sizeof ch);printf(sizeof -ch = %dn, sizeof -ch);printf(sizeof ch = %dn, sizeof ch);七、常用算術(shù)轉(zhuǎn)換 乘法類運算符的運算對象要執(zhí)行常用算術(shù)轉(zhuǎn)換(usual arithmetic conversions) 如果加法類運算符的兩個運算對象都是算術(shù)類型,也要執(zhí)行常用算術(shù)轉(zhuǎn)換 對于常用類型char、int、float和double,常用算術(shù)轉(zhuǎn)換的含義如下:如果其中一個運算對象是double類型,另一個運算對象的值被轉(zhuǎn)換

28、為double類型的值如果以上條件不滿足,并且其中一個運算對象是float類型,另一個運算對象的值被轉(zhuǎn)換為float類型的值如果以上兩個條件不滿足,對兩個運算對象進行整數(shù)提升,即char類型運算對象的值被轉(zhuǎn)換為int類型的值char ch1, ch2;int i;float f1, f2;double d;表達式 ch1 + d表達式 f1 + f2表達式 i * ch1表達式 ch1 - ch2八、賦值運算符 賦值運算符(assignment operators)是雙目運算符,分為兩種:簡單賦值運算符(simple assignment operator)復合賦值運算符(compound a

29、ssignment operators)1、簡單賦值運算符 簡單賦值運算符(在不至混淆的情況下又稱賦值運算符)是 =,賦值表達式(assignment expression)有兩個功能:求賦值表達式的值產(chǎn)生副作用 賦值表達式的值是賦值以后左運算對象的值 賦值表達式的類型是左運算對象的類型 副作用是將右運算對象的值轉(zhuǎn)換為賦值表達式的類型的值,并將轉(zhuǎn)換后的值存儲到左運算對象中 注意:右運算對象的類型并沒有改變double d;表達式 d = 9【例2.10】 求賦值表達式的值#include int main(void) int a, b; printf(%dn, a = b = 2 + 3);

30、printf(a = %dn, a); printf(b = %dn, b); return 0; 賦值運算符的左運算對象必須是可修改的左值(modifiable lvalue) 基本類型的變量屬于可修改的左值 左值(lvalue)是一個表達式(具有除void以外的對象類型)。該表達式潛在地標明一個對象,即左值是可以標明一塊內(nèi)存的表達式 右值(rvalue)是表達式的值表達式 5 = 2 + 3 是錯誤的 在變量聲明時給變量賦值,稱為初始化(initialization)int i = 0;double d1 = 3.6, d2 = 7.2;int a = b = c = 100;/ 錯誤in

31、t a = 100, b = 100, c = 100;/ 正確 賦值運算符的兩個運算對象的類型不同時發(fā)生的類型轉(zhuǎn)換,可能會丟失數(shù)據(jù)int i;表達式 i = 3.6char ch;表達式 ch = a對于常用類型char、int、float和double,按下表進行的類型轉(zhuǎn)換通常是可接受的左運算對象的類型右運算對象的類型doublefloat、int 或 charfloatint 或 charintchar 當左運算對象的類型為 int,右運算對象的類型為 float 或 double 時,截斷取整#include int main(void) int i; printf(%dn, i =

32、3.6); printf(i = %dn, i); return 0;2、復合賦值運算符 簡復合賦值運算符有10個,本節(jié)介紹其中的5個,分別是:*=/=%=+=-= 除了左值E1僅被計算一次,賦值表達式 E1 op= E2 等價于E1 = E1 op (E2), 其中,op是*、/、%、+ 或 - 中的任何一個r *= 2 + 3等價于r = r * (2 + 3)#include int main(void) int r; r = 3; printf(%dn, r *= 2 + 3); printf(r = %dn, r); return 0; 執(zhí)行序列中某些特定的點被稱為序點(sequen

33、ce point) 表達式A和表達式B之間有序點,意味著與表達式A相關(guān)的每一個值計算和副作用完成后,與表達式B相關(guān)的每一個值計算和副作用才開始 如果與表達式相關(guān)的副作用有多個,C語言并沒有規(guī)定這多個副作用發(fā)生的先后次序,僅規(guī)定這多個副作用在序點之前完成int a = 12;a += a -= a * a;/ 不推薦使用九、后綴增1運算符與后綴減1運算符 后綴增1運算符(postfix increment operator)是 +,屬于單目運算符,其運算對象必須是可修改的左值表達式 5+ 是錯誤的 由后綴增1運算符和運算對象構(gòu)成的表達式有兩個功能:求表達式的值產(chǎn)生副作用 求表達式的值在副作用之前

34、完成 表達式的值是運算對象的值;表達式的類型是運算對象的類型 副作用是使運算對象的值增1 后綴減1運算符(postfix decrement operator)是 -,除了副作用是使運算對象的值減1以外,后綴減1運算符與后綴增1運算符是類似的int a = 20, b = 10;printf(%dn, a+);printf(a = %dn, a);printf(%dn, b-);printf(b = %dn, b);十、前綴增1運算符與前綴減1運算符 前綴增1運算符(prefix increment operator)是 +,屬于單目運算符,其運算對象必須是可修改的左值表達式 +5 是錯誤的

35、由前綴增1運算符和運算對象構(gòu)成的表達式有兩個功能:求表達式的值產(chǎn)生副作用 表達式的值是運算對象的值加1;表達式的類型是運算對象的類型 副作用是使運算對象的值增1 表達式 +E 等價于 E += 1 前綴減1運算符(prefix decrement operator)是 -,除了“表達式的值是運算對象的值減1”和“副作用是使運算對象的值減1”以外,前綴減1運算符與前綴增1運算符是類似的int a = 20, b = 10;printf(%dn, +a);printf(a = %dn, a);printf(%dn, -b);printf(b = %dn, b);int a = 3, b;b = +

36、a + 2;十一、類型轉(zhuǎn)換運算符 類型轉(zhuǎn)換運算符(cast operator)是 (type-name),屬于單目運算符,表達式的值是將運算對象的值轉(zhuǎn)換為 type-name 類型得到的值,表達式的類型是 type-name 注意:運算對象的類型并沒有改變double d = 8.7;printf(%dn, (int)d % 3);printf(sizeof d = %dn, sizeof d);printf(d = %fn, d);十二、逗號運算符 逗號運算符(comma operator) “,”是雙目運算符,表達式的值是右運算對象的值,表達式的類型是右運算對象的類型表達式 5 , 3.6

37、 逗號運算符的兩個運算對象之間有序點int a = 3, b = 5, t;t = a;a = b;b = t;等價于int a = 3, b = 5, t;t = a , a = b , b = t; 逗號既是分隔符也是運算符printf(%d %d, 10, (20, 30);第三章 順 序 結(jié) 構(gòu)程序設(shè)計基礎(chǔ)(C語言版)第3章:順序結(jié)構(gòu)3.1 結(jié)構(gòu)化程序設(shè)計3.1.1 算法的基本概念程序?qū)?shù)據(jù)的處理流程: 程序的主要功能就是對數(shù)據(jù)的處理,其整個流程主要包括數(shù)據(jù)的輸入、數(shù)據(jù)的處理、數(shù)據(jù)的輸出。數(shù)據(jù)處理數(shù)據(jù)輸入數(shù)據(jù)輸出 程序 = 數(shù)據(jù)結(jié)構(gòu) + 算法。 算法:簡而言之,就是解決問題的方法與步驟

38、。 程序設(shè)計語言:是程序開發(fā)工具,即是將算法轉(zhuǎn)化為程序的開發(fā)工具。 程序:算法的具體實現(xiàn)。 學習C語言,不僅要熟練掌握其語言本身的特點、語法規(guī)則等意外,更重要的就是掌握分析問題、解決問題的方法,就是鍛煉分析、分解,最終歸納整理出算法的能力。 3.1.1 算法的基本概念3.1.2 流程圖 算法的結(jié)構(gòu)化描述(1) 順序結(jié)構(gòu)ABCA條件ABTF(2) 分支結(jié)構(gòu)條件TF(3) 循環(huán)結(jié)構(gòu)ATF條件A條件TF3.2 語句 語言程序的執(zhí)行部分是由語句組成的。程序的功能也是由執(zhí)行語句實現(xiàn)的。C語言中的語句可以分為以下5類: 3.2.1 表達式語句 由表達式加上分號“;”組成。其一般形式為:表達式; a = 1

39、0 賦值表達式a = 10; 賦值語句k+ 表達式k+; 表達式語句 說明: (1) “”后不加分號 (2) 語法上和單一語句相同 (3) 復合語句可嵌套 (4) 復合語句內(nèi)定義的變量只能在復合語句內(nèi)使用。 3.2.2 復合語句 用 括起來的一組語句。 一般形式為: 數(shù)據(jù)說明部分; 執(zhí)行語句部分; int a = 2, b = 3, c; c = a + b; printf (c = %dn, c); #include void main ( ) int x = 10, y = 20, z; z = x + y; int z; z = x * y; printf (z = %dn, z); /

40、輸出復合語句中z的值 printf (z = %dn, z); /輸出復合語句外z的值輸出結(jié)果:z = 200z = 303.3 常用數(shù)據(jù)類型輸出和輸入3.3.1 數(shù)據(jù)輸入/輸出的概念庫函數(shù)printf 用于向顯示器輸出數(shù)據(jù);庫函數(shù)scanf 用于從鍵盤輸入數(shù)據(jù)。使用這兩個庫函數(shù),必須包含頭文件stdio.h。3.3.2 常用類型數(shù)據(jù)和字符串的輸出 一般格式printf (格式控制字符串,表達式1,表達式2,表達式n); 功能 按照“格式控制字符串”的要求,將表達式1,表達式2,表達式n的值顯示在計算機屏幕上。 說明 格式控制字符串用于指定輸出格式。它包含兩類字符: 常規(guī)字符:包括可顯示字符和

41、用轉(zhuǎn)義字符表示的字符。 格式控制符:以%開頭的一個或多個字符,以說明輸出數(shù)據(jù)的類型、形式、長度、小數(shù)位數(shù)等。其格式為:%修飾符格式轉(zhuǎn)換字符例: long int x = 0 x8AB6; printf (“The Value of x is %ldn”, x); printf使用時的注意事項(1) 格式控制字符串可以不包含任何格式控制符。(2) 當格式控制字符串中既含有常規(guī)字符,又包含有格式控制符時,則表達式的個數(shù)應與格式控制符的個數(shù)一致。此時,常規(guī)字符原樣輸出,而格式控制符的位置上輸出對應的表達式的值,其對應的順序是:從左到右的格式控制符對應從左到右的表達式。(3) 如果格式控制字符串中格式

42、控制符的個數(shù)多于表達式的個數(shù),則余下的格式控制符的值將是不確定的。(4) 不同類型的表達式要使用不同的格式轉(zhuǎn)換符,同一表達式如果按照不同的格式轉(zhuǎn)換符來輸出,其結(jié)果可能是不一樣的。 printf (“how are you?n”); /只有一個字符串參數(shù), 輸出為:how are you?printf (“how old are you?n”, 20); /帶有兩個參數(shù),20沒有意義, 輸出為:how old are you?已 知: int a = 2;函數(shù)調(diào)用: printf(a * a = %d, a + 5 = %dn, a * a, a + 5);實際輸出: a * a = 4, a

43、+ 5 = 7 printf (5 + 3 = %d, 5 - 3 = %d, 5 * 3 = %d, 5 + 3, 5 - 3); 輸出結(jié)果將是:5 + 3 = 8,5 3 = 2,5 * 3 = -28710輸出隨機char ch = A;printf (ch = %c, ch); /輸出結(jié)果:ch = A (以字符形式輸出)printf (ch = %d, ch); /輸出結(jié)果:ch = 65 (以A字符的ASCII碼形式輸出) printf函數(shù)中的格式轉(zhuǎn)換字符及其含義 格式轉(zhuǎn)換符含 義對應的表達式數(shù)據(jù)類型%d 或 %i以十進制形式輸出一個整型數(shù)據(jù)。例如:int a = 20;print

44、f (%d, a); /輸出20有符號整型%x,%X以十六進制形式輸出一個無符號整型數(shù)據(jù)。例如:int a = 164;printf (%x, a); /輸出a4printf (%X, a); /輸出A4無符號整型%o ( 字母o )以八進制形式輸出一個無符號整型數(shù)據(jù)。例如:int a = 164;printf (%o, a); /輸出244無符號整型%u以十進制形式輸出一個無符號整型數(shù)據(jù)。例如:int a = -1;printf (%u, a); /BC下輸出65535,VC下4294967295無符號整型%c輸出一個字符型數(shù)據(jù)。例如:char ch = A;printf (%c, ch);

45、 /輸出A字符型 printf函數(shù)中的格式轉(zhuǎn)換字符及其含義 格式轉(zhuǎn)換符含 義對應的表達式數(shù)據(jù)類型%s輸出一個字符串。例如:printf (my name is %s, wangjinghua); /輸出my name is wangjinghua字符串%f以十進制小數(shù)形式輸出一個浮點型數(shù)據(jù)。例如:float f = -12.3;printf (%f, f); /輸出-12.300000浮點型%e,%E以指數(shù)形式輸出一個浮點型數(shù)據(jù)。例如:float f = 1234.8998;printf (%e, f); /輸出1.234900e+003printf (%E, f); /輸出1.234900E

46、+003浮點型%g,%G按照%f或%e中輸出寬度比較短的一種格式輸出。浮點型%p以主機的格式顯示指針,即變量的地址。例如:int a = 2;printf (“%p”, &a); /BC下輸出FFD8, VC下 0012FF7C指針類型3.3.3 常用類型數(shù)據(jù)的輸入 一般格式scanf (“格式控制字符串”,變量1的地址,變量2的地址,變量n的地址); 功能 第一個參數(shù)格式控制字符串的控制下,接受用戶的鍵盤輸入,并將輸入的數(shù)據(jù)依此存放在變量1、變量2、變量n中 。 int a;scanf (%d, &a); 取地址運算符(與按位“與”同符號),只能作用于變量! 格式控制符與后續(xù)參數(shù)中的變量地址

47、的對應關(guān)系 已 知: int a , b;函數(shù)調(diào)用: scanf (%d%d, &a , &b);假設(shè)輸入: 1020 變量的值: a的值是10,b的值是20【例】數(shù)據(jù)的格式化輸入 輸入一學生的學號(8位數(shù)字)、生日(年-月-日)、性別(M:男,F(xiàn):女)及三門功課(語文、數(shù)學、英語)的成績,現(xiàn)要求計算該學生的總分和平均分,并將該學生的全部信息輸出(包括總分、平均分)。#include void main ( ) unsigned long no; /學號 unsigned int year, month, day; /生日(年、月、日) unsigned char sex; /性別 float

48、 chinese, math, english; /語文、數(shù)學、英語成績 float total, average; /總分、平均分 printf (input the students NO: ); scanf (%8ld, &no); printf (input the students Birthday(yyyy-mm-dd): ); scanf (%4d-%2d-%2d, &year, &month, &day); fflush (stdin); /清除鍵盤緩沖區(qū) printf (input the students Sex(M/F): ); scanf (%c, &sex); pri

49、ntf (input the students Scores(chinese, math, english): ); scanf (%f,%f,%f, &chinese, &math, &english); total = chinese + math + english; /計算總分 average = total / 3; /計算平均分 printf (n=NO=birthday=sex=chinese=math= english=total=averagen); printf (%08ld %4d-%02d-%02d %c %-5.1f %-5.1f %-5.1f %-5.1f %-5.

50、1fn, no, year, month, day, sex, chinese, math, english, total, average);假設(shè)輸入 :input the students NO:20040101input the students Birthday(yyyy-mm-dd):1987-9-8input the students Sex(M/F):Minput the students Scores(chinese, math, english):90,80,90輸出結(jié)果 :=NO=birthday=sex=chinese=math=english=total=average

51、20040101 1987-09-08 M 90.0 80.0 90.0 260.0 86.7 一般形式: :表示可選項,可缺省。 :表示輸出的數(shù)據(jù)左對齊,缺省時是右對齊。 :輸出正數(shù)時,在數(shù)的前面加上號。 數(shù)字0:右對齊時,如果實際寬度小于width,則在左邊的空位補0。 width:無符號整數(shù),表示輸出整數(shù)的最小域?qū)挘凑计聊坏亩嗌俑瘢?。若實際寬度超過了width,則按照實際寬度輸出。 .precision:無符號整數(shù),表示至少要輸出precision位。若整數(shù)的位數(shù)大于precision,則按照實際位數(shù)輸出,否則在左邊的空位上補0。 字母l:如果在d的前面有字母l(long),表示要輸出

52、長整型數(shù)據(jù)。 字母h:如果在d的前面有字母h(short),表示要輸出短整型數(shù)據(jù)。 說明:%- + 0 width .precision l h d輔助格式控制字符(修飾符) 3.4 庫函數(shù)printf詳解【例】整數(shù)的格式化輸出 #include void main ( ) int a = 123; long L = 65537; printf ( 12345678901234567890n); printf (a=%d-(a=%d)n, a); printf (a=%6d-(a=%6d)n, a); printf (a=%+6d-(a=%+6d)n, a); printf (a=%-6d-(

53、a=%-6d)n, a); printf (a=%-06d-(a=%-06d)n, a); printf (a=%+06d-(a=%+06d)n, a); printf (a=%+6.6d-(a=%+6.6d)n, a); printf (a=%6.6d-(a=%6.6d)n, a); printf (a=%-6.5d-(a=%-6.5d)n, a); printf (a=%6.4d-(a=%6.4d)n, a); printf (L=%ld-(L=%ld)n, L); printf (L=%hd-(L=%hd)n, L); 12345678901234567890a=123-(a=%d)a=

54、 123-(a=%6d)a= +123-(a=%+6d)a=123 -(a=%-6d)a=123 -(a=%-06d)a=+00123-(a=%+06d)a=+000123-(a=%+6.6d)a=000123-(a=%6.6d)a=00123 -(a=%-6.5d)a= 0123-(a=%6.4d)L=65537-(L=%ld)L=1-(L=%hd)運行結(jié)果:L是一長整型數(shù)65537,其值為十六進制0X00010001,所以要將其轉(zhuǎn)換成短整型,即取低16位0 x0001,將其輸出,故輸出為1。 Why?實數(shù)的輸出 一般形式: :表示可選項,可缺省。 | :表示互斥關(guān)系。 #:必須輸出小數(shù)點。

55、 .precision:規(guī)定輸出實數(shù)時,小數(shù)部分的位數(shù)。 l:輸出double型數(shù)據(jù)(缺省時也是輸出double型數(shù)據(jù))。 L:輸出long double型數(shù)據(jù)。 其它字段的含義與前面介紹的相同。 說明:%- + # 0 width .precision l | L f | e | E | g | G輔助格式控制字符(修飾符) 【例】實數(shù)的格式化輸出 #include void main ( ) double f = 2.5e5; printf ( 12345678901234567890n); printf (f=%15f-(f=%15f)n, f); printf (f=%015f-(f=

56、%015f)n, f); printf (f=%-15.0f-(f=%-15.0f)n, f); printf (f=%#15.0f-(f=%#15.0f)n, f); printf (f=%+15.4f-(f=%+15.4f)n, f); printf (f=%15.4E-(f=%15.4E)n, f); 12345678901234567890f= 250000.000000-(f=%15f)f=00250000.000000-(f=%015f)f=250000 -(f=%-15.0f)f= 250000.-(f=%#15.0f)f= +250000.0000-(f=%+15.4f)f=

57、2.5000E+005-(f=%#15.4E)運行結(jié)果:字符和字符串的輸出 一般形式: :表示可選項,可缺省。 .precision:表示只輸出字符串的前precision個字符。 其它字段的含義與前面介紹的相同。 說明: 輸出字符: %- 0 width c 輔助格式控制字符(修飾符) 輸出字符串: %- 0 width .precision s 輔助格式控制字符(修飾符) 【例】字符及字符串的格式化輸出 #include void main ( ) char ch = A; printf ( 12345678901234567890n); printf (ch=%c-(ch=%c)n, c

58、h); printf (ch=%4c-(ch=%4c)n, ch); printf (ch=%-4c-(ch=%-4c)n, ch); printf (ch=%04c-(ch=%04c)n, ch); printf (st=%s-(st=%s)n, “WUSE); printf (st=%6s-(st=%6s)n, “WUSE); printf (st=%06.3s-(st=%06.3s)n, “WUSE); 12345678901234567890ch=A-(ch=%c)ch= A-(ch=%4c)ch=A -(ch=%-4c)ch=000A-(ch=%04c)st=WUSE-(st=%s)

59、st= WUSE-(st=%6s)st=000WUS-(st=%06.3s)運行結(jié)果:輔助格式控制符(修飾符)小結(jié) 修飾符功 能例 子width輸出數(shù)據(jù)域?qū)?,?shù)據(jù)長度width,補空格;否則按實際輸出%4d:表示輸出至少占4格.precision對于整數(shù):表示至少要輸出precision位,當數(shù)據(jù)長度小于precision,左邊補0%6.4d:表示至少要輸出4位數(shù)對于實數(shù):指定小數(shù)點后位數(shù)(四舍五入)%6.2f:表示輸出2位小數(shù)對于字符串:表示只輸出字符串的前precision個字符%.3s:表示輸出字符串前3個字符輸出數(shù)據(jù)在域內(nèi)左對齊(缺省右對齊)%-16d:表示輸出數(shù)據(jù)左對齊+輸出有符號正

60、數(shù)時,在其前面顯示正號(+)%+d:表示輸出整數(shù)的正負號0輸出數(shù)值時,指定左邊不使用的空格自動填0%08X:表示輸出十六進制無符號整數(shù),不足8位時左補0輔助格式控制符(修飾符)小結(jié) 修飾符功 能例 子#對于無符號數(shù):在八進制和十六進制數(shù)前顯示前導0,0 x或0X%#X:表示輸出的十六進制前顯示前導0X對于實數(shù):必須輸出小數(shù)點%#10.0f:表示輸出的浮點數(shù)必須輸出小數(shù)點h在d、o、x、u前,指定輸出為短整型數(shù)%hd:表示輸出短整型數(shù)l在d、o、x、u前,指定輸出為long int型%ld:表示輸出長整型數(shù)在e、f、g前,指定輸出精度為double型(缺省也為double)%lf:表示輸出為do

溫馨提示

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

評論

0/150

提交評論