บทที่ 3. introduction to c language programmingamarin/teaching/241101/... ·...

29
241-101 Introduction to Computer Programming บทที3. Introduction to C Language Programming แนะนําการเขียนโปรแกรมดวยภาษาซี วัตถุประสงค เพื่อใหนักศึกษาสามารถ 1. เขาใจหลักการเขียนโปรแกรมและการใชงานภาษาซี เบื้องตนได หัวขอ 1. แนะนําภาษาซีเบื้องตน 1.1 รูปแบบการทํางานของภาษาซี 1.2 การคอมไพลและลิงคโปรแกรมในภาษาซี 1.3 โครงสรางของโปรแกรมที่เขียนดวยภาษาซี 1.4 รูปแบบคําสั่งในภาษาซี 1.5 การเขียนคําอธิบายในภาษาซี 1.6 ตัวแปรในภาษาซี 1.7 ตัวประมวลผลกอน 1.8 คําสั่งและนิพจน 2. อินพุทและเอาทพุท 2.1 บทนํา 2.2 ASCII 2.3 การแสดงผลขอมูล 2.4 การรับคาขอมูล 3. เครื่องหมายดําเนินการ 3.1 ตัวดําเนินการทางคณิตศาสตร 3.2 ตัวดําเนินการสัมพันธและตัวดําเนินการตรรกะ 3.3 ตัวดําเนินการประกอบ 3.4 ตัวดําเนินการบอกขนาด 3.5 ลําดับการทํางานกอน-หลังของตัวดําเนินการ 3.6 การเปลี่ยนแปลงคาผลลัพธเปนตัวแปรชนิดใหม

Upload: others

Post on 24-Feb-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

บทที่ 3. Introduction to C Language Programming แนะนําการเขียนโปรแกรมดวยภาษาซี

วัตถุประสงค เพื่อใหนักศึกษาสามารถ

1. เขาใจหลักการเขียนโปรแกรมและการใชงานภาษาซี เบื้องตนได หัวขอ

1. แนะนําภาษาซีเบื้องตน 1.1 รูปแบบการทํางานของภาษาซี 1.2 การคอมไพลและลิงคโปรแกรมในภาษาซี 1.3 โครงสรางของโปรแกรมที่เขียนดวยภาษาซี 1.4 รูปแบบคําสั่งในภาษาซ ี1.5 การเขียนคําอธิบายในภาษาซี 1.6 ตัวแปรในภาษาซี 1.7 ตัวประมวลผลกอน 1.8 คําสั่งและนิพจน

2. อินพุทและเอาทพุท 2.1 บทนํา 2.2 ASCII 2.3 การแสดงผลขอมูล 2.4 การรับคาขอมูล

3. เครื่องหมายดําเนินการ 3.1 ตัวดําเนินการทางคณิตศาสตร 3.2 ตัวดําเนินการสัมพันธและตวัดําเนนิการตรรกะ 3.3 ตัวดําเนินการประกอบ 3.4 ตัวดําเนินการบอกขนาด 3.5 ลําดับการทํางานกอน-หลังของตัวดําเนินการ 3.6 การเปลี่ยนแปลงคาผลลัพธเปนตัวแปรชนดิใหม

Page 2: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

1. แนะนําภาษาซีเบื้องตน (Introduction to basic C language) ซีพลัสพลัสเปนภาษาที่ทํางานไดอยางกวางขวาง เขาใจงาย เขียนงาย ตลอดจนมีคําสั่งที่อํานวยความ

สะดวกใหกับผูเขียนที่จะสามารถเรียกใชไดตามที่ตองการ ซ่ึงผูเขียนโปรแกรมควรจะตองศึกษาและทําความเขาใจในกฏเกณฑเหลานั้นใหดีเสียกอน ก็จะทําใหสามารถนําภาษาซีมาใชงานไดอยางมีประสิทธิภาพ กฏเกณฑของเครื่องมือที่ใชเขียนโปรแกรมภาษาซีของแตละผูผลิต จะมีขอแตกตางกนัไปบางเล็กนอย 1.1 รูปแบบการทํางานของภาษาซี

ในภาษาซีจะเขียนโปรแกรมโดยการเรียกใชแตละชดุของโปรแกรมที่เรียกวา ฟงกชัน (Function) หรือในโปรแกรมภาษาอืน่อาจจะเรยีกวา โปรแกรมยอย หรือชุดคําสัง่ยอย (Procedure) นั่นเอง ฟงกชันเหลานี้จะมีช่ืออะไรก็ได กีฟ่งกชันก็ได แตอยางนอยตองมี 1 ฟงกชันทีช่ื่อ main เพื่อใหโปรแกรมเริ่มทํางานที่ฟงกชันนี้ ดังรูป โปรแกรม การทํางาน ฟงกชัน main int main ( ) { printf(“ My house”); printf(“is very beautiful”); triangle( ); box( ); printf<<“finish”; return 0; } void triangle( ) ฟงกชัน triangle { /* draw triangle */ } void box ( ) ฟงกชัน box { /* draw box */ }

รูปท่ี 1.1 แสดงรูปแบบการทํางานของภาษาซี

printf …….. printf …….. triangle box printf ….

triangle

box

Page 3: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

จากตัวอยาง จะแสดงใหเห็นวา ภาษาซีสามารถมีไดหลายฟงกชัน แตจะมีฟงกชันหลัก คือ ฟงกชัน main ในการควบคุมการทํางานของโปรแกรมวาใหทําฟงกชันใดบาง แตถาโปรแกรมขนาดเล็กไมมีการทํางานที่ซับซอน อาจจะไมจําเปนตองมีฟงกชันอื่นๆ มีฟงกชัน main เพียงฟงกชันเดียวกไ็ด 1.2 การคอมไพลและลิงคโปรแกรมในภาษาซี การสรางโปรแกรมที่สามารถใชงานไดขึ้นมาโปรแกรมหนึ่ง ในภาษาซีมีขั้นตอนดังนี้ 1. สรางตัวโปรแกรมที่เปนตัวอักษร หรือเรียกวา ซอรสไฟล (Source file) โดยมีนามสกุลเปน .c ขึ้นมา

กอน โดยใชโปรแกรมที่สามารถเขียนไฟลที่เก็บอักขระ (Editor) ใดๆ ก็ได อักษรหรืออักขระใดๆ นั้น จะตองอยูในรปูแบบของการโปรแกรมภาษา (ขั้นตอนนี้คือการสรางโปรแกรมที่เปนภาษามนุษยนั่นเอง)

2. คอมไพลเลอรของภาษาซี (C Compiler) จะทําการแปลงซอรสไฟล จากอักขระใดๆ ใหเปนรหัสที่เครื่องคอมพิวเตอรสามารถเขาใจไดเก็บไวในอีกไฟลหนึง่เรียกวาไฟลวตัถุประสงค (Object file) ที่มีนามสกุล .obj (ขั้นตอนนี้เรียกวา การคอมไพล เปนการแปลงภาษามนษุยเปนภาษาเครื่องนั่นเอง)

