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_language

c_language

Published by aunchaleechanpraphai, 2021-01-11 05:16:45

Description: c_language

Search

Read the Text Version

ภาษาซีเบอื้ งต้น

เน้ อื หา • องคป์ ระกอบของภาษาซี • โครงสร้างโปรแกรมภาษาซี • ชนิดของข้อมูล ตัวแปร • คาส่งั ควบคุมการไหลของโปรแกรม ตวั ดาเนนิ การ • ฟังกช์ ัน • ข้อผดิ พลาดท่พี บบ่อย 2

โครงสรา้ งของโปรแกรมภาษาซี โครงสรา้ งประกอบดว้ ย สว่ นประมวลผลกอ่ น สว่ นประกาศสว่ นกลาง 1. สว่ นประมวลผลกอ่ น สว่ นตน้ แบบฟังกช์ นั Preprocessor สว่ นของฟังกช์ นั 2. สว่ นประกาศสว่ นกลาง Declaration 3. สว่ นตน้ แบบฟังกช์ นั่ Function Prototype 4. สว่ นของฟังกช์ น่ั Function Body Department of Computer 310322 C Programming Science 3/30

ภาษาซี (C Language) คณุ สมบตั ิ  เป็ นภาษาระดับสงู  ไมข่ น้ึ กบั ระบบปฏบิ ัตกิ าร (OS)  ไมข่ น้ึ กบั ชนดิ ของเครอ่ื งคอมพวิ เตอร์  เป็ นภาษาโครงสรา้ ง (Structure Language) Department of Computer 310322 C Programming Science 4/30

เริ่มตน้ ใชง้ าน Dev-C++ • สร้างไฟล์ใหม่จากเมนู File > New > Source File • ทดลองกรอกโปรแกรม ตามตวั อย่างด้านขวา • เซฟไฟล์โดยใช้นามสกุล .c  เช่น first.c 5

เริม่ ตน้ ใชง้ าน Dev-C++ • ทดลองคอมไพลแ์ ละรันโปรแกรม  โดยคล้ิกป่ ุม  หรือกด F9 • หากดผู ลลัพธไ์ ม่ทนั :  เพ่ิมคาส่งั getch() ด้านท้ายของโปรแกรม 6

การประกาศตวั แปรในภาษาซี การประกาศชอ่ื ตวั แปรในภาษาซสี ามารถทาไดด้ งั นี้ <ชนดิ ขอ้ มลู > <ชอื่ ตวั แปร>; ตวั อยา่ งเชน่ char ch; double height; int num; unsigned int a; float width; long int b; Department of Computer 310322 C Programming Science 7/30

ตวั อยา่ งโปรแกรมภาษาซี ฟังกช์ ัน main ระบุ #include <stdio.h> อ่านไฟล์ stdio.h เพ่ือเอา จุดเร่ิมต้นของโปรแกรม int main() ฟังกช์ ันมาตรฐานมาใช้ คืนค่ากลับเป็น int { ฟังกช์ ันมาตรฐาน printf() ใช้พิมพ์ข้อความออกทาง int a, b, sum; ประกาศตัวแปรแบบ int หน้าจอ printf(\"Enter A: \"); สามตวั คอื a, b และ sum scanf(\"%d\", &a); printf(\"Enter B: \"); ฟังกช์ ันมาตรฐาน scanf() scanf(\"%d\", &b); sum = a+b; ใช้รับอนิ พุทจากแป้ นพิมพ์ printf(\"Sum = %d\\n\", sum); getch(); return 0; เม่ือจบในแต่ละคาส่งั ให้ปิ ด } ท้ายด้วย ; คนื ค่า 0 เพ่ือระบุว่า โปรแกรมจบการทางานโดย ไม่มีข้อผดิ พลาด 8

การเขียนหมายเหตุ (Comment) • เป็นการเขียนอธิบายการทางานเพอื่ ให้เข้าใจและอา่ น โปรแกรมได้ง่ายขนึ ้ และจะไมถ่ กู ประมวลผล • รูปแบบการเขียนหมายเหตุ /* … ข้อความที่ต้องการเขียนอธิบาย(หลายบรรทดั )… */ // … ข้อความที่ต้องการเขยี นอธิบาย (หนง่ึ บรรทดั ) … 9 เชน่ /* arithmetic expression */ // create 22/06/2552

ค่าคงที่อกั ขระพิเศษ \\a ตวั อกั ษรเรียกความสนใจ (Beep) \\n ข้นึ บรรทดั ใหม่ (newline) \\\\ backslash \\? เครื่องหมายคาถาม \\’ ฝนทอง \\” ฟันหนู 10

