二期基礎(chǔ)vip課件c語言補充_第1頁
二期基礎(chǔ)vip課件c語言補充_第2頁
二期基礎(chǔ)vip課件c語言補充_第3頁
二期基礎(chǔ)vip課件c語言補充_第4頁
二期基礎(chǔ)vip課件c語言補充_第5頁
已閱讀5頁,還剩70頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

計算機和軟件常識1.計算機運行原理1)硬件基本組成:硬盤、內(nèi)存、CPU2)各個部件之間的運作協(xié)調(diào)(右圖)2.計算機只能識別0和11)0和1組成的指令2)0和1組成的數(shù)據(jù)3.計算機和軟件的聯(lián)系1)軟件的基本概念:指令的集合2)軟件的安裝運行過程:*安裝在硬盤*運行在內(nèi)存3)為什么要開發(fā)軟件:寫出能控制計算機的指令CPU硬盤內(nèi)存裝載軟件讀取指令

計算機語言發(fā)展史1.機器語言1)簡介:所有代碼里面只有0和1,每一條指令稱為“機器指令”2)優(yōu)點*代碼能被計算機直接識別,直接對硬件產(chǎn)生作用,程序的執(zhí)行效率非常高*能直接訪問、控制計算機的各種硬件設(shè)備,如磁盤、存儲器、CPU、I/O端口等3)缺點*程序全是些0和1的指令代碼,可讀性差,還容易出錯*對硬件的依賴性很強,因此不同型號計算機的機器語言又不一樣。也就是說,如果2臺不同型號的機器想實現(xiàn)一樣的功能,需要編寫2套完全不同的代碼*要熟記所用計算機的全部指令和指令的涵義,指令又多又難記

2.匯編語言1)簡介:用英文單詞等符號代替機器指令2)優(yōu)點*像機器語言一樣,可以直接訪問、控制計算機的各種硬件設(shè)備*占用內(nèi)存少,執(zhí)行速度快3)缺點*不同的機器有不同的匯編語言語法和編譯器,代碼缺乏可移植性,也就是說,一個程序只能在一種機器上運行,換到其他機器上就不能運行*符號非常多、難記,即使是完成簡單的功能也需要大量的匯編語言代碼,很容易產(chǎn)生BUG,難于調(diào)試*必須對硬件非常了解,開發(fā)效率很低,周期長且單調(diào)4)使用場合*操作系統(tǒng)內(nèi)核、驅(qū)動程序、單片機程序*軟件的加密、解密、破解*病毒的制作、防治*程序的調(diào)試、分析計算機語言發(fā)展史

3.高級語言1)簡介:接近自然語言2)優(yōu)點*簡單、易用、易于理解,語法和結(jié)構(gòu)類似于普通英文*遠離對硬件的直接操作,使得一般人經(jīng)過學習之后都可以編程,而不用太熟悉硬件知識*一個程序還可以在不同的機器上運行,具有可移植性3)缺點*程序不能直接被計算機識別,需要經(jīng)編譯器翻譯成二進制指令后,才能運行到計算機上4)種類:C語言、C++、C#、Java、Objective-C等計算機語言發(fā)展史

關(guān)鍵字1.什么是關(guān)鍵字1>關(guān)鍵字就是C語言提供的有特殊含義的符號,也叫做“保留字”2>C語言一共提供了32個關(guān)鍵字,這些關(guān)鍵字都被C語言賦予了特殊含義autodoubleintstructbreakelselongswitchcaseenumregistertypedefcharexternreturnunionconstfloatshortunsignedcontinueforsignedvoiddefaultgotosizeofvolatiledoifwhilestatic大致瀏覽一遍即可,這些關(guān)鍵字以后會經(jīng)常用到的2.關(guān)鍵字的特征1>全部都是小寫2>在開發(fā)工具或者智能文本編輯工具中會顯示特殊顏色。默認情況下,C語言中的所有關(guān)鍵字在Xcode中都會顯示紫褐色3.main函數(shù)中哪些是關(guān)鍵字int、return

標識符1.什么是標識符標識符就是在程序中自定義的一些符號和名稱。要跟關(guān)鍵字區(qū)分開來:關(guān)鍵字是C語言默認提供的符號,標識符是程序員自定義的2.標識符的作用1)標識的目的就是為了將這些東西區(qū)分開來2)標識符的作用就跟人的名字差不多,為了區(qū)分每個人,就在每個人出生的時候起了個名字3)C語言是由函數(shù)構(gòu)成的,為了區(qū)分多個函數(shù),給每一個函數(shù)都起了個名字,函數(shù)的名稱就是標識符的一種,變量的名稱也是標識符3.命名1>命名規(guī)則(一定要遵守)*只能由26個英文字母的大小寫、10個阿拉伯數(shù)字0~9、下劃線_組成*嚴格區(qū)分大小寫,比如Button和button是2個不同的標識符*不能以數(shù)字開頭*不可以使用關(guān)鍵字作為標識符

2>命名規(guī)范(最好遵守)盡量起個有意義的名稱,比如一個完整的英文單詞,別人一看這個名稱就能才能這個標識符的作用。如果標識符中含有多個單詞,使用駝峰標識(除第一個單詞,后面每個單詞的首字母都是大寫):twoClass、myTwoClass,或者使用下劃線_來連接:first_class、my_first_class4.常見的標識符命名錯誤1.常見的標識符命名錯誤