3. ตัวเชื่อม (Linker) จะทําการตรวจสอบวาในโปรแกรมที่เขียนขึ้นนัน้ มีการเรียกใชงานฟงกชันมาตรฐานใด จากหองสมุดของภาษาซ ี(C Library) บางหรือไม ถามี ตัวเชื่อมจะทําการรวมเอาฟงกชันเหลานัน้เขากับไฟลวัตถุประสงค แลวจะไดไฟลที่สามารถทํางานได โดยมนีามสกุลเปน .exe (ขั้นตอนนี้เรียกวา การลิงค เปนการรวมฟงกชันสําเร็จรูปเขาไป แลวสรางไฟลที่ทํางานได)

รูปท่ี 1.2 แสดงขั้นตอนการคอมไพลและลิงคโปรแกรมภาษาซ ี ตัวอยาง

1. สรางซอรสไฟลที่มีขอความ ที่เก็บโปรแกรมภาษาซี ดังนี ้#include <stdio.h> int main() { printf(“Hello World”); return 0; }

แลวเก็บไวในไฟลช่ือ 1.c

Source file

C Compiler

Computer Object file Computer Execute file

Linker Library

Page 4: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

2. ใชคําสั่งเพื่อเรียกใหคอมไพลเลอรของภาษาซีทํางาน โดยคอมไพลเลอรจะทําการแปลงอักขระจากซอรสไฟล ใหเปนรหัสที่คอมพิวเตอรสามารถเขาใจได จะไดไฟลช่ือ 1.obj

