這兩天工作實在是太忙了,抽個午休時間來繼續學習C語言,同步更新一下筆記。其實作者我本人是網絡工程師,最擅長還是網絡通信那套知識,但是目前來說并不打算做這塊内容:
1,是因為網絡技術敏感性高;
2,是因為網絡真的很枯燥,作者現在去看華為HCIE時候都會困得眼睛睜不開。
是以在本職工作空閑之餘來寫一下C語言學習筆記系列也算是換換腦子,本章按照參考書來說是學習表達式,但可能過于簡單,是以會引入簡單的循環内容(就當提前接觸一下)。
學習參考書籍《C Primer Plus》
1,運算符
學習參考書中是從“+”“-”“*”“/”開始寫的,這類運算基本上是國小就接觸到的算數方法,是以就着重介紹一些有意思的程式。
1.1,乘法運算符之平方數
簡單介紹一下C語言中乘法使用“*”,基本上所有語言都一樣的,下面語句就是将tim乘以114,并将結果指派給cy:特别強調是指派不是等于。
cy = 114 * tim
有意思的是C語言中沒有平方函數,但是要求一個平方數可以使用一下辦法,求1~10的平方。使用一下面的簡單小程式就能做到了啦。
#include <stdio.h>
int main(void)
{
int num = 1;
while (num <= 10) //引入循環的概念
{
printf("%4d %6d\n", num, num * num); //使用兩個變量相乘
num = num + 1;
}
return 0;
}
詳細講解一下上面的程式:
(1)聲明一個整型變量num(偷懶寫a也可以),将這個變量指派為1。
(2)淺嘗辄止一下引入循環:while(),在括号中引入條件語句,也就是說如果當num變量滿足括号中内容,執行while{}中的内容,當num不滿足()中内容後則結束循環。
(3)在第八行中引入了計算平方的方式:num*num,同時補充之前筆記中沒有詳寫到%4 %6(此處内容是省略了printf()中修飾符概念,死記硬背沒意義,前期多試試調整就熟了)。
(4)在第九行對num這個值進行了指派加一的操作,也就是說每次循環之後num是遞增的。
輸出結果:
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81
10 100
同時擴充一下另一種求平方的方法,提前了解一下<math.h>
#include <stdio.h>
#include <math.h> //引入<math.h>
int main(void)
{
int num;
num = pow(10, 2); //pow函數計算10的2次方
printf("num = %d", num);
return 0;
}
首先引入了<math.h>中的pow函數計算10的2次方,得出的結果為:num = 100
同理大家可以嘗試自己改變參數試試運作:
num = pow(10, 3);
1.2,除法運算符之截斷
簡單介紹一下C語言中除法使用“/”,還是和所有語言基本一緻。和乘法類似舉例:下面語句就是将tim除以114,并将結果指派給cy:還是特别強調是指派不是等于。
cy = tim / 114;
除法也是有意思的點是整數除法和浮點數除法不同。浮點數除法的結果是浮點數,而整數除法的結果是整數。整數是沒有小數部分的數。這使得7除以3很讓人頭痛,因為實際結果有小數部分。
在C語言中,整數除法結果的小數部分被丢棄——這個丢棄的操作被稱之為截斷。
下面程式展示了除法的過程,浮點型和整型的差別:
#include <stdio.h>
int main(void)
{
printf(" 5/4 = %d \n", 5/4);
printf(" 6/3 = %d \n", 6/3);
printf(" 7/3 = %d \n", 7/3);
printf(" 7.0/3.0 = %.2f \n", 7.0/3.0);
printf(" 7.0/3 = %.2f \n", 7.0/3);
return 0;
}
下邊是輸出結果:
5/4 = 1
6/3 = 2
7/3 = 2
7.0/3.0 = 2.33
7.0/3 = 2.33
程式結果中明顯看出6/3和7/3得出來的值一緻,但這和我們的認知明顯不符的。
1.3,其他運算符:%(求模)++(遞增)--(遞減)
C語言一共有40多個運算符,上述介紹的可以說是最常見的了,而此段介紹的%(求模)++(遞增)--(遞減)也較為常見,詳細用法也建議大家多多思考和使用。
1.3.1,%求模
例如,14 % 5(讀作“14求模5”)得3,因為14比5的兩倍多4,即14除以5的餘數是4。
求模運算符隻能用于整數,不能用于浮點數。
計算時間時,1分鐘是60秒,但是如何結算80秒是多少分鐘呢?這個問題如果交給計算機計算80/60?那麼得出來的結果将是1.33333。難道真正的答案是1.3分鐘?這個答案明顯是錯誤的。那麼引入求模運算後這麼寫:
#include <stdio.h>
#define SECOND_PER_MINUTE 60
int main(void)
{
int sec, min;
printf("Please enter an integer in seconds that will be converted to minutes and seconds.\n");
scanf("%d", &sec);
min = sec / SECOND_PER_MINUTE; //計算整數分鐘
printf("%d sec = %d min, %d sec.\n", sec, min, sec % SECOND_PER_MINUTE); //最後求模計算秒數
return 0;
}
根據上邊的程式輸入80,計算出的結果為:
80 sec = 1 min, 20 sec.
1.3.2,++(遞增)--(遞減)
遞增和遞減類似是以就放到一起來學習,遞增運算是将運算對象進行遞增1的操作(遞減大家就舉一反三)。
特别注意有兩種寫法,但是表示含義确不同。
第1種方式,++出現在其作用的變量前面,這是字首模式; ++CY
第2種方式,++出現在其作用的變量後面,這是字尾模式。 CY++
下邊的程式來簡單介紹其不同所在:
#include <stdio.h>
int main(void)
{
int cy = 1, cy1 = 1;
int cy_post, pre_cy1;
cy_post = cy++; //字尾遞增
pre_cy1 = ++cy1; //字首遞增
printf("cy cy_post cy1 pre_cy1 \n");
printf("%1d %5d %8d %7d\n", cy, cy_post, cy1, pre_cy1);
return 0;
}
此處使用兩個聲明變量cy和cy1,分别使用了兩種遞增的方式,輸出結果如下:
cy cy_post cy1 pre_cy1
2 1 2 2
cy和cy1都遞增了1,但是,cy_post是cy遞增之前的值,而pre_cy1是cy1遞增之後的值。
2,表達式語句
在前幾章中,我們已經多次使用了術語表達式語句。特别注意以下幾個案例:
int port /* 不是表達式,沒有值 */
legs = 6; //這是一條語句
在這裡也是詳細學習複合語句——塊的概念。
1.1,複合語句——塊
複合語句是用花括号括起來的一條或多條語句,複合語句也稱為塊。上邊的循環程式中使用過while就是一個程式塊:
//程式段1
while (num <= 10) //引入循環的概念
printf("%4d %6d\n", num, num * num); //使用兩個變量相乘
num = num + 1;
//程式段2
while (num <= 10) //引入循環的概念
{
printf("%4d %6d\n", num, num * num); //使用兩個變量相乘
num = num + 1;
}
将上一個小節中計算平方中使用的循環程式段來分析:
程式段1,while循環中隻有一條指派表達式語句。沒有花括号,while語句從while這行運作至下一個分号。循環結束後,printf()函數隻會被調用一次。
程式段2,花括号確定兩條語句都是while循環的一部分,每執行一次循環就調用一次printf()函數。根據while語句的結構,整個複合語句被視為一條語句。
3,本章小結
本章主要學習了幾種C語言的運算符以及淺嘗辄止的介紹了一點點循環的概念(while)之後會專門有一章到兩章去學習循環。時間精力有限(畢竟還有工作要做)但還是盡量想把C語言學習筆記做得細節更到位的同時又顯得簡單,讓讀者們盡量沒有一打開就想關了的感覺。如有不足或有疑問歡迎各位大佬們指正,同時也希望非IT專業的小白們能感受到C語言的魅力所在。如果對你有幫助的話可以點贊收藏哦!嘻嘻!
[1] 《C Primer Plus》