注釋1.什么是注釋1)注釋是在所有計算機語言中都非常重要的一個概念,從字面上看,就是注解、解釋的意思2)注釋可以用來解釋某一段程序或者某一行代碼是什么意思,方便程序員之間的交流。假如我寫完一行代碼后,加上相應(yīng)的注釋,那么別人看到這個注釋就知道我的這行代碼是做什么用的3)注釋可以是任何文字,也就是說可以寫中文4)在開發(fā)工具中注釋一般是豆沙綠色2.單行注釋1)單行注釋以兩個正斜杠開頭,也就是以//開頭,只能注釋一行,從//開始到這行的結(jié)尾都是注釋的內(nèi)容2)任何地方都可以寫注釋:函數(shù)外面、里面,每一條語句后面

注釋3.多行注釋多行注釋以/*開頭,以*/結(jié)尾,/*和*/中間的內(nèi)容都是注釋4.注釋的作用1>被注釋的代碼不會參與編譯注釋是寫給人看的,不是給計算機看的。計算機怎么可能看得我們寫的中文嘛。因此,當編譯程序的時候,并不會將注釋編譯到.o目標文件中從.o文件的大小可以間接看出注釋后的代碼并沒有被編譯2>檢查代碼的作用3>排除錯誤

注釋5.注釋的嵌套現(xiàn)象1)單行注釋可以嵌套單行注釋、多行注釋//哈哈哈//呵呵呵//嘻嘻嘻///*abcdef*///abcdef2)多行注釋可以嵌套單行注釋/*//作者:EB

//描述:第一個C語言程序作用:這是一個主函數(shù),C程序的入口點*/3)多行注釋不能嵌套多行注釋/*哈哈哈/*嘻嘻嘻*/呵呵呵*/4)下面的寫法是錯誤的///*哈哈哈*/

注釋的重要性要養(yǎng)成寫注釋的良好習慣。絕大部分項目經(jīng)理檢查代碼的第一件事就是看有沒有寫注釋,很多公司的機試也會檢查注釋(機試就是給你一道編程題、一臺電腦)今天很高興,哈哈勞資我真厲害,一天寫了幾百行代碼,做出了一個非常不錯的功能,等等,我好像忘記了什么(注釋),管它的,我這么牛逼。幾天過后,你再回去看那一段代碼,你可能看不懂了,這是很正常的事。如果你寫了注釋,那情況就不一樣了,注釋可以幫助你回顧代碼的作用。你在某家公司待了1年多,寫了不知道多少行代碼,但是你不寫一點注釋。有一天你離職了,新的員工接手你做的項目,他首先要做的事情肯定是要讀懂你寫的代碼??墒悄阋稽c注釋都沒寫,全部都是英文,這會讓這位新員工非常地蛋疼。每個人都有自己的思想,寫代碼的思路肯定是不一樣的,看別人寫的代碼是件非常痛苦的事情,特別是沒有注釋的代碼。你不寫注釋的做法會大大降低公司的開發(fā)效率。因此,所有的大公司都非常重視注釋。

數(shù)據(jù)1.什么是數(shù)據(jù)生活中我們時刻都在跟數(shù)據(jù)談戀愛,比如體重數(shù)據(jù)、身高數(shù)據(jù)、股價數(shù)據(jù)等。使用計算機的過程中,會接觸到各種各樣的數(shù)據(jù),有文檔數(shù)據(jù)、圖片數(shù)據(jù)、視頻數(shù)據(jù),文字數(shù)據(jù)、文件數(shù)據(jù)等。2.數(shù)據(jù)的分類計算機中存儲的數(shù)據(jù)可以分為兩種:靜態(tài)數(shù)據(jù)和動態(tài)數(shù)據(jù)。1>靜態(tài)數(shù)據(jù)*概念:靜態(tài)數(shù)據(jù)是指一些永久性的數(shù)據(jù),一般存儲在硬盤中。硬盤的存儲空間一般都比較大,現(xiàn)在普通計算機的硬盤都有500G左右,因此硬盤中可以存放一些比較大的文件。*存儲的時長:計算機關(guān)閉之后再開啟,這些數(shù)據(jù)依舊還在,只要你不主動刪掉或者硬盤沒壞,這些數(shù)據(jù)永遠都在。*哪些是靜態(tài)數(shù)據(jù):靜態(tài)數(shù)據(jù)一般是以文件的形式存儲在硬盤上,比如文檔、照片、視頻等。

數(shù)據(jù)2>動態(tài)數(shù)據(jù)(臨時數(shù)據(jù))概念:動態(tài)數(shù)據(jù)指在程序運行過程中,動態(tài)產(chǎn)生的臨時數(shù)據(jù),一般存儲在內(nèi)存中。內(nèi)存的存儲空間一般都比較小,現(xiàn)在普通計算機的內(nèi)存只有8G左右,因此要謹慎使用內(nèi)存,不要占用太多的內(nèi)存空間。存儲的時長:計算機關(guān)閉之后,這些臨時數(shù)據(jù)就會被清除。哪些是動態(tài)數(shù)據(jù):當運行某個程序(軟件)時,整個程序就會被加載到內(nèi)存中,在程序運行過程中,會產(chǎn)生各種各樣的臨時數(shù)據(jù),這些臨時數(shù)據(jù)都是存儲在內(nèi)存中的。當程序停止運行或者計算機被強制關(guān)閉時,這個程序產(chǎn)生的所有臨時數(shù)據(jù)都會被清除。你可能會問:既然硬盤的存儲空間這么大,為何不把所有的應(yīng)用程序加載到硬盤中去執(zhí)行呢?有個主要原因是內(nèi)存的訪問速度比硬盤快N倍。程序員最關(guān)心的是什么數(shù)據(jù)呢?