3. ใชคําสั่งเพื่อเรียกใหตวัเชื่อมของภาษาซีทํางาน ตวัเชื่อมจะทําการรวมไฟลหองสมุดที่ช่ือ stdio.h เขามา (ตามขอความ #include …) แลวสรางไฟลที่สามารถทํางานไดช่ือ 1.exe

**หมายเหต ุ คําวา printf ตามดวย ( และ ) ในตัวโปรแกรม คือฟงกชันมาตรฐานหนึ่งทีพ่ิมพขอความออกทางหนาจอ โดยขั้นตอนและวิธีการทํางานของฟงกชัน printf จะอยูในไฟลหองสมุดช่ือ stdio.h

ดังนั้น ถาตัวเชื่อมไมทําการรวมไฟลหองสมุดที่ช่ือ stdio.h จะทําใหไมสามารถเรียกใชงานฟงกชัน printf ไดเลย

1.3 โครงสรางของโปรแกรมที่เขียนดวยภาษาซี โครงสรางของโปรแกรมที่ขียนดวยภาษาซแีบงยอยไดเปน 3 สวนดังนี ้

1.3.1 สวนเรยีกใชไฟลอ่ืนๆ เปนสวนที่บอกใหคอมไพลเลอรไปดึงไฟลอ่ืนที่กําหนดมาแปลรวมดวย ไฟลเหลานี้อาจจะเปนไฟลมาตราฐานที่มีใหแลวในภาษาซี หรือเปนไฟลที่เขียนขึ้นมาใหมกไ็ด โดยสวนใหญมักจะเปนไฟลที่มีนามสกุลเปน .h 1.3.2 สวนกําหนดชื่อในโปรแกรม เปนสวนที่ใชกําหนดคาคงที่ ตัวแปร และคาอื่นๆ ที่ตองการ 1.3.3 สวนคําสั่ง จะประกอบดวยคําสั่งตางๆ หรือฟงกชันอื่นๆ ที่ใชในการทํางานของโปรแกรม

ตัวอยาง โครงสรางโปรแกรมที่เขียนดวยภาษาซี ดงัรูปที่ 1.3 #include <stdio.h> int main(void) { char ch; ch = 'A'; printf(″Hello world″); return 0; }

รูปท่ี 1.3 แสดงสวนประกอบของโปรแกรมที่เขียนดวยภาษาซีอยางงาย

ผลที่จากการรันโปรแกรม จะไดขอความบนหนาจอวา Hello World

สวนเรียกใชไฟลอ่ืน

สวนกําหนด

สวนคําสั่ง

Page 5: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

คําอธิบาย - #include <stdio.h> คือบอกคอมไพลเลอรใหนําไฟล stdio.h มารวมดวย - main คือช่ือของฟงกชัน โปรแกรมจะเริ่มทํางานที่นี ่ และเมื่อจบฟงกชัน main หมายถึงจบ

โปรแกรมดวย - char ch คือการประกาศตวัแปร ch เปนตัวแปรที่มีชนดิเปนตวัอักษร A - ch = 'A' คือการใหคาตัวแปร ch มีคาเปนตัวอักษร A - printf(”Hello World”) คือการใชฟงกชัน printf พิมพขอความที่อยูในเครื่องหมาย “” ออกทาง

อุปกรณเอาทพุทมาตรฐาน **ขอสังเกต ทุกประโยคภาษาซี (C Statement) จะตองมีเครื่องหมาย ; ปดทาย 1.4 รูปแบบคาํสั่งในภาษาซี รูปแบบคําสั่งในภาษาซี มีกตกิา และขอแนะนําในการเขียนคําสั่ง ดังนี ้1. ทุกคําสั่งจะใชเครื่องหมาย ; (semi-colon)แสดงการจบของคําสั่ง เชน printf(”Hello World”); 2. เครื่องหมาย { } (bracket) เครื่องหมายนีท้ําหนาที่กําหนดขอบเขตของกลุมคําสั่งในฟงกชัน 3. ช่ือตางๆ เชน ช่ือตัวแปร ช่ือฟงกชัน ควรขึ้นตนดวยตวัอักษรตัวเล็ก เชน abs, value เปนตน 1.5 การเขียนคําอธิบาย (Comment) ในภาษาซี ภาษาซีพลัสพลัสนิยมการเขยีนขอความอธบิายการทํางานในสวนตางๆของโปรแกรมเพื่อใหเขาใจและอานโปรแกรมงายขึ้น การเขียนอธิบายจะสามารถเขียนได 2 แบบ คือ

1. ในกรณีที่ขอความอธิบายเปนขอความสั้นๆ ผูเขียนโปรแกรม สามารถใชเครื่องหมาย // กอนหนาขอ-ความ ดังนี ้

// ขอความที่ตองการอธิบาย 2. ในกรณีที่ขอความอธิบายเปนขอความยาวๆ สามารถใชเครื่องหมาย /* และ */ ครอมขอความที่

ตองการอธิบาย ดังนี ้ /* ………………………………………

………. ขอความที่ตองการอธิบาย………. …………………………………………..*/

การเขียนคําอธิบายจะเขยีนไวที่ไหนในโปรแกรมก็ได โดยมากจะนยิมเขียนอธิบายขั้นตอนการ

ทํางานกอนเขยีนคําสั่ง หรือ อธิบายความหมายของคําสั่งไวขางคําสั่งนัน้ก็ได

Page 6: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

1.6 ตัวแปร (Variable) ในภาษาซี ตัวแปร หมายถึงชื่อเรียกแทนพื้นที่เก็บขอมูลในหนวยความจํา มีชนดิของขอมูล หรือแบบของตัว

แปรคือ char, int, long, float, double, unsigned int, unsigned long int, • โดยช่ือของตัวแปรนี้ จะกําหนดเปนกลุมอักษรที่ผูเขียนโปรแกรมสามารถกําหนดเองได โดยมี

ขอกําหนดดังนี้ตัวอักษรภาษาอังกฤษตวัพิมพเล็กและตวัพิมพใหญภาษาซีพลัสพลัสถือวาเปนคนละตวักัน เชน test และ Test เปนตัวแปรคนละตัวกนั

• ตัวอักษรตวัแรกตองเปนตวัอักษรหรือ _ (underline character)จะเปนตัวเลขไมได • ตัวอักษรทีไ่มใชตัวแรกจะเปนตัวอักษรหรือ _ หรือตัวเลขก็ได • หามตั้งชื่อซํ้ากบัคําสงวนซึ่งไดแก

asm, auto, bool, break, case, catch, char, class, const, const_cast, continue, default, delete, do, double, dynamic_cast, else, enum, explicit, extern, false, float, for, friend, goto, if, inline, int, long, mutable, namespace, new, operator, private, protected, public, register, reinterpret_cast, return, short, signed, sizeof, static, static_cast, struct, switch, template, this, throw, true, try, typedef, typeid, typename, union, unsigned, using, virtual, void, volatile, wchar_t การประกาศตวัแปร มีลักษณะดังนี ้

ชนิดของขอมูลในภาษาซี 1. ตัวแปรแบบ char เปนตัวแปรที่ใชสําหรับเก็บขอมลูที่เปนตัวอักษรขนาด 1 ตัว โดยใชเนื้อทีใ่นการเก็บ 1

ไบต ตัวอยางตัวแปรชนดินี้ เชน ‘A’ , ‘b’ , ‘1’ , ‘?’ 2. ตัวแปรแบบ int เปนตัวแปรที่ใชสําหรับการเก็บคาตวัเลขที่เปนจํานวนเต็มที่มีคาระหวาง -2147483648 ถึง 2147483649 ใชเนื้อที่ในการเก็บ 4 ไบต ตวัอยางตัวแปรชนดินี้ เชน 5 ,-10, 2000 3. ตัวแปรแบบ long เปนตัวแปรที่เก็บคาเปนจํานวนเต็มที่มีจํานวนไบตเปน 2 เทาของจํานวนเดิม (มักจะใช

เปนคํานําหนาตัวแปร เชน long int) 4. ตัวแปรแบบ float เปนตวัแปรที่ใชเก็บขอมูลที่เปนเลขทศนิยม โดยจะเก็บอยูในรปู a.b x 10e ใชพื้นที่ใน

การเก็บ 4 ไบต มีคาระหวาง 3.4E-38 ถึง 3.4E+38 หรือ แสดงเปน เลขทศนิยมไดไมเกนิ 6 ตําแหนง ตัวอยางตวัแปรชนิดนี้ เชน 10.625, -6.67

ชนิดตัวแปร ชื่อตัวแปร , ชือ่ตัวแปร , ชื่อตัวแปร,.....;

Page 7: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

5. ตัวแปรแบบ double เปนตัวแปรทีเ่กบ็ขอมูลที่เปนเลขทศนิยมเหมือนกับ float แตจะใชพืน้ที่ในการเก็บมากกวาเดิม 2 เทา คือมีขนาด 8 ไบต มีคาระหวาง 1.7E-308 ถึง 1.7E+308

6. ตัวแปรแบบ unsigned แสดงวาเปนตัวแปรที่เก็บคาเปนจํานวนเต็มแบบไมคิดเครื่องหมาย (เปนบวกเทานั้น) มกัจะใชเปนคํานําหนาตัวแปร ตัวอยางการใชงาน เชน unsigned int

ชนิด ขนาดความกวาง ชวงของคา char 8 บิต ASCII character (-128 ถึง 127) int 32 บิต -2147483648 ถึง 2147483649 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 32 บิต 0 ถึง 4294967296 unsigned long int 32 บิต 0 ถึง 4294967296

ตารางที่ 1.1 แสดงชนิดและขนาดของขอมูลท่ีใชในภาษาซี ตัวอยางของการประกาศตัวแปรไดแก ตัวอยางที่ 1 int a ; หมายความวา ประกาศตัวแปร a เปนตัวแปรที่ใชสําหรับเก็บคาที่เปนเลขจํานวนเต็มทีม่ีคาอยูระหวาง -2147483648 ถึง 2147483649 ตัวอยางที่ 2 int num1=8; หมายความวา ประกาศตัวแปร num1 เปนตัวแปรที่เก็บคาตัวเลขจํานวนเต็ม โดยใหคาเริ่มตนเทากับ 8 ตัวอยางที่ 3 float money,price ; หมายความวา money และ price เปนตัวแปรที่ใชสําหรับเก็บคาที่เปนเลขทศนิยม โดยจะใหตําแหนงทศนิยมไดไมเกิน 6 หลัก ตัวอยางที่ 4 char ch=’A’; หมายความวา ประกาศตัวแปร ch เปนตัวแปรที่เก็บคาตัวอักษรเพยีง 1 ตัว คือ ตัวอักษร ‘A’

Page 8: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

ตัวอยางที 5 unsigned long int test; หมายความวา ประกาศตัวแปร test เปนตัวแปรทีใ่ชสําหรับเก็บคาที่เปนเลขจํานวนเต็ม แบบยาวที่ไมคดิเครื่องหมาย ตัวอยางเพิ่มเตมิ char a,b,c,d; /* ตัวแปร a,b,c,d เปนตัวแปรชนิด character */

unsigned e; /* ตัวแปร e เปนตวัแปรชนิด unsigned int */ char key = ′A′; /* ตัวแปร key เปนตวัแปรชนิด character มีคา ′A′ */

นอกจากนี้ การกําหนดตวัแปรใน สามารถทําได 2 แบบ คือ

- กําหนดไวนอกกลุมคําสั่ง หรือฟงกชัน เรียกตวัแปรนีว้า Global Variable กําหนดไวนอกฟงกชัน ใชงานไดทั้งโปรแกรม มีคาเริ่มตนเปน 0 (กรณีไมไดกําหนดคาเริ่มตน)

- กําหนดไวในกลุมคําสั่ง หรือฟงกชัน เรียกตัวแปรนี้วา Local Variable กําหนดไวภายในฟงกชัน ใชงานไดภายในฟงกชันนัน้ และไมถูกกําหนดคาเริ่มตนโดยอัตโนมัต ิ

ตัวอยางของกาํหนดตวัแปรแบบ Global และ Local บรรทัดที่ 1. #include<stdio.h> บรรทัดที่ 2. #define PI 3.14159 บรรทัดที่ 3. int area; /* global variable */ บรรทัดที่ 4. int main() บรรทัดที่ 5. { float radius; /* local variable */ บรรทัดที่ 6. บรรทัดที่ 7. ……… บรรทัดที่ 8. ……… บรรทัดที่ 9. บรรทัดที่ 10. } 1.7 ตัวประมวลผลกอน (Preprocessor) คือ สวนที่คอมไพเลอรจะตองทํากอนทําการแปลโปรแกรม คําสั่งของตัวประมวลผลกอนจะนําหนาดวยเครื่องหมาย # มีคําสั่งตางๆ ตอไปนี ้ #include #define #if #pragma

Page 9: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

#endif #error #ifndef #undef #elif #else #ifdef #line คําสั่งที่นาสนใจมี 2 คําสั่งคือ 1.7.1. #include ทําหนาที่แจงใหคอมไพเลอรอานไฟลอ่ืนเขามาแปลรวมดวย มีรูปแบบดังนี้ #include <filename> หรือ #include ″filename″ * #include <…> ใชสําหรับคนหา files ที่อยูใน standard library แตถาใชเครื่องหมาย ″…″ จะเปนการกําหนดใหคนหาจากไดเร็คทรอรีปจจุบัน และ ไดเร็คทรอรีที่กําหนดพารทไว

* ช่ือฟงกชันการทํางานพื้นฐานของภาษาซตีัวแปร คาคงที่ และมาโครพื้นฐาน โดยปกติจะรวมกนัเปนกลุมในไฟลที่เรียกวาไฟลหวั (Header Files) คือไฟล ที่มีนามสกุล .h ไฟลหัวแตละไฟลจะเก็บโมดูลแยกกันเปนสวนการทํางานแตละสวนเพื่อใหผูเขียนโปรแกรมสามารถเรียกใชงานได เชน stdio.h ซ่ึงในไฟลดังกลาวมีการกําหนดคําสั่ง printf

1.7.2 #define ทําหนาที่ใชกําหนดคาคงที่ ที่เปนชื่อแทน คํา นิพจน คําสั่ง หรือคําสั่งหลายคําสั่ง มีรูปแบบการใชงานดังนี้ เชน #define TEN 10 กําหนด TEN แทนคา 10 #define PI 3.141592654 กําหนด PI แทนคา 3.141592654 1.8 คําสั่งและนิพจน (Statement and Expression) คําสั่ง,ขอคําสั่ง (Statement) คือขั้นตอนในการทํางานหนึ่งขัน้ตอน ทุกคําสั่งตองจบดวยเครื่องหมาย ; กลุมคําสั่ง คือคําสั่งที่อยูในวงเล็บปกกา {} นิพจน (Expression) คือการกระทําเพือ่ใหไดผลลัพธคาหนึ่งคา ประกอบไปดวยตวัถูกกระทาํ (Operands) และตัวกระทํา (Operators) เขียนเรยีงกันไป เชน 3 * 2 - 1 + 7 หรือ a * 5 เปนตน เชน 7 + 5 a + b

#define ชื่อตัวแปร (ชื่อท่ีใชแทน) คาท่ีตองการกําหนด

Page 10: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

คาคงที่ ตัวกระทํา คาคงที่ ตัวแปร ตัวกระทํา ตัวแปร ( a * 3 ) + 5 2.0 * sin(2.12) ตัวแปร ตวักระทํา คาคงที่ คาคงที่ ตัวกระทํา ฟงกช่ัน นิพจน ตัวกระทํา คาคงที่

Page 11: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

2. อินพุท และเอาทพุท (Input and Output) 2.1 บทนํา

การส่ังใหเครือ่งคอมพิวเตอรทํางานใดๆ และรอรับคาผลลัพธจากเครื่อง จะตองมีการติดตอกบัเครื่อง โดยการสงผานคาอินพุทไปยังเครื่องคอมพิวเตอร และรับคาเอาทพุทจากเครื่องคอมพิวเตอรดังนี ้

อินพุท คือ การรับคาขอมูลของผูใชเขาไปในเครื่องคอมพิวเตอร อุปกรณอินพุทมาตรฐาน ไดแก คียบอรดหรือแปนพิมพ สแกนเนอร หรือ เมาส

เอาทพุท คือ การแสดงผลขอความ ขอมูล หรือ คาตัวแปรใดๆ ออกมาแสดงใหกับผูใชทางอุปกรณแสดงผลเอาทพุทตางๆ อุปกรณเอาทพุตมาตรฐาน ไดแก จอภาพ ลําโพง หรือ เคร่ืองพิมพ

เคร่ืองคอมพิวเตอรท่ัวไป ไมสามารถจดจําตัวอักษรในลกัษณะของรูปรางตัวอักษรได การจดจํารปูรางตัวอักษรเพื่อนาํไปใชงานนัน้ คอมพิวเตอรจะจดจําในรูปรหัสแทนตัวอักษร เมื่อตองการแสดงตัวอักษร คอมพิวเตอรกจ็ะนําคารหัสเหลานี้ไปเปดตารางภาพตัวอักษร แลวนําภาพตัวอักษรตามรหัสนั้นไปแสดงตอไป 2.2 แอสกี (ASCII)

แอสกีเปนรหสัแทนตัวอักษรท่ีนิยมใชกันมากที่สุด ยอมาจาก American Standard Code for Information Interchange รหัสนี้แทนตวัอักษรได 128 ตัว นอกจากนั้นยังมีอีก 128 ตัว ซึ่งอยูในสวนท่ีเรียกวา Extended ASCII code ในรหัสสวนนีป้กติจะเปนตวัอักษรกรอบ พ้ืน ลายเสน และตัวอักษรกรีก-ละติน ประเทศไทยใชในการกําหนดเพื่อเก็บตวัอักษรภาษาไทย มาตราฐานที่ใชกันก็มี รหัส สมอ. และรหสั เกษตร เปนตน

อักขระหรือตวัอักษร (Characters) คือรหัสที่ใชแทนภาพ หรือ เครื่องหมายยอยที่สดุในการเขียน ใชตัวแปรชนิด Character ในการเก็บขอมูล เชน ′A′ หมายถึงอักษร A ′4′ หมายถึงอักษร 4 ′b′ หมายถึงอักษร b ′\0′ หมายถึงอักษรที่มีรหัสเปน 0 ′\x7′ หมายถึงอักษรที่มีรหัสเปน 7 ในเลขฐานสิบหก

Page 12: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

สตริง (String) คือกลุมขอมูลท่ีประกอบไปดวยตัวอกัขระที่เขียนเรียงกนัไป ใชตวัแปรชนิด อักขระในการเก็บภาพขอมูลตอหน่ึงหนวยตัวอักษร โดยจะมีเคร่ืองหมาย ″ ″ อัญประกาศ (Double qoute) ลอมรอบอยูเสมอ เชน Hello World! ในภาษาซีตองเขียนเปน ″Hello World!″

2.3 การแสดงผลขอมูล

ในการแสดงผลขอมูลในภาษาซีจะมีคําสั่งมาตรฐานในการแสดงผลขอมูล หรือ คาตัวแปรออกมาทางจอภาพ คําสั่งนั้นคือ printf (อานวา พรินต-เอฟ )

ตัวอยางเชน เมื่อผูเขียนโปรแกรมตองการจะแสดงขอความ “Hello World” บนหนาจอคอมพิวเตอร ผูเขียนโปรแกรมสามารถใชคําสั่ง printf ไดดังนี้

#include <stdio.h> int main() { printf(”Hello World!\n”); return 0; } จะไดผลลัพธ ทางหนาจอคือ

พรอมกับการขึ้นบรรทัดใหมของเคอรเซอร (cursor) จากตัวอยางขางตน สามารถอธิบายการทํางานในแตละบรรทัดของโปรแกรมไดดังนี ้ #include <stdio.h>

จะเปนการแจง C preprocessor กอนการคอมไพล วาในโปรแกรมนี้จะมกีารแสดงขอมูล (data) บนหนาจอ หรือ รับขอมูลจากทางคีบอรด ซึ่งในตัวอยางนี้จะหมายถึงการแสดงขอมูลทางหนาจอเพราะ คําสั่ง printf int main()

ฟงกช่ันหลักของโปรแกรม โดยจะมีการรีเทิรน (return) คาเปนแบบจํานวนเต็ม (integer).

Hello World!

Page 13: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

printf(”Hello World!\n”);

ท้ังบรรทัดนี้จะถูกเรียกวา statement ซึ่งประกอบดวย printf เปนคําสั่งท่ีใชเมื่อตองการแสดงขอมูลทางหนาจอ printf จะตามดวยเครื่องหมาย ( และ ) ซึ่งภายในจะเปนขอมูลประกอบการทํางานของ printf หรือเรียกวา พารามิเตอร (parameter) เม่ือโปรแกรมถูกทํางาน ขอความตามรูปแบบที่กําหนดทีอ่ยูภายในเครื่องหมาย () นีจ้ะถูกแสดง ซึ่งในที่นี้คือประโยค Hello World! ในการแสดงตัวอักษรหรือประโยคในภาษาซีน้ัน จะตองอยูภายในเครื่องหมายอญัประกาศ (Double Quote) ; เมื่อจบ statement หน่ึงๆ จะตองถูกปดดวย เครื่องหมาย semi-colon \n จะเห็นวา \n จะไมถูกแสดงบนหนาจอ เนื่องจาก \ (backslash) จะเปนตัวอักษรพิเศษ เมื่อรวมกับตัวอักษรทีด่านหลัง แลวจะทําใหมีความหมายตางๆ ซึ่งในที่น้ี จะหมายความวา เปนการสั่งใหเคอรเซอรข้ึนบรรทัดใหม เราเรียก รหัสพิเศษนีว้า Escape Sequence นอกจาก \n แลว ยังมีรหสัพิเศษอื่นๆอีก ดังนี้คือ

Escape Sequence คา หนาที่ \a 0x07 เสียงดังออกลาํโพงหนึ่งคร้ัง \b 0x08 เล่ือน cursor ไปลบตัวอักษรทางซายมือหนึ่งตัวอักษร \f 0x0c ข้ึนหนาใหม \n 0x0a ข้ึนบรรทัดใหม \r 0x0d เล่ือน cursor ไปทางซายมือสุดของบรรทัด \t 0x09 เล่ือนเคอรเซอร ไป 1 tab ในแนวนอน \\ 0x5c เคร่ืองหมาย \ \′ 0x2c เคร่ืองหมาย ′ \″ 0x22 เคร่ืองหมาย ″ \? 0x3f เคร่ืองหมาย ?

ตารางที่ 2.1 แสดงตัว Escape Sequence ตางๆ ท่ีมีใชในภาษาซี

Page 14: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

return 0

เปนการจบการทํางานของฟงกช่ัน main ซึ่งเปนการบอกวาตองการจะออกจากฟงกช่ัน ตัวอยางดานลางนี้ เปนตวัอยางของการใชงาน printf

ตัวอยางที่ 1 #include <stdio.h> int main() { printf(“Hello”);

Printf(”World!\n”); return 0; }

