Chỉång III : Cáu lãûnh, biãøu thỉïc v toạn tỉí
Trang 16
Ch−¬ng III.
CÁU LÃÛNH, BIÃØU THỈÏC, V TOẠN TỈÍ
I.
Cáu lãûnh:
Cáu lãûnh l 1 chè thë hon chènh, ra lãûnh cho mạy tênh thỉûc hiãûn cäng viãûc no âọ. Cạc
cáu lãûnh kãút thục båíi dáúu cháúm pháøy, thỉåìng âỉåüc viãút trãn 1 dng âãø chỉång trçnh r rng.
Trçnh biãn dëch s b qua cạc kê tỉû khäng nhçn tháúy nhỉ tab, enter, spacebar, vç váûy 2
cáu lãûnh sau âáy l tỉång âỉång våïi nhau :
x=y+z;
v x = y + z ;
Khong tràõng chè cọ nghéa trong xáu kê tỉû nhỉ “Dai hoc Da Nang”
Våïi xáu kê tỉû âãø cọ thãø viãút trãn cạc dng khạc nhau thç ta phi dng kê tỉû \ .
Vê dủ : int x,\
y,z;
printf(“\nDai hoc \
Da Nang”);
Cáu lãûnh âån gin l nhỉỵng lãûnh khäng chỉïa lãûnh khạc nhỉ phẹp gạn, låìi gi hm kiãøu
void (hm khäng cọ giạ trë tr vãư), lãûnh nhy khäng âiãưu kiãûn.
Cáu lãûnh cáúu trục l khäúi lãûnh, lãûnh thỉí v lãûnh r nhạnh, lãûnh làûp.
II.
Khäúi lãûnh:
Khäúi lãûnh l mäüt nhọm cáu lãûnh âỉåüc bao båíi càûp dáúu ngồûc {}.
Vê dủ : { cáu lãûnh 1;
cáu lãûnh 2;
........
cáu lãûnh n;
}
Nhỉỵng nåi cọ thãø âàût mäüt lãûnh âån thç cọ thãø âàût 1 khäúi lãûnh. Bãn trong khäúi lãûnh cọ
thãø cọ khäúi lãûnh khạc.
III.
Biãøu thỉïc:
Biãøu thỉïc bao gäưm cạc toạn hảng v toạn tỉí.
Toạn hảng cọ thãø l biãún, hàòng, hm.
Toạn tỉí l + - * / % & | ......
Vê dủ : biãøu thỉïc tan(x)*y - 2 gäưm cạc toạn hảng l hm tan ca x, biãún y v hàòng 2;
cạc toạn hảng l *, - .
• Biãøu thỉïc säú hc l biãøu thỉïc cọ kãút qu l giạ trë säú hc.
• Biãøu thỉïc logic l biãøu thỉïc cọ kãút qu l TRUE hồûc FALSE ( thäng qua 0 v 1).
• Biãøu thỉïc quan hãû l cạc biãøu thỉïc logic âån gin, chỉïa cạc toạn tỉí quan hãû nhỉ
>,<,>=,<=,==,!=. Cạc toạn hảng trong biãøu thỉïc ny khäng nháút thiãút phi tỉång
thêch våïi nhau vãư kiãøu.
Chỉång III : Cáu lãûnh, biãøu thỉïc v toạn tỉí
Trang 17
IV.
Toạn tỉí:
Toạn tỉí l mäüt kê hiãûu nhàòm thỉûc hiãûn cạc tênh toạn trãn 1 hay nhiãưu säú hảng.
IV.1.
Phẹp tênh theo bit:
Khäng ạp dủng cho kiãøu float v double
Toạn tỉí nghéa
& phẹp AND theo tỉìng bit
| phẹp OR theo tỉìng bit
^ phẹp XOR theo tỉìng bit
~ phẹp âo tỉìng bit
Vê dủ : 3 = 0000 0000 0000 0011
~3 = 1111 1111 1111 1100
Ta cáưn phi phán biãût giỉỵa cạc toạn tỉí & v && :
3 & 4 = 0, 3 && 4 = 1.
Tỉång tỉû nhỉ váûy våïi cạc toạn tỉí | v || :
3 | 4 = 7, 3 || 4 = 1.
Ta dng cạc phẹp tênh theo bit âãø xoạ hồûc láûp cạc bit trong cạc säú nhë phán.
Vê dủ : âãø láûp bit thỉï 0 v bit thỉï 3 ca säú ngun x, ta dng lãûnh x = x | 0x9;
âãø xoạ bit thỉï 1 v bit thỉï 2 ca säú ngun x, ta dng lãûnh x = x & 0xF9;
• Phẹp dëch säú hc >> v << :
I<<M : dëch säú ngun I sang trại âi M bit, tỉång âỉång våïi I*2
M
.
I>>M : dëch säú ngun I sang phi âi M bit, tỉång âỉång våïi I/2
M
.
Vê dủ : âãø tênh I*20 ta viãút (I<<4) + (I<<2) vç 20 = 2
4
+ 2
2
.
Vê dủ : int i=0x123;
i=i>>3;
printf(“\n i=%#x”,i); 0x24
printf(“\n i=%#o”,i); 044
Chụ :
1. int i=0xFFFF;
printf("\ni=%d",i) ; -1
i=i<<2;
printf("\ni=%d",i) ; -4
2. int x=0xFFFF;
x=x<<2;
printf(“\nx=%#x”,x);
Kãút qu: 0xFFFC; /* khäng phi x*2
2
*/
3. I>>M tỉång âỉång våïi I/2
M
khi I > 0.
Vê dủ: int i=-15;
clrscr();
printf("\ni=%d",i) ; -15
i=i>>3;
printf("\ni=%d",i) ; -2
Chỉång III : Cáu lãûnh, biãøu thỉïc v toạn tỉí
Trang 18
IV.2.
Phẹp gạn måí räüng :
x+=y <=> x=x+y
x-=y <=> x=x-y
x*=y <=> x=x*y
x/=y <=> x=x/y
x%=y <=> x=x%y
x>>=y <=> x=x>>y
x<<=y <=> x=x<<y
x&=y <=> x=x&y
x|=y <=> x=x|y
x^=y <=> x=x^y
Chụ : a = a*b+c; khäng tỉång âỉång våïi a*=b+c;
Vç a*=b+c; tỉång âỉång våïi a=a*(b+c);
Viãûc dng phẹp gạn måí räüng cọ thãø gáy khọ hiãøu nhỉng nhiãưu bäü biãn dëch tảo ra m
hiãûu qu hån nãúu ta dng nọ.
IV.3.
Phẹp tàng / gim giạ trë 1 âån vë (dng våïi cạc biãún):
i=i+1 <=> i++ hồûc ++i
i=i-1 <=> i-- hồûc --i
Sỉû khạc nhau giỉỵa 2 lãûnh gạn a= ++i v a= i++ :
++i : tàng i lãn 1 âån vë, sau âọ måïi gạn.
i++ : gạn trỉåïc, sau âọ måïi tàng i lãn 1 âån vë.
Vê dủ : x=0;a=x++; // a=x; x++; : a=0, x=1;
x=0;a=++x; // x++; a=x; : a=1,x=1;
IV.4.
Toạn tỉí quan hãû :
Toạn tỉí nghéa
== toạn hảng 1 cọ bàòng toạn hảng 2 khäng ?
> toạn hảng 1 cọ låïn hån toạn hảng 2 khäng ?
< toạn hảng 1 cọ nh hån toạn hảng 2 khäng ?
>= toạn hảng 1 cọ låïn hån hồûc bàòng toạn hảng 2 khäng ?
<= toạn hảng 1 cọ nh hån hồûc bàòng toạn hảng 2 khäng ?
!= toạn hảng 1 cọ khạc toạn hảng 2 khäng ?
Ta cáưn phi phán biãût toạn tỉí quan hãû == v toạn tỉí gạn =
IV.5.
Toạn tỉí sizeof():
Toạn tỉí sizeof(x) tr lải säú byte m x chiãúm.
Ta cn cọ thãø viãút sizeof(kiãøu_dỉỵ_liãûu)
Vê dủ : float x;
printf(“\n Kêch thỉåïc ca kiãøu säú thỉûc l : %d”, sizeof(x));
printf(“\n Kêch thỉåïc ca kiãøu säú ngun l : %d”, sizeof(int));
Chỉång III : Cáu lãûnh, biãøu thỉïc v toạn tỉí
Trang 19
IV.6.
Toạn tỉí âiãưu kiãûn :
biãøu_thỉïc1 ? biãøu_thỉïc2 : biãøu_thỉïc3;
Nãúu biãøu_thỉïc1 l âụng (khạc 0) thç giạ trë ca biãøu thỉïc trãn l biãøu_thỉïc2, nãúu
biãøu_thỉïc1 l sai (bàòng 0) thç giạ trë ca biãøu thỉïc trãn l biãøu_thỉïc3.
Vê dủ : Gi sỉí ta mún tçm giạ trë låïn nháút max ca 2 säú a v b. Ta cọ thãø viãút nhỉ sau :
max = a > b ? a : b
Nãúu a > b l TRUE thç max âỉåüc gạn bàòng a, nãúu khäng thç âỉåüc gạn bàòng b.
Vê dủ: printf(“There %s %d fish”, (n>1) ? ”are”:”is”, n);
printf("There %s %d dog%s", (n>1)?"are":"is", n, (n>1)?"s":"");
V.
Thỉï tỉû ỉu tiãn giỉỵa cạc phẹp toạn:
Toạn tỉí Chiãưu tênh toạn
() [] ->
L → R
- ++ -- ! ~ sizeof() &(âëa chè) *(con tr) toạn tỉí ẹp kiãøu : toạn tỉí 1 ngäi
R
→ L
* / %
L → R
+ -
L
→ R
<< >>
L → R
< <= >= >
L
→ R
== !=
L → R
&
L
→ R
^
L → R
|
L
→ R
&&
L → R
||
L
→ R
? :
R → L
+= -= *= /= %= &= ^= |= <<= >>=
R
→ L
Nãúu khäng nhåï thỉï tỉû thç ta cọ thãø dng cạc dáúu ngồûc âån ().
Nãúu cạc toạn tỉí cng cáúp thç lm theo chiãưu tênh toạn.
Ta khäng nãn viãút : x = f (...) + g (...); nãúu 1 trong 2 hm f v/hồûc g cọ thãø lm thay
âäøi giạ trë ca cạc biãún truưn cho hm cn lải. C khäng chè r hm no s âỉåüc thỉûc hiãûn
trỉåïc.
Tỉång tỉû : * printf("%d %d\n", ++n, power(2, n)); /* sai */
* a[i] = i++;
VI.
Sỉû hiãûu chènh khi tênh toạn :
Ngän ngỉỵ C cho phẹp sỉû träün láùn cạc toạn hảng thüc cạc kiãøu khạc nhau.
VI.1.
Sỉû chuøn âäøi säú hc :
Chỉång III : Cáu lãûnh, biãøu thỉïc v toạn tỉí
Trang 20
Viãûc chuøn âäøi kiãøu giạ trë xy ra tỉû âäüng khi trong biãøu thỉïc cọ cạc toạn hảng khạc
kiãøu. Viãûc chuøn âäøi kiãøu giạ trë cng xy ra khi gạn giạ trë kiãøu ny cho biãún (hồûc pháưn tỉí
mng) kiãøu kia, khi truưn giạ trë cạc âäúi säú cho cạc tham säú, trong cáu lãûnh return.
int → long → float → double → long double.
Khi chuøn âäøi theo chiãưu ngỉåüc lải thç s bë máút mạt thäng tin, cọ thãø cọ cnh bạo
nhỉng khäng cọ läùi.
Vê dủ: int n;
long p;
float x,s;
s=n*p+x;
âáưu tiãn khi tênh n*p, n âỉåüc âäøi thnh kiãøu long. Têch cọ kiãøu long nãn khi tênh täøng,
têch âỉåüc chuøn thnh kiãøu float. Täøng cọ kiãøu float s âỉåüc gạn cho s.
VI.2.
Sỉû ỉu tiãn cho kiãøu säú :
Cạc phẹp tênh säú hc khäng âënh nghéa cho kiãøu char v short. C tỉû âäüng hiãûu chènh
kiãøu char v kiãøu short thnh kiãøu int.
VI.3.
Chuøn âäøi âäúi våïi kiãøu kê tỉû char:
Kiãøu kê tỉû char khi åí trong biãøu thỉïc säú hc s âỉåüc chuøn âäøi thnh kiãøu int dỉûa vo
bng m ASCII.
Vê dủ : char ch;
ch = ‘A’ + 1; // ‘A’=65 nãn ‘A’+1=66 tỉì âọ ch=’B’
VII.
Cäú chuøn âäøi kiãøu giạ trë:
Âãø nháûn âỉåüc kãút qu mong mún âäi khi ta phi chuøn âäøi kiãøu ca giạ trë.
Vê dủ :
#include <stdio.h>
#include <conio.h>
main()
{
int m,n;
float x;
m=3;n=2;
x=m/n; // phẹp chia láúy pháưn ngun, sau âọ chuøn sang kiãøu float âãø gạn vo x
printf(“\n Khi chua chuyen doi : m/n = %f”,x);
printf(“\n Khi da chuyen doi : m/n = %f”,(float)m/n);
getch();
return 0;
}
ÅÍ âáy (float)m cọ nghéa l chuøn âäøi n sang kiãøu säú thỉûc.
Khi âọ (float)m/n l phẹp chia giỉỵa 2 säú thỉûc.
Ta cọ thãø viãút (float)(m) hồûc (float)m.