學(xué)習(xí)c語(yǔ)言詳細(xì)筆記_第1頁(yè)
學(xué)習(xí)c語(yǔ)言詳細(xì)筆記_第2頁(yè)
學(xué)習(xí)c語(yǔ)言詳細(xì)筆記_第3頁(yè)
學(xué)習(xí)c語(yǔ)言詳細(xì)筆記_第4頁(yè)
學(xué)習(xí)c語(yǔ)言詳細(xì)筆記_第5頁(yè)
已閱讀5頁(yè),還剩147頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C語(yǔ)言視頻教程第一講:(1-13)(:語(yǔ)言概述ー、為什么學(xué)習(xí)c語(yǔ)言c的起源和發(fā)展C的特點(diǎn)C的應(yīng)用領(lǐng)域4)C的重要性二、怎樣學(xué)習(xí)C語(yǔ)言三、學(xué)習(xí)目標(biāo)四、常見(jiàn)問(wèn)題答疑(1)學(xué)習(xí)JAVA為什么建議先學(xué)C語(yǔ)言(2)沒(méi)學(xué)過(guò)計(jì)算機(jī)專業(yè)課程能夠?qū)W懂C語(yǔ)言(3)英語(yǔ)和數(shù)學(xué)不好能學(xué)好C語(yǔ)言么?五、課程計(jì)劃六、舉例子:一元二次方程ー、為什么學(xué)習(xí)C語(yǔ)言1)C的起源和發(fā)展(ppt)I機(jī)器語(yǔ)亶ーI 第一代語(yǔ)言在第三代語(yǔ)言中,以1980年為分水嶺,分為結(jié)構(gòu)化和面向?qū)ο笳Z(yǔ)言。Fortran語(yǔ)言主要用于科學(xué)計(jì)算。Basic語(yǔ)言是vb的前生,pascal語(yǔ)言一般是用于教學(xué)。C語(yǔ)言是最重要的,其他的語(yǔ)言一般很少用了。結(jié)構(gòu)化的代表語(yǔ)言是c語(yǔ)言。結(jié)構(gòu)化語(yǔ)言的數(shù)據(jù)和操作是分離的,導(dǎo)致在寫大項(xiàng)目的時(shí)候,會(huì)出現(xiàn)各種各樣莫名其妙的問(wèn)題。在面向?qū)ο蟮恼Z(yǔ)言中C++是最復(fù)雜的語(yǔ)言。由于C++語(yǔ)言太復(fù)雜,sun公司對(duì)C++進(jìn)行了改裝,產(chǎn)生了java語(yǔ)言。而c#是由微軟開發(fā)的,和java相似,幾乎一模ー樣。高級(jí)語(yǔ)言:a+b匯編語(yǔ)言 ADDAX,BX機(jī)器語(yǔ)言 00000001110110000在高級(jí)語(yǔ)言的執(zhí)行速度上,c是最快的,C++其次,而java和c#是最后的。Java和c#流行,主要的ー個(gè)原因是可以跨平臺(tái)。?產(chǎn)生時(shí)間:1972-1973產(chǎn)生地點(diǎn):美國(guó)貝爾實(shí)驗(yàn)室(Bell)創(chuàng)始人: Dennis.M.Ritchie和Ken.Thompson冃的: 改寫UNIX操作系統(tǒng)C語(yǔ)言發(fā)展過(guò)程1983年ANSIC1987年ANSIC871994年C992)C語(yǔ)言的特點(diǎn):?優(yōu)點(diǎn):代碼量小,速度快,功能強(qiáng)大。金山公司最主要是靠wps辦公軟件來(lái)發(fā)展的。Wps是c語(yǔ)言開發(fā)的,其安裝包比Office少了10多倍。三大操作系統(tǒng):windows,unix,linuxWindows內(nèi)核是c語(yǔ)言寫的,而外殼是C++寫的。Java永遠(yuǎn)不可能寫操作系統(tǒng)。因?yàn)閖ava運(yùn)行速度太慢了。而(inux和unix都是純c寫的。操作系統(tǒng)控制了硬件,如果說(shuō)操作系統(tǒng)的運(yùn)行速度慢,那么當(dāng)我們?cè)谶\(yùn)行軟件的時(shí)候,運(yùn)行速度會(huì)更慢。為什么使用c語(yǔ)言寫操作系統(tǒng)呢,首先是因?yàn)閏的運(yùn)行速度快,然后是因?yàn)閏可以直接控制硬件,而其他語(yǔ)言不可以。沒(méi)有指針的語(yǔ)言是不能直接訪問(wèn)硬件的。?缺點(diǎn):危險(xiǎn)性高,開發(fā)周期長(zhǎng),可移植性弱。危險(xiǎn)性高:寫同一個(gè)程序,在java中會(huì)報(bào)錯(cuò),而在c中不會(huì)報(bào)錯(cuò),為什么呢,因?yàn)閏認(rèn)為程序你想怎么寫就怎么寫,c語(yǔ)言認(rèn)為你寫的程序不是很離譜,他都認(rèn)為你寫的這個(gè)程序有特殊的含義??梢灾苯油ㄟ^(guò),而java則不可以。開發(fā)周期長(zhǎng):c語(yǔ)言是面向過(guò)程的語(yǔ)言,面向過(guò)程的語(yǔ)言的特點(diǎn)就是在開發(fā)大項(xiàng)目的時(shí)候,很容易崩潰,好比蓋大樓,C語(yǔ)言還要造大量的磚塊、鋼筋等結(jié)構(gòu)原材料,而C++C#JAVA則進(jìn)行了一定的繼承封裝等操作,相當(dāng)于原材料直接給你,你只需要用它蓋樓即可。現(xiàn)在市場(chǎng)上的語(yǔ)言分三塊:C/C++:單純的學(xué)習(xí)c是什么都做不了的。JavaC#可移植性不強(qiáng):這是針對(duì)java來(lái)說(shuō)的,因?yàn)閖ava的可移植性太強(qiáng)了,所以就感覺(jué)說(shuō)c的可移植性不強(qiáng)。3)C語(yǔ)言的應(yīng)用領(lǐng)域:?系統(tǒng)軟件開發(fā)操作系統(tǒng):Windows、Linux、Unix驅(qū)動(dòng)程序:主板驅(qū)動(dòng)、顯卡驅(qū)動(dòng)、攝像頭驅(qū)動(dòng)數(shù)據(jù)庫(kù): DB2、Oracle,SqlServer?應(yīng)用軟件開發(fā)辦公軟件:Wps圖形圖像多媒體:ACDSeePhotoshopMediaPlayer嵌入式軟件開發(fā):智能手機(jī)、掌上電腦游戲開發(fā):2D、3D游戲驅(qū)動(dòng)一般是用c和匯編來(lái)寫的。數(shù)據(jù)庫(kù)一般是用c和C++來(lái)寫的4)C語(yǔ)言的重要性:有史以來(lái)最重要語(yǔ)言所有大學(xué)工科和理科學(xué)生必修課程最重要系統(tǒng)軟件:windows、linux、unix均使用c開發(fā)一名合格黑客必須掌握的語(yǔ)言任何ー個(gè)想終身從事程序設(shè)計(jì)和開發(fā)人員必須熟練掌握的語(yǔ)言大企業(yè)、外企招聘程序員必考的語(yǔ)言為學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)、C++、Java、C#奠定基礎(chǔ)雖然應(yīng)用場(chǎng)合相對(duì)較窄,但貼近系統(tǒng)內(nèi)核,較底層。病毒最基本的是要感染系統(tǒng),數(shù)據(jù)結(jié)構(gòu),C,C++這三門語(yǔ)言是必須要學(xué)習(xí)的。牛人牛語(yǔ):入門最基本的方法就是從C語(yǔ)言入手?當(dāng)你成為C語(yǔ)言的高手,那么就你很容易進(jìn)入到操作系統(tǒng)的平臺(tái)里面去:當(dāng)你進(jìn)入到操作系統(tǒng)的平臺(tái)里去實(shí)際做程序時(shí),就會(huì)便得進(jìn)行調(diào)試:當(dāng)你懂得調(diào)試的時(shí)候,你就會(huì)發(fā)現(xiàn)能輕而易舉地了解整個(gè)平臺(tái)的架構(gòu)。這時(shí)候,計(jì)算機(jī)基本上一切都在你的掌握之中了,沒(méi)有什么東西能逃得出你的手掌心ーー《編程域言》梁肇新梁肇新:編寫的超級(jí)解霸播放器軟件,被暴風(fēng)影音收購(gòu)。編寫的書《編程箴言》二、怎樣學(xué)習(xí)C語(yǔ)言(ppt)1、要將編程當(dāng)成一項(xiàng)事業(yè)來(lái)經(jīng)營(yíng),而不是糊口的工具。2、途徑:多思考,多上機(jī)。目標(biāo):不能光看,光聽(tīng),而要排錯(cuò),能看懂程序,能調(diào)試程序,自學(xué)能力要很強(qiáng)。3、在犯錯(cuò)誤中成長(zhǎng)。參考資料:譚浩強(qiáng)《C語(yǔ)言程序設(shè)計(jì)》清華《TheCprogramminglanguage1機(jī)械工業(yè)(CPrimerPlus》60元人名郵電《C和指針》65元人名郵電《C專家編程》絕版《C陷阱與缺陷》人名郵電30《C科學(xué)與藝術(shù)》機(jī)械丄業(yè)王爽寫的C++也很不錯(cuò)三、學(xué)習(xí)的目標(biāo)(ppt)掌握簡(jiǎn)單的算法一解決問(wèn)題的方法和步驟。熟悉語(yǔ)法規(guī)則。能看懂程序并調(diào)試程序。四、常見(jiàn)問(wèn)題答疑(ppt)(1)學(xué)習(xí)JAVA為什么建議先學(xué)C語(yǔ)言(2)沒(méi)學(xué)過(guò)計(jì)算機(jī)專業(yè)課程能夠?qū)W懂C語(yǔ)言(3)英語(yǔ)和數(shù)學(xué)不好能學(xué)好C語(yǔ)言么?C語(yǔ)言的關(guān)鍵字:32個(gè)關(guān)鍵字:(由系統(tǒng)定義,不能重作其它定義)autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhile

五、課程計(jì)劃課程大綱共分23講C語(yǔ)言簡(jiǎn)介第一講、第二講、第三講、第四講、第五講、第六遊、第七講、第八講、第九講、第十講、基本編程C語(yǔ)言簡(jiǎn)介第一講、第二講、第三講、第四講、第五講、第六遊、第七講、第八講、第九講、第十講、基本編程知識(shí)數(shù)據(jù)類型運(yùn)算符和表達(dá)式流程控制函數(shù)數(shù)組指針變量的作用域和存儲(chǔ)方式擴(kuò)展數(shù)據(jù)類型專題:字符串的處理進(jìn)制轉(zhuǎn)換補(bǔ)碼動(dòng)態(tài)內(nèi)存分配綜合應(yīng)用:鏈表的使用1講1講1講1講4講2講1遊六、舉例子:一元二次方程C語(yǔ)言程序的格式:#include<stdio.h>#include<math.h>intmain(void){〃把三個(gè)系數(shù)保存在計(jì)算機(jī)中,定義三個(gè)變量。inta=l;〃=不表示相等,表示賦值intb=2;intc=3;floatdelta;〃delta存放的是b*b-4*a*c〃float改doublefloatxl; 〃存放一元二次方程的其中一個(gè)解floatx2; 〃存放一元二次方程的其中一個(gè)解delta=b*b-4*a*c;if(delta>0)xl=(-b+sqrt(delta))/(2*a);x2=(-b-sqrt(delta))/(2*a);〃兩個(gè)解printf(“該ー元二次方程有兩個(gè)解,xl=%f,x2=%f\n",xl,x2);}elseif(delta==O)(xl=(-b)/(2*a); 〃唯一解x2=xl; 〃右邊值賦給左邊printf(“該ー元二次方程有一個(gè)唯一解,xl=x2=%f\n",xl);)else(printf(“無(wú)解、n"); 〃無(wú)解)return0;)一定要養(yǎng)成良好的習(xí)慣:代碼規(guī)范,邊寫邊保存,括號(hào)成對(duì)出現(xiàn),應(yīng)用空格。VC6.0軟件操作:新建保存關(guān)閉(關(guān)閉空間).cpp是原始文件,可單獨(dú)拷貝到其它電腦。第二講:(14-25)C語(yǔ)言編程必備知識(shí)1、Cpu,內(nèi)存條,硬盤,顯卡,主板,顯示器之間關(guān)系。Cpu不能直接處理硬盤上的數(shù)據(jù),必須要先調(diào)入內(nèi)存。2、Helloword程序是如何運(yùn)行起來(lái)的。3、什么是數(shù)據(jù)類型數(shù)據(jù)類型ーー數(shù)據(jù)的分類,對(duì)編程而言,首要考慮問(wèn)題是數(shù)據(jù)的輸入和存儲(chǔ)??梢苑譃锳:基本數(shù)據(jù)類型:(整數(shù)、浮點(diǎn)數(shù)、字符)(1)整型整型int-4字節(jié)一字節(jié)byte=8位bit短整型shortint-2字節(jié)長(zhǎng)整型longint--8字節(jié)(2)浮點(diǎn)型【實(shí)數(shù)】單精度浮點(diǎn)數(shù)float:存儲(chǔ)范圍小 --4字節(jié)雙精度浮點(diǎn)數(shù)double:存儲(chǔ)范圍大 ー-8字節(jié)Float和Double都不能保證將小數(shù)完全準(zhǔn)確保存。(3)字符char:c語(yǔ)言中是沒(méi)有字符串string -1字節(jié)(區(qū)別于JAVA、C#中有string且C#中char為2字節(jié))B:復(fù)合類型:就是把基本類型拼湊在ー起結(jié)構(gòu)體枚舉ー實(shí)用共用體一基本淘汰4、什么是變量變量的本質(zhì)是內(nèi)存中一段存儲(chǔ)空間。inti;i=5;i是變量,程序向系統(tǒng)申請(qǐng)了一個(gè)內(nèi)存單元,在程序運(yùn)行中,i的值可以改變,但程序結(jié)束后,其所占的空間不是釋放,而是被系統(tǒng)收回權(quán)限。5、Cpu,內(nèi)存條,VC++6.0,操作系統(tǒng)之間的關(guān)系。6、變量為什么必須的初始化(即賦值)軟件運(yùn)行與內(nèi)存關(guān)系(垃圾數(shù)據(jù)ー9868598658)內(nèi)存是在操作系統(tǒng)的統(tǒng)ー管理下使用的!(1)軟件在運(yùn)行前需要向操作系統(tǒng)申請(qǐng)存儲(chǔ)空間,在內(nèi)存空間足夠空閑時(shí),操作系統(tǒng)將分配一段內(nèi)存空間并將該外存中軟件拷貝ー份存入該內(nèi)存空間中,并啟動(dòng)該軟件運(yùn)行。(2)在軟件運(yùn)行期間,該軟件所占內(nèi)存空間不再分配給其他軟件。(3)當(dāng)該軟件運(yùn)行完畢后,操作系統(tǒng)將回收該內(nèi)存空間(注意:操作系統(tǒng)并不清空該內(nèi)存空間遺留下來(lái)的數(shù)據(jù)),以便再次分配給其他軟件使用?!恫僮飨到y(tǒng)》ー門課中系統(tǒng)分配表中會(huì)講到,用1標(biāo)記表示內(nèi)在是被占用的,用。標(biāo)記表示是空閑的。綜上所述,ー個(gè)軟件所分配到的空間中極可能存在著以前其他軟件使用過(guò)后的殘留數(shù)據(jù),這些數(shù)據(jù)被稱之為垃圾數(shù)據(jù),所以通常情況下我們?yōu)椹`個(gè)變量,為ー個(gè)數(shù)組,分配好存儲(chǔ)空間之前都要對(duì)該內(nèi)存空間初始化。7、如何定義變量數(shù)據(jù)類型變量名稱=賦予的值:等價(jià)于數(shù)據(jù)類型變量名;變量名=要賦予的值;舉例子:inti=3J等價(jià)于!ntI;i=3;int i, j5 等價(jià)于 int i;int j;int i, j=3 等價(jià)于 int i;int j; j=3;inti=3,j=5;等價(jià)于!nti;intj;i=3;j=5;int i, j;i =j= 5;等價(jià)于 int i,j; i=5;j=5;8、什么是進(jìn)制(逢幾進(jìn)ー)看ppt我們規(guī)定八進(jìn)制前面加〇(零),十六進(jìn)制前面加Ox。在匯編中:在數(shù)字后加字母B表示二最制教,加字母。表示八叢制救,加字母D表示十叢制裁,加字母H表示十六並制教。例:1O11B為二進(jìn)制數(shù)1011,也記為(1011)13570為ハ進(jìn)制數(shù)1357,也記為(1357)2049D為十進(jìn)制數(shù)2049,也記為(2049)103FB9H為十六進(jìn)制數(shù)3FB9,也ネ己為(3FB9

