โครงสร้างภาษาซีเบื้องต้น ใช้สำหรับ Turbo C++ Version 3.0
ขั้นตอนการแปลงภาษาแอสเซมบลีเป็นภาษาเครื่อง โปรแกรมภาษา ในการเขียนโปรแกรมคอมพิวเตอร์ ด้วยภาษาระดับต่ำหรือระดับสูง จะต้องเปลี่ยนภาษานั้นให้เป็นภาษาเครื่อง เพื่อให้เครื่องคอมพิวเตอร์ทำงานได้ โปรแกรมต้นฉบับ (Source Program) โปรแกรมที่เครื่องทำงานได้ (Executable Program) การเขียนโปรแกรมด้วยแอสเซมบลี (ภาษาระดับต่ำ) เป็นภาษาเครื่อง ขั้นตอนการแปลงภาษาแอสเซมบลีเป็นภาษาเครื่อง
ขั้นตอนการแปลภาษาโปรแกรม โปรแกรมภาษา การเขียนโปรแกรมด้วยภาษาระดับสูงเป็นภาษาเครื่อง อินเทอร์พรีเตอร์ (Interpreter) คอมไพเลอร์ (Compiler) ขั้นตอนการแปลภาษาโปรแกรม
ขั้นตอนพัฒนาโปรแกรม การเขียนโปรแกรมคอมพิวเตอร์ให้ทำงานได้ตามเราต้องการ ผู้เขียนโปรแกรมจะต้องรู้ว่าจะให้โปรแกรมทำอะไร มีข้อมูลอะไร และต้องการอะไรจากโปรแกรม รวมทั้งรูปแบบการแสดงผลด้วย โดยทั่วไปจะมีขั้นตอนการพัฒนาโปรแกรม ดังนี้ การกำหนดและวิเคราะห์ปัญหา การเขียนผังงานและซูโดโค๊ด การเขียนโปรแกรม การทดสอบและแก้ไขโปรแกรม การทำเอกสารและบำรุงรักษาโปรแกรม
แนะนำภาษาซี ภาษาที่เป็นโครงสร้าง คำสั่งประกอบด้วยพจน์ (term) ซึ่งจะมีลักษณะเหมือนกับนิพจน์ทางพีชคณิต มีส่วนขยายเป็นคำหลัก (keyword) ในภาษาอังกฤษ เช่น if, else, for, do และ while สามารถใช้งานในระดับต่ำ (low-level) ได้ สามารถใช้กับงานด้านโปรแกรมระบบ (system programming) เช่น เขียนโปรแกรมระบบปฏิบัติการ (operating system) หรือใช้กับงานทั่ว ๆ ไป สามารถย้ายไปทำงานในเครื่องอื่นได้
ประวัติภาษาซี ภาษาซีพัฒนาขึ้นมาในปี 1970 โดย Dennis Ritchie แห่ง Bell Telephone Laboratories, Inc. (ปัจจุบันคือ AT&T Bell Laboratories) ต้นกำเนิดมาจากภาษา 2 ภาษา คือ ภาษา BCPL และ ภาษา B ภาษาซีนั้นถูกใช้งานอยู่ เพียงใน Bell Laboratories จนกระทั่งปี 1978 Brian Kernighan และ Ritchie นั้นเป็นที่รู้จักกันในชื่อของ "K&R C" ในกลางปี 1980 ภาษาซีก็กลายเป็นภาษาที่ได้รับความนิยม
โครงสร้างโปรแกรมภาษาซี void main(void) { } Statements ; Local Declarations Preprocessor directive Global Declarations main function User define functions int function () โครงสร้างภาษาซีประกอบด้วยหลายส่วน แต่ในการเขียนไม่จำเป็นจะต้องเขียนทุกส่วน
การใช้ Preprocessor Directive ทุกโปรแกรมต้องมี ใช้เรียกไฟล์ที่โปรแกรมใช้ในการทำงานร่วมกัน ใช้กำหนดค่าคงที่ให้กับโปรแกรม เริ่มต้นด้วยเครื่องหมาย # ที่เราจะใช้กันมี 2 directives คือ #include ใช้สำหรับเรียกไฟล์ที่โปรแกรมใชในการทำงาน #define ใช้สำหรับกำหนดมาโครที่ให้กับโปรแกรม #include #define #undef #if #ifdef #ifndef #else #elif #endif #line #error #pragma
#include <ชื่อไฟล์> หรือ #include “ชื่อไฟล์” วิธีการใช้งาน #include <ชื่อไฟล์> หรือ #include “ชื่อไฟล์” ตัวอย่าง #include <stdio.h> (เป็นการเรียกใช้ไฟล์ stdio.h เข้ามาในโปรแกรม) #include <mypro.h> (เป็นการเรียกใช้ไฟล์ mypro.h เข้ามาในโปรแกรม) < > จะเรียกไฟล์ใน directory ที่กำหนดโดยตัวคอมไพล์เลอร์ “ ” จะเรียกไฟล์ใน directory ทีทำงานอยู่ในปัจจุบัน
#define ชื่อ ค่าที่ต้องการ วิธีการใช้งาน #define ชื่อ ค่าที่ต้องการ ตัวอย่าง #define START 10 (กำหนดค่า START = 10) #define A 3*5/4 (กำหนดค่า A=3*5/4) #define pi 3.14159 (กำหนดค่า pi = 3.14159) #define sum(a,b) a+b (กำหนดค่า sum(ตัวแปรที่1, ตัวแปรที่2) = ตัวแปรที่1+ตัวแปรที่2
ส่วนประกาศ (Global Declarations) เป็นการประกาศตัวแปรเพื่อใช้งานในโปรแกรม โดยตัวแปรนั้นสามารถใช้ได้ในทุกที่ในโปรแกรม เป็นส่วนที่ใช้ในการประกาศ Function Prototype ของโปรแกรม ส่วนนี้ในบางโปรแกรมอาจจะไม่มีก็ได้ ตัวอย่าง int summation(float x, float y) ; (ประกาศ function summation) int x,y ; (กำหนดตัวแปร x,y เป็นจำนวนเต็ม) float z=3; (กำหนดตัวแปร z เป็นจำนวนจริง)
ส่วนประกาศ (Global Declarations) ตัวอย่าง #include <stdio.h> int feet,inches; void main() { feet = 6; inches = feet * 12; printf("Height in inches is %d",inches); } ผลการทำงาน Height in inches is 72
ฟังก์ชันหลักของโปรแกรม (Main Function) ระหว่างปีกกาจะประกอบไปด้วยคำสั่ง(Statement) ต่างๆ ที่จะให้โปรแกรมทำงาน แต่ละคำสั่งจะต้องจบด้วยเซมิโคลอน ‘;’ (Semicolon) #include <stdio.h> void main(void) { ... Statement ; }
ฟังก์ชันหลักของโปรแกรม (Main Function) ตัวอย่าง #include <stdio.h> int feet,inches; void main() { feet = 6; inches = feet * 12; printf("Height in inches is %d",inches); } ผลการทำงาน Height in inches is 72
การสร้างฟังก์ชันใช้งานเอง (User Define Function) สร้างฟังก์ชันหรือคำใหม่ ขึ้นมาใช้งานตามที่เราต้องการ ระหว่างปีกกาจะประกอบด้วยคำสั่ง(Statement) ต่างๆ ที่จะให้ฟังก์ชันทำงาน สามารถเรียกใช้ภายในโปรแกรมได้ทุกที่ #include <stdio.h> int function() void main(void) { ... Statement ; } return (int value);
การสร้างฟังก์ชันใช้งานเอง (User Define Function) ตัวอย่าง #include <stdio.h> int Feet2Inch(int); int feet,inches; void main() { feet = 6; inches = Feet2Inch(feet); printf("Height in inches is %d",inches); } int Feet2Inch(int f) return f*12; ผลการทำงาน Height in inches is 72
การใช้คำอธิบาย (Program Comments) ใช้เขียนส่วนอธิบายโปรแกรม (คอมเมนต์) ช่วยให้ผู้ศึกษาโปรแกรมภายหลังเข้าใจการทำงานของโปรแกรม ส่วนของคำอธิบายจะถูกข้ามเมื่อคอมไพล์โปรแกรม การเขียนส่วนอธิบายโปรแกรม (comments)ทำได้ 2 วิธีคือ // สำหรับคำอธิบายไปจนถึงท้ายบรรทัด และ /* คำอธิบาย */ ลักษณะการใช้เหมือนวงเล็บนั้นเอง
การใช้คำอธิบาย (Program Comments) ตัวอย่าง #include <stdio.h> // Change Feet to Inches void main() // main function { // Start int feet,inches; feet = 6; // feet 6 inches = feet * 12; // inches feet * 12 printf("Height in inches is %d", inches); // write inches } // Stop ผลการทำงาน Height in inches is 72
printf(“control หรือ format string”, variable list …); เป็นคำสั่งที่ใช้ในการแสดงผลออกทางจอภาพ โดยมีรูปแบบการใช้งานดังนี้ printf(“control หรือ format string”, variable list …); control หรือ format string เป็นส่วนที่ใส่ข้อความที่จะแสดงผล และส่วนควบคุมลักษณะการแสดงผล รวมทั้งบอกตำแหน่งที่ตัวแปรจะแสดงผล variable list เป็นตัวแปรที่ต้องการจะแสดงผล ในกรณีที่ต้องการแสดงข้อความ ไม่จำเป็นต้องมีส่วนนี้
โปรแกรมที่ 1 F2 Save Alt+F9 Compile Ctrl+F9 Compile & Run สร้าง folder ชื่อ 517111/รหัสนักศึกษา สร้างไฟล์ hello.c โดยให้พิมพ์คำว่า hello world การใช้งาน turbo c พิมพ์ชื่อตัวเองเพิ่มอีกหนึ่งบรรทัด F2 Save Alt+F9 Compile Ctrl+F9 Compile & Run Alt+F5 Output
ตัวอย่างโปรแกรม โปรแกรม ผลการทำงาน ขึ้นบรรทัดใหม่ #include <stdio.h> void main() { printf(“Hello world\n"); printf(“Welcome to Computer Programming 1"); return ; } Backslash n ขึ้นบรรทัดใหม่ ผลการทำงาน Hello world Welcome to Computer Programming 1
คำแนะนำ โปรแกรม เคลียร์หน้าจอ รอรับค่าจากคีย์บอร์ด #include <stdio.h> main () { clrscr(); …. getch(); } เคลียร์หน้าจอ รอรับค่าจากคีย์บอร์ด
การใช้ Control ด้วย Backslash จากตัวอย่างที่ 3 จะเห็นได้ว่าหากต้องการให้แสดงผลข้ามบรรทัดจะต้องเพิ่ม \n ลงไป เรียกว่า backslash นอกจากนี้ยังมีตัวอื่นๆ เช่น \n ขึ้นบรรทัดใหม่ \t เว้นระยะ 1 tab \xhh ใส่ตัวอักษร hh เมื่อ hh เป็นเลขฐานสิบหก เช่น 41 = 'A', 42 = 'B' \a ส่งเสียงปิ้บ \\ แสดง \ \" แสดง "
ตัวอย่างโปรแกรม โปรแกรม ผลการทำงาน %d %5.2f %s คือ รหัสควบคุม #include <stdio.h> main() { printf("%d %5.2f %s", 12, 20.3, "Example"); } ผลการทำงาน 12 20.30 Example %d %5.2f %s คือ รหัสควบคุม
รหัสควบคุมลักษณะ (Format String) %d พิมพ์จำนวนเต็มฐานสิบ %u พิมพ์เลขไม่มีเครื่องหมาย %f พิมพ์เลขทศนิยม %e พิมพ์ในรูปจำนวนจริงยกกำลัง %c พิมพ์ตัวอักษรตัวเดียว %s พิมพ์ชุดตัวอักษร (String) %% พิมพ์เครื่องหมาย % %o พิมพ์เลขฐานแปด %x พิมพ์เลขฐานสิบหก
ตัวอย่างโปรแกรม โปรแกรม ผลการทำงาน #include <stdio.h> #define x 65 main() { printf("%d %c %o %x\n", x, x, x, x); printf(“x = %d”, x); } ผลการทำงาน A 101 41 X = 65
การจัดการหน้าจอด้วยรหัสควบคุมลักษณะ ในกรณีที่ต้องการจัดการหน้าจอแสดงผลสามารถใช้ตัวเลขร่วมกันกับรหัสควบคุมได้ เช่น %5d หมายถึง แสดงตัวเลขจำนวนเต็ม 5 หลักอย่างต่ำ %5.2f หมายถึง แสดงตัวเลขจำนวนจำนวน 5 หลักอย่างต่ำ และ ทศนิยม 2 ตำแหน่ง ค่า %d %5d 12 ___12 123 __123 1234 _1234 12345 ค่า %f %5.2f 1.2 1.200000 _1.20 1.234 1.234000 _1.23 12.345 12.345000 12.35 123.456 123.456000 123.46
โปรแกรมที่ 2 จำนวนเต็ม X มีค่า 65 จำนวนจริง Y มีค่า 1.23456 X in decimal = 65 X in octadecimal = 101 X in Hexadecimal = 41 Y = 1.234 Y = 1.23e+00 CH = %C SU = “Sipakorn university” โปรแกรมที่ 2 สร้างไฟล์ print.c โดย กำหนด #define ดังต่อไปนี้ จำนวนเต็ม X มีค่า 65 จำนวนจริง Y มีค่า 1.23456 ตัวอักษร CH มีค่า ‘C’ ชุดตัวอักษร SU มีค่า “Silpakorn university” พิมพ์ค่าต่างๆ ที่กำหนด ให้แสดงผลดังรูป
การเก็บค่าในภาษา C ทำได้ 2 ลักษณะ คือ การสร้างตัวแปร แบบค่าคงที่ (Constant) แบบตัวแปร (Variable) การสร้างตัวแปร ต้องรู้ว่าจะใช้ตัวแปรเก็บค่าอะไร ประกาศตัวแปรให้เหมาะสมกับค่าที่จะเก็บ ชนิดของตัวแปรหลักในภาษา C ตัวแปรที่ใช้เก็บอักขระ (Character variable) ตัวแปรที่ใช้เก็บเลขจำนวนเต็ม (Integer variable) ตัวแปรที่ใช้เก็บเลขจำนวนจริง (Float variable)
การประกาศตัวแปร int i; ประกาศ i ให้ชนิดเป็น integer รูปแบบของการประกาศตัวแปร ชนิดตัวแปร ชื่อตัวแปร; int i; ประกาศ i ให้ชนิดเป็น integer float realnum; ประกาศ realnum ให้มีชนิดเป็น float char ch; ประกาศ ch ให้ชนิดเป็น character
char short int long float double ชนิดของตัวแปร ประเภทข้อมูล คำอธิบาย ค่าที่เก็บได้ ขนาด (ไบต์) char ตัวอักษร 1 ตัว -128 ถึง 127 1 short ตัวเลขจำนวนเต็ม int -32768 ถึง 32767 2 long -232 ถึง 232-1 4 float ตัวเลขทศนิยม 3.4E+/-38 (7 ตำแหน่ง) double 1.7E+/-308 (15 ตำแหน่ง) 8
การประกาศตัวแปรชนิดเดียวกัน เราสามารถประกาศตัวแปรหลายๆตัว ที่มีชนิดเดียวกันโดยใช้เพียง ประโยค(statement) เดียวได้ โดยใช้รูปแบบ 1. การประกาศทีละตัว เช่น int i; int j; int k; 2. การประกาศพร้อมกันหลายตัว เช่น int i, j, k;
การประกาศตัวแปรพร้อมให้ค่าเริ่มต้น ในภาษา C ประโยค (statement) ของการประกาศตัวแปร สามารถกำหนดค่าเริ่มต้นให้กับตัวแปรได้ทันที โดยใช้รูปแบบ เช่น int i = 5; ชนิดตัวแปร ชื่อตัวแปร = ค่าเริ่มต้น; นอกจากนี้ยังสามารถประกาศ หลายๆ ตัวแปรในบรรทัดเดียว กันได้อีก เช่น int i = 5, k = 3, y;
หลักการตั้งชื่อ (Identifier) ไอเดนติฟายเออร์ เป็นชื่อที่ผู้ใช้กำหนดขึ้นในโปรแกรม เช่น ชื่อค่าคงที่ ชื่อตัวแปร ชื่อฟังก์ชัน เป็นต้น ต้องขึ้นต้นด้วยตัวอักษรภาษาอังกฤษ (ตัวใหญ่หรือเล็กก็ได้) หรือขีดล่าง ‘_’ ตามด้วยตัวอักษรภาษาอังกฤษ ตัวเลข หรือขีดล่าง (Underscore) ‘_’ ไม่มีช่องว่างหรือตัวอักษรพิเศษอื่นๆ เช่น ‘!’, ‘@’, ‘#’, ‘$’, ‘%’, ‘^’ เป็นต้น ตัวพิมพ์ใหญ่และเล็กจะเป็นคนละตัวกันเช่น NAME, name, Name, NamE ห้ามซ้ำกับคำสงวน Reserve Words ของภาษา C ห้ามตั้งชื่อซ้ำกับ Function ที่อยู่ใน Library ของภาษา C
คำสงวน Reserve Words ของภาษา C auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if static While asm _cs _ds _es _ss cdecl far huge interrupt near pascal _export
วีธีการสร้างตัวแปรและกำหนดค่า #include <stdio.h> void main () { int age; char sex; float grade; age = 20; sex = ‘ f ’; grade = 3.14; } #include <stdio.h> void main () { int age = 20; char sex = ‘ f ’; float grade = 3.14; char name[10] = “malee” printf(“you are %s\n”,name); ... }
นิพจน์ นิพจน์อาจประกอบด้วย ตัวแปร ค่าคงที่ การเรียกใช้ฟังก์ชัน หรือมีตัวดำเนินการร่วมอยู่ก็ได้ a + b x = y c = a + b x == y ++i
ตัวดำเนินการ ลำดับความสำคัญมาก ลำดับความสำคัญน้อย
โปรแกรมที่ 3 สร้างไฟล์ triangle.c โดยให้ รับค่าฐานเป็นเลขจำนวนจริง รับค่าความสูงเป็นเลขจำนวนจริง คำนวนหาค่าพื้นที่ของสามเหลี่ยม Area = ½ * ฐาน * สูง
scanf(“format string”, address list …); เป็นคำสั่งที่ใช้ในการรับค่า โดยมีรูปแบบการใช้งานดังนี้ scanf(“format string”, address list …); format string เป็นส่วนที่ใช้ในการใส่รูปแบบของการรับข้อมูล address list เป็นตำแหน่งของตัวแปรที่ต้องการจะเก็บข้อมูล
ตัวอย่างโปรแกรม โปรแกรม ผลการทำงาน #include <stdio.h> void main() { int x ; scanf("%d",&x); printf("%d %c", x, x); return ; } ผลการทำงาน 66 66 B 65 65 A
ตัวอย่างโปรแกรม โปรแกรม ผลการทำงาน #include <stdio.h> void main() { char s1[80], s2[80] ; scanf("%[0-9]%[a-zA-Z]", s1, s2); printf("%s %s", s1, s2); return ; } ผลการทำงาน 1234test 1234 test test1234 test
ตัวอย่างโปรแกรม #include <stdio.h> void main() { Input Base = 12.0 Input Height = 6.0 Area of triangle is 36.00 Input Base = 3.2 Input Height = 1.2 Area of triangle is 1.92 #include <stdio.h> void main() { float b,h,area ; printf("Input Base = "); scanf("%f",&b); printf("Input Height = "); scanf("%f",&h); area = 0.5*b*h ; printf("Area of triangle is %5.2f",area); return ; }
โปรแกรมที่ 4 สร้างไฟล์ circle.c โดยให้ รับค่ารัศมีเป็นเลขจำนวนจริง กำหนดค่าคงที่ PI มีค่า 3.14159 คำนวนหาค่าพื้นที่ของวงกลม Area = PI* (รัศมี)2
ตัวอย่างโปรแกรม /* program to calculate area of a circle */ Input Radias = 12.0 Area of circle is 452.39 /* program to calculate area of a circle */ #include <stdio.h> #define PI 3.14159 main() { float radius, area; printf(“Input Radius = ?"); scanf("%f", &radius); area = PI * radius * radius; printf("Area of circle is %7.2f ", area); }
โปรแกรมที่ 5 สร้างไฟล์ donut.c โดยให้ รับค่ารัศมีของวงกลม 2 วง กำหนดค่าคงที่ PI มีค่า 3.14159 คำนวนหาค่าพื้นที่ของวงกลมส่วนสีเทา
ตัวอย่างโปรแกรม #include <stdio.h> #define PI 3.14159 main() { float radius1,radius2, area1, area2; printf("Input outer radius ="); scanf(%f, &radius1); printf("Input inner radius ="); scanf(%f, &radius2); if (radius2 < radius1) { area1 = PI * radius1 * radius1; area2 = PI * radius2 * radius2; printf("Area of donut is %5.2f", area1-area2); }
จบโครงสร้างภาษาซีเบื้องต้น Question ?
คำถามเกี่ยวกับ printf() จากส่วนของโปรแกรม yards = 8; feet = yards * 3; printf(“%d yards is \n”, yards); Printf(“%d feet”, feet); ผลการทำงาน คือ ? 8 yards is 24 feet
ตัวอย่างโปรแกรม โปรแกรม ผลการทำงาน #include <stdio.h> void main() { char s1[80], s2[80] ; scanf("%[^0-9]%[^a-zA-Z\n]", s1, s2); printf("%s %s", s1, s2); return ; } ผลการทำงาน test1234 test 1234 1234test 1234