C語言程序設(shè)計(jì)實(shí)例教程(慕課版第2版)PPT完整全套教學(xué)課件_第1頁
C語言程序設(shè)計(jì)實(shí)例教程(慕課版第2版)PPT完整全套教學(xué)課件_第2頁
C語言程序設(shè)計(jì)實(shí)例教程(慕課版第2版)PPT完整全套教學(xué)課件_第3頁
C語言程序設(shè)計(jì)實(shí)例教程(慕課版第2版)PPT完整全套教學(xué)課件_第4頁
C語言程序設(shè)計(jì)實(shí)例教程(慕課版第2版)PPT完整全套教學(xué)課件_第5頁
已閱讀5頁,還剩612頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第1單元

初識C語言摘要1.1C語言概述1.1.1什么是C語言1.1.2為什么學(xué)習(xí)C語言1.2C語言結(jié)構(gòu)1.2.1C語言程序及結(jié)構(gòu)1.2.2如何開發(fā)C語言程序?qū)嵗治雠c實(shí)現(xiàn)1.1C語言概述1.1.1什么是C語言人類語言

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

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

1000100111011000

機(jī)器指令

mov

ax,bx

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

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

C語言結(jié)構(gòu)【例1.2】程序的功能是從鍵盤輸入一個數(shù)x,求x的正弦值,然后輸出結(jié)果。#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);

}說明部分預(yù)處理命令執(zhí)行部分程序注釋塊注釋。用符號“/*”和“*/”標(biāo)出注釋的開始和結(jié)束。例如:

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

實(shí)現(xiàn)學(xué)生管理的錄入、增加、

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

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

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

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

二進(jìn)制由0和1兩個數(shù)碼組成,計(jì)數(shù)機(jī)制是“逢二進(jìn)一”。

例如使用二進(jìn)制表示十進(jìn)制數(shù)字2時,個位上的數(shù)字為2,逢二進(jìn)一,應(yīng)將第二位上的數(shù)字置為1,此時個位上的數(shù)字減去2變?yōu)?,即(10)2。542.1.1進(jìn)制轉(zhuǎn)換(2)八進(jìn)制。

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

例如:使用八進(jìn)制表示十進(jìn)制數(shù)字8時,逢八進(jìn)一,應(yīng)將第二位上的數(shù)字置為1,個位上的數(shù)字是8-8=0,因此表示為010。

再如:使用八進(jìn)制表示十進(jìn)制數(shù)字17時,因?yàn)?7=2×8+1,應(yīng)將第二位上的數(shù)字置為2,個位數(shù)上的數(shù)字是17-2×8=1,因此表示為021。552.1.1進(jìn)制轉(zhuǎn)換(3)十六進(jìn)制。

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

例如:使用十六進(jìn)制表示十進(jìn)制數(shù)字16時,逢十六進(jìn)一,應(yīng)將第二位上的數(shù)字置為1,此時個位上的數(shù)字是16-16=0,因此表示為0X10。

再如:使用十六進(jìn)制表示十進(jìn)制數(shù)字45時,因?yàn)?5=2×16+13,應(yīng)將第二位上的數(shù)字置為2,個位上的數(shù)字是45-2×16=13,對應(yīng)的十六進(jìn)制數(shù)是D,因此表示為0X2D。562.1.1進(jìn)制轉(zhuǎn)換十進(jìn)制二進(jìn)制八進(jìn)制十六進(jìn)制00000001000111200102230011334010044501015560110667011177810001089100111910101012A11101113B12110014C13110115D14111016E15111117F572.1.1進(jìn)制轉(zhuǎn)換2.進(jìn)制轉(zhuǎn)換

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

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

例如:計(jì)算八進(jìn)制數(shù)0256.24、十六進(jìn)制數(shù)0X21F對應(yīng)的十進(jìn)制數(shù)。解: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進(jìn)制轉(zhuǎn)換(2)十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制、八進(jìn)制、十六進(jìn)制數(shù)。

將一個十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù),需要將整數(shù)部分和小數(shù)部分分別轉(zhuǎn)換。

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

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

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

將1011110.10101分組:(001

011

110).(101

010),

每組三位二進(jìn)制數(shù)分別轉(zhuǎn)換為一位八進(jìn)制數(shù)

因此:(1011110.10101)2=0136.52。682.1.1進(jìn)制轉(zhuǎn)換(3)二進(jìn)制數(shù)與八進(jìn)制數(shù)的轉(zhuǎn)換。

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

100

111).(111

110)

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

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

(0101

1110)

每組四位二進(jìn)制數(shù)分別轉(zhuǎn)換為一位十六進(jìn)制數(shù)

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

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

0101

