C语言—整除问题、求余、赋值、逻辑运算符易错点
前言
🐨這一篇主要是講那些老師可能不會講,但是很多初學者都容易踩坑的地方
🤔 根據自己踩過的的坑整理了一下🤧
文章目錄
- 前言
- 一、整除問題
- 1??第一種情況:整數相除,抹去小數位
- 2??第二種情況:被除數<除數,結果為0
- 3??第三種情況:分子分母有一個為浮點數,結果即為浮點數
- 二、求余運算
- 三、賦值運算
- 1??復合賦值運算:
- 2??復合賦值運算練習:
- 四、邏輯運算符的優先級和結合性
- 最后
想要bug少,細節注意不能少~👈(゚ヮ゚👈)
一、整除問題
1??第一種情況:整數相除,抹去小數位
示例: 9/2=4 -9/2=-4 #include <stdio.h>int main() {float a;a=9/2;printf("%f",a); } #include <stdio.h>int main() {float a;a=-9/2;printf("%f",a); }
分析:上面兩個例子可看出在a已經為浮點數float的情況下,a=9/2;和a=-9/2;等號后面的兩個整數在運算完成后是按照int型來計算的,計算完成后的結過直接把小數位抹去,然后才賦值給a,轉化為float類型
2??第二種情況:被除數<除數,結果為0
示例:1/2=0 #include <stdio.h>int main() {float a;a=1/2;printf("%f",a); }3??第三種情況:分子分母有一個為浮點數,結果即為浮點數
注意像示例2這種,分子或者分母有多個數的,只要有一個為浮點數即可
示例1:1.0/2=0.5 1/2.0=0.5
示例2:a,b,c為int型 a=(2.0*b) /c
如何避免整數相除損失精度:👈(゚ヮ゚👈)
1.直接將整數保留一位小數(使得分子或是分母為浮點數即可)
- 示例1
- 示例2
2.直接將分子或分母 強制轉換為 浮點數類型
強制轉換:(要轉換的類型)(要轉換的數) ——>如:(int)a 或(float)(a*b) 要轉換的數只有一個的時候,第二個括號可以省略
示例:int a,b,c; a=(float)(2b)/c 或 a=2b/(float)c
#include <stdio.h>int main() {float a;int b,c;scanf("%d%d",&b,&c);a=(float)(2*b)/c;printf("%f",a); }二、求余運算
1.該運算只能作用于兩個整數的運算,運算結果是兩個整數的余數,結果為整數。
2.運算結果的符號與被除數的符號一致
5%2=1 -5%2=-1 5%-2=1
3.如果 被除數 小于 除數 ,結果為被除數
2%9=2
三、賦值運算
結合性:從右向左
賦值運算中的自動類型轉換:
1.賦值后,左邊的值被右邊表達式的值替換
2.如果左右兩邊類型不一致,以左邊變量的類型為準,將表達式值的類型轉換為左邊變量的類型
1??復合賦值運算:
- 結合性:從右向左
- 注意:兩個運算符中間不要有空格
第一列是復合賦值運算符,第二列分別等于其對應的第三列
| -= | a-=b | a=a-b |
| *= | a*=b | a=a*b |
| %= | a%=b | a=a%b |
2??復合賦值運算練習:
例題:設有如下變量定義,計算表達式y+=i-=j*=++x的值
int i=3,j=5;float x=2.5,y=5.0;計算步驟:
-
計算++x
y+=i-=j*=++x++x等價于x=x+1
x=3.5 -
計算j*=++x
y+=i-=j*=++x經過第一步計算變為:
y+=i-=j*=x 此時x=3.5
j=j*x
等號右邊j * 3.5=17.5 賦值給左邊后:j=17
(從右向左計算,因為j為int類型,所以小數部分就被抹去了) -
計算i-=j*=++x
經過上一步計算變為:
y+=i-=j
i=i-j 此時j=17
i=-14 -
計算y+=i-=j*=++x
y+=i-=j*=++x
經過上一步計算變為:
y+=i 此時i=-14
y=y+i
y=-9.0
y是double型的,結果由-9變為-9.0
四、邏輯運算符的優先級和結合性
-
優先級:
!大于&&大于|| -
結合性:
邏輯非,右結合
邏輯與、邏輯或,左結合
運算符的優先級:
!、++、- -、sizeof>算術運算符>關系運算符>&&、||>賦值運算符
問題:如何表達1<x<10?
1<x<10 ?
x>1&&x<1 ?
最后
(〒▽〒)由于本人能力有限以及是個小迷糊,如有錯誤或是不妥的地方,麻煩各位及時指出,以免我誤導他人,多謝🥳
🕊?原創不易,希望各位大佬支持一下\textcolor{orange}{原創不易,希望各位大佬支持一下}原創不易,希望各位大佬支持一下
👍點贊,你的認可是我創作的動力!\textcolor{green}{點贊,你的認可是我創作的動力!}點贊,你的認可是我創作的動力!
?? 收藏,你的青睞是我努力的方向!\textcolor{green}{收藏,你的青睞是我努力的方向!}收藏,你的青睞是我努力的方向!
?? 評論,你的意見是我進步的財富!\textcolor{green}{評論,你的意見是我進步的財富!}評論,你的意見是我進步的財富!
總結
以上是生活随笔為你收集整理的C语言—整除问题、求余、赋值、逻辑运算符易错点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 虚拟化KVM
- 下一篇: rating vs nominal 额定