天天看點

C語言學習筆記系列—第五章

作者:正能量IT先生

這兩天工作實在是太忙了,抽個午休時間來繼續學習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》

繼續閱讀