對于剛學(xué)計(jì)算機(jī)編程的同學(xué)來說,沒一個(gè)編程知識都覺得很重要,其實(shí)不是的。下面小編為大家整理了相關(guān)大學(xué)c語言必背基礎(chǔ)知識,希望大家喜歡。
大學(xué)c語言必背基礎(chǔ)知識
舉例說明:
printf(“-”,123 ); 第二部分有三位,大于指定的兩位,原樣輸出123
printf(“]”,123 ); 第二部分有三位,小于指定的五位,左邊補(bǔ)兩個(gè)空格 123
printf(“f”,1.25 ); 小數(shù)要求補(bǔ)足6位的,沒有六位的補(bǔ)0,。結(jié)果為1.250000
printf(“%5.3f”,125 ); 小數(shù)三位,整個(gè)五位,結(jié)果為1.250(小數(shù)點(diǎn)算一位)
printf(“%3.1f”,1.25 );小數(shù)一位,整個(gè)三位,結(jié)果為1.3(要進(jìn)行四舍五入)
第三節(jié) 數(shù)據(jù)輸入
1、scanf(“a=%d,b=%d”,&a,&b) 考試超級重點(diǎn)!一定要記住是以第一部分的格式在終端輸入數(shù)據(jù)??荚嚭诵臑椋阂荒R粯?。在黑色屏幕上面輸入的為 a=12,b=34才可以把12和34正確給a和b 。有一點(diǎn)不同也不行。
2、scanf(“%d,%d”,x,y);這種寫法絕對錯(cuò)誤,scanf的第二個(gè)部分一定要是地址!scanf(“%d,%d”,&x,&y);注意寫成這樣才可以!
3、特別注意指針在scanf的考察例如: int x=2;int *p=&x;scanf(“%d”,x); 錯(cuò)誤 scanf(“%d”,p);正確scanf(“%d”,&p); 錯(cuò)誤 scanf(“%d”,*p)錯(cuò)誤
4、指定輸入的長度 (考試重點(diǎn))終端輸入:1234567scanf(“-M%d”,&x,&y,&z);x為12,y為3456,z為7終端輸入:1 234567 由于1和2中間有空格,所以只有1位給xscanf(“-M%d”,&x,&y,&z);x為1,y為2345,z為67
5、字符和整型是近親:int x=97;printf(“%d”,x); 結(jié)果為97printf(“%c”,x); 結(jié)果為 a
6、輸入時(shí)候字符和整數(shù)的區(qū)別(考試超級重點(diǎn))
scanf(“%d”,&x);這個(gè)時(shí)候輸入1,特別注意表示的是整數(shù)1
scanf(“%c”,&x);這個(gè)時(shí)候輸入1,特別注意表示的是字符‘1’ASCII為整數(shù)48。
補(bǔ)充說明:
1)scanf函數(shù)的格式考察:
注意該函數(shù)的第二個(gè)部分是&a 這樣的地址,不是a;scanf(“%d%d%*d%d”,&a,&b,&c); 跳過輸入的第三個(gè)數(shù)據(jù)。
2)putchar ,getchar 函數(shù)的考查:
char a = getchar() 是沒有參數(shù)的,從鍵盤得到你輸入的一個(gè)字符給變量a。putchar(‘y’)把字符y輸出到屏幕中。
3)如何實(shí)現(xiàn)兩個(gè)變量x ,y中數(shù)值的互換(要求背下來)
不可以把 x=y ,y=x; 要用中間變量 t=x;x=y;y=t。
4)如何實(shí)現(xiàn)保留三位小數(shù),第四位四舍五入的程序,(要求背下來)
y=(int)(x*100+0.5)/100.0 這個(gè)保留兩位,對第三位四舍五入
y=(int)(x*1000+0.5)/1000.0 這個(gè)保留三位,對第四位四舍五入
y=(int)(x*10000+0.5)/10000.0 這個(gè)保留四位,對第五位四舍五入
這個(gè)有推廣的意義,注意 x = (int)x 這樣是把小數(shù)部分去掉。
第三章
特別要注意:C語言中是用非0表示邏輯真的,用0表示邏輯假的。
C語言有構(gòu)造類型,沒有邏輯類型。
關(guān)系運(yùn)算符號:注意《=的寫法,==和=的區(qū)別?。荚囍攸c(diǎn))
if只管后面一個(gè)語句,要管多個(gè),請用大括號!
1)關(guān)系表達(dá)式:
a、表達(dá)式的數(shù)值只能為1(表示為真),或0(表示假)。
如 9》8這個(gè)關(guān)系表達(dá)式是真的,所以9》8這個(gè)表達(dá)式的數(shù)值就是1。
如 7《6這個(gè)關(guān)系表達(dá)式是假的,所以7《6這個(gè)表達(dá)式的數(shù)值就是0
b、考試最容易錯(cuò)的:就是int x=1,y=0,z=2;
x《y《z是真還是假?帶入為1《0《2,從數(shù)學(xué)的角度出發(fā)肯定是錯(cuò)的,但是如果是C語言那么就是正確的!因?yàn)橐?《0為假得到0,表達(dá)式就變成了0《2那么運(yùn)算結(jié)果就是1,稱為了真的了!
c、等號和賦值的區(qū)別!一定記住“=”就是賦值,“= =”才是等號。雖然很多人可以背誦,但我依然要大家一定好好記住,否則,做錯(cuò)了,我一定會強(qiáng)烈的鄙視你!
2)邏輯表達(dá)式:
核心:表達(dá)式的數(shù)值只能為1(表示為真),或0(表示假)。
a) 共有&& || ! 三種邏輯運(yùn)算符號。
b) !》&&》|| 優(yōu)先的級別。
c) 注意短路現(xiàn)象??荚嚤容^喜歡考到。 詳細(xì)請見書上例子,一定要會做例1和例2
d) 表示 x 小于0大于10的方法。
0《x《10是不行的(一定記?。J窍扔?jì)算0《x 得到的結(jié)果為1或則0;再用0,或1與10比較得到的總是真(為1)。所以一定要用 (0《x)&&(x《10)表示比0大比10小。
3)if 語句
a、else 是與最接近的if且沒有else的語句匹配。
b、交換的程序?qū)懛ǎ簍=x;x=y;y=t;
c、if(a《b)t=a;a=b;b=t;if(a《b){t=a;a=b;b=t;}兩個(gè)的區(qū)別,考試多次考到了!
d、單獨(dú)的if語句:if(a《b)t=a;標(biāo)準(zhǔn)的if語句:if(a《b)min=a;else min=b;嵌套的if語句:if(a《b)if(b》c)printf(“ok!”);多選一的if語句if(a= =t)printf(“a”);else if(b= =t)printf(“b”);else if(c= =t)printf(“c”);else pritnf(“d”);
通過習(xí)題,要熟悉以上幾種if語句!
經(jīng)典考題:結(jié)合上面四種if語句題型做題,答錯(cuò)了,請自行了斷!預(yù)備,開始!
int a=1,b=0;if(!a)b++;else if(a= =0)if(a)b+=2;else b+=3;請問b的值是多少?
如果沒有看懂題目,你千萬不要自行了斷,這樣看得懂不會做的人才會有理由的活著。
正確的是b為3。
int a=1,b=0;
if(!a)b++; 是假的不執(zhí)行
else if(a= =0) 是假的部執(zhí)行
if(a)b+=2; 屬于else if的嵌套if語句,不執(zhí)行。
else b+=3; if-else-if語句沒有一個(gè)正確的,就執(zhí)行else的語句!
4)條件表達(dá)式:
表達(dá)式1 ?表達(dá)式2 :表達(dá)式3
a、考試口訣:真前假后。
b、注意是當(dāng)表達(dá)式1的數(shù)值是非0時(shí),才采用表達(dá)式2的數(shù)值做為整個(gè)運(yùn)算結(jié)果,當(dāng)表達(dá)式1的數(shù)值為0時(shí),就用表達(dá)式3的數(shù)值做為整個(gè)的結(jié)果。
c、int a=1,b=2,c=3,d=4,e=5;
k=a》b?c:d》e?d:e;求k的數(shù)值時(shí)多少? 答案為san
5)switch語句:
a) 執(zhí)行的流程一定要弄懂!上課時(shí)候詳細(xì)的過程講了,請自己一定弄懂!
b)注意有break 和沒有break的差別,書上的兩個(gè)例子,沒有break時(shí)候,只要有一個(gè)case匹配了,剩下的都要執(zhí)行,有break則是直接跳出了swiche語句。break在C語言中就是分手,一刀兩斷的意思。
c) switch只可以和break一起用,不可以和continue用。
d) switch(x) x:是整型常量,字符型常量,枚舉型數(shù)據(jù)。
{case 1: …。 不可以是變量。case 2: …。}e)switch是必考題型,請大家一定要完成書上的課后的switch的習(xí)題。
大學(xué)C語言復(fù)習(xí)重點(diǎn)
1)程序結(jié)構(gòu)是三種: 順序結(jié)構(gòu) 、選擇結(jié)構(gòu)(分支結(jié)構(gòu))、循環(huán)結(jié)構(gòu)。
2)讀程序都要從main()入口, 然后從最上面順序往下讀(碰到循環(huán)做循環(huán),碰到選擇做選擇),有且只有一個(gè)main函數(shù)。
3)計(jì)算機(jī)的數(shù)據(jù)在電腦中保存是以 二進(jìn)制的形式。 數(shù)據(jù)存放的位置就是 他的地址。
4)bit是位 是指為0 或者1。 byte 是指字節(jié), 一個(gè)字節(jié) = 八個(gè)位。
概念常考到的:
1、編譯預(yù)處理不是C語言的一部分,不占運(yùn)行時(shí)間,不要加分號。C語言編譯的程序稱為源程序,它以ASCII數(shù)值存放在文本文件中。
2、define PI 3.1415926; 這個(gè)寫法是錯(cuò)誤的,一定不能出現(xiàn)分號。
3、每個(gè)C語言程序中main函數(shù)是有且只有一個(gè)。
4、在函數(shù)中不可以再定義函數(shù)。
5、算法:可以沒有輸入,但是一定要有輸出。
6、break可用于循環(huán)結(jié)構(gòu)和switch語句。
7、逗號運(yùn)算符的級別最低,賦值的級別倒數(shù)第二。
C語言基礎(chǔ)知識大全
C語言程序的結(jié)構(gòu)認(rèn)識
用一個(gè)簡單的c程序例子,介紹c語言的基本構(gòu)成、格式、以及良好的書寫風(fēng)格,使小伙伴對c語言有個(gè)初步認(rèn)識。
例1:計(jì)算兩個(gè)整數(shù)之和的c程序:
#include main() { int a,b,sum; /*定義變量a,b,sum為整型變量*/ a=20; /*把整數(shù)20賦值給整型變量a*/ b=15; /*把整數(shù)15賦值給整型變量b*/ sum=a+b; /*把兩個(gè)數(shù)之和賦值給整型變量sum*/ printf(“a=%d,b=%d,sum=%d\n”,a,b,sum); /*把計(jì)算結(jié)果輸出到顯示屏上*/ }
重點(diǎn)說明:
1、任何一個(gè)c語言程序都必須包括以下格式:
main() { }
這是c語言的基本結(jié)構(gòu),任何一個(gè)程序都必須包含這個(gè)結(jié)構(gòu)。括號內(nèi)可以不寫任何內(nèi)容,那么該程序?qū)⒉粓?zhí)行任何結(jié)果。
2、main()----在c語言中稱之為“主函數(shù)”,一個(gè)c程序有且僅有一個(gè)main函數(shù),任何一個(gè)c程序總是從main函數(shù)開始執(zhí)行,main函數(shù)后面的一對圓括號不能省略。
3、被大括號{ }括起來的內(nèi)容稱為main函數(shù)的函數(shù)體,這部分內(nèi)容就是計(jì)算機(jī)要執(zhí)行的內(nèi)容。
4、在{ }里面每一句話后面都有一個(gè)分號(;),在c語言中,我們把以一個(gè)分號結(jié)尾的一句話叫做一個(gè)c語言的語句,分號是語句結(jié)束的標(biāo)志。
5、printf(“a=%d,b=%d,sum=%d\n”,a,b,sum); ----通過執(zhí)行這條c語言系統(tǒng)提供給我們直接使用的屏幕輸出函數(shù),用戶即可看到運(yùn)行結(jié)果,本程序運(yùn)行后,將在顯示器上顯示如下結(jié)果:
a=20,b=15,sum=35
6、#include
注意:(1)以#號開頭 (2)不以分號結(jié)尾 這一行沒有分號,所以不是語句,在c語言中稱之為命令行,或者叫做“預(yù)編譯處理命令”。
7、程序中以 /*開頭并且以*/結(jié)尾的部分表示程序的注釋部分,注釋可以添加在程序的任何位置,為了提高程序的可讀性而添加,但計(jì)算機(jī)在執(zhí)行主函數(shù)內(nèi)容時(shí)完全忽略注釋部分,換而言之就是計(jì)算機(jī)當(dāng)做注釋部分不存在于主函數(shù)中。
C程序的生成過程
C程序是先由源文件經(jīng)編譯生成目標(biāo)文件,然后經(jīng)過連接生成可執(zhí)行文件。
源程序的擴(kuò)展名為 .c ,目標(biāo)程序的擴(kuò)展名為 .obj , 可執(zhí)行程序的擴(kuò)展名為 .exe 。
標(biāo)識符
在編寫程序時(shí),必須為函數(shù)、變量等命名,這個(gè)名字稱為標(biāo)識符。C語言中標(biāo)識符的命名規(guī)則如下:
標(biāo)識符只能由字母、數(shù)字、下劃線組成;
標(biāo)識符的第一個(gè)字母必須是字母和下劃線;
標(biāo)識符區(qū)分大小寫字母,如If和if是兩個(gè)完全不同的標(biāo)識符。
合法標(biāo)識符如下: A6, b_3 , _mn 非法的標(biāo)識符如下: ab#12 , 8m , tr3:4 , yes no
標(biāo)識符不能與程序中具有特殊意義的關(guān)鍵字相同,不能與用戶編制的函數(shù)名、C語言庫函數(shù)相同,在程序中各種標(biāo)識符盡量不要重復(fù),以便區(qū)分。選擇變量名和其他標(biāo)識符時(shí),應(yīng)注意做到 “見名知義”。
標(biāo)識符分為如下三類:
1、關(guān)鍵字
關(guān)鍵字是具有特定含義的,專門用來說明c語言特定成分的一類標(biāo)識符,不能用作用戶的標(biāo)識符。
auto break case char union do double else enum extern goto if int long short signed static sizof struct switch unsigned void for while typedef continue float return typedef default
2、預(yù)定義標(biāo)識符
預(yù)定義標(biāo)識符在c語言中也有特定的含義,但可以用作用戶標(biāo)識符,預(yù)定義標(biāo)識符分為兩類:
(1)、庫函數(shù)名字,比如(printf,scanf,sin,isdigit等) (2)、編譯處理命令名,比如(define,include)
3、用戶標(biāo)識符
用戶根據(jù)需要自己定義的標(biāo)識符稱為用戶標(biāo)識符。無論如何自定義標(biāo)識符,都必須符合標(biāo)識符的三條命名規(guī)則。
常量
在程序運(yùn)行中,其值不能被改變的量稱為常量。常量有5種類型:整型常量、實(shí)型常量、字符常量、字符串常量和符號常量。
(一)數(shù)值轉(zhuǎn)換
數(shù)字的四種表現(xiàn)形式:
①:二進(jìn)制:所有數(shù)字由0,1構(gòu)成,逢二進(jìn)一,二進(jìn)制數(shù)中不會出現(xiàn)2.。 例: ②:八進(jìn)制:以數(shù)字0(注意不是以字母O,o)開頭,所有數(shù)字由0~7構(gòu)成,逢八進(jìn)一,八進(jìn)制數(shù)中不會出現(xiàn)8。 例:0112,0123,077等 ③:十進(jìn)制:所有數(shù)字由0~9構(gòu)成,逢十進(jìn)一,十進(jìn)制數(shù)中不會出現(xiàn)10。 例:0,12,-15等 ④:十六進(jìn)制:以0x或者0X(數(shù)字0加字母x)開頭,所有數(shù)字由0~9,A~F(或者a~f)構(gòu)成,逢十六進(jìn)一(其中A、B、C、D、E、F分別代表10、11、12、13、14、15) 例:0x4A、0X14c7等
在計(jì)算機(jī)內(nèi)部,數(shù)字均以二進(jìn)制形式表示和存放,用戶輸入的普通十進(jìn)制數(shù)字都要被計(jì)算機(jī)轉(zhuǎn)換成二進(jìn)制才能在計(jì)算機(jī)內(nèi)部存儲,同樣計(jì)算機(jī)的運(yùn)算結(jié)果也為二進(jìn)制,一般要將其轉(zhuǎn)換成十進(jìn)制數(shù)再輸出給用戶閱讀,這種轉(zhuǎn)換通常由計(jì)算機(jī)自動(dòng)實(shí)現(xiàn)。
(1)將十進(jìn)制轉(zhuǎn)換二進(jìn)制、八進(jìn)制和十六進(jìn)制
除法:將十進(jìn)制數(shù)除以2,記錄余數(shù),得到的商繼續(xù)除以2,直到商為0,然后將各次相處所得的余數(shù)從后往前逆序排列,所得余數(shù)數(shù)字序列就是該十進(jìn)制數(shù)對應(yīng)的二進(jìn)制數(shù)。八進(jìn)制和十六進(jìn)制轉(zhuǎn)換方法同上。
例:十進(jìn)制數(shù)13轉(zhuǎn)換成二進(jìn)制數(shù)的值為1101,轉(zhuǎn)換八進(jìn)制為015,轉(zhuǎn)換成十六進(jìn)制為D.
(2)將二進(jìn)制、八進(jìn)制和十六進(jìn)制轉(zhuǎn)換成十進(jìn)制
乘積求和:將二進(jìn)制的每一位從低位到高位(右邊為低位,左邊為高位)分別乘以20,21,22。。。。,然后將這些積求和。
例如:=(13)10 (317)8= (23E)16=
(3)二進(jìn)制與八進(jìn)制、十六進(jìn)制數(shù)之間的相互轉(zhuǎn)換
①:二進(jìn)制轉(zhuǎn)八進(jìn)制:從右往左每三位一組轉(zhuǎn)換成十進(jìn)制數(shù),將所得數(shù)據(jù)組合就是對應(yīng)的八進(jìn)制數(shù)(注意:高位不足三位補(bǔ)零)。 例:(010 110 111)2=(267)8 ②:二進(jìn)制轉(zhuǎn)十六進(jìn)制:從右往左每四位一組轉(zhuǎn)換成十進(jìn)制數(shù),將所得數(shù)據(jù)組合就是對應(yīng)的十六進(jìn)制數(shù)(注意:高位不足四位補(bǔ)零)。 例:(0101 1011)2=(5B)16 ③:八進(jìn)制轉(zhuǎn)化二進(jìn)制:每一位數(shù)字轉(zhuǎn)換為三位二進(jìn)制數(shù)字 例:(13)8=(001 011)2= (注意:去掉前面的兩個(gè)00,因?yàn)?在高位沒有意義) ④:十六進(jìn)制轉(zhuǎn)化二進(jìn)制:每一位數(shù)字轉(zhuǎn)換為四位二進(jìn)制數(shù)字 例:(E3)16=(1110 0011)2
二)整型常量
整型常量有3種形式:十進(jìn)制整型常量、八進(jìn)制整型常量和十六進(jìn)制整型常量。
(注意:c語言中沒有直接表示二進(jìn)制的整型常量,在c語言源程序中不會出現(xiàn)二進(jìn)制。)
書寫方式如下:
十進(jìn)制整型常量:123 , 0 ,-24 , 85L(長整型常量) 等 八進(jìn)制整型常量:051 ,-026 ,0773 等 十六進(jìn)制整型常量:0x55 , 0x1101 , 0x , 0x5AC0 , -0xFF。 其中L為長整型。
(三)實(shí)型常量
實(shí)型常量有兩種表示形式:小數(shù)形式和指數(shù)形式。
小數(shù)形式:5.4 0.074 -23.0 指數(shù)形式:5.4e0 4.3e-3 -3.3e4
(1)小數(shù)部分為0的實(shí)型常量,可以寫為453.0 或453。 (2)用小數(shù)表示時(shí),小數(shù)點(diǎn)的兩邊必須有數(shù),不能寫成“ .453“和“453.“,而應(yīng)該寫成“0.453“和“453.0“。 (3)用指數(shù)寫法時(shí),e前必須有數(shù)字,e后面的指數(shù)必須為整數(shù)(注意:整數(shù)階碼可以是正數(shù),負(fù)數(shù),也可以是八進(jìn)制數(shù)、十六進(jìn)制數(shù),但必須為整數(shù))。
(四)字符常量
字符常量的標(biāo)志是一對單引號‘ ’,c語言中的字符常量有兩類:
(1)由一對單引號括起來的一個(gè)字符,如‘a(chǎn) ’, ‘r’ ,‘#’。注意: ′a′ 和 ′A′ 是兩個(gè)不同的字符常量。
(2)由一對單引號括起來,以反斜杠\開頭,后跟若干數(shù)字或者字母,比如‘\n’,其中“\“是轉(zhuǎn)義的意思,后面跟不同的字符表示不同的意思,這類字符常量叫轉(zhuǎn)義字符。具體如圖所示 。
轉(zhuǎn)義字符 轉(zhuǎn)義字符的意義 ASCII碼
\n 回車換行 10 \t 橫向跳到下一制表位置 9 \b 退格 8 \r 回車 13 \f 走紙換頁 12 \\ 反斜線符“\” 92 \‘ 單引號符 39 \” 雙引號符 34 \a 鳴鈴 7 \ddd 1~3位八進(jìn)制數(shù)所代表的字符 \xhh 1~2位十六進(jìn)制數(shù)所代表的字符
五)字符串常量
C語言中,以雙引號括起來的,由若干個(gè)字符組成的序列即為字符串常量。
例:“ni hao” “happy”等等。
(六)符號常量
符號常量是由宏定義“#define“定義的常量,在C程序中可用標(biāo)識符代表一個(gè)常量。
例:計(jì)算圓的面積的c程序。
#include #define PI 3. main() { float r,s; r=12.5; S=PI *r*r; printf(“s= %f ”,s); }
說明:
#define 是宏定義,此程序中所有出現(xiàn)PI的地方都代表3.,同時(shí)PI稱為符號常量。習(xí)慣上我們用大寫字母來表示符號常量,小寫字母表示變量,這樣比較容易區(qū)別。
變量
變量就是其值可以改變的量。變量要有變量名,在內(nèi)存中占據(jù)一定的存儲單元,存儲單元里存放的是該變量的值。不同類型的變量其存儲單元的大小不同,變量在使用前必須定義。
(一)整型變量
整型變量分為4種:基本型(int)、短整型(short int 或short)、長整型(long int 或 long)和無符號型(unsigned int ,unsigned short,unsigned long)。
不同的編譯系統(tǒng)對上述四種整型數(shù)據(jù)所占用的位數(shù)和數(shù)值范圍有不同的規(guī)定。
類型說明符
單詞signed來說明“有符號”(即有正負(fù)數(shù)之分),不寫signed也隱含說明為有符號,unsigned用來說明“無符號”(只表示正數(shù))。
(二)實(shí)型變量
C語言中,實(shí)型變量分為單精度類型( float )和雙精度類型( double )兩種。如:
float a , b ; double m ;
在vc中,float 型數(shù)據(jù)在內(nèi)存中占4個(gè)字節(jié)(32位),double型數(shù)據(jù)占8個(gè)字節(jié)。單精度實(shí)數(shù)提供7位有效數(shù)字,雙精度實(shí)數(shù)提供15~16位有效數(shù)字。實(shí)型常量不分float型和double型,一個(gè)實(shí)型常量可以賦給一個(gè)float 型或double型變量,但變量根據(jù)其類型截取實(shí)型常量中相應(yīng)的有效數(shù)字。
注意:實(shí)型變量只能存放實(shí)型值,不能用整型變量存放實(shí)型值,也不能用實(shí)型變量存放整型值。
(三)字符變量
字符變量用來存放字符常量,定義形式:
char 變量名;
其中關(guān)鍵字char定義字符型數(shù)據(jù)類型,占用一個(gè)字節(jié)的存儲單元。
例:char cr1,cr2; cr1= ‘A’ , cr2=‘B’ ;
將一個(gè)字符賦給一個(gè)字符變量時(shí),并不是將該字符本身存儲到內(nèi)存中,而是將該字符對應(yīng)的ASCII碼存儲到內(nèi)存單元中。例如,字符 ′A′ 的ASCII碼為65,在內(nèi)存中的存放形式如下:0
由于在內(nèi)存中字符以ASCII碼存放,它的存儲形式和整數(shù)的存儲形式類似,所以C語言中字符型數(shù)據(jù)與整型數(shù)據(jù)之間可以通用,一個(gè)字符能用字符的形式輸出,也能用整數(shù)的形式輸出,字符數(shù)據(jù)也能進(jìn)行算術(shù)運(yùn)算,此時(shí)相當(dāng)于對它們的ASCII碼進(jìn)行運(yùn)算。
類型的自動(dòng)轉(zhuǎn)換和強(qiáng)制轉(zhuǎn)換
當(dāng)同一表達(dá)式中各數(shù)據(jù)的類型不同時(shí),編譯程序會自動(dòng)把它們轉(zhuǎn)變成同一類型后再進(jìn)行計(jì)算。轉(zhuǎn)換優(yōu)先級為:
char 《 int 《 float 《 double
即左邊級別“低“的類型向右邊轉(zhuǎn)換。具體地說,若在表達(dá)式中優(yōu)先級最高的數(shù)據(jù)是double型,則此表達(dá)式中的其他數(shù)據(jù)均被轉(zhuǎn)換成double型,且計(jì)算結(jié)果也是double型;若在表達(dá)式中優(yōu)先級最高的數(shù)據(jù)是float型,則此表達(dá)式中的其他數(shù)據(jù)均被轉(zhuǎn)換成float型,且計(jì)算結(jié)果也是float型。
在做賦值運(yùn)算時(shí),若賦值號左右兩邊的類型不同,則賦值號右邊的類型向左邊的類型轉(zhuǎn)換;當(dāng)右邊的類型高于左邊的類型時(shí),則在轉(zhuǎn)換時(shí)對右邊的數(shù)據(jù)進(jìn)行截取。
除自動(dòng)轉(zhuǎn)換外,還有強(qiáng)制轉(zhuǎn)換,表示形式是:
( 類型 )(表達(dá)式); 例:(int)(a+b)
討論:當(dāng)a值賦值為3.4,b值賦值為2.7,(int)(a+b)和(int)a+b的值分別為多少?
C運(yùn)算符認(rèn)識
C語言的運(yùn)算符范圍很廣,可分為以下幾類:
、算術(shù)運(yùn)算符:用于各類數(shù)值運(yùn)算。包括加(+)、減(-)、乘(*)、除(/)、求余(%)、自增(++)、自減(--)共七種。
、賦值運(yùn)算符:用于賦值運(yùn)算,分為簡單賦值(=)、復(fù)合算術(shù)賦值(+=,-=,*=,/=,%=)和復(fù)合位運(yùn)算賦值(&=,|=,^=,》》=,《《=)三類共十一種。 《=“” span=“”》
、逗號運(yùn)算符:用于把若干表達(dá)式組合成一個(gè)表達(dá)式(,)。
、關(guān)系運(yùn)算符:用于比較運(yùn)算。包括大于(》)、小于(《)、等于(==)、 大于等于(=“”》=)、小于等于(《=)和不等于(!=)六種。 《=“” span=“”》
、邏輯運(yùn)算符:用于邏輯運(yùn)算。包括與(&&)、或(||)、非(?。┤N。
、條件運(yùn)算符:這是一個(gè)三目運(yùn)算符,用于條件求值(?:)。
、位操作運(yùn)算符:參與運(yùn)算的量,按二進(jìn)制位進(jìn)行運(yùn)算。包括位與(&)、位或(|)、位非(~)、位異或(^)、左移(《《)、右移(》》)六種。
8、指針運(yùn)算符:用于取內(nèi)容(*)和取地址(&)二種運(yùn)算。
9、求字節(jié)數(shù)運(yùn)算符:用于計(jì)算數(shù)據(jù)類型所占的字節(jié)數(shù)(sizeof)。
10、特殊運(yùn)算符:有括號(),下標(biāo)[],成員(→,。)等幾種。
另外,按參與運(yùn)算的對象個(gè)數(shù),C語言運(yùn)算符可分為:單目運(yùn)算符 (如 ?。㈦p目運(yùn)算符 (如+,- )和三目運(yùn)算符 (如 ? : )。
算術(shù)運(yùn)算符和算術(shù)表達(dá)式
一、 基本的算術(shù)運(yùn)算符
(1)+(加法運(yùn)算符或正值運(yùn)算符,如2+5)。
(2)-(減法運(yùn)算符或負(fù)值運(yùn)算符,如4-2)。
(3)*(乘法運(yùn)算符,如3*8)。
(4)/(除法運(yùn)算符,如11/5)。
/的運(yùn)算分為兩種情況:
a、“除”的左右兩邊都為整數(shù)時(shí),所得結(jié)果必然是整數(shù)(注意:僅取整數(shù)部分,不是四舍五入)
比如:5/2的值為2,不是2.5,1/2的值為0。
b、“除”的左右兩邊至少有一個(gè)是實(shí)型數(shù)據(jù)(即小數(shù))時(shí),所得結(jié)果為實(shí)型數(shù)據(jù)。
比如:5/2.0的值為2.5,7.0/2.0的值為3.5.
(5)%(模運(yùn)算符或稱求余運(yùn)算符,%兩側(cè)均應(yīng)為整型數(shù)據(jù),如9%7的值為2)。
需要說明的是:當(dāng)運(yùn)算對象為負(fù)數(shù)時(shí),所得結(jié)果隨編譯器不同而不同,在vc中,結(jié)果的符號與被除數(shù)相同,比如:13%-2值為1,而-15%2值為-1。
二、 算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級與結(jié)合性
算術(shù)表達(dá)式是用算術(shù)運(yùn)算符和括號將運(yùn)算量(也稱操作數(shù))連接起來的、符合C語言語法規(guī)則的表達(dá)式。運(yùn)算對象包括函數(shù)、常量和變量等。
在計(jì)算機(jī)語言中,算術(shù)表達(dá)式的求值規(guī)律與數(shù)學(xué)中的四則運(yùn)算的規(guī)律類似,其運(yùn)算規(guī)則和要求如下。
(1)在算術(shù)表達(dá)式中,可使用多層圓括號,但括號必須配對。運(yùn)算時(shí)從內(nèi)層圓括號開始,由內(nèi)向外依次計(jì)算各表達(dá)式的值。
(2)在算術(shù)表達(dá)式中,對于不同優(yōu)先級的運(yùn)算符,可按運(yùn)算符的優(yōu)先級由高到低進(jìn)行運(yùn)算,若表達(dá)式中運(yùn)算符的優(yōu)先級相同,則按運(yùn)算符的結(jié)合方向進(jìn)行運(yùn)算。
(3)如果一個(gè)運(yùn)算符兩側(cè)的操作數(shù)類型不同,則先利用自動(dòng)轉(zhuǎn)換或強(qiáng)制類型轉(zhuǎn)換,使兩者具有相同類型,然后進(jìn)行運(yùn)算。
三、 自增自減運(yùn)算符
作用:使變量的值增1或減1。
如:++i,--i (在使用i之前,先使i的值加1、減1)。 i++,i-- (在使用i之后,使i的值加1、減1)。
(1)只有變量才能用自增運(yùn)算符 (++)和自減運(yùn)算符(--),而常量或表達(dá)式不能用,如10++或(x+y)++都是不合法的。
(2)++和--的結(jié)合方向是“自右向左“,如 -i++ ,i的左邊是負(fù)號運(yùn)算符,右邊是自增運(yùn)算符,負(fù)號運(yùn)算和自增運(yùn)算都是 “自右向左“結(jié)合的,相當(dāng)于 -(i++)。
在循環(huán)語句中常用到自增(減)運(yùn)算符,在指針中也常用到該運(yùn)算符,考生要弄清楚“i++”和“++i”及“i--”和“--i”的區(qū)別,特別弄清楚表達(dá)式的值和變量的值。
賦值運(yùn)算符與賦值表達(dá)式
一、賦值運(yùn)算符與賦值表達(dá)式
賦值符號 “=“就是賦值運(yùn)算符,作用是將一個(gè)數(shù)據(jù)賦給一個(gè)變量或?qū)⒁粋€(gè)變量的值賦給另一個(gè)變量,由賦值運(yùn)算符組成的表達(dá)式稱為賦值表達(dá)式。一般形式為:
變量名 = 表達(dá)式
在程序中可以多次給一個(gè)變量賦值,每賦一次值,與它相應(yīng)的存儲單元中的數(shù)據(jù)就被更新一次,內(nèi)存中當(dāng)前的數(shù)據(jù)就是最后一次所賦值的那個(gè)數(shù)據(jù)。
例:a=12; 此表達(dá)式讀作“將10的值賦值給變量a”。
a、如果賦值號兩邊的運(yùn)算對象類型不一致,系統(tǒng)會自動(dòng)進(jìn)行類型轉(zhuǎn)換,轉(zhuǎn)換的規(guī)則:將賦值號右邊表達(dá)式的值的類型轉(zhuǎn)換成賦值號左邊變量的類型,
例:int y=3.5; 在變量y中最終存儲的是整數(shù)3。
b、 可以將復(fù)制表達(dá)式的值再賦值給變量,形成連續(xù)賦值。
例如:x=y=25 是一個(gè)連續(xù)賦值表達(dá)式,x=y=25 等價(jià)于x=(y=25),所以表達(dá)式x=y=25 最終的值為25 。
二、復(fù)合的賦值運(yùn)算符
在賦值運(yùn)算符之前加上其他運(yùn)算符可以構(gòu)成復(fù)合賦值運(yùn)算符。其中與算術(shù)運(yùn)算有關(guān)的復(fù)合運(yùn)算符是:+=,-=,*=,/=,%= 。
兩個(gè)符號之間不可以有空格,復(fù)合賦值運(yùn)算符的優(yōu)先級與賦值運(yùn)算符的相同。表達(dá)式n+=1等價(jià)于n=n+1,作用是取變量n中的值增1再賦給變量n,其他復(fù)合的賦值運(yùn)算符的運(yùn)算規(guī)則依次類推。
如求表達(dá)a+=a-=a*a 的值,其中a的初值為12 。
步驟:
(1)先進(jìn)行“a-=a*a“運(yùn)算,相當(dāng)于a=a-a*a=12-144=-132 。 (2)再進(jìn)行“a+=-132“運(yùn)算,相當(dāng)于 a=a+(-132)==-264 。
逗號運(yùn)算符和逗號表達(dá)式
在c語言中,逗號除了作為分隔符,還可以用作一種運(yùn)算符----逗號運(yùn)算符,用逗號運(yùn)算符將幾個(gè)表達(dá)式連接起來,例如a=b+c,a=b*c等稱為逗號表達(dá)式。
一般形式為:
表達(dá)式1 ,表達(dá)式2 ,表達(dá)式3 , …,表達(dá)式n
例:x=2,y=3,z=4
逗號表達(dá)式具有從左至右的結(jié)合性,即先求解表達(dá)式1,然后依次求解表達(dá)式2,直到表達(dá)式n的值。表達(dá)式n的值就是整個(gè)逗號表達(dá)式的值。上述的逗號表達(dá)式的值就是表達(dá)式z=4的值4.需要注意的是,逗號運(yùn)算符是所有運(yùn)算符中級別最低的。
例:有如下程序段:
main() { int a=2,b=4,c=6,x,y; y=(x=a+b),(b+c); printf(“y=%d,x=%d”,y,x); }
程序顯示結(jié)果為:y=6,x=6
討論:將y=(x=a+b),(b+c);改為y=((x=a+b),b+c) 的程序結(jié)果?
關(guān)系運(yùn)算符和關(guān)系表達(dá)式
一、 C語言中的邏輯值
C語言中的邏輯值只有兩個(gè):真(true)和假(flase)。用非零代表真,用零代表假。因此,對于任意一個(gè)表達(dá)式,如果它的值為零,就代表一個(gè)假值,如果它的值為非零,就代表一個(gè)真值。只要值不是零,不管是正數(shù),負(fù)數(shù),整數(shù),實(shí)數(shù),都代表一個(gè)真值。例如-5的邏輯值為真。
二、 邏輯表達(dá)式
“&&”和“||”的運(yùn)算對象有兩個(gè),故它們都是雙目運(yùn)算符,而!的運(yùn)算對象只有一個(gè),因此它是單目運(yùn)算符。邏輯運(yùn)算舉例如下:
(1)a&&b: 當(dāng)&&兩邊都為“真”時(shí),表達(dá)式a&&b的值才是真。
值得注意的是:在數(shù)學(xué)中,關(guān)系式0
(2)a||b: 當(dāng)||兩邊有一個(gè)為“真”時(shí),表達(dá)式a||b的值就是真。
(3)!a: 表示取反,如果a為真,則!A為假,反之亦然。例如!-5的值就為0.
在C語言中,由&&或||組成的邏輯表達(dá)式,在某些特定情況下會產(chǎn)生“短路“現(xiàn)象。
(1)x && y && z ,只有當(dāng)x為真(非0)時(shí),才需要判別y的值;只有x和y都為真時(shí),才需要去判別z的值;只要x為假就不必判別y和z,整個(gè)表達(dá)式的值為0??谠E:“一假必假”。
例:(!5==1)&&(++i==0) (!5==1)表達(dá)式的值為0,所以計(jì)算機(jī)運(yùn)行中就跳過(++i==0)此表達(dá)式,(!5==1)&&(++i==0)表達(dá)式的值為0.
(2)x||y||z ,只要x的值為真(非零),就不必判別y和z的值 ,整個(gè)表達(dá)式的值為1,只有x的值為假,才需要判別y的值,只有x和y的值同時(shí)為假才需要判別z的值,口訣:“一真必真”。
位運(yùn)算
一、 位運(yùn)算符
在計(jì)算機(jī)中,數(shù)據(jù)都是以二進(jìn)制數(shù)形式存放的,位運(yùn)算就是指對存儲單元中二進(jìn)制位的運(yùn)算。C語言提供6種位運(yùn)算符。
二、位運(yùn)算
位運(yùn)算符 & |~《《 》》 ∧ 按優(yōu)先級從高到低排列的順序是:
位運(yùn)算符中求反運(yùn)算“~“優(yōu)先級最高,而左移和右移相同,居于第二,接下來的順序是按位與 “&“、按位異或 “∧“和按位或 “|“。順序?yàn)閪 《《 》》 & ∧ | 。
例1:左移運(yùn)算符“《《”是雙目運(yùn)算符。其功能把“《《 ”左邊的運(yùn)算數(shù)的各二進(jìn)位全部左移若干位,由“《《”右邊的數(shù)指定移動(dòng)的位數(shù),高位丟棄,低位補(bǔ)0。=“” 《=“” span=“”》
例如: a《《4 指把a(bǔ)的各二進(jìn)位向左移動(dòng)4位。如a=00000011(十進(jìn)制3),左移4位后為00(十進(jìn)制48)。
例2:右移運(yùn)算符“》》”是雙目運(yùn)算符。其功能是把“》》 ”左邊的運(yùn)算數(shù)的各二進(jìn)位全部右移若干位,“》》”右邊的數(shù)指定移動(dòng)的位數(shù)。
例如: 設(shè) a=15, a》》2 表示把右移為十進(jìn)制3)。
應(yīng)該說明的是,對于有符號數(shù),在右移時(shí),符號位將隨同移動(dòng)。當(dāng)為正數(shù)時(shí),最高位補(bǔ)0,而為負(fù)數(shù)時(shí),符號位為1,最高位是補(bǔ)0或是補(bǔ)1 取決于編譯系統(tǒng)的規(guī)定。
例3:設(shè)二進(jìn)制數(shù)a是00 ,若通過異或運(yùn)算a∧b 使a的高4位取反,低4位不變,則二進(jìn)制數(shù)b是。
解析:異或運(yùn)算常用來使特定位翻轉(zhuǎn),只要使需翻轉(zhuǎn)的位與1進(jìn)行異或操作就可以了,因?yàn)樵瓟?shù)中值為1的位與1進(jìn)行異或運(yùn)算得0 ,原數(shù)中值為0的位與1進(jìn)行異或運(yùn)算結(jié)果得1。而與0進(jìn)行異或的位將保持原值。異或運(yùn)算還可用來交換兩個(gè)值,不用臨時(shí)變量。
如 int a=3 , b=4;,想將a與b的值互換,可用如下語句實(shí)現(xiàn): a=a∧b;
b=b∧a;
a=a∧b;
所以本題的答案為: 。
C語言作為一門非常適合編程入門的語言,打好基礎(chǔ)的重要性不言而喻。
-
C語言
+關(guān)注
關(guān)注
180文章
7595瀏覽量
135923
發(fā)布評論請先 登錄
相關(guān)推薦
評論