C語言程序設計實例教程(慕課版第2版)PPT完整全套教學課件_第1頁
C語言程序設計實例教程(慕課版第2版)PPT完整全套教學課件_第2頁
C語言程序設計實例教程(慕課版第2版)PPT完整全套教學課件_第3頁
C語言程序設計實例教程(慕課版第2版)PPT完整全套教學課件_第4頁
C語言程序設計實例教程(慕課版第2版)PPT完整全套教學課件_第5頁
已閱讀5頁,還剩612頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第1單元

初識C語言摘要1.1C語言概述1.1.1什么是C語言1.1.2為什么學習C語言1.2C語言結構1.2.1C語言程序及結構1.2.2如何開發C語言程序實例分析與實現1.1C語言概述1.1.1什么是C語言人類語言

我們通過有固定格式和固定詞匯的“語言”來與他人交流編程語言(ProgrammingLanguage)編程語言,是用來控制計算機的一系列指令(instruction),它有固定的格式和詞匯(不同編程語言的格式和詞匯不一樣)。編程語言也叫計算機語言。計算機語言(ComputerLanguage)指用于人與計算機之間通訊的語言。由數字、字符和語法規則組成的計算機各種指令(或各種語句)。計算機語言可分成機器語言,匯編語言,高級語言三大類。機器語言:機器語言是指一臺計算機全部的指令集合。由"0"和"1"組成的指令序列交由計算機執行,這種計算機能夠認識的語言,就是機器語言。機器語言是第一代計算機語言。指令部份的示例0000代表

加載(LOAD)0001代表

存儲(STORE)暫存器部份的示例0000代表暫存器A0001代表暫存器B存儲器部份的示例000000000000代表地址為0的存儲器000000000001代表地址為1的存儲器000000010000代表地址為16的存儲器100000000000代表地址為2^11的存儲器集成示例0000,0000,000000010000代表LOADA,160000,0001,000000000001代表LOADB,10001,0001,000000010000代表STOREB,160001,0001,000000000001代表STOREB,1[1]

匯編語言:用一些簡潔的英文字母、符號串來替代一個特定指令的二進制串,比如,用“ADD”代表加法,“MOV”代表數據傳遞等等,程序更易被讀懂和理解,糾錯及維護也方便,這種程序設計語言稱為匯編語言,即第二代計算機語言。操作:寄存器BX的內容送到AX中

1000100111011000

機器指令

mov

ax,bx

匯編指令高級語言:計算機語言具有高級語言和低級語言(機器語言和匯編語言)之分。高級語言是相對于機器語言和匯編語言而言的,它是較接近自然語言和數學公式的編程,基本脫離了機器的硬件系統,用人們更易理解的方式編寫程序。高級語言并不是特指的某一種具體的語言,而是包括很多編程語言,如流行的Java,C,C++,C#,Python等等,這些語言的語法、命令格式都不相同。C語言發展1972年,C語言誕生,C語言源自B語言,而B語言則源自BCPL語言1983年,美國國家標準協會(AmericanNationalStandardsInstitute)制定了一個C語言標準,稱之為ANSIC1999年發布的ISO/IEC9899:1999標準,通常被成為C99C語言之父丹尼斯.里奇(DennisRitchie)C語言是一種結構化語言,模塊化方式組織程序,易于調試和維護。C語言具有豐富的運算符和數據類型,便于實現各類復雜的數據結構。C語言集高級語言和低級語言的功能于一體,既可用于系統軟件的開發,也適合于應用軟件的開發。C語言還具有效率高,可移植性強等特點。小結:計算機語言(編程語言)低級語言高級語言機器語言C語言匯編語言JAVA語言C++語言C#語言┅┅1972年,C語言誕生1983年,制定ANSIC1999年,制定C99結構化,運算符和數據類型豐富,集高級語言和低級語言的功能于一體,效率高,可移植性強等特點1.1.2為什么學習C語言1.1C語言概述了解計算機工作原理

C語言對現代編程語言有著巨大的影響,毫不夸張的說:C語言是現代編程語言的開山鼻祖,它改變了編程世界,許多現代編程語言都借鑒了大量C語言的特性?;A有助于基于C的語言C++、Java、C#學習需要讀懂并維護C程序代碼C語言在考試和算法描述上仍被廣泛使用廣泛應用于新軟件開發有用TIOBE排行榜是根據互聯網上有經驗的程序員、課程和第三方廠商的數量,并使用搜索引擎(如Google、Bing、Yahoo!)以及Wikipedia、Amazon、YouTube統計出排名數據,反映某個編程語言的熱門程度,每月更新一次。簡潔,32個關鍵字,9種語句運算符豐富,34種數據類型豐富,7種表達方式靈活實用直接訪問物理地址,操作硬件生成目標代碼質量高可移植性好表達力強C語言有哪些特性???優點多1.2C語言結構1.2.1C語言程序及結構C語言程序的基本部分和書寫格式【例1.1】#include<stdio.h>//預處理語句,文件包含命令intmain()//主函數{printf("同學們,大家好!\n");//輸出函數return0;//返回值}

C語言結構【例1.2】程序的功能是從鍵盤輸入一個數x,求x的正弦值,然后輸出結果。#include<math.h>#include<stdio.h>main(){

doublex,s;

printf("inputnumber:\n");

scanf("%lf",&x);

s=sin(x);

printf("sineof%lfis%lf\n",x,s);

}說明部分預處理命令執行部分程序注釋塊注釋。用符號“/*”和“*/”標出注釋的開始和結束。例如:

