Transcript C language

Special Operators
ตัวดำเนินกำรพิเศษ
Increment and decrement
operators
Conditional Operator
1
Conditional operators

รูปแบบ
expr1 ? expr2 : expr3;

ความหมาย
จริง
ค่าของนิพจน์
expr2

เท็จ
expr1
ไม่ใช่ศนู ย์
expr3
ตัวอย่ าง
scanf(“%[01]”, &i) ? printf(“Valid input”) : printf(“Invalid input”)
2
ตัวอย่ าง
จงเขียนโปรแกรมภาษาซี เพือ่ หาค่ ามากทีส่ ุ ดของเลขจานวนเต็ม 3 จานวน
 วิเคราะห์

ค่ าทีม่ ากทีส่ ุ ด (max)

เลขจานวนเต็ม 3 จานวน (a, b, c)


 รั บข้ อมูล
 เปรี ยบเทียบหาค่ าทีม
่ ากทีส่ ุ ด
 แสดงผล
3
ตัวอย่ าง (ต่อ)
#include <stdio.h>
void main( ) {
int a, b, c, max;
printf(“Enter integer \na = ”);
scanf(“%d”, &a);
printf(“b = ”);
scanf(“%d”, &b);
printf(“c = ”);
scanf(“%d”, &c);
max = (a>b) ? a : b;
(max < c) ? max=c : ;
printf(“The maximum is %d”, max);
}
4
ตัวอย่ าง (ต่อ)
เท็จ
เท็จ
จริง
จริง
เท็จ
max = b
max = c
b>c
max = c
a>b
a>c
จริง
max = a
max = (a>b) ? (a> c ? a : c) : (b> c ? b : c);
5
Increment & decrement operators
ใช้ ได้ กบั ตัวแปรทีม่ ีชนิดเป็ น Integral types เท่ านั้น
 การเปลีย่ นแปลงค่ าของตัวแปรนั้นทีละ 1 หน่ วย
 ++ (Increment) เพิม
่ ค่ าของตัวแปรขึน้ 1 หน่ วย
 n = n + 1;
 n += 1;
 n++;
 ++n;
 -- (Decrement) ลดค่ าของตัวแปรลง 1 หน่ วย
 n = n - 1;
 n -= 1;
 n--;
 --n;
 Postfix operator ตัวดาเนินการที่วางไว้ หลังตัวถูกดาเนินการ
 Prefix operator ตัวดาเนินการทีว่ างไว้ หน้ าตัวถูกดาเนินการ

6
ตัวอย่ าง
/* Demonstrate prefix and postfix increment operator */
#include <stdio.h>
void main() {
int
x , post = 1, pre = 1;
x = post++;
printf(“x = %d\tpost = %d\n”, x, post);
x = ++pre;
printf (“x = %d\tpre = %d\n”, x, pre);
}
้ อ
ผลล ัพธ์จากการ run โปรแกรมนีค
ื
x=1
x=2
post = 2
pre = 2
7
ลาดับความสาคัญของตัวดาเนินการ
()
++(postfix) --(postix)
ซ้ ายไปขวา
+(unary) -(unary) ! sizeof() ++(prefix) --(prefix) ขวาไปซ้ าย
* / %
ซ้ ายไปขวา
+ -
ซ้ ายไปขวา
<
<=
>
>=
== !=
ซ้ ายไปขวา
ซ้ ายไปขวา
&&
ซ้ ายไปขวา
||
ซ้ ายไปขวา
= += -= *= /= %=
ขวาไปซ้ าย
8
Arithmetic operators
กำรประกำศตัวแปรและกำหนดค่ำเริ่ มต้น
int
นิพจน์
a=1,
b=2,
นิพจน์เทียบเท่ำ
++a * b – c-7 - -b * d++
c=3,
d = 4;
ค่ำของนิพจน์
((++a) * b) – (c--)
1
7 – ((-b) * (d++))
15
9
ตัวอย่ าง
:
int digits, number;
:
for(digits = 0; number > 0; digits += 1)
number /= 10;
for (digits=0; number>0; number /= 10, digits++);
for (digits=0; number>0; digits++)
number /= 10;
for (digits=0; number>0; number /= 10, ++digits);
10
จงหาผลลัพธ์ ของชุดคาสั่ งต่ อไปนี้
int
i, n;
for (i=8, n=50; n != 1; ++i) {
n = (n % 2 == 0) ? n / 2 : 3 * n + 1;
if (i % 6 == 0)
printf(“\n”);
printf(“%d ”, n);
}
printf(“No. of hailstones generated : %d\n”,
i);
11