!!(一)什么叫n進(jìn)制?十進(jìn)制十個(gè)基數(shù),逢10進(jìn)ー基數(shù):0123456789■?二進(jìn)制二個(gè)基數(shù)逢二進(jìn)ー基數(shù):012->103->114->100 5->101?ハ進(jìn)制8個(gè)基數(shù)逢8進(jìn)ー基數(shù): 012345678410 9->11 10412?十六進(jìn)制:16個(gè)基數(shù)逢16進(jìn)ー基數(shù): 0123456789ABC[fcEF或0123456789abedef16->10 17->11 18->1219->13常用計(jì)數(shù)制對(duì)照表:■常用計(jì)數(shù)制對(duì)表■常用計(jì)數(shù)制對(duì)表十進(jìn)制(D)二進(jìn)制(B)ハ進(jìn)制(0)十六進(jìn)制(H)000011112102231133410044510155611066711177810001089100111910101012a11101113b12110014c13110115d14111016e15111117f住!■Printf的基本用法:printf("i=%d\n*,i);/*printf的用法%d表示以十進(jìn)制輸也%x或%X表示以十六遞制輸出%。表示以ハ進(jìn)制輸出9、常量在c中是如何表木的整數(shù)十進(jìn)制: 傳統(tǒng)的寫法十六進(jìn)制: 前面加Ox或0Xハ進(jìn)制: 前面〇注意是數(shù)字零不是字母。浮點(diǎn)數(shù)傳統(tǒng)的寫法floatx=3.2;//傳統(tǒng)科學(xué)計(jì)數(shù)法floatx=3.2(3;〃x的值是3200floatx=123.45e-2t〃x的值是1.23妬I字符單個(gè)字符使用單引號(hào)括起來(lái),多個(gè)字符串使用雙引號(hào)括起來(lái)(指針、數(shù)組)。實(shí)表示字符A'AB,錯(cuò)誤'AB,錯(cuò)誤“AB”正確(字符串要用雙引號(hào)括起來(lái))"A”正確,因?yàn)椤癆”代表了火 ‘、?!慕M合intmain(void)floatx=123.45e-2F|;printf x);return0;}在c中,默認(rèn)是double類型的。在后面加F表示當(dāng)做float來(lái)處理,否則會(huì)有警告提示ー丟失部分字節(jié)。10、常量以什么樣的二進(jìn)制代碼存儲(chǔ)在計(jì)算機(jī)中?編碼:整數(shù)是以補(bǔ)碼的形式轉(zhuǎn)換為二進(jìn)制代碼存儲(chǔ)在計(jì)算機(jī)浮點(diǎn)數(shù)是以ieee754標(biāo)準(zhǔn)轉(zhuǎn)換為二進(jìn)制代碼存儲(chǔ)字符本質(zhì)實(shí)際是與整數(shù)的存儲(chǔ)方式相同,ASCII碼標(biāo)準(zhǔn)。第二講:(26-46)ー、代碼規(guī)范化?可以參考林銳《高質(zhì)量C/C++編程》?代碼的規(guī)范化非常的重要,是學(xué)習(xí)ー門編程語(yǔ)言的基礎(chǔ),代碼可以允許錯(cuò)誤,但不能不規(guī)范。例如:成對(duì)敲括號(hào){}〇加空格于運(yùn)算符和數(shù)字之間i=1+2;加縮進(jìn)分清上下級(jí)地位。換行ーー進(jìn)行功能區(qū)域分隔。”}括號(hào)單獨(dú)成一行。?代碼規(guī)范化的好處1S整齊,別人和自己都容易看懂。2;代碼規(guī)范了,代碼不容易出錯(cuò)。3:一般的程序可以分為三塊:a:定義變量b:對(duì)變量進(jìn)行操作c:輸出值二、什么是字節(jié)?存儲(chǔ)數(shù)據(jù)的單位,并且是硬件所能訪問(wèn)的最小單位。內(nèi)存中存儲(chǔ)的最小單位是位bit(O或1),但是硬件控制的時(shí)候不能精確到位,只能精確到字節(jié)(8位),是通過(guò)地址總線來(lái)控制的,而精確到位是通過(guò)軟件來(lái)控制的,叫做位運(yùn)算符來(lái)精確到位的。

1字節(jié)=8位1K=1024字節(jié)1M=1024K1G=1024M1T=1024G2G的內(nèi)存條的總空間:2*1024*1024*1024*8=4*1032三、不同類型數(shù)據(jù)之間相互賦值的問(wèn)題不同數(shù)據(jù)類型之間最好不要相互轉(zhuǎn)換。inti=45;longj=102345;i=j;printf(*%ld%d\n*,i,j);floatx=6.6;doubley=8.8;printf(*%f%lf\n,x,y*).inti-;如果需要明白這個(gè)知識(shí)點(diǎn),那么需要明白補(bǔ)碼。四、什么是ASCII碼intmain(void){,intmain(void){,Ichar ch = A'.// char ch ="AB"http:// char ch = "A";〃4行 OK等價(jià)charch?出:'A'.//error因?yàn)椤癆B”是字符串,我們不能把字符串賦給單個(gè)字符//error//charch='AB'//'AB'是錯(cuò)誤的////charch='AB'//'AB'是錯(cuò)誤的//charch='B'.//error,因?yàn)閏h變量已經(jīng)在4行定義了,這樣會(huì)導(dǎo)致變量名被:ch二'C;printf("%c\n",ch);在上圖中注釋的最后ー樣是重復(fù)定義了ch的值,是錯(cuò)誤的,而下面的ch=セ是指把C賦值給ch,是正確的。以char定義變量的時(shí)候,只能使用單引號(hào)括起一個(gè)字符オ是正確的。Uinc1ude<stdio.h>intmainix^id){ ヽ,b,.cqarJchFb.printf(*%d\n*,ch).return0;}上圖中輸出的值是98(將字符以整數(shù)%d的形式輸出)Asci!碼規(guī)定了ch是以哪個(gè)值去保存。Ascii碼不是ー個(gè)值,而是ー種規(guī)定,規(guī)定了不同的字符是以哪個(gè)整數(shù)值去表示。它規(guī)定了:TOC\o"1-5"\h\z'A' -- 65 'B' - 66'a' " 97 'b' -- 98‘〇’ - 48五、字符的存儲(chǔ)字符本質(zhì)上與整數(shù)的存儲(chǔ)方式相同基本的輸入和輸出函數(shù)的用法:Printf()一ー--一將變量的內(nèi)容輸出到顯示器上。四種用法:printf(?字符串”);printf(?輸出控制符”,愉出參數(shù));printf("輸出控制符1輸出控制符2??.ス輸出參數(shù)1,輸出控制符和輸出參數(shù)的個(gè)數(shù)必須ーー對(duì)應(yīng)printf("輸出控制將非輸出控制符”,輸出參數(shù))レ輸什么是輸出控制符,什么是非輸出控制符輸出控制符包含如下:%d —int%1d —longint%c 一char%f —float%lf —double%x(或者%X后者%#X)int或!ongint或shortint%〇一同上%sI —字符串1Printf為什么需要輸出控制符:?01組成的代碼可以表示數(shù)據(jù)也可以表示指令。必須要有輸出控制符告訴他怎么去解讀。?如果01組成的代碼表示的是數(shù)據(jù)的話,那么同樣的01代碼組合以不同的輸出格式輸出就會(huì)有不同的輸出結(jié)果,所以必須要有輸出控制符。#include<stdio.h>intmain(void)(intx=47:〃100是十進(jìn)制printf(*%x\n*,x);〃輸出結(jié)果是:2fprintf(*%X\n*,x);//輸出結(jié)東是:2Fprintf("%#X'n",x);//輸出結(jié)東是:0X2F|printf(飛#x'n",x);//輸岀結(jié)果是:0x2freturn0;在上圖中,intx=47,如果前面加〇(零)048表示的是八進(jìn)制,如果前面加Ox(零?)0X47則表示的是十六進(jìn)制,而在輸出的時(shí)候,則是。(字母。)表示八進(jìn)制,ox(字母。,x)表示十六進(jìn)制。非輸出控制符:非輸出控制符在輸出的時(shí)候會(huì)原樣輸出。printf(*i=%d,j=%d\n*,j,k);Scanf()一一通過(guò)鍵盤將數(shù)據(jù)輸入到變量中有兩種用法:用法一:scanf("輸入控制符”,輸入?yún)?shù));功能: 將從鍵盤輸入的字希轉(zhuǎn)化為輸入控制符所規(guī)定格式的數(shù)據(jù),然后存入以輸入?yún)?shù)的值為地址的變量中|示例:include<stdio.h>intmain(void)(inti;scanf("あd”,&i);//&i表示i的地址&是ー個(gè)取地址符printf(^i=%d\n",i);return0;|)非輸入控制符:在輸入的時(shí)候也會(huì)原樣輸入。用法二:scanf(.非愉入控制符輸入控制符”,輸入?yún)?shù));功能: 將從鍵盤愉入的字符轉(zhuǎn)化為輸入控制符所規(guī)定格式的數(shù)據(jù),然后存入以輸入?yún)?shù)的值為地址的變量中非輸入控制符必須原樣輸入Hinclude<stdio.h>intmain(void){inti,I,scanf(*m%d,&i),printf(*i=%d\n*,i)]return0;但是強(qiáng)烈建議:在使用scanf的時(shí)候,不使用非輸入控制符。給多個(gè)變量賦值:include<stdio.h>intmain(void)inti,j;scanf(“%d%d”,&i,&j);printf("i=%d,j=%d\n”,i,j);return0;)需要記住,非控制符需要原樣輸入。如何使用scanf編寫出高質(zhì)量代碼如何使用scanf編寫出高質(zhì)量代碼.使用scanf之前最好先使用printf提示用戶以什么樣的方式來(lái)輸入.scanf中盡量不要使用非輸入控制符,尤其是不要用、n|Sinclude<stdio.h>intmain(void){inti;Iscanf("%d\n",&i); //非常不好的格式,不要加\nprintf(^i=%d\n。i);return0;)3.應(yīng)該編寫代碼對(duì)用戶的非法輸入做適當(dāng)?shù)奶幚怼痉侵攸c(diǎn)】while((ch二getchar())[=9\n)continue;

Sinclude<stdio.h>intmain(void){inti;charch;scanf("%d",&i);printf(^i=%d'n”,i);Ijwhile((ch=getchar())!二'、n')//continue;intj;scanf("*d”,&j);printf(j=/d\n,j);return0;}運(yùn)算符:(1)算術(shù)運(yùn)算符:取余(%)加(+)減(一)乘(*)除(ハ取余(%)(2)關(guān)系運(yùn)算符:>>=<<=!=(3)邏輯運(yùn)算符:TOC\o"1-5"\h\z!(非) &&(并且) || (或)1真 假!假 真真也&真真&&假假也ん真假&&假真真真假

假真真假

真假真假真真真假

假真真假

真假真假C語(yǔ)言對(duì)真假的處理非零是真零是假 I真是1表示假是。表示也在左邊的表達(dá)式為假右邊的表達(dá)式肯定不會(huì)執(zhí)行11左邊的表達(dá)式為真I右邊的表達(dá)式肯定不會(huì)執(zhí)行(4)賦值運(yùn)算符:=+=*=/—例如:a+=3是等價(jià)于a=a+3,a/=3等價(jià)于a=aR其優(yōu)先級(jí)別是算術(shù)〉關(guān)系〉邏輯〉賦值。"除法與取模運(yùn)算符?除法/的運(yùn)算結(jié)果和運(yùn)算對(duì)象的數(shù)據(jù)類型有關(guān),兩個(gè)數(shù)都是int,則商就是int,若商有小數(shù),則截取小數(shù)部分;被除數(shù)和除數(shù)中只要有一個(gè)或兩個(gè)都是浮點(diǎn)型數(shù)據(jù),則商也是浮點(diǎn)型,不截取小數(shù)部分。如:16/5==3 16/5.0==3.20000 -13/4==-4-131-3==4 3/5==0 5/3==1最典型的例題就是求s=1+1/2+1/3+1/4+1/5....+1/100的值(具體程序我們以后再講).?取余%的運(yùn)算對(duì)象必須是整數(shù),結(jié)果是整除后的余數(shù),的符號(hào)與被除數(shù)相同如:13%3=尹 13%-3==1-13%3==-1-13%23==-133%5==3?測(cè)試取模運(yùn)算符的例子#include<stdio.h>intmain(void)工(printf("%d%d%d%d%d%dln”琛-13%3,-13%^,-13%23,3%5);return0;}r輸岀結(jié)果是:01-1-1-133Pressanykeytocontinue**********************************************總綜取余%的運(yùn)算對(duì)象爾是整數(shù),結(jié)果是雌后的余數(shù),其余數(shù)的符號(hào)與破除數(shù)相同*/取余的結(jié)果的正負(fù)只和被除數(shù)有關(guān)。第四講(47-96)流程控制(第一個(gè)重點(diǎn)):1、什么是流程控制程序代碼執(zhí)行的順序。2、流程控制的分類①順序執(zhí)行②選擇執(zhí)行定義:某些代碼可能執(zhí)行,也可能不執(zhí)行,有選擇的執(zhí)行某些代碼。③循環(huán)執(zhí)行分類:if、switchd最簡(jiǎn)單的用法if的范圍問(wèn)題if..else...的用法if..elseif...else...的用法C語(yǔ)言對(duì)真假的處理if舉例ー求分?jǐn)?shù)的等級(jí)if的常見(jiàn)問(wèn)題解析if最簡(jiǎn)單的用法:if最簡(jiǎn)單的用法格式:if(表達(dá)式)語(yǔ)句功能:如果表達(dá)式為真,執(zhí)行語(yǔ)句如果表達(dá)式為假,語(yǔ)句不執(zhí)行#include<stdio.h>intmain(void)(if(3)printf("AAAA'n");〃會(huì)輸出if(0)printf("BBBB'n");〃不會(huì)輸出if(0==0)printf(*CCCC\n*):〃會(huì)輸出return0;if的范圍問(wèn)題if(表達(dá)式)語(yǔ)句A;語(yǔ)句B;解釋:if默認(rèn)只能控制語(yǔ)句A的執(zhí)行或不執(zhí)行