數(shù)據(jù)3>靜態(tài)數(shù)據(jù)和動態(tài)數(shù)據(jù)的轉(zhuǎn)換靜態(tài)->動態(tài)動態(tài)->靜態(tài)3.數(shù)據(jù)的大小1)不管是靜態(tài)還是動態(tài)數(shù)據(jù),都是0和1組成的。0和1如何組成這么多的數(shù)據(jù)?2)數(shù)據(jù)都有大小,靜態(tài)數(shù)據(jù)就會占用硬盤的空間,動態(tài)數(shù)據(jù)就占用內(nèi)存的空間3)數(shù)據(jù)越大,包含的0和1就越多,比特位和字節(jié)4)1KB=1024B,1MB=1024KB,1GB=1024MB,1TB=1024GB

語言中的數(shù)據(jù)類型由于app中的數(shù)據(jù)種類繁多,為了方便操作數(shù)據(jù),C語言數(shù)據(jù)進行了分類

常量1.什么是常量常量,表示一些固定的數(shù)據(jù)2.常量的分類1>整型常量(int)包括了所有的整數(shù),比如1、2、3、4、-1、0、-2等2>浮點型常量(float\double)浮點型常量分為double和float兩種數(shù)據(jù)類型*double:雙精度浮點型,其實就是小數(shù)。比如13.14、-13.14、0.0等(注意,0.0也算是個小數(shù))*float:單精度浮點型,也是小數(shù),比double的精確程度低,就是表示的小數(shù)位數(shù)比較少。為了跟double區(qū)分開來,float型數(shù)據(jù)都是以f結(jié)尾的,比如13.14f、-13.14f、0.0f。需要注意的是,不能有1f這樣格式的,編譯器會直接報錯,只有小數(shù)才允許加上f。

常量3>字符常量(char)*將一個數(shù)字(0~9)、英文字母(a~z、A~Z)或者其他符號(+、-、!、?等)用單引號括起來,這樣構(gòu)成的就是字符常量。比如'2'、'a'、'F'、'+'、'$'等。注意:單引號只能括住1個字符,而且不能是中文字符,下面的寫法是錯誤的:'abc'、'123456'、'男'4>字符串常量*將一個或者多個字符用雙引號("")括起來,這樣構(gòu)成的就是字符串常量。比如"2"、"男"、"哇哈哈"、"abcd"、"my_class2",其實printf("HelloWorld");語句中的"HelloWorld"就是字符串常量。那究竟2、'2'、"2"在用法上有什么區(qū)別呢?這個先不作討論,以后會介紹。

變量1.什么是變量當一個數(shù)據(jù)的值需要經(jīng)常改變或者不確定時,就應(yīng)該用變量來表示。比如班級人數(shù)(inti;charc;inta,b;)。2.定義變量1>目的*任何變量在使用之前,必須先進行定義。*定義變量的目的是:在內(nèi)存中分配一塊存儲空間給變量,方便以后存儲數(shù)據(jù)。*如果定義了多個變量,就會為這多個變量分別分配不同的存儲空間。2>格式變量類型變量名;比如intnum;*變量名屬于標識符*變量類型*不同類型的變量占用不同大小的存儲空間。內(nèi)存極其有限,分配適當?shù)拇鎯臻g*約束變量所存放的數(shù)據(jù)類型(方便運算)

變量3.變量的使用1>賦值*往變量里面放東西,就是賦值。賦值語句后帶個分號;i=10;注意:這里的等號=,并不是數(shù)學中的“相等”,而是C語言中的賦值運算符,作用是將右邊的常量10賦值給左邊的變量i*第一次賦值,可以稱為“初始化”*初始化的兩種形式*先定義,后初始化:inta;a=10;*定義的同時進行初始化:inta=10;2>修改可以修改變量的值,多次賦值。每次賦值都會覆蓋原來的值i=10;i=20;變量i最后的值是20

變量使用printf輸出一個\多個變量的值inta=1,c=11;printf("a=%d,c=%d",a,c);double\float\char的輸出,格式符的一些小技巧doubleheight=1.58;charblood='A';printf("height=%.2f,血型是%c",height,blood);簡單的加減操作inta=1+2;沒有初始化時不要拿來使用(下面的寫法是不建議的)intscore;printf("score=%d",score);3>變量之間值的傳遞可以將一個變量的值賦值給另一個變量inta=1;intb=a;連續(xù)賦值a=b=1;

4.常見錯誤1>變量名相同inta=1;inta=11;2>變量的作用域不對*變量的創(chuàng)建和釋放過程*代碼塊作用域{inta=10;}5.習題1>交換整型變量a、b的值。比如a=1、b=11;交換之后a的值是11,b的值是1。用兩種方式實現(xiàn):*使用第三方變量intc;c=a;a=b;b=c;*不使用第三方變量a=b-a;b=b-a;a=b+a;變量

一、變量的內(nèi)存分析1.字節(jié)和地址為了更好地理解變量在內(nèi)存中的存儲細節(jié),先來認識一下內(nèi)存中的“字節(jié)”和“地址”。1>內(nèi)存以“字節(jié)為單位”2>不同類型占用的字節(jié)是不一樣的,數(shù)據(jù)越大,所需的字節(jié)數(shù)就越多2.變量的存儲1>所占用字節(jié)數(shù)跟類型有關(guān),也跟編譯器環(huán)境有關(guān)變量

變量2>變量實例intb=1;inta=2;*內(nèi)存由大到小尋址,優(yōu)先分配內(nèi)存地址較大的字節(jié)給變量*每個變量都有地址:第一個字節(jié)的地址就是變量的地址3>查看內(nèi)存地址:inta;printf("a的地址是:%p\n",&a);4>注意在變量未經(jīng)初始化之前,不要嘗試使用變量的值inta;printf("a的值是:%d\n",a);上面的寫法是不建議的

