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