14

Click here to load reader

C Structure

Embed Size (px)

Citation preview

Page 1: C Structure

บทที่ 6 โครงสรางของโปรแกรมภาษาซี

เน้ือหา 6.1 เริ่มตนกับภาษาซ ี6.2 การคอมไพลและลิงคโปรแกรมในภาษาซี 6.3 องคประกอบพื้นฐานของภาษาซี 6.4 คําสงวน 6.5 ชนิดขอมูลพ้ืนฐาน 6.6 ตัวแปร 6.7 คาคงที ่6.8 ตัวดําเนินการ 6.9 นิพจน

ผลการเรียนรูที่คาดหวัง

1. บอกความหมายของขอมูลและชนิดของขอมูลที่ใชในการเขียนโปรแกรมได 2. อธิบายและเปรียบเทียบตวัแปรและคาคงที่ที่ใชในการเขียนโปรแกรมได 3. บอกความหมายของนิพจนและสามารถเขยีนนิพจนเพ่ือใชงานได 4. อธิบายตวัดําเนินการที่ใชในการเขียนโปรแกรมและสามารถใชตัวดําเนินการตางๆ ไดตามความ

เหมาะสม

http://www2.binghamton.edu/images/creativewriting.jpg

Page 2: C Structure

- 2 -

6.1 เร่ิมตนกับภาษาซี ภาษาซีเปนภาษาโปรแกรมระดับสูง ที่ใชสําหรับเขียนโปรแกรมประยุกตตางๆ เชนเดียวกันกับภาษาปาสคาล ภาษาเบสิก เปนตน นอกจากนี้ภาษาซียังใชสําหรับเขียนโปรแกรมระบบ และโปรแกรมสําหรับควบคุมฮารดแวรบางสวนที่ภาษาโปรแกรมระดับสูงหลายภาษาไมสามารถทําได ดังนั้นภาษาซีจึงจัดเปนภาษาโปรแกรมในระดับกลางดวย กอนที่โปรแกรมภาษาซีจะถูกรัน1 (run) จะตองถูกแปลงใหอยูในรูปของออบเจกตโคด2 (object code) โดยการคอมไพล3 (compile) โปรแกรมภาษาซีที่เขียนโดยใชคําสั่งตามมาตรฐานของ ANSI C สามารถนําไปคอมไพล และรันที่เครื่องคอมพิวเตอรตางระบบกันได โปรแกรมที่เขียนขึ้นโดยใชภาษาโปรแกรมตางๆ นั้นเราเรียกวา รหัสตนฉบับ(source code) ซึ่งอยูในรูปของขอความตามหลักการเขียนโปรแกรมของภาษาโปรแกรมที่สามารถอาน และทําความเขาใจไดโดยมนุษยเทานั้น ดังนั้นเพื่อใหเครื่องคอมพิวเตอรสามารถเขาใจโปรแกรมและปฏิบัติได จึงตองนํารหัสตนฉบับมาผานกระบวนการแปลงใหอยูในรูปของอ็อบเจกตโคดที่ประกอบดวยรหัสตัวเลข 0 และ 1 กอน เราเรียกกระบวนการแปลงดังกลาววา การคอมไพลโปรแกรม

6.2 การคอมไพลและลิงคโปรแกรมในภาษาซี การสรางโปรแกรมที่สามารถใชงานไดขึ้นมาโปรแกรมหนึง่ ในภาษาซีมีขั้นตอนดังนี ้

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

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

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

1 รัน หมายถึง

2 อ็อบเจกตโคด หมายถึง รหัสเครื่อง(machine code) ที่ถูกสรางขึ้นจากโปรแกรมรหัสตนฉบับ ซึ่งอาจสามารถรันไดทันทีหรือตองเชื่อมโยงกับอ็

อบเจกตโคดอื่น เชน ไลบรารี กอนจึงจะสามารถรันได 3 คอมไพล หมายถึง กระบวนการในการแปลงโปรแกรมรหัสตนฉบับเปนรหัสเครื่อง โดยมีคอมไพลของภาษาโปรแกรมเปนตัวดําเนินการ

Page 3: C Structure

- 3 -

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