/*以下程序通過文件操作,

實現學生管理的錄入、增加、

刪除、修改、查詢和打印等功能。*/程序注釋行注釋。用符號“//”標出注釋行,從符號“//”到當前行末尾之間的任何內容都將被編譯程序當作注釋來處理。當然,行注釋也可以用“/*”和“*/”符號。例如://計算x的正弦值,賦給s

也可以注釋為:/*計算x的正弦值,賦給s*/1.2C語言結構1.2.2如何開發C語言程序C語言程序開發四步驟(1)編輯。將C語言源程序文件*.c以純文本文件形式保存在計算機的磁盤上(不能設置字體、字號等)。(2)編譯。編譯過程使用C語言編譯程序將編輯好的源程序文件“*.c”,翻譯成二進制目標代碼文件“*.obj”。編譯程序對源程序逐句檢查語法錯誤。C語言程序開發四步驟(3)連接。將編譯生成的各個目標程序模塊和系統或第三方提供的庫函數“*.lib”連接在一起,生成可以脫離開發環境、直接在操作系統下運行的可執行文件“*.exe”。C語言程序開發四步驟(4)運行程序。如果經過測試,運行可執行文件達到預期設計目的,這個C語言程序的開發工作便到此完成了。如果運行出錯,這說明程序處理的邏輯存在問題,需要再次回到編輯環境針對程序出現的邏輯錯誤進一步檢查、修改源程序,重復編輯→編譯→連接→運行的過程,直到取得預期結果為止。C語言程序開發四步驟使用DevC++編譯運行C語言程序Dev-C++是一個Windows環境下C/C++的集成開發環境(IDE),小巧輕量但是功能齊備,適合初學者與編程高手的不同需求,是學習C或C++的首選開發工具。Dev-C++開發環境所包含的是編輯,編譯,調試和執行C語言程序所必須的標準功能。本課程使用Dev-C++5.11。使用DevC++編譯運行C語言程序使用MicrosoftVisualC++6.0編譯運行C語言程序MicrosoftVisualC++,(簡稱VisualC++、MSVC、VC++或VC)是Microsoft公司推出的以C++語言為基礎的開發Windows環境程序,面向對象的可視化集成編程系統。它不但具有程序框架自動生成、靈活方便的類管理、代碼編寫和界面設計集成交互操作、可開發多種程序等優點使用MicrosoftVisualC++6.0編譯運行C語言程序實例分析與實現實例1編程求某學生3年的學費和住宿費(學費5000元/年,住宿500元/年)之和。分析:(1)用x表示每年的學費,y表示每年的住宿費,z表示年數,sum表示費用總額。(2)sum=(x+y)×z(3)輸出sum實例2已知圓的半徑為3厘米,求圓的周長和面積。分析:(1)用r表示圓的半徑,l表示圓的周長,s表示圓的面積。(2)l=2×π×r,s=π×r×r(3)輸出l,s【想一想】(1)用DevC++編譯環境運行C語言程序一般需要幾步?(2)C語言程序的結構主要有幾部分。Thechapterisover!第2單元C語言基礎摘要2.1數據類型2.1.1進制與進制轉換2.1.2整數類型2.1.3實數類型2.1.4字符類型2.2常量與變量2.2.1常量2.2.2變量2.3運算符與表達式2.3.1算術運算符和算術表達式2.3.2賦值運算符和賦值表達式2.3.3位運算2.3.4數據類型轉換2.3.5幾個特殊的運算符實例分析與實現2.1數據類型49數據類型學生信息管理系統超市信息管理系統姓名性別年齡籍貫成績...商品貨號名稱價格數量供貨商...數據:數據:現實中有哪些類型的數據?不同類型的數據可以進行哪些運算?502.1數據類型C數據類型基本數據類型構造類型指針類型空類型void字符型char枚舉型enum實型(浮點型)單精度實型float雙精度實型double整型int數組結構體struct共用體union短整型short長整型long整型int2.1數據類型2.1.1進制與進制轉換522.1.1進制轉換1.進制

進制是一種計數機制,它可以使用有限的數字符號代表所有的數值。X進制表示各位上的數據在運算時逢X進一位。

例如十進制的基數為10,數碼由0~9組成,計數機制是“逢十進一”。在計算機中,對于任何一個數,除了十進制外,還常用二進制、八進制和十六進制表示。532.1.1進制轉換(1)二進制。

二進制由0和1兩個數碼組成,計數機制是“逢二進一”。

例如使用二進制表示十進制數字2時,個位上的數字為2,逢二進一,應將第二位上的數字置為1,此時個位上的數字減去2變為0,即(10)2。542.1.1進制轉換(2)八進制。

八進制由0~7共八個數碼組成,計數機制是“逢八進一”。在C語言中添加前綴數字0以表示八進制數。

例如:使用八進制表示十進制數字8時,逢八進一,應將第二位上的數字置為1,個位上的數字是8-8=0,因此表示為010。

再如:使用八進制表示十進制數字17時,因為17=2×8+1,應將第二位上的數字置為2,個位數上的數字是17-2×8=1,因此表示為021。552.1.1進制轉換(3)十六進制。

十六進制由0~9、A~F(或a~f,分別對應十進制的10~15)共16個數碼組成,計數機制是“逢十六進一”。C語言中添加前綴數字0和字母X(或x)以表示十六進制數。

例如:使用十六進制表示十進制數字16時,逢十六進一,應將第二位上的數字置為1,此時個位上的數字是16-16=0,因此表示為0X10。

再如:使用十六進制表示十進制數字45時,因為45=2×16+13,應將第二位上的數字置為2,個位上的數字是45-2×16=13,對應的十六進制數是D,因此表示為0X2D。562.1.1進制轉換十進制二進制八進制十六進制00000001000111200102230011334010044501015560110667011177810001089100111910101012A11101113B12110014C13110115D14111016E15111117F572.1.1進制轉換2.進制轉換

