Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

Home Explore โครงสร้างภาษาC พื้นฐาน

โครงสร้างภาษาC พื้นฐาน

Published by supachai ghudkam, 2019-09-14 20:03:39

Description: ความรู้ความเข้าใจเกี่ยวกับโครงสร้างของภาษาซี

Search

Read the Text Version

โ ค ร ง ส ร้ า ง ภ า ษ า ซี เ บื้ อ ง ต้ น

โปรแกรมภาษา ในการเขียนโปรแกรมคอมพิวเตอร์ ดว้ ยภาษาระดบั ต่าหรอื ระดบั สงู จะตอ้ งเปล่ยี นภาษานนั้ ใหเ้ ป็นภาษาเครอ่ื ง เพ่ือใหเ้ ครอ่ื งคอมพวิ เตอร์ ทางานได้ โปรแกรมตน้ ฉบบั (Source Program) โปรแกรมท่เี คร่อื งทางานได้ (Executable Program) – การเขียนโปรแกรมดว้ ยแอสเซมบลี (ภาษาระดบั ต่า) เป็นภาษาเคร่อื ง ขัน้ ตอนการแปลงภาษาแอสเซมบลเี ป็ นภาษาเคร่อื ง

โปรแกรมภาษา –การเขียนโปรแกรมดว้ ยภาษาระดบั สงู เป็นภาษาเครอ่ื ง • อนิ เทอรพ์ รเี ตอร์ (Interpreter) interpreter • คอมไพเลอร์ (Compiler) 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 ภาษาซีก็กลายเป็นภาษาท่ีไดร้ บั ความนิยม

โครงสรา้ งโปรแกรมภาษาซี Preprocessor directive void main(void) Global Declarations { main function Local Declarations User define functions Statements ; User define functions } int function () โครงสร้างภาษาซีประกอบด้วยหลายส่วน แต่ { ในการเขยี นไม่จาเป็ นจะต้องเขยี นทุกส่วน Local Declarations Statements ; }

การใช้ Preprocessor Directive ◼ ทุกโปรแกรมตอ้ งมี ◼ ใชเ้ รียกไฟลท์ ่ีโปรแกรมใชใ้ นการทางานร่วมกนั ◼ ใชก้ าหนดคา่ คงที่ใหก้ บั โปรแกรม ◼ เริ่มตน้ ดว้ ยเครื่องหมาย # ◼ ที่เราจะใชก้ นั มี 2 directives คือ ◼ #include ใชส้ าหรับเรียกไฟลท์ ี่โปรแกรมใชในการทางาน ◼ #define ใชส้ าหรับกาหนดมาโครที่ใหก้ บั โปรแกรม #include #define #undef #if #else #elif #ifdef #ifndef #error #pragma #endif #line

การใช้ #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) ◼ ส่วนน้ีทุกโปรแกรมจะตอ้ งมี โดยโปรแกรมหลกั จะเร่ิมตน้ ดว้ ย main() และ ตามดว้ ยเครื่องหมายปี กกาเปิ ด ‘{’ และปี กกาปิ ด ‘}’ ◼ ระหว่างปี กกาจะประกอบไปดว้ ยคาสั่ง(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 ; } int function() { 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() เป็นคาสง่ั ที่ใชใ้ นการแสดงผลออกทางจอภาพ โดยมีรูปแบบการใชง้ านดงั น้ี printf(“control หรือ format string”, variable list …); control หรือ format string เป็ นส่ วนที่ใส่ ข้อความที่จะแสดงผล และส่ วนควบคุมลักษณะการ แสดงผล รวมท้งั บอกตาแหน่งที่ตวั แปรจะแสดงผล variable list เป็ นตัวแปรที่ต้องการจะแสดงผล ในกรณีที่ต้องการแสดงข้อความ ไม่ จาเป็ นต้องมสี ่วนนี้

โปรแกรมท่ี 1 • สรา้ ง folder ช่ือ 517111/รหสั นกั ศกึ ษา • สรา้ งไฟล์ hello.c โดยใหพ้ ิมพค์ าวา่ hello world F2• การใชง้ าน turbo c Save Alt+F9 Compile Ctrl+F9 Compile & Run Alt+F5 Output • พมิ พช์ ่ือตวั เองเพ่มิ อีกหน่ึงบรรทดั

ตวั อย่างโปรแกรม โปรแกรม #include <stdio.h> Backslash n void main() { ขนึ้ บรรทดั ใหม่ printf(“Hello world\\n\"); printf(“Welcome to Computer Programming 1\"); return ; } ผลการทางาน 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 ส่งเสียงปิ้ บ \\\\ \\\" แสดง \\ แสดง \"

ตัวอย่างโปรแกรม โปรแกรม #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); } ผลการทางาน 65 A 101 41 X = 65