6.3 องคประกอบพื้นฐานของภาษาซี ภาษาซี (C Language) เกิดขึ้นจากการดัดแปลงภาษาบี (B Language) ภาษาซีเปนภาษาที่คิดคนโดย เดนนิส รินชี่(Dennis Ritchie) ที่ศูนยวิจัยเบล(Bell Laboratories) ในสหรัฐอเมริการาวป ค.ศ. 1972 และเปนภาษาที่ใชเขียนระบบปฏิบัติการยูนิกส(UNIX Operating System) ซึ่งเปนระบบปฏิบัติการในระบบเครือขายคอมพิวเตอรที่แพรหลายในปจจุบัน องคประกอบพื้นฐานของภาษาซีมีดังนี้

รูปที่ 2 องคประกอบพื้นฐานของภาษาซี 1) สวนอธิบายโปรแกรม (Comments)

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

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

แตถาตองการเขียนอธิบายหลายๆบรรทัดจะเขียนไดดังนี ้

/* …………………………………………… ………. ขอความที่ตองการอธิบาย……. ……………………………………………..*/ การเขียนสวนคําอธิบายโปรแกรมจะเขียนไวที่ไหนในโปรแกรมก็ได โดยมากจะนิยมเขียนอธิบาย

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

Comments ………………………………………… (1) Preprocessor directives …………………………… (2) Global declaration ………………………………… (3) main ( ) ……………………………………………. (4) {

declaration statement; assignment statement; user-defined function call( ); ………………. (5)

}

Source file

C Compiler

ComputerObject file Computer Execute file

Linker Library

Page 4: C Structure

- 4 -

2) พรีโปรเซสเซอรไดเรกทฟี (Preprocessor directives)

เปนสวนที่ทุกโปรแกรมตองม ีใชสําหรับเรียกไฟลที่โปรแกรมตองการ และกําหนดคาตางๆ ซึ่งจะตองเริ่มตนดวยเครือ่งหมายไดเรกทีฟ (#) และตามดวยชื่อที่ตองการกําหนดคา

ตัวอยางไดเรกทีฟที่ใชบอย #include เปนการบอกใหตัวแปลคําสั่ง (compiler) อานไฟลอื่นเขามารวมในการคอมไพลมี

รูปแบบดังนี ้

เชน #include<dos.h> อานไฟล dos.h จากไดเร็คทรอรีที่กําหนด

#include″sample.h″ อานไฟล sample.h จากไดเร็คทรอรีปจจุบนัหรือที่กําหนด

o การใชเครื่องหมาย <…> ครอมชื่อ เพื่อบอกใหคอมไพเลอรคนหาไฟลจากไดเร็คทรอรี

ที่กําหนดใน Option directory แตถาใชเครื่องหมาย ″…″ จะเปนการกําหนดใหคนหาจากไดเร็คทรอรีปจจุบัน และ

ไดเร็คทรอรีที่กําหนดเสนทางไว

o ชื่อฟงกชันการทํางานพื้นฐานของภาษาซี ตัวแปร คาคงที่ และมาโครพื้นฐาน โดยปกติ

จะรวมกันเปนกลุมในไฟลที่เรียกวาไฟลหัว (Header Files) คือไฟล ที่มีนามสกุล .h ไฟลหัวแตละไฟลจะเก็บโมดูล

แยกกันเปนสวนการทํางานแตละสวนเพื่อใหผูเขียนโปรแกรมสามารถเรียกใชงานได เชน ในตัวอยางที่ 1 จะเห็นวามี

การเรียกใชไฟล stdio.h ซึ่งในไฟลดังกลาวมีการกําหนดคําสั่ง printf ซึ่งถูกเรียกใชในฟงกชัน main() และ ฟงกชัน

process แตถาเราตองการเรียกใชฟงกชัน clrscr() ซึ่งไมมีในไฟลนี้ แตมีในไฟล conio.h เราก็จะตอง include ไฟล

conio.h เขามาดวย

ตัวอยางไดเรกทีฟการใชงาน #include Include text from a file #define Define a macro #undef Undefined a macro #if Test if a compile-time condition holed. #ifdef Test if a symbol is defined #ifndef Test if a symbol is not defined #else Indicate alternative if a test file fail. #line Give a line number for compiler message.

#include<filename> หรือ #include″filename″

Page 5: C Structure

- 5 -

#define ทําหนาที่ใชกําหนดคาคงที่ ที่เปนชื่อแทน คํา นพิจน คําสั่ง หรอืคําสั่งหลายคําสั่ง มีรูปแบบการใชงานดังนี ้

เชน #define TEN 10 กําหนดตัวแปร TEN แทนคา 10 #define PI 3.141592654 กําหนดตัวแปร PI แทนคา 3.141592654

3) สวนประกาศ (Global Declaration)