在計算機中,不管用哪種進制形式來表示數據,數據本身是不會發生變化的。因此,不同進制的數據是可以相互轉換的。。582.1.1進制轉換(1)二進制、八進制、十六進制數轉換為十進制數。

二進制、八進制、十六進制數轉換為十進制數的規律是相通的,通常采用“按權求和”的方法,即把二進數(或八進制、十六進制數)按位權的形式展開為多項式和的形式,求得的和就是其對應的十進制數。592.1.1進制轉換例如:計算二進制數(1101.101)2對應的十進制數。解:將二進制數的整數部分和小數部分的每位數乘以2的相應次方,得到的各乘積相加即可。(1101.101)2=(1×23+1×22+0×21+1×20).(1×2-1+0×2-2+1×2-3)=13.625602.1.1進制轉換將八進制數、十六進制數轉換為十進制數,只需要將各位上的權值改為8或者16的對應次方即可。

例如:計算八進制數0256.24、十六進制數0X21F對應的十進制數。解:0256.24=(2×82+5×81+6×80).(2×8-1+4×8-2)=174.3125

0X21F=2×162+1×161+15×160=543612.1.1進制轉換(2)十進制數轉換為二進制、八進制、十六進制數。

將一個十進制數轉換為二進制數,需要將整數部分和小數部分分別轉換。

整數部分:將十進制整數轉換成二進制數通常采用“除2取余法”,即將十進制數除以2,余數為所求二進制數的最低位上的數,商繼續除以2,余數為所求二進制數的第二位上的數。這個步驟重復進行,直到商為零為止。最后將求出的所有余數按先后順序從右向左順序排列,即為二進制數的整數部分。622.1.1進制轉換(2)十進制數轉換為二進制、八進制、十六進制數。

小數部分:將十進制小數轉換成二進制小數采用“乘2取整,順序排列”法,即用2乘十進制小數,可以得到一個乘積,將該乘積的整數部分取出,作為所求二進制數小數部分的最高位的數,再用2乘余下的小數部分,又得到一個乘積,將該乘積的整數部分取出,作為所求二進制數小數部分的第二位的數。這個步驟重復進行,直到乘積中的小數部分為零為止。如果乘積中的小數部分總不為零,那步驟進行到達到題目所要求的精度即可。最后將求出的所有整數部分按先后順序從左到右排列,即為二進制的小數部分。632.1.1進制轉換例如:計算十進制數25.625對應的二進制數。解:先計算整數部分:25÷2=12余數為112÷2=6余數為06÷2=3余數為03÷2=1余數為11÷2=0余數為1所以25=(11001)2再計算小數部分:0.625×2=1.25整數為10.25×2=0.5整數為00.5×2=1整數為1所以0.625=(0.101)2因此25.625=(11001.101)2。642.1.1進制轉換再如:計算十進制數0.7對應的二進制數。解:0.7×2=1.4整數為10.4×2=0.8整數為00.6×2=1.6整數為10.6×2=1.2整數為10.2×2=0.4整數為00.4×2=0.8整數為0……因此0.7=(0.101100…)2把十進制數轉換為八進制、十六進制數時,將基數2換成8、16就可以了。652.1.1進制轉換例如:將25轉換為八進制數。解:25÷8=3余數為13÷8=0余數為3所以25=031再如:將25十六進制數。解:25÷16=1余數為91÷16=0余數為1所以25=0X19662.1.1進制轉換(3)二進制數與八進制數的轉換。

二進制數轉換為八進制數:通常采用“取三合一”法,即以二進制的小數點為分界點,將二進制數整數部分從右向左、小數部分從左向右,每三位分一組(如果整數最高位或小數最低位分組內的數據不足三位,可以填0以湊足三位)。每組中的三位二進制按權求和相加就得到一位八進制數,各組依次得到的數字連接起來,就構成對應的八進制數672.1.1進制轉換例如:將二進制數(1011110.10101)2轉換為八進制數。解:

將1011110.10101分組:(001

011

110).(101

010),

每組三位二進制數分別轉換為一位八進制數

因此:(1011110.10101)2=0136.52。682.1.1進制轉換(3)二進制數與八進制數的轉換。

八進制轉換為二進制,通常采用“取一分三”法,即每位八進制數轉換成三位二進制數,再連接起來即可。692.1.1進制轉換例如:將八進制數0347.76轉換為二進制數。解:將347.76中每位數字分別轉換為三位二進制數:(011

100

111).(111

110)

自左向右連接起來,高位的0和最低位的0可以省略因此:0347.76=(11100111.11111)2。702.1.1進制轉換(4)二進制與十六進制的轉換。

二進制轉換為十六進制,通常采用“取四合一”法,即以二進制的小數點為分界點,將二進制數整數部分從右向左、小數部分從左向右,每四位分一組(如果整數最高位或小數最低位分組內的數據不足四位,可以填0以湊足四位)。每組中的四位二進制按權求和相加就得到一位十六進制數,各組依次得到的數字連接起來,就構成對應的十六進制數712.1.1進制轉換例如:將二進制數(1011110)2轉換為十六進制數。解:將1011110分組:

(0101

1110)

每組四位二進制數分別轉換為一位十六進制數

因此:(1011110)2=0X5E。722.1.1進制轉換(4)二進制與十六進制的轉換。

