C語言程序設(shè)計完整版教學(xué)課件全書電子講義(最新)_第1頁
C語言程序設(shè)計完整版教學(xué)課件全書電子講義(最新)_第2頁
C語言程序設(shè)計完整版教學(xué)課件全書電子講義(最新)_第3頁
C語言程序設(shè)計完整版教學(xué)課件全書電子講義(最新)_第4頁
C語言程序設(shè)計完整版教學(xué)課件全書電子講義(最新)_第5頁
已閱讀5頁,還剩470頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C語言程序設(shè)計第一講 程序設(shè)計與C語言(2學(xué)時) 計算機學(xué)院主要內(nèi)容1.1 程序設(shè)計課程目標(biāo)1.2 程序設(shè)計概述1.3 C語言概述21.1 程序設(shè)計課程目標(biāo)課程要求課程目標(biāo)3課程要求學(xué)會從計算機角度思考問題培養(yǎng)學(xué)生邏輯思維能力和面向過程的程序設(shè)計方法能夠針對非數(shù)值計算的具體問題選擇合理的存儲結(jié)構(gòu)及構(gòu)造較有效率的算法運用C語言編制結(jié)構(gòu)清晰、可讀性好的程序會設(shè)計測試用例,完成程序的測試,能撰寫該程序的技術(shù)報告具備面向過程程序的獨立設(shè)計及實現(xiàn)能力45用計算機解決問題示例某地刑偵大隊對涉及6個嫌疑人的一樁疑案進(jìn)行分析得到以下結(jié)論,試編一程序,將作案人找出來。A、B至少有1人作案;A、E、F 3人中至少

2、有2人參與作案;A D不可能是同案犯;B、C或同時作案,或都與本案無關(guān):C、D中有且僅有1人作案;如果D沒有參與作案,則E也不可能參與作案。課程目標(biāo)61.培養(yǎng)邏輯思維和程序設(shè)計思想,重點培養(yǎng)分析問題和使用C語言進(jìn)行程序設(shè)計以解決實際問題的能力。2.熟練掌握C語言基礎(chǔ)知識、C語言程序結(jié)構(gòu)、語法及函數(shù)庫、簡單算法和數(shù)據(jù)結(jié)構(gòu)的設(shè)計方法。3.了解并初步掌握當(dāng)前軟件行業(yè)公認(rèn)的程序設(shè)計風(fēng)格和規(guī)范,增強程序可讀性和易擴展性;能夠熟練使用一種常用的編程工具和集成開發(fā)環(huán)境進(jìn)行程序設(shè)計、編譯、測試及調(diào)試。1.2 程序設(shè)計概述程序設(shè)計語言發(fā)展語言實現(xiàn)及開發(fā)環(huán)境78程序無處不在計算機移動設(shè)備外設(shè)智能設(shè)備9什么是程序一

3、系列遵循一定規(guī)則并能正確完成特定功能的代碼或指令序列通常包括數(shù)據(jù)結(jié)構(gòu)與算法兩部分#include int main() int a=3,b=2,c=5; int d=a*b+c; printf(ab+c=%dn, d); return 0;源程序a.c可執(zhí)行程序編譯鏈接01100111100110程序設(shè)計語言及其發(fā)展程序設(shè)計語言一套規(guī)范的集合,主要包括該語言使用的字符集,直接和間接支持的數(shù)據(jù)類型集合、運算符集合、關(guān)鍵字集合、指令集合、語法規(guī)則、以及對特定構(gòu)造的支持。11程序設(shè)計語言及其發(fā)展1834第一臺機械式計算機(最早的程序員Ada)1896最早的程序載體穿孔卡片1937“圖靈機”數(shù)學(xué)模型1

4、952MIT創(chuàng)建了匯編語言1953IBM研制Fortran語言1965BASIC語言出現(xiàn)1972貝爾實驗室發(fā)明C語言20世紀(jì)80年代貝爾實驗室發(fā)明C+語言1983Borland公司研制Turbo Pascal1991 - Python1995Java語言誕生2002Microsoft發(fā)布.NET12程序設(shè)計語言及其發(fā)展機器語言匯編語言高級語言(C,Java,C+,C#)13高級語言編譯問題:計算d=ab+c00000001000000001000 將單元1000的數(shù)據(jù) (a) 裝入寄存器000000001000100001010 將單元1010的數(shù)據(jù) (b) 裝入寄存器100000101000

5、000000001 將寄存器1的數(shù)據(jù)乘到寄存器0上 (axb)00000001000100001100 將單元1100的數(shù)據(jù) (c) 裝入寄存器100000100000000000001 將寄存器1的數(shù)據(jù)累加到寄存器0上 (axb+c)00000010000000001110 將寄存器0的數(shù)據(jù)寫入內(nèi)存單元1110 (d=axb+c)機器語言load 0 a 將單元1000的數(shù)據(jù) (a) 裝入寄存器0load 1 b 將單元1010的數(shù)據(jù) (b) 裝入寄存器1mult 0 1 將寄存器1的數(shù)據(jù)乘到寄存器0上 (axb)load 1 c 將單元1100的數(shù)據(jù) (c) 裝入寄存器1add 0 1 將

6、寄存器1的數(shù)據(jù)累加到寄存器0上 (axb+c)save 0 d 將寄存器0的數(shù)據(jù)寫入內(nèi)存單元1110 (d=axb+c)匯編語言d=a*b+c高級語言程序設(shè)計語言熱度(TIOBE Index)程序設(shè)計語言熱度(TIOBE Index)16語言實現(xiàn)具體地實現(xiàn)一種語言的各種特征并支持特定的編程模式的技術(shù)和工具。表現(xiàn)形式:編譯器(Compiler)和連接器(Linker)。語言是標(biāo)準(zhǔn)的但語言實現(xiàn)是因廠家而異的常見C語言實現(xiàn):Borland C、Microsoft C、GCC 17開發(fā)環(huán)境泛指支持軟件開發(fā)的一切工具操作系統(tǒng)代碼編輯器編譯器鏈接器調(diào)試器18開發(fā)環(huán)境集成開發(fā)環(huán)境(IDE)將編輯器、編譯器、

7、連接器和調(diào)試器集成在一起的開發(fā)工具C/C+集成開發(fā)環(huán)境:Dev C+Code BlocksVisual C+Eclipse19命令行下需要記住編譯命令不方便調(diào)試集成開發(fā)環(huán)境下操作方便,但后臺仍然是以命令行方式運作V.S.1.3 C語言概述C語言簡介(特點,發(fā)展等)C程序框架(主函數(shù),語句,注釋等)2021C語言能做什么純粹的C語言只能做計算和文字處理擴充了函數(shù)庫的C語言幾乎可以完成任何和程序控制有關(guān)的任務(wù)C語言和第三方函數(shù)庫,可以完成應(yīng)用程序設(shè)計,嵌入式程序設(shè)計,驅(qū)動程序設(shè)計,游戲,.22C語言簡介C 語言簡史演變:ALGOL 60CPL BCPL B C 1973 Dennis Ritchi

8、e & Brian Kernighan (Bell Labs.)為開發(fā) UNIX 而設(shè)計 C 語言的標(biāo)準(zhǔn)化ANSI C 標(biāo)準(zhǔn)化委員會:1983C89和C90C99C1123C語言特點中級語言:介于高級語言與低級語言之間高級語言的結(jié)構(gòu)化與模塊化(高級語言基本特性)低級語言的控制性與靈活性(指針,位操作)結(jié)構(gòu)化順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)模塊化函數(shù)、函數(shù)庫可移植性雖然可在多種系統(tǒng)下使用,但可移植性不是非常好24第一個C程序/* hello.c: The first program author: wanbo date: 2017/10/9*/ #include int main() / singl