โครงสรา้ งหนว่ ยความจา ตาแหน่งที่อยู่ ขอ้ มูลทีเ่ ก็บ 1 ช่อง = 1 ไบต์ (8 บติ ) (address) (data) 0000 32 0001 67 0002 255 0003 0 0004 121 :: 11

ชนดิ ขอ้ มูล การประกาศ ขนาด ค่าต่าสุด ค่าสูงสุด char (ไบต์) short int 1 -128 +127 long float 2 -32,768 +32,767 double 2 หรือ 4 -32,768 หรือ -2,147,483,648 +32,767 หรือ +2,147,483,647 4 -2,147,483,648 +2,147,483,647 4 3.4 * 10-38 3.4 * 1038 8 1.7 * 10-308 1.7 * 10-308 12

ตวั แปร (Variable) • ใช้แทนการอ้างถงึ หน่วยความจา ณ ตาแหน่งหน่ึง ๆ  เพ่ือใช้ในการเกบ็ ข้อมูล (ท่เี ปล่ียนค่าได้) ในขณะ ประมวลผล ตาแหน่ง ค่า short a, b, sum; : : a = 10; 1000 120 a b = 5; 1001 sum = a+b; 1002 300 1003 2511 b 1004 50 185 sum 1005 203 b มคี ่า 5 (อ้างถงึ ค่า) :: b มีค่า 1002 (อ้างถงึ ตาแหน่ง) 13

กฏในการต้งั ชื่อตวั แปร (Variable)  ประกอบด้วยอกั ษร ตวั เลข และเคร่ืองหมาย underscore (_)  ตวั แรกต้องเป็ นตวั อกั ษรหรือ เครื่องหมาย underscore (_)  ความยาว 1-32 ตวั อกั ษร  ห้ามมีเคร่ืองหมายอนื่ ยกเว้น $  Case sensitive  ห้ามตงั้ ช่ือซา้ กบั คาสงวน (Reserve words) 14

คาสงวนในภาษา 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 while do 15

รูปแบบการประกาศชนดิ ตวั แปร type variable-list [=value] ; • variable-list หมายถงึ ชื่อตวั แปรท่ีต้องการ ประกาศ ถ้ามีมากกวา่ 1 ตวั แยกกนั ด้วยเคร่ืองหมาย คอมมา่ ( , )  type หมายถงึ ชนิดของตวั แปร  value หมายถงึ คา่ เร่ิมต้นท่ีต้องการกาหนดให้กบั ตวั แปร 16

ตวั อย่าง การประกาศชนดิ ตวั แปร int a=1; int lower; float man,ratio; double point; char ch,c=‘5’,name; 17

ค่าคงที่ #include <stdio.h> const.c #define PI 3.414 int main() 3.414 { printf(\"%.3f\",PI); getch(); return 0; } 18

นพิ จน์ (Expression) • นิพจน์ หมายถงึ การนาตวั แปร ค่าคงท่ี มาสมั พันธก์ นั โดยใช้เคร่ืองหมายอย่างหน่ึงอย่างใดเป็นตวั เช่ือม เช่น นพิ จนค์ ณิตศาสตร์ นพิ จนภ์ าษา C a+b (a+b)/ (c*d) cd 10x + 3xy + 10y 10 * x + 3*x*y + 10*y 19

กฎเกณฑใ์ นการเขยี นนพิ จน์ • 1. ห้ามเขยี นตวั แปร 2 ตวั ตดิ กนั โดยไม่มีเคร่ืองหมาย คไเชม่า่น่ไaดค้เaพูณbราbใะนจภะาถษอื าเปC็นตช้อ่ืองตเขวั ียแนปรaต*วั bเดจยีะเวขชยี ่ือนaเbป็นไมa่ใbช่ • 2ต.่าถง้ชาเนขิดียกนนันใิพนจนนิพโ์ ดจนยม์เดีคีย่าวขกอนั งตภัวาแษปารCหรจือะเคป่าลค่ียงนท่ี ชนิดของข้อมูลท่มี ีขนาดเลก็ ให้เป็นชนิดของข้อมูลท่ี ใหญ่ข้นึ เช่น 20

ถ้าใช้ char กับ int จะเปล่ียนเป็ น int “ float กับ double “ double “ int กับ float “ float “ int กับ long “ long “ int กับ double “ double “ int กบั unsigned “ unsigned “ long กับ double “ double “ อะไร กบั long “ long “ อะไร กับ long double “ long double 21