scanf函數(shù)1.簡介這是在stdio.h中聲明的一個函數(shù),使用前必須加入#include<stdio.h>。調(diào)用scanf函數(shù)時,需要傳入變量的地址作為參數(shù),scanf函數(shù)會等待標準輸入設(shè)備(比如鍵盤)輸入數(shù)據(jù),并且將輸入的數(shù)據(jù)賦值給地址對應(yīng)的變量2.簡單用法intage;scanf("%d",&age);(1)scanf函數(shù)時,會等待用戶的鍵盤輸入,不會往后執(zhí)行代碼。scanf的第1個參數(shù)是"%d",說明要求用戶以10進制的形式輸入一個整數(shù)。這里要注意,scanf的第2個參數(shù)傳遞的不是age變量,而是age變量的地址&age,&是C語言中的一個地址運算符,可以用來獲取變量的地址輸入完畢后,敲一下回車鍵,目的是告訴scanf函數(shù)我們已經(jīng)輸入完畢了,scanf函數(shù)會將輸入的值賦值給age變量

3.其他用法1>用scanf函數(shù)接收3個數(shù)值,每個數(shù)值之間用中劃線-隔開scanf("%d-%d-%d",&a,&b,&c);3個%d之間是用中劃線-隔開的,我們在每輸入一個整數(shù)后都必須加個中劃線-(1)注意:數(shù)值之間的分隔符是任意的,不一定要用中劃線-,可以是逗號、空格、星號*、井號#等等,甚至是英文字母//逗號,scanf("%d,%d,%d",&a,&b,&c);//輸入格式:1,2,3

//井號#scanf("%d#%d#%d",&a,&b,&c);//輸入格式:1#2#3

//字母xscanf("%dx%dx%d",&a,&b,&c);//輸入格式:1x2x32>用scanf函數(shù)接收3個數(shù)值,每個數(shù)值之間用空格隔開scanf("%d%d%d",&a,&b,&c);3個%d之間是用空格隔開的,我們在每輸入一個整數(shù)后必須輸入一個分隔符,分隔符可以是空格、tab、回車scanf函數(shù)