ใชในการประกาศชื่อตัวแปร หรือฟงกชันทีต่องใชในโปรแกรม โดยทุกๆ สวนของโปรแกรมสามารถจะเรียกใชขอมูลสวนนี้ได

4) สวนฟงกชันหลัก (main program)

เปนสวนที่โปรแกรมภาษาซีทุกโปรแกรมตองมี ในฟงกชัน main จะประกอบดวยคําสั่งตางๆ ที่ใชในการสั่งงานโปรแกรมเรียงตอๆ กัน โดยแตละประโยคคําสั่งจะจบลงดวยเครื่องหมาย semi colon (;)

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

#include<stdio.h> int x; //global declaration void main(){ x = 7; printf(“%d”,x); }

#include<stdio.h> void main(){

int a,b; scanf(“%d”,&a); scanf(“%d”,&b); // main program

printf(“%d”,a+b); }

Page 6: C Structure

- 6 -

5) สวนของการเรียกใชฟงกชันที่ผูใชสรางขึ้นเอง (User defined function call) เปนสวนของการเรียกใชฟงกชันที่ผูใชสรางขึ้นเอง ซึ่งนอกเหนือจากฟงกชันโปรแกรม

ภาษาซีมีไวให 6.4 คําสงวน

คําสงวน หมายถึง คําที่สงวนไวสําหรับเรียกใชตามวัตถุประสงคที่กําหนดไวเฉพาะ เชน คําที่ใชในคําสั่งควบคุม และชนิดของขอมูล เปนตน คําสงวนของภาษาซีเชน

auto default float register struct volatile break do far return switch while case double goto short typedef char else if signed union const enum int sizeof unsigned continue extern long static void

6.5 ชนิดขอมูลพืน้ฐาน

ชนิดขอมูลพ้ืนฐานมีดวยกัน 5 ประเภทคือ

1) char (1 ไบต) 2) int (2 ไบต) 3) float (4 ไบต)

4) double (8 ไบต) 5) void (0 ไบต)

ชนิดขอมูล ความหมาย ไบต (bytes) พิสัย (range)

char อักษรหรอือักขระ 1 -128 ถึง 127 Int จํานวนเต็ม 2 -32,768 ถึง 32,767

float จํานวนจริง (เลขทศนิยม) 4 3.4E + 38 (7 ตําแหนง) double จํานวนจริงละเอียด 2 เทา 8 1.7E + 308 (15 ตําแหนง) void ไมใหคาใด ๆ 0 ไมใหคา

ตารางที่ 1 ชนดิขอมูลพื้นฐานของ C

#include<stdio.h> int sum(int a,int b){ return(a+b); } void main(){ printf(“%d”,sum(5,9)); // user defined function call }

Page 7: C Structure

- 7 -

ชนิดขอมูลในตารางที่ 1 ที่ไดกลาวมาแลวนั้น ตัวแปรจะมี 4 ประเภทเทานั้นที่สามารถเก็บขอมูลเหลานี้เพื่อความคลองตัว และสามารถเก็บขอมูลนอกเหนือจากนี้ได ในภาษาซีจึงไดสรางตัวแปรชนิดขอมูลแบบ คิดเครื่องหมาย (signed) ไมคิดเครื่องหมาย (unsigned), ยาว (long) และสั้น (short) เพิ่มเติมขึ้นมา ดังตารางที่ 2

ชนิดขอมูล ความหมาย ไบต (bytes) พิสัย (range)

char คิดเครื่องหมาย 1 -128 ถึง 127 int คิดเครื่องหมาย 2 -32,768 ถึง 32,767

short คิดเครื่องหมาย 2 -32,768 ถึง 32,767 short int คิดเครื่องหมาย 2 -32,768 ถึง 32,767

long คิดเครื่องหมาย 4 -2,147,483,648 ถึง 2,147,483,647

long int คิดเครื่องหมาย 4 -2,147,483,648 ถึง 2,147,483,647

Unsigned Char ไมคิดเครื่องหมาย 1 0 ถึง 255 unsigned ไมคิดเครื่องหมาย 2 0 ถึง 65,535