9、e line comment printf( * Hello, world *n ); return 0; 25C源程序構(gòu)成頭文件包含條件編譯語句宏定義說明部分全局變量函數(shù)聲明其它函數(shù)主函數(shù)(main)執(zhí)行部分常量/* hello.c: The first program author: wanbo date: 2010/10/9*/ #include int main() / single line comment printf( * hello, world*n ); return 0; 預(yù)處理部分26一個最簡單的C程序框架#include int main() return 0; 在這里

10、可以添加完成特定任務(wù)的代碼這個頭文件是絕大多數(shù)C程序必須包含的程序結(jié)束27main函數(shù)main函數(shù)的兩種常見形式int main( ) return 0;int main( int argc, char *argv ) return 0;命令行參數(shù)28main函數(shù)C程序中可以有多個函數(shù)但必須有且只能有一個main函數(shù)所有C程序都從main函數(shù)開始執(zhí)行main函數(shù)的名字不能改變(包括大小寫)main函數(shù)由系統(tǒng)調(diào)用Main和main是不同的29語句和注釋語句包含一個或多個表達(dá)式數(shù)值運算、函數(shù)調(diào)用等語句以英文分號(;)結(jié)束一條語句可以分成多行書寫C語言使用自由格式的語法自由格式與代碼風(fēng)格注釋多行注釋

11、用/* */來分界單行注釋用/開頭/* 多行注釋 hello.c: The first program author: wanbo date: 2017/10/9*/ #include int main() / 單行注釋 printf( * hello, world*n ); return 0; 30自由格式與代碼風(fēng)格#include int main() printf( hello world ) ; return 0; #include int main() printf( hello worldn ) ; return 0;#include int main() printf( hell

12、o world ) ; return 0; 良好的代碼風(fēng)格適當(dāng)?shù)淖⑨屵m當(dāng)?shù)膿Q行適當(dāng)?shù)目s進(jìn)適當(dāng)?shù)目招蠽.S.31建立一個可執(zhí)行程序編輯(Edit)編譯(Compile)鏈接(Link)f1.hf2.hf3.hs1.cs2.cprog.exe鏈接s1.objs2.obj編譯編輯32命令行程序和GUI程序Windows下的文件復(fù)制命令行程序和GUI程序命令行下的文件復(fù)制33命令行程序和GUI程序一個C語言完成的文件復(fù)制程序(fcopy.c)34命令行才是本質(zhì)邏輯,GUI只是建立在本質(zhì)邏輯上的用戶接口。#include #include #define BUF_SIZE 1024int main(in

13、t argc,char *argv) FILE *fp1,*fp2; unsigned char bufBUF_SIZE; int n; fp1=fopen(argv1,rb); fp2=fopen(argv2,wb); do n=fread(buf,1,BUF_SIZE,fp1); fwrite(buf,1,n,fp2); while(n=BUF_SIZE); fclose(fp1); fclose(fp2); return 0;35小結(jié)重點1:了解程序設(shè)計相關(guān)概念重點2:熟悉C語言源程序框架重點3:熟悉集成開發(fā)環(huán)境的使用重點4:熟悉計算機基本操作及命令行重點5:熟悉機試系統(tǒng)使用36作業(yè)完成

14、平臺上的學(xué)習(xí)在你的開發(fā)環(huán)境中編譯、運行本節(jié)中的兩個程序試著修改第一個程序(hello.c)讓它輸出別的內(nèi)容熟悉C語言源程序結(jié)構(gòu)熟悉命令行用法C語言程序設(shè)計第二講 數(shù)據(jù)對象與計算(4學(xué)時) 計算機學(xué)院一個溫度轉(zhuǎn)換的問題已知華氏溫度(用f表示)到攝氏溫度(用c表示)的轉(zhuǎn)換公式為:c = 5/9 (f-32),寫一個程序?qū)⑤斎氲娜A氏溫度轉(zhuǎn)換為攝氏溫度,輸出結(jié)果保留兩位小數(shù)381. 已知(輸入):華氏溫度f2. 計算過程:c = 5/9 (f-32)3. 結(jié)果(輸出):輸出攝氏溫度c問題轉(zhuǎn)換為程序需要解決的問題1. c和f在程序中用什么名字表示(標(biāo)識符問題)?2. c和f在程序中用什么數(shù)據(jù)類型表示?3