ข้อมูลชนิดตัวอักษร • ตวั อกั ษร A-Z, 0-9 และสญั ลกั ษณ์ตา่ ง ๆ ข้อมลู ชนิด ตวั อกั ษรจะใช้จานวน 8 บติ ในการเก็บตวั อกั ษร 1 ตวั ซงึ่ ใน ภาษาซีไมม่ ีข้อมลู ชนิดข้อความ หรือ สตริง (String) ข้อมลู ชนิด ข้อความจะประกอบด้วยตวั อกั ษรหลาย ๆ ตวั เรียงตดิ กนั เป็ น ข้อความ โดยใช้อาร์เรย์ (Array) ในการจดั เก็บ ซง่ึ เราเรียกวา่ Array of Character อาร์เรย์ทีใ่ ช้เก็บข้อมลู ชนิดข้อความ จะต้อง มีจานวนมากกวา่ ความยาวของข้อความ หรือสตริงอยา่ งน้อย 1 ตวั อกั ษร เพ่ือใช้เกบ็ สตริงศนู ย์ (Null String) เพอ่ื บอกให้ทราบ วา่ สนิ ้ สดุ ความยาวของข้อความ ซงึ่ ในภาษาซจี ะใช้ \\0 แทน สตริงศนู ย์ 22

เคร่ืองหมายคณิตศาสตร์ • เคร่ืองหมายคณิตศาสตร์ (Arithmetic Operators) เคร่ืองหมาย ความหมาย ตวั อยา่ ง + การบวก A+B - การลบ A-B * การคณู A*B / การหาร A/B % การหารเอาแตเ่ ศษไว้ 5%3 = 2 (Modulus) -- การลดคา่ ลงครัง้ ละ 1 A-- มีคา่ เทา่ กบั A = A-1 ++ การเพม่ิ ค่าขนึ ้ ครัง้ ละ 1 A++ มีคา่ เทา่ กบั A = A+1 23

นิพจน์คณิตศาสตร์ (Expression) • นิพจน์คณิตศาสตร์ประกอบด้วย ตวั แปร หรือ คา่ คงท่ี ที่เช่ือม กนั ด้วยเครื่องหมายคณิตศาสตร์ การเขียนนิพจน์คณิตศาสตร์ จะคล้ายกบั สมการคณิตศาสตร์ เชน่ x = (n1 + n2) x10 • เมอื่ เขียนเป็นนิพจน์คณิตศาสตร์จะได้ดงั นี ้ x = (n1 + n2) * 10 • นิพจน์ทอ่ี ยชู่ นั้ ในสดุ จะถกู ประมวลผลก่อน เครื่องหมาย คณิตศาสตร์ที่มีลาดบั เดียวกนั จะถกู ประมวลผลจากซ้ายไปขวา 24

2. ตวั ดำเนินกำรเลขคณิต (arithmetic operators) เป็ นตัวดำเนินกำรท่ีทำให้เกดิ กำรกระทำทำงคณติ ศำสตร์ ประกอบด้วย operator ควำมหมำย + - กำรบวก * / กำรลบ และ unary operator % กำรคูณ ( modulo) กำรหำร ซ่ึงจะเป็นกำรหำผลลพั ธ์จำกกำรหำร กำรหำเศษ(remainder) ท่ีเป็นจำนวนเต็มจำกกำรหำร (operand ตอ้ งเป็นจำนวนเตม็ ท้งั คู่) 25

ตวั อยา่ ง แสดงข้นั ตอนการทางานของ ตวั ดาเนนิ การ • 4+3*2 4+ 6 • 9 * 2 - 15/3 + 7 18 - 5 + 7 13 + 7 20 26

จงหำค่ำนิพจน์ต่อไปนี้ -(-5+(2*4-1))+((6+2)*5+8)/4 -(-5+(8-1))+(8*5+8)/4 -(-5+7)+(40+8)/4 -(2)+48/4 -2+12 10 27

ลาดบั การประมวลผลเคร่ืองหมายคณิตศาสตร์ เคร่ืองหมายทาง ลาดบั การประมวลผล คณิตศาสตร์ ++, -- 1 2 - (เคร่ืองหมายลบหน้า ตวั เลข) 3 */% 4 +- 28