ผลลัพธ

ตัวอยางที่ 2 #include <stdio.h> int main() { printf(”Hello\n”);

printf(<<”World!\n”); return 0; } ผลลัพธ

ตัวอยางที่ 3 #include <stdio.h> int main() { printf(”The volume of the box is %d”, 2*3*4); return 0; }

Hello World!

Hello World!

Page 15: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

ผลลัพธ

ตัวอยางที่ 4 #include <stdio.h> int main() {

printf(”The volume of the box is ”, 2*3*4); return 0; } ผลลัพธ

จากตัวอยางท่ี 4 จะเปนกรณีที่ ในบรรทัดของคําสั่ง printf มีความยาวมาก ทาํใหไมสามารถเขียนใหจบไดภายใน 1 บรรทัด ผูเขียนโปรแกรมสามารถขึ้นบรรทัดใหมได โดยใสเครื่องหมาย; ปดทายในบรรทัดสุดทาย ตัวอยางที่ 5 #include <stdio.h> int main() { char x = ’M’;

char name[10] = ”Maliwan”; printf(”The first character is %c\n”, x); printf(”My name is %s\n”, name);

return 0; } ผลลัพธ

จากตัวอยางท่ี 5 จะมีการใช \n คือ ใหข้ึนบรรทัดใหม

