240-101 introduction to computer programming
DESCRIPTION
240-101 Introduction to computer programming. บทที่ 1. Introduction to Basic Computer and Internet แนะนำคอมพิวเตอร์ และอินเตอร์เน็ตเบื้องต้น. วัตถุประสงค์. อธิบายความหมาย ส่วนประกอบต่างๆ และพื้นฐานขั้นตอนการทำงานของคอมพิวเตอร์ได้ อธิบายระบบการทำงานและการใช้งานบริการในอินเตอร์เน็ตได้. - PowerPoint PPT PresentationTRANSCRIPT
240-101240-101Introduction to Introduction to
computer computer programmingprogramming
บทท 1 Introduction to Basic
Computer and Internetแนะนำคอมพวเตอร และอนเตอรเนต
เบองตน
Lesson1-3
วตถประสงค
อธบายความหมาย สวนประกอบตางๆ และพนฐานขนตอนการทำางานของคอมพวเตอรได
อธบายระบบการทำางานและการใชงานบรการในอนเตอรเนตได
Lesson1-4
1. ควมหมยของคอมพวเตอร
คอมพวเตอร หมายถง เครองคำานวณหรอประมวลผล ททำางานไดตามโปรแกรมทวางไว แลวประมวลผลลพธตามทตองการไดอยางถกตองและแมนยำา
เครองไมโครคอมพวเตอร- เครองคอมพวเตอรสวนบคคล (PC, Personal
Computer)ไดแก IBM PC, IBM-PC Compatible ไดรบความ
นยมในยคแรก– Macintosh มจดเดนดานงานพมพ
Lesson1-5
2. สวนประกอบของระบบกรทำงนในคอมพวเตอร
21. . ขอมลในระบบคอมพวเตอร ลกษณะของขอมลจะเปนบต (Bit) มาประกอบกน ขอมล 1 บตมเพยงสองสถานะ ใชสญลกษณ 1หรอ 0 แทน ซงตรงกบเลขฐานสอง (Binarynumber)โดยทวไปขอมลหนงตวอกษร (Character) หรอเรยกวา 1 ไบต (Byte) นนประกอบดวยขอมล 8บต ดงนนขอมล 1 ไบตมความแตกตางกน 28 หรอ 256 แบบ
Lesson1-6
รหสแอสก (ASCII, American Standard Code for Information Interchange) เปนรหสสากลทมขนาด 1
ไบต โดยรหส ASCII ตงแต - 0127 ใชแทนคาตวอกขระตางๆ ทงตวเลข ตวอกษร และรหสควบคมพเศษอนๆ เชน Ente
r, Backspace, Tab เปนตน และ รหส - 128255ใชแทน Graphic Character หรอ ตวอกษรพเศษของภาษาอนๆ ทไมใชภาษาองกฤษ เชน ภาษาไทย เปนตน 210 Byt e หรอ 1 , 0 2 4 Byte เรยกวา 1
Ki l oByt e (KB) 220 Byt e หรอ 1048576, , Byte เรยกวา
M MMMMMMM MM1 B)230 Byt e หรอ 1073741824, , , Byte เรยกวา
M MMMMMMM MM1 B)
Lesson1-7
22. . ระบบคอมพวเตอร (Computer System)
1. หนวยประมวลผลกลาง (CPU, Central Processing Unit) 2. หนวยความจำาหลก (Main memory) 3. หนวยรบสงขอมลเขาออก (Input/Output Unit, I/O Unit)
4. บส (Bus) 5. นาฬกา (Clock)
6. อปกรณรอบนอก (Peripheral Devices)
Lesson1-8
1. หนวยประมวลผลกลาง (CPU, Central Processing Unit)
เครองไมโครคอมพวเตอรจะเรยกวา ไมโครโพรเซสเซอร (Microprocessor) ทำาหนาทเหมอนเปนสมองของคอมพวเตอร ซงภายในประกอบดวย
- หนวยคำานวณและตรรกะ (ALU, Arithmetic and Logic Unit) ทำางานเกยวกบการคำานวณและเปรยบเทยบตางๆ
- หนวยควบคม (Control Unit) ทำาหนาทควบคมจงหวะการทำางานทงหมดภายในซพย
- หนวยความจำา (Memory Unit) ทำาหนาทเกบขอมลและผลลพธไวภายใน
Lesson1-9
ซพยจะใชสญญาณนาฬกา (Clock Signal ) กำาหนด จงหวะการทำางาน ดงนนการประมวลผลคำาสงจะเรว
หรอชาจงขนกบความถของสญญาณนาฬกา และขนาด ขอมลทประมวลผลบน ALU ดวย
80486 ตวประมวลผลขอมลขนาด 32 บต Clock 25- M33 HzPentium ตวประมวลผลขอมลขนาด 64
บต - Clock 75 233 MHz เปนตน
Lesson1-10
2. หนวยความจำาหลก (Main memory)
ทำาหนาทเกบคำาสงทจะใหคอมพวเตอรทำางาน และขอมลทใชโดยหนวยประมวลผลกลาง หรอ ผลลพธจากการประมวลผล– หนวยความจำาแรม (RAM, Random Access
Memory) สามารถเขยนและอานขอมลไดตลอดเวลา แตเสยขอมลเมอขาดไฟฟา
– หนวยความจำารอม (ROM, Read Only Memory) อานขอมลไดเทานน ขอมลจะไมสญหายแมปดเครอง ขอมลในหนวยความจำานจะมการบนทกในตอนเรมตนโดยบรษทผผลตเทานน
Lesson1-11
– หนวยความจำาแคช (Cache) เปนหนวยความจำา พเศษ มความเรวสงมาก เกบขอมลท CPU ใช บอยๆ ทำาใหเสยเวลานอยลงในการตดตอกบหนวย
ความจำาหลกซงใชเวลาในการอาน-เขยนขอมลมากกวา
Lesson1-12
3. หนวยรบสงขอมลเขออก (Input/Output Unit, I/O Unit)
ทำาหนาทเปนสอกลางการถายเทขอมลระหวางอปกรณรอบขางกบหนวยประมวลผลกลางหรอ หนวยความจำา หนวยรบสงขอมลเขาออกยงแบงเปนหนวยยอยทรบผดชอบเฉพาะอปกรณรอบนอกแตละอยางซงเรยกวาพอรต (port)
Lesson1-13
พอรตรบขอมลเขา (input port) ทำาหนาทรบขอมลอยางเดยว
พอรตสงขอมลออก (output port) ทำาหนาสงขอมลอยางเดยว
พอรตขนาน (parallel port) รบสงขอมลครงละ 8 บตขนานกน
พอรตอนกรม (serial port) จะรบสงขอมลทละบตเรยงกนจนครบ 8 บต
Lesson1-14
4. บส (Bus) ทำาหนาทถายเทขอมลระหวางหนวยตางๆ ของ
คอมพวเตอร บสม 3 ชนดทำาหนาทตางกนดงน บสตำาแหนง (address bus) สงสญญาณตำาแหนง
เพอระบตำาแหนงของหนวยความจำาหรอพอรตรบสง บสควบคม (control bus) สงสญญาณควบคม
เพอคอยรกษาจงหวะการตดตอระหวางหนวยตางๆ บสขอมล (data bus) สงสญญาณขอมลทเปน
ขอมลหรอคำาสง
Lesson1-15
5. นาฬกา (Clock)
ทำาหนาทใหจงหวะเพอใหการทำางานระหวางหนวยตางๆ ของระบบคอมพวเตอรสอดคลองกน เปนสญญาณความถทแมนยำาโดยใชผลกควอตซ( quartz) เปนตนกำาเนด
Lesson1-16
6. อปกรณรอบนอก (Peripheral Devices)
เปนอปกรณทใชรบและหรอสงขอมลจากภายนอกคอมพวเตอรใหกบคอมพวเตอร เชน การปอนขอมลผานทางคยบอรด (keyboard) การแสดงขอมลผานทางจอภาพหรอเครองพมพ รวมทงการเกบขอมลภายนอกจากหนวยความจำาแรมซงมราคาแพง ไวในหนวยความจำาสำารอง (secondary memory หรอ Auxiliary memory) ไดแกเทปแมเหลก (Magnetic Tape)
ฟลอปปดสก (floppy disk) หรอ ฮารดดสก (hard disk)
Lesson1-17
รปแสดงระบบของไมโครคอมพวเตอร
Lesson1-18
รปแสดงสวนประกอบเครองคอมพวเตอรสวนบคคล
Lesson1-19
สวนประกอบภายในของเครองพซสามารถแยกเปนสวนๆ ไดแก แผงวงจรหลก (Motherboard หรอ MainBoard), หนวยประมวลผลกลาง (CPU), ชองเสยบอปกรณภายนอก (Expansion Slot) ,หนวยความจำาหลก (RAM), หนวยความจำาสำารอง (Floppy Disk, Hard Disk ,CD-ROM Drive), การดแสดงผลจอภาพ (Graphic Card) ,การดเสยง (Sound Card) และ สวนภายนอกเครองไดแก เมาส (mouse) ,แปนพมพ (keyboard), ลำาโพง (speaker), จอภาพ (monitor) เปนตน
Lesson1-20
23. . คอมพวเตอรซอฟตแวร (Software Computer)
ระบบคอมพวเตอรจะทำางานได ประกอบดวยสอง สวนสำาคญไดแก ฮารดแวร (Hardware) และ
ซอฟตแวร (Software)– ฮารดแวร คอ อปกรณไฟฟา อปกรณ
อเลกทรอนกสตางๆของคอมพวเตอร รวมถง อปกรณตอพวง ซงมองเหนได จบตองได
– ซอฟตแวร คอ โปรแกรมหรอขอมลตางๆ ทนำาไปใชกบฮารดแวร
Lesson1-21
ซอฟตแวร แบงตามลกษณะการใชงานไดแก
1. ระบบปฏบตการ (OS, Operating System) เปนโปรแกรมทควบคมการทำางานของคอมพวเตอรและอปกรณตอพวงเปนโปรแกรมหลกททำาใหคอมพวเตอรทำางานได และเปนพนฐานสำาหรบการทำางานของโปรแกรมอนๆ เชน DOS ( Disk Operating Sys
- tem ), MS Windows, Windows9 5 , Unix,OS/ 2 เปนตน
Lesson1-22
2. โปรแกรมประยกตใชงน (Application Program)
เปนโปรแกรม ตางๆ ทใชเพอทำางานตามทตองการ ซงจดแบงเปนกลมไดดงน
โปรแกรมสำาหรบการสรางหรอพฒนาโปรแกรม (Compiler Program )
โปรแกรมอรรถประโยชน (Utility Program) โปรแกรมสำาหรบการทำางานดานเอกสาร โปรแกรมทจดการงานดานฐานขอมล (Database
Program)
Lesson1-23
โปรแกรมทจดการขอมลทเปนตาราง (Spread Sheet)
โปรแกรมทเกยวของกบการตดตอสอสารระหวาง คอมพวเตอร
โปรแกรมประยกตเฉพาะดานหรอเปนโปรแกรมสำาเรจรป (Package Program )
Lesson1-24
3. พนฐนกรใชงนอนเตอรเนต
อนเตอรเนต (Internet) เปนกลมเครอขายทาง คอมพวเตอร ประกอบดวยเครอขายคอมพวเตอรยอยท
ตอเชอมเขาดวยกนภายใตมาตรฐานการสอสารเดยวกน ผเปนสมาชกในอนเตอรเนตจะมทอยอเลกทรอนกส
(Electronic Mail Address) เพอรบสงจดหมาย อเลกทรอนกส (Electronic Mail) กบสมาชกอนไดทว
โลก หรอตดตอโตตอบกนผานทางคอมพวเตอรโดยตรง ได นอกจากนผใชอนเตอรเนตยงสามารถอานขาวจาก
กระดานขาวเครอขายทมผใชอนเตอรเนตสงมาจากทว โลก การขอถายโอนขอมลจากศนยบรการเครอขาย และ
การคนหาขอมลจากเครอขายเปนตน
Lesson1-25
สมาคมอนเตอรเนต (Internet Society) ซงมผใชและผใหบรการทวไปเปน
สมาชก โดยมสวนทใชตดตงอนเตอรเนตดงน- เลขทอยอนเตอรเนต (Internet Address)-ชอเครองในอนเตอรเนต- ระบบชอโดเมน (Domain name system)-ทอยทางอเลกทรอนกส(Electronic-mail address)-ผใหบรการอนเตอรเนต-การเชอมตอกบอนเตอรเนต-อปกรณทใชในการเชอมตอกบอนเตอรเนต
Lesson1-26
4. บรกรในระบบอนเตอรเนต
ประเภทของการใหบรการสามารถแบงออกเปน 6 ประเภท ไดแก
1. จดหมายอเลกทรอนกส2. ขนถายแฟมขอมล3. การใชโปรแกรมบนเครองคอมพวเตอรอน4. บรการคนหาแฟมขอมล5. กลมสนทนาและขาวสาร
6. บรการเวลดไวดเวบ (World Wide Web, WWW)
บทท 2Introduction to C
Programmingแนะนำาการเขยนโปรแกรมดวย
ภาษาซ
หวขอ1. แนะนำาภาษาซเบองตน
2. อนพทและเอาทพท 3. เครองหมายดำาเนนการ
Lesson1-29
1. แนะนำภษซเบองตน
– ตวแปรในภาษาซ– การเขยนคำาอธบายในภาษาซ– กลมคำาในภาษาซ– ตวแปรในภาษาซ– ตวประมวลผลกอน– คำาสงและนพจน– อนพทและเอาทพท
Lesson1-30
2. อนพทและเอทพท
– บทนำา– ASCII– ฟงกชนแสดงผลขอมล– ฟงกชนรบคาขอมล– ฟงกชนอนๆ ทใชในการรบคา และแสดงผลขอมล
Lesson1-31
3. เครองหมยดำเนนกร
– ตวดำาเนนการทางคณตศาสตร– ตวดำาเนนการสมพนธและตวดำาเนนการตรรกะ– ตวดำาเนนการประกอบ– ตวดำาเนนการบอกขนาด– ตวดำาเนนการแบบมเงอนไข– ลำาดบการทำางานกอน-หลงของตวดำาเนนการ– การเปลยนแปลงคาผลลพธเปนตวแปรชนดใหม
Lesson1-32
1. แนะนำภษซเบองตน
ภาษาซเปนภาษาททำางานไดอยางกวางขวาง เขาใจ งาย เขยนงาย ตลอดจนมคำาสงทอำานวยความ
สะดวกใหกบผเขยนทจะสามารถเรยกใชไดตามท ตองการ ซงผเขยนโปรแกรมควรจะตองศกษาและ
ทำาความเขาใจในกฏเกณฑเหลานนใหดเสยกอน กจะทำาใหสามารถนำาภาษาซมาใชงานไดอยางม
ประสทธภาพ กฏเกณฑของเครองมอทใชเขยนโปรแกรมภาษาซของแตละผผลต จะมขอแตกตาง
กนไปบางเลกนอย แตสวนใหญจะคลายๆ กน
Lesson1-33
1.1 รปแบบการทำางานของภาษาซ
ในภาษาซจะเขยนโปรแกรมโดยการเรยกใชแตละชดของโปรแกรมทเรยกวา ฟงกชน(Function) หรอในโปรแกรมภาษาอนอาจจะ เรยกวา โปรแกรมยอย หรอชดคำสงยอย(Procedure) นนเอง ฟงกชนเหลานจะมชออะไรกได กฟงกชนกได แตอยางนอยตอง ม 1 ฟงกชนทชอ main เพอใหโปรแกรมเรม
ทำางานทฟงกชนน
Lesson1-34
โปรแกรม กรทำงน ฟงกชน main
main ( ) { printf (“ My house”) ; printf (“is very beautiful”); triangle( ); box( ); prinf(“finish”) ; }triangle( ) triangleฟงกชน { /* draw triangle */ }box ( ) boxฟงกชน{ /* draw box */ }
รปท1.1 แสดงรปแบบการทำางานของภาษาซ
printf …….. printf…….. triangle box printf….
triangle
box
Lesson1-35
1.1 รปแบบการทำางานของภาษาซ
จากตวอยาง จะแสดงใหเหนวา ภาษาซ สามารถมไดหลายฟงกชน แตจะมฟงกชนหลก
คอ ฟงกชน main ในการควบคมการทำางาน ของโปรแกรมวาใหทำาฟงกชนใดบาง แตถา
โปรแกรมขนาดเลกไมมการทำางานทซบซอน อาจจะไมจำาเปนตองมฟงกชนอนๆ มฟงกชน
main เพยงฟงกชนเดยวกได
Lesson1-36
1.2 ฟงกชนในภาษาซ
ฟงกชนในภาษาซแบงไดเปน 2 สวน ไดแก ฟงกชนทเปนโปรแกรมหลกหรอฟงกชน
หลกทถกกำาหนดใหมเพยงฟงกชนเดยวเทานน นนกคอ ฟงกชน main สำาหรบฟงกชนใน
สวนท 2 เปนฟงกชนทไมใชฟงกชนหลก ซงมกฟงกชนกได
Lesson1-37
โครงสรางทวไปในฟงกชน
1.2.1 สวนหวของฟงกชน (Heading) เปน สวนทนยามชอฟงกชน กำาหนดชนดและ
จำานวนตวแปรทใชสงผานคาเขาออก มรปแบบดงน
ชนดพรม ( )เตอรทใชสงคออก ชอฟงกชน พรมเตอรทใชสงคเข
Lesson1-38
โครงสรางทวไปในฟงกชน
เชน int main(char) หมายถง ฟงกชน main มการรบ
พารามเตอรชนดเปน char และมการสงคา กลบออกมาเปนชนด int
Lesson1-39
1.2.2 สวนกลมคำาสง (Compound Statements) สวนนจะประกอบดวย 3 สวนยอย– สวนกำาหนดตวแปร (Variable Declaration) ใช
สำาหรบกำาหนดตวแปรเพอใชงานในฟงกชน– สวนคำาสง (Statement) ประกอบดวยคำาสงตางๆ
เรยงกนไป แตละคำาสงตองปดทายดวยเครองหมาย ; เสมอ
– เครองหมาย { } เครองหมายนทำาหนาทกำาหนดขอบเขตของกลมคำาสงในฟงกชน
Lesson1-40
สวนหวของฟงกชน (Heading){
สวนกำาหนดตวแปร (VariableDeclarations)
สวนคำาสง (Statements)}
Lesson1-41
1.3 กรคอมไพลและลงคโปรแกรมในภษซ การสรางโปรแกรมทสามารถใชงานไดขนมาโปรแกรม
หนง ในภาษาซมขนตอนดงน 1. ส รางตวโปรแกรมทเปนตวอกษร หรอเรยกวา
ซอรสไฟล (Source file) โดยมนามสกลเปน .c หรอ .cpp ขนมากอน โดยใชโปรแกรมทสามารถ
เขยนไฟลทเกบอกขระ (Editor) ใดๆ กได อกษร หรออกขระใดๆ นน จะตองอยในรปแบบของการ โปรแกรมภาษา (ขนตอนนคอการสรางโปรแกรมท
เปนภาษามนษยนนเอง)
Lesson1-42
2. คอมไพลเลอรของภาษาซ (C Compiler) จะทำาการ แปลงซอรสไฟล จากอกขระใดๆ ใหเปนรหสทเครอง
คอมพวเตอรสามารถเขาใจไดเกบไวในอกไฟลหนงเรยกวา ไฟลวตถประสงค (Object file) ทมนามสกล .obj (ขน
ตอนนเรยกวา กรคอมไพล เปนการแปลงภาษามนษยเปนภาษาเครองนนเอง)
3. ตวเชอม (Linker) จะทำาการตรวจสอบวาในโปรแกรมท เขยนขนนน มการเรยกใชงานฟงกชนมาตรฐานใด จาก
หองสมดของภาษาซ (C Library) บางหรอไม ถาม ตวเชอมจะทำาการรวมเอาฟงกชนเหลานนเขากบไฟล
วตถประสงค แลวจะไดไฟลทสามารถทำางานได โดยม นามสกลเปน .exe (ขนตอนนเรยกวา กรลงค เปนการ
รวมฟงกชนสำาเรจรปเขาไป แลวสรางไฟลททำางานได)
Lesson1-43
1.รปท 2 แสดงขนตอนการคอมไพลและลงคโปรแกรมภาษาซ
Source file
C Compiler
ComputerObject fileComputer Execute file
Linker Library
Lesson1-44
ตวอยาง 1 . สรางซอรสไฟลทมขอความ ทเกบโปรแกรมภาษาซ
ดงน
#include <stdio.h>void main(void){printf(“Hello World”);}
แลวเกบไวในไฟลชอ 1.c 2. ใชคำาสงเพอเรยกใหคอมไพลเลอรของภาษาซ
ทำางาน โดยคอมไพลเลอรจะทำาการแปลงอกขระจากซอรสไฟล ใหเปนรหสทคอมพวเตอรสามารถเขาใจได จะไดไฟลชอ 1.obj
Lesson1-45
3. ใชคำาสงเพอเรยกใหตวเชอมของภาษาซทำางาน ตวเชอมจะทำาการรวมไฟลหองสมดทชอ stdio.h เขามา (ตามขอความ #include …) แลวสรางไฟลทสามารถทำางานไดชอ 1.exe **หมายเหต คำาวา printf ในตวโปรแกรม คอฟงกชนมาตรฐานหนงทพมพขอความออกทางหนาจอ โดยขนตอนและวธการทำางานของฟงกชน printf จะอยในไฟลหองสมดชอ stdio.h ดงนน ถาตวเชอมไมทำาการรวมไฟลหองสมดทชอ stdio.h เขาทำา จะทำาใหไมสามารถเรยกใชงานฟงกชน printf ไดเลย
Lesson1-46
1 .4 โครงสรงของโปรแกรมทเขยนดวยภษซ โครงสรางของโปรแกรมทเขยนดวยภาษาซแบงยอย
ไดเปน 3 สวนดงน– 141. . สวนเรยกใชไฟลอนๆ เปนสวนทบอกใหคอม
ไพลเลอรไปดงไฟลอนทกำาหนดมาแปลรวมดวย ไฟลเหลา นอาจจะเปนไฟลมาตราฐานทมใหแลวในภาษาซ หรอเปน
ไฟลทเขยนขนมาใหมกได โดยสวนใหญมกจะเปนไฟลทม นามสกลเปน .h
– 142. . สวนกำาหนดชอในโปรแกรม เปนสวนทใช กำาหนดคาคงท ตวแปร และคาอนๆ ทตองการ
– 143 สวนคำาสง จะประกอบดวยคำาสงตางๆ หรอ ฟงกชนอนๆ ทใชในการทำางานของโปรแกรม
Lesson1-47
ตวอยง โครงสรงโปรแกรมทเขยนดวยภษซ ดงรปท 2.2
#include <stdio.h> สวนเรยกใชไฟลอน
char a; สวนกำาหนดชอint main(void){
a = 23;
printf(“Hello World”); สวนคำาสงreturn a;
}
Lesson1-48
Output
ผลทจากการรนโปรแกรม จะไดขอความบนหนาจอวาHello World
Lesson1-49
1.5 รปแบบคำสงในภษซรปแบบคำาสงในภาษาซ มกฏเกณฑในการเขยนคำาสง ดงน
1. คำาสงทกคำาสงตองเขยนดวยอกษรตวเลกเสมอ เชนคำาสง printf , scanf , for
2. ทกคำาสงจะใชเครองหมาย ; แสดงการจบของคำาสง เชนprintf(“Hello”) ;
3. การเขยนคำาสง จะเขยนไดแบบอสระ (Free Format) คอ สามารถเขยนหลายๆคำาสงตอกนได เชน
printf(“Hello”); printf(“Goodbye”); a = 95;
หมายเหต แตเพอความเปนระเบยบและอานงาย ควรจะ เขยน 1 คำาสงตอ 1 บรรทด
Lesson1-50
1.6 กรเขยนคำอธบย (Comment) ในภษซ
ภาษาซนยมการเขยนขอความอธบายการทำางานในสวนตางๆของโปรแกรมเพอใหเขาใจและอานโปรแกรมงาย
ขน การเขยนอธบายจะใชเครองหมาย /* และ */ ครอมขอความทตองการอธบาย ดงน
/* ……. ……ขอความทตองการอธบาย .*/แตถาตองการเขยนอธบายหลายๆบรรทดจะเขยนไดดงน
/* ………………………………………………. ………ขอความทตองการอธบาย .…………………………………………..*/
Lesson1-51
1 .7 กลมคำในภษซ 1.7.1 คำสงวน (Keywords) คอคำาทภาษาซ
กำาหนดไวกอนแลว เพอใชงานaut o def aul t fl oat register struct
volatile br eakdo far return swi t ch while
case doublegot o short t ypedef char el se i f
signedunion const enumint si zeof
unsigned continueextern long st at i c void
Lesson1-52
1.7.2 คำทผใชตงขนใหม (User Defines words)
คอ กลมอกษรทนยามขนใชในโปรแกรม โดยผเขยนโปรแกรมกำาหนดขนเอง มขอกำาหนดดงน– ตวอกษรภาษาองกฤษตวพมพเลกและตวพมพใหญ
ภาษาซถอวาเปนคนละตวกน เชน test และ Test เปนตวแปรคนละตวกน
– ตวอกษรตวแรกตองเปนตวอกษรหรอ _ จะเปนตวเลขไมได
– ตวอกษรทไมใชตวแรกจะเปนตวอกษรหรอ _ หรอตวเลขกได
Lesson1-53
– กอนการใชชอใดๆ ตองนยามกอนเสมอ – หามตงชอซำากบคำาสงวน– ภายในกลมคำาสง สามารถกำาหนดชอขนใหมได ชอนนจะถกใช
งานภายในกลมคำาสง และกลมคำาสงทยอยลงไปเทานน หากชอในกลมคำาสงไปซำากบทนยามไวภายนอก จะถอเอาชอทนยามใหมเปนหลก
**หมายเหต ความยาวชอจะขนอยกบตวแปรในภาษาซ สำาหรบโปรแกรม Borland C ได 32 ตวอกษร
Lesson1-54
18 ตวแปร (Variable) ในภษซ ตวแปร หมายถง ชอเรยกแทนพนทเกบขอมลในหนวยความจำา
มชนด ของขอมล หรอแบบของตวแปรคอ char, int, long, float, double, unsigned int, unsigned long int, – การกำาหนดตวแปร ทำาได 2 แบบ คอ
1. กำาหนดไวนอกกลมคำาสง หรอฟงกชน เรยกตวแปรนวา Global Variable กำาหนดไวนอกฟงกชน ใชงานไดทง
โปรแกรม มคาเรมตนเปน 0 (กรณไมไดกำาหนดคาเรมตน) 2. กำาหนดไวในกลมคำาสง หรอฟงกชน เรยกตวแปรนวา Local Variable กำาหนดไวภายในฟงกชน ใชงานไดภายในฟงกชนนนและไมถกกำาหนดคาเรมตนโดยอตโนมต
Lesson1-55
การประกาศตวแปร มลกษณะดงน
ชนดตวแปร ชอตวแปร , ชอตวแปร , ชอตวแปร,.....; ชนดของขอมลในภาษาซ
1. ตวแปรแบบ char เปนตวแปรทใชสำาหรบเกบขอมลทเปนตวอกษร ขนาด 1 ตว โดยใช
เนอทในการเกบ 1 ไบต ตวอยางตวแปรชนดน ‘เชน A’ , ‘b’ , ‘1’ , ‘?’
2. ตวแปรแบบ integer เปนตวแปรทใชสำาหรบการเกบคาตวเลขท เปนจำานวนเตมทมคาระหวาง -32768 ถง 32767 ใชเนอทในการ
เกบ 2 ไบต ตวอยางตวแปรชนดน เชน 5 -10 2534
Lesson1-56
3. ตวแปรแบบ long เปนตวแปรทเกบคาเปนจำานวนเตมทมจำานวนไบตเปน 2 เทาของจำานวนเดม (มกจะใชเปนคำานำาหนา
ตวแปร เชน long int ) 4. ตวแปรแบบ float เปนตวแปรทใชเกบขอมลทเปนเลข
ทศนยม โดยจะเกบอยในรป a.b x 10e ใชพนทในการเกบ 4 ไบต มคาระหวาง 3.4E-38 ถง 3.4E+38 หรอ แสดงเปน
เลขทศนยมไดไมเกน 6 ตำาแหนง ตวอยางตวแปรชนดน เชน10.625 -6.67 5. ตวแปรแบบ double เปนตวแปรทเกบขอมลทเปนเลข
ทศนยมเหมอนกบ float แตจะใชพนทในการเกบมากกวาเดม2 เทา คอมขนาด 8 ไบต มคาระหวาง 1.7E-308 ถง1.7E+308
6. ตวแปรแบบ unsigned แสดงวาเปนตวแปรทเกบคาเปนจำานวนเตมแบบไมคดเครองหมาย (เปนบวกเทานน ) มกจะใช
เปนคำานำาหนาตวแปร ตวอยางการใชงาน เชน unsigned int
Lesson1-57
ชนด ขนาดความกวาง ชวงของคา Char 8 บต ASCII character (-128 127)ถงUnsigned char 8 บต 0-255Int 16 บต -32768 32767ถงlong int 32 บต -2147483648 2147483649ถงFloat 32 บต 3.4E-38 3.4E+38 6 ถง หรอทศนยม ตำาแหนงDouble 64 บต 1.7E-308 1.7E+308 12 ถง หรอทศนยม ตำาแหนงUnsigned int 16 บต 0 65535ถงUnsigned long int 32 บต 0 4294967296ถง
ตารางท1.1 แสดงชนดและขนาดของขอมลทใชในภาษาซ
Lesson1-58
ตวอยงท 1 บรรทดท 1. #include<stdio.h> บรรทดท 2. #define PI 3.14159 บรรทดท 3. int area; /* global variable */ บรรทดท 4. main( ) บรรทดท 5. { float radius; /* local variable */ บรรทดท 6. float process() /* function declaration
*/ บรรทดท 7. printf (“Radius = ?”); scanf (“%f”,radius); บรรทดท 8. process( ); บรรทดท 9. printf(“Area = %f”,area); บรรทดท 10. printf(“%f”,radius);
}
บรรทดท 11. float process( ) บรรทดท 12. { float radius; /* local variable */ บรรทดท 13 printf(“Radius=?”); scanf (“%f”,radius); บรรทดท 14 area=PI*radius*radius; บรรทดท 15 printf(“Area = %f”,area); บรรทดท 16 printf(“%f”,radius);
}
Lesson1-59
ตวอยงท 2 int a ; หมายความวา ประกาศตวแปร a เปนตวแปรทใชสำาหรบเกบคาทเปน
เลขจำานวนเตมทมคาอยระหวาง -35768 ถง 32767 ตวอยงท 3 int num1=8;
หมายความวา ประกาศตวแปร num1 เปนตวแปรทเกบคาตว เลขจำานวนเตม โดยใหคาเรมตนเทากบ 8
ตวอยงท 4 float money,price ; หมายความวา money และ price เปนตวแปรทใชสำาหรบเกบคาทเปน เลขทศนยม โดยจะใหตำาแหนงทศนยมไดไมเกน 6 หลก
ตวอยงท 5 char ch=’A’ หมายความวา ประกาศตวแปร ch เปนตวแปรทเกบคาตวอกษรเพยง
1 ‘ตว คอ ตวอกษร A’ ตวอยงท 6 unsigned long int test;
หมายความวา ประกาศตวแปร test เปนตวแปรทใชสำาหรบเกบคาทเปน เลขจำานวนเตม แบบยาวทไมคดเครองหมาย
Lesson1-60
ตวอยงเพมเตม
char a,b,c,d; /* ตวแปร a,b,c,d เปนตวแปรชนดcharacter */
unsigned e; /* ตวแปร e เปนตวแปรชนด unsigned int */
char key = ‘A’; /* ตวแปร key เปนตวแปรชนด character ‘มคา A’ */
char name = ‘SAM’ /* ตวแปร name เปนตวแปรชนด character ม
”คา SAM” */
Lesson1-61
19 ตวประมวลผลกอน(Preprocessor) คอ สวนทคอมไพเลอรจะตองทำากอนทำาการแปล
โปรแกรม คำาสงของตวประมวลผลกอนจะนำา หนาดวยเครองหมาย # มคำาสงตางๆ ตอไปน
#include #define #if #program#endif #error #ifndef #undef#elif #else#ifdef
คำาสงทนาสนใจม 2 คำาสงคอ
Lesson1-62
19.1. #include ทำาหนาทแจงใหคอมไพเลอรอานไฟลอนเขามา
แปลรวมดวยเชน #include <dos.h>
อานไฟล dos.h จากไดเรคทรอรทกำาหนด#include “sample.h”
อานไฟล sample.h จากไดเรคทรอรปจจบนหรอทกำาหนด
Lesson1-63
192. . #define ทำาหนาทใชกำาหนดคาคงท ทเปน ชอแทน คำา
นพจน คำาสง หรอคำาสงหลายคำาสง
เชน #define TEN 10 กำาหนดตวแปร TEN แทนคา 10
#define PI 3.141592654 กำาหนดตวแปร PI แทนคา 3.141592654
Lesson1-64
คคงท constant constant คอ คาของขอมลทมจำานวน
แนนอน เขยนได 3 ลกษณะ คอ•1 คคงทจำนวนเตม เขยนอยในรปตวอกษร อาจม
เครองหมายลบนำาหนา•2 คคงทจำนวนจรง เขยนในรปตวเลขมทศนยม•3 คคงททหมยถงรหสตวอกษร (ตวอกษรถกจำาใน
รปแบบตวเลข ตามรหส ASCII)
Lesson1-65
1.10 คำสงและนพจน (Statement and Expression)คำสง, ขอคำสง (Statement) คอขนตอนในการ
ทำางานหนงขนตอน ทกคำาสงตองจบดวย เครองหมาย ;
กลมคำสง คอคำาสงทอยในวงเลบปกกา {} นพจน (Statement) คอการกระทำาเพอใหได
ผลลพธ คาหนงคา ประกอบไปดวยตวถกกระทำา(Operands) และตวกระทำา (Operators) เขยน
เรยงกนไป เชน 3 * 2 - 1 + 7 หรอ a * 5 เปนตน
Lesson1-66
2. อนพท และเอทพท (Input and Output) อนพท คอ การรบคาขอมลของผใชเขาไปใน
เครองคอมพวเตอร อปกรณ อนพทมาตรฐาน ไดแก คยบอรด สแกนเนอร หรอ เมาส
เอาทพท คอ การแสดงผล ขอความ ขอมล หรอ คาตวแปรใดๆ ออกมาแสดงใหกบผใชทาง
อปกรณแสดงผลเอาทพทตางๆ อปกรณเอาทพตมาตรฐาน ไดแก จอภาพ ลำาโพง หรอ เครองพมพ
Lesson1-67
2.2 แอสก (ASCII)
แอสกเปนรหสแทนตวอกษรทนยมใชกน มากทสด ยอมาจาก American Standard
Code for Information Interchange รหสนแทนตวอกษรได 128 ตว
Lesson1-68
อกขระหรอตวอกษร (Characters) คอรหสทใชแทนภาพเชน
’A’ หมายถงอกษร A‘4’ หมายถงอกษร 4
สตรง (String) คอกลมขอมลทประกอบไปดวยตวอกขระ ทเขยนเรยงกนไป ใชตวแปรชนด อกขระในการ
เกบภาพขอมลตอหนงหนวยตวอกษร โดยจะม “…เครองหมาย .”
Lesson1-69
2.3 ฟงกชนในการแสดงผลขอมล
ฟงกชนในการแสดงผลขอมลในภาษาซจะม ฟงกชนมาตรฐานในการแสดงผลขอมล หรอ
คาตวแปรออกมาทางจอภาพ ฟงกชนนนคอ ฟงกชน printf
printf ( control , argument list ) ;
Lesson1-70
สวน control สวนของ control “ จะตองเขยนภายใตเครองหมาย
” ซงสามารถเขยนได 2 ลกษณะ คอ– เปนขอความทตองการใหแสดงผลออกมา เชน
printf ( “sum of x = ”); คอ เปนการสงใหพมพขอความวา sum of x =
ออกมาทหนาจอ– เปนรหสรปแบบ (Format Code) ทใชในการแสดงผล
ซงทกรหสรปแบบจะตองอยตามหลงเครองหมาย % รหสรปแบบทนยมใชไดแก
Lesson1-71
รหสรปแบบ ชนดตวแปร ลกษณะกรแสดงผลออกจอภพ%d int ใชแสดงขอมลทเปนเลขจำานวนเตมฐานสบ%ld long int longใชแสดงขอมลทเปนเลขจำานวนเตมฐานสบแบบ%u unsigned int unsignedใชแสดงขอมลทเปนเลขจำานวนเตมฐานสบแบบ%c char ใชแสดงขอมลทเปนตวอกษร%s string ใชแสดงขอมลทเปนตวแปรสตรงหรอชดตวอกษร%o int (octal) ใชแสดงขอมลทเปนเลขฐานแปด%x int (hexa) ใชแสดงขอมลทเปนเลขฐานสบหก%f float ใชแสดงขอมลทเปนเลขทศนยมทไมมเลขยกกำาลง%e float, double ใชแสดงขอมลทเปนเลขทศนยมทมเลขชกำาลง%lf double doubleใชแสดงขอมลทเปนเลขทศนยมแบบ
ตรงท2.1 แสดงรหสรปแบบทใชในฟงกชนprintf
Lesson1-72
สวน argument list สวนของ argument list เปนชดตวแปร คา
คงท หรอ นพจนทตองการนำามาแสดงผล ถา มมากกวา 1 คาจะแยกออกจากกน โดยใช
เครองหมายคอมมา ( , ) *หมายเหต สวน argument list นจะมกตอ
เมอในสวน Control มการใชรหสรปแบบ แต ถาในสวน Control เปนการแสดงขอความ
ธรรมดา กไมจำาเปนตองม Argument list
Lesson1-73
Escape Sequence คอรหสพเศษทแทรกลงไปในคาคงทสตรง
เพอใชควบคมการแสดงผลของตวอกษรใน ลกษณะตางๆ โดยการเขยนจะตองม
เครองหมาย \ (Back-Slash) นำาหนา รหสควบคมการแสดงผลดไดจาก ตารางท 1
Lesson1-74
Escape Sequence ค หนท\a 0x07 เสยงดงออกลำาโพงหนงครง\b 0x08 cursor เลอน ไปลบตวอกษรทางซายมอหนงตวอกษร\f 0x0c ขนหนาใหม\n 0x0a ขนบรรทดใหม\r 0x0d cursor เลอน ไปทางซายมอสดของบรรทด\t 0x09 tab ตง ในแนวนอน\v 0x0b tab ตง ในแนวตง\\ 0x5c \เครองหมาย\ 0x2c เครองหมาย
\ 0x22 เครองหมาย
\? 0x3f ?เครองหมาย
ตรง 2.2 ท Escape Sequence แสดงตว ตงๆ ทมใชในภษซ
Lesson1-75
ตวอยง 1 การใชงานฟงกชนprintf #include<stdio.h>main( ){ int sum=5; float e=11.55;
printf(“This is the test Program. “);printf(“The result is %d \n”,sum);printf(“The result is %f %e “,e,e);
}
ผลลพธThis is the test Program. The result is 5The result is 11.550000 1.155000e+01
Lesson1-76
ตวอยง 2 การใชงานฟงกชนprintf#include<stdio.h>main(){ char a=’A’ ; char name=”Aree”; int x,y;
printf(“What is the first character \n”);printf(“The first character is %c \n\n”,a);x=10; y=15;printf(“x+y= %d \n”,x+y);
printf(“ %d – 5 = %d \n”,y,y-5);x=65;printf(“x is %c”,x);
printf(“This program run by %s”,name);}
Lesson1-77
ผลลพธ
What is the first characterThe first character is A
x+y=25 15-5=10
x is 65 This program run by Aree
Lesson1-78
ฟลด (field) คอการกำาหนดพนทและรปแบบในการแสดงคา โดย
จะเขยนเปนเครองหมาย + หรอ - เปนตวเลข หรอ จดทศนยมผสมกบตวเลขแทรกอยภายในฟอรเมต
ตวอยางเชน
#include <stdio.h>void main(){
printf(|1234567890|\n);printf(|%10s|\n,price);
}
Lesson1-79
จากตวอยางจะเปนการสงใหแสดงขอความ price ในพนททจองไว 10 ตวอกษร เราจะใชตวเลขใน การกำาหนดพนท โดยตวเลขทกำาหนดนจะอย
ระหวางเครองหมาย%กบฟอรเมตบอกชนดของ ตวแปร ผลลพธของโปรแกรม ในตวอยางท 3
|1234567890| | price|
Lesson1-80
24. ฟงกชนในการรบคาขอมล
ฟงกชนในการรบคาขอมลในภาษาซจะมฟงกชนมาตรฐานในการรบคา ขอมล หรอ คาตวแปร
ออกมาทางจอภาพ ฟงกชนนนคอ ฟงกชนscanf
รปแบบ– scanf ( control , argument list );
Lesson1-81
ตวอยง 1 การใชฟงกชน scanf
char a; int b; charname[22];
– /*กำาหนดตวแปรชอ name มเนอท 22 ชอง ใช
เกบอกขระได 21 ตวและปดทายขอความดวย
อกขระ ’\0’ อกหนงตวรวมเปน 22 ตว */
Lesson1-82
scanf(“%c %d”,&a,&b); • /* scan ขอมลจากคยบอรดเปนชนด char เกบในตวแปร a
และ scan ขอมลจากคยบอรดเปนชนด int เกบในตวแปร b */
scanf(“%s”,name);• /* scan ขอมลจากคยบอรดเปนชนด string เกบในตวแปร
name */
Lesson1-83
ตวอยงท 2 การใชฟงกชนscanf #include<stdio.h>main( ){ int x1; char letter[30]; scanf(“%d”,&x1); scanf(“%s”,letter); }
โปรแกรมรบคา integer ไปเกบไวในตวแปร x1 และรบคาชดตวอกษรทมความยาวไมเกน 30 ตว
อกษรไปเกบไวในตวแปร letter
Lesson1-84
25 ฟงกชนอนๆ ทใชในการรบและแสดงขอมล 2 .5 .1 ฟงกชน getchar ( ) getchar ( ) เปนฟงกชนทใชรบขอมล
เขามาทางแปนพมพทละ 1 ตวอกษร โดยตอง กด enter ทกครงเมอสนสดขอมล และขอมล
ทปอนจะปรากฎใหเหนบนหนาจอภาพดวย
Lesson1-85
getchar ( ) ;#include<stdio.h>main ( ){ char ch;
ch=getchar ( ); }
เครองจะรอรบขอมลจากแปนพมพทผใชปอน จำานวน 1 ตวอกษรเกบไวในตวแปร ch หลงจากทผใชตอง กดปม enter เพอใหฟงกชนรบคาขอมล
Lesson1-86
getch ( ) ;#include <stdio.h>main ( ){ char x; x = getch( ) ; }
เครองจะรอรบขอมลจากแปนพมพเขามา 1 ตว เพอนำามาเกบไวในตวแปร x โดยผใชไมตองกด
enter หลงจากทปอนขอมลเสรจแลว
Lesson1-87
gets ( n ) ;
#include <stdio.h>main( ){ char name[10];
gets(name); }
เครองจะจองทตวแปรชดทชอ name ซงเปนอกขระ ไว 10 ตว และรอรบคาทเปนขอความเขา
มาเกบไวในตวแปรชดทชอ name ไดยาวไมเกน 9 ตวอกษรเพอให name ตวท 10 (ตวสดทาย)
เกบ \0 เอาไว
Lesson1-88
putchar ( ) ;#include<stdio.h>main ( ){ char x;
x=getch ( ) ;printf (“Here is the output \n”) ;putchar ( x );
}
– ลกษณะขอมลทปอนA– ผลลพธHere is the outputA
Lesson1-89
puts ( n ) ;
#include <stdio.h>main ( ){ char name [10];
gets (name) ;puts (name);
}
เครองจะนำาคาทเกบในตวแปรชด name มาแสดงผลบนจอภาพ
Lesson1-90
3 . เครองหมยดำเนนกร (Operators)
เครองหมายดำาเนนการ (Operators) หรอ ตวดำาเนนการ นนกำาหนดการการกระทำาทเกดขนกบตวแปรและคาคงท โดยทนพจนประกอบดวยตวแปร และคาคงท และใชตวดำาเนนการคำานวณเพอใหไดคาตวดำาเนนการในภาษาซ
Lesson1-91
31. ตวดำเนนกรทงคณตศสตร(Arithmetic Operators)
เครองหมย ควมหมย ตวอยง+ การบวก A+B- การลบ A-B* การคณ A*B/ การหาร A/B% (Modulo)การหารเอาแตเศษไว 5%3=1 2 2 เศษ จะเกบแตเศษ เอาไว-- 1การลดคาลงครงละ A -- A=A-1จะเหมอนกบ++ 1การเพมคาขนครงละ A++ A=A+1จะเหมอนกบ
3ตารางท .1 แสดงประเภทของตวดำาเนนการทางคณตศาสตร
Lesson1-92
ลำดบของกรโอเปอเรชน
โอเปอเรเตอร ลำดบของกรโอเปอเรชน( ) ซายไปขวา- ซายไปขวา * - คอแสดงความเปนลบของตวเลข* / ซายไปขวา+ - ซายไปขวา * - คอเครองหมายลบคาตวเลข
ตารางท3.2 แสดงลำาดบของการทำางานของตวดำาเนนการทางคณตศาสตร Precedenceตามกฎ
Lesson1-93
ตวดำเนนกรเพม และลดค (Increment & Decrement)
- ตวดำาเนนการเพมคา ++ จะบวกหนงเขากบตวถก ดำาเนนการ
– ตวดำาเนนการลดคา -- จะลบหนงออกจากตวถก ดำาเนนการ
ตวอยง ถา n มคา 5x = n++; จะเปนการกำาหนดคา x ใหกบ5x = ++n; จะเปนการกำาหนดคา x ใหกบ6
Lesson1-94
32. ตวดำเนนกรสมพนธและตวดำเนนกร ตรรกะ (Relational, Equality, and
Logical Operators) Operator เครองหมย ควมหมย
ตวดำเนนกรสมพนธ < นอยกวา(Relational Operator) > มากกวา
<= นอยกวาหรอเทากบ>= มากกวาหรอเทากบ
ตวดำเนนกรเทกบ == เทากบ(Equality Operator) != ไมเทากบตวดำเนนกรตรรกะ ! นเสธ(Logical Operator) && และ
|| หรอ
ตรงท3.3 แสดงตวดำเนนกรสมพนธและตวดำเนนกรตรรกะ
Lesson1-95
321. . ตวดำเนนกรสมพนธ (Relational Operator)
เปนเครองหมายทใชในการเปรยบเทยบและตดสนใจ ตวอยางการใชงาน เชน
a<3 / * ถา a มคาเปน 5 ประโยคนจะไดผลลพธเปน 0 (เทจ ) * /a>b */ ถา a=10 b=8 ประโยคนจะไดผลลพธเปน 1 (จรง *) /-1 >= (2.2*X+3.3)a<b<c
/* รปแบบถกตอง แตลำาดบการวางตวแปรอาจทำาใหสบสนได โดยจะทำาการเปรยบเทยบคา b และ c กอน จงนำาผลลพธมาเปรยบเทยบกบ a */
Lesson1-96
3.2.2 ตวดำเนนกรเทกบ (Equality Operator) ตวดำาเนนการเทากบ ใชในการเปรยบเทยบคา 2
คา วามคาเทา หรอไมเทากน
ตวอยางการใชงาน เชนc == ‘A’ */ ถาตวแปร c เกบคาอกขระ A ผลลพธจะไดคาจรง */k != -2 * ถาตวแปร k เกบคาตวเลข – 2 ผลลพธจะไดคาเทจ */x+y == 2 * z – 5
Lesson1-97
323. . ตวดำเนนกรตรรกะ (Logical Operator) ตวดำาเนนการตรรกะ ใชในการเปรยบเทยบ และ
กระทำาทางตรรกะกบคาตวเลข หรอคาทอยใน ตวแปร ผลลพธทได จะมเพยง 2 คาเชนเดยวกบผลลพธของตวดำาเนนการสมพนธคอ จรง และ เทจ
ตวอยางการใชงาน!a */ ถาคาความจรงของตวแปร a มคาจรง ผลลพธจากการนเสธจะไดคาเปนเทจ */!(x+7.7)
Lesson1-98
ตวดำเนนกร && และ || ตวอยางการใชงาน
a&&b* a และ b ถาคาความจรงของ a เปนจรง และ คาความจรง b เปนจรงผลลพธทไดจะมคาความจรงเปนจรง */
a || b * a หรอ b ถาคาความจรงของ a เปนเทจ และ คาความจรง b เปนเทจผลลพธทไดจะมคาความจรงเปนเทจ */
Lesson1-99
33. ตวดำเนนกรประกอบ (Compound Operator)
ตวดำาเนนการประกอบ คอ ตวดำาเนนการทเปนรปแบบยอ ของตวดำาเนนการ+ตวแปรทถกดำาเนนการ
ตวอยางเชนi = i + 1; ตวดำาเนนการประกอบคอ i += 1;
i = I – a; ตวดำาเนนการประกอบคอ i - = a;i = 1 * (a + 1); ตวดำาเนนการประกอบคอ i = *=a+1;
Lesson1-100
34 . ตวกระทำบอกขนด (Sizeof Operator)
ตวอยาง
int ABC;printf(“%d”,sizeof(ABC));
ผลลพธ2
Lesson1-101
35 . ตวดำเนนกรแบบมเงอนไข (Conditional Operator)#include<stdio.h>void main(void)
{ int a,b;a = 15;b = ((a+5)? (a+1) : 0);print(“b= %d\n”,b);a=0;b=((a+5)?(a+1) : 0);printf(“b= %d\n”,b);a=5;b=((a+5)?(a+1) : 0);printf(“b= %d\n”,b);}
ผลลพธ b = 16;b = 1;b = 0
Lesson1-102
36 ลำดบกรทำงนกอน-หลงของตวดำเนนกร
ตวดำเนนกร ทศทงกรดำเนนกร(), [], ->, ซายไปขวา|, ~, ++, --, +( ), -( ), *, &(type), sizeofคาบวก คาลบ ขวาไปซาย*, /, % ซายไปขวา+, - ( )ตวกระทำาการทางคณตศาสตร ซายไปขวา<<, >> ซายไปขวา<, <=, >, >= ซายไปขวา==, != ซายไปขวา& ซายไปขวา^ ซายไปขวา| ซายไปขวา&& ซายไปขวา|| ซายไปขวา? : ขวาไปซาย=, +=, -=, /=, %=, &=, =, |=, <<=, >>= ขวาไปซาย, ซายไปขวา
ตารางท3.7 แสดงลำาดบความสำาคญของตวดำาเนนการทงหมดเรยงลำาดบจากมากไปนอย
Lesson1-103
3.7. กรเปลยนแปลงคผลลพธเปนตวแปร ชนดใหม (Casting)
ตวอยง (int)(a*5.2)
เปนการเปลยนคา output เปน ขอมลชนด int
(float)(b+5) เปนการเปลยนคา output เปน
ขอมลชนด float
บทท 3Structured Program
Developmentกรพฒนโปรแกรมอยงม
โครงสรง
OObjectives (จดประสงค) เขาใจวธการพนฐานในการแกปญหาทางคอมพวเตอร สามารถพฒนากระบวนวธขนโดยใชวธการเกลาจนบนลง
ลางได สามารถใชโครงสรางทางเลอก if และ if/else เพอเลอก
การกระทำาได สามารถใชโครงสรางทำาซำา while เพอ execute คำาสง
ในโปรแกรมซำา ๆ กนได เขาใจการทำาซำาโดยใชตวนบคมและโดยใชตวตรวจตราคม เขาใจการเขยนโปรแกรมอยางมโครงสราง
Lesson1-106
3 .1. Introduction (บทนำา)กอนทจะเขยนโปรแกรมเพอแกปญหา
หนง ๆ นนผเขยนจะตองทำาความเขาใจกบปญหาและวางแผนอยางรอบคอบเพอแกไขปญหานน ในสวนน จะกลาวถงเทคนคทใชในการพฒนาโปรแกรมอยางมโครงสราง ซงเปนรากฐานสำาคญของการเขยนโปรแกรมในทกระดบ
Lesson1-107
32. Algorithms (กระบวนวธ)
การแกปญหาโดยการโปรแกรมคอมพวเตอรจะตองเกยวของกบการกระทำาคำาสงชดหนง ๆ ไปตามลำาดบทกำาหนดไว ซงกระบวนการในการแกปญหาทเรยกวา algorithm (กระบวนวธ ) นนจะประกอบดวย– การกระทำา (actions)– ลำาดบของการกระทำา (order in which these
actions are to be executed)
Lesson1-108
3.3. Pseudocode (โคดเทยม)Pseudocode เปนภาษาอยางไมเปน
ทางการ ทผเขยนโปรแกรมใชในการพฒนากระบวนวธ (algorithm ) Pseudocode มลกษณะคลายภาษาทใชในชวตประจำาวน มนมลกษณะใชงายและเขยนไดโดยสะดวก แมวามนจะไมไดเปนภาษาทใชในการเขยนโปรแกรมจรง ๆ กตาม
Lesson1-109
PseudocodePseudocode ทเตรยมไวดจะสามารถแปลงใหเปนโปรแกรมภาษาซ ไดโดยงาย โดยอาจจะเพยงแตใชคำาสงภาษาซ ทเทยบเทากนแทนทคำาสง pseudocode เขาไปผเขยนโปรแกรมอาจจะเขยนคำาสง pseudocode หนงคำาสงใหหมายถงการกระทำาชดหนง ซงอาจจำาเปนตองแทนทดวยคำาสงภาษาซ หลายคำาสงกได ทงนการใช pseudocode ยอมขนกบจดประสงคของการใช ซงแปรเปลยนไปไดตามความเหมาะสม
Lesson1-110
34. . Control Structures (โครงสรางควบคม)
โดยปกต คำาสงในโปรแกรมจะทำางานตอเนองกนไปตามลำาดบทเขยนไวในโปรแกรม โดยจะเรยกการทำางานอยางนวา sequential execution (การทำางานตามลำาดบ ) คำาสงตาง ๆ ของภาษาซ ทจะไดศกษาตอไปนจะทำาใหผเขยนโปรแกรมสามารถควบคมไดวา คำาสงถดไปทจะทำางานเปนคำาสงใด ซงเราเรยกสงนวา Transfer of control (การสงถายการควบคม)
Lesson1-111
3.4.1 โครงสรางตามลำาดบ
เปนโครงสรางทสรางอยภายในภาษาซ อยแลว นนคอ ถาไมไดบอกเปนอยางอน คอมพวเตอรจะทำางานคำาสงภาษาซ ไปตามลำาดบทเขยนไว Fl owchar t ในรปท 1แสดงโครงสรางตามลำาดบของภาษาซ
Lesson1-112
รปท 1 Flowchart ของโครงสรางตามลำาดบของภาษาซ
Lesson1-113
Flowchart เปนสญลกษณภาพทใชแทนกระบวนวธ หรอสวนหนงของกระบวนวธ ในการวาด flowchart นนจะใชสญลกษณทมความหมายเฉพาะ อยางเชน สเหลยมผนผา , ขาวหลามตด , รปไข และวงกลมวงเลก สญลกษณเหลานจะเชอมเขาดวยกนโดยใช flowline
Flowchart ใชในการสรางและการแสดงกระบวนวธ เชนเดยวกบ pseudocode อยางไรกตาม นกเขยนโปรแกรมสวนใหญจะนยมใช pseudocode มากกวา เนองจากความกระชบในการเขยน ในทนจะใช flowchart เพอแสดงใหเหนวา โครงสรางควบคมแตละชนดทำางานอยางไร เทานน
Lesson1-114
3.4.2 The if, if/else Selection Structure (โครงสรงทงเลอก if, if/else)โครงสรางทางเลอกใชในการเลอกระหวางการกระทำาหลาย ๆ อยาง ตวอยางเชน ถานกศกษาจะสอบผาน เมอไดคะแนน 60 คะแนนขนไป คำาสง pseudocode อาจจะเปน– If คะแนนของนกศกษาสงกวาหรอเทากบ 60
“พมพ Passed”ใหสงเกตวา มการเวนระยะหางเยองเขาไปในบรรทดทสองของ pseudocode การทำาเชนนทำาใหโคดอานงายขน ดงนนจงควรใชการเวนระยะหางอยางเปนระบบในการเขยนโปรแกรมทกโปรแกรม ไมวาจะเขยนเปน pseudocode หรอเปนโคดภาษาซ กตาม
Lesson1-115
โครงสรงทงเลอกแบบทงเดยวของภษซ
Pseudocode ขางตนสามารถเขยนเปนโปรแกรมภาษาซ ไดดงนif (grade >= 60)
printf(“Passed\n”);
Lesson1-116
รปท 2 Flowchart ของโครงสรงทงเลอกแบบทงเดยวของภษซ
Lesson1-117
โครงสรางทางเลอก if/elseif คะแนนของนกศกษาสงกวาหรอเทากบ 60
“พมพ Passed”else
พมพ “Failed”Pseudocode ขางตนสามารถเขยนเปนโปรแกรม
ภาษาซ ไดดงนif (grade >= 60)printf(“Passed\n”);
elseprintf(“Failed\n”);
Lesson1-118
รป 3 แสดงถง flowchart ของโครงสรางทางเลอก if/else
Lesson1-119
3.4.3 The While Repetition Structure (โครงสรางทำาซำา While) โครงสรางทำาซำา ทำาใหผเขยนโปรแกรมระบใหทำาการกระทำาหนง
ซำาไปเรอย ๆ ในขณะทเงอนไขบางอยางยงคงเปนจรงอย ตวอยางเชน– while (ขณะท) ยงคงมของทจะซออยในรายการซอของ
(shopping list)– ซอของชนตอไป และกาของชนนนทงไปจากรายการ
“เงอนไขทวา ยงคงมของทจะซออยในรายการซอของ” อาจจะเปนจรงหรอเทจกได หากเงอนไขนเปนจรง กจะทำาคำาสง
“ ซอของชนตอไป และกาของชนนนทงไปจากรายการ” การก ระทำานจะทำาตอไปเรอย ๆ ในขณะทเงอนไขยงคงเปนจรงอย
Lesson1-120
โครงสรางทำาซำา while
เพอเปนตวอยางของการใชลป while ลองดโปรแกรมทใชหาคากำาลงของสองคาแรกทมากกวา
1000 (กำาลงของสอง หมายถง 2 n เมอ n เปนจำานวนเตมบวก ) เมอโครงสรางทำาซำา while ดานลางทำางานเสรจ ตวแปร product กจะมคาผลลพธทตองการproduct = 2;while (product <= 1000)
product = 2 * product;
Lesson1-121
รปท 4 Flowchart ของโครงสรางทำาซำา while
Lesson1-122
Summary (สรป) การแกปญหาทางคอมพวเตอรเปนการกระทำาคำาสงชดหนง
ๆ ในลำาดบทกำาหนดไว กระบวนการแกปญหาทประกอบดวย สงทจะกระทำา และ ลำาดบของการกระทำา เรยกวา กระบวนวธ (algorithm)
การระบลำาดบทคำาสงจะ execute ในโปรแกรมคอมพวเตอร เรยกวา การควบคมโปรแกรม (program control)
Pseudocode เปนภาษาไมเปนทางการทชวยผเขยนโปรแกรมในการพฒนากระบวนวธ จดสำาคญ คอ
pseudocode ชวยใหผเขยนโปรแกรม คด วธการแก“ ”ปญหาออกมากอนทจะลงมอเขยนโปรแกรมในภาษาโปรแกรม เชน ภาษาซ
Lesson1-123
โครงสรางทางเลอก (selection structure) ใชเพอเลอกระหวางการกระทำาหลาย ๆ อยาง มหลายรปแบบ ไดแก โครงสราง if, โครงสราง if/else และโครงสราง if/elseแบบซอนกน (nested if/else)
โครงสรางทำาซำา (repetition structure) ใชเพอระบใหทำาคำาสงหนง ๆ (หรอชดหนง ๆ ) ซำากนไปเรอย ๆ ในขณะทเงอนไขบางอยางเปนจรง โครงสรางทำาซำาในบทน คอ while
Flowchart เปนสญลกษณภาพทใชแทนกระบวนวธหรอสวนหนงของกระบวนวธ สญลกษณทใชมากใน flowchart ไดแก สญลกษณรปไข (สญลกษณ Begin และ End ),สญลกษณสเหลยมผนผา (สญลกษณการกระทำา ),สญลกษณขาวหลามตด (สญลกษณการตดสนใจ ) และสญลกษณวงกลมวงเลก (สญลกษณจดเชอม)
Lesson1-124
ลปแบบใชตวนบคม - (counter controlled loop)ใชตวแปรตวหนงเปนตวนบ เพอตรวจสอบวาลปควรจะหยดเมอใด
ลปแบบใชตวตรวจตราคม - (sentinel controlled loop) จะกำาหนดใหคา ๆ หนงเปนคาตรวจตรา เมอผ
ใชปอนคาตรวจตราเขาไป โปรแกรมจะออกจากลป การพฒนาโปรแกรมโดยใชวธการเกลาจากบนลงลาง
- (top down, stepwise refinement) มความสำาคญมาก ควรฝกปฏบตใหเปนนสย และควรเขยนกระบวนวธออกมาในรป pseudocode กอนการเขยนโคดในภาษาซ เสมอ
บทท 4Program Control
คำาสงในการตดสนใจและการวนรอบ
หวขอ1. คำาสง if (The if Statement)2. คำาสง switch (The switch Statement)3. คำาสง break (The break Statement)4. คำาสง while (The while Statement)5. คำาสง for (for Statement)6. คำาสง do-while (do-while Statement)7. คำาสง continue (The continue Statement)
4.1 คำสง if (The if Statement)
คำาสง if ( if Statement) คอ คำาสงสำาหรบใช เลอกทำาคำาสง (หรอกลมคำาสง) โดยอาศยการ
ตรวจสอบจากเงอนไข ซงม3 รปแบบคอ1. หนงทางเลอก (One Alternative)2. สองทางเลอก (Two Alternative)3. หลายทางเลอก (Multiple-Alternative)
1.หนงทงเลอก (One Alternative)
เงอนไขcondition
คำาสงหรอกลมคำาสงstatement T
TRUEFALSE
if Statement (One Alternatives)FORM : if (condition)
statement T ;
EXAMPLE if (x > 0.0)total = total * x;
กรณคำาสง if ในรปแบบน จะตองเลอกทำากลมคำาสง(Compound Statement) เมอตรวจสอบเงอนไขแลวเปนจรงมรปแบบดงน
if (condition){true task}Example :if (x>y) {temp = x ;x = y ;y = temp;}
2. สองทงเลอก (Two Alternative)
เงอนไขcondition
คำาสงหรอกลมคำาสงstatement T
TRUEFALSE
คำาสงหรอกลมคำาสงstatement F
FORM : if (condition)statement T ;
elseStatement F ;
ตวอยาง if (x >= 0.0)printf("positive\n”);
elseprintf("positive\n”);
กรณคำาสง if ในรปแบบน จะตองเลอกทำากลมคำาสง(Compound Statements) มรปแบบดงนif (condition)
{true task}else}false task}
Example:if (x>y) {temp = x ;x = y ;y = temp ;}else {count = count + 1 ;printf("smaller\n”);
3. หลยทงเลอก(Multiple - Alternative)
SYNTAX : if (condition 1)statement 1else if (condition 2)statement 2::else if (condition n)statement nelsestatement
ตวอยาง/*increment mum-pos, num_neg, or num_zero depending on x*/
if (x > 0)num_pos = num_pos + 1;
else if (x < 0)num_neg = num_neg + 1;
elsenum_zero = num_zero + 1;
4.2 คำสง switch (The switch Statement)
คำาสง switch มกจะถกใชบอยในกรณของ การเลอกหนงทางเลอกในหลายๆทางเลอก
โดยคาทใชตรวจสอบ (Controlling Expression) จะตองเปนจำานวนเตม
(int) หรอ ขอมลชนดตวอกษร (char) แตจะตองไมเปนจำานวนจรงแบบยาว (double) โดยอาจจะอยในรปของตวแปร , นพจน หรอฟงกชนกได
switch Statement SYNTAX : switch (controlling expression) {
case lable_set1 :
statements1
break;case label_set2 :
statements2
break;:.case lable_setn :
statementsn
break;default :} statementsd
Example:switch (class) {case ‘B’ :case ‘b’ :printf("Bat\n”);break ;case ‘C’ :case ‘c’ :printf("Cat\n”);break ;default :printf("Unknown class %c\n”,class);}
4.3 คำสง break คำาสง break เปนคำาสงทใชในการหยด
การทำาคำาสงภายในลป (Loop) ของคำาสง และ วนรอบ ดงรปแบบคอ
break;
4.4 คำสง While คำาสง while เปนคำาสงทใชในการวนรอบ ซงจะม
การตรวจสอบคาเงอนไข กรณไมเทากบศนย (จรง) จะมการทำาคำาสง (Statement) ในแตละรอบ
กรณผลลพธเทากบศนย (เทจ) จะไมทำากลมคำาสง(Statement) สามารถเขยน Flowchart ไดดงน
looprepetition condition
statement
TRUE
FALSE
Exit loop
While StatementSYNTAX : While (loop repetition condition)
statementตวอยาง : /*Display N asterisks.*/Count = 0;while (count < n){printf("*”); count = count + 1;}
4.5 คำสง for
คำาสง for เปนคำาสงทใชในวนรอบอกชนดหนงซงการทำางานของ
การวนรอบ จะขนกบสวนสำาคญ 3 สวนคอ1. คาเรมตนของ ตวแปรควบคมการ
วนรอบ2. สวนทดสอบเงอนไข3. สวนเปลยนแปลงคาของตวแปร
ควบคมการวนรอบ
for StatementSYNTAX : for (initialization expression;
loop repetition condition;update expression)
ตวอยาง : /*Dispaly N asterisks*/ for (count = 0 ;
count < N;count += 1)
printf("*");
หรอ : for (count = 0; count <N; count += 1)printf("*");
4.6 คำสง do-while
จากการศกษาคำาสง while และfor จะตองมการตรวจสอบคาของ
เงอนไขกอนวาเปนจรงหรอเทจ กอน ทจะทำาคำาสง (กลมคำาสง) ภายในลป
แตการทำางานบางลกษณะจะตองทำา คำาสงภายในลป กอนอยางนอย 1
ครง ซงการทำางานในลกษณะทกลาว นสามารถใชคำาสง do-while
- do while Statement SYNTAX : do
statementwhile (loop repetition condition);
ตวอยาง : /* Find first even number input */do
status = scanf("%d”,&num);while ( status > 0 && (num%2) ! =
0);
4.7 คำสง continue
เปนคำาสงทใชยกเลกคำาสงทยง เหลออยในกลมคำาสง
ภายในลป (Loop) ของคำาสงทใชในการวนรอบ
continue;
Example:#include <stdio.h>
void main(void) {int testnum = 10;
while ( testnum <= 100) {printf("Put value over 100 to stop\n");scanf("%d",&testnum);if (testnum == 50) continue;printf("Hello, you didn't enter value 50\n");
}}
ผลลพธไดดงนPut value over 100 to stop25Hello ,you didn't enter value 50Put value over 100 to stop50Put value over 100 to stop108Hello ,you didn't enter value 50
บทท 5 ฟงกชน
(Function)
O bjectives (จดประสงค) เพอเขาใจวธการแบงโปรแกรมออก
เปนสวนยอย โดยใชหลกการของ ฟงกชน
เขาใจกระบวนการในการสงขอมลระหวางฟงกชน
เขาใจวธการในการเขยน ใชฟงกชน
บทนำ โปรแกรมคอมพวเตอรสวนใหญทใชงานจรง มก
จะเปนโปรแกรมขนาดใหญ เกนกวาทจะเขยนรวมๆ กนในฟงกชนหลก (main)
เทคนคทเรยกวา Divide and Conquer แบงปญหาออกเปนสวนเลกๆ หรอโมดล (Module)
เมอสรางและทดสอบโปรแกรมยอยๆนนแลว กประกอบขนมาเปนโปรแกรมใหญทสมบรณในขนตอนสดทาย
Program Module ในภษC
FUNCTIONS IN C
C STANDARD
LIBRARY
PROGRAMMER
DEFINED FUNCTION
Function Algorithm
BOSS(calling func)
WORKER(called func)
1. สงใหทำางาน
3. รายงานผล
2. ทำางาน
main
worker1 worker3worker2
worker4 worker5
Complex Function
กรนยมฟงกชน/* 1st sample program: calling standard library function */
#include <stdio.h>main(){
int x;for (x = 1; x <= 10; x++) printf(“%d “, x * x);printf(“\n”);return 0;
}
/* 2nd sample program: A programmer-defined square function */
#include <stdio.h>int square(int);/* function prototype*/main(){
int x;for (x = 1; x <= 10; x++) printf(“%d “, square(x));printf(“\n”);return 0;
}/* Function definition */int square(int y){return y*y;
}
main( )
x
square( )
y
COPY ARGUMENTS
COPY RETURN-VALUE
y * yprintf
กรนยมฟงกชน
return-value-type function-name (parameter-list)
{declarationsstatements
}
- -return type value คอ ชนดของขอมลทตองการจะสงคากลบ เชน int หรอ float หากไมมการสงคากลบใหใช void
-function name คอ ชอของฟงกชนทจะถกสรางขน -parameter list คอรายการตวแปรพารามเตอร
ทงหมดทตองการสงผานไปยงฟงกชนเมอมการเรยกใช ตามลำาดบ
declarations คอ สวนของการประกาศตวแปรภายในฟงกชน
statements คอ สวนของคำาสงทกระทำาในฟงกชนนน
ตวอยาง ตวอยางเชน หากตองการเขยนฟงกชนชอ foo ไมม
การสงผานคากลบ รบพารามเตอร เปน จำานวนเตม 2 ตว โดยฟงกชนจะคำานวณหาผลบวกของจำานวน
ทงสอง แลวแสดงผลออกมาทางจอภาพvoid foo(int x, int y){int ans;ans = x + y;printf(“%d”, ans);
}
หรอถาตองการเขยนฟงกชนชอ subtract ทสง คากลบเปนจำานวนเตม ซงเปนผลลบของ
พารามเตอร ทเปนจำานวนเตมตวแรกลบดวย จำานวนเตมตวทสอง จะนยามฟงกชนไดวา
int subtract (int x, int y){int ans;ans = x - y;return ans;
}
Function แบบตาง ๆ
รปแบบตวอยางท 1:ฟงกชนทไมรบผานคา และไมสงผานคากลบvoid main(){my_print();
}void my_print(){ printf(“Hello world”);
}
รปแบบตวอยางท 2 : ฟงกชนทมการรบผานคา แตไมสงผานคากลบ/* 2.1 */
void main(){my_print(2);
}void my_print(int x) { printf(“%d”, x);}
main my_print
1. ทำางานดวย 2 !
2. พมพ
3. เสรจแลวครบ
/* 2.2 */
void main(){my_print(‘a’, 5);
}void my_print(char ch, int x){ while (x > 0){printf(“%c”, ch);x--;}
}
main my_print
1. ‘ทำงนดวย a’ และ5 !
2. พมพ
3. เสรจแลวครบ
รปแบบตวอยางท 3: ฟงกชนทมการรบผานคา และสงผานคากลบ
void main(){char ch;ch = my_print(5);printf(“%c\n”, ch);
}
char my_print(int x){ char lch;printf(“Enter your character: ”);scanf(“%c”, &lch);while (x > 0){printf(“%c”, lch);x--;}printf(“\n”);return lch;
}
main my_print
1. ทำางานดวย 5 !2. รบคาแลวพมพ
3. เสรจแลวครบผลคอ ch
รปแบบตวอยางท 4: ฟงกชนทไมรบผานคา แตมการสงผานคากลบvoid main(){ printf(“%d”,my_func());}int my_func() { int a; scanf(“%d”,&a); return a*5;}
ตนแบบของฟงกชน (Function Prototype) ตนแบบของฟงกชน จะเปนตวระบใหตวแปล
ภาษารถง–ชนดของขอมลทจะสงผานคากลบ –จำานวนของ พารามเตอร ทฟงกชนคาดหวง
วาจะไดรบ –ชนดของพารามเตอรแตละตว –และลำาดบของพารามเตอรเหลานน
/* 3rd Sample program *//* Finding the maximum of three integers */
#include <stdio.h>int maximum(int, int, int);main(){int a, b, c;printf(“Enter three integers: “);scanf(“%d%d%d”, &a, &b, &c);printf(“Maximum is: %d\n”,
maximum(a, b, c);return 0;
}
PROTOTYPE
CALLING
/* Function maximum definition */
int maximum(int x, int y, int z){int max = x;if(y > max)
max = y;if(z > max)
max = z;
return max;}
DEFINITION
/* 4th Sample Program */
#include<stdio.h>int square(int);void main( ) {int x=3;printf(“Square of %d = %d\n”, x,
square(x));}int square(int y) {return y * y;
}
PROTOTYPE
CALLING
DEFINITION
/* 5th Sample Program */
#include<stdio.h>int maximum(int, int, int);void main(){
int a, b, c;printf(“Enter three integer: “);scanf(“%d%d%d”, &a, &b, &c);printf(“Maximum is: %d\n”, maximum(a, b, c));
}int maximum(int x, int y, int z){
int max = x;if(y > max) max = y;if(z > max) max = z;return max;
}
PROTOTYPE
CALLING
DEFINITION
/* 6th Sample Program */
#include<stdio.h>
int maximum(int x, int y, int z){
int max = x;if(y > max) max = y;if(z > max) max = z;return max;
}
void main( ){
int a, b, c;printf(“Enter three integer: “);scanf(“%d%d%d”, &a, &b, &c);printf(“Maximum is: %d\n”, maximum(a, b, c));
}
CALLING
DEFINITION
ตวแปรภยใน และตวแปรภยนอก ตวแปรภายใน (Local Variable) คอ
ตวแปรทถกสรางขนภายในฟงกชน สามารถเรยกใชงานไดเฉพาะภายในฟงกชนทสรางขน และจะถกทำาลายลงเมอเสรจสนการทำางานของฟงกชนนนๆ
ตวแปรภายนอก (Global Variable) คอ ตวแปรทถกสรางขนภายนอกฟงกชน สามารถเรยกใชงานไดในทกฟงกชน หรอทงโปรแกรม
/* 7th Sample Program: Local vs Global Variable */#include<stdio.h>int ans = 0;
int inc_one(int); /* function prototype */
void main(){
int a = 3;ans = inc_one(a);printf(“Answer is %d\n”, ans);
}
/* function definition: return x+1 */int inc_one(int x){
int ans;ans = x + 1;return ans;
}
Local Variable
Global Variable
Local Variable
/* 9th Sample Program: Global Variables */#include<stdio.h>int x;void my_func();
void main(){x=3;printf(“Main: Before call function x=%d\n”, x);my_func(); //call my_func
printf(“Main: After call function x=%d\n”, x);}void my_func(){x=2;printf(“My_func: x=%d\n”, x);
}
Global Variable
Global Variable
Global Variable
/* 10th Sample Program: Local vs. Global Variables */
#include<stdio.h>int x;void my_func(); //prototype of my_funcvoid main(){
x=3;printf(“Main: Before call function x=%d\n”, x);my_func(); //call my_func
printf(“Main: After call function x=%d\n”, x);}void my_func(){
int x;x=2;
printf(“My_func: x=%d\n”, x);}
Global Variable
Global Variable
Local Variable
ตวอยางการเรยกใชฟงกชนทมการสงผานคากลบ
void main(){ int x, y; printf(“%d”,my_func()); x = my_func(); y = 45 * x + my_func(); }int my_func() { int a; scanf(“%d”,&a); return a*5;}
มตวแปรมรบค
เปน argument ของฟงกชนอน
Lปนสวนหนงของนพจน
ตวอยางโปรแกรมทไมใชฟงกชน#include <stdio.h>main(){ int first, second, third; printf(“\n F(X) = 3X + 10 if X > 0\n”); printf(“\n F(X) = 10 if X = 0\n”); printf(“\n Enter 3 values\n”); scanf(“%d %d %d”, &first, &second, &third);
if (first > 0) printf(“F(%d) is %d”,first,3*first+10); else printf(“F(%d) is 10”, first);
if (second > 0) printf(“F(%d) is %d”, second,
3*second + 10);else printf(“F(%d) is 10”, second);if (thrid > 0) printf(“F(%d) is %d”, third,
3*third + 10);else printf(“F(%d) is 10”, third);}
ตวอยางโปรแกรมทใชฟงกชน#include <stdio.h>
void get_Fx(int x);
main(){ int first, second, third; printf(“\n F(X) = 3X + 10 if X > 0\n”); printf(“\n F(X) = 10 if X = 0\n”); printf(“\n Enter 3 values\n”); scanf(“%d %d %d”, &first, &second,
&third);
get_Fx(first);get_Fx(second);get_Fx(third);}
void get_Fx(int x){ if (x > 0) printf(“F(%d) is %d”, x, (3*x) + 10); else printf(“F(%d) is 10”, x);}
Math routinesFunction Include Fileabs stdlib.hacos math.hasin math.hatan math.hatof stdlib.hatoi stdlib.hcos math.hcosh math.h
Function Include Fileexp math.hitoa stdlib.hlog math.hlog10 math.hsin math.hsinh math.hsqrt math.htan math.htanh math.h
บทท 6
ProgramControl
หวขอ ตวแปรอารเรย แบบ 1 มต การใหคาเรมตน การสงผานอารเรย ตวแปรอารเรยแบบ 2 มต ความผดพลาดของโปรแกรมทวไปเกยวกบ
อารเรย บทสรป
รปแบบของขอมลทกำาหนดขน เพอใหสามารถประกาศตวแปรชนดเดยวกนหลายๆ ตวพรอมกนได โดยจดอยในบลอกของหนวยความจำาเดยวกน และมการจดเรยงของขอมลแตละตวกนตอเนอง และใชชอตวแปรรวมกนในการอางองถง ซงเรยกขอมลแบบนวา อรเรย (Array)
บทนำ
ตวแปรแบบอารเรยทใชในการเกบขอมลโดยมการ อางองทใชเลขดชนเพยงหนงคาจะเรยกวา ตวแปร
แบบอารเรย 1 มต เชน การเกบขอมลคะแนน ทอางองดวยลำาดบทของนกศกษาint age[10];
การประกาศตวแปรแบบอารเรยเพอเกบขอมลอาย เมอ ตองการเกบขอมลอายของนกศกษาคนท 1 สามารถ
ทำาไดดงนage[1] = 18;
ตวแปรอรเรยแบบ 1 มต
กรประกศ ตวแปรอรเรย
การประกาศตวแปรแบบอารเรยสามารถ ทำาไดคลายกบการประกาศตวแปรอน ๆ ทวไป
โดยการกำาหนดซอของตวแปร ชนดของขอมลและจำานวนของบลอกขอมลยอยๆ (Element) ตวอยางเชน
int grades[5];char codes[5];float prices[100];
grades[0] = 98;grades[1] = grades[0] – 11;grades[2] = 2 * (grades[0] – 6);grades[3] = 79;grades[4] = (grades[2] + grades[3] – 3) / 2;
grades[i];grades[2*i];grades[j-i];
total = grades[0]+ grades[1]+ grades[2]+ grades[3]+ grades[4];
กรเขถงตวแปรอรเรย
กรใช for loop กบอรเรย
ถาตองการหาผลรวมของตวแปร grade ทง 5 อลเมนตทำาดงน
total = grades[0]+ grades[1]+ grades[2]+ grades[3]+ grades[4];
เปลยนเปน for loop ไดดงนtotal = 0;for ( i = 0 ; i <= 4 ; i++)total += grades[i];
รบคาprice[5] = 10.69;scanf(“%d %lf”, &grades[0], &price[2])scanf(“%c”, &code[0]);scanf(“%d %d %d”,&grades[0],&grades[1],&grades[2]);
แสดงคาprintf(“%lf”, price[6]);printf(“The value of element %d is %d”, i, grades[i]);for( n = 5 ; n <= 20 ; n++)
printf(“%d %lf”, n, price[n]);
กรแสดงคหรอรบคอรเรย (Input and Output)
int grades[5] = {98,87,92,79,85};char codes[6] = {‘s’, ‘a’, ‘m’, ‘p’, ‘l’, ‘e’};double width[7] = {10.96, 6.43, 2.58, 0.86, 5.89, 7.56, 8.22};static int temp[4] = {10, 20, 30, 40};static float temp[4] = {98.6, 97.2, 99.0 , 101.5};
int gallons[20] = { 19, 16, 14, 19, 20, 18, 12, 10, 22, 15,18, 17, 16, 24, 23,
19, 15, 18, 21, 5 };
กรณทประกาศไมครบfloat length[7] = {7.8, 6.4, 4.9, 11.2};
กรใหคเรมตน(Array Initialization)
การประกาศตวแปรแบบอารเรยพรอมทงกำาหนดคาเรมตนสามารถทำาไดโดยไมจำาเปนตองกำาหนดขนาดของอารเรย กไดเชนchar codes[6] = {‘s’, ‘a’, ‘m’, ‘p’, ‘l’, ‘e’};char codes[] = {‘s’, ‘a’, ‘m’, ‘p’, ‘l’, ‘e’};
ทงสองบรรทดทำางานเหมอนกน โดยคอมไพลเลอรจะรได เองวาขนาดของอารเรยจะมขนาดเปน 6 ในกรณจำาเปน
จะตองมการประกาศคาเรมตน ในกรณใหคาเรมตนแก ตวแปร char สามารถ กระทำาไดดงนดวย คอ
char code[] = “sample”;
คอมไพลเลอรจะใส ‘ \0 ’ หรอเรยกวา null character ไวทายขอความ
กรสงผนอรเรยไปยงฟงกชน กรณสงผนบงอลเมนต#include <stdio.h>void find_max(int vals); /* function prototype */void main(){
int nums[5] = {2, 18, 1, 27, 16};find_max(nums[0]);
}
void find_max(int vals) /* find the maximum value */
{printf(“Values is %d”, vals);
}
กรณสงผนทกอลเมนต#include <stdio.h>void find_max(int vals[5]); /* function prototype */void main(){
int nums[5] = {2, 18, 1, 27, 16};find_max(nums);
}
void find_max(int vals[5]) /* find the maximum value */{
int i, max = vals[0];for ( i = 0; i < 5; ++i)if (max < vals[i]) max = vals[i];printf(“The maximum value is %d”, max);
}
ตวแปรอารเรยแบบ 2 มตจะเปนตวแปรทมการ อางองถงคาขอมลโดยใชคาเลขดชน 2 คาซงประกอบ
ไปดวยคาดชนทใชในการอางองในแนวแถว (rows) และคาดชนทใชอางองในแนวคอลมน(columns)
ตวอยางขอมลอารเรย 2 มต เชน8 16 9 523 15 27 614 25 2 10
int val[3][4]; //(2 bytes * 3 * 4 = 24 bytes)
ตวแปรอรเรย แบบ 2 มต
int val[3][4];double prices[10][5]; char code[6][5];
กรประกศ ตวแปร อรเรย 2 มต
code[0][1] code[0][2]
code[0][0] code[0][3]
code[1][0] code[1][1]
code[5][0]
....
code[5][3]
num = val[2][3];val[0][0] = 62;new_nu = 4 * ( val[1][0] – 5);sum_row0 = val[0][0] + val[0][1 + val[0][2 + val[0][3];
กรเขถงตวแปรอรเรย2 มต
กรใหคเรมตน (Array Initialization)
int val[3][4] ={ {8,16, 9,52}, {3,15,27, 6}, {14,25,2,10} };
int val[3][4] = {8,16,9,52, 3,15,27,6, 14,25,2,10};
#include<stdio.h>void main(void){
int i, j, val[3][4] = {8,16,9,52,3,15,27,6,14,25,2,10}; printf(“\n Display of val array by eplicit element”);
printf(“\n%2d %2d %2d”,val[0][0],val[0][1],val[0][2],val[0][3]); printf(“\n%2d %2d %2d”,val[1][0],val[1][1],val[1][2],val[1][3]); printf(“\n%2d %2d %2d”,val[2][0],val[2][1],val[2][2],val[2][3]);
for ( i = 0; i < 3; ++i) {printf(“\n”); /* start a new line for each row */for ( j = 0; j < 4; ++j)
printf(“%2d “, val[i][j]);}
}
#include <stdio.h>void main(){ int i, j, val[3][4] = {8,16,9,52,3,15,27,6,14,25,2,10};
/* multiply each element by 10 and display it */
printf(“\n\nDisplay of multiplied elements\n”);
for(i =0 ; i < 3 ; ++ i ){ printf(“\n”); /* start a new line */ for(j = 0; j < 4; ++j){
val[i][j] = val[i][j] * 10; printf(“%3d “, val[i][j]);
} /* End for j */} /* End for i */
} /* End main */
#include <stdio.h>void display(int [3][4]); /* function prototype */void main(){ int i, j, val[3][4] = { 8,16,9,52,3,15,27,6,14,25,2,10 };
display(val);}
void display ( int nums[3][4]){ int row_num, col_num;
for(row_num = 0 ; row_num < 3 ; row_num++) { for(col_num = 0; col_num < 4; ++col_num) printf(“%4d “, nums[row_num][col_num]);printf(“\n”);} /* End for col_num */
} /* End display function */
อรเรยทมกกว 2 มต
เชน อารเรย 3 มตint volume[5][4][3];
อลเมนตแรกคอ volume[0][0][0] อลเมนตสดทายคอ volume[4][3][2]
3
42
ควมผดพลดของโปรแกรมทวไปเกยวกบอรเรย ลมประกาศตวแปร ใชงานตวแปรอารเรย นอกเหนอจากขอบเขตท
ประกาศไว
int error[3] , i;
for ( i = 0 ; i <=3 ; i++ )error[i] = i;
ควมผดพลดของโปรแกรมทวไปเกยว กบอรเรย (ตอ)
ลมใหคาเรมตนกบตวแปรอารเรย แลวนำาตวแปรนนไปใชงาน
int a1 = 5, a2 = 8;int total[2];
total[1] = total[0] + a1 + a2;
สยอกขระ (String) จดเปนโครงสรางของอารเรย 1 มต ‘สายอารเรยจะสนสดดวย \0’ เสมอ
char string[8];
string[0]=‘H’;string[1]=‘e’;string[2]=‘l’;string[3]=‘l’;string[4]=‘o’;string[5]=‘\0’;
จากตวอยางจะไดตวอกขระเปนขอความวา “Hello”
กรประกศตวแปรชนดสยอกขระ
ทำาไดเชนเดยวกบการประกาศตวแปรอารเรย 1 มตchar str1[] ={‘A’, ’B’, ’C’, ’D’, ’\0’};char str2[10]={‘A’, ’B’, ’C’, ’D’, ’\0’};char str3[] = “ABCD\0”;
ตวอยางการประกาศทผดchar str4[2] ={‘A’, ’B’, ’C’, ’D’, ’\0’};
กรกำหนดคใหกบตวแปรชนดสยอกขระ
การกำาหนดคาของอารเรยใหเปนขอความ จะไม สามารถใช โอเปอรเรเตอร = ไดโดยตรงเชน
char a[20];a = “Hello World!”;
ถาตองการเกบขอความใดๆ ลงในอารเรย ตอง ใชวธการเรยกใชฟงกชน เชน ฟงกชนมาตรฐาน
strcpy( ) ทนยามไวใน <string.h>
#include <stdio.h>#include <string.h>int main(){ char a[20] = "XXXXXXXXXX";
printf("%s\n", a); strcpy(a, "ABCD"); printf("%s\n", a); strcpy(a, "0123456789"); printf("%s\n", a);
return 0;}
ฟงกชน strcpy( ) จะทำาหนาทคดลอก ขอความตนฉบบใดๆ ทตองการไปยงอารเรย a โดย
ขอความทมอยเดมในอารเรย a จะถกเขยนทบ และ ขนาดของขอความใน a จะเปนขนาดของขอความ
ใหม
ฟงกชนมตรฐนทนยมใน<string.h>
strcpy (char str2[ ], char str1[ ] ) คดลอกขอความจาก str1 ไปใสใน str2
strlen (char str[ ]) หาความยาวสายอกขระ
strcat(char str2[ ], char str1[ ] ) นำาขอมลจากสายอกขระ str1 ไปใสตอทายสายอกขระ str2
ฯลฯ( เปด Help ของ Borlandc ในหวขอ string.h )
บทท 7สตรคเจอรStructure
Lesson1-210
วตถประสงค
เพอใหนกศกษารจกสตรคเจอร เขาใจรปแบบการจดเกบ และนำาสตรคเจอรไปใชงานได
เพอใหนกศกษาสามารถสงผานคาของสตรคเจอรไปยงฟงกชน และรบคาของสตรคเจอรจากฟงกชนได
Lesson1-211
1. ควมหมยของสตรคเจอรสตรคเจอร หรอกลมขอมลชนดโครงสราง (Structures) คอ กลมของขอมลทประกอบดวยสมาชกทเปนชนดเดยวกนหรอตางชนดกนรวมกนอยเปนกลมขอมล นนคอในสตรคเจอรอาจมสมาชกเปนจำานวนเตม ทศนยม และอกขระได นอกจากนในสตรคเจอรอาจมสมาชกทเปนอารเรย หรอแมแตสตรคเจอรดวยกได ยเนยน (Union) คอโครงสรางขอมลอกแบบหนง จะมความคลายกนกบสตรคเจอรมาก โดย ยเนยนจะมสมาชกไดหลายตว และมขอแตกตางจากสตรคเจอรคอ สมาชกของยเนยนแตละตวจะใชหนวยความจำารวมกน แมวาสมาชกแตละตวอาจจะมประเภทขอมลตางกน นนคอยเนยนยอมใหมการเกบขอมลทแตกตางกนไวในหนวยความจำาเดยวกน ในเวลาทตางกน
Lesson1-212
โครงสรงทวไปของสตรคเจอร struct ชอแบบของสตรคเจอร
{ ชนดของตวแปร ชอตวแปร [, ชอตวแปร , ...]; ชนดของตวแปร ชอตวแปร [, ชอตวแปร , ...]; ............ ชนดของตวแปร ชอตวแปร [, ชอตวแปร , ...];
} ชอตวแปร [, ชอตวแปร , ...];
struct ชอแบบของสตรคเจอร ชอตวแปร [, ชอตวแปร , ...];
Lesson1-213
struct address{ char name[30];
char detail[50];int age;char telephone[10];
};
Lesson1-214
เมอตองการสรางตวแปรสตรคเจอร สามารถกำาหนดไดดงน
struct address input1, input2;struct address{ char name[30];char detail[50];int age;char telephone[10];} input1, input2
Lesson1-215
ตวอยางการกำาหนดคาใหตวแปร input สามารถทำาไดดงน
strcpy(input.name, "User Example"); strcpy(input.detail, "1 ratutid
Haddyai Songkhla");input.age=20;
strcpy(input.telephone, "212895");
Lesson1-216
# include <stdio.h> void main()
{ struct { char name[3 0 ]; char detail[5 0 ]; int age; char telephone[1 0 ]; } address = {"User
1Example"," ratutid Haddyai
Songkhla",2 0 ,"2 1 2 8 9 5 "}newaddress; /* Display address of data groups* MMMMMMMMMMMMMMM MM MMMMMMM MMMMMMMM
is %p\n",&address); printf("Address of newaddress
variable is %p\n",&newaddress);
Lesson1-217
กรกำหนดชนดตวแปรชนดใหม
การกำาหนดชนดตวแปรชนดใหมในภาษาซ ทำาไดโดยโดยใชคำาสง typedef ซงสามารถใชในการลดขนตอนในการประกาศตวแปรชนดสตรคเจอรได
Lesson1-218
typedef struct {ชนดของตวแปร ชอตวแปร [, ชอตวแปร , ...];ชนดของตวแปร ชอตวแปร [, ชอตวแปร , ...];............ชนดของตวแปร ชอตวแปร [, ชอตวแปร , ...];
} ชอแบบของตวแปร;
Lesson1-219
typedef struct{ char name[30]; char detail[50];
int age; char telephone[10];
} addresstype;
Lesson1-220
เมอกำาหนดตวแปรหลงจากการกำาหนดดวย typedef แลว ไมตองมคำาวา struct นำาหนาชนดขอมลอก เชน
addresstype input1, input2;
Lesson1-221
กรผนสตรคเจอรใหฟงกชน
การผานคาตวแปรสตรคเจอรไปใหฟงกชนสามารถทำาไดเชนเดยวกบตวแปรเดยวทวไป โดยสามารถสงสมาชกของสตรคเจอรหรอ ทงกลมขอมลผานฟงกชนได สมาชกแตละตวของสตรคเจอรสามารถสงเปนอารกวเมนตของฟงกชน และสงกลบจากฟงกชน โดยผานประโยค returnได โดยสมาชกแตละตวของสตรคเจอรจะมการจดการลกษณะเดยวกบตวแปรธรรมดา
Lesson1-222
กรใชอรเรยกบสตรคเจอรจดประสงคในการสรางสตรคเจอรเพอเกบขอมล
รวมกนไวในโครงสรางเดยวกน ดงนนในการเกบขอมลสตรคเจอรจำานวนมากๆ จงตองกำาหนดใหเปนตวแปรอารเรยของสตรคเจอร เชนการกำาหนดให input เปนอารเรยของสตรคเจอร addressทมทเกบขอมลจำานวน 50 ชดสามารถกำาหนดไดดงน struct address input[50];
Lesson1-223
ชอตวแปรอรเรยของสตรคเจอร[ตำแหนงขอมลในอรเรย].ชอสมชกของสตรคเจอร
เชน การแสดงคาสมาชกในอารเรยของสตรคเจอร input สามารถทำาไดดงน int i;
for(i=0; i<50; i++) printf("%s\n",input[i].name);
Lesson1-224
ยเนยนในการกำาหนดตวแปรตามปกต ตวแปรแตละตวจะมพนท
เกบขอมลแยกจากกน แตยเนยนเปนการกำาหนดโครงสรางททำาใหตวแปรหรอกลมตวแปรทกำาหนดนนมาใชพนทเดยวกน
ยเนยนคลายกบสตรคเจอร คอยเนยนประกอบดวยสมาชกหลายตว ซงอาจมขอมลทแตกตางกน แตสมาชกทกตวในยเนยนจะใชเนอทหนวยความจำาของคอมพวเตอรรวมกน ในขณะทสมาชกแตละตวของสตรคเจอรจะมหนวยความจำาของตวเอง ดงนนการใชยเนยนสามารถประหยดหนวยความจำากบการทำางานทตองใชสมาชกหลายตว แตไมจำาเปนตองกำาหนดคาใหกบสมาชกทกตวในเวลาเดยวกน
ในการจดเกบขอมลของสมาชกทมชนดตางกน(ใชจำานวนเนอทหนวยความจำาไมเทากน ) ตวแปลโปรแกรมจะทำาใหเองโดยอตโนมต แตอยางไรกตามควรจะทราบวาในขณะนนเกบขอมลชนดใดในยเนยน เนองจากการเรยกใชขอมลผดชนด จะไดผลลพธทไมมความหมาย รปแบบทวไปในการกำาหนดยเนยนเปนดงน
Lesson1-225
union ชอแบบของยเนยน { ชนดของตวแปร ชอตวแปร[, ชอตวแปร, ...]; ชนดของตวแปร ชอตวแปร[, ชอตวแปร, ...]; ............ ชนดของตวแปร ชอตวแปร[, ชอตวแปร, ...]; } ชอตวแปร[, ชอตวแปร, ...];
Lesson1-226
union { long lvar; int ivar; char cvar;
} uvar;
บทท 8Software
Development on C
การพฒนาซอฟตแวรดวยภาษาซ
OObjectives (จดประสงค)อธบายขนตอนการพฒนาโปรแกรมได
ออกแบบขนตอนการเขยนโปรแกรมดวยภาษาซ
อธบายวธการคนหาแบบเรยงลำาดบ และจดลำาดบ แบบ bubble ได
Lesson1-229
กรประยกตใชงนโปรแกรมดวยภษซ
ภาษาซเปนภาษาระดบสงทสามารถทำางานแบบภาษาระดบตำา(assembly language)ได ดวยลกษณะการใชงานของภาษาและตวแปลภาษาทมความสามารถแปลงโปรแกรมไดอยางมประสทธภาพ การประยกตใชงานภาษาซเพอเขยนโปรแกรมจงสามารถทำาไดอยางหลากหลาย เชน การคำานวณทางคณตศาสตร การจดการแฟมขอมล การเขยนโปรแกรมระบบปฏบตการ การควบคมอปกรณตอพวงกบคอมพวเตอร หรอใชสรางโปรแกรมประยกตอนๆ ทงนตองมการพจารณาถงฟงกชนการใชงานของภาษาและตวแปลภาษาดวย การเขยนโปรแกรมดวยภาษาซ ไมเพยงตองรรปแบบภาษา(syntax) เทานน แตจำาเปนตองรขนตอนการสรางโปรแกรมดวย เพอใหโปรแกรมสามารถทำางานไดครบตามความตองการอยางถกตอง
Lesson1-230
1. ขนตอนกรพฒนโปรแกรม11. การระบความตองการใชงาน เปนขนตอนการ
อธบายลกษณะของงานทตองการนำาโปรแกรมใช12 การระบรายละเอยดการทำางานของโปรแกรม
เปนขนตอนทอธบายวาจะใชโปรแกรมไปทำาอะไรบางในงานทไดระบความตองการนน13 การออกแบบโปรแกรม เปนขนตอนทนำาราย
ละเอยดการทำางานของโปรแกรมมาออกแบบโดยการเขยน algorithms หรอ ลกษณะขอมลทจะตองใชในโปรแกรม
Lesson1-231
1.4 การเขยนโปรแกรม เปนขนตอนทนำาการออกแบบโปรแกรมไวมาเขยนเปนคำาสง ในภาษา คอมพวเตอร เพอสรางเปนโปรแกรมทสมบรณ
1.5 การทดสอบโปรแกรม เปนขนตอนเพอทดสอบโปรแกรมเพอหาขอผดพลาด และหนาทของโปรแกรม
1.6 การแกไขโปรแกรม เปนขนตอนทใชแกไขสวนผดพลาดจากการทดสอบใหถก ตอง และนำาไปทดสอบอกครง
1.7 การนำาโปรแกรมไปใชงาน เปนขนตอนการนำาโปรแกรมทผานจากการทดสอบแลวไปใชงานยงระบบงานทตองการ
1.8 การบำารงรกษาโปรแกรม เปนขนตอนการนำาโปรแกรมทมขอผดพลาดทพบจากการใชงานจรงไปแกไข
1.9 การปรบปรงและเปลยนแปลงโปรแกรม เปนขนตอนการนำาโปรแกรมทผานการ ใชงานแลว และตองการเปลยนแปลงบางอยาง เชน เพมเตมหนาท , เปลยนขนตอนวธ
ของโปรแกรมเพอเพม ประสทธภาพการทำางาน เปนตน
Lesson1-232
2. กรประยกตใชงนภษซการใชงานภาษาซเพอพฒนาโปรแกรมประยกตนน สามารถทำาได
โดยการดำาเนนตามขนตอนการพฒนาโปรแกรม แลวนำามาออกแบบการประมวลผลและลกษณะขอมลทใชงาน เพอใชสำาหรบเขยนโปรแกรมตอไปลกษณะโปรแกรมในภาษาซ ประกอบดวยสวนของโปรแกรมทเปนคำาสงในภาษาซ และตองมฟงกชนอยางนอยหนงฟงกชนคอฟงกชนหลก(main function) นอกจากการเขยนโปรแกรมเองแลวยงสามารถเรยกใชงานสวนของโปรแกรมทเขยนไวแลวในแฟมขอมลไลบราร(library file) กได โดยการระบแฟมขอมลหวเรอง(header file) ในคำาสง #include ดงแสดงไดตอไปน
Lesson1-233
แฟมขอมลหวเรอง
ฟงกชนหลก
ฟงกชน ยอย
#include <stdio.h>
main() printf(…….){ { printf(……….); function1(……….); }
scanf(……) function2(………..); {}
function1(……..){
}ไลบรารฟงกชน
function2(……..){
}
Lesson1-234
3. วธกรเรยงลำดบและกรคนหขอมล3.1 กรใช bubble sort เพอเรยงลำดบขอมลวธการเรยงลำาดบแบบ Bubble Sort เปนวธการจด
เรยงทมความซบซอนนอย โดยใชการเปรยบเทยบขอมลคทอยตดกน ถาไมเรยงลำาดบกนอยกจะสลบขอมลกน จนกระทงครบทกขอมล ในการเปรยบเทยบแตละรอบจะไดคาทมากทสด หรอนอยทสดตามทกำาหนดไวในลำาดบทตองการจากนนกเปรยบเทยบในรอบตอไป ซงขอมลทนำามาเปรยบเทยบกจะลดลงไปรอบละหนงขอมล เมอเปรยบเทยบไปเรอยๆ จะไดขอมลสดทายเหลออยหนงขอมล กจะไดชดขอมลทเรยงลำาดบตามทตองการ
Lesson1-235
ตวอยง ขอมลทไดจากการเรยงขอมลดวยวธ Bubble จากนอยไปมากเปนดงน
เรมตน 5 7 2 9 8 1 3 6 0 4
รอบท 1 5 2 7 8 1 3 6 0 4 9รอบท 2 2 5 7 1 3 6 0 4 8 9รอบท 3 2 5 1 3 6 0 4 7 8 9รอบท 4 2 1 3 5 0 4 6 7 8 9รอบท 5 1 2 3 0 4 5 6 7 8 9รอบท 6 1 2 0 3 4 5 6 7 8 9รอบท 7 1 0 2 3 4 5 6 7 8 9รอบท 8 0 1 2 3 4 5 6 7 8 9รอบท 9 0 1 2 3 4 5 6 7 8 9
Lesson1-236
32. กรคนหแบบเรยงลำดบ(Sequential Search หรอ Linear Search)ลกษณะของขอมลทจะทำาการคนหาจะมอยสองแบบกคอ
ขอมลทผานการจดเรยงแลวและ ขอมลทยงไมไดผาน การจดเรยง การคนหาขอมลในชดขอมลทยงไมไดจด
เรยงวธการหาทงายทสดคอวธการคนหาแบบเรยงลำาดบวธการคนหาวธนจะทำาการเปรยบเทยบขอมลไปเรอยๆจนกวาจะเจอขอมลตวทตองการหรอถาหาไมเจอกจะคน
ไปจนจบชดขอมล เนองจากเราไมสามารถบอกไดวาขอมลตวทเราตองการจะอยทตำาแหนงใดในชดขอมล
Lesson1-237
ตวอยางการคนหาขอมล 3 จากขอมลทยงไมจดเรยงจะไดผลดงตอไปนData for search are 1 3 6 8 9 5 3 2 2 4 4 4 4 7 7 7
7 7 7 7Found 3 in data number 2Found 3 in data number 7* Found 3 about 2 data *
จะไดวามตวเลข 3 อยในชดขอมลตำาแหนงท 2 และ 7 โดยการคนหา แบบเรยงลำาดบจากตนขอมลจนจบขอมลจำานวน 20 ครง