15、. c和f的值如何給定?(輸入和賦值問題)4. 數(shù)學(xué)表達(dá)式c = 5/9 (f-32) 在C程序中如何表示及計算(C語言表達(dá)式、運算符、優(yōu)先級)?5. 如何輸出c的值?(輸出、精度控制)39目標(biāo)用C語言程序解決簡單計算問題掌握數(shù)據(jù)對象的表示方法掌握C語言表達(dá)式的寫法掌握C語言輸入/輸出方法40主要內(nèi)容數(shù)據(jù)對象表示2.1 基本字符、標(biāo)識符、關(guān)鍵字2.2 數(shù)據(jù)、類型、變量計算過程2.3 運算符、表達(dá)式與計算用戶交互2.4 結(jié)果輸出與數(shù)據(jù)輸入小結(jié)412.1 基本字符、標(biāo)識符、關(guān)鍵字解決數(shù)據(jù)對象命名問題在C語言中可以使用哪些字符?在C語言中給對象命名要遵循哪些規(guī)則?是否符合命名規(guī)則的名字都可以使用?4

16、2基本字符數(shù)字字符:09大小寫拉丁字母:az,AZ;其他一些可打?。梢燥@示)的字符,包括: !%&*()_-+= :;, . ? / | 特殊字符,如空格符、換行符、制表符等431.在注釋中可以使用2.在雙引號內(nèi)可以使用中文字符能否使用?對象命名規(guī)則程序中一個程序?qū)ο蟮拿址Q為標(biāo)識符,該名字必須滿足以下規(guī)則由字母、數(shù)字和下劃線(_)構(gòu)成的一個連續(xù)序列,不能有空白字符(鍵盤上的空格鍵、TAB鍵)第一個字符必須是字母或下劃線_(注意下劃線_與橫線-的區(qū)別)區(qū)別大小寫:NAME和name是不同的標(biāo)識符44標(biāo)識符示例45標(biāo)識符合法性abcdA_great_machineBeijingkey map3

17、set_f2048:ab4C_Programming合法合法合法合法合法不合法不合法不合法標(biāo)識符命名慣例盡量使用有意義的單詞第一個字符盡量不使用下劃線標(biāo)識符由多個單詞構(gòu)成時可以每個單詞首字母大寫標(biāo)識符不宜太長,可以適當(dāng)使用簡寫保持命名風(fēng)格的一致性46幾種常見命名規(guī)則駝峰命名法(Camel)混合使用大小寫字母來構(gòu)成變量和函數(shù)的名字例如:MyData匈牙利命名法(Hungarian)在變量名前面加上相應(yīng)的小寫字母的符號標(biāo)識作為前綴,標(biāo)識出變量的作用域,類型等例如:iMyData帕斯卡(Pascal)命名法: 與駱駝命名法類似只不過駱駝命名法是首字母大寫,而帕斯卡命名法是首字母小寫例如:myData

18、47關(guān)鍵字C語言合法標(biāo)識符中的一個特殊的小集合作為關(guān)鍵字的標(biāo)識符在程序里具有語言預(yù)先定義好的特殊意義,不能用于其他目的不能作為普通的名字(標(biāo)識符)使用48C語言的32個關(guān)鍵字49auto break case charconst continue default dodouble else enum externfloat for goto ifint long register returnshort signed sizeof staticstruct switch typedef unionunsigned void volatile while問題轉(zhuǎn)換為程序需要解決的問題1. 攝氏溫度

19、c和華氏溫度f在程序中用什么名字表示(標(biāo)識符問題)?50可以就用c表示攝氏度,f表示華氏度問題轉(zhuǎn)換為程序(版本0)下面的程序正確嗎?51int main() f=20; c=5/9*(f-32); return 0; 如何才能讓C語言編譯器識別c和f?Error f undeclaredError c undeclared 2.2 數(shù)據(jù)、類型、變量解決數(shù)據(jù)對象的存儲和表示問題計算機對不同的數(shù)據(jù)類型有不同的存儲和表示方法計算機能夠表示的數(shù)值范圍總是有限的52 5.0和5在數(shù)學(xué)上是相同的,但在計算機內(nèi)部表示上是不同的 2356.4359是一個有限小數(shù),但在計算機上表示時可能不夠準(zhǔn)確數(shù)據(jù)與類型C語言

20、的基本數(shù)據(jù)類型包括整數(shù)類型實數(shù)類型字符類型程序中的每一個數(shù)據(jù)都必定屬于某一種類型(基本類型或自定義類型)每一種數(shù)據(jù)類型都有表示方式(編碼)和表示范圍數(shù)據(jù)類型確定了數(shù)據(jù)對象支持的運算53整數(shù)類型和整數(shù)的表示longintshort字節(jié)數(shù)442表示范圍-231231-1-231231-1-215215-154三種整數(shù)類型長整數(shù) long int 可以簡寫為 long普通整數(shù) int短整數(shù) short int 可以簡寫為 short三種整數(shù)類型表示范圍long int short,具體范圍取決于不同的實現(xiàn)整數(shù)類型和整數(shù)的表示unsigned longunsigned intunsigned shor

21、t字節(jié)數(shù)442表示范圍0232-10232-10216-155三種無符號整數(shù)類型長整數(shù)unsigned long int 可以簡寫為 unsigned long普通整數(shù) unsigned int短整數(shù) unsigned short int 可以簡寫為 unsigned short三種整數(shù)類型表示范圍unsigned long unsigned int unsigned short整數(shù)常數(shù)的書寫形式(int.c)十進(jìn)制形式例如:123456,123,100八進(jìn)制形式以0開頭例如:0123456,0123,0100十六進(jìn)制形式以0 x開頭例如:0 x123456,0 x123,0 x10056整數(shù)

22、常數(shù)的書寫形式示例八進(jìn)制形式十進(jìn)制值01234564279801238301006457十六進(jìn)制形式十進(jìn)制值0 x12345611930460 x1232910 x100256實數(shù)類型和實數(shù)表示三種實數(shù)類型單精度浮點數(shù):float雙精度浮點數(shù):double長雙精度浮點數(shù):long double三種實數(shù)類型的表示范圍(IEEE標(biāo)準(zhǔn))58字節(jié)數(shù)指數(shù)位數(shù)尾數(shù)位數(shù)表示范圍float4823-3.410383.41038double81152-1.7103083.410308long double1615112- 1.2 1049323.4 104932浮點數(shù)表示方法任意二進(jìn)制浮點數(shù)公式:N=M2E其中

23、,M為尾數(shù)(純小數(shù)部分),整數(shù)E為指數(shù),M與E都帶符號。二進(jìn)制浮點數(shù)特征:尾數(shù)的位數(shù)決定數(shù)的精度;指數(shù)的位數(shù)決定數(shù)的范圍。59指數(shù)符號指數(shù)E尾數(shù)符號尾數(shù)M(定點整數(shù))(定點小數(shù))實數(shù)常數(shù)的書寫形式小數(shù)形式例如:12000000.00.00001指數(shù)形式例如:1.2E7 1E-5注意:以上形式表示的實數(shù)均被當(dāng)做double類型存儲,如果希望以float類型存儲需要在后面加上F或f例如:12000000.0f ,0.00001F,1.2E7F ,1E-5F60Tips:在寫程序時都使用double類型字符類型和字符的表示字符數(shù)據(jù)主要用于輸入輸出和文字處理字符類型:char字符類型在計算機中用一個字

24、節(jié)的整數(shù)存儲unsigned char: 0255char: -128127每一個字符都有唯一一個對應(yīng)的整數(shù),該整數(shù)稱為這個字符的ASCII碼61ASCII碼在計算機中每一個拉丁文字字母用一個0127的數(shù)字表示,這個數(shù)字稱為該字母的ASCII碼ASCII字符集:所有大小寫英文字母、數(shù)字、各種標(biāo)點符號字符,還有一些控制字符,一共128個62字符的書寫形式1.用單引號括起的單個字符例如:A,a,12.以字符對應(yīng)的ASCII碼表示64/a,b都表示字符Achar a,b;a=A;b=65;字符的書寫形式3.用轉(zhuǎn)義字符表示特殊字符反斜線()開頭的轉(zhuǎn)義字符用來表示ASCII字符集中的特殊字符65注意:對

25、未定義的轉(zhuǎn)義字符直接輸出反斜線后的字符轉(zhuǎn)義字符實際輸出的字符n換行符號單引號反斜線雙引號字符串字符串不是C語言的一種數(shù)據(jù)類型用雙引號括起的一系列字符:CHINA Beijing University Welcomen其本質(zhì)是字符數(shù)組主要用于輸入輸出printf( Hello C Program!n );字符串中間不能換行66Hello C ProgramHello C Program變量聲明變量:用于存儲程序的輸入數(shù)據(jù)或計算結(jié)果的存儲單元變量值在程序運行時可以改變變量聲明:給存儲單元定義一個名稱及類型,便于程序中引用變量名必須是合法標(biāo)識符變量必須有確定數(shù)據(jù)類型可以在一條語句中定義多個同類型變量

26、可以在變量聲明時賦值67示例程序中的變量聲明68#include int main() double f=50.0;/聲明存儲華氏溫度的變量并賦值 double c;/聲明存儲攝氏溫度的變量 . #include int main() double f=50.0, c;/一條語句中聲明多個變量 . 變量基本操作賦值操作修改變量當(dāng)前的值方法:使用賦值表達(dá)式(由操作符“=”構(gòu)成的表達(dá)式)a=3.5b=5+3取值操作獲得變量現(xiàn)在的值方法:直接引用變量名稱s=a+bprintf(s=%dn, s);69問題轉(zhuǎn)換為程序(版本1)70#include int main()double f=20, c; r

27、eturn 0;數(shù)學(xué)運算c = 59 (f-32),如何轉(zhuǎn)換成C語言表達(dá)式?C語言表達(dá)式如何計算?2.3 運算符、表達(dá)式與計算解決數(shù)學(xué)運算到程序的轉(zhuǎn)換問題數(shù)學(xué)運算符在程序中如何表示?數(shù)學(xué)運算的規(guī)則在程序中如何實現(xiàn)?71算術(shù)運算符72運算符使用形式數(shù)學(xué)意義適用數(shù)據(jù)類型+一元或二元運算符一元表示正號,二元表示加法所有基本數(shù)據(jù)類型-一元或二元運算符一元表示負(fù)號,二元表示減法所有基本數(shù)據(jù)類型*二元運算符乘法運算所有基本數(shù)據(jù)類型/二元運算符除法運算所有基本數(shù)據(jù)類型%二元運算符模運算(求余數(shù))整數(shù)類型算術(shù)運算符示例(operator.c)73double a=3.0,b=2.0; int c=4,d=2;

28、表達(dá)式結(jié)果-a-3.0a+b5.0a-b1.0a*b6.0a/b1.5c/d2c%d0算術(shù)表達(dá)式由計算對象(例如數(shù)值的文字量、變量、函數(shù)調(diào)用等)、算術(shù)運算符及圓括號構(gòu)成,基本形式與數(shù)學(xué)上的算術(shù)表達(dá)式類似-( 28 + 32 ) + (16 * 7 - 4)25 * (3 - 6) + 234a * b + c / 2a * sin( c * 3.1416 / 180 )74算術(shù)表達(dá)式數(shù)學(xué)公式C語言表達(dá)式b2-4ac a + b - cax-(b+c)75b * b 4 * a *ca+b-c(a+b)/(c+d)1/(1+x * x)a *x -(b+c)表達(dá)式求值給定了表達(dá)式中所有變量的值以

29、后表達(dá)式的值如何計算?表達(dá)式的計算過程優(yōu)先級不同運算符哪個先算,哪個后算?結(jié)合性相同優(yōu)先級的運算符哪個先算,哪個后算?76表達(dá)式求值優(yōu)先級規(guī)則1.一元運算符優(yōu)先級最高2.先乘除后加減3.括號中的表達(dá)式先計算77運算符優(yōu)先級一元+和-高* / %中二元+和-低當(dāng)不確定運算符優(yōu)先級時,用括號來指定運算順序是避免錯誤的最好方法14-4表達(dá)式值10 / 5 + 4 * 6 / 2-(2 + 6) * 4) / (3 + 5)表達(dá)式求值結(jié)合性確定具有相同優(yōu)先級的運算符相鄰出現(xiàn)時表達(dá)式的計算順序。C語言規(guī)定一元算術(shù)運算符自右向左結(jié)合;二元算術(shù)運算符自左向右結(jié)合,優(yōu)先級相同時左邊的運算符先計算。784 *

30、7 / 2-+-8(4 * 7) / 2(-(+(-8)148問題轉(zhuǎn)換為程序(版本2)下面的程序結(jié)果正確嗎?79int main() double f=50; double c; c=5/9*(f-32); return 0; c的計算結(jié)果是多少c=10?計算和類型以上計算涉及的問題類型對計算的限制混合類型計算和自動(隱式)類型轉(zhuǎn)換強制(顯式)類型轉(zhuǎn)換8013011.05 / 4 + 4 * 6 / 2=?1 / 3 * 3 = ?1 * 3 / 3 = ?1/3.0 * 3 = ?計算和類型類型對計算的限制1.兩個相同類型數(shù)據(jù)使用二元運算符計算得到的結(jié)果類型相同。例如,兩個整數(shù)運算結(jié)果仍然是

31、整數(shù)811 + 24/21 + 121 / 3 * 3 5 / 4 + 4 * 6 / 20 * 3 130計算和類型類型對計算的限制2.計算結(jié)果超出類型表示范圍會導(dǎo)致溢出 (overflow.c)82#include int main()short a=32765, b=5;short c = a+b; / c=?printf(c=%dn,c); return 0;計算和類型混合類型計算和自動(隱式)類型轉(zhuǎn)換兩個不同類型數(shù)據(jù)使用二元運算符形成混合類型計算C語言里混合類型計算的方法是將混合類型計算中的某個運算對算轉(zhuǎn)換為另一個運算對象的類型再計算轉(zhuǎn)換原則是將表示范圍小的類型轉(zhuǎn)換為表示范圍大的類型

32、以避免丟失精度83表示范圍小 大類型shortintlongfloatdoublelong double計算和類型混合類型計算和自動(隱式)類型轉(zhuǎn)換2 + 3 * 4.5 = 15.584234.53.0*13.52.0+15.5自動類型轉(zhuǎn)換計算和類型強制(顯式)類型轉(zhuǎn)換任何類型均可相互轉(zhuǎn)換,但轉(zhuǎn)換可能丟失精度轉(zhuǎn)換方式:(類型名) 表達(dá)式強制類型轉(zhuǎn)換是一元運算符,其優(yōu)先級和其他一元運算符相同(高于二元運算符)(int)3.3 * 2.2 + 4 = (int)(3.3 * 2.2) + 4 =類型轉(zhuǎn)換不改變原來的值float a=3.3;int b=(int)a; /不改變a的值853 * 2

33、.2 + 4 = 10.6(int)(7.26) + 4 = 7 + 4 = 11計算和類型整數(shù)轉(zhuǎn)浮點數(shù)不存在精度問題浮點數(shù)類型轉(zhuǎn)換為整數(shù)時直接去掉小數(shù)部分86(int)(3.3 * 2.2) + 4 = 112.23.347*11+7.26強制類型轉(zhuǎn)換問題轉(zhuǎn)換為程序(版本3)87#include int main() double f=50.0;/存儲華氏溫度的變量 double c;/存儲攝氏溫度的變量 c=5.0/9.0*(f-32);/計算攝氏溫度 return 0; 2.4 結(jié)果輸出與數(shù)據(jù)輸入解決程序與用戶交互的問題如何將計算結(jié)果展現(xiàn)給用戶?如何讓用戶輸入需要的數(shù)據(jù)?88輸出計算結(jié)果

34、格式化輸出函數(shù)printfC語言標(biāo)準(zhǔn)庫函數(shù)調(diào)用形式:printf( 格式字符串, 其他參數(shù));89控制輸出格式 輸出類型 輸出精度 對齊方式準(zhǔn)備輸出的值 0個或多個 所有基本類型變量或常量 表達(dá)式或其他函數(shù)調(diào)用結(jié)果輸出計算結(jié)果printf函數(shù)的格式字符串雙引號括起來的字符串,其中包括:格式字符:用%引導(dǎo)格式字符,控制輸出格式轉(zhuǎn)義字符:按轉(zhuǎn)義后的含義輸出其他字符:直接輸出90格式字符串輸出結(jié)果first programfirst programfirstnprogramfirstprogram輸出計算結(jié)果用于輸出整數(shù)的格式字符%d - 以十進(jìn)制輸出帶符號整數(shù)%o - 以八進(jìn)制輸出無符號整數(shù)%x

35、- 以十六進(jìn)制輸出無符號整數(shù)int a=256,b=-180;格式字符串輸出結(jié)果a= %d, b= %da= 256, b= -180a= %xa= 100a= %oa= 40091輸出計算結(jié)果用于輸出浮點數(shù)的格式字符%f - 以小數(shù)形式輸出float/double型浮點數(shù)%e - 以指數(shù)形式輸出float/double型浮點數(shù)以上兩種形式默認(rèn)小數(shù)點后輸出6位有效數(shù)字double c=1234.567; float d=2356.4359f;格式字符串輸出結(jié)果c=%f, d=%fc=1234.567000, d=2356.435791c=%e, d=%ec=1.234567e+003, d=2

36、.356436e+00392輸出計算結(jié)果輸出浮點數(shù)的精度(小數(shù)位數(shù))控制%.nf n為整數(shù),表示保留幾位小數(shù)位數(shù)不足時末尾補零位數(shù)超出時四舍五入進(jìn)位double c=1234.567; float d=2356.4359f;格式字符串輸出結(jié)果c=%.4fc=1234.5670d=%.3fd=2356.43693輸出計算結(jié)果用于輸出字符和字符串的格式字符%c - 輸出一個字符%s - 輸出一個字符串char *s=c programming; char ch1=A,ch2=a;格式字符串輸出結(jié)果ch1=%c, ch2=%cch1=A, ch2=ach1=%d, ch2=%dch1=65, ch2

37、=97I love %s !I love c programming !94輸出計算結(jié)果使用printf需要注意的問題1.格式字符串中沒有%引導(dǎo)的格式控制字符時,不需要其他參數(shù),直接輸出字符串內(nèi)容,轉(zhuǎn)義字符按轉(zhuǎn)以后實際意義輸出95格式字符串輸出結(jié)果first programfirst programfirstnprogramfirstprogram輸出計算結(jié)果使用printf需要注意的幾個問題2.格式字符串中有%引導(dǎo)的格式控制字符時,其他參數(shù)的數(shù)量以及類型必須和格式控制字符一致。96#include int main() int a=123; double b=35.8; printf(“a=

38、%d, b=%dn, a, b); printf(a=%d, b=%fn, a ); printf(“a=%dn”, a, b ); return 0;輸出計算結(jié)果示例(printf_error.c)97類型不一致時不會進(jìn)行類型轉(zhuǎn)換,而會將實際傳入的值當(dāng)作需要的類型來理解,因此可能出現(xiàn)非預(yù)期結(jié)果!#include int main() int a=123; double b=35.8; printf(“a=%d, b=%dn, a, b); /? return 0;輸出計算結(jié)果示例(printf_error.c)98數(shù)量不一致時:1.如果缺少參數(shù),會出現(xiàn)不可預(yù)知數(shù)據(jù),取決于不同的編譯器2.如果

39、有多余參數(shù),則被忽略#include int main() int a=123; double b=35.8; printf(a=%d, b=%fn, a ); /? printf(a=%dn, a, b ); /? return 0;C99 對以上問題的解釋99The fprintf function writes output to the stream pointed to by stream, under control of the string pointed to by format that specifies how subsequent arguments

40、 are converted for output.If there are insufficient arguments for the format, the behavior is undefined.If the format is exhausted while arguments remain, the excess arguments are evaluated (as always) but are otherwise ignored. The fprintf function returns when the end of the format string is encou

41、ntered通過編譯選項來給出警告100問題轉(zhuǎn)換為程序(版本4)101#include int main() double f=50.0;/存儲華氏溫度的變量 double c;/存儲攝氏溫度的變量 c=5.0/9.0*(f-32);/計算攝氏溫度 printf( c=%.2fn, c);/輸出攝氏溫度 return 0; 如何得到用戶輸入溫度轉(zhuǎn)換程序存在的問題f是固定值,如果修改f的值需要重新編譯102能否讓用戶輸入f的值再計算?#include int main() double f=50.0; /存儲華氏溫度的變量 double c; /存儲攝氏溫度的變量 c=5.0/9.0*(f-32

42、); /計算攝氏溫度 printf( c=%.2fn, c); /輸出攝氏溫度 return 0; 從鍵盤輸入數(shù)據(jù)格式化輸入函數(shù)scanf C語言標(biāo)準(zhǔn)庫函數(shù)調(diào)用形式:scanf( 格式字符串, 其他參數(shù));103控制輸入數(shù)據(jù)格式(類型,精度等)的字符串,以%引導(dǎo)接受輸入值的變量地址(在普通變量前加取地址運算符&可得到變量地址)scanf函數(shù)的格式字符串104格式控制字符接受輸入值的變量類型要求的實際輸入%dint十進(jìn)制數(shù)%ldlong十進(jìn)制數(shù)%ffloat十進(jìn)制數(shù),可以有小數(shù)點或指數(shù)%lfdouble十進(jìn)制數(shù),可以有小數(shù)點或指數(shù)%cchar一個字符scanf示例1105int x;float

