南京網(wǎng)站建設(shè)王道下拉強(qiáng)獨立站seo
目錄
I. 基本數(shù)據(jù)類型
II. 復(fù)雜的輸出和輸入語句編寫
III. 運(yùn)算符與表達(dá)式
III.I 算術(shù)運(yùn)算符
III.II 關(guān)系運(yùn)算符
III.III 邏輯運(yùn)算符
III.IV 位運(yùn)算符
III.V?三目運(yùn)算符
III.VI?逗號運(yùn)算符
高質(zhì)量博主,點個關(guān)注不迷路🌸🌸🌸!
I. 基本數(shù)據(jù)類型
書接上回,我們在上一篇筆記中提到了變量的概念,在C語言中,變量有不同的種類,對應(yīng)著不同的數(shù)據(jù)類型,我們先看最常用的一種基本數(shù)據(jù)類型:整型數(shù)據(jù),在C語言中,用關(guān)鍵字 int 來聲明或定義。
#include<stdio.h>int main(){int a = 3;return 0;
}
上面這段代碼,定義了一個整型的變量a,它的值為3。
那么除了整型外,C語言中還有一些其他的基本數(shù)據(jù)類型,它們是:
標(biāo)識符 | 類型 | 輸入 / 輸出 | 所占字節(jié) |
---|---|---|---|
char | 字符數(shù)據(jù)類型 | %c | 1 |
short | 短整型 | %hd | 2 |
int | 整型 | %d | 4 |
long | 長整型 | %ld | 4 |
long long | 更長的整形 | %lld | 8 |
float | 單精度浮點數(shù) | %f | 4 |
double | 雙精度浮點數(shù) | %f(輸入時使用%lf) | 8 |
注意,上表的第三列給出了在輸入和輸出不同類型的變量時,在scanf()和printf()函數(shù)中使用的標(biāo)識符,我們回憶上節(jié)課的內(nèi)容,可以把這部分和之前的內(nèi)容聯(lián)系起來。
#include<stdio.h>int main(){short a0 = 3; // 短整型 int a = 3; // 整型 long b = 4; // 長整型 double c = 1.1; // 雙精度浮點數(shù)型 float d = 1.2; // 單精度浮點數(shù)型 char e = 'c'; // 字符型 printf("%hd\n",a0);printf("%d\n",a);printf("%ld\n",b);printf("%lf\n",c);printf("%f\n",d);printf("%c\n",e); return 0;
}
最后補(bǔ)充一句:這部分講的是C語言中的基本數(shù)據(jù)類型,所謂基本,是相對于一些非基本類型而言的,而非基本的數(shù)據(jù)類型,會在 后面 的筆記中進(jìn)行講解,這里只需要簡單了解一下:
C語言中有非基本類型:指針類型、枚舉類型、結(jié)構(gòu)體類型、數(shù)組類型、聯(lián)合類型
II. 復(fù)雜的輸出和輸入語句編寫
這部分本來應(yīng)該放在上一篇筆記,但上一篇筆記的內(nèi)容實在太多,因此放在本篇中,做一個簡單的插曲,這里講一下復(fù)雜的輸出語句要怎么編寫。
在上一節(jié)中,我們講到,C語言使用函數(shù)printf()來實現(xiàn)輸出的操作:
printf(" ");
而且我們也講了輸出一句話,只需要把內(nèi)容放在雙引號之間即可,輸出變量,只需要在前面的雙引號之間加入% + 變量標(biāo)識符,而后寫一個逗號,后面跟上變量名即可。
那么如何實現(xiàn)輸出的過程中,既有我們想要輸出的語句,又有變量呢?假如我們有兩個變量a,b,a的值是1,b的值是3,我們想要輸出:,
a的值是1,b的值是3
這句話要怎么輸出呢?我們看一下代碼:
#include<stdio.h>int main(){int a = 1;int b = 3;printf("a的值為%d, b的值為%d",a,b);return 0;
}
我們?nèi)绾卫斫膺@種輸出呢?下面的內(nèi)容請一定認(rèn)真閱讀,因為很多新手一直到學(xué)完C語言,都沒明白復(fù)雜輸出的邏輯,下面我們講解一下其中的邏輯:
“% + 變量標(biāo)識符”,這個整體,代替了我們的變量,因此我們?nèi)绻认胍敵鎏囟ǖ恼Z句,又想在內(nèi)部穿插變量,只需要把這個整體放在想要代替的位置,而后在引號后加逗號,放上變量即可。而如果出現(xiàn)了多個% + 變量標(biāo)識符的整體,那么后面依次要放上多個變量,并且用逗號連接,且次序要與前面引號中的整體的次序一致。
那么同理,如果想要在輸入的過程中,一次性輸入多個變量,我們舉一反三,不難得出:
#include<stdio.h>int main(){int a = 1;int b = 3;scanf("%d %d",&a,&b);return 0;
}
而后依次輸入a和b即可。
III. 運(yùn)算符與表達(dá)式
最后,我們聊一聊C語言中的運(yùn)算符和表達(dá)式,這部分的內(nèi)容對于初學(xué)者,不是很好懂,但是我們盡量以簡單的方式呈現(xiàn)出來。
所謂運(yùn)算符,就是指做某種特定運(yùn)算的 符號,例如在小學(xué)數(shù)學(xué)中,我們學(xué)過的加法運(yùn)算,那么它的運(yùn)算符就是 +。(??次业奈恼碌呐笥芽赡苤?#xff0c;對一個陌生的名詞最好的理解方式,就是將它的定義做語法分析,像這段定義,語法分析后,我們不難得出,運(yùn)算符,就是某個符號,只不過這個符號代表了某種運(yùn)算)
表達(dá)式,是由變量/常量與運(yùn)算符連接得到的式子,往往用來實現(xiàn)某個具體的需求。
例如我現(xiàn)在要計算兩個整型變量a和b的和,并把這個和賦值給變量c,那么代碼應(yīng)該是:
#include<stdio.h>int main(){int a = 1;int b = 3;int c = a + b;return 0;
}
除了加法運(yùn)算符,在C語言中,還有一些其他的運(yùn)算符:
III.I 算術(shù)運(yùn)算符
在C語言中,有以下五種基本的算術(shù)運(yùn)算符:
加法: a + b = c;?
減法: a - b = c;
乘法: a * b = c;
除法: a / b = c;
取余: a % b = c;
這五種基本的算術(shù)運(yùn)算符中,我們重點看一下最后兩種運(yùn)算符,即除法和取余操作:
請看下面這段代碼:
#include<stdio.h>int main(){int a = 3;int b = 2;int c = a / b;printf("%d",c);return 0;
}
新手可以先運(yùn)行一下上面的代碼,看看結(jié)果與自己預(yù)料的是否一致。
在數(shù)學(xué)中,3 / 2 = 1.5,那么這里為什么是1呢,我們需要深入了解一下C語言的整數(shù)除法機(jī)制:
當(dāng)兩個整型變量做除法時,除法的結(jié)果是一個整數(shù),該整數(shù)是原本的結(jié)果向下取整得到的整數(shù),所謂向下取整是指:x ∈ [n,n+1], n是正整數(shù),那么向下取整的x = n,例如x = 1.9,向下取整就是1。
那如果我們想要得到真實的運(yùn)算結(jié)果,或者說精確度更高的結(jié)果,應(yīng)該怎么做呢?其實也很簡單,我們只需要把參與運(yùn)算的數(shù)字的類型改成浮點數(shù)類型即可,什么是浮點數(shù)類型,可以看本文上面的部分。代碼實現(xiàn):
#include<stdio.h>int main(){float a = 3;float b = 2;float c = a / b;printf("%f",c);return 0;
}
運(yùn)行結(jié)果:
之后是取余運(yùn)算%,這個運(yùn)算符在數(shù)學(xué)中并沒有,是程序語言中特有的一類運(yùn)算符,它指的是兩個數(shù)相除的余數(shù),例如:
#include<stdio.h>int main(){int a = 5;int b = 3;int c = a % b;printf("%d",c);return 0;
}
它的結(jié)果是5除以3的余數(shù),那么就是2:
上面五種算數(shù)運(yùn)算符可以組合成更為復(fù)雜的計算符,以下面三種常用的為例:
1???++運(yùn)算符
這個運(yùn)算符表示變量加一的操作,例如a ++ 就相當(dāng)于a = a + 1。但是,a ++ 與 ++a 并不一樣,怎么理解呢,我們先看下面一段代碼:
#include<stdio.h>int main(){int a = 3;int b = 3;int c = a++;printf("a++得到的結(jié)果:c = %d,此時a = %d\n",c,a);c = ++b;printf("++a得到的結(jié)果:c = %d,此時a = %d",c,a);return 0;
}
假設(shè)a ++ 與 ++ a是一樣的,那么運(yùn)行的結(jié)果,a肯定是4,那么兩個c的值也應(yīng)該是一樣的,但我們運(yùn)行上面的代碼,可以看到:
有點神奇對不對,居然得到了不一樣的c,其實這是因為:
a ++這句代碼在執(zhí)行時,會首先用a原先的值參與運(yùn)算,在運(yùn)算結(jié)束之后,再把a(bǔ)的值自增1
而++ a在執(zhí)行時,會首先把a(bǔ)的值自增1,再參與運(yùn)算
因此在a ++時,會把a(bǔ)原來的值賦值給c,c就是3,而++a則把a(bǔ)先自增,而后c就是自增后的a = 4。
2?? --運(yùn)算符
--運(yùn)算符完全等效++,即a -- 等價于a = a - 1,且 --a和a-- 的執(zhí)行次序也是不同的。(同++)
3?? +=運(yùn)算符
+=運(yùn)算符是這么理解的:
a + = 3,等價于:a = a + 3,即相當(dāng)于是升級版的++,只不過這次可以指定自增的量,可以自增任意大小的數(shù)字。
III.II 關(guān)系運(yùn)算符
關(guān)系運(yùn)算符,即:
>? ?表示大于
>=? 表示大于等于
<? ?表示小于
<=? 表示小于等于
!= ? 用于測試“不相等”
== ? 用于測試“相等”
=? ? ?用于賦值
注意,上面所有的關(guān)系運(yùn)算符,得到的結(jié)果只有0或1,什么意思呢,我們舉個例子:
#include<stdio.h>int main(){int a = 3;int b = 3;int c = a == b;printf("c = %d\n",c);int d = a > b;printf("d = %d",d);return 0;
}
運(yùn)行之后得到:
為什么是這樣呢,我們分析代碼:
c的值是a == b的結(jié)果,a == b表示a和b是否相等,那么很顯然,在這個例子中,a和b的值相同,所以a確實和b相等,于是相當(dāng)于這句話是對的,所以當(dāng)關(guān)系運(yùn)算符參與運(yùn)算時,如果關(guān)系比較的結(jié)果是對的,那么這個運(yùn)算得到的結(jié)果就是1,反之是0。因此d的結(jié)果是a > b ,但是a不大于b,所以d = 0。
上面這段話一定要看懂,后面學(xué)if等等,需要用到這里的知識。當(dāng)然學(xué)過其他編程語言的,會發(fā)現(xiàn)別的語言可能關(guān)系運(yùn)算得到的結(jié)果是一個布爾值,但其實C語言是沒有布爾值的,只有0和非0,這部分放在后面細(xì)聊。
III.III 邏輯運(yùn)算符
&& ? ?邏輯與? ? ? ?理解為: a?&& b 就是a 和 b同時成立才會得到1,否則為0
|| ? ? ??邏輯或? ? ?理解為:? ?a ||?b 就是a 和 b只要有一個成立就得到1,否則為0
!? ? ?邏輯非? ? ?
III.IV 位運(yùn)算符
位運(yùn)算符先不著急,我們在后續(xù)的筆記中對此會詳細(xì)的介紹(先挖坑!!!)
III.V?三目運(yùn)算符
exp1 ? exp2 : exp3
三目運(yùn)算符做一個簡單的了解即可:
假設(shè)我們有這樣一句代碼:
#include<stdio.h>int main(){int a = 1;int b = 2;int c = (a > b)? a : b;return 0;
}
它的意思就是,c的值是:
a > b是否為真,如果為真,那么就取?后面的第一個式子的結(jié)果a給c,否則取?后面第二個
值,即b給c。
III.VI?逗號運(yùn)算符
最后拓展一下逗號運(yùn)算符,沒錯,逗號也是一個運(yùn)算符:
#include<stdio.h>int main(){int a = 1;int b = 2;int c = (a,b);printf("%d",c);return 0;
}
運(yùn)行結(jié)果:
為什么呢?很簡單:
逗號運(yùn)算符的結(jié)果,取得是最后一個逗號后的值,(a ,b),于是最后一個逗號后的值就是b。同理,如果是(a,b,c),那么最后取得值就是c的值。
到這里,我們的C語言學(xué)習(xí)或編程學(xué)習(xí),已經(jīng)基本上站在大門之前了,但離入門,還有一段距離,請繼續(xù)觀看下一篇博客。