The volume of the box is 24

The volume of the box is 24

The first character is M My name is Maliwan

Page 16: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

2.4 การรับคาขอมูล

ในการรับคาขอมูลในภาษาซี จะมีคําสั่งมาตรฐานในการรับคาขอมูล ผานทางอุปกรณอินพุทมาตรฐาน(ซึ่งในที่นี้คือ แปนพิมพ) คําสั่งนั้นคือ scanf (อานวา สะ-แกน-เอฟ)

ตัวอยางเชน เมื่อผูเขียนโปรแกรม ตองการเขียนโปรแกรมใหคํานวณปริมาตรของกลองส่ีเหล่ียมใดๆ ซ่ึงมีสูตรในการคํานวณคือ กวาง*ยาว*สูง ผูเขียนโปรแกรมจะตองรับคาความกวาง, ความยาวและความสูงของกลองมาคํานวณ ดังนี ้

#include <stdio.h> int main() { int height,width,length;

printf(”Please enter height of box\n”); scanf(“%d”, &height); printf(”Please enter width of box\n”); scanf(“%d”, &width); printf(”Please enter length of box\n”); scanf(“%d”, &length); printf(”\n”); printf(”The volume of this box is %d\n”, height*width*length);

return 0; }

ผลลัพธ จากตัวอยางดงักลาว ไดมีการกําหนดตวัแปร height,width,length เปนแบบจํานวนเต็ม เพื่อรับคาความสูง, ความกวาง และความยาว ตามลําดับ มาใชการคํานวณ และขอสังเกตคือจะมีการใสเคร่ืองหมาย & หนาตัวแปรเพื่อใชในการรับคา นอกจากนี้ผูเขียนโปรแกรมสามารถรับคาของความสูง, ความกวาง และความยาว ภายในครั้งเดยีวได แทนท่ีจะรับคาทีละบรรทัด ดังตัวอยาง

