The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.

8 นิพจน์และคำสั่งเงื่อนไข

Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by Pirapong Pridachom, 2019-08-27 22:43:29

8 นิพจน์และคำสั่งเงื่อนไข

8 นิพจน์และคำสั่งเงื่อนไข

1

หัวข้อ

➢คำสังกำรกำหนดค่ำ
➢นิพจนท์ ำงคณิตฯ (Arithmetic Expression)
➢นิพจนท์ มี ีข้อมูลต่ำงชนิด
➢นิพจนท์ ำงตรรกะ (Logical Expression)

2

 รคใูชปำส้แสำบังหบกรำบั หกนำหดนคด่ำvaค(rAำ่ iaขsbอsliงegนn=ิพmจeeนxnpใ์trหSeก้ staับstiตeomวัnแ;eปnรt)
 เช่น result = 5 * 2 + 100;

เป็นกำรนำผลลพั ธ์ของนิพจน์ (ขวำของ =) มำเก็บในต=ัวแ1ป1ร0(ซำ้ ยของ =)

3

 นน21..พิิพนนจจพิพิ นนจจท์ ์นนมำทท์์งี ค2ำำณงงชตคิตนรณฯรดิ กิตแะฯบ่ง((เLAปor็นigt3hicmชaนelิดtEตicxำpมEตrxeวัpsดrsำeเioนssินniกsoำ)nรs)


1.สกำหำรรบัดกำำเรนคินำนกวำณรทBำiงnคaณryิตศำสตร์ (+, -, *, /, %)
2. กำรดำเนนิ กำร Unary
สำหรบั กำหนดค่ำเป็น +/- และกำรเพิม/ลดค่ำ (++, --)
3. กำรดำเนินกำร Compound Assignment
สำหรบั กำรคำนวณทำงคณิตฯ และกำหนดคำ่ (+=, -=, *=, /=, %=)

4

 ตวั ดำเนนิ กำร Binary (+, -, *, /, %) ใชใ้ นกำรหำ
ผลลพั ธ์กำรคำนวณระหวำ่ งขอ้ มลู 2 คำ่
คำนวณ ตัวอย่ำง
บหคลวำูณบกร Operator 19
result = a + b; 9
modulus + 70
- result = a – b; 2
* result = a * b; 4
/
% result = a / b;

result = a%b;

หมำยเหตุ modulus (%) เป็นกำรเก็บเศษทีไดจ้ ำกกำรหำร a ดว้ ย b
เชน่ ถ้ำให้ a = 14, b = 5 คำนวณ result

5

ลำดบั กำรดำเนนิ กำร
ในนพิ จนท์ มี ี ตัวดำเนนิ กำรหลำยตวั

1. ( )
2. *, /, %
3. +, -

ถำ้ ในนิพจนม์ ตี ัวดำเนินกำรทีมีลำดับเทำ่ กนั จะ
ประมวลผลจำกซ้ำยไปขวำ (ตำมทีปรำกฏในนิพจน)์
เช่น result = 100 - 5 * 2 + 5;

21 3

6

 แสดงลำดบั กำรดำเนนิ กำรของนิพจน์
5*(4-6/2)+10
start

3 21 4 x = 5*(4-6/2)+10
Print x
t1 5*(4- 3) +10 end
t2
t3 5* 1 +10
5 +10
t4

15#include <stdio.h> #include <stdio.h>
void main()
void main() {

{ int t1, t2, t3, t4; int t = 5*(4-6/2)+10;
t1 = 6/2; printf(1. 6/2=%d\n”, t1); printf(“%d\n”, t);
t2 = 4-t1; printf(2. (4-6/2)=%d\n”, t2); }
t3 = 5*t2; printf(3. 5*(4-6/2)=%d\n”, t3);
t4 = t3+10; printf(4. 5*(4-6/2)+10=%d\n”, t4); 7

}

 แสดงลำดับกำรดำเนินกำรของนิพจน์

8.5-10.0/4*(5+4)

4 2 31

8.5-10.0/4* 9