if無(wú)法控制語(yǔ)句B的執(zhí)行或不執(zhí)行或者講:語(yǔ)句B一定會(huì)執(zhí)行,-if林認(rèn)的只能控制ー個(gè)語(yǔ)句的執(zhí)行或不執(zhí)行|if(表達(dá)式)(語(yǔ)句A;語(yǔ)句B;)此時(shí)if可以控制語(yǔ)句A和語(yǔ)句BI由此可見(jiàn):if默認(rèn)只能控制ー個(gè)語(yǔ)句的執(zhí)行或不執(zhí)行如果想控制多個(gè)語(yǔ)句的執(zhí)行或不執(zhí)行就必須把這些語(yǔ)句用{}括起來(lái)|如果想控制多個(gè)語(yǔ)句的執(zhí)行或者不執(zhí)行,那么需要使用{}括起來(lái)。if.“else...的用法:#include<stdio.h>intmain(void){.intijj;scanf(*%d%dT,&i,&j);if(i>j)printfの大ナj'n");elseprintf("i小于j'n");return0;)8include<stdio.h>intmain(void)(if(1|>2)printf(*AAAA\n*);elseprintf("BBBB'n");printf(*CCCC\n*);return0;}4、if...elseif...else的用法:(格式)if(1)A.elseif(2)田;elseif(3)C;elseD;ttinclude<stdio.h>intmain(void){doubledelta=3;if(delta>0) Iprintf("看兩個(gè)解!、n");elseif(delta==0)printf("有一個(gè)唯一解!、n");elseprintf("無(wú)解!、nT);return0;C錯(cuò)誤的if...elseif...else語(yǔ)句:8include<stdio.h>intmain(void)|doubledelta=-1;if(delta>0)尸rintf("看兩個(gè)解!、n");るrintf("哈哈!、n");elseif(delta==0)printf("有一個(gè)唯一解!、n");elseprintf("無(wú)解!、n");return0;}在上圖中,當(dāng)執(zhí)行到哈哈那句時(shí),下面的else將會(huì)被算作另外一個(gè)語(yǔ)句來(lái)執(zhí)行,而在我們的c語(yǔ)言中,沒(méi)有以else開頭的語(yǔ)句。所以會(huì)出錯(cuò)。5、C語(yǔ)言對(duì)真假的處理非零是真 (真用1表示)零就是假 (假用。表示)6、if實(shí)例(舉例ー一求分?jǐn)?shù)的等級(jí)):