การจดั การหน้าจอดว้ ยรหสั ควบคุมลกั ษณะ ในกรณี ที่ต้องการจัดการหน้าจอแสดงผลสามารถใช้ตัวเลขร่ วมกันกับ รหสั ควบคุมได้ เช่น %5dหมายถึง แสดงตวั เลขจานวนเตม็ 5 หลกั อยา่ งต่า %5.2f หมายถึง แสดงตวั เลขจานวนจานวน 5 หลกั อยา่ งต่า และ ทศนิยม 2 ตาแหน่ง ค่า %d %5d ค่า %f %5.2f 12 12 ___12 1.2 1.200000 _1.20 123 123 __123 1.234 1.234000 _1.23 1234 1234 _1234 12.345 12.345000 12.35 12345 12345 12345 123.456 123.456000 123.46

โปรแกรมท่ี 2 X in decimal = 65 X in octadecimal = 101 X in Hexadecimal = 41 Y = 1.234 Y = 1.23e+00 • สรา้ งไฟล์ print.c โดย CH = %C • กาหนด #define ดงั ตอ่ ไปนี้ SU = “Sipakorn –จานวนเต็ม X มีคา่ 65 university” –จานวนจรงิ Y มีคา่ 1.23456 –ตวั อกั ษร CH มีคา่ ‘C’ –ชดุ ตวั อกั ษร SU มีคา่ “Silpakorn university” • พิมพค์ า่ ตา่ งๆ ท่ีกาหนด ใหแ้ สดงผลดงั รูป

การเก็บค่าในภาษา C • ทาได้ 2 ลกั ษณะ คือ – แบบค่าคงท่ี (Constant) – แบบตวั แปร (Variable) • การสรา้ งตวั แปร – ตอ้ งรูว้ ่าจะใชต้ วั แปรเก็บคา่ อะไร – ประกาศตวั แปรใหเ้ หมาะสมกบั คา่ ท่ีจะเก็บ • ชนิดของตวั แปรหลกั ในภาษา C – ตวั แปรท่ีใชเ้ ก็บอกั ขระ (Character variable) – ตวั แปรท่ีใชเ้ ก็บเลขจานวนเต็ม (Integer variable) – ตวั แปรท่ีใชเ้ ก็บเลขจานวนจรงิ (Float variable)

การประกาศตัวแปร รูปแบบของการประกาศตวั แปร ชนิดตวั แปร ชื่อตัวแปร; int i; ประกาศ i ใหช้ นิดเป็น integer float realnum; ประกาศ realnum ใหม้ ีชนิดเป็น float char ch; ประกาศ ch ใหช้ นิดเป็น character

ชนิดของตัวแปร ประเภทข้อมูล คาอธิบาย ค่าทเี่ กบ็ ได้ ขนาด (ไบต์) char ตวั อกั ษร 1 ตัว -128 ถึง 127 1 short int ตวั เลข -128 ถึง 127 1 long จานวนเตม็ float double ตัวเลขจานวนเต็ม -32768 ถึง 32767 2 ตวั เลข -232 ถึง 232-1 4 จานวนเตม็ ตวั เลขทศนิยม 3.4E+/-38 (7 ตาแหน่ง) 4 ตวั เลข 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) ชอ่ื (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 if static While do _cs _ds asm cdecl far _es _ss near pascal huge interrupt _export

วีธีการสรา้ งตัวแปรและกาหนดค่า #include <stdio.h> #include <stdio.h> void main () void main () { { int age; int age = 20; char sex; char sex = ‘ f ’; float grade; float grade = 3.14; char name[10] = “malee” age = 20; sex = ‘ f ’; printf(“you are grade = 3.14; %s\\n”,name); } ... }

นิพจน์ • นิพจนอ์ าจประกอบดว้ ย a+b x=y –ตวั แปร c=a+b –ค่าคงท่ี x == y –การเรียกใช้ฟังกช์ ัน ++i –หรือมตี วั ดาเนินการร่วมอยกู่ ไ็ ด้

ตัวดาเนินการ ลาดบั ความสาคญั มาก กลุ่มของตัวดาเนินการ ตวั ดาเนนิ การ ตวั ดาเนนิ การยนู ารี - ++ -- ! sizeof (type) คูณ หาร และหาเศษเหลือ */ % +- บวกและลบ < <= > >= ตัวดาเนินการเปรียบเทียบ == != && ตวั ดาเนินการเทยี บเท่า || ?: AND = += -= *= /= %= OR ตัวดาเนนิ การเงอื่ นไข ลาดบั ความสาคญั นอ้ ย ตวั ดาเนนิ การกาหนดคา่

โปรแกรมท่ี 3 • สรา้ งไฟล์ triangle.c โดยให้ – รบั ค่าฐานเป็นเลขจานวนจรงิ – รบั คา่ ความสงู เป็นเลขจานวนจรงิ – คานวนหาคา่ พนื้ ท่ีของสามเหล่ียม • Area = ½ * ฐาน * สงู

การใช้ SCANF() เป็นคาส่ังท่ีใชใ้ นการรับคา่ โดยมีรูปแบบการใชง้ านดงั น้ี 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 65 66 B 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

ตัวอย่างโปรแกรม Input Base = 12.0 Input Base = 3.2 Input Height = 6.0 Input Height = 1.2 Area of triangle is 36.00 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

ตวั อย่างโปรแกรม 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