8.5- 2.5* 9

8.5- 22.5

#include <stdio.h> -14.0 start
x = 8.5-10./4*(5+4)
void main()
Print x
{ end

float t = 8.5-10.0/4*(5+4); 8
printf(“%f\n”, t);
}

 แสดงลำดับกำรดำเนินกำรของนพิ จน์

Y = 2*5*4+3*5+9

Y = 10 *4+3*5+9

Y = 40 +3*5+9

Y = 40 +15 +9

Y = 55 +9

Y#include <stdio.h> = 64 start
y = 2*5*4+3*5+9
void main()
Print y
{ end

int y = 2*5*4+3*5+9;
printf(“y = %d\n”, y);
}

9

 ตัวดำเนินกำร Unary ใชใ้ นกำรดำเนินกำร กบั ขอ้
มลู ค่ำเดียว

◦กำรกำหนดค่ำบวก(+)หรือลบ(-)ใหต้ ัวแปร เชน่ -x,..
◦กำรเพมิ ขนึ (++) หรือลดลง (--) ของตวั แปรทลี ะหนึง
เชน่ ++x (หรือ x = x+1), --y (หรอื y = y-1), ...

 ตวั อย่ำงเช่น ให้ a = 10, b = 10,
และ ++a, --b
จะได้ a = 11, b = 9

10

ลำดบั กำรดำเนินกำร
1. ( )
2. ++, -- Unary
3. *, /, %
ปถำ้ระใ4นม.นว+ลิพ,ผจ-ลนจม์ ำีตกวั ซด้ำำยเนไนิปกขำวรำทีมีลำดบั เทำ่ กัน จะ
ตัวอยำ่ งเชน่
n=5; N = ++n + 10;
จะทำ ++n ก่อน แลว้ จึงบวก 10 ดังนนั N = 6+10=16 และ n = 6

11

Prefix Unary ร่วมกับ Binary ในนิพจน์ เชน่
 noPp=ose5จtrะ;faทixNำti+Uo+=nnnกa+อ่ นr+yแลnรว้ จ่ว+งึ บมวกก110บั 0;ดBงั นiนั nNa/=r/y6+pใ1r0นe=1นf6ixิพและจunนn=a์ 6เrชy่น
nตop=ัวeอ5จrะย;aท่ำNำtinงo+=เnช10น่nก+่อน+เพิม+คำ่ 10; // postfix unary
 n++ ดังนนั N = 5+10=15 และ n=6

i=10; j=2; N = i * ++j;

// prefix จะทำ ++j=3 กอ่ น N = 10*3=30
i=10; j=2; N = i * j++; // postfix จะทำ N = i * j=20 ก่อน j++=3
i=10; j=2; N = i * --j; // prefix จะทำ --j=1 กอ่ น N = 10*1=10
i=10; j=2; N = i * j--; // postfix จะทำ N = i * j=20 กอ่ น j--=1

12

 แPสreดfiงxล(ำ+ด+ับj,ข-อ-jง)กเำปรรคยี ำบนเทวณยี บนกพิ ับจนPต์os่อtไfปixน(ีjแ+บ+,บjก--ร)ณี
