หลักการเบื้องต้นของภาษาซี
ซอฟต์แวร์แปลภาษาคอมพิวเตอร์ (Translator) ตัวแปลภาษาคอมพิวเตอร์ในปัจจุบัน แบ่งตามลักษณะการแปล ทำการแปลโปรแกรมต้นฉบับ หรือ ซอร์สโคด (source code) ไปเป็นออบเจคโคด (object code) ซึ่งจะประกอบด้วยรหัสคำสั่งที่ คอมพิวเตอร์สามารถเข้าใจและนำไปปฏิบัติได้ต่อไป 1. แอสแซมเบลอ (Assembler) 2. อินเทอพรีเตอร์ (Interpreter) 3. คอมไพเลอร์ (Compiler) Translator : ตัวแปล ชุดคำสั่ง /โปรแกรม (Source Code) ให้เป็นภาษาเครื่อง (MachineLanguage) ซึ่งอยู่ในรูปของ BITS (0,1) An assembler : เป็นโปรแกรม ที่เอาคำสั่งพื้นฐานมาเปลี่ยนให้อยู่ในรูปแบบของ BITS เพื่อให้คอมพิวเตอร์สามารถนำไปใช้ในการทำงาน Interpreter : เป็นตัวแปลภาษาที่ใช้หลักการแปลทีละ 1 คำสั่ง แล้วไปดำเนินการตามที่แปลได้ทันที ทำอย่างนี้ไปจนจบโปรแกรม ข้อดี เมื่อมีข้อผิดพลาดโปรแกรมจะหยุด เพื่อให้แก้ไขได้ทันที ข้อเสีย เมื่อแปลจนครบจะไม่มีการเก็บรหัสออบเจ็ค (Object Code) จึงต้องแปลใหม่ทุกครั้ง Compiler : เป็นตัวแปลภาษาที่จะทำการแปลคำสั่งทั้งโปรแกรมให้เป็นรหัสออบเจ็ค และเก็บรหัสไว้ในแฟ้มเพื่อนำไปใช้งานเมื่อใดก็ได้ ข้อดี ไม่ต้องแปลใหม่ทุกครั้ง ข้อเสีย รหัสออบเจคมีขนาดใหญ่กว่าแบบอินเทอพรีเตอร์
แอสแซมเบลอ (Assembler)
อินเตอร์พรีเตอร์ (Interpreter) - แปลทีละบรรทัดตลอดโปรแกรม - เมื่อพบข้อผิดพลาดจะแจ้งให้ทราบและรอการแก้ไข - ง่ายต่อการแก้ไข แต่จะใช้เวลาค่อนข้างมาก - ภาษาที่ใช้อินเตอร์ปรีเตอร์ คือ ภาษาเบสิก
คอมไพเลอร์ (Compiler) - แปลโปรแกรมให้เป็นภาษาเครื่องทั้งโปรแกรมในครั้งเดียว - เมื่อพบข้อผิดพลาดจะแจ้งให้ทราบและแก้ไขในครั้งเดียว ใช้เวลาสะดวกและรวดเร็ว ภาษาที่ใช้คอมไพเลอร์ คือ ภาษาซี, ฟอร์แทรน, ปาสคาล, โคบอล
องค์ประกอบภาษาซี Elements of C language สิ่งที่ก่อให้เกิดเป็นคำสั่งและระเบียบการใช้คำสั่ง เซตของตัวอักษร (Character set) ค่าคงที่ (Constants) คำหลัก (Keywords) ตัวแปร (Variables) ตัวดำเนินการ (Operators) นิพจน์ (Expression) คำสั่ง (Statements)
เซตของตัวอักขระ Lowercase letters a b c d . . . x y z Uppercase letters A B C D . . . X Y Z Digits 0 1 2 3 . . . 7 8 9 Other characters + - * / \ = ( ) [ ] { } < > ! ; : ? ‘ “ # , $ % ^ & _ | ~ .
รหัสควบคุม(Escape sequences) Alert (bell) Backspace เลื่อนถอยหลัง 1 ตัวและลบตัวอักษรไปด้วย Form feed New line ขึ้นบรรทัดใหม่ เลื่อน Tab ในแนวนอน เลื่อน Tab ในแนวตั้ง ให้ตัวชี้กลับไปอยู่ต้นบรรทัด Null character Single quotation mark Double quotation mark Backslash ASCII character in octal notation ASCII character in hexadecimal notation \a \b \f \n \t \v \r \0 \’ \” \\ \ddd \xxx ความหมาย รหัสควบคุม
รหัสรูปแบบ จำนวนเต็ม ทศนิยม ตัวอักษร 1 ตัวอักษร ตัวแปรชุดหรือข้อความที่เป็นสตริง เลขฐานแปด เลขฐานสิบหก เลขจำนวนเต็มที่ไม่มีเครื่องหมาย ค่าของพอยน์เตอร์ พิมพ์เลข long int %d %f %c %s %0 %x %u %p %lu รูปแบบที่กำหนด รหัสรูปแบบ
ค่าคงที่ เลขจำนวนเต็ม (Integer constants) เลขมีจุดทศนิยม (Floating-point constants) อักขระ (Character constants) สายอักขระ (String constants)
ค่าคงที่เลขจำนวนเต็ม รูปแบบ 1. Digits (เลขฐานสิบ) 2. 0octaldigits (เลขฐานแปด ใช้เลขศูนย์นำหน้า) 3. 0Xhexadecimaldigits (เลขฐานสิบหก ใช้เลขศูนย์กับเอ็กซ์) 0xhexadecimaldigits ตัวอย่าง ค่าคงที่ในรูปฐาน 10 ฐาน 8 ฐาน 16 10 012 0xa หรือ 0XA 32719 077717 0x7fcf หรือ 0X7FCF
ค่าคงที่อักขระ ‘รหัสควบคุม’ รูปแบบ ‘อักขระ’ ตัวอย่าง ค่าคงที่ภาษา C ค่าอักขระ ‘a’ a ‘\a’ การส่งเสียงบี๊บ(alert) ‘\\’ \ (backslash) ‘\x1b’ Esc
คำสงวน คำที่ตัวแปลภาษากำหนดหน้าที่และความหมายเฉพาะ auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while
กฎการตั้งชื่อ ต้องไม่เหมือนคีย์เวิร์ดหรือคำสงวน ชื่อมีความยาวไม่จำกัด แต่คอมไพเลอร์จะรู้ความแตกต่างแค่ 32 ตัวอักษรแรก ชื่อจะต้องเริ่มต้นด้วยตัวอักษร A-Z หรือ a-z ไม่มีการเว้นช่องว่าง ตัวอักษรพิมพ์เล็กพิมพ์ใหญ่จะมีความแตกต่างกัน
ช่วงค่า ชนิดข้อมูล ชนิดตัวแปร ทศนิยม 12 หลัก เลขจำนวนจริงที่มีความแม่นยำ 2 เท่า double ทศนิยม 6 หลัก Floating point เลขทศนิยม float 0 ถึง 65535 Unsigned int เลขจำนวนเต็มแบบไม่ คิดเครื่องหมาย unsigned int -4294967296 ถึง 4294967296 Long int เลขจำนวนเต็มอย่างยาว long int -128 ถึง 127 Short interger เลขจำนวนเต็มแบบ สั้น short int -32768 ถึง 32767 Integer เลขจำนวนเต็ม Int 0 ถึง 255 Character ตัวอักขระ char ช่วงค่า ชนิดข้อมูล ชนิดตัวแปร
ตัวดำเนินการ (Operators) ตัวดำเนินการเชิงคำนวณ (Arithmetic operators) ตัวดำเนินการเพื่อกำหนดค่า(Assignment operators) ตัวดำเนินการเปรียบเทียบ (Relational operators) ตัวดำเนินการตรรกะ (Logical operators) ตัวดำเนินการพิเศษ (Special operators) Increment operator ++ Decrement operator -- Address operator &
ตัวดำเนินการเชิงคำนวณ(Arithmetic operators) สัญลักษณ์ ความหมาย ตัวอย่าง - Negation -x * คูณ x * 2 / หาร x / 2 % หารเก็บเศษ x % 2 + บวก x + 2 - ลบ x - 2 -- การลดค่าครั้งละ 1 a--,--a ++ การบวกค่าครั้งละ 1 a++,++a
Arithmetic operators int a=1, b=2, c=3, d=4; a * b / c (a * b) / c 0 การประกาศตัวแปรและกำหนดค่าเริ่มต้น int a=1, b=2, c=3, d=4; นิพจน์ นิพจน์เทียบเท่า ค่าของนิพจน์ a * b / c a + b % c * 1 8 - -d / b + c (a * b) / c 0 a + ((b % c) * 1) 3 (8 - ((-d) / b)) + c 13
Assignment Operators = Simple assignment x = 2 x = 2 สัญลักษณ์ ตัวอย่าง ความหมาย = Simple assignment x = 2 x = 2 *= Addition assignment x * = 2 x = x*2 /= Division assignment x / = 2 x = x/2 %= Remainder assignment x % = 2 x = x%2 += Addition assignment x + = 2 x = x+2 - = Subtraction assignment x - = 2 x = x-2
Assignment operators int a=1, b=2, c=3, d=4; a += b + c การประกาศตัวแปรและกำหนดค่าเริ่มต้น int a=1, b=2, c=3, d=4; นิพจน์ นิพจน์เทียบเท่า ค่าของนิพจน์ a += b + c b *= c = d + 5 a = (a + (b + c)) 6 b = (b * (c = (d + 5))) 18
Math library Function prototype description double sqrt (double) หาค่ารากที่สอง double sin (double) Sine double cos (double) Cosine double tan (double) Tangent double pow (double, double) หาค่า xy int rand () หาค่าเลขสุ่ม
นิพจน์ รูปแบบ ตัวแปร ตัวดำนินการ ค่าคงที่ a = 5 + 2 ตัวแปร ตัวดำนินการ ตัวแปร a = b + c ชนิดข้อมูล ชนิดข้อมูลของนิพจน์ขึ้นอยู่กับชนิดข้อมูลของค่าคงที่ หรือตัวแปรในนิพจน์ หาก ค่าคงที่หรือตัวแปรมีชนิดข้อมูลต่างกัน ค่าของนิพจน์จะมีชนิดข้อมูลตามชนิดที่มีขนาด ใหญ่ ขนาดของชนิดข้อมูล char < short < int < long < float < double < long double
รูปแบบโปรแกรมภาษาซีอย่างง่าย ส่วนที่ตัวแปลภาษาต้องดำเนินการ ก่อนทำการแปล Preprocessing Directives void main ( ) ส่วนของฟังก์ชั่นหลัก { Declarations ส่วนของการประกาศตัวแปร Statements คำสั่งต่างๆ ซึ่งจะมีผลต่อขั้นตอนการทำงาน }
ตัวอย่าง #include <stdio.h> void main() { clrscr(); int a = 1, b = 2, c = 3; x = a + b; printf(“x = %d \n”, x); }
แบบฝึกหัด ภาษาซีจัดอยู่ในภาษาระดับใด Interpreter คือ Compiler คือ จงบอกว่าการตั้งชื่อตัวแปรต่อไปนี้ถูกต้องหรือไม่ถ้าไม่ถูกต้องเพราะเหตุใ name$ Student_1 ID No Val_num Data1 Data-name CaseOfData 3Sum if sumofsalary
แบบฝึกหัด (ต่อ) จงประกาศชนิดตัวแปรต่อไปนี้ ทำให้ตัวแปร num เก็บค่าเป็นจำนวนเต็ม ทำให้ตัวแปร price, sale เก็บค่าเป็นทศนิยม ทำให้ตัวแปร pi เก็บค่าที่เป็นทศนิยมที่มีความแม่นยำสูงและเก็บ ค่า 3.142857142857 ทำให้ตัวแปร cas เก็บค่าที่เป็นตัวอักษร 1 ตัวอักษร ทำให้ตัวแปร ID เก็บค่าที่เป็นจำนวนเต็มแบบไม่คิดเครื่องหมาย
แบบฝึกหัด (ต่อ) (2147)8 (3B1A)16 (5)8 (F5E)16 (410)8 จงเขียนเลขฐานต่อไปนี้ให้อยู่ในรูปของค่าคงที่ใน ภาษาซี (2147)8 (3B1A)16 (5)8 (F5E)16 (410)8
จงพิมพ์โปรแกรมต่อไปนี้ลงเครื่องคอมพิวเตอร์ คอมไพล์และรันโปรแกรม #include <stdio.h> #include <conio.h> Void main() { int a,b,c; a = 10; b=20; c = a + b; clrscr(); printf(“%d + %d = %d” ,a,b,c); }