Ainclude<stdio.h>mtnain(uoid){floatscore;//score分?jǐn)?shù)printf(“請(qǐng)輸入您的考試成績(jī):つ;scanfftscore);if(score>100)printf(“這是做夢(mèng),ヽn");elseif(score>=90&&score<=100)〃不能寫成90<=score<=100printf(“優(yōu)秀八n”);elseif(score>=80&&score<90)printf("良好,'n”);elseif(score>=60&&score<80)printf("及格,\n“);elseif(score>=0&&score<60)print.(“不及格,繼續(xù)努力,'n”);elseprintf,輸入的分?jǐn)?shù)過(guò)低,不要如此自卑,'n“);return0;(1)變量的替換:(互換兩個(gè)數(shù)字)intt:〃定義臨時(shí)變;J和7行代碼無(wú)法え成i和i=j;//6行 i=5:j=5:j=1://Mr 1=□:j=o:〃正確的”.換i和j的か法It=i;i=j;j=t:printf("i=%cl,j=%d\n”,i,j):return0:(2)對(duì)任意三個(gè)數(shù)字進(jìn)行排序:intavbvc;ノノ等價(jià)于:inta;intb;intc;intt;printf「請(qǐng)輸入三個(gè)整數(shù)(中間以空格分隔):-);scanFC^d%d2dヽ&a,&b,&c);〃編寫代碼完成a是最大值わ是中間值じ是最小值if(a<b)(t-a;a=b;b=t;>if(a<c)(t-a;a=c;c=t;>if(b<c)(t-b;b=c;c=t;>prlntf('td%dtd\n"favbvc);return0;C語(yǔ)言常見(jiàn)誤區(qū):①素?cái)?shù):只能被1和自己整除的數(shù),如1,5,9等。②回文數(shù):正著寫和倒著寫ー樣的數(shù)。如1221,121,等。③編程實(shí)現(xiàn)求一個(gè)十進(jìn)制數(shù)字的二進(jìn)制形式。④求一個(gè)數(shù)字的每位是奇數(shù)的數(shù)字取出來(lái)組合形成的新數(shù)字。⑤求一個(gè)數(shù)字倒過(guò)來(lái)的數(shù)字。算法:解題的方法和步驟。如何看懂ー個(gè)程序,分三步:1、流程:也就是程序執(zhí)行的順序;2、每個(gè)語(yǔ)句的功能;3、試數(shù):找ー個(gè)數(shù)帶入程序驗(yàn)證。如何學(xué)習(xí)ー些需要算法的程序(如何掌握ー個(gè)程序):1、嘗試自己編程解決它,但要意識(shí)到大部分人都是自己無(wú)法解決的,這時(shí)不要?dú)怵H。如果十五分鐘還想不出來(lái),此時(shí)我建議您就可以看答案了。2、如果解決不了,看答案。3、關(guān)鍵是把答案看懂,這個(gè)要花很大的精力,也是我們學(xué)習(xí)的重點(diǎn)??炊`個(gè)程序要分三步:流程、每個(gè)語(yǔ)句的功能、試數(shù)。4、看懂之后嘗試自己修改程序,并且知道修改之后程序的不同輸出結(jié)果的含義。不建議看懂程序之后就立即自己敲程序。5、照著答案去敲6、調(diào)試錯(cuò)誤7、自己不看答案,自己獨(dú)立把答案敲出來(lái)。8、如果程序?qū)嵲谑菑氐谉o(wú)法理解,就把他背會(huì)。(很少有這種程序)7、if常見(jiàn)的問(wèn)題解析:1、空語(yǔ)句的問(wèn)題:if(3>2);等價(jià)于if(3>2);/Z這是ー個(gè)空語(yǔ)句intmain(void)(if(1>2) .printf("AA於1n”レprintf("BBBB\n");return0;在上圖中,最終的結(jié)果會(huì)是AAAA,BBBB,程序也不會(huì)報(bào)錯(cuò),為什么呢,因?yàn)樵诔绦驁?zhí)行的時(shí)候,會(huì)在;哪里認(rèn)為是ー個(gè)空語(yǔ)句。也就是說(shuō),如果if成立,那么執(zhí)行空語(yǔ)句。2、If常見(jiàn)錯(cuò)誤解析(重點(diǎn))if(表達(dá)式1)A;elseB;是正確的if(表達(dá)式1);lIA;elseB;是錯(cuò)誤的#include<stdio.h>intmain(void)(if(3>2)〃4行如果這里加分號(hào),則會(huì)導(dǎo)致程序編譯到6行時(shí)就會(huì)出錯(cuò)printf("哈哈!\n");<lse〃6行printf("嘿嘿!\n");return0;上面這個(gè)程序是錯(cuò)誤的,為什么呢,在該程序中,總的有4個(gè)語(yǔ)句,而在以else開頭的那個(gè)語(yǔ)句中是有錯(cuò)誤的,因?yàn)樵赾語(yǔ)言中是沒(méi)有以else開頭的這種語(yǔ)法。3、If常見(jiàn)錯(cuò)誤解析if俵達(dá)式1)A;elseif(表達(dá)式2)B;elseif(表達(dá)式3)c;elseD;即便表達(dá)式1和2都成立,也只會(huì)執(zhí)行A語(yǔ)句。程序測(cè)試:#include<stdio.h>intmain(void)(if(3>2)printf("AAAA'n");elseif(3>1)printf("BBBB\n");else Iprintf("CCCC'n");return0;)在上面這個(gè)程序中,最終的值是AAAA,雖說(shuō)后面的3>1也滿足條件,但是當(dāng)3>2滿足條件后,該if語(yǔ)句就會(huì)終止,后面的語(yǔ)句是不會(huì)在執(zhí)行的。4、If常見(jiàn)錯(cuò)誤解析(用成績(jī)等級(jí)程序驗(yàn)證)if(表達(dá)式1)A;elseif(表達(dá)式2)B;elseif(表達(dá)式3)C;這樣寫語(yǔ)法不會(huì)出錯(cuò),但邏輯上有漏洞5、If常見(jiàn)錯(cuò)誤解析(用成績(jī)等級(jí)程序驗(yàn)證)if(表達(dá)式1)A;elseif(表達(dá)式2)B;elseif(表達(dá)式3)C;else1(表達(dá)式4)〃7行D;這樣寫是不對(duì)的,正確的寫法是:要么去掉第7行的(表達(dá)式4)要么在第7行的else后面加if6、If常見(jiàn)錯(cuò)誤解析(if常見(jiàn)問(wèn)題解析ー5.cpp)if(表達(dá)式1)A:elseif(表達(dá)式2)B:elseif(表達(dá)式3)C; Telse(表達(dá)式4)1D:這樣寫語(yǔ)法不會(huì)出錯(cuò),但邏輯上是錯(cuò)誤的else(表達(dá)式4);D;等價(jià)于else(表達(dá)式4);D;I③循環(huán)的定義、分類。定義:某些代碼會(huì)被重復(fù)執(zhí)行。分類:for(重點(diǎn))whiledo while(1)格式:for(1;2;3)語(yǔ)句A;(2)執(zhí)行的流程(重點(diǎn))單個(gè)for循環(huán)的使用多個(gè)for循環(huán)的嵌套使用(具體附后)(3)范圍問(wèn)題:{}(4)舉例:1+2+3+ +1001+1/2+1/3+ +1/100#include<stdio.h>intmain(void)inti;intsum=0-rI13for(i=l,iく=4++i)sum=s心+i,チprintf(*sum=%d\n*,sum);return0;在上圖中,先執(zhí)行1,在執(zhí)行2,2如果成立,標(biāo)志著循環(huán)成立,那么在執(zhí)行4,最后在執(zhí)行3,3執(zhí)行完后代表一次循環(huán)完成,然后在執(zhí)行2.以此類推。1永遠(yuǎn)只執(zhí)行一次。++i等價(jià)于i+1例L求1-10的所有奇數(shù)的和:#include\stdio.h>intmain(void)(inti;intsum=0;for(i=l;i<10;i+=2)〃i+=2,等價(jià)于i=i+2,{sum=sum+i|;return0;)for所控制的語(yǔ)句:hinclude<stdio.h>for(i=l;i<4,++i){printf("AAAA'n");printf("BBBB'n");)return0;)在上圖中,for默認(rèn)只能控制ー個(gè)語(yǔ)句,但是如果要控制多個(gè)語(yǔ)句時(shí)候,那么需要使用{}把語(yǔ)句括起來(lái)。intsum=0;for(i=3;i<=12;++i)(if(i%3==0)//?果i能被3整除

sum=sum+i;)printf(*sum=%d\n”,su加;return0;}例3:求1+レZ+皿....1/100的和。ftinclude<stdio.h>intmain(void)(inti;floatsum=0,for(i=l;i<=100;++i)(sum=sum+1/(float)(i=;printf(*sum=%f\n”,sum);〃float必須用外f輸出return0;在上圖中,重點(diǎn)是強(qiáng)制數(shù)據(jù)類型轉(zhuǎn)換也就是(float)(i)那句:強(qiáng)制類型轉(zhuǎn)化格式:(數(shù)據(jù)類型)(表達(dá)式)功能:把表達(dá)式的值強(qiáng)制轉(zhuǎn)化為前面所執(zhí)行的數(shù)據(jù)類型例子:(int)(4.5+2.2)最終值是6(float)(5)最終值是5.000000如果把print那句換為下面這句會(huì)怎么樣呢://sum=sum+1(float)(1/i);也是錯(cuò)的,為什么呢,因?yàn)閕是整型,1也是整型,所以不管你怎么轉(zhuǎn)換也是整型啊,如果想要這樣寫的話,那么我們需要把1改成1.0也可以的。也就是:更簡(jiǎn)單的寫法是:sum=sum+1.0/i;試數(shù)詳細(xì)步驟舉例:1->i=ll<=100成立sum=0+l/l.00=1++ii=22->i=22<=100成立sum=l+l/2.0 ++ii=33->i=33<=100 1sum=l+l/2.0+1/3.0++ii=41浮點(diǎn)數(shù)存取的問(wèn)題:浮點(diǎn)數(shù)的存錯(cuò)所帶來(lái)的問(wèn)題float和double都不能保證可以把所有的實(shí)數(shù)都準(zhǔn)確的保存在計(jì)算機(jī)中。例子:floatI=99.9;prinf("%f\n",i);最終在Vc++6.0中的輸出結(jié)果是:99.900002因?yàn)楦↑c(diǎn)數(shù)無(wú)法準(zhǔn)確存儲(chǔ),所以就衍生出來(lái)兩個(gè)編程問(wèn)題:有一個(gè)浮點(diǎn)型變量x,如何判斷x的值是否是零if(|x-0.0000011<=0.000001)是零else不是零為什么循環(huán)中更新的變量不能定義成浮點(diǎn)型for循環(huán)和if的嵌套使用四個(gè)習(xí)題練習(xí):①求!-100之間所有奇數(shù)的和②求!-100之間的奇數(shù)的個(gè)數(shù)③求!-100之間奇數(shù)的平均值④求!-100之間的奇數(shù)之和,在求!-100之間的偶數(shù)之和。例①求1-100之間所有奇數(shù)的和:include<stdio.h>intmain(void){inti;intsum=0;for(i=l;i<101;++i){if(i%2==1)sum+=i;//sum=sum+i;}printf(*sum=%d\n”,sum);return0;)例②求1-100之間的奇數(shù)的個(gè)數(shù):include<stdio.h>intmain(void){inti;intent=0J〃個(gè)數(shù)一般用ent表示for(i=l;i<101;++i)if(i%2==1)++cnt;}printf(*cnt=%d\n”,ent);return0;)例③求1-100之間奇數(shù)的平均值:include<stdio.h>intmain(void){inti;intsum=0;intent=0;floatavg;//average的縮寫for(i=l;i<101;++i){if(i%2==1)(sum+=i;++cnt;))avg=1.0*sum/ent;//I.0默認(rèn)是double類型printf(*sum=%d\n”,sum);printf("ent=%d\n",ent);printf("avg=%f\n",avg);return0;)例④求1-100之間的奇數(shù)之和,在求!-100之間的偶數(shù)之和:include<stdio.h>intmain(void){inti;intsuml=0;〃奇數(shù)和intsum2=0;〃偶數(shù)和for(i=l;i<101;++i){if(i%2==1)(suml+=i;)else(sum2+=i;)}printf("奇數(shù)和=%d\n",suml);printf("偶數(shù)和=%d\n",sum2);return0;多個(gè)for循環(huán)的嵌套使用:多個(gè)for循環(huán)的嵌套使用for(1;2;3) //Ifor(4;5;6) //2A,//3B;//4整體是兩個(gè)語(yǔ)句,123是第一個(gè)語(yǔ)句4是第二個(gè)語(yǔ)句整體是兩個(gè)語(yǔ)句。上圖中,先執(zhí)行1,在執(zhí)行2,如果2成立,執(zhí)行4,在執(zhí)行5,如果5成立執(zhí)行A,在執(zhí)行6,在執(zhí)行5,如果5不成立,意味著里面的循環(huán)結(jié)束,然后執(zhí)行3,在執(zhí)行2,如果2成立又執(zhí)行4,在執(zhí)行5,如果5成立在執(zhí)行6,在執(zhí)行5,如果5不成立,在執(zhí)行3,在執(zhí)行2,如果2不成立,意味著本次循環(huán)結(jié)束,在執(zhí)行B,在上圖中,需要注意的是,如果2成立的話,那么每次4都需要執(zhí)行。for(1;2;3)for(4;5;6)B;}整體是L個(gè)語(yǔ)句3.for(7;8;9)for(1;2;3)for(4,5,6)

C;)整體是一個(gè)語(yǔ)句I【復(fù)習(xí)進(jìn)制的知識(shí)】進(jìn)制之間的轉(zhuǎn)換:1、什么叫n進(jìn)制逢n進(jìn)ー

2、把r進(jìn)制轉(zhuǎn)成十進(jìn)制如234為5進(jìn)制,那么轉(zhuǎn)換成10進(jìn)制是多少?2x5x5+3x5+4的值就是轉(zhuǎn)換成的10進(jìn)制。234e是16進(jìn)制,轉(zhuǎn)換成10進(jìn)制是多少?2x16x16x16+3x16x16+4x16+12的值就是轉(zhuǎn)換成10進(jìn)制的值。注意上面的規(guī)律。3、十進(jìn)制轉(zhuǎn)成r進(jìn)制4、不同進(jìn)制所代表的數(shù)值之間的關(guān)系(例2)十進(jìn)制的3981轉(zhuǎn)化成十六進(jìn)制是F8D十進(jìn)制的3981和十六進(jìn)制的F8D所代表的本質(zhì)上都是同一個(gè)數(shù)字。那么把十進(jìn)制轉(zhuǎn)換成r進(jìn)制呢,其實(shí)很簡(jiǎn)單,就是把10進(jìn)制數(shù)除以r,直到商是。的時(shí)候。然后取余數(shù),余數(shù)倒序排列:例1:直到商是。的時(shí)候。然后取余數(shù),余數(shù)倒序排列:例1:十進(jìn)制轉(zhuǎn)二進(jìn)制1...〇1...〇...(185)10=

(10111001)2185185)胎185TOC\o"1-5"\h\z92 L46 023 011例2:十進(jìn)制轉(zhuǎn)十六進(jìn)制(39冊(cè))io=(?)1616 398I 余歎16 248 13<1>> ,16 15 80 15(F)(3981)10=(F8D)16【復(fù)習(xí)運(yùn)算符的知識(shí)】復(fù)習(xí)前面的運(yùn)算符知識(shí):ー些瑣碎的運(yùn)算符知識(shí):1、自增[或者自減]自增[或者自減]分類:前自増一++i后自增ー-i++前自增和后自増的異同:相同:最終都使i的值加1不同前自增整體表達(dá)在的值是i加1之后的值

后自増整體表達(dá)k的值是i加1之前|的值舉例:#include<stdio.h>intmain(void)(inti;intj;intk,intm,i=j=3I〃等價(jià)于i=3,j=3,k=..i++;m=++j;printf(*i=%d,j=%d,k=%d,m=%d\n*,i,j,k,m);return0,)/*在Vc++6.〇中的榆山結(jié)果異.:i=4,j=4,k=3,m=4總結(jié):前自增受體表,達(dá)式的值是i加1之后的值

后自単整體表達(dá)式的值是i加1之対的值為什么會(huì)出現(xiàn)自增1、代碼更精煉2、自增的速度更快學(xué)習(xí)自増要明白的幾個(gè)問(wèn)題. 我們編程時(shí)應(yīng)該盡顯屏蔽掉前自增和后自増的差別.自増表達(dá)式最好不要作為ー個(gè)更大的表達(dá)式的一部分來(lái)使或者說(shuō)i++和++i單獨(dú)成一個(gè)語(yǔ)句,不要把它作為ー個(gè)完整復(fù)合語(yǔ)句的一部分來(lái)使用如:intm=i+++++i+i+i++J〃這樣寫不但是不規(guī)范的代碼,而且是不可移植的代碼。(在不同機(jī)器上運(yùn)行結(jié)果不一樣,順序點(diǎn)的問(wèn)題:三個(gè)順序點(diǎn),();)自減:和自增ー樣2、三目運(yùn)算符(?:)inti=3>2?5:6;A?B:C等價(jià)于if(A)B;elseC;舉例:#include<stdio.h>intmain(void)(inti;i=@2?5:1);printf(*%d\n*?i),return0,最終的輸出結(jié)果是13、逗號(hào)表達(dá)式格式(A,B,C,D)功能:從左到右執(zhí)行最終表達(dá)式的值是最后ー項(xiàng)的值舉例:#include<stdio.h>intmain(void)(inti,i=(3,2,5,6);printf(*%d\n*,i),Ireturn0,}最終結(jié)果是6#include<stdio.h>intmain(void)(inti;intj=2; Ii=(j++,++j,j+2,j-3);printf(*%d\n*,i),|return0,)上圖中,逗號(hào)是個(gè)順序點(diǎn),即所有的副作用必須在下個(gè)語(yǔ)句前生效,其最后結(jié)果為1,j+2只是產(chǎn)生臨時(shí)值,并沒(méi)有把j+2的值賦個(gè)j。如果寫成j+=2,那最后的值則變?yōu)?。4、位運(yùn)算符(后面再講)【復(fù)習(xí)多個(gè)for循環(huán)嵌套使用時(shí)執(zhí)行順序的知識(shí)】for(1;2;3)

for(4;5;6)

A;B;

for的嵌套使用舉例:1、#include<stdio.h>intmain(void)(inti,j;for(i=0;i<3;++i)for(j=2;j<5,++j)

printf("哈哈!\n");printf("嘻嘻!\n")」return0,)上例中輸出的結(jié)果是9個(gè)哈哈,1個(gè)嘻嘻。#includeくstdio.h>intmain(void)(inti,j;CD?1\J2+CD?1\J2+11?

)nn