ตวั อยา่ ง เช่น • 2+8*2 = 18 นา 8 คณู 2 ได้ 16 แล้วบวกด้วย 2 • (2+8)*2 = 20 นา 8 บวก 2 ได้ 10 แล้วคณู ด้วย 2 • 4/2*3 = 6 นา 4 หารด้วย 2 ได้ 2 แล้วคณู ด้วย 3 • ++ n หมายถึง เพิ่มคา่ n อีก 1 • -- n หมายถงึ ลดคา่ n ลง 1 • y = x+1 หมายถงึ การเพิม่ คา่ y อีก 1 หรือมีคา่ เท่ากบั y = x++ หรือ ++x • y = x-1 หมายถงึ การลดคา่ y ลง 1 หรือมีคา่ เท่ากบั y = x-- หรือ --x 29

แบบฝึกหดั ทา้ ยบท 1. จงหาผลลพั ธ์ของนิพจน์ตอ่ ไปนี ้เม่ือกาหนดให้ n1=5 และ n2=10 1.1 x = (n1 + n2) / 3 1.2 x = n1 + n2 / 3 1.3 x = n2%n1 1.4 x = n1-- 1.5 x = n2++ 2. จงหาคา่ ของนิพจน์ตอ่ ไปนี ้ถ้ากาหนดให้ a = 2, b = 3, c = 4, d = 5, e = 6 และ f = 8 2.1 a + e / f -- * c 2.2 (f - e) * (c / a) 2.3 a * d / a + e / b 2.4 a * (d / (a + e)) / b 30

แบบฝึกหดั ทา้ ยบท 31

ทาใบงานท่ี 2.1 32

อารเ์ รยแ์ ละสตริง • ข้อมูลแบบอาร์เรย์เป็นการรวมกลุ่มข้อมูลชนิดเดียวกนั ไว้ เป็ นแถวลาดับ • จดั เป็นตัวแปรแบบตวั ช้ีประเภทหน่ึง short arr[3]; ตาแหน่ง ค่า arr arr[0] = 50; arr[2] = 89; : : 0020 520 arr มีค่า 20 0021 300 arr[0] มคี ่า 50 0022 211 arr[1] มีค่า 211 0023 5 arr[2] มคี ่า 89 0024 889 0025 203 0026 33 33 0027 12 : :

ขอ้ มูลประเภทสายอกั ขระ (สตริง) • “สตริง” คอื อาร์เรยข์ องอกั ขระโดด (array of char) char s[5] = \"Hello\"; printf(\"%c %c %c\\n\", s[0], s[1], s[2]); 0 1234 SHe l l o ผลลัพธ:์ Hel 34

การรบั /แสดงผล • ฟังกช์ ันมาตรฐาน (เพ่ือการรับ/แสดงผลข้อมูล) ถูก เตรียมไว้ในเฮดเดอร์ไฟล์ “stdio.h” • ฟังกช์ ันรับข้อมูล  scanf สาหรับตัวแปรทกุ ชนดิ (ระบดุ ้วย %format) • ฟังกช์ ันแสดงผลข้อมูล (Output Function)  printf สาหรับตัวแปรทุกชนดิ (ระบุด้วย %format) 35

