




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、1,計算機(jī)程序設(shè)計基礎(chǔ)(C語言),2,1. 課堂要求很嚴(yán)格。 2. 多聽,適時做筆記。 3. 上課不能講閑話。 4. 課后認(rèn)真完成作業(yè)、實驗報告。 5. 有問題,及時與老師聯(lián)系。,教 學(xué) 要 求,3,選用教材與參考書,主教科書 顧治華、陳天煌等 C語言程序設(shè)計 機(jī)械工業(yè)出版社 2007.2 參考教材 顧治華、陳天煌等C語言程序設(shè)計 實驗指導(dǎo) 機(jī)械工業(yè)出版社 2007.2 參考書 譚浩強 C語言程序設(shè)計 清華大學(xué)出版社,4,課程內(nèi)容,第一章 C語言程序設(shè)計概述 第二章 算法及算法設(shè)計簡介 第三章 數(shù)據(jù)描述與基本操作 第四章 選擇結(jié)構(gòu)程序設(shè)計 第五章 循環(huán)結(jié)構(gòu)程序設(shè)計 第六章 數(shù)組與指針 第七章
2、函數(shù)與模塊化程序設(shè)計方法,5,第一章 語言程序設(shè)計概述,6,1.1 程序設(shè)計的概念 1.2 語言的產(chǎn)生及發(fā)展 1.3 簡單程序介紹 1.4 C程序的上機(jī)步驟 1.5 C語言的基本語法和基本結(jié)構(gòu) 1.6 本章要點小結(jié),7,1.1 程序設(shè)計的概念,1.1.1 程序設(shè)計語言 1.1.2 程序設(shè)計的概念,8,計算機(jī),計算機(jī)是用來延伸人的能力的工具,需要人來駕馭 我們的職責(zé)是讓非計算機(jī)專業(yè)的人更容易駕馭它 完成這一目標(biāo)的主要手段之一就是“編程(Programming)”,9,計算機(jī)基本工作過程,整個過程的執(zhí)行者是硬件,但硬件是受軟件控制的 編程,就是編寫軟件,使硬件按照人的意圖工作,10,計算機(jī)基本工作
3、過程,源程序 和輸入數(shù)據(jù),輸出結(jié)果,取出數(shù)據(jù),存入數(shù)據(jù),操作命令,存取命令,取出 程序指令,輸入輸出命令,計算結(jié)果,CPU,“馮諾依曼機(jī)”結(jié)構(gòu),大腦,眼/耳/口,11,軟件的形成,軟件(Software)的形成 程序員(Programmer)編寫程序源代碼(Source Code) 編譯器(Compiler)把源代碼轉(zhuǎn)換為可被計算機(jī)理解的機(jī)器代碼(Machine Code) 并把機(jī)器代碼以可執(zhí)行文件(Executable File)的形式保存在磁盤上,12,機(jī)器語言,匯編語言,高級語言,面向過程,面向?qū)ο?CPU指令系統(tǒng),由0、1序列構(gòu)成的指令碼組成 如:10000000 加 10010000
4、 減,用助記符號描述的指令系統(tǒng) 如 ADD A, B,面向機(jī)器的語言,程序設(shè)計是數(shù)據(jù)被加工的過程,客觀世界可以分類,對象是類的實例 對象是數(shù)據(jù)和方法的封裝 對象間通過發(fā)送和接受消息發(fā)生聯(lián)系,程序設(shè)計關(guān)鍵是定義類,并由類派生對象,1.1.1 程序設(shè)計語言,13,程序設(shè)計語言的故事,計算機(jī)為什么用二進(jìn)制呢? 為什么不用我們?nèi)粘J煜さ氖M(jìn)制呢? 二進(jìn)制在在電器元件中容易實現(xiàn) 計算機(jī)進(jìn)行二進(jìn)制運算比進(jìn)行十進(jìn)制運算要簡單得多,14,程序設(shè)計語言的故事,機(jī)器語言編寫的1+1程序 匯編語言(Assemble Language)編寫的1+1程序,10111000 00000001 00000000 00000
5、101 00000001 00000000,MOV AX, 1 ADD AX, 1,15,程序設(shè)計語言的故事,BASIC語言編寫的1+1程序 C語言編寫的1+1程序,PRINT 1+1,#include main() printf(%dn, 1+1); ,16,Ada,ALGOL60,ALGOL68,Pascal,Modula-2,CPL,BCPL,B,C,C+,Java,LISP,PROLOG,COBOL,FORTRAN77,FORTRAN,PL/1,Simula 67,Smalltalk 80,BASIC,ANSI-BASIC,QBASIC,VB,FORTRAN90,17,1.1.2 程序
6、設(shè)計的概念,程序設(shè)計就是用計算機(jī)語言來編寫程序的過程。 什么是程序?著名計算機(jī)科學(xué)家沃思提出有名的公式: 算法+數(shù)據(jù)結(jié)構(gòu)=程序,18,算法即問題的求解過程、計算機(jī)的工作步驟。 數(shù)據(jù)結(jié)構(gòu)即對參與運算的數(shù)據(jù)怎樣進(jìn)行合理的組織、安排,以提高程序運行的效率和求解的精確性。,程序的兩大要素:數(shù)據(jù)結(jié)構(gòu)、算法,19,1.2 C語言的產(chǎn)生和發(fā)展,1.2.1 C語言的產(chǎn)生 1.2.2 C語言的發(fā)展 1.2.3 C語言的特點,20,1.2.1 C 語言的產(chǎn)生,一切從一個叫“Space Travel”的電子游戲開始的 Ken Thompson為了讓他的游戲能在PDP-7上運行,用匯編語言給PDP-7寫了一個操作系統(tǒng)
7、UNIX 匯編太不好用了,Thompson需要高級語言 試驗了一些高級語言,包括Fortran,都不理想 他在BCPL基礎(chǔ)上,自己設(shè)計了一個B語言 UNIX開始發(fā)展,B也不夠用了 Dennis Ritchie加入,把B改造成C 開始用C重寫UNIX,21,1.2.2 C 語言的發(fā)展,C語言發(fā)展過程 產(chǎn)生過程 時間:19721973 地點:美國貝爾實驗室 目的:UNIX操作系統(tǒng) 設(shè)計人: Ken.Thompson和Dennis.M.Ritchie C標(biāo)準(zhǔn) 標(biāo)準(zhǔn)C: K ,輸出: Hello,World!,32,/* example1.2 calculate the sum of a and b*
8、/ #include /* This is the main program */ main() int a,b,sum; a=10; b=24; sum=add(a,b); printf(”sum= %dn,sum); /* This function calculates the sum of x and y */ int add(int x,int y) int z; z=x+y; return(z); ,運行結(jié)果: sum=34,33,格式特點 習(xí)慣用小寫字母,大小寫敏感 不使用行號,無程序行概念 可使用空行和空格 常用鋸齒形書寫格式,main( ) . . . . . . . ,ma
9、in( ) int i , j , sum; sum=0; for(i=1; i10;i+) for(j=1;j10;j+) sum+=i*j ; printf(“%dn”,sum); ,優(yōu)秀程序員的素質(zhì)之一: 使用TAB縮進(jìn) 對齊 有足夠的注釋 有合適的空行,34,結(jié)構(gòu)特點 函數(shù)與主函數(shù) 程序由一個或多個函數(shù)組成 必須有且只能有一個主函數(shù)main() 程序執(zhí)行從main開始,在main中結(jié)束,其它函數(shù)通過嵌套調(diào)用得以執(zhí)行。 程序語句 C程序由語句組成 用“;”作為語句終止符 注釋 /* */為注釋,不能嵌套 不產(chǎn)生編譯代碼,例: /*This is the main /* of exampl
10、e1.1*/ */,編譯預(yù)處理命令,函數(shù)首部: 包括函數(shù)名、函數(shù)類型、函數(shù)參數(shù)名、參數(shù)類型。 函數(shù)體:聲明部分,執(zhí)行部分。,35,1.4 C程序的上機(jī)步驟,36,程序代碼的錄入, 生成源程序*.c,語法分析查錯,翻譯 生成目標(biāo)程序*.obj,與其它目標(biāo)程序或庫 鏈接裝配,生成可執(zhí)行 程序*.exe,開始,編輯,編譯,有錯?,執(zhí)行,連接,結(jié)果 正確,結(jié)束,可執(zhí)行 目標(biāo)程序 f.exe,源程序 f.c,目標(biāo)程序 f.obj,庫函數(shù) 和其他目 標(biāo)程序,Yes,No,Yes,No,37,1.5 C語言的基本語法和結(jié)構(gòu),1.5.1 C語言的基本語法 1.5.2 C語言的基本結(jié)構(gòu),38,1.5.1 C語言
11、的基本語法,標(biāo)識符 關(guān)鍵字 運算符 分隔符 常量 注釋符 字符集,39,標(biāo)識符,常量、變量、語句標(biāo)號以及自定義函數(shù)的名稱 只能是字母、數(shù)字和下劃線組成的字符串,第一個字符必須是字母或下劃線 標(biāo)準(zhǔn)C不限制標(biāo)識符長度,但一般不超過8字符 標(biāo)識符大小寫有區(qū)別 標(biāo)識符名最好能“顧名思義”,40,32個關(guān)鍵字:(由系統(tǒng)定義,不能重作其它定義) auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeo
12、f static struct switch typedef unsigned union void volatile while,41,9種控制語句: if( )else switch case for( ) while( ) dowhile( ) continue break goto return,42,34種運算符: 算術(shù)運算符:+ - * / % + - 關(guān)系運算符: = != 邏輯運算符:! for(i=0;i=80) ,fc1.c,2.1 算法的概念 2.2 算法的特性 2.3 算法的表示 2.4 結(jié)構(gòu)化程序設(shè)計方法,2.4 結(jié)構(gòu)化程序設(shè)計方法簡介,荷蘭學(xué)者E.W.dijkctr
13、a提出了結(jié)構(gòu)化程序設(shè)計(structured programming)的理論,成為70年代中期至90年代初的程序設(shè)計主流。結(jié)構(gòu)化程序設(shè)計方法提出了一些大家都要遵循的原則,這些原則歸納為32個字:,自頂向下,逐步細(xì)化。 模塊設(shè)計,結(jié)構(gòu)編碼。 清晰第一,效率第二。 書寫規(guī)范,縮進(jìn)格式。,順序、分支和循環(huán)三種基本結(jié)構(gòu)的共同特點:,(1)只有一個入口。,(2)只有一個出口。,(3)結(jié)構(gòu)內(nèi)的每一部分都有機(jī)會被執(zhí)行到。也就是說,對每一個框來說,都有從入口到出口的路徑通過它。,(4)結(jié)構(gòu)內(nèi)不存在“死循環(huán)”(無終止的循環(huán))。,結(jié)構(gòu)化程序,所謂結(jié)構(gòu)化程序,就是僅僅使用順序、選擇、 循環(huán)等三種基本結(jié)構(gòu)所構(gòu)造的程序
14、。,結(jié)構(gòu)化程序設(shè)計方法,結(jié)構(gòu)化程序設(shè)計方法的基本思想是,把一個復(fù)雜 問題的求解過程分階段進(jìn)行。每個階段的問題都 控制在人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi)。,2.4 本章要點小結(jié),算法的概念 算法的特性 算法的表示 結(jié)構(gòu)化程序設(shè)計方法,第三章 數(shù)據(jù)描述與 基本操作,89,3.1 基本數(shù)據(jù)類型 3.2 運算符和表達(dá)式 3.3 輸入輸出操作,90,3.1 基本數(shù)據(jù)類型,3.1.1 C語言的數(shù)據(jù)類型 3.1.2 常量和變量 3.1.3 數(shù)據(jù)類型轉(zhuǎn)換,91,3.1.1 C語言的數(shù)據(jù)類型,(一) 什么是數(shù)據(jù)類型? (二) C語言的數(shù)據(jù)類型有哪些?,92,(一) 什么是數(shù)據(jù)類型?,數(shù)據(jù)結(jié)構(gòu)+算法=程序,C語言中以
15、“數(shù)據(jù)類型”形式存在,對數(shù)據(jù)的描述,對操作的描述,93,數(shù)據(jù)類型,基本類型,整型(有符號、無符號) 字符型 實型(浮點型) 枚舉類型,構(gòu)造類型,數(shù)組類型 結(jié)構(gòu)體類型 共用體類型,指針類型,空類型,單精度型 雙精度型,在程序中對用到的 所有數(shù)據(jù)都必須指 定其數(shù)據(jù)類型.,?,不同類型的數(shù)據(jù),所占 內(nèi)存的字節(jié)數(shù)不同, 對 應(yīng)的操作也不相同。,(二) C的數(shù)據(jù)類型,94,整型數(shù)據(jù),1. 整型數(shù)據(jù)的分類 最基本的整型類型 基本整型(int型):占2個或4個字節(jié)(32位編譯系統(tǒng)) 短整型(short int):VC+6.0中占2個字節(jié) 長整型(long int):VC+6.0中占4個字節(jié) 雙長整型(lon
16、g long int):C99新增的,64位占8個字節(jié),VC+6.0中定義為 _int64,95,2. 整型變量的符號屬性 整型變量的值的范圍包括負(fù)數(shù)到正數(shù) 可以將變量定義為“無符號”類型 擴(kuò)充的整形類型: 有符號基本整型 signed int; 無符號基本整型 unsigned int; 有符號短整型 signed short int; 無符號短整型 unsigned short int; 有符號長整型 signed long int; 無符號長整型 unsigned long int;,整型數(shù)據(jù),96,字符型數(shù)據(jù),字符是按其代碼(整數(shù))形式存儲的 C99把字符型數(shù)據(jù)作為整數(shù)類型的一種 字符
17、型數(shù)據(jù)在使用上有自己的特點,97,1.字符與字符代碼 大多數(shù)系統(tǒng)采用ASCII字符集 字母:A Z,a z 數(shù)字:09 專門符號:29個:! ” # 系統(tǒng)把“?”的ASCII代碼63賦給變量c printf(“%d %cn”,c,c); 輸出結(jié)果是: 63 ?,字符型數(shù)據(jù),100,浮點型數(shù)據(jù),浮點型數(shù)據(jù)是用來表示具有小數(shù)點的實數(shù) float型(單精度浮點型) 編譯系統(tǒng)為float型變量分配4個字節(jié) 數(shù)值以規(guī)范化的二進(jìn)制數(shù)指數(shù)形式存放,101,浮點型數(shù)據(jù)是用來表示具有小數(shù)點的實數(shù) float型(單精度浮點型) double型(雙精度浮點型) 編譯系統(tǒng)為double型變量分配8個字節(jié) 15位有效數(shù)
18、字,浮點型數(shù)據(jù),102,幾種基本數(shù)據(jù)類型,整型,字符型,實型,有,無,說明:數(shù)據(jù)類型所占字節(jié)數(shù)隨編譯器不同而不同,上表以VC+ 6.0為例:,103,舉例:數(shù)據(jù)溢出(Overflow)的危害,一臺安裝了Windows 95/98的機(jī)器,如果連續(xù) 運行49.7天,可能死機(jī) 原因: Windows自啟動時刻起,有一個計數(shù)器,記錄系統(tǒng)已經(jīng)運行了多少毫秒。 這個計數(shù)器個unsigned long unsigned long的最大值:4294967295 一天有24*60*60*1000 = 86400000毫秒 4294967295 / 86400000 = 49.71026961805 當(dāng)49.7天
19、的時候,此計數(shù)器會溢出,引起死機(jī),104,(一) 常 量 (二) 變 量,3.1.2 常量與變量,105,預(yù)備知識:bit,Byte,Word,bit, 位 Byte, 字節(jié) 1 B = 8 b Word, 字 1 W=2 B Kilobyte(KB), 1 KB = 1,024 B Megabyte(MB), 1 MB = 1,024 KB Gigabyte(GB), 1 GB = 1,024 MB Terabyte(TB) 1 TB = 1,024 GB,106,一個字節(jié)有多大? 可以表示數(shù)字0255 保存一個字符(英文字母、數(shù)字、符號),ASCII編碼 兩個字節(jié)保存一個漢字,107,預(yù)備
20、知識:二進(jìn)制,世界上有(10)2種人,1種人懂二進(jìn)制,1種人不懂二進(jìn)制 一個位有多大? 只能是“0”或者“1”,這叫二進(jìn)制 二進(jìn)制詮釋了計算機(jī)的哲學(xué) 種類眾多的復(fù)雜事物都是由若干種簡單事物構(gòu)成,108,1.常量:在程序運行過程中,其值不能被改變的量 整型常量:如1000,12345,0,-345 實型常量 十進(jìn)制小數(shù)形式:如0.34 -56.79 0.0 指數(shù)形式:如12.34e3 (代表12.34103) 字符常量:如? 轉(zhuǎn)義字符:如n 字符串常量:如”boy” 符號常量:#define PI 3.1416,3.1.2 常量與變量,109,字符與字符串的區(qū)別有哪些?,定界符不同:字符常量使用
21、單引號,而字符串常量使用雙引號; 長度不同:字符常量的長度固定為1,而字符串常量的長度,可以是0,也可以是某個整數(shù); 存儲要求不同:字符常量存儲的是字符的ASCII碼值,而字符串常量,除了要存儲有效的字符外,還要存儲一個結(jié)束標(biāo)志0。,110,2. 變量:在程序運行期間,變量的值是可以改變的 變量必須先定義,后使用 定義變量時指定該變量的名字和類型 變量名和變量值是兩個不同的概念 變量名實際上是以一個名字代表的一個存儲地址 從變量中取值,實際上是通過變量名找到相應(yīng)的內(nèi)存地址,從該存儲單元中讀取數(shù)據(jù),3.1.2 常量與變量,111,方式: 1、定義變量的同時賦初值(也叫變量初始化)。 格式: 數(shù)據(jù)
22、類型 變量名=初值, 變量名2=初值2; 2、通過一個賦值語句給變量賦初值。 格式 : 變量名=初值;,變量賦初值,出現(xiàn)在函數(shù)體 的聲明部分,出現(xiàn)在函數(shù)體 的執(zhí)行部分,int a,b=3;,int a,b; b=3;,112,1、程序中用到的變量必須“先定義(declare),后使用”。 2、C語言的關(guān)鍵字不能用作變量名。 3、C語言對英文字母的大小寫敏感,即同一字母的大小寫,被認(rèn)為是兩個不同的字符。 4、定義變量時,給幾個變量賦相同的初值, 應(yīng)寫成 : int a=3,b=3,c=3; 不能寫成: int a=b=c=3; 5、給變量賦值時,正常情況下應(yīng)給變量賦相同類型的數(shù)據(jù)。若給變量賦與其
23、類型不同的數(shù)據(jù)時,需進(jìn)行類型轉(zhuǎn)換。,關(guān)于變量以及變量賦初值的幾點說明,113,變量舉例,include void main() int student,age; int if=adrress=1; float score=90; stadent=2; Age=20.7; printf(%d %d %d %f,if,student,age,score); ,本程序中有幾處錯誤?,undeclared identifier,114,變量使用要注意長度,不要對變量所占的內(nèi)存空間字節(jié)數(shù)想當(dāng)然 用sizeof獲得變量或者數(shù)據(jù)類型的長度 程序在Turbo C2.0和Visual C+6.0下的運行結(jié)果不同
24、,注意!,#include void main() printf(Data type Number of bytesn); printf(- -n); printf(char %dn,sizeof(char); printf(int %dn,sizeof(int); printf(short int %dn,sizeof(short); printf(long int %dn,sizeof(long); printf(float %dn,sizeof(float); printf(double %dn,sizeof(double); ,115,3.1.3 數(shù)據(jù)類型轉(zhuǎn)換,(一) 隱式轉(zhuǎn)換(自動轉(zhuǎn)
25、換) (二) 顯式轉(zhuǎn)換(強制轉(zhuǎn)換),116,(一)隱式轉(zhuǎn)換(自動轉(zhuǎn)換),轉(zhuǎn)換發(fā)生條件,運算轉(zhuǎn)換-不同類型數(shù)據(jù)混合運算時 賦值轉(zhuǎn)換-把一個值賦給與其類型不同的 變量時 輸出轉(zhuǎn)換-輸出時轉(zhuǎn)換成指定的輸出格式 函數(shù)調(diào)用轉(zhuǎn)換-實參與形參類型不一致時轉(zhuǎn)換,先轉(zhuǎn)換、后運算,117,隱式轉(zhuǎn)換(自動轉(zhuǎn)換),同種數(shù)據(jù)類型的運算結(jié)果,還是該類型 不同種數(shù)據(jù)類型的運算結(jié)果,是兩種類型中取值范圍更大的那種 long double double float = long = int =short char 把數(shù)據(jù)賦值給另外一種類型變量也會發(fā)生自動類型轉(zhuǎn)換 從小到大,順利轉(zhuǎn)換 從大到小,可能丟失信息(好的編譯器會發(fā)出警告
26、),見教材28頁,118,隱式轉(zhuǎn)換(自動轉(zhuǎn)換),不同類型數(shù)據(jù)間的混合運算: +、-、*、/ 運算的兩個數(shù)中有一個數(shù)為float或double型,結(jié)果是double型。系統(tǒng)將float型數(shù)據(jù)都先轉(zhuǎn)換為double型,然后進(jìn)行運算; (2) 如果int型與float或double型數(shù)據(jù)進(jìn)行運算,先把int型和float型數(shù)據(jù)轉(zhuǎn)換為double型,然后進(jìn)行運算,結(jié)果是double型; (3)字符型數(shù)據(jù)與整型數(shù)據(jù)進(jìn)行運算,就是把字符的ASCII代碼與整型數(shù)據(jù)進(jìn)行運算.,119,int i; float f; double d; long e; i=2; f=2.5; d=3.9; e=3; ,10+a
27、+i*f-d/e,107,5.0,1.3,112. 0,110. 7,int,double,double,double,double,思考:根據(jù)已知變量定義及賦值語句,計算以下表達(dá)式的值,并說明每一步所得結(jié)果的數(shù)據(jù)類型。,120,(二)顯式轉(zhuǎn)換(強制轉(zhuǎn)換),一般形式,(要轉(zhuǎn)換成的數(shù)據(jù)類型)(被轉(zhuǎn)換的表達(dá)式) 注:當(dāng)被轉(zhuǎn)換的表達(dá)式是一個簡單表達(dá)式時,外面的一對圓括號可以缺省。,舉例,float x,y; x=2.3 ; y=4.5; (int)(x+y) / 6 (int) (int)x+y / 6.5 (double),說明,強制轉(zhuǎn)換得到的是所需類型的中間變量,原變量或表達(dá)式的類型不變。,12
28、1,#include void main() float x; int i; x=3.6; i=(int)x; printf(x=%f,i=%d,x,i); ,思考:以下程序的輸出結(jié)果是什么?,x=3.600000,i=3,程序運行結(jié)果:,結(jié)論:較高類型向較低類型轉(zhuǎn)換時可能發(fā)生精度損失問題,122,舉例:已知三角形的邊長a、b、c,求三角形周長的一半。,#include void main() float a,b,c,s; a=3;b=4;c=5; s=1/2 * (a+b+c); printf(s=%8.2f,s); ,s= 0.00,程序運行結(jié)果:,?,s= 6.00,程序運行結(jié)果:,改為
29、:1.0/2 (1/2.0) 或 (float)1/2 (1/(float)2),123,C運算符簡介 算術(shù)運算符和算術(shù)表達(dá)式 賦值運算符和賦值表達(dá)式 逗號運算符和逗號表達(dá)式 關(guān)系運算符和表達(dá)式 邏輯運算符和表達(dá)式 條件運算符與表達(dá)式,3.2 運算符與表達(dá)式,124,詳見254頁!,C運算符簡介,125,運算符必須有運算對象,分為3類: 運算對象是一個的,則稱為單目運算 運算對象是兩個的,則稱為雙目運算 運算對象是三個的,則稱為三目運算,C運算符簡介,126,基本算術(shù)運算符,+ - * / %,說明,例: 5/3=1 -5/3=-1,模運算符或求余運算符,算術(shù)表達(dá)式,用算術(shù)運算符和括號將運算對
30、象(也稱操作數(shù))連接起來的、符合C語法規(guī)則的式子。,優(yōu)先級和結(jié)合性,先乘除、后加減,有括號先算括號。 自左至右,常量、變量、函數(shù)等,說明,兩個整數(shù)相除的結(jié)果為整數(shù),舍去小數(shù)部分。 當(dāng)商為負(fù)數(shù)時,多采用“向零取整”的方法。,求余運算的兩側(cè)均應(yīng)為整數(shù) 5%3=2,例: a*b/c-1.5+a,算術(shù)運算符和算術(shù)表達(dá)式,如果一個運算符兩側(cè)的數(shù)據(jù)類型不同,先自動進(jìn)行類型轉(zhuǎn)換,使二者具有同一類型,然后進(jìn)行運算。,127,格式: 前置:+i , -i (在使用i之前,使i的值加(減)1) 后置:i+ , i- (在使用i之后,使i的值加(減)1),自增、自減運算符,作用:自增運算符()使單個變量的值增1;
31、自減運算符()使單個變量的值減1。,例,i=3; A) j=+i; j=i+; j=-i+;,i=i+1,i=i-1,? j,i,A) j=4 i=4 j=3 i=4 j=-3,+和-結(jié)合方向 是“自右至左”,128,(1) 自增、自減運算是語言特有的,常用于循環(huán)語句中,使循環(huán)控 制變量加(或減),以及指針變量中,使指針指向下(或上)一個地址。 (2) 自增、自減運算符,不能用于常量和表達(dá)式。 例如,5+、-(a+b)等都是非法的。 (3) +和-的結(jié)合方向為自右至左。(P30) (4) 如果對一個變量的自增自減運算,單獨構(gòu)成語句,而不是作為表達(dá)式的一部分時,前置和后置運算效果一樣,都是使變量
32、自加。 如i+;和 +i;是一樣的,都是使i加。 (5) 在表達(dá)式中,連續(xù)使用同一變量進(jìn)行自增或自減運算時,很容易出錯,所以最好避免這種用法。,說明,129,賦值運算符,簡單賦值運算符:= 復(fù)合賦值運算符:+=, -=,*=,/=,%= ,簡單賦值運算符的一般形式為: 變量 = 表達(dá)式 它的作用是將一個表達(dá)式的值賦給一個變量。,復(fù)合賦值運算的一般格式為: 變量 雙目運算符 = 表達(dá)式 復(fù)合賦值運算符 它等價于:變量 = 變量 雙目運算符 (表達(dá)式)。只有當(dāng)表達(dá)式簡化為一個變量或一個常數(shù)時,兩邊的括號可以省略。,賦值運算符和賦值表達(dá)式,130,賦值表達(dá)式,格式: 賦值表達(dá)式的值:被賦變量的值,類
33、型轉(zhuǎn)換,轉(zhuǎn)換條件:當(dāng)賦值運算符兩側(cè)的數(shù)據(jù)類型不一致時 轉(zhuǎn)換原則:轉(zhuǎn)換為被賦值變量的類型。,131,注意: 將取值范圍小的類型轉(zhuǎn)為取值范圍大的類型是安全的 反之是不安全的 如果大類型的值在小類型能容納的范圍之內(nèi),則平安無事 但是,浮點數(shù)轉(zhuǎn)為整數(shù),會丟失小數(shù)部分,非四舍五入 反之,轉(zhuǎn)換后的結(jié)果必然是錯誤的,具體結(jié)果與機(jī)器和實現(xiàn)方式有關(guān)。避免如此使用,例1,float a; int b; a=1.2; b=a*3;,? b,b=3,例2,a=b=5; a=7+(b=8),? a,b,a=5 ;b=5 a=15;b=8,自右而左 的結(jié)合性,132,算術(shù)自反賦值運算符,(1) 運算規(guī)則,對象數(shù),名稱,運
34、算符,運算規(guī)則,運算對象,運算結(jié)果,結(jié)合性,雙目,加賦值,減賦值,乘賦值,除賦值,模賦值,*,/ =,%=,a+=b相當(dāng)于 a=a+b,a=b相當(dāng)于 a=ab,a*=b相當(dāng)于 a=a*b,a/=b相當(dāng)于 a=a/b,a%=b相當(dāng)于 a=a%b,數(shù)值型,數(shù)值型,自 右 向 左,整型,整型,133,逗號運算符,,,逗號表達(dá)式,表達(dá)式1,表達(dá)式2, ,表達(dá)式n,說明,1、逗號表達(dá)式的求解過程為自左至右,依次計算各表達(dá)式的值,最后一個表達(dá)式的值即為整個逗號表達(dá)式的值; 2、逗號運算符的優(yōu)先級最低。 3、使用逗號表達(dá)式的目的通常是想分別得到各個表達(dá)式的值,而并非一定要得到整個表達(dá)式的值。 4、常用于fo
35、r循環(huán)語句中,除此以外很少使用。,逗號運算符和逗號表達(dá)式,134,例1,a=3 a=(3*5,a*4),? a,a=12,例2,a=3 a=3*5,a*4,? a,a=15 表達(dá)式的值為60,135,關(guān)系運算符及其優(yōu)先次序,關(guān)系運算符: 用來對兩個數(shù)值進(jìn)行比較的比較運算符 語言提供種關(guān)系運算符: (小于) = (小于或等于) (大于) = (大于或等于) = (等于) != (不等于),優(yōu)先級相同 (高),優(yōu)先級相同 (低),136,關(guān)系、算術(shù)、賦值運算符的優(yōu)先級,關(guān)系運算符及其優(yōu)先次序,137,ca+b 等效于 c(a+b) ab=c 等效于 (ab)=c a=bc 等效于 a=(bc),關(guān)
36、系運算符及其優(yōu)先次序,138,關(guān)系表達(dá)式,關(guān)系表達(dá)式 用關(guān)系運算符將兩個數(shù)值或數(shù)值表達(dá)式連接起來的式子 關(guān)系表達(dá)式的值是一個邏輯值,即“真”或“假” 在C的邏輯運算中,以“”代表“真”,以“”代表“假”,139,關(guān)系運算注意:,例 若a=0; b=0.5; x=0.3; 則 a=x=b的值為,0,例 5278在C中是允許的, 值為,0,例 a0 結(jié)果為 A100 結(jié)果為,1,0,140,關(guān)系運算注意:,例 注意區(qū)分“=”與“=” int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”);,例 應(yīng)避免
37、對實數(shù)作相等或不等的判斷 如 1.0/3.0*3.0=1.0 結(jié)果為,0,141,邏輯運算符及其優(yōu)先次序,3種邏輯運算符: else max=b;,max = (a b) ? a : b;,條件運算符,150,條件運算符和條件表達(dá)式,有一種if語句,當(dāng)被判別的表達(dá)式的值為“真”或“假” 時,都執(zhí)行一個賦值語句且向同一個變量賦值 如:if (ab) max=a; else max=b;,max = (a b) ? a : b;,條件表達(dá)式,151,條件表達(dá)式的一般形式為 表達(dá)式?表達(dá)式: 表達(dá)式,條件運算符和條件表達(dá)式,條件運算符的執(zhí)行順序: 求解表達(dá)式1 若為非0(真)則求解表達(dá)式2,此時表達(dá)
38、式2的值就作為整個條件表達(dá)式的值 若表達(dá)式1的值為0(假),則求解表達(dá)式3,表達(dá)式3的值就是整個條件表達(dá)式的值,152,條件運算符優(yōu)先于賦值運算符 條件運算符的結(jié)合方向為“自右至左” 以下為合法的使用方法: ab ? (max=a):(max=b); ab ? printf(“%d”,a): printf(“%d”,b);,條件運算符和條件表達(dá)式,153,長度運算符,長度運算符優(yōu)先級,和單目算術(shù)運算符、單目邏輯運算符、增1減1運算符同級別 同級運算符的結(jié)合性是自右向左的,154,設(shè)變量定義如下: int n; short s; unsigned long u3; float f; char c
39、;,則 size of(n)的值是4 size of(s)的值是2 size of(long)的值是4 size of(unsigned int)的值是2 size of(u3)的值是4 size of(f)的值是4 size of(double)的值是8 size of(c)的值是1,注意:上述結(jié)果是在32位機(jī)Visual C+ 6.0環(huán)境運行的結(jié)果。,155,位運算 C語言中提供的位運算符: 、 、 ,格式聲明,167,1.printf函數(shù)的一般格式 printf(格式控制,輸出表列) 例如: printf(”i=%d,c=%cn”,i,c);,普通字符,用printf函數(shù)輸出數(shù)據(jù),168
40、,1.printf函數(shù)的一般格式 printf(格式控制,輸出表列) 例如: printf(”i=%d,c=%cn”,i,c);,可以是常量、變量或表達(dá)式,用printf函數(shù)輸出數(shù)據(jù),169,2. 常用格式字符 格式符。用來輸出一個有符號的十進(jìn)制整數(shù) 可以在格式聲明中指定輸出數(shù)據(jù)的域?qū)?printf(”%5d%5dn”,12,-345); %d輸出int型數(shù)據(jù) %ld輸出long型數(shù)據(jù),用printf函數(shù)輸出數(shù)據(jù),170,2. 常用格式字符 格式符。用來輸出一個字符 char ch=a; printf(”%c”,ch); 或 printf(”%5c”,ch);,輸出字符:a,用printf函數(shù)
41、輸出數(shù)據(jù),171,2. 常用格式字符 格式符。用來輸出一個字符串 printf(”%s”,”CHINA”); ,輸出字符串:CHINA,用printf函數(shù)輸出數(shù)據(jù),172,2. 常用格式字符 f格式符。用來輸出實數(shù),以小數(shù)形式輸出 不指定數(shù)據(jù)寬度和小數(shù)位數(shù),用%f 例: 用%f輸出實數(shù),只能得到位小數(shù)。 double a=1.0; printf(”%fn”,a/3);,用printf函數(shù)輸出數(shù)據(jù),173,2. 常用格式字符 f格式符。用來輸出實數(shù),以小數(shù)形式輸出 指定數(shù)據(jù)寬度和小數(shù)位數(shù)。用%m.nf printf(%20.15fn,1/3); printf(%.0fn”,10000/3.0);
42、,用printf函數(shù)輸出數(shù)據(jù),174,2. 常用格式字符 f格式符。用來輸出實數(shù),以小數(shù)形式輸出 輸出的數(shù)據(jù)向左對齊,用%-m.nf,用printf函數(shù)輸出數(shù)據(jù),175,2. 常用格式字符 f格式符。用來輸出實數(shù),以小數(shù)形式輸出 float型數(shù)據(jù)只能保證6位有效數(shù)字 double型數(shù)據(jù)能保證15位有效數(shù)字 計算機(jī)輸出的數(shù)字不都是絕對精確有效的,用printf函數(shù)輸出數(shù)據(jù),176,2. 常用格式字符 e格式符。指定以指數(shù)形式輸出實數(shù) %e,VC+給出小數(shù)位數(shù)為位 指數(shù)部分占5列 小數(shù)點前必須有而且只有1位非零數(shù)字 printf(”%e”,123.456); 輸出:1.234560 e+002,用
43、printf函數(shù)輸出數(shù)據(jù),177,2. 常用格式字符 e格式符。指定以指數(shù)形式輸出實數(shù) %m.ne printf(”%13.2e”,123.456); 輸出: 1.23e+002 (前面有4個空格),用printf函數(shù)輸出數(shù)據(jù),178,printf格式字符,179,180,printf的附加格式說明字符,181,用scanf函數(shù)輸入數(shù)據(jù),1. scanf 函數(shù)的一般形式 scanf(格式控制,地址表列),含義同printf函數(shù),182,1. scanf 函數(shù)的一般形式 scanf(格式控制,地址表列),可以是變量的地址,或字符串的首地址,用scanf函數(shù)輸入數(shù)據(jù),183,2. scanf函數(shù)中
44、的格式聲明 與printf函數(shù)中的格式聲明相似 以開始,以一個格式字符結(jié)束,中間可以插入附加的字符 scanf(a=%f,b=%f,c=%f,用scanf函數(shù)輸入數(shù)據(jù),184,3.使用scanf函數(shù)時應(yīng)注意的問題 scanf函數(shù)中的“格式控制”后面應(yīng)當(dāng)是變量地址,而不應(yīng)是變量名。 scanf(”%f%f%f”,a,b,c); scanf(”%f%f%f”,用scanf函數(shù)輸入數(shù)據(jù),錯,對,185,3.使用scanf函數(shù)時應(yīng)注意的問題 如果在“格式控制字符串”中除了格式說明以外還有其他字符,則在輸入數(shù)據(jù)時應(yīng)輸入與這些字符相同的字符。 scanf(a=%f,b=%f,c=%f, 1 3 2 a=1
45、,b=3,c=2 a=1 b=3 c=2,用scanf函數(shù)輸入數(shù)據(jù),錯,錯,對,186,3.使用scanf函數(shù)時應(yīng)注意的問題 在用”c”格式輸入字符時,空格字符和“轉(zhuǎn)義字符”都作為有效字符輸入. 對于scanf(”%c%c%c”, 如輸入: a |_| b|_| c c1值為字符a,c2值為字符|_| ,c3值為字符b,因為c只要求輸入一個字符,后面不需要用空格作為兩個字符的間隔,因此 空格|_| 作為下一個字符送給c2,用scanf函數(shù)輸入數(shù)據(jù),187,3.使用scanf函數(shù)時應(yīng)注意的問題 在輸入數(shù)據(jù)時,遇以下情況時該數(shù)據(jù)認(rèn)為結(jié)束。 遇空格,或按“回車”或“跳格”(Tab)鍵。 按指定的寬度
46、結(jié)束,如”3d”,只取3列。 遇非法輸入。 對于scanf(”%3d%d%f”, 若輸入 123|_|4 |_|1.2*345,用scanf函數(shù)輸入數(shù)據(jù),188,Scanf格式字符,189,Scanf的附加格式說明字符,190,例: 求 方程的根。a、b、c由鍵盤輸入 設(shè) ,191,解題思路:首先要知道求方程式的根的方法。 由數(shù)學(xué)知識已知:如果 0,則一元二次方程有兩個實根:,若記,192,#include #include int main ( ) double a,b,c,disc,x1,x2,p,q; scanf(%lf%lf%lf, ,程序中調(diào)用數(shù)學(xué)函數(shù)sqrt,輸入a,b,c的值,1
47、93,#include #include int main ( ) double a,b,c,disc,x1,x2,p,q; scanf(%lf%lf%lf, ,輸入的是雙精度型實數(shù),194,#include #include int main ( ) double a,b,c,disc,x1,x2,p,q; scanf(%lf%lf%lf, ,要求輸入3個實數(shù),自動轉(zhuǎn)成實數(shù)后賦給a,b,c,195,#include #include int main ( ) double a,b,c,disc,x1,x2,p,q; scanf(%lf%lf%lf, ,輸出數(shù)據(jù)占7列,其中小數(shù)占2列,196,
48、字符數(shù)據(jù)的輸入輸出,1.用putchar函數(shù)輸出一個字符 從計算機(jī)向顯示器輸出一個字符 putchar函數(shù)的一般形式為: putchar(c) ,197,例: 先后輸出BOY三個字符。 解題思路: 定義3個字符變量,分別賦以初值B、O、Y 用putchar函數(shù)輸出這3個字符變量的值 ,字符數(shù)據(jù)的輸入輸出,198,#include int main ( ) char a=B,b=O,c=Y; putchar(a); putchar(b); putchar(c); putchar (n); return 0; ,向顯示器輸出字符B,向顯示器輸出換行符,字符數(shù)據(jù)的輸入輸出,199,#include
49、int main ( ) char a=B,b=O,c=Y; putchar(a); putchar(b); putchar(c); putchar (n); return 0; ,改為int a=66,b=79,c=89;,字符數(shù)據(jù)的輸入輸出,200,putchar(101) (輸出字符) putchar() (輸出單撇號字符),字符數(shù)據(jù)的輸入輸出,輸出其他轉(zhuǎn)義字符:,201,2. 用getchar函數(shù)輸入一個字符 向計算機(jī)輸入一個字符 getchar函數(shù)的一般形式為: getchar( ),字符數(shù)據(jù)的輸入輸出,202,例: 從鍵盤輸入BOY三個字符,然后把它們輸出到屏幕。 解題思路: 用3
50、個getchar函數(shù)先后從鍵盤向計算機(jī)輸入BOY三個字符 用putchar函數(shù)輸出,字符數(shù)據(jù)的輸入輸出,203,#include int main ( ) char a,b,c; a=getchar(); b=getchar(); c=getchar(); putchar(a); putchar(b); putchar(c); putchar(n); return 0; ,輸入一個字符,送給變量a,字符數(shù)據(jù)的輸入輸出,204,第四章 結(jié)構(gòu)化程序設(shè)計,205,4.1 三種基本結(jié)構(gòu)概述 4.2 順序結(jié)構(gòu) 4.3 選擇結(jié)構(gòu) 4.4 循環(huán)結(jié)構(gòu),206,4.1 三種基本結(jié)構(gòu)概述,順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)
51、結(jié)構(gòu) 已經(jīng)證明,任何程序均可只用這三種結(jié)構(gòu)實現(xiàn) Bhm, Corrado, and Jacopini Guiseppe. Flow diagrams, Turing machines and languages with only two formation rules. Communication of ACM, 9(5):366-371, May 1966. 只用這三種結(jié)構(gòu)的程序,叫結(jié)構(gòu)化程序 程序 “必須”符合結(jié)構(gòu)化規(guī)則,207,順序 選擇 循環(huán) - 三分天下,順序結(jié)構(gòu),循環(huán)結(jié)構(gòu),選擇結(jié)構(gòu),208,B,A,NS圖,傳統(tǒng)流程圖,順序結(jié)構(gòu),B,A,209,4.2 順序結(jié)構(gòu),例1 計算存款利息
52、。有1000元,想存一年。有三種方法可選: (1)活期,年利率為r1 (2)一年期定期,年利率為r2 (3)存兩次半年定期,年利率為r3 請分別計算出一年后按三種方法所得到的本息和。,210,解題思路:確定計算本息和的公式。 從數(shù)學(xué)知識可知:若存款額為p0,則: 活期存款一年后本息和為: p1=p0(1+r1) 一年期定期存款,一年后本息和為: p2=p0(1+r2) 兩次半年定期存款,一年后本息和為:,211,算法:,212,#include int main ( ) float p0=1000, r1=0.0035,r2=0.03, r3=0.028, p1, p2, p3; p1 = p
53、0 * (1 + r1); p2 = p0 * (1 + r2); p3 = p0 * (1 + r3/2) * (1 + r3/2); printf(“%7.2fn%7.2fn%7.2fn”,p1, p2, p3); return 0; ,定義變量同時賦予初值,213,在現(xiàn)實生活中,需要進(jìn)行判斷和選擇的情況是很多的 如果你在家,我去拜訪你 如果遇到紅燈,要停車等待 周末我們?nèi)ソ加?70歲以上的老年人,入公園免票,4.3 選擇結(jié)構(gòu),214,在現(xiàn)實生活中,需要進(jìn)行判斷和選擇的情況是很多的 處理這些問題,關(guān)鍵在于進(jìn)行條件判斷 由于程序處理問題的需要,在大多數(shù)程序中都會包含選擇結(jié)構(gòu),需要在進(jìn)行下一個
54、操作之前先進(jìn)行條件判斷,4.3 選擇結(jié)構(gòu),215,4.3 選擇結(jié)構(gòu),if-else語句 (如果.愛)實現(xiàn)兩個分支的選擇結(jié)構(gòu) Switch語句 (分道揚鑣)實現(xiàn)多分支的選擇結(jié)構(gòu),216,選擇結(jié)構(gòu)的作用是,根據(jù)所指定的條件是否滿足,決定從給定的兩組或多組操作選擇其一。,4.3 選擇結(jié)構(gòu),217,B,N,如果 成績60 那么 通知補考 否則 告知你通過考試,A,Y,條 件P,4.3 選擇結(jié)構(gòu),218,if - else 語句,1)選擇結(jié)構(gòu)的一種最常用形式 if (表達(dá)式)語句1;else語句2;語句3; 表達(dá)式值非0時,執(zhí)行語句1,然后語句3;表達(dá)式值為0時,執(zhí)行語句2,然后語句3 2) if (表
55、達(dá)式)語句1; 語句3; else部分可以沒有,當(dāng)表達(dá)式值為0時,直接執(zhí)行語句3 3)if-else嵌套使用時,注意else和誰配對的問題 4) else-if語句,219,例: 輸入兩個實數(shù),按代數(shù)值由小到大的順序輸出這兩個數(shù)。,if 語句,220,解題思路: 只需要做一次比較,然后進(jìn)行一次交換即可 用if語句實現(xiàn)條件判斷 關(guān)鍵是怎樣實現(xiàn)兩個變量值的互換,A,B,互換前,A,B,互換后,if 語句,221,A,B,C,if 語句,222,A,B,C,if 語句,223,A,B,C,if 語句,224,#include int main() float a,b,t; scanf(%f,%f,
56、,將a和b的值互換,如果ab,225,#include int main() float a,b,t; scanf(%f,%f, ,選擇結(jié)構(gòu),用if語句實現(xiàn)的,226,1)if(表達(dá)式)語句1 else 語句2,例如: if(xy)printf(“d”,x); else printf(“d”,y);,227,2) if(表達(dá)式)語句 例如:if(xy) printf(“d”,x);,這種if語句的執(zhí)行過程如圖 :,228,例: 輸入3個數(shù)a,b,c,要求按由小到大的順序輸出。,解題思路:可以先用偽代碼寫出算法: if ab,a和b對換 (a是a、b中的小者) if ac,a和c對換 (a是三者中最小者) if bc,b和c對換 (b是三者中次小者) 順序輸出a,b,c,229,#include int main() float a,b,c,t; scanf(%f,%f,%f, ,如果 ab,將a和b對換,a是a、b中的小者,230,#include i
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 音樂課中國古典課件
- 急救方法培訓(xùn)課件
- 油田開發(fā)項目質(zhì)量管理方案
- 高效節(jié)能電機(jī)項目社會穩(wěn)定風(fēng)險評估報告(范文參考)
- 2025年砂洗機(jī)項目發(fā)展計劃
- 2025年碾米機(jī)械項目合作計劃書
- 2025年家用制冷電器具項目發(fā)展計劃
- 2025年政府引導(dǎo)基金項目合作計劃書
- 維修表揚信范文
- 2025年旅游景區(qū)開發(fā)建設(shè)項目社會穩(wěn)定風(fēng)險評估與管理規(guī)范報告
- 《無人機(jī)介紹》課件
- 2025-2030中國硼酸行業(yè)市場發(fā)展現(xiàn)狀及競爭格局與投資研究報告
- 學(xué)校中層干部選拔聘用實施方案中層干部選聘實施方案2
- 生物必修1教師用書
- 園藝植物育種學(xué)知到課后答案智慧樹章節(jié)測試答案2025年春浙江大學(xué)
- 《電力機(jī)車制動系統(tǒng)檢修與維護(hù)》課件 項目二任務(wù)四檢修中繼閥
- GB/T 15683-2025糧油檢驗大米直鏈淀粉含量的測定
- 2025吉林省安全員C證考試(專職安全員)題庫及答案
- 電鉆清洗消毒流程
- 裝修貸款申請書
- 造林安全文明施工方案
評論
0/150
提交評論