Please enter height of box 12 Please enter width of box 12 Please enter length of box 10 The volume of this box is 1440

Page 17: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

#include <stdio.h> int main() { int height,width,length;

printf(”Please enter height, width and length of box\n”); scanf(“%d %d %d”, &height, &width, &length); printf(“\n”); printf(”The volume of this box is %d\n”, height*width*length);

return 0; }

ผลลัพธ ตัวอยางของการใช scanf กับขอความซึ่งใช %s และเปนกรณียกเวนที่ไมตองใส & หนาชื่อตวัแปร

#include <stdio.h> int main() { char name[15];

printf(”Please enter your name\n”); scanf(“%s”, name); printf(”Your name is %s\n”, name);

return 0; }

ผลลัพธ

Please enter height, width and length of box 12 12 10 The volume of this box is 1440

Please enter your name Thana Your name is Thana

Page 18: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

3. เคร่ืองหมายดําเนินการ (Operators) เครื่องหมายดําเนินการ (Operators) หรือ ตัวดําเนินการ น้ันกําหนดการการกระทาํที่เกิดขึ้นกับตวัแปร

และคาคงที่ โดยที่นิพจนประกอบดวยตวัแปร และคาคงที่ และใชตัวดําเนินการคํานวณเพื่อใหไดคาตัวดําเนินการในภาษาซี มีจํานวนมากเมื่อเปรียบเทียบกับภาษาคอมพิวเตอรอื่นๆ ภาษาซี ไดแบงตัวดําเนินการออกเปน 3 ประเภท ไดแก ตัวดําเนนิการทางคณิตศาสตร ตัวดําเนนิการสัมพันธและตัวดําเนนิการตรรกะ และ ตัวดําเนินการประกอบ 3.1 ตัวดําเนนิการทางคณติศาสตร (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 แสดงประเภทของตัวดาํเนินการทางคณิตศาสตร

การโอเปอเรชัน (Operation) หรือการทํางานของตัวดําเนินการตองเปนไปตามลําดบัของการวางคาคงท่ีหรือตัวแปรที่จะกระทําตอกัน ซึ่งเรียกวา ลําดับของการโอเปอเรชัน ซ่ึงลําดับการทํางานของโอเปอเรเตอรโดยคอมไพเลอรภาษา C ตองเปนไปตาม กฎการกําหนดลําดบัการทํางานของตวัดาํเนินการ (Precedence) ดังแสดงในตารางที่ 3.2

Page 19: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

โอเปอเรเตอร ลําดับของการโอเปอเรชัน ( ) ซายไปขวา - ซายไปขวา * - คือแสดงความเปนลบของตัวเลข * / % ซายไปขวา + - ซายไปขวา * - คือเคร่ืองหมายลบคาตัวเลข

ตารางที่ 3.2 แสดงลําดับของการทํางานของตัวดําเนินการทางคณติศาสตร ตามกฎ Precedence

ในการคํานวณ a + b* c ภาษา C จะกระทําเครื่องหมาย % * และ / กอนเคร่ืองหมาย + และ - ดังนั้นถา a + b* c จะคํานวณ b* c กอน แลว จงึคอยนํามาบวกกับ a

แตถาเครื่องหมายมีความเทาเทียมกันจะกระทําจากซายไปขวา เชน a+b+c จะเร่ิมทําจาก a บวก b แลวจึงนําคาทีไ่ดมาบวก c ถาตองการกําหนดลําดบัใหทําโดยการใสเครื่องหมายวงเล็บในสวนที่ตองการใหทํางานกอน

ตัวอยางลําดับของการทํางานของตัวดําเนนิการทางคณติศาสตร ตามกฎ Precedence

y= 2 * 5 * 5 + 3 * 5 + 7;

step 1 y= 10 * 5 + 3 * 5 + 7; step 2 y= 50 + 3 * 5 + 7;

step 3 y= 50 + 15 + 7;

step 4 y= 65+ 7; step 5 y= 72;

Page 20: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

ตัวดําเนินการ % เปนตัวดําเนินการทางคณิตศาสตรเพียงตัวเดยีวทีก่ําหนดใหใชกับคาจํานวนเต็ม เทานั้น นอกนั้นสามารถใชกับคาอ่ืนๆ ได ตัวดําเนินการทางคณิตศาสตรที่นาสนใจอีกตัวหนึ่งคือ เคร่ืองหมาย / เชน a / b ถาท้ังตัวแปร a และ b เปน integer คาท่ีไดจากการดําเนนิการของหารจะมีชนดิเปน integer และถา a หรือ b ตัวแปรใดตัวแปรหนึ่งเปนตวัแปรชนิด float จะไดคําตอบเปนชนิด float เชน 39 / 5 จะมีคาเทากับ 7 39.0 / 5 จะมีคาเทากับ 7.8 จะเห็นไดวามคีวามแตกตางที่สําคัญของเครื่องหมายหาร อยางที่หน่ึงคือ เคร่ืองหมายหารสําหรบัตัวแปร integer และอีกหนึ่งสาํหรับตัวแปรแบบ floating ข้ึนอยูกับชนิดของ operand ท่ีเราใชกับเครื่องหมายหารนั้นๆ สําหรับผูเร่ิมตนเขียนโปรแกรมเปนไปไดวาจะเกดิการผิดพลาดขึ้น ตัวอยางเชน 1/3 (ซึ่งมีคาเทากับ 0) แทนท่ีจะเปน 1.0/3.0 ซ่ึงมีคาเทากับ 0.333… โดยการที่การเขียน 1.0/3.0 เราสามารถเขียนไดเปนวา 1.0/3 หรือ 1/3.0 และในแตละแบบของนิพจนจะไมเปน 0 ตัวดําเนนิการเพิ่ม และลดคา (Increment & Decrement)

ตัวดําเนินการเพิ่ม และลดคา เปนตัวดําเนินการในการเพิม่หรือลดคาของตัวแปร โดย - ตัวดําเนินการเพิ่มคา ++ จะบวกหนึ่งเขากบัตัวถูกดําเนินการ - ตัวดําเนินการลดคา -- จะลบหนึ่งออกจากตัวถูกดําเนินการ

สาเหตุที่มีตัวดาํเนินการนี ้ เพราะการดําเนนิการเพิ่มหรือลดคาเกิดขึ้นเสมอ สําหรับตัวดําเนินการ ตัวดําเนินการเพ่ิม และลดคามีวิธีใชงาน 2 แบบคือ

- ใชเปนตวัดําเนินการแบบมากอน (prefix) เชน ++n - ใชตัวดําเนินการแบบตามหลัง (postfix) ก็ไดเชน n++

Page 21: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

ในทั้งสองกรณี ผลลัพธคือการเพิ่มคา 1 ใหกับ n แตนิพจน ++n จะเพิ่มคากอนที่จะนําคาไปใช ขณะที่ n++ จะเพิ่มคาหลังจากนําคาไปใช ซึ่งหมายความวาถามีการนาํคาไปใช (ไมเพียงหวังเฉพาะผลลัพธ) ++n และ n++ จะแตกตางกนั ตัวอยางดังนี ้ตัวอยาง ถา n มีคา 5 x = n++; จะเปนการกําหนดคา x ใหกับ 5 x = ++n; จะเปนการกําหนดคา x ใหกับ 6

ตัวดําเนินการนี้จะใชไดกับเฉพาะตัวแปรเทานั้น จะใชกบันิพจนอ่ืนๆ ไมไดเชน (i+j)++ ตัวอยางเชน #include <stdio.h> int main() {

int x=2; int y=2; printf(”x++ = %d\n”, x++); printf(”x = %d\n”, x) ; printf(”++y = %d\n”, ++x); printf(”y = %d\n”, y) ;

return 0; }

