Penporn Duangkaew (Qookratai) C Pragramming ทบทวนภาษาซี ให้นักเรียนดาวน์โหลดและศึกษาเอกสารดังกล่าวแล้วเขียนโปรแกรม 6 โปรแกรมเริ่มสไลด์ที่ 37-43 ให้ลอก Code ของโปรแกรมลงสมุด พร้อมบันทึกผลลัพธ์ที่ได้ลงสมุด กราบเรียนท่านอาจารย์ และสวัสดีเพื่อนๆ Penporn Duangkaew (Qookratai) Faculty of Informatics
ประวัติความเป็นมา ภาษา BCPL Basic Combined Programming Language บนเครื่อง PDP-7 (UNIX) พ.ศ. 2513 พ.ศ. 2515 โดย เดนนิช ริทชี่ Faculty of Informatics
ภาษาซี (C Language) คุณสมบัติ เป็นภาษาระดับสูง ไม่ขึ้นกับระบบปฏิบัติการ (OS) ไม่ขึ้นกับชนิดของเครื่องคอมพิวเตอร์ เป็นภาษาโครงสร้าง (Structure Language) กราบเรียนท่านอาจารย์ และสวัสดีเพื่อนๆ Faculty of Informatics
โครงสร้างของโปรแกรมภาษาซี โครงสร้างประกอบด้วย ส่วนประมวลผลก่อน ส่วนประกาศส่วนกลาง ส่วนของฟังก์ชัน ส่วนต้นแบบฟังก์ชัน 1. ส่วนประมวลผลก่อน 2. ส่วนประกาศส่วนกลาง 3. ส่วนต้นแบบฟังก์ชั่น 4. ส่วนของฟังก์ชั่น กราบเรียนท่านอาจารย์ และสวัสดีเพื่อนๆ Faculty of Informatics
ส่วนประมวลผลก่อน # include <stdio.h> # define START 0 ส่วนที่ 1 เป็นส่วนที่ระบุให้ซีคอมไพเลอร์เตรียมการทำงานที่ กำหนดในส่วนนี้ไว้ โดยหน้าคำสั่งจะมีเครื่องหมาย # เช่น เป็นการระบุให้นำไฟล์ stdio.h มารวมกับไฟล์นี้ เพื่อที่จะสามารถใช้คำสั่งที่อยู่ในไฟล์นี้มาใช้งานได้ หรือ เป็นการกำหนดค่าคงที่ให้กับตัวแปร START โดยให้มีค่าเป็น 0 เป็นการกำหนดให้ตัวแปร temp มีค่าเท่ากับ 37 # include <stdio.h> # define START 0 # define temp 37 Faculty of Informatics
ส่วนประกาศส่วนกลาง int stdno; float score; ส่วนที่ 2 declaration เป็นการกำหนดชนิดข้อมูลที่จะใช้ใน โปรแกรมซึ่งตัวแปรหรือข้อมูลต่าง ๆ นั้นจะต้องถูกประกาศ ในส่วนนี้ก่อน จึงจะสามารถนำไปใช้ในโปรแกรมได้ เช่น เป็นการกำหนดว่าตัวแปร stdno เป็นข้อมูลชนิดจำนวนเต็ม หรือ interger ซึ่งอาจได้แก่ค่า 0,4,-1,-3,…. เป็นต้น เป็นการกำหนดว่าตัวแปร score เป็นข้อมูลชนิดเลขมีจุด ทศนิยม (floating point)ซึ่งอาจมีค่า 0.23, 1.34 เป็นต้น int stdno; float score; Faculty of Informatics
ส่วนประกาศต้นแบบฟังก์ชั่น ส่วนที่ 3 เป็นส่วนที่ใช้กำหนดว่ามีฟังก์ชั่นอะไรบ้าง และมีการประกาศพารามิเตอร์อย่างไร เช่น เป็นการประกาศฟังก์ชั่นต้นแบบสำหรับพังก์ชั่นชื่อ main โดยมีค่าที่ส่งกลับเป็นชนิด interger และไม่มีการส่งค่าเข้าไปในฟังก์ชั่นนี้ int main ( void ); Faculty of Informatics
ส่วนประกาศฟังก์ชั่น int main ( void ) { printf ( “Hello World \n” ); ส่วนที่ 4 เป็นส่วนที่ใช้กำหนดรายละเอียดของแต่ละฟังก์ชั่น ว่ามีลักษณะการทำงานเป็นอย่างไรบ้าง รับค่าใดเข้าไปในฟังก์ชั่นบ้าง และส่งค่ากลับเป็นอะไร เช่น เป็นการประกาศฟังก์ชั่นชื่อ main ตามฟังก์ชั่นต้นแบบ สำหรับพังก์ชั่น main นี้ไม่มีการรับค่าเข้าในฟังก์ชั่น แต่เมื่อทำงานเสร็จแล้วจะส่งค่ากลับมาเป็น 0 int main ( void ) { printf ( “Hello World \n” ); return (0); } Faculty of Informatics
กฎเกณฑ์ของโปรแกรมภาษาซี กฎเกณฑ์ (Rules) ประกอบด้วยส่วนย่อย ๆ โดยใช้ปีกกา ({ }) เป็นตัวกำหนดขอบเขต ฟังก์ชั่นแรกต้องเป็น main() เสมอ ใช้เครื่องหมาย ; (semi colon) เป็นตัวกำหนดการ สิ้นสุดของคำสั่ง ใช้อักษรตัวเล็กในการเขียนโปรแกรม ใช้เครื่องหมาย , (comma) เป็นตัวคั่นตัวแปรและ พารามิเตอร์ ใช้เครื่องหมาย /* */ เป็นการกำหนดข้อความ ที่ไม่ ต้องการให้คอมไพเลอร์ปฏิบัติงาน กราบเรียนท่านอาจารย์ และสวัสดีเพื่อนๆ Faculty of Informatics
# include <stdio.h> int main ( void ) { ตัวอย่างโปรแกรม # include <stdio.h> int main ( void ) { printf(“Hello, Good morning. \n”); return ( 0 ); } เป็นโปรแกรมสั่งพิมพ์ข้อความ Hello, Good morning. Faculty of Informatics
ชนิดและแบบของข้อมูลในภาษาซี แบบข้อมูลหรือชนิดของตัวแปรต่าง ๆ ที่กำหนดไว้ในภาษาซีประกอบด้วย char ชนิดของตัวอักษรหรืออักขระ int ชนิดจำนวนเต็มปกติ short ชนิดจำนวนเต็มปกติ long ชนิดจำนวนเต็มที่มีความยาวเป็น 2 เท่า unsigned ชนิดของเลขที่ไม่คิดเครื่องหมาย float ชนิดเลขมีจุดทศนิยม double ชนิดเลขที่มีจุดทศนิยมความยาว เป็น 2 เท่า Faculty of Informatics
ตารางแสดงเนื้อที่ในหน่วยความจำของชนิดข้อมูล Faculty of Informatics
ชนิดและแบบของข้อมูลในภาษาซี ในการเขียนโปรแกรม แบบข้อมูลที่ใช้จะแบ่งออกเป็น 4 กลุ่มใหญ่ ๆ ดังนี้ ข้อมูลและตัวแปรชนิดอักขระ ข้อมูลและตัวแปรชนิดจำนวนเต็ม ข้อมูลและตัวแปรชนิดเลขมีจุดทศนิยม ข้อมูลและตัวแปรแบบสตริง Faculty of Informatics
ชนิดข้อมูลชนิดอักขระ อักขระแทนด้วย char โดยอยู่ภายในเครื่องหมาย ‘ ’ เช่น ‘a’ , ‘A’ , ‘9’ อักขระพิเศษบางตัวไม่สามารถให้ค่าได้โดยตรง แต่ จะให้ค่าเป็นรหัส ASCII ซึ่งจะเขียนในรูปของเลข ฐานแปด เช่น รหัส BELL แทนด้วย ASCII 007 เขียนแทนด้วย BELL=‘\007’ หรือรหัสควบคุมการ ขึ้นบรรทัดใหม่ ตัวอักขระที่กำหนดให้กับรหัส คือ n สามารถกำหนดเป็น newline = ‘\n’; Faculty of Informatics
ชนิดข้อมูลของเลขจำนวนเต็ม จำนวนเต็มในภาษาซีสามารถใช้แทนได้ 4 รูปแบบ คือ int, short, long และ unsigned การกำหนดตัวแปรแบบ unsigned คือจำนวนเต็ม ที่ไม่คิดเครื่องหมาย ซึ่งจะต้องใช้ควบคู่กับรูปแบบ ข้อมูลจำนวนเต็มชนิดอื่น คือ int , short หรือ long เช่น unsigned int unsigned short Faculty of Informatics
ชนิดข้อมูลของเลขมีจุดทศนิยม การกำหนดขนิดข้อมูลเลขจุดทศนิยมสามารถ กำหนดได้ 2 แบบ คือ float , double โดย double เก็บค่าได้เป็น 2 เท่าของ float ตัวเลข แบบนี้นิยมใช้กับงานทางวิทยาศาสตร์ที่ต้องการ ความละเอียดในการเก็บค่า การเก็บข้อมูลในรูปแบบนี้ คือเก็บแบบเอ็กโพเนนซ์ ดังตัวอย่างต่อไปนี้ ตัวเลข แสดงแบบวิทยาศาสตร์ แบบเอ็กโพเนนซ์ 9,000,000,000 9.0*109 9.0e9 345,000 3.45*105 3.45e5 0.00063 6.3*10-4 6.3e-4 0.00000924 9.24*10-6 9.24e-6 Faculty of Informatics
ชนิดข้อมูลแบบสตริง สตริงหมายถึงการนำตัวอักขระหลายตัวมาประกอบ กันเป็นข้อความ จะเรียกว่า array หรือแถวลำดับของตัวอักขระ นั่นเอง ในการใช้งานชนิดข้อมูลแบบสตริงนั้นอักขระตัว สุดท้ายจะเก็บรหัส null คือ \0 หมายถึงจุดจบของ ข้อความ เช่น H e l o \0 1 2 3 4 5 6 Faculty of Informatics
การประกาศตัวแปรในภาษาซี การประกาศตัวแปร คือ การจองเนื้อที่ในหน่วยความจำและตั้งชื่อไว้ เพื่อเรียกใช้งานในขณะปฏิบัติงาน การตั้งชื่อตัวแปร มีหลักการดังนี้ 1. ต้องขึ้นต้นด้วยตัวอักษร 2. ห้ามใช้เครื่องหมายทางคณิตศาสตร์ในชื่อ ตัวแปร 3. สามารถใช้เครื่องหมาย underline ‘_’ ได้ 4. ห้ามใช้อักขระพิเศษเหล่านี้ คือ !@#$%^&*()- 5. ห้ามตั้งชื่อซ้ำกับคำสงวน (Reserved Word) Faculty of Informatics
คำสงวนในภาษาซี คำสงวนได้แก่ auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while Faculty of Informatics
การประกาศตัวแปรในภาษาซี การประกาศชื่อตัวแปรในภาษาซีสามารถทำได้ดังนี้ <ชนิดข้อมูล> <ชื่อตัวแปร>; ตัวอย่างเช่น char ch; double height; int num; unsigned int a; float width; long int b; Faculty of Informatics
การเขียนประโยคคำสั่ง การเขียนประโยคคำสั่งในภาษาซี แต่ละคำสั่งจะ ประกอบด้วย ตัวระบุ (Identifier) คำสงวน ตัวแปร ชื่อฟังก์ชั่น และตัวดำเนินการ (operator) ต่าง ๆ แต่ละคำสั่งจบลงด้วยเครื่องหมายอัฒภาค (;) เช่น printf ( “Hello” ); printf ( “ C \n” ); อาจเขียนในบรรทัดเดียวกันก็ได้ เช่น printf ( “Hello” );printf ( “ C \n” ); ทั้งสองแบบให้ผลลัพธ์เหมือนกัน Faculty of Informatics
การแสดงผลลัพธ์ในภาษาซี การแสดงผลลัพธ์ในภาษาซีจะใช้ฟังก์ชั่น printf โดยที่ฟังก์ชั่น printf มีรูปแบบดังนี้ ส่วนควบคุมการพิมพ์ จะเป็นข้อความและรูปแบบ ของการพิมพ์โดยอยู่ในเครื่องหมาย “ ” อาร์กิวเมนต์ เป็นส่วนที่จะนำข้อมูลมาพิมพ์ ตามรูปแบบที่กำหนดมาในส่วนควบคุมการพิมพ์ printf( ส่วนควบคุมการพิมพ์, อาร์กิวเมนต์, …) Faculty of Informatics
รูปแบบที่ใช้กำหนดการพิมพ์ใน printf รูปแบบการพิมพ์สำหรับตัวเลขมีดังนี้ %d พิมพ์ข้อมูลจำนวนเต็มด้วยเลขฐานสิบ %o พิมพ์ข้อมูลด้วยเลขฐานแปด %x พิมพ์ข้อมูลด้วยเลขฐานสิบหก %u พิมพ์ข้อมูลด้วยเลขฐานสิบแบบไม่คิด เครื่องหมาย %e พิมพ์ข้อมูลด้วยตัวเลขแบบวิทยาศาสตร์ เช่น 2.13e45 %f พิมพ์ข้อมูลด้วยตัวเลขมีจุดทศนิยม %g พิมพ์ข้อมูลด้วยรูปแบบ %e หรือ %f โดยเลือกแบบที่สั้นที่สุด Faculty of Informatics
รูปแบบที่ใช้กำหนดการพิมพ์ใน printf รูปแบบการพิมพ์สำหรับสตริงมีดังนี้ %c พิมพ์ด้วยตัวอักษรตัวเดียว %s พิมพ์ด้วยข้อความ ตัวอย่างการคำสั่ง printf เช่น printf ( “%d %f %s“ , 20 , 25.5 , “Hello” ); คู่ที่ 1 คู่ที่ 2 คู่ที่ 3 Faculty of Informatics
เครื่องหมายปรับเปลี่ยนรูปแบบข้อมูล เครื่องหมายสำหรับปรับเปลี่ยนรูปแบบของข้อมูล ในการแสดงผล เครื่องหมายลบ ให้พิมพ์ข้อมูลชิดขอบซ้าย (ปกติข้อมูลทั้งหมดจะพิมพ์ชิดขวา) สตริงตัวเลข ระบุความกว้างของฟิลด์ จุดทศนิยม เป็นการกำหนดความกว้างของ จุดทศนิยม ตัวอย่างการใช้เครื่องหมายปรับเปลี่ยนรูปแบบของ การแสดงผล printf ( “%3d %-6.0f “ , 20 , 25.5 ); Faculty of Informatics
การรับข้อมูลเข้าในภาษาซี การรับข้อมูลเข้ามาใช้งานในภาษาซีจะใช้ฟังก์ชั่น scanf รูปแบบของฟังก์ชั่น scanf ( ) มีดังนี้ ส่วนควบคุมข้อมูล เป็นการกำหนดรูปแบบ ข้อมูลในเครื่องหมาย “ ” อาร์กิวเมนต์ เป็นส่วนที่จะนำข้อมูลมาเก็บ (ในตัวแปร) ซึ่งชนิดของข้อมูลต้องตรงตาม รูปแบบที่กำหนดในส่วนควบคุมข้อมูล scanf( ส่วนควบคุมข้อมูล, อาร์กิวเมนต์,...) Faculty of Informatics
การรับข้อมูลเข้าในภาษาซี การกำหนดลักษณะอาร์กิวเมนต์มีได้ 2 แบบดังนี้ ถ้าข้อมูลนั้นอาจจะนำไปใช้ในการคำนวณ จะใส่เครื่องหมาย & หน้าตัวแปร ถ้าข้อมูลนั้นเป็นข้อความที่จะนำไปเก็บไว้ในตัว แปรเลยไม่จำเป็นต้องใส่เครื่องหมาย & หน้า ตัวแปร ตัวอย่างการใช้ฟังก์ชั่น scanf scanf ( “%d “,&num); scanf ( “%s “,str); Faculty of Informatics
การเปลี่ยนชนิดของข้อมูล ทำได้โดยระบุชนิดที่ต้องการเปลี่ยนภายใน เครื่องหมาย ( ) แล้ววางหน้าตัวแปรหรือข้อมูล ที่ต้องการเปลี่ยนแปลงชนิด ตัวอย่าง ถ้าในโปรแกรมภาษาซีมีการประกาศ ตัวแปรเป็น ต้องการเปลี่ยนตัวแปร float ไปเป็น integer ทำได้ดังนี้ float money; (int) money; Faculty of Informatics
เครื่องหมายที่ใช้คำนวณในภาษาซี เครื่องหมายที่ใช้คำนวณในภาษาซีเรียกว่า ตัวดำเนินการ (Operator) มีดังนี้ ตัวดำเนินการ ความหมาย ตัวอย่าง ผลลัพธ์ + การบวก 6 + 8 14 - การลบ 7 – 5 2 * การคูณ 3 * 4 12 / การหาร 8/2 4 ลบ (ยูนารีเครื่องหมายลบ) -5 % โมดูลัส (หาเศษเหลือจากการหาร) 7 % 2 1 4 % 2 Faculty of Informatics
เครื่องหมายเปรียบเทียบ สัญลักษณ์ ความหมาย > มากกว่า < น้อยกว่า >= มากกว่าหรือเท่ากับ <= น้อยกว่าหรือเท่ากับ == เท่ากับ != ไม่เท่ากับ Faculty of Informatics
นิพจน์กำหนดค่า นิพจน์กำหนดค่า (Assignment expression) เครื่องหมายที่ใช้กำหนดค่าคือ = โดยเป็นการ กำหนดค่าทางขวาของเครื่องหมาย ให้กับตัวแปร ที่อยู่ทางซ้าย เช่น j = 7+2; หรือ k = k + 4; Faculty of Informatics
นิพจน์กำหนดค่า ความแตกต่างของเครื่องหมาย = และ == เครื่องหมาย = เป็นตัวกำหนดค่า เครื่องหมาย == เป็นเครื่องหมายเปรียบเทียบ ตัวอย่างเช่น หมายถึง เป็นการกำหนดค่าให้กับตัวแปร point ให้มีค่าเท่ากับ 44 หมายถึง เป็นการตรวจสอบว่าค่า point มีค่าเท่ากับ 44 หรือไม่ point = 44; point == 44; Faculty of Informatics
เครื่องหมายและนิพจน์แบบตรรกศาสตร์ เครื่องหมายและนิพจน์เปรียบเทียบแบบ ตรรกศาสตร์ && หมายถึง และ (and) | | หมายถึง หรือ (or) ! หมายถึง ไม่ (not) ตัวอย่างเช่น จะได้ค่าความจริงเป็นจริงก็ต่อเมื่อ a และ b เป็นจริงทั้งคู่ จะได้ค่าความจริงเป็นเท็จก็ต่อเมื่อ a และ b เป็นเท็จทั้งคู่ a && b a || b Faculty of Informatics
ลำดับการประมวลผลนิพจน์พีชคณิต ลำดับของการประมวลผลนิพจน์ทางพีชคณิตยึด หลักการตามตารางต่อไปนี้ ลำดับ ตัวดำเนินการ การใช้ ทิศทางการประมวลผล 1 ( ) วงเล็บ ซ้ายไปขวา 2 - เครื่องหมายลบ 3 ++ , -- การเพิ่มค่า , การลดค่า ขวาไปซ้าย 4 * , / , % การคูณ , การหาร , โมดูลัส 5 + , - การบวก , การลบ 6 = , += , *= , /= , %= การกำหนดค่า Faculty of Informatics
ลำดับการประมวลผลนิพจน์พีชคณิต หากมีนิพจน์ 4.5 * 2.0 + 4.0 * 5.0 มีลำดับการประมวลผลดังนี้ 4.5 * 2.0 + 4.0 * 5.0 1 9.0 + 4.0 * 5.0 2 9.0 + 20.0 3 Faculty of Informatics
การเพิ่มค่าและลดค่าตัวแปร สามารถใช้เครื่องหมายต่อไปนี้แทนการเพิ่มหรือ ลดค่าของตัวแปร ++ เป็นการเพิ่มค่าให้กับตัวแปรทีละ 1 -- เป็นการลดค่าตัวแปรทีละ 1 ตัวอย่างเช่น ++n เป็นการเพิ่มค่า n อีก 1 --n เป็นการลดค่า n ลง 1 ความแตกต่างระหว่าง n++ และ ++n เช่น n = 5; x = n++; จะได้ค่า x เท่ากับ 5 แล้วค่า n เท่ากับ 6 แต่ถ้า x = ++n; จะได้ค่า x เท่ากับ 6 Faculty of Informatics
โปรแกรม1 #include <stdio.h> #include <stdlib.h> #include <limits.h> int main ( void ) { printf ("Size of int = %d \n",sizeof(int)); printf ("Size of float = %d \n",sizeof(float)); printf ("Size of char = %d \n",sizeof(char)); printf ("MAX integer = %d \n",INT_MAX); printf ("MIN integer = %d \n",INT_MIN); printf ("LONG integer max = %ld \n",LONG_MAX); return (0); } Faculty of Informatics
โปรแกรม2 #include <stdio.h> #include <stdlib.h> int main ( void ) { int a=10; int b,c,d; int res; b=5; c=6; d=12; res = b*c+d/c; printf ("res = %d \n",res); return (0); } Faculty of Informatics
โปรแกรม 3 #include <stdio.h> #include <stdlib.h> #define APPLE 5 #define ORANGE 10 #define RES APPLE*ORANGE int main ( void ) { printf ("Value of APPLE = %d \n",APPLE); printf ("Value of ORANGE = %d \n",ORANGE); printf ("Value of RES = %d \n",RES); return (0); } Faculty of Informatics
โปรแกรม 4 #include <stdio.h> #include <stdlib.h> int main ( void ) { int num1,num2,res; scanf ("%d",&num1); scanf ("%d",&num2); res = num1 + num2; printf ("Res = %d \n",res); res = num1 * num2; printf ("Res = %d \n",res); res = num1/num2; printf ("Res = %d \n",res); res = num1%num2; printf ("Res = %d \n",res); return (0); } Faculty of Informatics
โปรแกรม 5 #include <stdio.h> #include <stdlib.h> int main ( void ) { int a = 3 , b = 7 , c = 6 , d = 8; int res1; float res2; res1 = a+b/c*d; res2 = a+b/c*d; printf ("Res1 = %d \n",res1); printf ("Res2 = %f \n",res2); ++a; ++b; c--; --d; res1 = a+b*c+d; res2 = a-d/b+c; return (0); } Faculty of Informatics
โปรแกรม 5 #include <stdio.h> #include <stdlib.h> int main ( void ) { int a = 3 , b = 7 , c = 6 , d = 8; int res1; float res2; res1 = a+b/c*d; res2 = a+b/c*d; printf ("Res1 = %d \n",res1); printf ("Res2 = %f \n",res2); ++a; ++b; c--; --d; res1 = a+b*c+d; res2 = a-d/b+c; return (0); } Faculty of Informatics
โปรแกรม 6 #include <stdio.h> #include <stdlib.h> int main ( void ) { int num1; float num2 , num3 , res; printf ("Enter num1 , num2 , num3 : "); scanf ("%d %f %f",&num1,&num2,&num3); res = (num3/num2) + num1; printf ("Res = %0.3f \n",res); return (0); } Faculty of Informatics
END Department of Computer Science