+1?5吒!

+嘿j<。嘻

3;嘿tf嘻

く"2n"

i(=i(return0;在上例中,整個(gè)程序分成3個(gè)語(yǔ)句,輸出的結(jié)果是3個(gè)嘿嘿,3個(gè)哈哈,1個(gè)嘻嘻。3、intmain(void)(inti,j;for(i=0;i<3;++i)(printf("111!\n"),for(j=2;j<5;++j){ Iprintf("222!\n");

printf("333!\n");}一printf("444|!\n");}return0,其結(jié)果是:ill?222!333!222!333!後444!111!222!333!222!333!222!333!444!111!222!333!222!333!222!333!444!While循環(huán)(先付錢后吃飯)1:執(zhí)行的順序:格式:while(表達(dá)式)語(yǔ)句;2:與for的相互比較:用for來(lái)求!-100之和:hinclude<stdio.h>intmain(void)(intsum=0;inti;for(i=l;i<101;++i)(sum=sum+i;)printf(*sum=%d\n”,sum),return0;用while實(shí)現(xiàn)1-100之和。只需要把for語(yǔ)句替換為:i=1;while(iく101){Mum=sum+i;++i;)for和while是可以相互轉(zhuǎn)換的,可以用下面的表達(dá)式來(lái)表示:for(It2;3)

A;等價(jià)于1;while(2){A;3;卜While和for在邏輯上完全等價(jià),但是for在邏輯上更強(qiáng)。更容易理解,更不容易出錯(cuò)。推薦多使用for。3:while舉例1:從鍵盤輸入ー個(gè)數(shù)字,如果該數(shù)字是回文數(shù),則返回yes,否則返回no回文數(shù):正著寫和倒著寫都一樣比如:12112321|。!nclude<stdio.h>intmain(uoid)intual;〃存放待判斷的數(shù)字intm;intsum=0;printf,請(qǐng)輸入您需要判斷的數(shù)字:つ;scanf('*%d".&ual);n=ual;while(m)<sum=sum*10?m%10;m/=10;>if(sum==ual)printf("Ves?\n");elseprintfC'NoTXn");return0;試數(shù):1>4>5>m1234成立sun-0*10+1234%10-4■="10=123}n=123成立suu=4*10H23%10=43■=123/10=12■=12成立su?=43*10+12%10=432ii-12/10=l■=1sub-432*10+1%10=4321m-"10=0n0不成立最終sum=4321通過(guò)上面的試數(shù),應(yīng)該能很快的理解回文數(shù)的算法。舉例2:看懂ー個(gè)程序菲波拉契序列/?菲波拉契序列12358132134 */#include<stdio.h>intmain(void){intn;intfl,f2,f3;inti;fl=1;f2=2;printf("請(qǐng)輸入您需要求的想的序列:〃);scanf("%d,&n");if(1==n){f3=1;}elseif(2==n)f3=2;}else(for(i=3;i<=n;++i)(f3=fl+f2;fl=f2;f2=f3;)}printf("%d\n",f3);return0;}試數(shù):1>i=33く=6成立f3=l+2=3 fl=f2=2f2=f3=3++ii=42>i=44<=6成立f2=5i=5f3=2+3=5fl=33>i=55<=6成立f3=3+5=8fl=5f2=8i=64>i=66く=6成立f3=5+8=13fl=8f2=13i=75>i=77<=6不成立4:什么時(shí)候使用while,什么時(shí)候使用for:沒(méi)法說(shuō),用多了就自然而然就知道了。Do...while(先吃飯后付錢)主要用于人機(jī)交互格式:}while(表達(dá)式);do...while并不等價(jià)于for?當(dāng)然也不等價(jià)于while〇舉例:一元二次方程:include<stdio.h>include<math.h>intmain(void)doublea,b,c;doubledelta;doublexl,x2;charch;printf(”請(qǐng)輸入一元二次方程的三個(gè)系數(shù):、n");printf("a=");scanf(*%lf&a);printf(*b=、、scanf(*%lf*,&b);printf(*c=*);scanf("%lf",&c);delta=b*b-4*a*c;if(delta>0)xl=(-b+sqrt(delta))/(2*a);x2=(-b-sqrt(delta))/(2*a);printf("有兩個(gè)解,xl=%lf,x2=%lf\n",xl,x2);}elseif(0==delta)(xl=x2=(-b)/(2*a);printf("有唯一解,xl=x2=%lf\n”,xl,x2);}else(printf("無(wú)實(shí)數(shù)解!、n");)printf("您想繼續(xù)么(Y/N):〃);scanfC%c〃,&ch):〃祝前面必須得加一個(gè)空格原因略}while('y,==ch||,丫,==ch);return0;代碼對(duì)齊方法:先全選Ctrl+A再按Alt+F8組合鍵,前提是代碼格式不能太亂。Switch的用法舉例:電梯程序Minclude<stdio.h>intmain(uoid)intual;printf(“請(qǐng)輸入您要進(jìn)入的樓層:つ;scanF(,,%d,,,&ual);switch(ual)<printf「1層開へnつ;break;printf「2層開八nつ;//break;printf「3層開へnつ;break;default:printf(“沒(méi)有蓋到這一層,ヽn“);break;>return0;>Case是程序的入口,當(dāng)進(jìn)入程序后,程序會(huì)從上往下執(zhí)行,如果有break,那么會(huì)中斷程序,如果沒(méi)有,那么會(huì)一直執(zhí)行。PPT介紹switch:switch(表達(dá)式){case常量表達(dá)式1:語(yǔ)句1;case常量表達(dá)式2:語(yǔ)句2;■■■case常量表達(dá)式n:語(yǔ)句n;default:語(yǔ)句n+1;break和continuebreak的用法:(重點(diǎn)掌握)break如果用于循環(huán)是用來(lái)終止循環(huán)。break如果用于switch,則是用于終止switch〇break不能直接用于if,除非if屬于循環(huán)內(nèi)部的ー個(gè)子句。舉例I:#include<stdio.h>intmain(void){inti;/*switch(2){case2:printf("哈哈!\n");break;//OK,break可以用于switchfor(i=0;i<3;++i){if(3>2)break;//break雖然是if內(nèi)部的語(yǔ)句,〃但break終止的確是外部的for循環(huán)printf("嘿嘿!\n");)return0;舉例2:break用于多個(gè)for循環(huán)include<stdio.h>intmain(void){inti,j;for(i=0;i<3;++i){for(j=l;j<4;++j)break;〃break只能終止距離它最近的循環(huán)printf("同志們好!、n");)return0;)在多層switch嵌套循環(huán)中,break只能終止他最近的循環(huán)〇在多層switch中,break也是只能終止距離他最近的switcho多層switch嵌套循環(huán)舉例證明:include<stdio.h>intmain(void){intx=l,y=0,a=0,b=0;switch(x)//第一個(gè)switch{switch(y)//第二個(gè)switch(case0:a++;break;〃終止的是第二個(gè)switchcase1:b++;break;}b=100;break; 〃終止的是第一個(gè)switcha++;b++;break;)printf("%d%d\n”,a,b);//26行return0;}break只能用于循環(huán)和switch,不能用于if。如果用于if,必須要當(dāng)循環(huán)中嵌套if的時(shí)候。Continue的用法:(用的比較少)用于跳過(guò)本次循環(huán)余下的語(yǔ)句,轉(zhuǎn)去判斷是否需要執(zhí)行下次循環(huán)。for(1;2;3){A;B;continue;〃如果執(zhí)行該語(yǔ)句,則執(zhí)行完該語(yǔ)句后,會(huì)執(zhí)行語(yǔ)句3,C和D都會(huì)被跳過(guò)去,C和D不會(huì)被執(zhí)行。C:D;whilei(表達(dá)式)A;B;continue;C;D;在上圖中,如果執(zhí)行了continue,那么后面的C,D將不再執(zhí)行,而會(huì)去執(zhí)行表達(dá)式。3、舉例:sacnf對(duì)用戶非法輸入的處理include<stdio.h>intmain(void)(inti;charch;scanf("%d",&i);printf(*i=%d\n”,i);while((ch=getchar())!='\n')continue;intj;scanf(*%d*?&j);printf(*j=%d\n”,j);return0;第五講數(shù)組ー非重點(diǎn)(97-103)數(shù)組的使用:舉例(數(shù)組的使用二.cpp)include<stdio.h>intmain(void)(inta[5]={1,2,3,4,5};//a是數(shù)組的名字,5表示數(shù)組元素的個(gè)數(shù),〃并且這5過(guò)熱元素分別用a[0]a[l]...a[4]inti;for(i=0;i<5;++i)printf(*%d\n*?a[i]);|return0;}ー、為什么需要數(shù)組1:為了解決大量同類型數(shù)據(jù)的存儲(chǔ)和使用問(wèn)題。2:用數(shù)組可以模擬現(xiàn)實(shí)世界。inta[25]:ー維數(shù)組,可以當(dāng)做ー個(gè)線性結(jié)構(gòu)。inta[8][6]:可以當(dāng)做一個(gè)平面,意思是8行6歹()。有48個(gè)元素。inta[3][4][5]:可以當(dāng)做一個(gè)三維立體。inta[3][4][5][6]:可以當(dāng)做一個(gè)四維空間。數(shù)組不是學(xué)習(xí)重點(diǎn)的原因?1、數(shù)組一旦定義,其長(zhǎng)度是死的。2、有關(guān)ー維數(shù)組的操作一都需要自己另外編程序?qū)崿F(xiàn)。3、而我們通常用第三方軟件(工具)如數(shù)據(jù)庫(kù)等方便直接地實(shí)現(xiàn)。二、數(shù)組的分類1、ー維數(shù)組怎樣定義ー維數(shù)組:

為n個(gè)變量分配存儲(chǔ)空間:數(shù)組內(nèi)存空間是連續(xù)的。所有的變量類型必須相同:數(shù)組不可能第一個(gè)元素是整形,第二個(gè)元素是浮點(diǎn)型。所有變量所占用的字節(jié)大小必須相等。例子: int[5];ー維數(shù)組名不代表數(shù)組中所有的元素,ー維數(shù)組名代表數(shù)組第一個(gè)元素的地址。有關(guān)一維數(shù)組的操作:初始化賦值排序求最大/小值倒置查找插入刪除初始化:初始化完全初始勺intエ[5]={1,2,3,4,5};不完全初始化,未被初始化的元素自動(dòng)為ぎinta[5]={1,2,3);不初始化,所有元素是垃圾值inta[5];清零inta[5]={0};錯(cuò)誤寫法:inta[5];a[5]={|1J2,3,4,5};〃錯(cuò)誤只有在定義數(shù)組的同時(shí)オ可以整體賦值,其他情況下整體賦值都是錯(cuò)誤的inta[5]={1,2,3,4,5};a[5]=100;//error因?yàn)闆](méi)有a[5]這個(gè)元素,上圖中a[5]前面如果沒(méi)有加上數(shù)據(jù)類型,那么這里的a[5]不是指ー個(gè)數(shù)組,其中的5只的是下標(biāo)。

