ประเภทของข้อมูลและตัวดำเนินการ Data Types and Operator (บทที่ 3)
ประเภทของข้อมูล ข้อมูลชนิดอย่างง่าย (Simple Type) ข้อมูลในภาษาซี แบ่งได้เป็น 4 กลุ่ม ข้อมูลชนิดอย่างง่าย (Simple Type) ข้อมูลประเภทแถวอักขระ (String Type) ข้อมูลชนิดโครงสร้าง (Structure Type) ข้อมูลชนิดศรชี้ (Pointer Type)
ข้อมูลชนิดอย่างง่าย (Simple Type) ข้อมูลประเภทลำดับ (Ordinal Type) ข้อมูลจำนวนเต็ม ข้อมูลอักขระ ข้อมูลตรรกะ ข้อมูลประเภทจำนวนจริง (Real Type)
ข้อมูลชนิดอย่างง่าย (Simple Type) ข้อมูลประเภทลำดับ (Ordinal Type) ข้อมูลจำนวนเต็ม ชนิด ตัวอย่าง integer ...,-3,-2,-1,0,1,2,3,... binary 0 , 1 Octal 0124 , 076 , 04 hexadecimal 0x17, 0xd ,0x5f
ข้อมูลชนิดอย่างง่าย (Simple Type) ข้อมูลจำนวนเต็ม ชนิดข้อมูล ช่วงของข้อมูลที่เก็บไว้ int -32768...32767 unsigned int 0...65535 signed int short int unsigned short int signed short int long int -2,147,483,648...2,147,483,647
ข้อมูลชนิดอย่างง่าย (Simple Type) ข้อมูลประเภทลำดับ (Ordinal Type) ข้อมูลอักขระ (Character Data Type) ข้อมูลประเภทนี้จะเป็นตัวอักขระหนึ่งตัว ซึ่งเป็นไปตาม ตารางรหัส ASCII ได้แก่ ตัวอักษร ตัวเลข อักขระพิเศษ ชนิดข้อมูล ตัวอย่าง char 'C' , 'a' , '\n' , '#' , '@' '{' , '0' , '$'
ข้อมูลชนิดอย่างง่าย (Simple Type) ข้อมูลประเภทลำดับ (Ordinal Type) ข้อมูลตรรกะ (Boolean Data Type) จะเป็นค่าทางลอจิก ชนิด ตัวอย่าง boolean 1 , 0 , -4 ค่าเท็จ (False) แทนค่าด้วยเลข 0 ค่าจริง (True) แทนค่าด้วยเลข 1 - ค่าจริง คือ ค่าที่ไม่เท่ากับ 0
ข้อมูลชนิดอย่างง่าย (Simple Type) ข้อมูลประเภทจำนวนจริง (Real Data Type) ไม่เป็นข้อมูลชนิดลำดับ เนื่องจากทศนิยมมีได้หลายตำแหน่ง ชนิด ตัวอย่าง ช่วงของข้อมูลที่เก็บไว้ float 11.25, -1.5E4, 2.5e-02 3.4E-38...3.4E+38 double 1.7E-308...1.7E+308 long double 3.4E-4932... 1.1E+4932
ข้อมูลประเภทแถวอักขระ (String Type) เป็นการนำตัวอักขระมาเรียงต่อกันเป็นข้อความตั้งแต่หนึ่งตัวเป็นต้นไป สามารถเก็บตัวอักขระได้ 255 ตัว โดยตัวอักขระจะต้องอยู่ในเครื่องหมาย “ ” ภาษาซี มีการเติมตัวอักษรว่าง Null ( \0 ) เป็นตัวสุดท้ายของสตริง Example 'C' 'O' 'M' 'P' 'U' 'T' 'E' 'R' '\O' ใช้เนื้อที่ในการเก็บทั้งสิ้น 9 Bytes
การประกาศค่าคงที่และตัวแปร ค่าคงที่ (Constant) หมายถึง ค่าในหน่วยความจำที่มีค่าคงที่ตลอดโปรแกรม การประกาศค่าคงที่ ทำได้ 2 ลักษณะ คือ ประกาศ ให้ค่าคงที่ ชื่อว่า a เป็นชนิด Integer Const int a ; // ERROR ประกาศ ให้ค่าคงที่ ชื่อว่า b เป็นชนิด Integer เก็บค่า 12 ไว้ Const int b = 12 ;
การประกาศค่าคงที่และตัวแปร ตัวแปร (Variables) หมายถึง ค่าในหน่วยความจำที่สามารถเปลี่ยนค่าได้ ชื่อตัวแปรจะเป็นตำแหน่งหน่วยความจำที่เก็บข้อมูลอยู่ การประกาศตัวแปรสามารถทำได้ดังนี้ ตัวอย่างเช่น Type Variables_list int count; float data1 , data2;
ตัวอย่างที่ 1 ผลการทำงาน ? #include <stdio.h> ตัวอย่างที่ 1 #include <stdio.h> const int taxrate = 7; float itemcost , salestax; int main() { printf("Please Enter Cost of item : "); scanf("%f" , &itemcost); salestax = (taxrate * itemcost) / 100; printf(" item Cost is = %.2f \n" , itemcost); printf(" Sales tax is %.2f\n" , salestax); return(0); } Output Please Enter Cost of item : 500 item Cost is = 500.00 Sales tax is 35.00 Output Please Enter Cost of item : 500 ผลการทำงาน ?
ตัวดำเนินการ (Operator) ภาษาซีมีตัวดำเนินการ ดังต่อไปนี้ ตัวดำเนินการเลขคณิต (Arithematic Operator) ตัวดำเนินการลอจิก (Logic Operator) ตัวดำเนินการเปรียบเทียบ (Relation Operator)
ตัวดำเนินการเลขคณิต (Arithematic Operator) ความหมาย ชนิดของข้อมูล ตัวอย่าง + บวก ตามชนิดของข้อมูล 5 + 2 - ลบ 5 - 2 * คูณ 5 * 2 / หาร 5 / 2 % หารเอาผลลัพธ์เฉพาะเศษ ของการหาร( Modulo ) จำนวนเต็ม 5%2 ++ การเพิ่มค่าขึ้นหนึ่ง X++, ++X -- การลดค่าลงหนึ่ง X-- , --X
ตัวอย่างที่ 2 ค่าตัวแปร x ค่าตัวแปร y การดำเนินการ ค่าจาก การกระทำ ตัวอย่างที่ 2 ค่าตัวแปร x ค่าตัวแปร y การดำเนินการ ค่าจาก การกระทำ ผลลัพธ์ ที่เก็บ 10 5 x = y + 2 7 X = 7 x = x/y 2 X = 2 10.0 x = x/y 2.0 X = 2.0 9 x = x%y 1 X = 1 14 -3 -14 3 -2 X = -2
ตัวอย่างที่ 3 การดำเนินการ ผลลัพธ์ ชนิดผลลัพธ์ จำนวนเต็ม จำนวนจริง ตัวอย่างที่ 3 การดำเนินการ ผลลัพธ์ ชนิดผลลัพธ์ 13 / 5 * 3 6 จำนวนเต็ม 6 * 5 / 10 * 2 + 10 16 (6 * 5) / (10 * 2) + 10 11 (6 * 5.0) / (10 * 2 + 10) 1.0 จำนวนจริง (6 * 5.0) / (10 * (2 + 10)) 0.25 3 * (4 % (6 / 2)) + 5 8
ตัวอย่างที่ 4 ค่าตัวแปร x การดำเนินการ ค่าจากการกระทำ 7 x = x+1 8 ตัวอย่างที่ 4 ค่าตัวแปร x การดำเนินการ ค่าจากการกระทำ 7 x = x+1 8 x = x-1 6 x = x++ x = ++x x = x-- x = --x Y = ++x Y มีค่าเป็น 8 Y = x++ Y มีค่าเป็น 7
จากตัวอย่างที่ 4 สรุปได้ว่า จากตัวอย่างที่ 4 ถ้า x มีค่าเป็น 7 y = + + x แล้ว อธิบายได้ว่า x มีค่าเป็น 7 ต่อมา เพิ่มค่า x ขึ้นหนึ่ง แล้วส่งให้ตัวแปร y ทำให้ y มีค่าเป็น 8 สรุปได้ว่า - ถ้าวางตัวดำเนินการไว้หน้าตัวแปร จะทำการเพิ่มค่าก่อนแล้วจึงส่งค่าให้กับ y - ถ้าวางตัวดำเนินการไว้หลังตัวแปร จะทำการส่งค่าให้กับ y ก่อนแล้วจึงเพิ่มค่า x อีกหนึ่ง ถ้า x มีค่าเป็น 7 y = x + + แล้ว อธิบายได้ว่า x มีค่าเป็น 7 ทำให้ y มีค่าเป็น 7 ด้วย และเพิ่มค่า x ขึ้นหนึ่ง ส่งผลให้ x มีค่าเป็น 8
ตัวดำเนินการเปรียบเทียบ (Relation Operator) ความหมาย ชนิดของข้อมูล ตัวอย่าง ผลลัพธ์ < น้อยกว่า boolean 5 < 4 <= น้อยกว่าหรือเท่ากับ 5 <= 5 1 == เท่ากับ 0 == 0 > มากกว่า 5 > 4 >= มากกว่าหรือเท่ากับ 5 >= 4 != ไม่เท่ากับ 0 != 0
ตัวดำเนินการลอจิก (Logic Operator) ความหมาย ชนิดของข้อมูล ตัวอย่าง ผลลัพธ์ && AND boolean 1 && -1 1 || OR 1 || 0 ! NOT !4 ตารางค่าความจริง AND ตารางค่าความจริง OR ตารางค่าความจริง NOT A B A && B 1 A B A || B 1 A !A 1
ตัวอย่างที่ 5 ผลการทำงาน ? #include <stdio.h> int main() { ตัวอย่างที่ 5 #include <stdio.h> int main() { int A , B; printf(" A B A OR B\n"); A = 1; B = 1; printf("| %d | %d | %d |\n", A, B, A||B); A = 1; B = 0; A = 0; B = 1; A = 0; B = 0; return(0); } A B A OR B | 1 | 1 | 1 | | 1 | 0 | 1 | | 0 | 1 | 1 | | 0 | 0 | 0 | ผลการทำงาน ?
การยุบนิพจน์โดยใช้ (Compound Assignment) ตัวดำเนินการที่ยุบแล้ว 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 z = (x+1) + (y+1) z = ++x + ++y
ขนาดของหน่วยความจำของข้อมูลเรียงจากน้อยไปมาก long double double float unsigned long int long int unsigned int int short char
การเปลี่ยนประเภทของข้อมูล x y นิพจน์ z int z = x + y float double z = x * y char short long z = (x + y) / 4.6 long then float ผลลัพธ์จะเก็บในข้อมูลประเภทที่ใหญ่กว่าเสมอ
การเปลี่ยนประเภทของข้อมูล ภาษาซีสามารถเปลี่ยนประเภทของข้อมูลให้เป็นไปตามที่ผู้ใช้ต้องการได้ โดยการนำชนิดข้อมูลไว้หน้าข้อมูลเช่น x นิพจน์ ผลลัพธ์ int float x float (int)(x + 2.5 ) (float)( x +1)
ตัวอย่างที่ 6 ผลการทำงาน #include <stdio.h> int main() { ตัวอย่างที่ 6 #include <stdio.h> int main() { int i , j; scanf("%d %d" , &i , &j ); printf(" i < j: %d\n" , i<j ); printf(" i <= j: %d\n" , i<=j ); printf(" i == j: %d\n" , i==j ); printf(" i > j: %d\n" , i>j ); printf(" i >= j: %d\n" , i>=j ); return(0); } ผลการทำงาน 1 6 i < j: 1 i <= j: 1 i == j: 0 i > j: 0 i >= j: 0 1 6 i < j: i <= j: i == j: i > j: i >= j: 6 -1 6 -1 i < j: 0 i <= j: 0 i == j: 0 i > j: 1 i >= j: 1
ตัวอย่างที่ 7 ผลการทำงาน #include <stdio.h> int main() { ตัวอย่างที่ 7 #include <stdio.h> int main() { int i , j; scanf("%d %d" , &i , &j ); printf(" i && j: %d\n" , i && j ); printf(" i || j : %d\n" , i || j ); printf(" !i : %d\n" , !i ); printf(" !j : %d\n" , !j ) ; return(0); } ผลการทำงาน 2 -1 i && j: 1 i || j : 1 !i : 0 !j : 0 2 -1 i && j: i || j : !i : !j : 0 -2 0 -2 i && j: 0 i || j : 1 !i : 1 !j : 0
ลำดับการดำเนินงานของ Operator () ! (Not) , ++ , -- , - * , / , % + , - < , > , <= , >= == , != && (And) || (Or) = , *= , /= , %= , += , -=, วงเล็บ ติดลบ ในกรณีอยู่ในลำดับเดียวกันจะทำจากซ้ายไปขวา
ตัวอย่างที่ 8 ผลการทำงาน ? #include <stdio.h> int main() { ตัวอย่างที่ 8 #include <stdio.h> int main() { int i , j; printf("2+3 && 1 : %d\n" , 2+3 && 1); printf("2+3 && 0 : %d\n" , 2+3 && 0); printf("-3 < 1 && 1 : %d\n" , -3 < 1 && 1); printf("12/3*5 > 10 < 5: %d\n" , 12/3*5 > 10 < 5); return(0); } ผลการทำงาน ? 2+3 && 1 : 1 2+3 && 0 : 0 -3 < 1 && 1 : 1 12/3*5 > 10 < 5: 1 2+3 && 1 : 2+3 && 0 : -3 < 1 && 1 : 12/3*5 > 10 < 5:
จบประเภทของข้อมูลและตัวดำเนินการ Data Types and Operator Question ?