unsigned int ไมคิดเครื่องหมาย 2 0 ถึง 65,535 Unsigned short ไมคิดเครื่องหมาย 2 0 ถึง 65,535 Unsigned Long ไมคิดเครื่องหมาย 4 0 ถึง 4,294,967,295 signed Char คิดเครื่องหมาย 1 -128 ถึง 127

signed คิดเครื่องหมาย 2 -32,768 ถึง 32,767 signed int คิดเครื่องหมาย 2 -32,768 ถึง 32,767

signed short คิดเครื่องหมาย 2 -32,768 ถึง 32,767 signed Long คิดเครื่องหมาย 4 -2,147,483,648 ถึง

2,147,483,647 ตารางที่ 2 : ชนิดของตัวแปรใน C

6.6 ตัวแปร

ตัวแปร (Variables) คือชื่อเรียกแทนพื้นทีเ่ก็บขอมูลในหนวยความจํา การกําหนดตัวแปรทําได 2 แบบ คือ

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

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

Page 8: C Structure

- 8 -

การประกาศตัวแปร มีลักษณะดังนี้ กฎในการต้ังชื่อ มีดังนี้

1. ประกอบดวยตัวอักษร ตัวอักษรปนตัวเลข หรือปนเครื่องหมาย underscore ( _ ) ได 2. ตัวแรกจะตองเปนตัวอักษรหรือเครือ่งหมาย underscore ( _ ) เทานั้น 3. ถาใช underscore เปนสวนของชื่อจะตองอยูระหวางตัวอักษรหรอืตัวเลขเสมอ 4. มีความยาวไดต้ังแต 1 ตัวอักขระ ไปจนถึง 32 ตัวอักขระ (เฉพาะเทอรโบซีแตบางเครื่องอาจไดนอยหรอืมากกกวานี้) 5. หามตั้งชื่อซ้ํากับคําสงวน (Reserved word) 6. ชื่อที่ต้ังขึ้นแลวเขียนเปนตัวเล็ก ตัวใหญหรือตัวใหญปนตัวเล็กจะถือวาเปนคนละชื่อกนัหมด เชน count, COUNT, Count จะถือเปน 3 ชื่อตัวแปรที่แตกตางกัน

ชื่อตัวแปรที่ถกู ชื่อตัวแปรที่ผดิ

Count 1count Num12 num ! m_mum m…mun

6.7 คาคงที ่ คาคงที่ (Constant) คือคาของขอมูลที่มีจาํนวนแนนอน เปนคาที่ไมสามารถเปลี่ยนแปลงไดขณะรันโปรแกรม

การประกาศคาคงที่ มีลักษณะดังนี้ ตัวอยาง const float Pi = 3.1415; หมายความวา Pi เปนคาคงที่ชนิด float ซึ่งมีคาเทากับ 3.1415

ขอสังเกต การกําหนดชนิดของตัวแปร มสีิ่งที่ควรพิจารณาอยู 2 ประการคือ ตัวแปรนั้น จะตองสามารถรับคาไดทุกคาโดยไมเกินขอบเขตของขอมูลชนิดนัน้ และตัวแปรจะตองไมใชหนวยความจํามากเกินความจําเปน เชน ถาขอมูลไมเกินขอบเขตของ int ก็ไมควรกําหนดตัวแปรใหเปน float

const ชนิดของขอมูล ชือ่คาคงที่ = คา;

ชนิดขอมูล ชื่อตัวแปร[,ชื่อตัวแปร];

Page 9: C Structure

- 9 -

การประกาศคาคงที่แบงตามชนิดตางๆ ไดดังนี้ 1) คาคงที่ชนิดจํานวนเต็ม

คาคงที่ชนิดจํานวนเต็ม (integer constant) เปนคาคงที่ชนิดตัวเลขซึ่งอาจจะเปนคาบวก 0 หรือ คาลบ คาคงที่ชนิดนี้มี 3 ประเภท คือ คาคงที่อินทีเจอรฐานสิบ ฐานแปดและฐานสิบหก ซึ่งมีรายละเอียดดังนี้

คาคงที่ชนิดจํานวนเต็มฐานสิบ (decimal integer constant) หมายถึงชุดของเลขฐานสิบ ( 0 ถึง 9 ) ซึ่งเลขตัวแรกไมเปน 0 ดังตัวอยางตอไปนี้

const int price = 1000; const int WeekDay = 7;

คาคงที่ชนิดจํานวนเต็มฐานแปด (octal integer constant) หมายถึงชุดของ

เลขฐานแปด (0 ถึง 7) ซึง่เลขตัวแรกเปน 0 ดังตัวอยางตอไปนี ้const int Oct1 = 01000; const int Oct2 =03 7;

คาคงที่ชนิดจํานวนเต็มสิบหก (hexadecimal integer constant) หมายถงึชุด

ของเลขฐานสบิหก ( 0 ถึง 9 และ A ถึง F) ซึ่งนําหนาดวย 0X หรือ 0x ดังตัวอยางตอไปนี้ const int Hex1 = 0xF78; const int Hex2 =0xFF;

2) คาคงที่ชนิดจํานวนจริง

คาคงที่ชนิดจํานวนจริง (floating point constant) เปนคาคงที่ชนิดตัวเลขที่มีทศนิยม คาคงที่ชนิดนีม้ี 2 รูปแบบดังนี้

เปนชุดของตัวเลขที่ประกอบดวยเลข 0 ถึง 9 และจุดทศนิยม ดังตัวอยางตอไปนี้

const float Pi = 3.1415; const float InterestRate =0.65;

เปนเลขยกกําลังซึ่งมีสวนประกอบ 2 สวนคอื สวนหนึ่งเปนอินทีเจอรหรอื float

อีกสวนหนึ่งเปนตัวคูณสิบยกกําลังซึ่งแสดงดวยอักษร E (หรือ e) ตามดวยเลขยกกําลังซึ่งเปนอินทีเจอรบวกหรอืลบดังตัวอยางตอไปนี้

const float A = 1.0E2; // หมายถึง 1.0 * 102 ซึ่ง = 100.0 const float A = 1E+3; // หมายถึง 1 * 103 ซึ่ง = 1000.0 const float A = 1E-2; // หมายถึง 1 * 10 - 2 ซึ่ง = 0.01

Page 10: C Structure

- 10 -

3) คาคงที่ชนิดอกัษร คาคงที่ชนิดอักษร(character constant) เปนคาคงที่ที่ประกอบดวยอักษรหนึ่งตัวอยูภายใน

เครื่องหมาย ( ‘ ‘ ) ดังตัวอยางตอไปนี้ const char A = ‘a’; const char B =’b’;

คาคงที่ชนิดอักษรมีชนิดเปน char คาของคาคงที่จะเปนตัวเลขซึ่งมีคาเทากับรหัส ASCII ของอักษร

นั้น เชน ‘A’ = 65, ‘B’ = 66

คาคงที่ชนิดอักษรอีกประเภทหนึ่งมีชือ่วา เอสเคปซีเควนซ (escape sequence) ซึ่งเปนคาคงที่ที่ประกอบดวยเครื่องหมาย \ และอักษรอยูภายในเครื่องหมาย ( ‘ ‘ ) เชน ‘ \n ’ , ‘ \t ’ คาคงที่ประเภทนี้มีจํานวนจํากัดและมีความหมายเฉพาะดังแสดงในตารางที่ 3

เอสเคปซีเควนซ ชื่อ ความหมาย \a Alarm bell เตรียมพรอม (เสียงระฆัง) \b Backspace เลื่อนกลับ \f Formfeed ขึ้นหนาใหม \n Newline ขึ้นบรรทัดใหม \r Return เคอเซอรกลับไปอยูที่ตนบรรทัด \t Tab เวนระยะในแนวระดับ \\ Backslash การกดเครื่องหมาย \\ \’ Single quote การกดเครื่องหมาย \ \” Double quote การกดเครื่องหมาย “ \? Question mark การกดเครื่องหมาย ?

ตารางที่ 3 แสดงคาคงที่แบบตาง ๆ 6.8 ตัวดําเนินการ

ตัวดําเนินการ (Operator) คือการใชในการกําหนดคาใหตัวแปร มีตัวดําเนินการ 3 ประเภทใหญ ๆ ดงันี ้

1) ตัวดําเนินการเลขคณิต (arithmetic operators) 2) ตัวดําเนินการเปรียบเทียบและ (relational operators) 3) ตัวดําเนินการตรรกะ ( logical operators)

Page 11: C Structure

- 11 -

1) ตัวดําเนินการเลขคณิต (arithmetic operators) เปนตัวดําเนินการทางดานคณิตศาสตร ไดแกเครื่องหมายที่ใชในการบวก ลบ คูณ หาร ตัวเลข และอืน่ ๆ ดังในตารางที่ 4

ตัวดําเนินการ

ความหมาย ตัวอยาง

- การลบ X – Y + การบวก X + Y * การคูณ X * Y / การหาร X / Y % การหารจะเอาเฉพาะเศษไว 11%3 = 3 เศษ 2 ดังนั้น 2 เปนผลลัพธ - - การลดคาลงครั้งละ 1 X- -หรือ - -X เหมือนกับ X=X-1 + + การเพิ่มคาครั้งละ1 X+ +หรือ + +X เหมือนกับ X=X+1

ตารางที่ 4 แสดงตัวดําเนินการของ C

นอกจากตัวดําเนินการบวก ลบ คูณ หาร ธรรมดาแลว ยังมีโมดูลัส (modulas) คือการหารเอาเฉพาะเศษดังในตารางที่ 4 และใน C มีวิธีการรวบรัดการใชตัวดําเนินการเลขคณิตดังนี้ เชน รวมสัญลักษณ (+) และ (=) เขาดวยกันกลายเปน (+=) หรือรวมสัญลักษณ (-) และ(=) เขาดวยกันกลายเปน (-=) ดังตารางที่ 5

นิพจน ข้ันตอนการประมวลผล

y = x + a ++;

1. y = x + a 2. a = a + 1

y = x + ++ a;

1. a = a + 1 2. y = x + a

y += x ;

1. y = y + x

y += x ++ ;

1. y = y + x 2. x = x + 1

y -= 9 ;

1. y = y - 9

y *= 7 * x++ ;

1. y = y * 7 * x 2. x = x + 1

y /= x ; 1. y = y / x

y %= x ; 1. y = y % x

ตารางที่ 5 แสดงตัวอยางตัวดําเนินการของ C

Page 12: C Structure

- 12 -

ขั้นตอนการทาํงานของตัวดําเนินการใน C ในบางครั้งนิพจนประกอบดวยตัวดําเนินการมากมาย ทําใหเกิดความยุงยากในการพิจารณาขั้นตอนการทํางานของตัวดําเนินการ จึงไดต้ังกฏเกี่ยวกับลําดับการทํางานกอนหลังของตัวดําเนินการ (Operator) ดังตารางที่ 6

ตัวดําเนินการ ลําดับที ่( ) 1 (สูงสุด) + + - - unary 2 * / % 3 + - 4 += -= *= = /= %= 5 (ตํ่าสุด)

ตารางที่ 6 แสดงลําดับการทํางานของตัวดําเนินการ

ตัวดําเนินการที่มีความสําคัญอยูในระดับเดียวกัน ใหทํางานตามขั้นตอนจากซายไปขวาเปนหลักตอไปนี้ เปนตัวอยางพอสังเขป ดังตารางที่ 7

ตัวอยาง

5 + 6 * 2 ♣ ตัวดําเนินการ * อยูลําดับสูงกวา + จึงตองคูณเลขกอนแลวบวกเลข 5 ภายหลัง

2 * 3 – 14 / 7 + 5 ♣ ตัวดําเนินการ * และ / อยูลําดับเดียวกันใหทําจากซายไปขวา คือ คูณเลข แลวหารเลข

♣ ตัวดําเนินการ – และ + อยูในลําดับเดียวกันทําจากซายมือกอนคือ ลบเลข แลวจึงบวกเลขในภายหลัง

ตารางที่ 7 แสดงลําดับการทํางานของตัวดําเนินการ 2) ตัวดําเนินการเปรียบเทียบและ (relational operators) หมายถึง เครือ่งหมายที่ใชในการ

เปรียบเทียบและตัดสินใจ ผลการเปรียบเทียบจะใหคาเปน 1 และ เท็จจะใหคาเปน 0 เครื่องหมายที่ใชมีดังตารางที่ 8

เครื่องหมาย ความหมาย ตัวอยาง > มากกวา A > B (A มากกวา B) >= มากกวาหรือเทากับ A >= B (A มากกวาหรือเทากับ B) < นอยกวา A < B (A กวา B) <= นอยกวาหรือเทากับ A <= B (A กวาหรือเทากับ B) = = เทากับ A = = B (A กบั B) ! = ไมเทากับ A ! = B (A ไมกับ B)

ตารางที่ 8 แสดงตัวดําเนินการเปรียบเทียบ

Page 13: C Structure

- 13 -