43、y;double z;char c;scanf(%d %f %lf %c, &x ,&y ,&z, &c);printf(x=%d, y=%f, z=%fn,c=%c, x, y, z,c);用戶從鍵盤輸入以下內(nèi)容(表示空格):2342252.18220.4A輸出結(jié)果:x=234, y=2252.179932, z=220.400000,c=Ascanf使用注意事項接受輸入值的參數(shù)是變量地址!必須要按下回車后才結(jié)束輸入輸入多個數(shù)據(jù)時,接受數(shù)據(jù)的變量的數(shù)量以及類型必須和格式控制字符一致輸入多個數(shù)據(jù)時,格式字符之間一般用空格分隔或者不分隔,但輸入數(shù)據(jù)要用空格分隔一旦在格式字符串中用了別的字符分隔,

44、輸入時也要用相同字符分隔不要在scanf的格式字符串中加入n例如:scanf(“%dn”,&n);106scanf錯誤示例(scanf_error.c)107scanf示例2108int x;float y;double z;char c;scanf(%d ,%f, %lf, %c, &x ,&y ,&z, &c);printf(x=%d, y=%f, z=%fn,c=%c, x, y, z,c);用戶從鍵盤輸入以下內(nèi)容:234, 2252.18, 220.4, A輸出結(jié)果:x=234, y=2252.179932, z=220.400000,c=A問題轉(zhuǎn)換為程序(版本5)109#includ