การแสดงผลขอ้ มูล • ทุกอย่างในหน่วยความจาล้วนเป็นตวั เลข • การแสดงผลลพั ธด์ ้วยฟังกช์ ัน printf จงึ ต้องระบุ รปู แบบตามท่เี ราต้องการจะเหน็ หน่วยความจา int c = 65; : 2 printf(\"c (as a number) = %d\\n\", c); 30 printf(\"c (as a character) = %c\\n\", c); 65 c 5 ผลลัพธ:์ 8 23 c (as a number) = 65 : c (as a character) = A 36

%format ใน scanf และ printf ชนิดขอ้ มูล ชนดิ ตวั แปร %format จานวนเตม็ int %d จานวนมีทศนิยม long %ld อกั ขระโดด สตริง long long %lld unsigned int %u unsigned long %lu unsigned long long %llu float %f double %lf char %c char array[] %s 37

ตวั อยา่ งการใช้ scanf char name[20]; int age; printf(\"Enter your name and age: \"); scanf(\"%s %d\", name, &age); printf(\"Hello %s. You are %d years old.\\n\", name, age); ผลลัพธ:์ Enter your name and age: Tony 38 Hello Tony. You are 38 years old. 38

การไหลของโปรแกรม • โปรแกรมแบบง่าย ทางานรวด START เดียวจากบนลงล่าง Statement1 Statement2 START Statement3 Statement Statementn END END โปรแกรมทมี่ ีคาส่ังเดียว โปรแกรมที่มหี ลายคาสั่ง 39

Relational Operators • ใช้สาหรับเปรียบเทยี บความสมั พันธข์ องค่าคงท่หี รือตวั แปร (Operand) ท่กี าหนดให้ Operator คาอธบิ าย < เคร่ืองหมาย น้อยกว่า <= เคร่ืองหมาย น้อยกว่าหรือเท่ากบั > เคร่ืองหมาย มากกว่า >= เคร่ืองหมาย มากกว่าหรือเท่ากบั == เคร่ืองหมาย เท่ากบั != เคร่ืองหมาย ไม่เทา่ กบั 40

Expression • ใช้เรียกแทนการนาค่าคงท่ี หรือตัวแปร(Operand) เขยี นร่วมกบั ตัวดาเนินการ (Operator) A = 10; B = 3; C = 20; ผลลพั ธ์ Expression A + B 13 (A + B) – C -7 (C*B)+(A*B) 90 41

Relational Operators • ตวั อย่างการประมวลผลของ Relational Operators i = 1; j = 2; k = 3; ผลลัพธท์ ่ไี ด้ ค่าท่ไี ด้ Expression true 1 true 1 i<j false 0 (i + j) >= k false 0 (j + k) > (i + 5) true 1 k != 3 j == 2 42

Logical (Bitwise) Operators • ใช้สาหรับเปรียบเทยี บ ค่าคงท่หี รือตัวแปร(Operand) เขยี น ร่วมกบั ตัวดาเนนิ การทางตรรกะ (Logical Operator) Operator คาอธบิ าย && เคร่ืองหมาย AND แปลว่า และ || เคร่ืองหมาย OR แปลว่า หรือ 43

AND Operators • ตัวดาเนนิ การ และ จะเป็นจริงกต็ ่อเม่อื ตัวแปรทุกตัวมคี ่าเป็น จริง นอกจากน้นั เป็นเทจ็ ท้งั หมด A B A && B ผลลพั ธ์ ค่าท่ไี ด้ True True T && T True 1 True False T && F False 0 False True F && T False 0 False False F && F False 0 44

AND Operators • ตวั อย่างการประมวลผลของ AND Operators i = 8; j = 4.5; k = ‘z’; // ascii ของ z เท่ากบั 122 Expression ผลลัพธท์ ่ไี ด้ ค่าท่ไี ด้ (i >= 6) && (k == ‘z’) T && T == T 1 1 (i >= 6) && (k == 122) T && T == T 0 1 (j >= 0) && (j != 4.5) T && F == F 0 (k > 0) && (j != 5) T && T == T (i < 0) && (j > 0) && (k > 0) F && T && T == F 45

OR Operators • ตวั ดาเนินการ หรือ จะเป็นเทจ็ กต็ ่อเม่อื ตวั แปรทุกตัวมีค่าเป็น เทจ็ นอกจากน้ันเป็นจริงท้งั หมด A B A || B ผลลัพธ์ ค่าท่ไี ด้ True True T || T True 1 True False T || F True 1 False True F || T True 1 False False F || F False 0 46

OR Operators • ตัวอย่างการประมวลผลของ OR Operators i = 8; j = 4.5; k = ‘z’; // ascii ของ z เท่ากบั 122 Expression ผลลพั ธท์ ่ไี ด้ ค่าท่ไี ด้ (i >= 6) || (k == ‘z’) T || T == T 1 1 (i >= 6) || (k != 122) T || F == T 0 1 (j < 0) || (j != 4.5) F || F == F (k > 0) || (j != 5) T || T == T 47

ตวั อยา่ งการเปรียบเทียบ • ตัวอย่างการเปรียบเทยี บ ผลลพั ธท์ ีไ่ ด้ ค่าทีไ่ ด้ i = 7; f = 4.5; False 0 True 1 Expression False 0 True 1 f>5 True 1 !(f > 5) False 0 i <= 3 !(i <=3) i > (f + 1) !(i > (f + 1)) 48

ลาดบั ความสาคญั (Precedence) ของตวั ดาเนนิ การ • แสดงลาดับความสาคญั จากมากไปหาน้อย ในการประมวลผล ตัวดาเนนิ การต่างๆ ประเภท Operators ทศิ ทาง unary operators - , ++ , -- , ! , sizeof() R->L multiply, divide and remainder *,/,% L->R add and subtract +,- L->R relational L->R equality < , <= , > , >= L->R == , != 49

ลาดบั ความสาคญั (Precedence) ของตวั ดาเนนิ การ (ต่อ) • แสดงลาดับความสาคญั จากมากไปหาน้อย ในการประมวลผล ตวั ดาเนินการต่างๆ ประเภท Operators ทศิ ทาง and && L->R or || L->R assignment operators =, +=, -=, *=, /=, %= R->L 50


Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook