การตั้งชื่อตัวแปรและตัวดำเนินการ
หลักการตั้งชื่อตัวแปรในภาษาซี
view plainprint?
e
ตัวอย่างชื่อตัวแปลที่ไม่ถูกต้อง
view plainprint?
1. account
2. char
3. 707james
ตัวดำเนินการทางภาษาซี พิจารณาคำสั่งต่อไปนี้
a = b + c;
ความหมายของคำสั่งนี้คือการบวกค่าของตัวแปร b เข้ากับตัวแปร c แล้วเก็บผลลัพธ์ลงในตัวแปร a
ดังนั้น การเขียนสมการในภาษาซีคือ
"การนำผลลัพธ์ของการคำนวณในด้านขวาของเครื่องหมายเท่ากับ (=) ไปใส่ในตัวแปรทางด้านซ้าย"
สำหรับตัวดำเนินการทางคณิตศาสตร์ได้แก่ + (บวก), - (ลบ), * (คูณ), / (หาร), % (มอดดูโล หรือ มอด หรือ หารเอาเศษ)
ตัวดำเนินการทางคณิตศาสตร์อย่างย่อ
การเพิ่มค่า (increment)/ลดค่า (decrement) ด้วยสัญลักษณ์ ++, พิจารณา code ต่อไปนี้
/*1*/ int a = 1;
/*2*/ b = ++a;
บรรทัดที่ 1 เป็นการประกาศตัวแปรชนิดจำนวนเต็มชื่อ a และกำหนดค่าเริ่มต้นให้เท่ากับ 1
บรรทัดที่ 2 เป็นการเพิ่มค่าตัวแปร a ขึ้น 1 ค่า แล้วจึง copy ค่าของตัวแปร a ไปให้ตัวแปร b
code ดังกล่าวมีรูปแบบเต็มดังนี้
/*1*/ int a = 1, b;
/*2*/ a = a+1;
/*3*/ b = a;
หรือกล่าวได้ว่าเป็นการเพิ่มค่า a ขึ้น 1 ค่า ก่อนที่จะกำหนดค่านั้นให้ตัวแปร b
นอกจากเราจะเพิ่มค่าตัวแปรโดยใช้ a++ ได้ด้วยโดยมีความหมายแตกต่างกันเล็กน้อย ดังนี้
/*1*/ int a = 1, b;
/*2*/ b = a;
/*3*/ a = a+1;
หรือกล่าวได้ว่าเป็นการกำหนดค่าในตัวแปร b ให้กับตัวแปร a ก่อน แล้วค่อยเพิ่มค่าในตัวแปร a ขึ้น 1 ค่า ในทำนองเดียวกัน เราสามารถลดค่าของตัวแปรใดๆ ด้วยเครื่องหมาย -- ได้เช่นกัน
การลดรูปคำสั่ง พิจารณาตัวอย่างต่อไปนี้
/*1*/ int a = 5, b = 10;
/*2*/ a = a+b;
code ในบรรทัดที่ 2 เป็นการบวกค่าของตัวแปร a กับตัวแปร b แล้วคืนผลลัพธ์กลับไปเก็บไว้ในตัวแปร a (เท่ากับ 15) ซึ่งสามารถลดรูปได้ดังนี้
/*1*/ int a = 5, b = 10;
/*2*/ a += b;
ในทำนองเดียวกัน เราสามารถนำหลักการลดรูปนี้ไปใช้กับตัวดำเนินการ - (ลบ), * (คูณ), / (หาร), % (มอด) ได้ ตัวดำเนินการเปรียบเทียบ
เราสามารถกำหนดการทำงานของโปรแกรมให้เป็นไปตามเงื่อนไขต่างๆ ที่ต้องการได้ โดยตรวจสอบเงื่อนไขด้วยตัวดำเนินการเปรียบเทียบ
เครื่องหมายความหมาย==เท่ากับ!=ไม่เท่ากับ<น้อยกว่า<=น้อยกว่าหรือเท่ากับ>มากกว่า>=มากกว่าหรือเท่ากับ ผลลัพธ์จากการใช้ตัวดำเนินการเปรียบเทียบจะมีค่าเป็น จริง/true/1 และ เท็จ/false/0 เท่านั้น ดังตัวอย่างต่อไปนี้
/*1*/ int a = 5, b = 10;
/*2*/ a == 7;
/*3*/ a != b;
ดังนั้นบรรทัดที่ 2 จะให้ผลลัพธ์เป็นเท็จ (a มีค่า 5 ซึ่งไม่เท่ากับ 7) และบรรทัดที่ 3 จะให้ผลลัพธ์เป็นจริง (a ไม่เท่ากับ b)
ตัวดำเนินการตรรกศาสตร์ เมื่อต้องการนำผลจากการตรวจสอบเงื่อนไขมาใช้ร่วมกัน เราสามารถนำตัวดำเนินการตรรกศาสตร์ (AND, OR, NOT) มาใช้ได้ เครื่องหมายความหมาย&&AND||OR!NOT ซึ่งผลลัพธ์จากการใช้ตัวดำเนินการเปรียบเทียบจะมีค่าเป็น จริง/true/1 และ เท็จ/false/0 เช่นเดียวกับตัวดำเนินการเปรียบเทียบ ดังตัวอย่างต่อไปนี้
/*1*/ int a = 3;
/*2*/ a >=0 && a<=10;
/*3*/ a >=0 && a<=10 && (a%2 == 0);
/*4*/ a >=0 && a<=10 && !(a%2 == 0);
บรรทัดที่ 2 จะให้ผลลัพธ์เป็นจริง (ค่า a = 3 อยู่ระหว่าง 0 ถึง 10)
บรรทัดที่ 3 จะได้ผลลัพธ์เป็นเท็จ (a = 3 ซึ่ง mod 2 แล้วเท่ากับ 1 ไม่เท่ากับ 0)
บรรทัดที่ 4 จะได้ผลลัพธ์เป็นจริง (a = 3 ซึ่ง mod 2 แล้วเท่ากับ 1 ไม่เท่ากับ 0 ได้ผลลัพธ์เป็นเท็จ แต่ผลนั้นถูก NOT ทำให้เป็นจริง)
การเปลี่ยนชนิดของตัวแปร (casting)
ในการดำเนินการใดๆ (คณิตศาสตร์/เปรียบเทียบ/ตรรกศาสตร์) ระหว่างตัวแปร 2 ตัว, ตัวแปรดังกล่าวจำเป็นจะต้องมีชนิดเดียวกัน
แต่ในการใช้งานจริงอาจจำเป็นต้องดำเนินการกับตัวแปรต่างชนิด ดังนั้นเราอาจต้องแปลงตัวแปรให้เป็นชนิดเดียวกันก่อน
โดยการแปลงแบ่งออกเป็น 2 แบบดังนี้
การแปลงชนิดตัวแปรแบบอัตโนมัติ
เมื่อมีการดำเนินการระหว่างสองตัวแปรต่างชนิดกัน ตัวแปลภาษาจะแปลงชนิดให้อัตโนมัติ โดยเลือกแปลงตัวแปรที่มีขอบเขตเล็กกว่าเช่น
/*1*/ int a = 2;
/*2*/ float b = 3.5, sum;
/*3*/ sum = a + b;
จะเห็นว่าตัวแปร a เป็นจำนวนเต็มซึ่งมีขอบเขตเล็กกว่าตัวแปร b ซึ่งเป็นชนิดทศนิยม (ศึกษาขอบเขตของตัวแปรได้จากตารางชนิดของตัวแปรในภาษาซี)
ดังนั้นตัวแปร a จะถูกแปลงเป็นชนิดทศนิยมก่อนทำการบวกในบรรทัดที่ 3 ต่อไปพิจารณาคำสั่งด้านล่าง
/*1*/ int a = 2, sum;
/*2*/ float b = 3.5;
/*3*/ sum = a + b;
ถึงแม้ว่าตัวแปร a จะถูกแปลงเป็นชนิดทศนิยมในขั้นตอนการบวก แต่ผลลัพธ์นั้นถูกนำไปเก็บในตัวแปร sum ซึ่งเป็นชนิดจำนวนเต็มและ มีขนาดเล็กกว่าชนิดทศนิยม เพื่อให้ตัวแปรที่มีขนาดเล็กกว่าสามารถเก็บข้อมูลนี้ได้ ตัวแปรภาษาจึงต้องแปลงผลลัพธ์เป็นชนิดจำนวนเต็มโดยการตัดทศนิยมออก ค่าตัวแปร sum จึงเท่ากับ 3
การแปลงชนิดตัวแปรแบบกำหนดเอง นอกจากการแปลงชนิดตัวแปรแบบอัตโนมัติแล้ว เรายังสามารถแปลงชนิดตัวแปรให้เป็นตามที่เราต้องการได้ดังตัวอย่างต่อไปนี้
int a = 8;
float b = 7.7;
char c = 'Z';
int cast1;
float cast2;
cast1 = (int)b; /*แปลงจาก float เป็น int*/
cast1 = (int)c; /*แปลงจาก char เป็น int โดยจะอยู่ในรูปของรหัส ASCII (Z มีค่าเท่ากับ 90) สามารถดูรายละเอียด ได้ที่ http://th.wikipedia.org/wiki/แอสกี*/
cast1 = (int)20.1; /*แปลงจาก float เป็น int*/
cast2 = (float)a; /*แปลงจาก int เป็น float*/
cast2 = (float)c; /*แปลงจาก char เป็น float*/
cast2 = (float)'T'; /*แปลงจาก char เป็น float*/
- ขึ้นต้นด้วยอีกษร A-z, a-z หรือเครื่องหมาย _ (underscore) เท่านั้น
- ภายในชื่อตัวแปรห้ามมีช่องว่าง
- ภายในตัวแปรประกอบไปด้วยอักขระ A-z, a-z หรือเครื่องหมาย _(underscore) เท่านั้น
- การใช้อักษรพิมพ์ใหญ่และอักษรตัวพิมพ์เล็กมีความแตกต่างกัน
- ห้ามใช้คำสวงนเป็นชื่อตัวแปร
- ควรตั้งชื่อตัวแปรให้สัมพันธ์กับค่าที่เก็บ
- ความยาวชื่อไม่จำกัด แต่ถือเพียง 31 ตัวแรกเป็นนัยสำคัญ
view plainprint?
e
- acc
- _ok
- S_date
- addr
- ChaiangMaiUniversity
ตัวอย่างชื่อตัวแปลที่ไม่ถูกต้อง
view plainprint?
1. account
2. char
3. 707james
ตัวดำเนินการทางภาษาซี พิจารณาคำสั่งต่อไปนี้
a = b + c;
ความหมายของคำสั่งนี้คือการบวกค่าของตัวแปร b เข้ากับตัวแปร c แล้วเก็บผลลัพธ์ลงในตัวแปร a
ดังนั้น การเขียนสมการในภาษาซีคือ
"การนำผลลัพธ์ของการคำนวณในด้านขวาของเครื่องหมายเท่ากับ (=) ไปใส่ในตัวแปรทางด้านซ้าย"
สำหรับตัวดำเนินการทางคณิตศาสตร์ได้แก่ + (บวก), - (ลบ), * (คูณ), / (หาร), % (มอดดูโล หรือ มอด หรือ หารเอาเศษ)
ตัวดำเนินการทางคณิตศาสตร์อย่างย่อ
การเพิ่มค่า (increment)/ลดค่า (decrement) ด้วยสัญลักษณ์ ++, พิจารณา code ต่อไปนี้
/*1*/ int a = 1;
/*2*/ b = ++a;
บรรทัดที่ 1 เป็นการประกาศตัวแปรชนิดจำนวนเต็มชื่อ a และกำหนดค่าเริ่มต้นให้เท่ากับ 1
บรรทัดที่ 2 เป็นการเพิ่มค่าตัวแปร a ขึ้น 1 ค่า แล้วจึง copy ค่าของตัวแปร a ไปให้ตัวแปร b
code ดังกล่าวมีรูปแบบเต็มดังนี้
/*1*/ int a = 1, b;
/*2*/ a = a+1;
/*3*/ b = a;
หรือกล่าวได้ว่าเป็นการเพิ่มค่า a ขึ้น 1 ค่า ก่อนที่จะกำหนดค่านั้นให้ตัวแปร b
นอกจากเราจะเพิ่มค่าตัวแปรโดยใช้ a++ ได้ด้วยโดยมีความหมายแตกต่างกันเล็กน้อย ดังนี้
/*1*/ int a = 1, b;
/*2*/ b = a;
/*3*/ a = a+1;
หรือกล่าวได้ว่าเป็นการกำหนดค่าในตัวแปร b ให้กับตัวแปร a ก่อน แล้วค่อยเพิ่มค่าในตัวแปร a ขึ้น 1 ค่า ในทำนองเดียวกัน เราสามารถลดค่าของตัวแปรใดๆ ด้วยเครื่องหมาย -- ได้เช่นกัน
การลดรูปคำสั่ง พิจารณาตัวอย่างต่อไปนี้
/*1*/ int a = 5, b = 10;
/*2*/ a = a+b;
code ในบรรทัดที่ 2 เป็นการบวกค่าของตัวแปร a กับตัวแปร b แล้วคืนผลลัพธ์กลับไปเก็บไว้ในตัวแปร a (เท่ากับ 15) ซึ่งสามารถลดรูปได้ดังนี้
/*1*/ int a = 5, b = 10;
/*2*/ a += b;
ในทำนองเดียวกัน เราสามารถนำหลักการลดรูปนี้ไปใช้กับตัวดำเนินการ - (ลบ), * (คูณ), / (หาร), % (มอด) ได้ ตัวดำเนินการเปรียบเทียบ
เราสามารถกำหนดการทำงานของโปรแกรมให้เป็นไปตามเงื่อนไขต่างๆ ที่ต้องการได้ โดยตรวจสอบเงื่อนไขด้วยตัวดำเนินการเปรียบเทียบ
เครื่องหมายความหมาย==เท่ากับ!=ไม่เท่ากับ<น้อยกว่า<=น้อยกว่าหรือเท่ากับ>มากกว่า>=มากกว่าหรือเท่ากับ ผลลัพธ์จากการใช้ตัวดำเนินการเปรียบเทียบจะมีค่าเป็น จริง/true/1 และ เท็จ/false/0 เท่านั้น ดังตัวอย่างต่อไปนี้
/*1*/ int a = 5, b = 10;
/*2*/ a == 7;
/*3*/ a != b;
ดังนั้นบรรทัดที่ 2 จะให้ผลลัพธ์เป็นเท็จ (a มีค่า 5 ซึ่งไม่เท่ากับ 7) และบรรทัดที่ 3 จะให้ผลลัพธ์เป็นจริง (a ไม่เท่ากับ b)
ตัวดำเนินการตรรกศาสตร์ เมื่อต้องการนำผลจากการตรวจสอบเงื่อนไขมาใช้ร่วมกัน เราสามารถนำตัวดำเนินการตรรกศาสตร์ (AND, OR, NOT) มาใช้ได้ เครื่องหมายความหมาย&&AND||OR!NOT ซึ่งผลลัพธ์จากการใช้ตัวดำเนินการเปรียบเทียบจะมีค่าเป็น จริง/true/1 และ เท็จ/false/0 เช่นเดียวกับตัวดำเนินการเปรียบเทียบ ดังตัวอย่างต่อไปนี้
/*1*/ int a = 3;
/*2*/ a >=0 && a<=10;
/*3*/ a >=0 && a<=10 && (a%2 == 0);
/*4*/ a >=0 && a<=10 && !(a%2 == 0);
บรรทัดที่ 2 จะให้ผลลัพธ์เป็นจริง (ค่า a = 3 อยู่ระหว่าง 0 ถึง 10)
บรรทัดที่ 3 จะได้ผลลัพธ์เป็นเท็จ (a = 3 ซึ่ง mod 2 แล้วเท่ากับ 1 ไม่เท่ากับ 0)
บรรทัดที่ 4 จะได้ผลลัพธ์เป็นจริง (a = 3 ซึ่ง mod 2 แล้วเท่ากับ 1 ไม่เท่ากับ 0 ได้ผลลัพธ์เป็นเท็จ แต่ผลนั้นถูก NOT ทำให้เป็นจริง)
การเปลี่ยนชนิดของตัวแปร (casting)
ในการดำเนินการใดๆ (คณิตศาสตร์/เปรียบเทียบ/ตรรกศาสตร์) ระหว่างตัวแปร 2 ตัว, ตัวแปรดังกล่าวจำเป็นจะต้องมีชนิดเดียวกัน
แต่ในการใช้งานจริงอาจจำเป็นต้องดำเนินการกับตัวแปรต่างชนิด ดังนั้นเราอาจต้องแปลงตัวแปรให้เป็นชนิดเดียวกันก่อน
โดยการแปลงแบ่งออกเป็น 2 แบบดังนี้
การแปลงชนิดตัวแปรแบบอัตโนมัติ
เมื่อมีการดำเนินการระหว่างสองตัวแปรต่างชนิดกัน ตัวแปลภาษาจะแปลงชนิดให้อัตโนมัติ โดยเลือกแปลงตัวแปรที่มีขอบเขตเล็กกว่าเช่น
/*1*/ int a = 2;
/*2*/ float b = 3.5, sum;
/*3*/ sum = a + b;
จะเห็นว่าตัวแปร a เป็นจำนวนเต็มซึ่งมีขอบเขตเล็กกว่าตัวแปร b ซึ่งเป็นชนิดทศนิยม (ศึกษาขอบเขตของตัวแปรได้จากตารางชนิดของตัวแปรในภาษาซี)
ดังนั้นตัวแปร a จะถูกแปลงเป็นชนิดทศนิยมก่อนทำการบวกในบรรทัดที่ 3 ต่อไปพิจารณาคำสั่งด้านล่าง
/*1*/ int a = 2, sum;
/*2*/ float b = 3.5;
/*3*/ sum = a + b;
ถึงแม้ว่าตัวแปร a จะถูกแปลงเป็นชนิดทศนิยมในขั้นตอนการบวก แต่ผลลัพธ์นั้นถูกนำไปเก็บในตัวแปร sum ซึ่งเป็นชนิดจำนวนเต็มและ มีขนาดเล็กกว่าชนิดทศนิยม เพื่อให้ตัวแปรที่มีขนาดเล็กกว่าสามารถเก็บข้อมูลนี้ได้ ตัวแปรภาษาจึงต้องแปลงผลลัพธ์เป็นชนิดจำนวนเต็มโดยการตัดทศนิยมออก ค่าตัวแปร sum จึงเท่ากับ 3
การแปลงชนิดตัวแปรแบบกำหนดเอง นอกจากการแปลงชนิดตัวแปรแบบอัตโนมัติแล้ว เรายังสามารถแปลงชนิดตัวแปรให้เป็นตามที่เราต้องการได้ดังตัวอย่างต่อไปนี้
int a = 8;
float b = 7.7;
char c = 'Z';
int cast1;
float cast2;
cast1 = (int)b; /*แปลงจาก float เป็น int*/
cast1 = (int)c; /*แปลงจาก char เป็น int โดยจะอยู่ในรูปของรหัส ASCII (Z มีค่าเท่ากับ 90) สามารถดูรายละเอียด ได้ที่ http://th.wikipedia.org/wiki/แอสกี*/
cast1 = (int)20.1; /*แปลงจาก float เป็น int*/
cast2 = (float)a; /*แปลงจาก int เป็น float*/
cast2 = (float)c; /*แปลงจาก char เป็น float*/
cast2 = (float)'T'; /*แปลงจาก char เป็น float*/