ผลลัพธ

x++ = 2

x=3

++y=3

y=3

Page 22: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

3.2 ตัวดําเนนิการสัมพันธและตัวดําเนินการตรรกะ (Relational, Equality, and Logical Operators)

Operator เคร่ืองหมาย ความหมาย ตัวดําเนนิการสัมพันธ < นอยกวา (Relational Operator) > มากกวา <= นอยกวา หรือ เทากับ >= มากกวา หรือ เทากับ ตัวดําเนนิการเทากับ == เทากับ (Equality Operator) != ไมเทากับ ตัวดําเนนิการตรรกะ ! นิเสธ (Logical Operator) && และ || หรือ

ตารางที่ 3.3 แสดงตัวดําเนนิการสัมพันธและตัวดําเนินการตรรกะ

3.2.1 ตัวดําเนนิการสัมพันธ (Relational Operator) ตัวดําเนินการสัมพันธ เปนเครื่องหมายที่ใชในการเปรยีบเทียบและตัดสินใจ ซี่งผลของการเปรียบเทียบจะเปนได 2 กรณีเทานั้นคือ จริงและเท็จ ภาษาซีถือวาคาทางตรรกจริงและเท็จมีชนิดเปน int ดังนั้นผลการกระทําทางตรรกจึงมีคาเปนจํานวนเต็ม และมีคาไดเพยีงสองคาคือ 1 หรือตัวเลขใดๆ แทนคาความจริงเปนจริง และ 0 แทนคาความจริงเปนเท็จ (0 เปนเท็จ สวนตัวเลขอื่นๆ ทั้งหมดมีคาเปนจริง) เครื่องหมายที่เปนตัวดําเนินการสัมพันธมี 4 ตัวคือ

< (นอยกวา) > (มากกวา) <= (นอยกวาเทากับ) และ >= (มากกวาเทากับ)

ตัวอยางการใชงาน เชน a<3 /* ถา a มีคาเปน 5 ประโยคนีจ้ะไดผลลัพธเปน 0 (เท็จ) */

Page 23: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

a>b /* ถา a=10 b=8 ประโยคนีจ้ะไดผลลัพธเปน 1 (จริง) */ -1 >= (2.2*X+3.3) a<b<c /* รูปแบบถูกตอง แตลําดับการวางตวัแปรอาจทําใหสับสนได โดยจะทํา

การเปรียบเทยีบคา b และ c กอน จึงนําผลลัพธมาเปรียบเทียบกับ a */ ตัวอยางการใชงานผิดแบบ a =< b /* ผิดลําดับ เครื่องหมาย = มากอน < */ a < = b /* ผิดรูปแบบ หามเวนวรรคระหวาง < และ = */ 3.2.2 ตัวดําเนินการเทากับ (Equality Operator)

ตัวดําเนินการเทากับ ใชในการเปรียบเทียบคา 2 คา วามคีาเทา หรือไมเทากัน ผลลัพธที่ได จะมเีพยีง 2 คาเชนเดยีวกับผลลัพธของตัวดําเนนิการสมัพันธคือ จริง และ เท็จ

เคร่ืองหมายที่เปนตัวดําเนินการเทากับมี 2 ตัวคือ == (เทากับ) != (ไมเทากับ)

ตัวอยางการใชงาน เชน c == ‘A’ /* ถาตัวแปร c เก็บคาอักขระ A ผลลัพธจะไดคาจริง */ k != -2 /* ถาตัวแปร k เก็บคาตวัเลข –2 ผลลัพธจะไดคาเท็จ */ x+y == 2 * z – 5 ตัวอยางการใชงานผิดแบบ a=b /* การเปรียบเทียบคาตัวแปร a กับ b วามคีาเทากันหรือไม

กลายเปนการใหคาตัวแปร a ดวยคาตวัแปร b */ a= =b -1 /* ใชงานผิดรูปแบบ โดยมีชองวางระหวางเครื่องหมาย = ทั้ง 2 ตัว */ 3.2.3 ตัวดําเนินการตรรกะ (Logical Operator) ตัวดําเนินการตรรกะ ใชในการเปรียบเทยีบ และกระทําทางตรรกะกับคาตัวเลข หรอืคาที่อยุใน ตวัแปร ผลลัพธที่ได จะมเีพยีง 2 คาเชนเดยีวกบัผลลัพธของตัวดําเนินการสัมพันธคือ จริง และ เท็จ เคร่ืองหมายที่เปนตัวดําเนินการทางตรรกะ มี 3 ตัวคือ

Page 24: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

! (นิเสธ)

&& (และ) || (หรือ)