1100).(1111

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

因此:0X25C.F2=(1001011100.1111001)2。2.1數(shù)據(jù)類型2.1.2整數(shù)類型752.1.2整數(shù)類型1.整型數(shù)據(jù)的分類整型數(shù)據(jù)分為:基本整型、長整型、短整型、無符號型類型名類型標(biāo)識符字節(jié)數(shù)取值的范圍短整型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原碼、反碼和補(bǔ)碼在計(jì)算機(jī)中數(shù)分為有符號數(shù)和無符號數(shù)。它們是以二進(jìn)制形式表示的,有三種表示方法,即原碼、反碼和補(bǔ)碼。三種表示方法均由符號位和數(shù)值位兩部分構(gòu)成。符號位在最高位,用0表示“正”,用1表示“負(fù)”其余位是數(shù)值位。00110010110011101010110001111101符號位數(shù)值位77原碼、反碼和補(bǔ)碼00000000000000000000000001111101unsignedinti=132;000000000000000000000000001111101inti=132;11111111111111111111111110000011inti=-132;78原碼、反碼和補(bǔ)碼原碼:按照二進(jìn)制的方法來表示數(shù)的絕對值。用這樣的表示方法得到的就是數(shù)的原碼。00000000000000000000000001111101inti=132;10000000000000000000000001111101inti=-132;79原碼、反碼和補(bǔ)碼反碼:正數(shù)的反碼與其原碼相同,負(fù)數(shù)的反碼為其原碼除符號位以外的各位按位取反。00000000000000000000000001111101inti=132;11111111111111111111111110000010inti=-132;80原碼、反碼和補(bǔ)碼補(bǔ)碼:正數(shù)的補(bǔ)碼與其原碼相同,負(fù)數(shù)的補(bǔ)碼是將其原碼除符號位之外的各位求反之后,在末位再加1。00000000000000000000000001111101inti=132;11111111111111111111111110000011inti=-132;81原碼、反碼和補(bǔ)碼正數(shù)的原碼、反碼、補(bǔ)碼相同。負(fù)數(shù)的原碼、反碼、補(bǔ)碼不同。數(shù)值在計(jì)算機(jī)中以補(bǔ)碼形式存放。127的原碼-127的補(bǔ)碼取反加182原碼、反碼和補(bǔ)碼例如:求-127的補(bǔ)碼:1000000000000000000000000111111111111111111111111111111110000001第三步:加1第一步:確定符號位1,數(shù)據(jù)位是127的原碼11111111111111111111111110000000第二步:除符號位外,各位取反83例如:11111111111111111111111111111111問題:該二進(jìn)制數(shù)是什么數(shù)的補(bǔ)碼?方法:除符號位外各位取反、加1、加上負(fù)號10000000000000000000000000000000除符號位外各位取反10000000000000000000000000000001加111111111111111111111111111111111-1加上負(fù)號2.1數(shù)據(jù)類型2.1.3實(shí)數(shù)類型852.1.3實(shí)數(shù)類型

實(shí)數(shù)類型數(shù)據(jù)又稱實(shí)數(shù)、實(shí)型或浮點(diǎn)數(shù),指的是帶有小數(shù)部分的非整數(shù)數(shù)值。

例如:342.15,3.6E-6

C語言提供了兩種表示實(shí)數(shù)的類型:單精度型和雙精度型,類型標(biāo)識符分別為float和double。

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

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

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

在計(jì)算機(jī)中,字符是以ASCII碼的形式存儲的。一個字符占用1個字節(jié)的存儲空間。字符類型的標(biāo)識符是char。

892.1.4字符類型例如:字符‘A’的ASCII碼對應(yīng)十進(jìn)制數(shù)值為65,用二進(jìn)制表示是01000001;字符'5’的ASCII碼對應(yīng)十進(jìn)制數(shù)值為53,用二進(jìn)制數(shù)表示是00110101。

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

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

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

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

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

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

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

#define標(biāo)識符

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

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

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

C語言內(nèi)部預(yù)先定義的標(biāo)識符稱為關(guān)鍵字(或保留字)。關(guān)鍵字不能夠作為用戶標(biāo)識符。ANSI標(biāo)準(zhǔn)中規(guī)定了32個符號為基本關(guān)鍵字1152、關(guān)鍵字

autobreakcasecharconstcontinuedefaultdodoubleelseenumexernfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile

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

inti=1;0000000000000000000000000000000100110001ch

i

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

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

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

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

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

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

用算術(shù)運(yùn)算符和一對圓括號將操作數(shù)(常數(shù)、變量、函數(shù)等)連接起來,符合C語言語法的表達(dá)式稱為算術(shù)表達(dá)式。數(shù)學(xué)表達(dá)式錯誤的程序表達(dá)式正確的程序表達(dá)式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算術(shù)運(yùn)算符和算數(shù)表達(dá)式注意:C語言中不允許使用方括號和花括號,只能使用圓括號。圓括號是C語言中優(yōu)先級別最高的運(yùn)算符。圓括號必須成對使用。當(dāng)使用了多層圓括號時,先完成最里層的運(yùn)算,最后處理最外層括號。諸如求絕對值和平方根這類數(shù)學(xué)運(yùn)算,C語言已經(jīng)將它們定義成標(biāo)準(zhǔn)庫函數(shù),存放在數(shù)學(xué)庫頭文件“math.h”中,在使用時,用戶只需要直接使用即可。2.3.1算術(shù)運(yùn)算符和算數(shù)表達(dá)式注意:五種算術(shù)運(yùn)算符中,單目運(yùn)算符“-”的優(yōu)先級最高,其次是乘“*”、除“/”和求?!?”三種運(yùn)算符,最后是加“+”、減“-”運(yùn)算。算術(shù)運(yùn)算符具有左結(jié)合性,即先左后右。2.3運(yùn)算符與表達(dá)式2.3.2賦值運(yùn)算符和賦值表達(dá)式2.3.2賦值運(yùn)算符和賦值表達(dá)式賦值號“=”稱為賦值運(yùn)算符。由賦值運(yùn)算符組成的表達(dá)式稱為賦值表達(dá)式。賦值表達(dá)式形式如下:

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

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

0&0=0;0&1=0;1&0=0;1&1=12.3.3位運(yùn)算【例2.11】計(jì)算a&b的值。a的補(bǔ)碼:0000000000000110b的補(bǔ)碼:0000000000001010按位與&

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

參與運(yùn)算的兩數(shù)對應(yīng)的各二進(jìn)制位相或,如果對應(yīng)的兩個二進(jìn)制位均為0,則結(jié)果為0,否則為1。0|0=0;0|1=1;1|0=1;1|1=12.3.3位運(yùn)算【例2.12】計(jì)算a|b的值。a的補(bǔ)碼:0000000000000110b的補(bǔ)碼:0000000000001010按位或|

結(jié)果的補(bǔ)碼:0000000000001110即:6|10=142.3.3位運(yùn)算按位或通常用于將數(shù)據(jù)的某些特定位置為1。

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

x:10110101000001100x00ff:0000000011111111按位或|

結(jié)果:10110101111111112.3.3位運(yùn)算(3)按位異或運(yùn)算符(^)運(yùn)算規(guī)則:參與運(yùn)算的兩數(shù)對應(yīng)的各二進(jìn)制位相異或,當(dāng)兩個對應(yīng)的二進(jìn)制位相異時,結(jié)果為1,相同則為00^0=0;0^1=1;1^0=1;1^1=02.3.3位運(yùn)算【例2.13】計(jì)算a^b的值。a的補(bǔ)碼:0000000000000110b的補(bǔ)碼:0000000000001010按位異或^

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

2.3.3位運(yùn)算【例2.14】假設(shè)有整型變量a和b,并且a=6,b=10。現(xiàn)在要求不用中間變量將a和b的值互換??梢杂靡韵氯龡l賦值語句實(shí)現(xiàn)變量值互換的功能。a=a^b;/*即a=6^10=12*/b=b^a;/*即b=10^12=6*/a=a^b;/*即a=12^6=10*/2.3.3位運(yùn)算(4)按位取反運(yùn)算符(~)運(yùn)算規(guī)則:

對參與運(yùn)算的數(shù)的各二進(jìn)位按位求反,即將1變?yōu)?,0變?yōu)?。例如:a=0000000000000110

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

舍棄

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

等于十進(jìn)制數(shù)64

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

等于十進(jìn)制數(shù)-64

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

等于十進(jìn)制數(shù)48

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

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

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

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

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

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

a=a-(x-y)a*=x-y相當(dāng)于a=a*(x-y)a/=x*y相當(dāng)于a=a/(x*y)a%=y相當(dāng)于a=a%y2.自增運(yùn)算符(++)和自減運(yùn)算符(--)二者都是單目運(yùn)算符,運(yùn)算對象必須是變量,不能為表達(dá)式或常量++i,--i變量在使用之前先自增1,自減1i++,i--變量在使用之后再自增1,自減12.3.5幾個特殊的運(yùn)算符179【例2.19】自增、自減運(yùn)算符的使用#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);}運(yùn)行程序,結(jié)果為:2.3.5幾個特殊的運(yùn)算符3.逗號運(yùn)算符

逗號運(yùn)算符“,”將多個表達(dá)式連接起來,組成逗號表達(dá)式。逗號表

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論