運算符一、算數(shù)運算符C語言一共有34種運算符,包括了常見的加減乘除運算1.加法運算+*除開能做加法運算,還能表示正號:+1、+22.減法運算-*除開能做減法運算,還能表示符號:-1、-23.乘法運算*注意符號,不是x,而是*4.除法運算/*注意符號,不是÷,也不是\,而是/*整數(shù)除于整數(shù),還是整數(shù)。1/2的值是0,這個并不是二分之一5.取余運算%*什么是取余:兩個整數(shù)相除之后的余數(shù)*%兩側(cè)只能是整數(shù)*正負性取決于%左側(cè)的數(shù)值

6.注意點1>自動類型轉(zhuǎn)換inta=1.6;intb=1.5+1.7;自動將大類型轉(zhuǎn)換為了小類型,會丟失精度2>自動類型提升intb=1.5+1;將右邊的10提升為了double類型doubleb=1.0/2;解決除法的精度問題3>強制類型轉(zhuǎn)換doublea=(double)1/2;doubleb=(double)(1/2);4>運算順序表達式結(jié)合性(結(jié)合方向):1+3+5優(yōu)先級:2+2*2-2運算符

7.習題1)當?是什么運算符時,不論整型變量a的值怎么變,結(jié)果c都不超過10intc=a?10;2)提示用戶輸入兩個整數(shù),并輸出兩個整數(shù)的平均數(shù)3)提示用戶輸入一個時間的秒數(shù),比如100秒就輸入100,然后輸出對應(yīng)的分鐘和秒,比如100s就是1分鐘40秒運算符

二、賦值運算1.簡單賦值*inta=10+5;的運算過程*a=b=10;的運算過程*等號左邊不能是常量,比如10=11;2.復合賦值*復加減乘除余:a+=4+5;三、自增自減1.簡單使用*++

自增運算符。如a++,++a,都等價于a=a+1*自減運算符。如a--,--a,都等價于a=a-1*5++是錯誤的2.++a和a++的區(qū)別*inta=10;*a++;++a;*intb=a++;intb=++a;運算符

四、sizeof1.作用用來計算一個變量或者一個常量、一種數(shù)據(jù)類型所占的內(nèi)存字節(jié)數(shù)。2.基本形式*sizeof(變量\常量)*sizeof變量\常量*sizeof(數(shù)據(jù)類型)*不能是sizeof數(shù)據(jù)類型五、關(guān)系運算(比較運算)1.條件判斷*默認情況下,我們在程序中寫的每一句正確代碼都會被執(zhí)行。但很多時候,我們想在某個條件成立的情況下才執(zhí)行某一段代碼(條件)*這種情況的話可以使用條件語句來完成,但是我們暫時不學習條件語句,先來看一些更基礎(chǔ)的知識:如何判斷一個條件成不成立。運算符

2.真假*在C語言中,條件成立稱為“真”,條件不成立稱為“假”,因此,判斷條件是否成立,就是判斷條件的“真假”。*怎么判斷真假呢?C語言規(guī)定,任何數(shù)值都有真假性,任何非0值都為“真”,只有0才為“假”。也就是說,108、-18、1.5、-1.5等都是“真”,0則是“假”。3.關(guān)系比較開發(fā)中經(jīng)常要比較,比如斗地主游戲中牌的大小。利用關(guān)系運算符就可以比較兩個值的大小。*關(guān)系運算符的運算結(jié)果只有2種:如果條件成立,結(jié)果就為1,也就是“真”;如果條件不成立,結(jié)果就為0,也就是“假”。4.使用注意*關(guān)系運算符中==、!=的優(yōu)先級相等,<、<=、>、>=的優(yōu)先級相等,且前者的優(yōu)先級低于后者:2==3>1*關(guān)系運算符的結(jié)合方向為“從左往右”:4>3>2>1*關(guān)系運算符的優(yōu)先級小于算術(shù)運算符:3+4>8-2運算符

5.習題計算下列表達式的值3>4+7 (3>4)+75!=4+2*7>3==10六、邏輯運算*有時需要多個條件同時成立才能執(zhí)行某段代碼,比如:用戶只有同時輸入了QQ和密碼,才能執(zhí)行登錄,如果只輸入了QQ或者只輸入了密碼,就不能執(zhí)行登錄。這種情況下,我們就要借助于C語言提供的邏輯運算符。*邏輯運算的結(jié)果只有2個:“真”為1,“假”為01.&&邏輯與1>使用格式“條件A&&條件B”2>運算結(jié)果只有當條件A和條件B都成立時,結(jié)果才為1,也就是“真”;其余情況的結(jié)果都為0,也就是“假”。運算符

3>運算過程總是先判斷條件A是否成立如果條件A成立,接著再判斷條件B是否成立:如果條件B成立,“條件A&&條件B”的結(jié)果就為1,即“真”,如果條件B不成立,結(jié)果就為0,即“假”如果條件A不成立,就不會再去判斷條件B是否成立:因為條件A已經(jīng)不成立了,不管條件B如何,“條件A&&條件B”的結(jié)果肯定是0,也就是“假”4>舉例邏輯與的結(jié)合方向是“自左至右”。比如表達式(a>3)&&(a<5)若a的值是4:先判斷a>3,成立;再判斷a<5,也成立。因此結(jié)果為1若a的值是2:先判斷a>3,不成立,停止判斷。因此結(jié)果為0因此,如果a的值在(3,5)這個范圍內(nèi),結(jié)果就為1;否則,結(jié)果就為0運算符

5>注意若想判斷a的值是否在(3,5)范圍內(nèi),千萬不能寫成3<a<5,因為關(guān)系運算符的結(jié)合方向為“從左往右”。比如a為2,它會先算3<a,也就是3<2,條件不成立,結(jié)果為0。再與5比較,即0<5,條件成立,結(jié)果為1。因此3<a<5的結(jié)果為1,條件成立,也就是說當a的值為2時,a的值是在(3,5)范圍內(nèi)的。這明顯是不對的。正確的判斷方法是:(a>3)&&(a<5)C語言規(guī)定:任何非0值都為“真”,只有0才為“假”。因此邏輯與也適用于數(shù)值。比如1&&2的結(jié)果是1,為“真”;1&&0的結(jié)果是0,為“假”運算符

||

邏輯或1>使用格式“條件A||條件B”2>運算結(jié)果當條件A或條件B只要有一個成立時(也包括條件A和條件B都成立),結(jié)果就為1,也就是“真”;只有當條件A和條件B都不成立時,結(jié)果才為0,也就是“假”。3>運算過程總是先判斷條件A是否成立*如果條件A成立,就不會再去判斷條件B是否成立:因為條件A已經(jīng)成立了,不管條件B如何,“條件A||條件B”的結(jié)果肯定是1,也就是“真”*如果條件A不成立,接著再判斷條件B是否成立:如果條件B成立,“條件A||條件B”的結(jié)果就為1,即“真”,如果條件B不成立,結(jié)果就為0,即“假”4>舉例邏輯或的結(jié)合方向是“自左至右”。比如表達式(a<3)||(a>5)*若a的值是4:先判斷a<3,不成立;再判斷a>5,也不成立。因此結(jié)果為0*若a的值是2:先判斷a<3,成立,停止判斷。因此結(jié)果為1因此,如果a的值在(-∞,3)或者(5,+∞)范圍內(nèi),結(jié)果就為1;否則,結(jié)果就為0運算符

注意

C語言規(guī)定:任何非0值都為“真”,只有0才為“假”。因此邏輯或也適用于數(shù)值。比如1||2的結(jié)果是1,為“真”;1||0的結(jié)果是1,為“真”;0||0的結(jié)果是0,為“假”!

邏輯非1>使用格式“!條件A”2>運算結(jié)果其實就是對條件A進行取反:若條件A成立,結(jié)果就為0,即“假”;若條件A不成立,結(jié)果就為1,即“真”。也就是說:真的變假,假的變真。3>舉例邏輯非的結(jié)合方向是“自右至左”。比如表達式!(a>2)*若a的值是3:先判斷a>2,成立,再取反之后的結(jié)果為0*若a的值是1:先判斷a>2,不成立,再取反之后的結(jié)果為1因此,如果a的值大于2,結(jié)果就為0;否則,結(jié)果就為1運算符

4>注意可以多次連續(xù)使用邏輯非運算符:!(2>1)結(jié)果為0,是“假”,!!(2>1)結(jié)果為1,是“真”,!!!(2>1)結(jié)果為0,是“假”C語言規(guī)定:任何非0值都為“真”,只有0才為“假”。因此,對非0值進行邏輯非!運算的結(jié)果都是0,對0值進行邏輯非!運算的結(jié)果為1。!1、!1.1、!-1的結(jié)果都為0,!0的結(jié)果為1優(yōu)先級*邏輯運算符順序為:小括號()>負號->!>算術(shù)運算符>關(guān)系運算符>&&>||*表達式!(3>5)||(2<4)&&(6<1):先計算!(3>5)、(2<4)、(6<1),結(jié)果為1,式子變?yōu)?||1&&0,再計算1&&0,式子變?yōu)?||0,最后的結(jié)果為1*表達式3+2<5||6>3等價于((3+2)<5)||(6>3),結(jié)果為1*表達式4>3&&!-5>2等價于(4>3)&&

((!(-5))>2),結(jié)果為0七、三目運算符表達式:條件?a:b;表示條件成立為a,不成立為b*inta=5?10:2;*獲得a、b中的最大數(shù)*獲得a、b、c中的最大數(shù)運算符

123流程控制一、順序結(jié)構(gòu):默認的流程結(jié)構(gòu)。按照書寫順序執(zhí)行每一條語句。選擇結(jié)構(gòu):對給定的條件進行判斷,再根據(jù)判斷結(jié)果來決定執(zhí)行哪一段代碼。循環(huán)結(jié)構(gòu):在給定條件成立的情況下,反復執(zhí)行某一段代碼。

二、選擇結(jié)構(gòu)-if1.簡單使用if(表達式)語句1;if(count>20)開班;上課;if(表達式)語句1;else語句2;f(count>20)開班;else不開班;if(表達式){}if(count>50){開班;布置課室;}else{}{}的作用域if-elseif-elseif(a==0)elseif(a>0)else特點:只有一個括號會被執(zhí)行復合條件上課時間的取值范圍(20:30~22:00||22:10~23:30)陷阱:if(a!=0){a不是0;}else{a是0;}if(a);{}if(a=0)a==0;if(10)inta=9;流程控制

123流程控制2.習題1>輸入一個整數(shù)day代表星期幾,根據(jù)day的值輸出對應(yīng)的星期幾,比如day==1,就輸出“星期一”2>輸入一個整數(shù)month代表月份,根據(jù)月份輸出對應(yīng)的季節(jié)。春季:3、4、5夏季:6、7、8秋季:9、10、11冬季:12、1、23>輸入一個整數(shù)score代表分數(shù),根據(jù)分數(shù)輸出等級(A-E)(用兩種方式)A:90~100B:80~89C:70~79D:60~69E:0~60

三、選擇結(jié)構(gòu)-switch1.簡單使用switch(表達式){case數(shù)值1:break;…default:break;}舉例inta=10;switch(a){case0:printf("這是一個0");break;case5:printf("這是一個5");break;case10:printf("這是一個10");break;default:printf("什么也不是");break;}流程控制

123流程控制自己試著想想break的作用嘗試在case中定義變量2.if和switch的對比很多情況可以互換if用得比較多,比較靈活,switch只能某個單值3.習題用switch替代if實現(xiàn)if中的習題

123流程控制四、循環(huán)結(jié)構(gòu)-while1.簡單使用連續(xù)printf(“俯臥撐”)20次;while(表達式){}continue:輸出5次休息一下break的使用:某次的時候停止循環(huán)2.特點只有條件成立才會執(zhí)行循環(huán)體3.習題1>提示用戶輸入一個正整數(shù)n,計算1+2+3+…+n的和2>提示用戶輸入一個正整數(shù)n,計算1-2+3-4+5-6+…+n的和4.陷阱while(條件);

123流程控制

五、循環(huán)結(jié)構(gòu)-dowhile特點:一定會執(zhí)行一次循環(huán)體while和dowhile循環(huán)對比inti=0;while(i<0){i++;}inti=0;do{i++;}while(i<0);

六、循環(huán)結(jié)構(gòu)-for1.簡單實用運行過程初始化語句等可以是多句(把printf放到for的括號中)2.for循環(huán)嵌套好友列表1 好友1...好友列表2 好友1...好友列表3 好友1...3.陷阱1>死循環(huán)for(;;);2>for循環(huán)體內(nèi)部變量的作用域3>作用域混淆for(inti=0;i<5;i++)inta=10;4.while循環(huán)和for循環(huán)的比較可以互換for循環(huán)的變量可以及時回收流程控制

1235.習題1>提示用戶輸入一個正整數(shù)n,如果n5,就輸出下列圖形,其他n值以此類推2>輸出九九乘法表流程控制

七、break和continue1.break*使用場合:switch\循環(huán)結(jié)構(gòu)*循環(huán)嵌套下的break2.continue*使用場合:循環(huán)結(jié)構(gòu)*循環(huán)嵌套下的continue流程控制

一、什么是函數(shù)*任何一個C語言程序都是由一個或者多個代碼塊構(gòu)成的,每個代碼塊都有自己的功能,我們一般稱這些代碼塊為“函數(shù)”。所以,你可以說C語言程序是由函數(shù)構(gòu)成的。*比如你用C語言編寫了一個播放器程序,那么它的程序結(jié)構(gòu)如下圖所示:二、函數(shù)的定義1.定義函數(shù)的目的*將一個常用的功能封裝起來,方便以后調(diào)用2.定義函數(shù)的步驟*函數(shù)名:函數(shù)叫什么名字*函數(shù)體:函數(shù)是干啥的,里面包含了什么代碼函數(shù)

3.格式*固定格式(很多語言的函數(shù)都是這么寫的)返回值類型函數(shù)名(形式參數(shù)列表){ 函數(shù)體}*舉例定義一個函數(shù),計算兩個整數(shù)的和sum(inta,intb){ intc=a+b;}函數(shù)

三、函數(shù)調(diào)用*sum(1,11);引出返回值*說明函數(shù)的調(diào)用過程*簡述return的作用四、函數(shù)的參數(shù)1.形參和實參的基本概念2.形參個數(shù)和實參一致:sum(1,11,12)3.參數(shù)的傳遞是值傳遞4.參數(shù)名不能跟函數(shù)內(nèi)的局部變量同名5.函數(shù)可以沒有參數(shù):設(shè)計一個函數(shù)返回π五、函數(shù)的返回值1.返回值的基本概念、return的作用2.void3.return*void可以省略return*可以多次使用return*return后面不能有其他語句4.函數(shù)的弱語法*如果沒有寫返回值類型,默認是int*如果寫了返回值,可以不返回*調(diào)用一個沒有定義過的函數(shù)函數(shù)

六、函數(shù)注意*不能嵌套定義函數(shù)*死循環(huán)調(diào)用,自己調(diào)用自己*不能重復定義、可以重復聲明七、函數(shù)的補充1.main函數(shù)*返回值:0,正常退出;1,異常退出2.printf函數(shù)*#include*返回值:字符串的長度八、習題1.編寫一個函數(shù)doubleavr(inta,intb),計算a和b的平均值2.編寫一個函數(shù)intpows(inta,intn)返回a的n次方3.編寫一個函數(shù)intadd(intn),計算1+2+3+……+n的值并返回。比如add(3)的返回值是1+2+3=6函數(shù)

九、函數(shù)的聲明1.函數(shù)的定義順序函數(shù)的聲明作用:聲明和定義,類似于身份證和人的關(guān)系,編譯買火車票、鏈接上火車3.只有函數(shù)聲明、沒有定義,編譯警告、鏈接報錯函數(shù)

十、.h文件和.c文件的分工1.單文件的壞處*一個文件的內(nèi)容太多,不利于閱讀、調(diào)試*多人修改同一個文件出問題*公司里面是團隊合作2.將sum函數(shù)抽取到另一個.c文件中*先直接調(diào)用sum函數(shù),編譯警告、鏈接main.c錯誤*#include“sum.c”,編譯鏈接main.c,運行成功(畫圖分析.o文件中的東西)*如果avr.c中使用sum.c,編譯鏈接main.c,運行程序(畫圖分析出錯原因)3.在其他文件中聲明sum函數(shù)*intsum(int,int);*編譯鏈接main.c*編譯鏈接sum.c*編譯鏈接main.csum.c,運行成功*avr.c利用一樣的方法函數(shù)

4.將intsum(int,int)抽取到另外一個文件中不抽取聲明的壞處:增加新的函數(shù)了抽取到.c文件中?開發(fā)工具會將所有的.c進行編譯鏈接抽取到.h文件中5.抽取步驟總結(jié).c文件寫函數(shù)的定義.h文件寫函數(shù)的聲明要想用我的函數(shù),請包含我的.h文件好處分析函數(shù)

十一、#include1.預處理指令簡介2.#include的作用純粹是文件拷貝3.#include<stdio.h>stdio.h中有什么?鏈接的時候做了什么事情<>和””的區(qū)別4.#include的路徑問題默認是同路徑,其他問題以后再討論函數(shù)

1.什么是進制*是一種計數(shù)的方式,數(shù)值的表示形式漢字:十一十進制:11二進制:1011八進制:13*多種進制:十進制、二進制、八進制、十六進制。也就是說,同一個整數(shù),我們至少有4種表示方式軟件開發(fā),肯定要了解這個2.二進制1>特點:只有0和1,逢2進12>書寫格式:0b或者0b開頭3>使用場合:二進制指令\二進制文件,變量在內(nèi)存中就是二進制存儲4>二進制和十進制的互相轉(zhuǎn)換5>n為二進制位所能表示的數(shù)據(jù)范圍(不考慮負數(shù)):0~2的n次方-13.八進制1>特點:0~7,逢八進一2>書寫格式:0開頭3>八進制和二進制的互相轉(zhuǎn)換進制

4.十六進制1>特點:0~F,逢十六進一2>書寫格式:0x或者0X開頭3>十六進制和二進制的互相轉(zhuǎn)換5.習題1>判斷下列數(shù)字是否合理000110x00110x7H410.980986.089-109+1780b3250b00100xFFdc96f96.0f96.0F-.00315.4e610e8.77.6e-62>分別寫出它們的十進制、八進制、十六進制0b001111010b011110113>寫出它們的二進制670560x004f進制

2>變量實例intb=10;inta=134;*內(nèi)存由大到小尋址*只存儲二進制形式*每個變量都有地址:第一個字節(jié)的地址就是變量的地址3>查看內(nèi)存地址的兩種方式:%x和%p4>查看整數(shù)的二進制形式//輸出整數(shù)的二進制形式voidputBinary(intn){intbits=sizeof(n)*8;while(bits-->0){printf("%d",n>>bits&1);if(bits%4==0)printf("");}printf("\n");}進制

3.負數(shù)在內(nèi)存中的存儲1>一個字節(jié)的取值范圍2>負數(shù)的表示形式3>原碼、反碼、補碼4.取值范圍如右圖:5.習題寫出下列變量在內(nèi)存中的存儲情況inta=134;intb=0;intc=-10;進制

類型說明符1>short和long*100l和100ll和100的區(qū)別*long和longlong的輸出*不同類型所占用的存儲空間規(guī)則:*short跟int至少為16位(2字節(jié))*long至少為32位(4字節(jié))*short的長度不能大于int,int的長度不能大于long*char一定為為8位(1字節(jié)),畢竟char是我們編程能用的最小數(shù)據(jù)類型2>可以連續(xù)使用2個long,也就是longlong。一般來說,longlong的范圍是不小于long的3>還有一點要明確的是:shortint等價于short,longint等價于long,longlongint等價于longlong進制

2.signed和unsigned1>首先要明確的:signedint等價于signed,unsignedint等價于unsigned2>signed和unsigned的區(qū)別就是它們的最高位是否要當做符號位。signed:表示有符號,也就是說最高位要當做符號位,所以包括正數(shù)、負數(shù)和0,signed的取值范圍是-231~231-1。unsigned:表示無符號,也就是說最高位并不當做符號位,所以不包括負數(shù),也就是0~232-1(64位)。進制

1.&按位與1>功能只有對應(yīng)的兩個二進位均為1時,結(jié)果位才為1,否則為0。2>舉例:比如9&5,其實就是1001&101=1,因此9&5=13>規(guī)律*二進制中,與1相&就保持原位,與0相&就為02.|按位或1>功能只要對應(yīng)的二個二進位有一個為1時,結(jié)果位就為1,否則為0。2>舉例:比如9|5,其實就是1001|101=1101,因此9|5=133.^按位異或1>功能當對應(yīng)的二進位相異(不相同)時,結(jié)果為1,否則為0。2>舉例:比如9^5,其實就是1001^101=1100,因此9^5=123>規(guī)律*相同整數(shù)相^的結(jié)果是0。比如5^5=0*多個整數(shù)相^的結(jié)果跟順序無關(guān)。比如5^6^7=5^7^6*因此得出結(jié)論:a^b^a=b位運算

4.~取反對整數(shù)a的各二進位進行取反,符號位也取反(0變1,1變0)5.<<左移*把整數(shù)a的各二進位全部左移n位,高位丟棄,低位補0。左移n位其實就是乘以2的n次方*由于左移是丟棄最高位,0補最低位,所以符號位也會被丟棄,左移出來的結(jié)果值可能會改變正負性6.>>右移*把整數(shù)a的各二進位全部右移n位,保持符號位不變。右移n位其實就是除以2的n次方*為正數(shù)時,符號位為0,最高位補0*為負數(shù)時,符號位為1,最高位是補0或是補1取決于編譯系統(tǒng)的規(guī)定7.習題1>在不用引入其他變量的情況下,使用位異或^運算符實現(xiàn)兩個變量值的互換2>使用位與&運算符變量的奇偶性3>編寫一個函數(shù),用來輸出整數(shù)在內(nèi)存中的二進制形式位運算

1.存儲細節(jié)ASCII單字節(jié)表(雙字節(jié)GBK\GB2312\GB18030\Unicode)2.常見錯誤charc=A;charc="A";charc='ABCD';charc='男';3.當做整型使用在-128~127范圍內(nèi),可以當做整數(shù)來用4.%c和%d\%i的使用printf(“%d”,‘A’);printf(“%c”,68);char類型

5.轉(zhuǎn)義字符char類型

一個int類型的變量能保存一個人的年齡,如果想保存整個班的年齡呢?1.什么是數(shù)組數(shù)組就是用來存儲一組數(shù)據(jù)的2.數(shù)組的特點*只能存放一種類型的數(shù)據(jù),比如int類型的數(shù)組、float類型的數(shù)組*里面存放的數(shù)據(jù)稱為“元素”二、數(shù)組的定義1.定義*聲明數(shù)組的類型*聲明數(shù)組的元素個數(shù)(需要多少存儲空間)2.格式元素類型數(shù)組名[元素個數(shù)];比如:intages[3];3.簡單使用*簡單初始化:intages[5]={19,19,20,21,25};*元素有順序之分,每個元素都有一個唯一的下標(索引),從0開始*數(shù)組元素的訪問:a[i]數(shù)組的基本概念

4.初始化*初始化方式*inta[3]={1,2,3};*inta[3]={1,2};*inta[]={1,2,3};*inta[4]={[1]=11,[0]=7};*常見錯誤*inta[];*int[4]a;*inta[b];*a={1,2};*a[4]={1,2,3,4};5.內(nèi)存分析*數(shù)組存儲空間的大小*存儲空間的劃分(內(nèi)存的分配是從高地址到低地址進行的,但一個數(shù)組內(nèi)部元素又是從低到高進行的)*數(shù)組名的作用,查看元素地址*數(shù)組越界的注意數(shù)組的基本概念

6.其他使用*數(shù)組與函數(shù)參數(shù)*數(shù)組元素作為函數(shù)參數(shù)*數(shù)組作為函數(shù)參數(shù)(sizeof注意)*遍歷數(shù)組元素*兩種方式遍歷(while循環(huán)和for循環(huán))*遍歷元素值和元素地址*字符數(shù)組的使用7.習題1>提示輸入5個學生的成績,算出平均分、最高分、最低分,然后輸出2>設(shè)計一個函數(shù):intarrayMax(inta[],intcount),找出數(shù)組元素的最大值3>設(shè)計一個函數(shù):intarraySum(inta[],intn),求一維數(shù)組a前n個數(shù)的和4>設(shè)計一個函數(shù):將一維整型數(shù)組中的元素逆序存放。比如本來是1,2,3,4,逆序存放就變成了:4,3,2,1數(shù)組的基本概念

1.什么是字符串*簡單的字符串”abcd”*一個’i’是一個字符*很多個字符組合在一起就是字符串了2.字符串的初始化*chara[]=“123”;和chara[]={‘1’,’2’,’3’};的區(qū)別,可以比較大小*“123”其實是由’1’、’2’、’3’、’\0’組成*“123”的存儲分布*字符串的輸出”%s”,’\0’是不會輸出的3.\0的作用*輸出chara[]={‘o’,’k’};*在chara

溫馨提示

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

評論

0/150

提交評論