第三章 簡單的算術運算和表示式
1.條件運算子是c語言提供的唯一乙個三元運算子,c語言中沒有冪運算子
2.只有計算相反數是一元運算子,其餘運算子都是二元運算子
3.一元運算子也叫單目運算子,二元運算子也叫雙目運算子,三元運算子也叫三目運算子
4.整數除法的結果是整數,浮點數除法的結果是浮點數
5.求餘運算限定參與運算的兩個運算元必須為整型,餘數的符號與被除數的符號相同,不能對兩個實型數進行求餘運算
6.所有的算術運算子中只有一元的去相反數運算子為右結合,其餘的結合性都為左結合
7.同一優先順序的運算子進行混合運算時,從左向右依次進行
8.運算子的優先順序:單目運算
>
算術運算
>
關係運算
>
邏輯運算
>
條件運算
>
賦值運算
>
逗號運算
9.計算並輸出乙個三位整數的個位、十位、百位數字之和
#include
void main()
int x=321;
int a,b,c,sum;
a=x%10;//a=1
b=(x/10)%10;//b=2
c=x/100;//c=3
sum=a+b+c;
printf("a=%d,b=%d,c=%d\nsum=%d\n",a,b,c,sum);
10.涉及算術運算的復合賦值運算子有5個:
+=,-=,*=,/=,%=
11.增
1運算子也稱自增運算子,減
1運算子也稱自減運算子,都是一元運算子,只有乙個運算元必須是變數不能是常量或表示式
12.自增自減運算子作為字首時,先執行加1或減
1然後使用;自增自減運算子作為字尾時,先使用再執行加1或減
1;13.考慮優先順序與結合性的例項
m=-n++《=》
m=-(n++)《=
》m=-n,n=n+1;
//正面:-和
++都是一元運算子,優先順序相同,此時要考慮結合性,結合性都是右結合的,所以先算
++後算-
//反面:如果等價
m=(-n)++
就不合法了,因為表示式不能進行自增操作
14.scanf函式和
printf
函式都是
c的標準輸入
/輸出函式,
&為取位址運算子
15.巨集常量與巨集替換:
1) 在程式中直接使用的常數稱為幻數,將幻數定義為巨集常量或
const
常量是為了提高程式的可讀性和可維護性
2) 巨集常量也稱符號常量,沒有資料型別,編譯器不對其進行型別檢查,只進行字串替換
3) 巨集定義一般形式:
#define
識別符號 字串。識別符號被稱為巨集名
,巨集名與字串之間可有多個空白符,不加等號,結尾不加分號
4) 巨集常量是由巨集定義編譯預處理命令來定義
,巨集名替換成字串的過程稱為巨集替換,巨集替換不做任何語法檢查
5) 當巨集定義是乙個表示式時,呼叫時,是乙個數就可以直接帶入,而是表示式也要看成是乙個數代進巨集定義表示式中,
而看成乙個數這就要求把呼叫的數加上圓括號,為了減少不必要的錯誤,最好都加上圓括號
6) 巨集替換的過程是將巨集名原樣替換成字串,而不是直接計算出值,所以要用呼叫後的結果參與其他運算就需要把呼叫的結果加上圓括號
7) 例題:
#include
#define n 2 //n=2
#define m n+1 //m=2+1
#define num 2*m+1 //num=2*2+1+1=6
void main()
int i;
for(i=1;i<=num;i++);
printf("%d\n",i); //執行完空迴圈,
i=7
i--; // i=6
printf("%d\n",i);
8) 例題:
#include
#define f(x) x*x
void main()
int b;
b=f(4+4); //b=4+4*4+4=24,解釋見5)
printf("b=%d\n",b);
9) 例題:
#include
#define f(x) x*x
void main()
int b;
b=f(4+4)/(2+2); //b=4+4*4+4/(2+2)=21解釋見6)
printf("b=%d\n",b);
10) 例題:
#include
#define f(x) x*x
void main()
int b;
b=f((4+4)); //b=(4+4)*(4+4)=64
printf("b=%d\n",b);
11) 例題:
#include
#define f(x) (x*x)
void main()
int b;
b=f((4+4))/(2+2); //b=((4+4)*(4+4))/(2+2)=16
printf("b=%d\n",b);
16.const常量
1) const常量只能在定義時賦初值,因為編譯器將其放在唯讀儲存區,不允許在程式中修改
2) const常量的定義一般形式:
const
型別名 識別符號
=字串;
//將識別符號宣告為具有該資料型別的
const常量
3) const是一種型別修飾符,
const
常量具有資料型別,編譯器要對其進行型別檢查
17.表示式中的自動型別轉換:
1) 表示式中,運算元型別相同,運算的結果型別與運算元型別相同
2) 表示式中,運算元型別不相同,c編譯器自動將所有運算元進行型別提公升,轉換成同一型別,所佔位元組最大,再計算
18.賦值中的自動型別轉換:
1) 賦值運算子左側變數與右側表示式型別不同時,發生自動型別轉換:右側表示式的值轉換成左側變數的型別
19.強制型別轉換:
1) 強制型別轉換運算子是一元運算子
2) 強制型別轉換也稱強轉,是將表示式的值轉換為任意型別,並不改變變數本身的資料型別
3) 強轉一般形式:(型別
)表示式
4) 演示強制型別轉換運算子的使用
#include
void main()
int m=5;
printf("m/2=%d\n",m/2);//m=2
printf("(float)(m/2)=%f\n",(float)(m/2));//m=2.000000
printf("(float)m/2=%f\n",(float)m/2);//m=2.500000
printf("m=%d\n",m);//m=5,只是將
m強轉為實型資料,並不改變
m的資料型別
20.常用的標準數學函式:
1) 使用
c標準數學函式,要在程式開頭加上編譯預處理命令:
#include
2) 例:已知三角形三邊長為
a,b,c
,計算三角形的面積
#include
#include
void main()
float a,b,c,s,area;
printf("input a,b,c:");
scanf("%f,%f,%f",&a,&b,&c);
s=(a+b+c)/2;
area=(float)sqrt(s*(s-a)*(s-b)*(s-c));
printf("area=%f\n",area);
21.賦值運算子的左側不能出現表示式,變數與變數之間可以賦值
例1:若有定義:
int a,b,c;
下列表示式中哪乙個是合法的
c語言賦值表示式(c、
d)a)a=7+b=c=7 b)a=b++=c=7 c)a=(b=7,c=12) d)a=3,b=a+5,c=b+2
表示式不能做左值
b.b++
表示式不能做左值
c.逗號表示式
a=12 d.
依次賦值
例2:下面不正確的賦值語句是
(b)
a)a=++a b)a=b++=10 c)a+=b d)a=1>'a'
//d.算術運算子優先順序高於賦值運算子,先算
1>'a'
再將其結果賦給a
例3:若有下列定義:
int a=3,b=2,c=1;
以下選項錯誤的賦值表示式是
(a)
a)a=(b=4)=3 b)a=b=c+1 c)a=(b=4)+c d)a=1+(b=c=4)
//a.先計算圓括號裡的值等於
4,然後按照賦值表示式的順序從右向左計算,將
3賦值給
4這是不對的,
即賦值號左側只能是變數,不能出現表示式b=4
簡單算術表示式求值
題目 利用cin,getline將輸入分成前半部分和後半部分,便於操作 例如 32 3 分成數字部分 32字串部分 3 include using namespace std intmain re num n break else if s i re n num break else if s i ...
簡單算術表示式求值
兩位正整數的簡單算術運算 只考慮整數運算 算術運算為 加法運算 減法運算 乘法運算 整除運算 取餘運算。算術表示式的格式為 運算子前後可能有空格 運算數 運算子 運算數請輸出相應的結果。一行算術表示式。整型算數運算的結果 結果值不一定為2位數,可能多於2位或少於2位 32 64 96 include...
C語言算術運算子和算術表示式
c語言中運算子和表示式數量之多,在高階語言中是少見的。正是豐富的運算子和表示式使c語言功能十分完善。這也是c語言的主要特點之一。c語言的運算子不僅具有不同的優先順序,而且還有乙個特點,就是它的結合性。在表示式中,各運算量參與運算的先後順序不僅要遵守運算子優先順序別的規定,還要受運算子結合性的制約,以...