#include <stdio.h> i=10; j=2; N = i * ++j; = 30
void main() i=10; j=2; N = i * j++; = 20
{ int i, j, N; i=10; j=2; N = i * --j; = 10
i=10; j=2; N = i * j--; = 20
i=10; j=2; N=i*++j;

printf(“N=i*++j = %d, i=%d, j=%d\n", N, i, j);

i=10; j=2; N=i*j++;
printf(“N=i*j-- = %d, i=%d, j=%d\n", N, i, j);

i=10; j=2; N=i*--j;
printf(“N=i*++j = %d, i=%d, j=%d\n", N, i, j);

i=10; j=2; N=i*j--; 13
printf(“N=i*j-- = %d, i=%d, j=%d\n", N, i, j);
}

 กเผคลำรลอืรัพงดหธำม์แเบำนยบิน=Bกi(nทำaำrรyให(Cท+้ o,ำ-ง,m*ำ,น/p,%ใoน)uAรn่วLdมUกAไับดsกเ้sรำiว็รgขกnึนำmห)ตนeัวดnอคtำ่ยเดปำ่ ว้็งนยก4ำ.5ร:หxำ=20,y=2
Operator ตวั อยำ่ ง = กำรทำงำน

+= x += 5 x = x + 5; 25

-= x -= 5 x = x - 5; 15

*= x *= 5 x = x * 5; 100

x *= y x = x * y; 40

x *= y+8 x = x * (y+8); 200

/= x /= 5 x = x / 5; 4

x /= y x = x / y; 10

%= x %= 5 x = x % 5; 0

14

 ลำดบั กำรดำเนนิ กำร
1. ( )
2. ++, -- Unary
3. *, /, %
4. +, -
 ถ้ำม5ีล. ำ+ด=บั, เ-=ท,่ำ*ก=ัน, /จ=ะ, ป%ร=ะมวCลoผmลpจoำuกnซdำ้ ยAไsปsiขgวnmำ ent
 ตวั อย่ำงเช่น x=20; y=2; x *= y+8;
10 =200

21 15

 แสดงผลของตัวดำเนินกำร Compound Assignment ตอ่ ไปนีเมือ
i=10; j=2; k=100; k += i+j; = 100+(10+2) = 112

k -= i+j; = 100-(10+2) = 88
k *= i+j; = 100*(10+2) = 1200
#include <stdio.h> k /= i+j; = 100/(10+2) = 8
void main()

{

int i = 10, j = 2, k = 100;

k = 100; k+=i+j; printf(“k+=%d+%d = %d\n", i, j, k);
k = 100; k-=i+j; printf(“k-=%d+%d = %d\n", i, j, k);
k = 100; k*=i+j; printf(“k*=%d+%d = %d\n", i, j, k);
k = 100; k/=i+j; printf(“k/=%d+%d = %d\n", i, j, k);

}

16

 นพิ จน์ (Expression) อำจมขี อ้ มูลตำ่ งชนิด (เช่น int, float, ...)

ผสมกัน => ผลลัพธ์ควรเป็นชนดิ ใด?
◦ ตำมหลักกำร จะใหผ้ ลลพั ธ์เป็นค่ำทมี ีควำมแมน่ ยำสูงกวำ่

int (+, -, *, /) float => float
float (+, -, *, /) int => float

 ควรระวังกำรหำร int / int => int
กำรแปลงข้อมูลใหเ้ หมำะสมในนิพจน์ ทำได้ 2 แบบ

1. Type Conversion (กำรแปลงขอ้ มลู เป็นค่ำตำ่ งชนดิ )
2. Type Cast (กำรแปลงค่ำของตัวแปรเป็นค่ำตำ่ งชนิด)

17

 หลกั กำรของ Type Conversion

กรณีขอ้ มูลผสม จะใหผ้ ลลัพธเ์ ป็นค่ำทีมีควำมแม่นยำสูงกว่ำ

int (+, -, *, /) float => float
float (+, -, *, /) int => float

 ตวั อยำ่ งเชน่ คำนวณค่ำ p = 22/7 = ?

float PI; = 3.000000
PI = 22 / 7;
PI = 22.0 / 7;

= 3.142857

18

เขียนโปรแกรมเพือคำนวณพืนทีสำมเหลียม
Area = ½ ฐำน x สูง ผลลพั ธ์
Enter base (B):_4
#include <stdio.h>
void main() Enter height (H):_5
{ int B, H; Area = 10.000000

float Area; start

printf(“Enter base (B): ”); scanf(“%d”, &B);
printf(“Enter height (H): ”); scanf(“%d”, &H);
Input B, H

Area = 1.0/2 * B * H; Area = 1/2xBxH

printf(“Triangle area = %f \n”, Area); Print Area

} end
19 19
ถำ้ Area = 1/2 * B * H; // Area = 0.000000 ?
ถำ้ Area = 0.5 * B * H; // Area = 10.000000 ?

เขียนโปรแกรมเพือคำนวณพืนทีวงกลม
Area = pr2 เมอื คำนวณคำ่ p = 22/7
start

#include <stdio.h> Input r

void main() PI=22/7

{ int r; Area = PI*r*r

float Area, Pi; Print Area

printf(“Enter radius (r): ”); end
scanf(“%d”, &r);
Pi = 22.0/7; ผลลพั ธ์
Enter radius (r):_2
Area = Pi * r * r; Area = 12.571428
printf(“Circular area = %f \n”, Area);
} ถำ้ Pi = 22/7; // Pi = 3.0, Area = 12.000000 ?
20 20

 ใชใ้ นกรณีทีตอ้ งกำรแปลงคำ่ ของตวั แปร
ใหเ้ หมำะสมในนิพจน์
 รูปแบบ (type)expression;

ตัวอยำ่ งเช่น

int n=5, m=2; =5/2 = 2.0
float x, y;
x = n/m;
y = (float)n/m;

= 5.0 / 2 = 2.5

21

 ลำดบั กำรดำเนนิ กำร
1. ( )
2. ++, --, Cast Unary, Type Cast
3. *, /, %
4. +, -
 ถ้ำม5ีล. ำ+ด=ับ, เ-=ท,ำ่ *ก=ัน, /จ=ะ, ป%ร=ะมวCลoผmลpจoำuกnซd้ำยไปขวำ
 ตัวอยำ่ งเช่น n=5; m=2; y = (float)n/m;
5.0 = 2.5

12 22

 เรขำยียนไดโปเ้ งรินแฝกำรกมค(Inำcoนmวe)ณ=เเงงินนิ ตฝน้ ำก(Mพ) ร(1อ้ +มอดัตอรกำเดบอียกเเมบอื ียเว(Rล))ำปีผ=่ำนMไxป(11+ปRี )เYมอื

start

#include <stdio.h> Input M, R
void main()

{ int iR; // %interest rate (i.e., 5%) Income=M*(1+R)

float M, R, Income;

printf(“Enter Invested Money (M): ”); Print Income
scanf(“%f”, &M);

printf(“Enter %Interest Rate (R): ”);
scanf(“%d”, &iR);
R = (float)iR/100; // Type cast ผลลพั ธ์ end
Income = M * (1+R);
Enter Invested Money (M): 1_0000
printf(“Income after 1 year : %.2f\n”, Income);Enter %Interest Rate (R): 5_
} Income after 1 year : 10500.00

ถำ้ R = iR/100; // R = 0.0, Income = 10000.00 23

 โปรแกรมภำษำ C มีกำรดำเนนิ กำรระดบั Bit

(Bitwise Operations) ทมี คี ่ำ 1(True)/0(False)

เพอื ประมวลผลเกียวกับนพิ จนต์ รรกะ (Logical Expression)



(AND)
(OR)
^ (XOR)
(NOT)

24

 (&), (|), (~)

AND OR NOT (Inverter)

A F=A B A F=A+B A F= A
B B

AB F AB F AF

00 0 00 0 0 when both A 01
01 0 01 1 and B are 0 10
10 0 10 1
11 1 11
1

1 when both
A and B are 1

NAND (~,&), NOR (~,|), XOR (^), XNOR (~, ^)

25

 ตวั แปรชนิด char (8 bits)
 ตวั แปรชนิด int (16 bits)
 ตัวแปรชนิด long (32 bits)
 ตัวแปรทุกชนิดสำมำรถแสดงได้ 3 เลขฐาน
◦ เลขฐำน 10 (0,1,2,3,4,5,6,7,8,9) %d
◦ เลขฐำน 8 (0,1,2,3,4,5,6,7) %o
◦ เลขฐำน 16 (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F) %X
 ตัวอยำ่ งเช่น
unsigned char A; // 8 bits
unsigned int B; // 16 bits
unsigned long C; // 32 bits

26

 (&) operation AB F
0000 1110 & ( 0E) base 16
0100 1100 ( 4C) base 16 00 0
01 0
0000 1100 (=0C) base 16 10 0
11 1

OR ( | ) operation AB F

0000 1010 | ( 0A) base 16 00 0
01 1
0100 1100 ( 4C) base 16 10 1
11 1
01 001110 (=4E) base 16
XOR ( ^ ) operation
AB F
0000 1110 ^ ( 0E) base 16 27
0100 1100 00 0
0100 0010 ( 4C) base 16 01 1
(= 42) base 16 10 1
11 0

กำหนดคำ่ ตวั แปรเป็นเลขฐำน 16
variable = 0Xvalue;

 ตัวอย่ำงเชน่
unsigned char A, B; // 8 bits
A = 0X0E // 0E = 0000 1110
B = 0X4C // 4C = 0100 1100

➢ NOT (~) operation

0000 1110 ~ ( 0E) base 16
1111 0001 (= F1) base 16

28

 แสดงกำรหำค่ำ AND, OR, XOR, NAND, NOR, XNOR

ของ A, B เมอื A = 0000 10102 = 0E (base 16)

#include <stdio.h> B = 0100 11002 = 4C (base 16)

void main()

{ unsigned char A, B, AND, OR, XOR, NAND, NOR, XNOR;
A = 0X0E; B = 0X4C;

AND = A&B; printf("A&B = %.2X \n", AND); A&B = 0C

NNXOOOARRNRD====AA^|~~BBOA;;RNpp;Drrii;nnppttrffri((in""nAAttf^f|((B“B“~~==((AA%|%&B..2)B2X)=X=\\%nn%."2".,,2XOXX\ROn\)R;n",)";,NNOARN);DAA~);^|(BAB&==B4)4E=2 F3
XNOR = ~XOR; printf(“~(A^B) = %.2X \n", XNOR)~; (A|B) = B1
} ~(A^B) = BD

29

 แสดงกำรหำคำ่ AND, OR, XOR (ขนำด 32 bits)
A = 0000 0000 0000 0000 0000 0000 0000 11102 =
0000000E16
B = 0000 0000 0000 0000 0000 0000 0100 11002 =
0000004C16
#include <stdio.h>
void main()
{
unsigned long A, B, AND, OR, XOR;
A= 0X0E; B = 0X4C;
AND = A&B; printf("A & B = %.8X\n", AND)A; & B = 0000000C

OR = A | B; printf("A | B = %.8X\n", OR);A | B = 0000004E
XOR = A^B; printf("A ^ B = %.8X\n", XOR)A; ^ B = 00000042
}

30

กำร Clear คำ่ ของ V บำง Bits ใหเ้ ป็น 0 (อยำ่ งเร็ว)
V & 0Xclr_value;

 ถต้ำัวตออ้ยง่ำกงำเรชน่CleaVr =4 b0i1ts0(0H1ig1h0)0ของ V ใหเ้ ป็น 0

0100 1100 & ( 4C) base 16
0000 1111 ( 0F) base 16
0000 1100 ( bi0tsC()Lboaws)e
ให้ ข1อ6 ง V เป็น 0
ถ้ำตอ้ งกำร Clear 4
0100 1100 & ( 4C) base 16
1111 0000 ( F0) base 16
0100 0000 ( 40) base 16

31

 แสดงกำร Clear ค่ำบำง Bits ของ V ใหเ้ ป็ น 0

6VกรCณ=0ี 134201.1...41กกกก00ำำำำ1ร7รรร1CA0CCC0l1ellleee06a0aaar0rrr044880b0bbbi0tiiisttt1sss0((((H1HLL0ioogi0gwwh0h)))0)0ขขขข0ออออ0งงงง11VVVV1ใใใ1ใหหห0หเ้1้เ้เเ้ปปป0ป็2็็ นนน็ น=0000

#include <stdio.h>
void main()
{

unsigned long V, A, B, C, D;
V = 0X6C01407A;
A = V & 0X0FFFFFFF; printf("A = %.8X (clear 4 hbits)\n", A);
B = V & 0X00FFFFFF; printf("A = %.8X (clear 8 hbits)\n", B);
C = V & 0XFFFFFFF0; printf("A = %.8X (clear 4 lbits)\n", C);
D = V & 0XFFFFFF00; printf("A = %.8X (clear 4 lbits)\n", D);
} 32

➢กำรหำคำ่ 1’s Complement ของ V คือ ~V
➢กำรหำคำ่ 2’s Complement ของ V คอื -V
➢ตวั อยำ่ งเชน่ V = 01001100

V = 0100 1100 ( 4C) base 16
~V = 1011 0011 ( B3) base 16
( 4C) base 16
V = 0100 1100 ( B4) base 16
-V = 1011 0100

33

 แสดงกำรหำค่ำ 1’s Complement และ 2’s Complement ของ
V
V = 0000 0000 0000 0001 0100 0000 0111 1010 =
#in0c0lu0d1e4<07stAdi1o6.h>
void main()
{ long V, C1, C2; // 32 bits
V = 0X0001407A;
C1 = ~V; C2 = -V;
printf(“ V = %.8X(b16) = %d(b10)\n", V, V);
printf(“1’s C = %.8X(b16) = %d(b10)\n", C1, C1);
printf(“2’s C = %.8X(b16) = %d(b10)\n", C2, C2);
printf(“~V+1 = %.8X(b16) = %d(b10)\n", C1+1, C1+1);
}ผลลพั ธ์
V = 0001407A(b16)=82042(b10)

1’s C = FFFEBF85(b16)=-82043(b10)
2’s C = FFFEBF86(b16)=-82042(b10)

~V+1 = FFFEBF86(b16)=-82042(b10) 34

กำรดำเนนิ กำร มี 2 คำสัง

1. (<<): V<<k 11000011

2. Right Shift (>>): V>>k 110000110 0
0 011000011

➢ตัวอยำ่ งเช่น A = 1100 0011 1 1 0 0 0 0 1 1

A << 4 11000011 0000
A >> 4 000011000011

35

 แสดงกำรเลือนบติ (Left/Right Shift) ของ V

6VกรCณ=0ี 124301.1...41LLRRe00eiif1gg7ft1thhAS0Stth01hSS0i6ifhh0ft0tiiffค0ttคำ่ 0่ำขคค0ขอำำ่่0อขขง1งออV0Vงง1จVVจ0ำำน0จจนวำำ0วนนน0นวว04นน80b480bi1tibbst1sii1ttss10102 =

#include <stdio.h>
void main()
{
long V, LS4, LS8, RS4, RS8;
V = 0X6C01407A; printf(“V = %.8X\n”, V); V = 6C01407A
LS4 = V<<4; printf(“LS4 = %.8X\n", LS4); LS4 = C01407A0

LS8 = V<<8; printf(“LS8 = %.8X\n", LS8); LS8 = 01407A00
RS4 = V>>4; printf(“RS4 = %.8X\n", RS4); RS4 = 06C01407
RS8 = V>>8; printf(“RS8 = %.8X\n", RS8); RS8 = 006C0140
} 36

 กำรคณู หำรดว้ ย 2n แบบ Bit Shift
1. กำรคณู V << n
= V x 2n

2. กำรหำร V >> n = V / 2n

➢ตัวอยำ่ งเชน่ V = 15010 = 9616 = 0000 0000 1001 0110

V << 2 (= 150x22 = 600) 00 0000 1001 0110 00

V >> 1 (= 150/21 = 75) 0 0000 0000 1001 011

37

 (x 2n) หรอื (/ 2n)

#include <stdio.h> 38

void main()
{

int V = 150; // base 10

printf(“V = %d \n", V);
printf(“%d x 4 = %d\n", V<<2);
printf(“%d / 2 = %d\n", V>>1);
}

ผลลพั ธ์

V = 150
150 x 4 = 600
150 / 2 = 75


Click to View FlipBook Version