3) ตัวดําเนินการตรรกะ ( logical operators) เครือ่งหมายตรรกะมีจุดประสงคใชในการเปรียบเทียบเพื่อตัดสินใจซึ่งผลที่ไดจากการเปรียบเทียบจะไดผลลัพธ 2 อยาง คือ ถาไดผลลัพธเปนจริงจะมีคาเปน 1 และถาไดผลลัพธเปนเท็จจะมีคา 0 เปนเครือ่งหมายตรรกะที่ใชในภาษา C มีดังนี้

คําส่ัง && (AND) เปนการนําเงื่อนไข 2 เงือ่นไขมาเปรียบเทียบกันซึ่งผลลัพธที่ไดจะเปนดังนี ้

X Y X && Y 0 0 0 0 1 0 1 0 0 1 1 1

คําส่ัง | | (OR) เปนการนําเงื่อนไข 2 เงื่อนไขมาเปรียบเทียบกันซึ่งผลลพัธที่ไดจะเปนดังนี้

X Y X | | Y 0 0 0 0 1 1 1 0 1 1 1 1

คําส่ัง ! (NOT) เปนการทํานิเสธซึ่งผลลัพธที่ไดจะเปนดังนี้

X ! X 0 1 1 0

6.9 นิพจน นิพจน (Expression) คือการนําตัวแปร คาคงที่ มาสัมพันธกันโดยใชเครือ่งหมายอยางใดอยางหนึ่งเปนตัวเชื่อมโดยมีกฎเกณฑทั่ว ๆ ไปในการเขียนนิพจนของภาษา C มีดังนี้

1) เขียนตัวอักษรหลายตัวติดกันไดโดยไมมีเครือ่งหมายคั่น เชน XY ถือเปน 1 ตัวแปร 2) กรณีนิพจนมีคาของตัวแปรหรือคาคงที่ตางชนิดกันในนพิจนเดียวกัน กลไกของภาษา C จะเปลี่ยนชนิด

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

หากนิพจนม ีint กับ long กลไกของภาษา C จะเปลี่ยนชนิดของขอมูลเปน long หากนิพจนม ีint กับ double กลไกของภาษา C จะเปลี่ยนชนิดของขอมูลเปน double

Page 14: C Structure

- 14 -

นิพจนคณิตศาสตร นิพจนภาษา C

2X2 2*(X*X)

10X + 3XY + 10Y2 10*X-3*X*Y+10*Y*Y

ตารางที่ 9 แสดงตัวอยางของนิพจนในภาษา C

นิพจนแบงออกเปนนิพจนตางๆ ดังนี้

1) นิพจนคณิตศาสตร (Arithmetic Expression) หมายถึงการนาํตัวแปร คาคงที่ มาสัมพันธกันโดยใชเครื่องหมายคณิตศาตรเปนตัวเชื่อมผลที่ไดจาก

นิพจนแบบนี้จะเปนตัวเลข ดังตารางที่ 10

นิพจนคณิตศาสตรในภาษา C

3X + 5Y 3*X + 5*Y

X2 - Y2 X*X - Y*Y

ตารางที่ 10 แสดงนิพจนคณิตศาสตร

2) นิพจนตรรกะ (Logical Expression) หมายถึง การนําตัวแปร คาคงที่ หรือนิพจน มาสัมพันธกันโดยใชเครื่องหมายเปรียบเทียบและ

เครื่องหมายตรรกเปนตัวเชื่อมผลที่ไดจะเปนจริง หรือเท็จ คือจะใหคาเปน 1 หรือ 0 ออกมาเปนผลลัพธซึ่งสามารถนําไปคํานวณตอไดดังตารางที่ 11

โจทย ถา I มีคาเปน 3 J มีคาเปน 5 A มีคาเปน 3 ถาเขียนนิพจนดังนี้

I = = J ผลลัพธไมจริง (0)

I = = A ผลลัพธจริง (1)

I > J*5 ผลลัพธไมจริง (0)

I+3 > J –2 && a*2 > 10 ผลลัพธไมจริง (0)

ตารางที่ 11 แสดงนิพจนตรรกะ

แหลงท่ีมา หนังสือเรียนสาระการเรียนรูพื้นฐานเทคโนโลยีสารสนเทศ ชวงชั้นที่ 4 ชั้นมัธยมศึกษาปที่ 4-6 ตามหลักสูตรการศึกษาข้ันพื้นฐาน พุทธศักราช 2544