45、e int main() double f=50.0;/存儲華氏溫度的變量 double c;/存儲攝氏溫度的變量 scanf( %lf, &f );/輸入華氏溫度 c=5.0/9.0*(f-32);/計算攝氏溫度 printf( c=%.2fn, c);/輸出攝氏溫度 return 0; 小結(jié)需要掌握的內(nèi)容C語言字符集標(biāo)識符基本數(shù)據(jù)類型運算符、表達(dá)式變量定義及使用格式化輸入/輸出函數(shù)scanf/printf110小結(jié)常用程序模式111#include int main() /輸入數(shù)據(jù) scanf(,); /計算 /輸出結(jié)果 printf(. ., .); return 0;練習(xí)編寫一個程序,

46、用于預(yù)測冰箱斷電后經(jīng)過時間t(以小時為單位,可以是小數(shù))后的溫度T。已知計算公式為 輸入兩個整數(shù)h和m分別表示斷電后的小時和分鐘。輸出冰箱斷電后經(jīng)過時間t(以小時為單位)后的溫度T,保留兩位小數(shù)112C語言程序設(shè)計第三講 程序流程控制(6學(xué)時) 計算機學(xué)院引言例1:寫程序計算 ax2+bx+c=0的兩個實根,如果兩個實根相同只輸出一個,如果不存在實根輸出no real root根的判別式為b2-4ac,有三種可能b2-4ac小于0,無實根b2-4ac等于0,兩個相同實根b2-4ac大于0,兩個不同實根如何根據(jù)b2-4ac的值(條件)來選擇輸出?114引言例2:計算n的變化初始為1,結(jié)束為100

47、(條件),每次遞增1重復(fù)做100次或更多次相同的事情如何解決?初始條件結(jié)束條件條件修改115主要內(nèi)容如何表示條件關(guān)系表達(dá)式邏輯表達(dá)式流程控制條件語句循環(huán)語句1163.1如何表示條件條件是什么?例如:b2-4ac0條件是否成立如何判斷?關(guān)系表達(dá)式兩個數(shù)據(jù)之間的關(guān)系(條件)通常由關(guān)系運算符和數(shù)據(jù)構(gòu)成的表達(dá)式來確定118關(guān)系運算符含義示例小于x 大于x 1=小于等于x =大于等于y = 2=等于y = 0!=不等于y !=0關(guān)系表達(dá)式關(guān)系表達(dá)式的結(jié)果是一個邏輯值,其值取決于關(guān)系是否成立關(guān)系成立,表達(dá)式結(jié)果為邏輯“真”(true)關(guān)系不成立,表達(dá)式結(jié)果為邏輯“假”(false)C語言沒有專門的邏輯值類

48、型,用數(shù)值1表示邏輯“真”,數(shù)值0表示邏輯“假”任何基本類型均可當(dāng)作邏輯值使用,非0表示邏輯“真”,0表示邏輯“假”119關(guān)系表達(dá)式示例120 xpoweryitemMIN_ITEMgendernum-5102471.5-999.0M999運算符關(guān)系表達(dá)式含義表達(dá)式的值=x = 0 x小于或等于0power =x = yx大于或等于yitem MIN_ITEMitem大于MIN_ITEM=gender = Mgender等于M10011條件表達(dá)式C語言中唯一的三元運算符表達(dá)式1 ? 表達(dá)式2 : 表達(dá)式3首先計算表達(dá)式1的值;如果這個表達(dá)式的值非 0(即,條件成立),那么接著計算表達(dá)式 2,并

49、用它的值作為整個條件表達(dá)式的值;如果條件不成立(表達(dá)式 1的值是 0),就計算表達(dá)式 3,并用它的值作為整個條件表達(dá)式的值。121特別注意: 在表達(dá)式 1非 0時不計算表達(dá)式 3;在表達(dá)式 1值為 0時不計算表達(dá)式 2。條件表達(dá)式示例(condition.c)122/示例1:求兩個整數(shù)的較大值或較小值的方法int a=4, b=6, max, min;max = ab ? a : b; min = a3 ? (a=a+1) : (b=b+1);printf(“a=%d, b=%d, b=%dn, a, b, c);邏輯表達(dá)式用邏輯運算符連接多個關(guān)系表達(dá)式,用于描述多個關(guān)系的復(fù)雜組合例1:判斷x

50、是否在區(qū)間 3, 5 )之內(nèi)即x大于等于3,并且x小于5例2:判斷某年是否是閏年:年份能夠被400整除或者年份能夠被4整除并且不能被100整除例3:判斷x不在區(qū)間 3, 5 )之內(nèi)例1的條件取反123邏輯運算符C語言的3種邏輯運算符124邏輯運算符含義示例&并且x =3&x5 |或者x=5!非!(x =3&x5)邏輯表達(dá)式邏輯與(表達(dá)式1 & 表達(dá)式2)只有兩個表達(dá)式都非0時結(jié)果為1,否則為0125操作數(shù)1操作數(shù)2操作數(shù)1 & 操作數(shù)2非零(true)非零(true)1(true)非零(true)0(false)0(false)0(false)非零(true)0(false)0(false)0

51、(false)0(false)計算方式:先求表達(dá)式 1;若得到0則不計算表達(dá)式2,以0作為整個表達(dá)式的結(jié)果;否則(表達(dá)式1的值非 0)就計算表達(dá)式 2,如果表達(dá)式2值為0則整個表達(dá)式結(jié)果為0 ,否則結(jié)果為1 邏輯表達(dá)式邏輯或(表達(dá)式1 | 表達(dá)式2)兩個表達(dá)式的值都為0時結(jié)果為0,否則為1126操作數(shù)1操作數(shù)2操作數(shù)1 | 操作數(shù)2非零(true)非零(true)1(true)非零(true)0(false)1(true)0(false)非零(true)1(true)0(false)0(false)0(false)計算方式:先求表達(dá)式 1;若得到非0則不計算表達(dá)式2,以1作為整個表達(dá)式的結(jié)果;