**หมายเหต ุ นิเสธ คือการกลับคาความจริงของคาตัวเลข หรือตัวแปรทีต่ามหลังเครื่องหมาย ตวัดําเนนิการนิเสธ ตองการตัวถูกกระทําการเพยีง 1 ตัวเทานัน้ ตัวอยางการใชงาน !a /* ถาคาความจริงของตัวแปร a มีคาจริง ผลลัพธจากการนิเสธจะไดคาเปนเท็จ */ !(x+7.7) !(a<b || c<d) /* a มากระทํากับ b แลวเอาผลลัพธมา || กบั ผลลัพธระหวางการกระทําระหวาง

c กับ d จากนั้นนําผลลัพธท่ีไดจากการ || มา ทําการนิเสธอีก */ ตัวอยางการใชงานผิดแบบ a! /* ผิดลําดับ เครื่องหมาย ! มากอนตวัแปร */ a! = b /* ผิดความตองการ โดยความตองการคือ กลายเปนการใชเคร่ืองหมาย != ไป */ ตวัดําเนนิการ && และ || ตองการตัวถูกกระทํา 2 ตัว ตัวอยางการใชงาน a&&b /* a และ b ถาคาความจริงของ a เปนจริง และ คาความจริง b เปนจริง

ผลลัพธท่ีไดจะมีคาความจรงิเปนจริง */ a || b /* a หรือ b ถาคาความจริงของ a เปนเทจ็ และ คาความจริง b เปนเท็จ

ผลลัพธท่ีไดจะมีคาความจรงิเปนเท็จ */ !(a<b) && C /* นํา a มาเปรียบเทียบกับ b แลวนําผลลัพธมานิเสธ จากนั้นมา && กับ C */ 3 && (-2 * a + 7) /* หาคาภายในวงเล็บกอน แลวนําคาผลลัพธที่ไดมา && กับ 3 */ ตัวอยางการใชงานผิดแบบ a && /* ตัวกระทําไมครบ */

Page 25: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

a| |b /* เวนชองวางระหวางเครื่องหมาย || */ a & b /* เครื่องหมาย && ไมครบ */ &b /* ตําแหนงในหนวยความจําของตัวแปร b */ การหาคาของตัวดําเนนิการตรรกะ

• && (และ) นําคาความจรงิ 2 คามาเปรียบเทียบกนั ไดผลของการเปรียบเทียบตามตารางที่ 3.4

P Q P && Q 0 0 0 0 1 0 1 0 0 1 1 1

ตารางที่ 3.4 แสดงผลของตวัดําเนินการ && ระหวางตัวแปร P และ Q

• || (หรือ)

นําคาความจรงิ 2 คามาเปรียบเทียบกนั ไดผลของการเปรียบเทียบตามตารางที่ 3.5

P Q P || Q 0 0 0 0 1 1 1 0 1 1 1 1

ตารางที่ 3.5 แสดงผลของตวัดําเนินการ || ระหวางตัวแปร P และ Q

Page 26: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

• ! (นิเสธ)

นําคาความจรงิมาเปรียบเทียบ ไดผลของการเปรียบเทียบตามตารางที่ 3.6

P !P 0 1 1 0

ตารางที่ 3.6 แสดงผลของตัวดําเนินการ ! กับตัวแปร P

3.3 ตัวดําเนินการประกอบ (Compound Operator) ตัวดําเนินการประกอบ คือ ตัวดําเนินการที่เปนรูปแบบยอ ของตัวดําเนินการ+ตัวแปรท่ีถูกดําเนินการ โดยตัวดําเนินการประกอบในภาษาซี มีท้ังหมด 10 ตัวดังนี้ += -= /= %= <<= >>= != ^= การกําหนดรูปแบบของตัวดําเนินการประกอบใหกับตวัแปรมีรปูแบบดังนี้ จะมีความหมายเทากับ ตัวอยางเชน i = i + 1; ตัวดําเนินการประกอบคือ i += 1; i = i – a; ตัวดําเนินการประกอบคือ i - = a; i = i * (a + 1); ตัวดําเนินการประกอบคือ i *=a+1; i = i / (a-b); ตัวดําเนินการประกอบคือ i /= a-b;

Variable Operator = expression;

Variable = variable Operator expression;

Page 27: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

3.4 ตัวกระทําบอกขนาด (Sizeof Operator) เปนตัวกระทําใชรายงานขนาดของหนวยความจําที่ใชในการเก็บคา โดยมีรูปแบบดังนี้ ตัวอยาง #include <stdio.h> int main() {

int x; printf(”x= %d\n” , sizeof(x)); printf(“int= %d\n” , sizeof(int)); printf(“char= %d\n” , sizeof(char)); printf(“float= %d\n” , sizeof(float)); printf(“double= %d\n” , sizeof(double));

return 0; }

ผลลัพธ จากตัวอยางขางตน ขนาดที่ไดจะมหีนวยเปนจํานวนไบต (byte)

sizeof (แบบของตัวแปร)

x= 4

int= 4

char= 1

float= 4

double= 8

Page 28: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

3.5 ลําดับการทํางานกอน-หลังของตัวดาํเนินการ ลําดับการทํางานกอน-หลังของตัวดําเนินการเปนไปตามตารางที่ 3.7

ตัวดําเนนิการ ทิศทางการดําเนินการ

(), [], ซายไปขวา ++, --, +(คาบวก), -(คาลบ), sizeof ขวาไปซาย *, /, % ซายไปขวา +, - (ตัวกระทาํการทางคณิตศาสตร) ซายไปขวา <, <=, >, >= ซายไปขวา ==, != ซายไปขวา && ซายไปขวา || ซายไปขวา =, +=, -=, /=, %=, !=, <<=, >>= ขวาไปซาย

ตารางที่ 3.7 แสดงลําดับความสําคัญของตวัดําเนินการทัง้หมด เรียงลําดับจากมากไปนอย

3.6 การเปล่ียนแปลงคาผลลัพธเปนตัวแปรชนิดใหม (Casting)

ผลของการกระทําของนิพจนจะใหคาออกมาคาหนึ่งเสมอ คาที่ไดจะมชีนิดสอดคลอง กับตัวกระทาํ และตัวถูกกระทําภายในนพิจนนั้น ๆ เชน ตัวถูกกระทําเปน int คาที่ไดจะเปนชนิด int ดวย เราอาจเปลี่ยนชนิดของคานัน้ ๆ ใหมชีนิดตามที่เราตองการไดโดย การเขียนชนิดของขอมูลแบบใหม ภายในวงเล็บ นําหนานิพจนนั้น ๆ ดังรูปแบบตอไปนี ้ ตัวอยาง (int)(a*5.2) เปนการเปลี่ยนคา output เปนขอมูลชนิด int (float)(b+5) เปนการเปลี่ยนคา output เปนขอมูลชนิด float แบบฝกหัดทายบท

(แบบขอมูลแบบใหม) นิพจน

Page 29: บทที่ 3. Introduction to C Language Programmingamarin/teaching/241101/... · 2007-06-20 · 241-101 Introduction to Computer Programming บทที่ 3.Introduction to

241-101 Introduction to Computer Programming

เขียนนพิจนของภาษา C ที่แตละนิพจนคํานวณคาทางคณิตศาสตร ดังนี้ a.

baab+

d. ab

ba +

b. 2cba + e.

2

⎟⎠⎞

⎜⎝⎛

−+

dcba

c. cba

cba

+ f.

abccbaacbcab

++++

ตัวแปร a, b, c, d ใหกําหนดชนดิเปน integer โดยรับคาตัวแปรทั้ง 4 จากผูใช และคํานวณคา

คําตอบออกมาเปนชนิด float