十六進制轉換為二進制,通常采用“取一分四”法,即每位十六進制數轉換成四位二進制數,再連接起來即可。732.1.1進制轉換例如:將十六進制數0X25C.F2轉換為二進制數解:將25C.F2中每位數字分別轉換為二進制數:(0010

0101

1100).(1111

0010)自左向右連接起來,整數部分高位的0和小數部分最低位的0可以省略

因此:0X25C.F2=(1001011100.1111001)2。2.1數據類型2.1.2整數類型752.1.2整數類型1.整型數據的分類整型數據分為:基本整型、長整型、短整型、無符號型類型名類型標識符字節數取值的范圍短整型short[int]2-215~215-1(-32768~32767)無符號短整型ushort[int]20~0xffff(0~65535)基本整型int4-231~231-1(-2147483648~2147483647)無符號整型usigned[int]40~0xffffffff(0~4294967295)長整型long[int]4-231~231-1(-2147483648~2147483647)無符號長整型ulong40~0xffffffffUL(0~4294967295)76原碼、反碼和補碼在計算機中數分為有符號數和無符號數。它們是以二進制形式表示的,有三種表示方法,即原碼、反碼和補碼。三種表示方法均由符號位和數值位兩部分構成。符號位在最高位,用0表示“正”,用1表示“負”其余位是數值位。00110010110011101010110001111101符號位數值位77原碼、反碼和補碼00000000000000000000000001111101unsignedinti=132;000000000000000000000000001111101inti=132;11111111111111111111111110000011inti=-132;78原碼、反碼和補碼原碼:按照二進制的方法來表示數的絕對值。用這樣的表示方法得到的就是數的原碼。00000000000000000000000001111101inti=132;10000000000000000000000001111101inti=-132;79原碼、反碼和補碼反碼:正數的反碼與其原碼相同,負數的反碼為其原碼除符號位以外的各位按位取反。00000000000000000000000001111101inti=132;11111111111111111111111110000010inti=-132;80原碼、反碼和補碼補碼:正數的補碼與其原碼相同,負數的補碼是將其原碼除符號位之外的各位求反之后,在末位再加1。00000000000000000000000001111101inti=132;11111111111111111111111110000011inti=-132;81原碼、反碼和補碼正數的原碼、反碼、補碼相同。負數的原碼、反碼、補碼不同。數值在計算機中以補碼形式存放。127的原碼-127的補碼取反加182原碼、反碼和補碼例如:求-127的補碼:1000000000000000000000000111111111111111111111111111111110000001第三步:加1第一步:確定符號位1,數據位是127的原碼11111111111111111111111110000000第二步:除符號位外,各位取反83例如:11111111111111111111111111111111問題:該二進制數是什么數的補碼?方法:除符號位外各位取反、加1、加上負號10000000000000000000000000000000除符號位外各位取反10000000000000000000000000000001加111111111111111111111111111111111-1加上負號2.1數據類型2.1.3實數類型852.1.3實數類型

實數類型數據又稱實數、實型或浮點數,指的是帶有小數部分的非整數數值。

例如:342.15,3.6E-6

C語言提供了兩種表示實數的類型:單精度型和雙精度型,類型標識符分別為float和double。

862.1.3實數類型float型實數占4個字節的存儲空間,表示的數值范圍為-1038~1038,提供6~7位有效數字;float型數據絕對值小于10-38的數被處理成零值。double型實數占用8個字節的存儲空間,表示的數值范圍是-10308~10308,提供15~16位有效數字。絕對值小于10-308的數被處理成零值。

2.1數據類型2.1.4字符類型882.1.4字符類型字符型數據包括兩種形式:單個字符和字符串。

例如,'a'是字符,而"abc"是字符串

在計算機中,字符是以ASCII碼的形式存儲的。一個字符占用1個字節的存儲空間。字符類型的標識符是char。

892.1.4字符類型例如:字符‘A’的ASCII碼對應十進制數值為65,用二進制表示是01000001;字符'5’的ASCII碼對應十進制數值為53,用二進制數表示是00110101。

2.2常量與變量2.2.1常量912.2.1常量1、整型常量整型常量就是整數。可以用以下三種形式表示。(1)十進制整常數。

例如:25、-623、0922.2.1常量1、整型常量整型常量就是整數??梢杂靡韵氯N形式表示。(2)八進制整常數。例如:016、0177777、-010等是合法的八進制數。256、079不是合法的八進制數。932.2.1常量1、整型常量整型常量就是整數??梢杂靡韵氯N形式表示。(3)十六進制整常數。

例如:0X2A、0x1AB0、0XFFFF都是合法的十六進制數。5A、0X2H不是合法的十六進制數。942.2.1常量2、實型常量實數在C語言中又稱浮點數。實數有兩種表示方法。(1)小數形式。由數字0~9和小數點組成(注意必須有小數點)。

例如:0.0、25.4、.12、22.、-56.33952.2.1常量2、實型常量實數在C語言中又稱浮點數。實數有兩種表示方法。(2)指數形式。由十進制數加階碼標志小寫字母“e”(或大寫字母“E”)和階碼(必須是整數)組成。其中,字母e(E)前面必須有數字,后面必須是整數。

例如:2.3E5表示2.3×1055.6e-3表示5.6×10-3-1.8E-2表示-1.962.2.1常量2、實型常量實數在C語言中又稱浮點數。實數有兩種表示方法。以下不是合法的實型常量。123(無小數點)E4(階碼“E”之前無數字)。23.-E3(負號的位置不對)。2.7E(無階碼)972.2.1常量3、字符常量字符常量是用一對單撇號字符(西文單引號)括起來的一個字符。例如,'b'、'Z'、'='、'?'、'5'都是字符常量。在計算機中,字符常量有以下特點。(1)字符常量只能用單引號括起來,不能用雙引號或其他符號括起來。(2)字符常量只能是單個字符,不能是多個字符。(3)字符可以是字符集中的任意字符。982.2.1常量992.2.1常量3、字符常量由于字符常量在計算機中是以ASCII碼形式存儲的,因此,它可以參與各種運算。例如:'B'-'A'值為1'A'+2值為67'b'-32值為66'9'-'0'的值為9'c'<'d'的值為true1002.2.1常量轉義字符:

由一個反斜杠(\)后跟規定字符構成,具有特定含義,稱為轉義字符。轉義字符是作為一個字符處理的,存儲時占用1個字節。1012.2.1常量常用轉義字符

轉義字符含義ASCII碼\n換行10\t水平制表(跳到下一個tab位置)9\b退格(Backspace)8\0空字符0\\反斜杠字符92\’單引號字符39\”雙引號字符34\ddd1~3位八進制數據所代表的字符\xhh1~2位十六進制數據所代表的字符1022.2.1常量【例2.1】轉義字符的使用#include<stdio.h>intmain(){ printf("\"china\"\n"); printf("My\tCountry.\n"); printf("Iamhap\160\x79.\n"); printf("Haya\b\b\b\bowareyou\n"); return0;}1032.2.1常量4、字符串常量字符串常量簡稱字符串,是用一對雙撇號(西文雙引號)括起來的一串字符,字符的個數稱為字符串的長度。如"Helloworld"、"a"、"C語言"都是字符串常量。1042.2.1常量4、字符串常量在字符串結尾,計算機自動加上字符‘\0’,表示該字符串的結束。因此,字符串常量的存儲單元個數要比字符串中字符的個數多1。例如:字符串常量"a"在內存中占2個字節,分別存儲'a'和'\0'。字符串"Thisisacomputer"字符個數為18,但占用19個字節,最后一個字節存放'\0'。字符個數為0的空串“”實際上也存了一個字符‘\0’。1052.2.1常量4、字符串常量字符串常量和字符常量的區別如下。(1)字符常量由單引號括起來的字符,而字符串常量是由雙引號括起來的字符。盡管'a'與"a"都含有一個字符,但在C程序中,它們具有不同的含義。(2)字符常量只能是一個字符,字符串常量可以是一個或多個字符。(3)可以把一個字符常量賦予一個字符變量,但不能把一個字符串常量賦予一個字符變量。(4)字符常量占1個字節內存空間,字符串常量所占內存的字節數等于其字符的個數加1。1062.2.1常量5、符號常量字符常量是用一對單撇號字符(西文單引號)括起來的一個字符。例如,'b'、'Z'、'='、'?'、'5'都是字符常量。在計算機中,字符常量有以下特點。(1)字符常量只能用單引號括起來,不能用雙引號或其他符號括起來。(2)字符常量只能是單個字符,不能是多個字符。(3)字符可以是字符集中的任意字符。1072.2.1常量5、符號常量C語言提供的常量有:整型常量、實型常量、字符常量、字符串常量和符號常量。用一個標識符來代表一個常量,該標識符叫作符號常量。其一般形式為:

#define標識符

常量例如:#defineNUM0//定義符號常量NUM一般用大寫字母表示,以便與其他標志相區別命名盡量“見名知義”例如:#definePI3.141591082.2.1常量【例2.2】使用符號常量計算半徑為5的圓形周長和面積。#include<stdio.h>#definePI3.14main(){ printf("周長是:%f\n",2*PI*5); printf("面積是:%f\n",PI*5*5);}1092.2.1常量和符號常量使用符號常量要注意:一個#define命令只能定義一個符號常量用一行書寫,不用分號結尾符號常量一旦定義,就可以在程序中代替常量使用。由于是常量,所以在其作用域內不能再被修改或賦值。例如:#defineNUM10main(){

NUM=50;//編譯時會提示錯誤,符號常量NUM的值不能再被修改}2.2常量與變量2.2.2變量2.2.2變量

變量:在程序運行過程中,其值可以發生變化的量112給變量所取的名字叫變量名。定義變量的名字需要遵循標識符的命名規則。標識符是用來標識變量、符號常量、數組、函數、文件等名字的有效字符序列。1、標識符113只能由字母、數字和下劃線組成第一個字符必須為字母或下劃線區分大小寫字母C語言內部規定的標識符(即關鍵字)不能作為用戶標識符(例如:Score1,Stu_Name)(例如:_sum,p1)標識符的命名規則:(例如:sum,SUM,Sum不同)1142、關鍵字

C語言內部預先定義的標識符稱為關鍵字(或保留字)。關鍵字不能夠作為用戶標識符。ANSI標準中規定了32個符號為基本關鍵字1152、關鍵字

autobreakcasecharconstcontinuedefaultdodoubleelseenumexernfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile

C語言中的關鍵字1163、變量的定義變量在內存中占用一定的存儲單元,在該存儲單元中存放變量的值。程序中用到的所有變量都必須有一個變量名。變量名和變量值是兩個不同的概念。3a變量名變量值存儲單元1173、變量的定義不同類型的變量在內存中占據存儲單元的數量及存儲的格式不相同。例如:charch=‘1’;

inti=1;0000000000000000000000000000000100110001ch

i

1183、變量的定義變量必須“先定義后使用”。這樣做的目的是:1.便于編譯程序檢查對該變量的運算是否合法。例如,整型變量可以進行求模(余數)運算,實型變量不可以進行求模運算2.保證程序中變量名的正確使用。例如:#include<stdio.h>intmain(){ inta=5,b=6,sum=0; svm=a+b;return0;}程序第5行錯將sum寫為svm,編譯時,系統會報告svm沒定義,并給出錯誤提示“undeclaredidentifier”。定義變量的一般形式為:

[存儲類型]數據類型變量名1[,變量名2,…];例如:inta

,b,c;//定義了3個整型變量floatx;//定義了單精度實型變量xdoublec;//定義了雙精度實型變量ccharch;//定義了字符型變量ch3、變量的定義autoregisterexternstatic3、變量的定義注意:①允許在一個類型說明符后,定義多個相同類型變量。類型說明符與變量名之間至少用一個空格間隔,各變量名之間用逗號間隔。②最后一個變量名后面用“;”號結尾。③變量定義必須放在變量使用之前,一般放在函數體開頭部分。④沒有給變量賦初值,并不意味著該變量中沒有數值,只表明該變量中沒有確定的值,因此直接使用這種變量的話可能產生莫名其妙的結果,有可能導致運算錯誤。例如:inta,b,sum;sum=a+b;(結果毫無意義)給變量賦初值的過程稱為變量的初始化。例如:inta=256,b=-2;//定義了a和b兩個整型變量,初值分別為256和-2floatx=5.26;//定義了單精度實型變量x,初值為5.26doublec,d=2.5;//定義了雙精度實型變量c和d,并給d賦初值charch=‘a’;//定義了字符型變量ch,其值為字符a4、變量的初始化122【例2.3】整型變量的定義與使用#include<stdio.h>main(){inta=3,b=5,c,d; c=a+b; d=a-b; printf("a+b=%d,a-b=%d\n",c,d);//輸出a與b的和與差}1235.實型數據的舍入誤差【例2.4】實型數據的舍入誤差#include<stdio.h>main(){ floata=1.234567E10,b; b=a+20; printf("a=%f\n",a); printf("b=%f\n",b);}運行程序,輸出結果為:1.要避免一個大數和一個小數直接相加、減。2.可以將float類型改為double類型2.2.2變量6、字符型數據與整型數據字符變量字符變量是用來存放單個字符的變量,也包括轉義字符。字符型變量的類型說明符是char。例如:charch1;/*定義ch1為字符型變量*/charch1,ch2=‘a’;/*定義ch1、ch2為字符型變量,

并給ch2賦初值‘a'*/unsignedcharch3;/*定義ch3為無符號的字符型變量*/定義變量及初始化的一般形式為:

char變量名1[=值1][,變量名2[=值2],……];6、字符型數據與整型數據的關系字符型變量在內存中占用1個字節,只能存放一個字符,并以該字符的ASCII碼的值的形式存放。在C語言中,一個字符型數據可以按照它的ASCII碼整數值進行算數運算。說明:【例2.5】給字符變量賦整數值#include<stdio.h>main(){ charch1=65,ch2=66; printf("%c,%c\n",ch1,ch2); printf("%d,%d\n",ch1,ch2);}運行程序,輸出結果為:6、字符型數據與整型數據的關系【例2.6】大小寫字母的轉換#include<stdio.h>#definePI3.14main(){ charch1,ch2; ch1='a'; ch2='Q'; ch1=ch1-32; ch2=ch2+32; printf("%c,%c\n%d,%d\n",ch1,ch2,ch1,ch2);}程序運行結果:6、字符型數據與整型數據的關系【例2.7】字符型變量賦值給整型變量#include<stdio.h>main(){ charx='\256'; inty; y=x; printf("y=%d\n",y);}運行程序結果為:X的二進制數據存放:10101110y的二進制數據存放:111111111111111111111111101011106、字符型數據與整型數據的關系字符變量賦值給整型變量【例2.8】無符號字符型變量賦值給整型變量#include<stdio.h>main(){ unsignedcharx='\256'; inty; y=x; printf("y=%d\n",y);}運行程序結果:X的二進制數據存放:10101110y的二進制數據存放:000000000000000000000000101011102.3運算符與表達式2.3.1算術運算符和算術表達式

運算符與表達式運算符:用來表示各種運算的符號。按運算對象個數可分為:單目運算符、雙目運算符、三目運算符運算符還有運算方向的規定,即結合性。自左向右進行運算的結合方向是左結合自右向左進行運算的結合方向為右結合算術運算符和算數表達式1.算術運算符加(+)、減(-)、乘(*)、除(/)、求模(%)【例2.9】除法運算符的應用舉例#include<stdio.h>main(){ printf("%d,%d\n",10/3,-10/3); printf("%f,%f,%f,%f",10.0/3,10.0/-3,-10.0/3,-10.0/-3);}運行程序,結果為:算術運算符和算數表達式【例2.10】求余數運算符的應用舉例#include<stdio.h>main(){ printf("%d\n",7%3); printf("%d,%d,%d\n",(-7)%3,7%(-3),(-7)%(-3));}運行程序,結果為:算術運算符和算數表達式2.算術表達式

用算術運算符和一對圓括號將操作數(常數、變量、函數等)連接起來,符合C語言語法的表達式稱為算術表達式。數學表達式錯誤的程序表達式正確的程序表達式b2-4acb*b-4acb*b-4*a*c(b*b-4*a*c)/2*a(b*b-4*a*c)/(2*a)a+b/a-b(a+b)/(a-b)2.3.1算術運算符和算數表達式注意:C語言中不允許使用方括號和花括號,只能使用圓括號。圓括號是C語言中優先級別最高的運算符。圓括號必須成對使用。當使用了多層圓括號時,先完成最里層的運算,最后處理最外層括號。諸如求絕對值和平方根這類數學運算,C語言已經將它們定義成標準庫函數,存放在數學庫頭文件“math.h”中,在使用時,用戶只需要直接使用即可。2.3.1算術運算符和算數表達式注意:五種算術運算符中,單目運算符“-”的優先級最高,其次是乘“*”、除“/”和求模“%”三種運算符,最后是加“+”、減“-”運算。算術運算符具有左結合性,即先左后右。2.3運算符與表達式2.3.2賦值運算符和賦值表達式2.3.2賦值運算符和賦值表達式賦值號“=”稱為賦值運算符。由賦值運算符組成的表達式稱為賦值表達式。賦值表達式形式如下:

變量名=表達式賦值號左邊必須是一個變量名,賦值號右邊允許是常量、變量和表達式。賦值運算符的功能是首先求出右邊表達式的值,然后將此值賦給左邊變量。2.3.2賦值運算符和賦值表達式賦值運算符的特點:(1)賦值運算符的優先級別很低,在所有的運算符中,僅高于逗號運算符,低于其他所有運算符。(2)賦值運算符不同于數學中的等號,等號沒有方向,而賦值號具有方向性。例如a=b和b=a在數學上意義是等價的,但是C語言中,執行a=b操作后,變量a的值被改寫成了變量b的值。2.3.2賦值運算符和賦值表達式賦值運算符的特點:(3)

C語言規定,賦值表達式左邊變量得到的值作為賦值表達式的值。所以表達式a=5的值等于5。(4)賦值運算符具有右結合性,因此a=b=5也是合法的,與a=(b=5)等價,最后a和b的值均等于52.3.2賦值運算符和賦值表達式注意:定義變量時不能使用連等的形式例如:inti=5;//相當于:inti;i=5;inti,j=5;//相當于:inti,j;j=5;inti=j=5;//錯誤2.3運算符與表達式2.3.3位運算2.3.3位運算位運算是指在C語言中能進行二進制位的運算。位運算有位邏輯運算和移位運算兩種。位邏輯運算能夠方便地設置或屏蔽內存中某個字節的一位或幾位,也可以對兩個數按位相加。移位運算可以對內存中某個二進制數左移或右移若干位。2.3.3位運算位運算符及含義位運算符含義舉例&按位與a&b|按位或a|b^按位異或a^b~按位取反~a<<左移a<<1>>右移a>>12.3.3位運算以下例題中a和b均為整型變量。設a的值為6,對應二進制數為0000000000000110b的值為10,對應二進制數為00000000000010102.3.3位運算1、位邏輯運算符(1)按位與運算符(&)運算規則:參與運算的兩數對應的各二進制位相與,只有對應的兩個二進制位均為1時,結果位才為1,否則為0。

0&0=0;0&1=0;1&0=0;1&1=12.3.3位運算【例2.11】計算a&b的值。a的補碼:0000000000000110b的補碼:0000000000001010按位與&

結果的補碼:0000000000000010即:6&10=22.3.3位運算按位與運算符通常有以下幾種特殊的用途。①將數據的某些位清零。例如執行語句:a=a&0;結果為a=0。②判斷數據的某位是否為1。例如計算表達式a&0x8000,其值如果為0,表示變量a的最高位為0;其值如果非0,表示變量a的最高位為1。③保留數據的某些位。例如執行語句:a=a&0xff00,結果保留a中高八位不變,低八位數據被清空。2.3.3位運算(2)按位或運算符(|)運算規則:

參與運算的兩數對應的各二進制位相或,如果對應的兩個二進制位均為0,則結果為0,否則為1。0|0=0;0|1=1;1|0=1;1|1=12.3.3位運算【例2.12】計算a|b的值。a的補碼:0000000000000110b的補碼:0000000000001010按位或|

結果的補碼:0000000000001110即:6|10=142.3.3位運算按位或通常用于將數據的某些特定位置為1。

例如,要將變量x的低八位全部置1,高八位不變,可以用x=x|0x00ff語句來實現。

x:10110101000001100x00ff:0000000011111111按位或|

結果:10110101111111112.3.3位運算(3)按位異或運算符(^)運算規則:參與運算的兩數對應的各二進制位相異或,當兩個對應的二進制位相異時,結果為1,相同則為00^0=0;0^1=1;1^0=1;1^1=02.3.3位運算【例2.13】計算a^b的值。a的補碼:0000000000000110b的補碼:0000000000001010按位異或^

結果的補碼:0000000000001100即:6^10=12。2.3.3位運算按位異或具有“與1異或的位其值翻轉;與0異或的位其值不變”的規律,所以通常用于保留數據的原值,或者使數據的某些位翻轉。例如:inta=5,b,c;b=a^0;/*結果b=5*/c=a^0x000f;/*結果c=10*/

2.3.3位運算【例2.14】假設有整型變量a和b,并且a=6,b=10?,F在要求不用中間變量將a和b的值互換。可以用以下三條賦值語句實現變量值互換的功能。a=a^b;/*即a=6^10=12*/b=b^a;/*即b=10^12=6*/a=a^b;/*即a=12^6=10*/2.3.3位運算(4)按位取反運算符(~)運算規則:

對參與運算的數的各二進位按位求反,即將1變為0,0變為1。例如:a=0000000000000110

那么~a=11111111111110012.3.3位運算(1)左移運算符(<<)運算規則:對“<<”左側的數據中的各二進制位全部左移,左移的位數由“<<”右側數據指定。移位后右邊出現的空位補0,移出存儲空間的高位數據舍棄。2.3.3位運算例如,a<<2,表示將a的各位依次向左移2位,a的最高2位移出去舍棄,空出的低2位以0填補。假設有chara=5,則a<<2的過程如下。a:00000101a<<2:(00)00010100

舍棄

補0即a<<2的值為20。2.3.3位運算2、移位運算符(2)右移運算符(>>)運算規則:對“>>”左側的數據中的各二進制位全部右移,右側的位數由“>>”右側數據指定。移位后移出存儲空間的低位數據舍棄,左邊空出的位補0還是補1,分以下兩種情況。2.3.3位運算2、移位運算符①對無符號數進行右移時,空出的高位補0。這種右移稱為“邏輯右移”。例如,有語句unsignedchara=0x80,則a>>1的運算過程是a:10000000等于十進制數128a>>1:010000000

等于十進制數64

補0舍棄所以a>>1的值為0x40。2.3.3位運算2、移位運算符②對帶符號數進行右移時,空出的高位全部以符號位填補,即正數補0,負數補1。這種右移稱為“算術右移”。例如,有語句chara=0x80,則a>>1的過程如下a:10000000等于十進制數-128a>>1:110000000

等于十進制數-64

補1舍棄2.3.3位運算2、移位運算符②對帶符號數進行右移時,空出的高位全部以符號位填補,即正數補0,負數補1。這種右移稱為“算術右移”。又如:chara=0x60;a:01100000等于十進制數96a>>1:001100000

等于十進制數48

補0舍棄2.3.3位運算3、位賦值運算符位運算符與賦值運算符結合可以組成位賦值運算符。位賦值運算符含義舉例等價于&=位與賦值a&=ba=a&b|=位或賦值a|=ba=a|b^=位異或賦值a^=ba=a^b<<=左移賦值a<<=ba=a<<b>>=右移賦值a>>=ba=a>>b表2.98位賦值運算符2.3運算符與表達式2.3.4數據類型轉換1、賦值運算類型轉換賦值號兩側類型不同時,右邊自動轉換為左邊類型(1)將實型數據賦給整型變量時,舍去實數的小數部分。(2)將整型數據賦給實型變量時,數值不變,以浮點形式存放,即增加小數部分(小數部分的值為0)。賦值運算轉換規則:例如:#include<stdio.h>intmain(){ inta=98.123; charb=a; floatc=b; printf("a=%d,b=%c,c=%f\n",a,b,c); return0;}1、賦值運算類型轉換(3)將字符型數據賦值給整型變量時,需要進行數據的擴展填充。

將字符的ASCII碼值復制到整型變量的低八位中,對于無符號字符型數據,整形變量高位補0;對于有符號字符型數據,整形變量高位補字符的最高位(0或1)。

1、賦值運算類型轉換01101011ch1:c:00000000000000000000000001101011b:ch2:0000000000000000000000010100100001001000‘k(107)‘H’(72)(4)將整型數據賦給字符變量時,只把其低八位賦給字符變量。例如:inta,b=328,c; charch1='k',ch2; c=ch1; ch2=b;(5)整型賦值給短整型#include<stdio.h>intmain(){ inta=0xaaaaaaaa; shortb=a; printf("%d",b);}b的二進制數據1010101010101010a的二進制數據101010101010101010101010101010101、賦值運算類型轉換1712.自動類型轉換當運算符兩邊的運算對象類型相同時,可以直接進行運算,并且運算結果和運算對象具有同一數據類型。當運算符兩邊的運算對象類型不同時,系統自動地將操作數轉換成同種類型。計算結果的數據類型為級別較高的類型。高低doublelongunsignedintfloatchar,short1722.自動類型轉換【例2.16】數據類型自動轉換舉例#include<stdio.h>main(){ floatx=5.0,y; inta=6; charc='B'; y=7+a*c+x; printf("y=%f",y);}運行程序,結果為:3.強制類型轉換

C語言中允許使用類型說明符關鍵字對操作數據進行強制類型轉換,強制類型轉換表達式的形式如下:(類型說明符)(表達式)(int)7.678=?(double)(10%3)=?例如:inta=3,b=4(float)a/(float)b=?(float)(a/b)=?3.強制類型轉換1.在強制類型轉換時,取整類型轉換不是按照四舍五入原則處理的。例如:floata=2.8則(int)a的值為2。2.強制類型轉換并不改變變量原有的數據類型和變量的值。上式中,雖然表達式(int)a的值為2,變量

a的類型仍然是float,其值仍然是2.8。注意:3.強制類型轉換3.強制類型轉換運算符和表達式都必須加括號(單個變量可以不加括號)?!纠?.17】強制類型轉換符的使用#include<stdio.h>main(){ floatx=45.2353; x=(int)(x*100+0.5)/100.0; printf("x=%.2f\n",x);

}運程程序,結果為:2.3運算符與表達式2.3.5幾個特殊的運算符2.3.5幾個特殊的運算符1.復合賦值運算符在賦值運算符之前加上其他運算符,可以構成復合賦值運算符。常用的復合賦值運算符:+=、-=、*=、/=、%=a+=x相當于a=a+xa-=y相當于

a=a-(x-y)a*=x-y相當于a=a*(x-y)a/=x*y相當于a=a/(x*y)a%=y相當于a=a%y2.自增運算符(++)和自減運算符(--)二者都是單目運算符,運算對象必須是變量,不能為表達式或常量++i,--i變量在使用之前先自增1,自減1i++,i--變量在使用之后再自增1,自減12.3.5幾個特殊的運算符179【例2.19】自增、自減運算符的使用#include<stdio.h>main(){ intx=3,y=5,a,b; a=x++; b=++y; printf("x=%d,y=%d,a=%d,b=%d\n",x,y,a,b);}運行程序,結果為:2.3.5幾個特殊的運算符3.逗號運算符

逗號運算符“,”將多個表達式連接起來,組成逗號表達式。逗號表

溫馨提示

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

評論

0/150

提交評論