52、否則(當(dāng)表達(dá)式1值為0時)計算表達(dá)式 2,如果它為0則整個表達(dá)式結(jié)果為0 ,否則結(jié)果為1 。邏輯表達(dá)式邏輯非(! 表達(dá)式)把表達(dá)式的值看作邏輯值,以該值的否定作為結(jié)果127操作數(shù)1!操作數(shù)1非零(true)0(false)0(false)1(true)計算方式:如果表達(dá)式的值非 0,則結(jié)果為 0;如果表達(dá)式值是 0則結(jié)果為 1。運算符優(yōu)先級128運算符優(yōu)先級函數(shù)調(diào)用! + - & (一元運算符)* / %+ - = = !=&|=(賦值運算符)低高邏輯表達(dá)式示例例1:判斷x是否在區(qū)間 3, 5 )之內(nèi)(range.c)即x大于等于3,并且x小于5129x = 3 & x 53= x 5 是否正

53、確?這是數(shù)學(xué)表示方式,在C語言中得不到想要的結(jié)果邏輯表達(dá)式示例例2:判斷x是否在區(qū)間 3, 5 )之外即x小于3,或者x大于等于5130 x = 5!(x =3 & x 5)或者xx = 5!(x =3 & x =a & ch =0 & ch =A & ch y ) max = x; else max = y; 142if 語句的三種格式if語句/第三種格式if ( 條件1 ) /條件1成立else if ( 條件2 ) /條件1不成立且條件2成立else if ( 條件3 ) /條件1不成立且條件2不成 /立且條件3成立else /條件1,2,3均不成立if語句143當(dāng)操作只有一條語句時,i

54、f和else后的大括號可以不要if和else對應(yīng)的操作應(yīng)該縮進(jìn),便于代碼理解當(dāng)操作有多條語句時,用大括號把語句包圍起來形成復(fù)合結(jié)構(gòu)使用if語句應(yīng)注意:144復(fù)合結(jié)構(gòu)多個語句由一對大括號包圍起來構(gòu)成復(fù)合結(jié)構(gòu)int main () double s=123.5; printf(s=%f!n,s); return 0;int main () int a,abs; scanf(“%d”,&a); abs=a; if( a 0 ) abs=-a; 145編寫程序,接受用戶輸入的整數(shù),如果該整數(shù)為奇數(shù)則將其乘 3 加 1 后輸出,偶數(shù)直接輸出。簡單if語句#include int main() int a

55、, result; /* 輸入部分 */ printf( The program gets a number.nIf it is an even, output it directly, n ); printf( otherwise multiply it by 3 then plus 1.n ); printf( The number: ); scanf( %d ,&a); /* 計算部分 */ result = a; if( a % 2 = 1 ) result = a * 3 + 1; /* 輸出部分 */ printf( The result is %d.n, result ); re

56、turn 0;146編寫程序,接受用戶輸入的整數(shù),如果該整數(shù)為奇數(shù)則將其乘 3 加 1 后輸出,偶數(shù)除以 2 后輸出if-else語句#include int main() int a, result; /* 輸入部分 */ printf( The program gets a number.nIf it is an even, divide it by 2, n ); printf( otherwise multiply it by 3 then plus 1.n ); printf( The number: ); scanf( %d ,&a); /* 計算部分 */ if( a % 2 =

57、 1 ) result = a * 3 + 1; else result = a / 2; /* 輸出部分 */ printf( The result is %d.n, result ); return 0;147if-else語句從鍵盤輸入三個整數(shù),計算其中的最大值并將其輸出。#include int main() int a, b,c,max; /* 輸入部分 */ printf( “該程序從鍵盤獲取3個整數(shù),輸出最大值。 n ); printf( “請輸入3個數(shù): n ); scanf( %d %d %d ,&a,&b,&c); /* 計算部分 */ if (a b) max = a;e

58、lse max = b;if (c max) max = c;/* 輸出部分 */ printf( “最大值為: %d.n, max ); return 0;148從鍵盤輸入一個三角形的三條邊,判斷其為何種三角形。if-else if-else語句#include int main()int a,b,c;scanf(%d %d %d,&a,&b,&c);if (a+b = c | b+c = a | c+a = b)printf( 不是三角形);else if (a = b & b = c)printf(等邊三角形);else if (a = b | b = c | c = a)printf(

59、 等腰三角形);else if (a*a+b*b = c*c | b*b+c*c = a*a | c*c+a*a = b*b)printf(直角三角形(非等腰));elseprintf( 其它三角形);printf( n); return 0;If語句的嵌套一般形式if ( )if ( ) 語句1else 語句2elseif ( ) 語句3else 語句4注意:語句1、2、3、4可以是復(fù)合語句,每層的if與else配對,或用 來確定層次關(guān)系。149150else 與哪個 if 配對?if( service_years = 28 ) salary_level += 1;elsesalary_le

60、vel += 2;else 與 if 配對規(guī)則-else部分屬于前面最近的無對應(yīng)else的if語句。if( service_years = 28 ) salary_level += 1;else salary_level += 2;降低第二個 if 的層次,使 else 與第一個 if 配對if語句的歧義151計算過程先計算整型表達(dá)式的值依次與常數(shù)表達(dá)式比較若相同則執(zhí)行該分支(子句)否則轉(zhuǎn)向 default 分支最后退出 switch 語句特別說明switch 后面的表達(dá)式必須為整型、字符型case 后面必須為常量表達(dá)式,且各個 case 值必須不同case 分支中的語句可以有多條,不需要花括

溫馨提示

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

評論

0/150

提交評論