從今天我決定改變一下講解的方式,因為純文字誰不會呢?照著書本來搬,就什麼都來了,我們根據不同的算法代碼來講解不同的知識點。
我們已經開始接觸算法,那我們就出題目來進行一個操作:
第一題:一輛貨車運輸箱子,載貨區寬2米,長4米;一個箱子寬1.5米,長1.5米,請問載貨區一層可以放多少個箱子呢?(箱子的數量是一個整數,不存在半個箱子)。
我們根據題目來分析,首先我們得定義兩個整型變量,一個是載貨區的長Long1、一個是載貨區的寬WIDE1,還需要定義兩個浮點型的變量箱子的長Long2、寬WIDE2。那麼我們看下圖的代碼
我們今天講的是類型的轉換和優先級,還會了解一些運算符和自加、自減的內容。
首先我們看上圖代碼,
第一行頭文件,每個程序都需要有的預處理命令#include<stdio.h>,這個在之後我們會專門的講解。
第二行main函數,每個C的源程序不論由多少個文件組成,它都有且只能有一個主函數main。
第三行開始就是我們今天講的重點,這裡定義的是整型變量的長和寬:WIDE和Long,箱子的長和寬,數值是1.5,我們定義為實型的變量(也叫做浮點型)用f,那麼我們現在看剛才的題目,題目最後的補充是不可能會有半個箱子,那麼最後的變量定義為整型,可是這裡需要浮點型和整型一起進行計算,那樣我們需要怎麼辦呢?
因為數值類型有很多種,字符型、整型、浮點型等等,這些類型的變量長度和符號的特性都不同,所以取值也就不同,之前講了我們把短數值類型的變量比喻成小水杯子,長數值類型的比喻成大水杯子,那麼你從小水杯子給大的杯子裡倒水,那麼能容下,所以數據什麼都不會丟失,可是當你從大的往小的裡面倒水呢?會溢出來的,那麼這個轉換我們應該怎麼去呢?
就比如剛才的算法的代碼:
int WIDE= 2, Long= 4;
float f=1.5;
我們把float(浮點型)賦予int(整型)的變量中去,按照常規的寫法應該是如下:
int number = (int)(WIDE/ f) * (int)(Long/ f);
我們在每一個的前面都加了(int)這是什麼意思呢?
(類型名稱)(表達式)
這個屬於強制性轉換,在短數值向高數值轉換的時候有時候編譯器就會自動轉換,但是有時候就會出現警告,只用強制轉換之後,這個警告就沒有了,但是你要注意的是如果你需要是一個表達式的值進行強制轉換,那麼你需要把這個表達式給括起來,不然它只轉換第一個!
上面說的是自動類型轉換和強制類型轉換,下面我們講優先級和結合性
講優先級之前我們先來了解一下算術運算符:
C語言中有兩個單目算術運算符、5個雙目運算符,在五個雙目運算符中的級別劃分應該是乘法、除法和取模的級別高於加法和減法,單目運算符的級別是最高的。
加減乘除就不用講了,這個%取模是計算兩個整數相除所得到的餘數,取模的兩側都為整數,比如7%4結果就為3。還有一點是「-」在5-3中是減法,此時為雙目,在-5是為負值,此時為單目。
那麼什麼是算術表達式,就是表達式中使用了算術運算符的稱為算術表達式,比如:
(int)(WIDE/ f) * (int)(Long/ f);
這個就是算術表達式,算術表達式的優先級,*、/、%大於+、-,比如說x+y*z那麼計算機會先編譯y*z後計算x+它倆相乘的值,如果都是平級的話就比如x+y-z,那麼計算機採用的是由左往右的結合方向計算,就是先計算x+y的值後-z,比如說我們要想先讓計算那個的值,我們就可以加括號,括號內的優先計算,就比如int number = (int)(WIDE/ f) * (int)(Long/ f);這個就是先計算(WIDE/ f)、(Long/ f)這兩個的值後相乘的。
最後在帶大家了解自增和自減,自增++,自減--,自增的意思是自己加1,自減的意思就是自己-1這個可以由前綴和後綴的比如自增A++、++A,自減A--,--A,那麼這兩種寫法的區別在於
B=A++的意思是B=A,A=A+1,比如說A=3,那麼B=3
B=++A的意思是A=A+1,B=A,比如說A=3,那麼B=4
注意:自增和自減屬於單目運算符,常數和表達式不可以進行自增,自減的運算。例如3++和(x+3)++都是不合法的!
今天我們就學到這裡,不知道這種根據實例的方法大家是否喜歡,喜歡就希望你們能關注我哦,另外給大家福利,需要編程軟體的我免費送哦。