inta[5]={1,2,3,4,5);intb[5];如果要把a(bǔ)數(shù)組中的值全部復(fù)制給b數(shù)組錯(cuò)誤的寫法:b=a;//error正確的寫法for(i=0;i<5;++i)

11b⑴=a[i];上圖中,數(shù)組的5個(gè)元素不是用a來(lái)代表的,是用aO,al…a4來(lái)代表的,所以說(shuō)數(shù)組名a代表的不是數(shù)組的5個(gè)元素,數(shù)組名代表的是數(shù)組的第一個(gè)元素的地址。?賦值舉例1:(ー維數(shù)組的使用.cpp)#include<stdio.h>intmain(void){inta[5];inti;scanf("%d",&a[〇]);printf(*a[0]=%d\n”,a[0]);scanf("%d”,&a[3]);printf(*a[3]=%d\n",a[3]);for(i=0;i<5;++i)printf(*%d”,a[i]);return0;忤include<stdio.h>intmain(void)for(i=0;i<8;++i)print*("%d\n,a[i]);return0;}排序求最大/小值倒置查找,插入刪除2、二維數(shù)組:二維數(shù)組inta[3][4];總共是12個(gè)元素,可以當(dāng)做3行4列看待,這12個(gè)元素的名字依次是a[〇][〇]a[l][0]a[2][0]a[i][j]a[0][1]a[0][2]a[0][3]a[〇][〇]a[l][0]a[2][0]a[i][j]a[0][1]a[0][2]a[0][3]a[l][1]a[l][2]a[2][1]a[2][2]a[l][3][2][3]表示第i+1行第j+1列的元素inta[m][n];該二維數(shù)組右下角位置的元素只能是a[m-l][nT]初始化intint二維數(shù)組的初始化:a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12);a[3][4]=初始化intint{1,2,3,4),{5,6,7,8),{9,10,11,12)輸出ニ維數(shù)組的內(nèi)容:(二維數(shù)組的使用.cpp)ttinclude<stdio.h>intmain(void)(inta[3][4]={{1,2,3,4),{5,6,7,8),{9,10,11,12}};inti,j;for(i=0;i<3;++i)(for(j=0;j<4,++j)printf(*%d",a[i][j]);printf("\n");|return0;

3、多維數(shù)組:是否存在多維數(shù)組:不存在因?yàn)閮?nèi)存是線性一維的,在內(nèi)存中是不分行不分列的。n維數(shù)組可以當(dāng)做每個(gè)元素是n-1維數(shù)組的ー維數(shù)組。比如:inta[3][4];該數(shù)組是含有3個(gè)元素的ー維數(shù)組只不過(guò)每個(gè)元素都可以再分成4個(gè)小元素inta[3][4][5];該數(shù)組是含有3個(gè)元素的ー維數(shù)組只不過(guò)每個(gè)元素都是4行5列的二維數(shù)組第六講函數(shù)(C語(yǔ)言的第二個(gè)重點(diǎn))104-120舉例:求2個(gè)數(shù)之間的最大值(函數(shù)的第一個(gè)例子.cpp)#include<stdio.h>〃max是函數(shù)的名字,i和j是形式參數(shù),簡(jiǎn)稱形參void表示函數(shù)沒(méi)有返回值voidmax(inti,intj){if(i>j)printf(*%d\n*,i);elseprintf("%d\n",j);intmain(void)(inta,b,c,d,e,f;acez(\z(\z(\b=2,c=3,d=9,e=-5,f=100;acez(\z(\z(\b);d);f);if(a>b)printf(“紀(jì)、n",a);elseprintf("%d\n",b);if(c>d)printf("%d\n",c);elseprintf("%d\n",d);if(e>f)printf("%d\n",e);elseprintf("%d\n",f);*/return0;)1、為什么需要函數(shù):?避免了重復(fù)性操作。?有利于程序的模塊化。(自上而下,逐步細(xì)化,大問(wèn)題分解成小問(wèn)題)用它作為參照,可以對(duì)比JAVA和C#面向?qū)ο蟮乃枷?。C語(yǔ)言基本單位是函數(shù),C#、C++和JAVA基本單位是類。2、什么叫做函數(shù)?邏輯上:能夠完成特定功能的獨(dú)立的代碼塊。物理上:能夠接收數(shù)據(jù)【也可以不接收數(shù)據(jù)】,能夠?qū)邮盏臄?shù)據(jù)進(jìn)行處理【也可以不對(duì)數(shù)據(jù)進(jìn)行處理】,能夠?qū)?shù)據(jù)處理的結(jié)果返回【當(dāng)然也可以不返回任何值】。舉例:函數(shù)舉例_2_void的用法.cpp#include<stdio.h>intf(void)〃括號(hào)中的void表示該函數(shù)不能接受數(shù)據(jù)int表示函數(shù)返回值是int類型的數(shù)據(jù){return10;〃向主調(diào)函數(shù)返回!0)voidg(void)〃8行函數(shù)名前面的void表示該函數(shù)沒(méi)有返回值(//return10;//error與8行行首的void相矛盾)intmain(void)intj=88;j=f0;printf("%d\n”,j);//j=g();//error因?yàn)間函數(shù)沒(méi)有返回值return0;)?總結(jié):函數(shù)是個(gè)工具,他是為了解決大量類似問(wèn)題而設(shè)計(jì)的,函數(shù)可以當(dāng)做黑匣子(內(nèi)部原理不用管)。3、如何定義函數(shù)?函數(shù)的返回值,函數(shù)的名字(函數(shù)的形參列表)(函數(shù)的執(zhí)行體)?函數(shù)定義的本質(zhì):詳細(xì)描述函數(shù)之所以能夠?qū)崿F(xiàn)某個(gè)特定功能的具體方法。函數(shù)中的變量叫做形參;數(shù)組中的變量叫元素。一旦函數(shù)執(zhí)行完畢,其內(nèi)部的形參所占空間就被收回。?return表達(dá)式的含義:(重要)舉例:return和break的區(qū)別.cpp#include<stdio.h>voidf(void)(inti;for(i=0;i<5;++i)printf(〃大家辛苦了!'n");return;)printf(?同志們好!\n");}intmain(void)(f();return0;)1>return是終止被調(diào)函數(shù),向主調(diào)函數(shù)返回表達(dá)式的值.2>如果表達(dá)式為空,則只終止函數(shù),不向被主函數(shù)返回任何值。3>break是用來(lái)終止(就近的)循環(huán)和switch語(yǔ)句。而return是用來(lái)終止被調(diào)函數(shù)的。例子:voidf()(return;"return只用來(lái)終止函數(shù),不向主調(diào)函數(shù)返回任何值。)intf()(return10I〃第一:終止函數(shù),第二:向主調(diào)函數(shù)返回!0)?函數(shù)返回值的類型也稱為函數(shù)的類型,因?yàn)槿绻瘮?shù)名前的返回值類型和函數(shù)執(zhí)行體中的return表達(dá)式中表達(dá)式的類型不同的話,則最終函數(shù)返回值的類型以函數(shù)名前的返回值類型為準(zhǔn)。舉例:到底什么是函數(shù)的類型.cpp#include<stdio.h>intf()return10.5J〃因?yàn)楹瘮?shù)的返回值類型是int所以最終f返回的是!0而不是10.5}intmain(void)(inti=99;doublex=6.6;x=f();printf(*%lf\n*?x);return0;}在上面的程序中,函數(shù)的返回值以函數(shù)前的數(shù)值類型為準(zhǔn)。4、函數(shù)的分類?有參函數(shù)和無(wú)參函數(shù)。有返回值和無(wú)返回值。庫(kù)函數(shù)和用戶自定義函數(shù)。值傳遞函數(shù)和地址傳遞函數(shù)。普通函數(shù)和主函數(shù)(main函數(shù))1>ー個(gè)程序必須有且只能有一個(gè)主函數(shù)。2》主函數(shù)可以調(diào)用普通函數(shù),普通不能調(diào)用主函數(shù)。3>普通函數(shù)可以相互調(diào)用。4》主函數(shù)是程序的入口,也是函數(shù)的出口。舉例:函數(shù)舉例_2.cpp#include<stdio.h>//max是函數(shù)的名字,i和j是形式參數(shù),簡(jiǎn)稱形參void表示函數(shù)沒(méi)有返回值。voidmaxi(inti,intj){if(i>j)printf("%d\n",i);elseprintf("%d\n",j);}intmax2(inti,intj){if(i>j)returni;elsereturnj;}intmain(void)(inta,b,c,d,e,f;a=1,b=2;c=3,d=9,e=-5,f=100;printf(%d\n,max2(a,b));printf(“%d\n”,max2(c,d));printf("畑!\n",max2(e,f));/*maxi(a,b);maxi(c,d);maxi(e,f);*/return0;}舉例:判斷ー個(gè)數(shù)是否是素?cái)?shù).cpp#include<stdio.h>intmain(void)(intval;inti;scanf("%d”,&val);for(i=2;i<val;++i)(if(val%i==0)break;}if(i==val)printf("Yes!

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論