Computer Programming

Page 1

COMPUTER PROGRAMMING

3/51

NAME:

NICKNAME:

PART I: ‐ CHAPTER 0: PROGRAMMING BASIC ‐ CHAPTER 1: C INTRODUCTIONS ‐ CHAPTER 2: OPERATOR ‐ CHAPTER 3: CONTROLS ‐ CHAPTER 4: FUNCTION ‐ CHAPTER 5: ARRAY ‐ REVIEW MID‐TERM

KAPONG CPE#11

EDITOR & TUTOR

PHONGPHAN PHIENPHANICH

THANK YOU

WEERAPAT @TUTOR MORE ACADEMIC


шѥіѥкзҕѥ $6&,, 'HF +H[ 2FW &KDU

'HF +H[ 2FW &KDU

'HF +H[ 2FW &KDU 'HF +H[ 2FW &KDU

18/ QXOO

6SDFH #

C

62+ VWDUW RI KHDGLQJ

$

D

´

%

E

&

F

67; VWDUW RI WH[W

(7; HQG RI WH[W

'

G

(14 HQTXLU\

(

H

$&. DFNQRZOHGJH

)

I

%(/ EHOO

µ

*

J

%6 EDFNVSDFH

+

K

7$% KRUL]RQWDO WDE

,

,

$ /) 1/ OLQH IHHG QHZ OLQH $

$ -

$ M

% 97 YHUWLFDO WDE

%

% .

% N

& )) 13 IRUP IHHG QHZ SDJH &

& /

& O

PY

(27 HQG RI WUDQVPLVVLRQ

'

' 0

' P

( 62 VKLIW RXW

(

( 1

( Q

) 6, VKLIW LQ

)

) 2

) R

'/( GDWD OLQN HVFDSH

3

S

'& GHYLFH FRQWURO

4

T

'& GHYLFH FRQWURO

5

U

'& GHYLFH FRQWURO

6

V

'& GHYLFH FRQWURO

7

W

1$. QHJDWLYH DFNQRZOHGJH

8

X

6<1 V\QFKURQRXV LGOH

9

Y

(7% HQG RI WUDQV EORFN

:

Z

&$1 FDQFHO

;

[

(0 HQG RI PHGLXP

<

\

$ 68% VXEVWLWXWH

$

$ =

$ ]

% (6& HVFDSH

%

% >

% ^

& )6 ILOH VHSDUDWRU

&

& ?

& _

' *6 JURXS VHSDUDWRU

'

' @

' `

( 56 UHFRUG VHSDUDWRU

( !

( A

( a

) 86 XQLW VHSDUDWRU

) "

) B

) '(/

C

O

' &5 FDUULDJH UHWXUQ

´ª°´ ¬¦ ´ªÂ¦ ¨³ ´ª­» oµ¥Á } ´ª°´ ¬¦ ¸ÉÄ oÄ µ¦ ª »¤ Ťn­µ¤µ¦ ¡·¤¡r°° ¸®É oµ °Å o * จาก หนั งสือปฏิบัตกิ ารสําหรับนั กศึกษาวิชา 423101 Computer Programming


Chapter 0: Programming Basic

วิธีการเอาชนะปญหา (กระบวนการแกปญหา) การแกปญหาเปนความสามารถหนึ่งของมนุษย (จริงๆๆนะ) ลองมองมนุษยเรา เรามีการแกไขปญหาอยูทุกวัน ตั้งแตตื่นยันนอนหลับ (ในฝนดวย ...ตื่นมาอาจจะปวดหัว) แตการแกไขปญหาที่บอกขางตนนั้น เปนการแกไขปญหาแบบ ที่คงจะเรียกอยางนี้วาเปนแบบอัตโนมัติ และไมเปนระเบียบ เชน ตอนตื่นไปอาบน้ํา (บางคนอาจจะไมนะ) เราก็จะตองหา วิธีในการทําใหตัวเองลุกออกจากเตียงไปอาบน้ําดวยวิธีตางๆ อาจจะเปน นับหนึ่งถึงสาม แลวลุกอยางเร็ว อะไรประมาณนี้ นั่นก็คือการแกปญหา การกินขาว ถาถามวาคนเรากินขาวยังไง ก็จะเจอคําตอบวา “ก็ยัดใสปาก เคี้ยวๆๆๆๆ กลืน จบ” เฮอๆๆ แตการแกปญหาที่เราจะศึกษาเพื่อเขียนใสในคอมพิวเตอร ผมเคยไดยินจากอาจารยทานหนึ่งบอกวา ใหมองวา คอมพิวเตอรเนี้ย มันโงมากๆๆ คือ มันไมสามารถคิดเองได ตองคอยปอนคําสั่งใหมันทํา คําสั่งนั้นตองมีความชัดเจน พอที่จะทําใหคนโงทํางานได และคําสั่งตองมีการทํางานเปนกระบวนการที่ชัดเจน ยกตัวอยางเชน

จงหาวิธีการกินขาวของมนุษย (อันนี้ยกตัวอยางเฉยๆๆนะ ไมตองซีเรียส) 1. จับชอน 2. ตักขาวดวยชอนที่จับ 3. ยกชอนขึ้น 4. ถายังไมตรงกับปากให กลับไปทําขอ 3 อีก (บางคนบอกวาถาเลยหละ ... เฮอๆๆตัวอยางเฉยๆๆ) 5. เอาขาวในชอนใสในปาก 6. เคี้ยวขาว 7. ถาขาวยังไมละเอียดใหกลับไปทําในขอ 6 อีกครั้ง 8. กลืนขาว 9. ถาขาวยังไมหมดใหกลับไปเริ่มทําขอ 1 อีกครั้ง

จะเห็นไดวาอันนี้คือวิธีการกินขาวแบบเปนกระบวนการ ที่มีคําสั่งชัดเจนและมีกระบวนการที่ชัดเจน การเขียน ขางตนแบบนี้เรียกวา การเขียน Algorithm คือการเขียนเปนกระบวนการที่มีขั้นตอนชัดเจน และแตละขั้นตอนมีคําสั่งที่ ชัดเจนดวย Algorithm ขางตนนี้ อาจจะยังไมดีนัก คือ อาจจะเกิด Bug เกิดขึ้นได คิดงายๆเลย ที่ขอ 5 อาจจะมีคนแยงวา จะเอาขาวใสปากไดไง ทั้งๆที่ยังไมไดอาปาก (เฮอๆๆ ชางคิด) บางคนอาจจะบอกวา ถากินตะเกียบจะทํายังไง (อันนี้เริ่ม กวนอวัยวะสวนลาง ต่ํากวาตะตุมลงไป) ถาติดคอจะทํายังไงอะ (ยังๆ...ยังไมจบ) Algorithm จะตองกําหนดสิ่งที่เรียกวา ขอบเขต หรือ กรณีตางๆ ของเหตุการณใหครบ เพื่อที่การแกไขปญหาจะไดมีความชัดเจน และงายตอการเขียน Algorithm (เมื่อรูจักขอใชแทนคําวา กระบวนการแกไขปญหาเลยแลวกัน ... ไมไดแอบนะ) การเขียน Algorithm ดีไม ดี ปจจัยแรกคือ สามารถแกไขปญหาในขอบเขต หรือกรณีตางๆ ไดดีมากนอยแคไหน ดีในที่นี้อาจจะหมายถึงความเร็วใน การทํางานของ Algorithm หรืออาจจะเปนความกวางของขอบเขต หรือกรณีตางๆ


Computer Programming Programming Basic

4

Flow Chart

Flow Chart หรือผังงาน คือการเขียน Algorithm ในรูปแบบสัญลักษณ เพื่อที่จะใหมองเห็นภาพการทํางาน

ของโปรแกรมไดงายขึ้น โดยที่มีสัญลักษณมาตรฐานดังนี้

สัญลักษณ

ความหมาย จุดเริ่มตน/ สิ้นสุดของโปรแกรม ลูกศรแสดงทิศทางการทํางานของโปรแกรม ใชแสดงคําลั่งในการประมวลผล หรือการกําหนดคาขอมูลใหกับตัวแปร ใชแสดงการตรวจสอบเงื่อนไขเพื่อตัดสินใจ เมื่อเงื่อนไขเปนจริงหรือเท็จ ใชรับขอมูล/ แสดงผลขอมูลจากการประมวลผลออกมา ใชรับขอมูลทางคียบอรด ใชแสดงผลออกทางเครื่องพิมพ ใชเรียกใชฟงกชันที่เขียนขึ้นมาเอง

ใชแสดงผลออกทางจอภาพ จุดเชื่อมตอของ Flow chart ที่มาจากหลายทิศทางเพื่อจะไปสูการทํางานที่ เหมือนกัน การขึ้นหนาใหม ในกรณีที่ Flow chart มีความยาวเกินกวาจะแสดงในหนึ่ง หนา


Computer Programming Programming Basic

5

แบบฝกหัด: การเขียน Flow Chart 1. เขียน Flow chart แทนการทํางานของโปรแกรมตูเอทีเอ็ม โดยจําลองการถอนเงินของลูกคา ซึ่งเมื่อลูกคาทํา

การถอนเงินโปรแกรมจะทําการตรวจสอบจํานวนเงินที่ตองการถอนกับเงินที่อยูในบัญชี ถาจํานวนเงินในบัญชีมี มากกวาโปรแกรมจะยอมใหลูกคาถอนเงิน แตถาจํานวนเงินในบัญชีไมพอโปรแกรมจะไมยอมใหลูกคาถอนเงิน 2. เขียน Flow chart แทนการทํางานของโปรแกรมคํานวณเกรดเฉลี่ย โดยเริ่มโปรแกรมจะรับจํานวนรายวิชาแลว

ทําการวนรับคาเกรดและหนวยกิจตามจํานวนรายวิชาที่ผูใชปอนเขามาทางคียบอรด ถาผูใชปอนคาไมถูกตอง โปรแกรมจะวนรับคาใหม(เกรด ) เมื่อรับคาทั้งหมดครบใหโปรแกรมแสดงผลคาเกรดเฉลี่ยออกทางจอภาพ 3. จงเขียนกระบวนการหาผลรวมเลข ตั้งแต 1 ถึง N เมื่อ N เปนจํานวนที่รับเขามา 4. อานขอความตอไปนี้ แลวเขียนเปน Flow Chart "นักเรียนประถมศึกษา เมื่อครูประจําวิชาเดินเขามาในหอง นักเรียนทุกคนลุกขึ้น นักเรียนทุกคนลุกขึ้นทํา

ความเคารพ ครูบอกนักเรียนนั่งลง หลังจากนั้น ครูพูดวา นักเรียนทุกคนเงียบไดแลว เราจะเรียนวิชาภาษาไทย กัน ครูสํารวจโดยถาม นักเรียนวานักเรียนมีหนังสือภาษาไทยหรือไม ถาใครไมมีใหยายไปนั่งกับเพื่อนที่มีหนังสือ เมื่อทุกคน เรียบรอยแลว ใหนักเรียนเปดหนังสือหนา 35 แลวอานหนา 35‐36 ออกเสียงพรอมกัน หลังจากนั้นใหทํา แบบฝกหัดที่ 5 ถาใครทําแบบฝกหัดไมได ใหกลับไปอานหนังสือหนา 35 ‐ 36 ใหม ถาทําไดทําแบบฝกหัด ตอจนเสร็จ แลวนําแบบฝกหัดนั้นมาสงครู " 5. จงเขียนกระบวนการของการแยกแยะตัวเลข โดยการรับตัวเลข N มาจากผูใช ถา N สามารถแสดงไดในหลัก

เดียวใหแสดงคําวา One‐Digit ทํานองเดียวกัน ถาสองหลัก และสามหลักใหแสดงเปน Two‐Digit ,Three‐ Digit มิฉะนั้นแลวใหแสดงวา Over‐Three‐Digit 6. จงเขียนกระบวนการของการแยกแยะตัวเลข โดยการรับตัวเลข N มาจากผูใช ถา N เปนเลขคู ใหแสดงคําวา “It is an even number” ถาเปนเลขคี่ใหพิมพวา “It is an odd number”


Chapter 1: C Introductions

การเขียนภาษาคอมพิวเตอรนั่นจําเปนตองอาศัยปจจัยอยู 2 อยาง อยางแรกนั่นคือ Syntax คําๆนี้หมายถึง วิธีการเขียนโปรแกรม กฎกติกามารยาทตางๆ อีกสวนคือ Algorithm (หรือ Logic) นั่นคือ กระบวนการคิด หรือ กระบวนการทํางานของโปรแกรม ทั้งสองสวนนี้จะตองมีอยูในหัวเวลาที่จะเขียนโปรแกรมอะไรซักอยางหนึ่ง ถาไมมีแลว ... ยอมไมสามารถเขียนโปรแกรมได คงจะเหมือนการเตะบอล Syntax เหมือนกติกาการเตะบอล บอกวาทําอะไรได ทํา อะไรไมได นักเตะตองทําการกติกา สวน Algorithm ก็จะเหมือนการเลน เทคนิคการเลน วาจะเลนเกมสอยางไรใหชนะ วาจะวางแผนยังไง แตจริงๆแลวยังมีอีกสวนนะ นั่นคือ Trick อันนี้ขึ้นอยูกับวามีมากนอยเพียงใด ถายิ่งมีมาก ก็สามารถแกปญหา โดยการนํามาปรับใชกับโจทยของเราไดมาก (เปนธรรมดา)

รูปแบบ และสวนประกอบของ Code สําหรับ Anjuta #include<stdio.h> int main(){ return 0; }

ชนิดขอมูล ชนิดขอมูล

การกําหนดชนิดขอมูล

Integer

int variable_name;

Character char variable_name; String

char variable_name[n];

Float

float variable_name;

Double

double variable_name;

คําอธิบาย คือ ขอมูลตัวเลขจํานวนเต็ม คือ ขอมูลตัวอักษร 1 ตัวอักษร (ใชหลักการ ASCII Code) คือ ขอมูลประเภทขอความ เมื่อ n คือความยาวของขอความ คือ ขอมูลตัวเลขทศนิยม เชน 10.5 20.8 คือ ขอมูลชนิดทศนิยมละเอียดของทศนิยมมากขึ้น


Computer Programming C Introductions

หลักการตั้งชื่อตัวแปร 1. ควรตั้งชื่อใหสื่อความหมาย (อันนี้แนะนําอยางแรงเลย) 2. อักษรขึ้นตน ตองเปน a ถึง z หรือ A ถึง Z หรือเครื่องหมายขีดเสนใต ( _ ) ( <<< เนน ) 3. อักษรตอไป จะเปนตัวอักษร หรือตัวเลข หรือเครื่องหมายขีดเสนใต ก็ได แตหามมีชองวางภายในชื่อ 4. ตัวอักษรที่ใชเปน Case‐sensitive คือ ตัว a จะตางกับ A 5. *** ควรหลีกเลี่ยงที่จะใช _ ขึ้นตน 6. หามตั้งชื่อตรงกับ คําสงวน (Reserved Keywords) ซึ่งมีดังตอไปนี้

คําสงวนในภาษาซี asm auto break case cdecl char const continue default do

double else enum extern far float for goto huge if

int interrupt long near pascal register return short signed sizeof

static struct switch typedef union unsigned volatile void while

_cs _ds _es _ss _AH _AL _AX _BH _BL _BX

_BP _CH _CL _CX _DH _DL _DX _DI _SI _SP

ตัวอยางการตัง้ ชื่อตัวแปร int a,b,sum=0; float gpa; float 2g; char name[50];

int sizeof; char grade=’A’; char this grade=’A’; char str[]= “Computer Programming”;

เพิ่มเติมการตัง้ ตัวแปร

มาทดสอบการตั้งตัวแปรกัน ชื่อนักเรียน อายุ เกรดเฉลี่ย สวนสูง รหัสนักศึกษา เพศ รหัสวิชาเรียน

ผลรวมเลขจํานวนเต็ม จํานวนของตัวเลขทศนิยม ความกวางของสี่เหลี่ยม ความสูงของสี่เหลี่ยม พื้นที่สี่เหลี่ยม พื้นที่วงกลม คา PI

7


Computer Programming C Introductions

8

แสดงผลออกทางหนาจอกับ printf();

printf เปนคําสั่งที่ใชในการแสดงผลออกทางหนาจอ โดยมีขอความควบคุมเพื่อใหผลลัพธออกมาตามที่เรา

ตั้งใจไว (บางทีอาจจะไมไดตั้งใจก็เปนได) มาดูรูปแบบกันดีกวา printf(“ขอความควบคุม”[,ตัวแปรหรือคาตางๆ]); [,ตัวแปรหรือคาตางๆ] หมายถึงจะใสหรือไมใสก็ได หรือจะใสกี่ครั้งก็ได ตัวอยาง printf(“Testing text”); ออกทางจอภาพ : Testing text printf(“word1\nword2”); ออกทางจอภาพ : word1

word2

ในการควบคุมการแสดงผลทางจอภาพนั้น มีอักขระพิเศษที่ใชควบคุมอยูดวยเชน อักขระพิเศษ ความหมาย อักขระพิเศษ ความหมาย \n \t ขึ้นบรรทัดใหม Tab (เวนวรรค 8 ครั้ง) \\ \’ %s %c %o

\ ‘

%% \” %d

แสดงสตริง แสดงตัวอักษร แสดงเลขฐาน 8

%f %x

% “

แสดงจํานวนเต็ม แสดงทศนิยม แสดงเลขฐาน 16

ตัวอยาง จอภาพ

Code

#include<stdio.h> My Name is _________ int main(){ Age : ___ GPAX : _____ char name[]= “_________” , grade = ‘_’; I want “__” int age=___; float gpax=_____; printf(“My Name is %s\n”,name); printf(“Age : %d\t GPAX : %f\n”,age,gpax); printf(“I want \”%c\””,grade); return 0; }

printf แบบพิเศษ Code #include<stdio.h> int main(){ printf(“|%10s|\n”,“abc”); printf(“|%‐10s|\n”,“abc”); printf(“|%4s|\n”,“abcdefg”); printf(“|%05d|\n”,8); printf(“|%5.2f|\n”,3.5); printf(“|%.2f|\n”,3.141592); return 0; }

จอภาพ | abc| |abc | |abcdefg| |00008| | 3.50| |3.14|


Computer Programming C Introductions

puts(); และ putchar(); จะคลายกับ printf คือการแสดงผลทางหนาจอ แตจะสามารถแสดงผลไดทีละตัวแปร โดยที่ puts(); จะใช แสดงผลตัวแปร String สวน putchar(); จะใชแสดงผลตัวแปร Char (ตัวแปรชนิดอื่น ... อด) puts(ตัวแปร String); putchar(ตัวแปร Char); ตัวอยาง จอภาพ Code My Name is KAPONG #include<stdio.h> int main(){ I want A char name[]= “KAPONG”; char grade= ‘A’; puts(“My Name is ”); puts(name); puts(“\nI want ”); putchar(grade); return 0; }

การรับคาจากผูใช scanf(); และ gets(); scanf คือคําสั่งที่ใชในการรับขอมูลจากคียบอรด โดยคาที่รับเขามาจะขึ้นอยูกับขอความควบคุม gets คือคําสั่งที่ใชรับขอความจากคียบอรด (ขอความอยางเดียว) โดยจะเก็บในตัวแปรที่ระบุไว scanf(“ขอความควบคุม”[,ตัวแปรที่จะรับ]); gets(ตัวแปร char[] ที่จะรับ);

ขอความควบคุม จะใช %s,%f,%d เปนหลัก (อันนี้จําเปนมาก อันอื่นคอนขางไมออกสอบเลย) ตัวแปรที่จะมารับ ถาเปนประเภทเดียวกับ String ไมตองมี & ขางหนา ถาไมใชแลวใหใส & นําหนาดวย

ตัวอยาง Code

จอภาพ

#include <stdio.h> int main(){ char name[20],school[30]; int age; printf(“Please Enter Your Name : ”); scanf(“%s”,name); printf(“Please Enter Your School : ”); gets(school); printf(“Please Enter Your Age : ”); scanf(“%d”,&age); printf(“Name : %s\n”,name); printf(“School : %s\n”,school); printf(“Age : %d”,age); return 0; }

Please Enter Your Name : Pong Please Enter Your School : SUT University Please Enter Your Age : 20 Name : Pong School : SUT University Age : 20

9


Computer Programming C Introductions

10

อักขระพิเศษเพิ่มเติม    

%[^\n] %[a‐z] , %[A‐Z] %[^a‐z] , %[^a‐z] %[0‐9] , %[^0‐9]

ความตางระหวาง scanf และ gets

แบบฝกหัด: C Introduction 1.

จงเขียนโปรแกรมใหแสดงผลลัพธทางจอภาพดังนี ้ =================================================== ID Name Age GPAX =================================================== B5000001 Somsak 18 2.50 B5000002 Somsri 18 3.25 B5000003 Somprasong 18 3.75 B5000004 Sommai 18 2.75 ===================================================

2.

จงเขียนโปรแกรมรับคา id, name, age จากผูใช แลวทําการแสดงผลออกทางจอภาพ


Chapter 2: Operators

เมื่อเราไดตัวแปรมาแลว เราจะรับมาแลวแสดงผลเลย มันก็จะกะไรอยูนะ มันคงจะตองมีตัวดําเนินการกันบาง โดยตัวดําเนินการ ผมอยากจะแบงเปน 5 แบบ คือ ตัวดําเนินการเกี่ยวกับการกําหนดคาและเพิ่มคา ตัวดําเนินการทาง คณิตศาสตร ตัวดําเนินการทางตรรกะ ตัวดําเนินการเชิงบิต ตัวดําเนินการกําหนดคาแบบมีเงื่อนไข

ตัวดําเนินการทางคณิตศาสตร การใชงาน Operator + ทําการบวก

ตัวอยาง a=a+b; c=3+5; a=a‐b; c=3‐5; a=2*3;

ทําการลบ

*

ทําการคูณ ทําการหาร a=a/2; ทําการหารเอาเศษ a=3%2;

/ %

a= +3; (+3 คาที่ไดก็คือ 3) b=a+5; a= ‐3; b=a‐5; c=a*b; b=5/3; (ผลลัพธจะเปน 1) b=a%4;

เพิ่มเติม

ตัวดําเนินการในการกําหนดคาและเพิ่มคา ความหมาย Operator ตัวอยาง = n=8; นําคา 8 ไปใสในตัวแปร n += n+=8 n = n+8; ‐= n‐=8 n = n‐8; *= n*=8 n = n*8; /= n/=8 n = n/8; %= n%=8 n = n%8; ++ ++n n=n+1; n++ ‐‐ ‐‐n n=n‐1; n‐‐ ขอเพิ่มเติมที่เครื่องหมาย ++ กับ ‐‐ นะ อันนี้คอนขางที่จะสําคัญเลยทีเดียว คือ ลองดูคําสั่งสองแบบนี้ แลวอาจจะ เขาใจมากยิ่งขึ้น คําสั่ง คาที่ได

num1=8; num2=++num1 ‐3; num1=__ , num2=__

num1=8; num2=num1++ ‐ 3; num1=__,num2=__


Computer Programming Operators

12

ความหมายของ ++, ‐‐ ถาจะเอาใหงาย หมายถึงวา ถา ++num หมายถึง เพิ่มคา num ขึ้นอีก 1 แลวคอยนําคา num มาใช แตถา num++ หมายถึง นําคา num มาใชกอนแลวคอยเพิ่มคา num ขึ้นอีกหนึ่ง ลองทดสอบดูในโคด ขางบนนะครับ (‐‐ เหมือนกันนะ ไมอยากเขียนซ้ํา) จํางายๆ ++ มากอน เพิ่มคากอน ++ มาหลัง เพิ่มคาหลัง

ตรงนี้อาจจะยังไมสามารถอธิบายการทํางานของเครื่องหมายไดทั้งหมด ลองดูวาคาตอไปนี้ แตละตัวแปรเมื่อผาน คําสั่งตอไปนี้จะมีคาเปนเทาไหรบาง สมมุติวา x=3,y=4,z=7,a=1,b=2 โจทย คา โจทย คา x=++y ‐3%2

x=y++ ‐ 3%2

a+=b%2‐5*3

a+=b%(2‐5)*3

x+= 3%2 + y++

x+= 3%2 + ++y

x= y++ + ++z

x= ++y + z++

x=x++

x=++x

x=(a=b++)+2*b

x=(a=++b)+2*b

ตัวดําเนินการเชิงตรรกะ ชื่อก็บอกวา ตรรกะ ดังนั้นคงตองใช ตรรกศาสตร ในการคํานวณแนๆๆ กอนอื่นตองบอกอยางนี้วา ในภาษาซี จะ มองวา 0 แทนคาเท็จ และคาใดๆก็ตามที่ ไมใช 0 แทนคาจริง (แตในความนิยมจะให 1 แทนจริง และผลที่ไดจาก เครื่องหมายนี้ก็จะได 1 เมื่อจริงเชนกัน) โอเค มาดูกันเครื่องหมายกันเลย

Operator == > < >= <= != && || !

ตัวอยาง

ความหมาย เทากับ a==b มากกวา a>b นอยกวา a<b มากกวาหรือเทากับ a>=b นอยกวาหรือเทากับ a<=b ไมเทากับ a!=b (a>b)&&(a<c) และ (a>b)||(a<c) หรือ นิเสธ (not) !(a<b)

ตัวอยางเชน ถากําหนดให a=5,b=7,c=10 คําสั่ง คาที่ได a>b a<(c‐b) (a+b)>c (a*+7)%2==c%2 c!=4 (a>b)&&(c<b)

0 0 1 1 1 0


Computer Programming Operators

13

ตัวอยาง Code

จอภาพ

#include<stdio.h> #include<string.h> int main(){ int a,b,c=5; char ch = 'A'; char str[10] = "Computer"; char str2[] = "Computer"; a=b=c=10; printf("a=%d,b=%d,c=%d\n",a,b,c); printf("a=%d,b=%d,c=%d\n",++a,b++,c‐‐); printf("a=%d,b=%d,c=%d\n",a,b,c); a=ch++; printf(“a=%d,%c\n”,a,a); printf(“ch=%c,%d\n”,ch,ch); printf(“sizeof(str)=%d\n”,sizeof(str)); printf(“strlen(str)=%d\n”,strlen(str)); printf(“sizeof(str2)=%d\n”,sizeof(str2)); printf(“strlen(str2)=%d\n”,strlen(str2)); return 0; }

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

ลําดับความสําคัญของเครื่องหมาย

เครื่องหมาย

ความสําคัญ ทําจาก สูงสุด ซายไปขวา ( ) ขวาไปซาย ! ++ ‐‐ (type cast) | ซายไปขวา * / % | ซายไปขวา + ‐ | ซายไปขวา < <= > >= | ซายไปขวา == !== | ซายไปขวา && | ซายไปขวา || V ตําสุด ขวาไปซาย = += ‐= *= /= %=


Computer Programming Operators

14

แบบฝกหัด: Operator 1. จงเขียนโปรแกรมรับคาจํานวนเต็ม 3 จํานวนจากผูใช แลวทําการหาคาเฉลี่ย 2. จงเขียนโปรแกรมแปลงคาจากหนวยเซนติเมตร เปน ฟุตและนิ้ว กําหนดให (2.54 cm = 1” ,12” = 1

ฟุต) 3. จงเขียนโปรแกรมแปลงคาจากองศาฟาเรนไฮต เปน องศาเซลเซียส 4. จงเขียนโปรแกรมรับคาจํานวนวินาทีจากผูใช แลวทําการแปลงใหเปนชั่วโมง นาที และวินาที ตามลําดับ

เชน 7450 วินาที ก็เปน 2 ชั่วโมง 4 นาที กับอีก 10 วินาที 5. *จงคํานวณหาพื้นที่ของวงกลมที่ใหญที่สุดในสี่เหลี่ยมผืนผา เมื่อรับคาดานกวาง และดานยาวมาจากผูใช 6. *จงคํานวณหาพื้นที่ที่นอยที่สุดเมื่อทําการตัดวงกลมออกจากสี่เหลี่ยมผืนผา เมื่อรับคาดานกวางและดานยาว

จากผูใช 7. *จงหาพื้นที่ของสี่เหลี่ยมผืนผาที่ใหญที่สุดที่บรรจุอยูใน ครึ่งวงกลม 8. *จงรับคาเขามา 10 คาแลวทําการหาจํานวนของเลขคู และจํานวนของเลขคี่ 9. จงรับจํานวน num มาจากผูใช (ขอบเขตของ num ตั้งแต 0 ถึง 9999) แลวทําการหาคาของผลบวก

ตัวเลขแตละหลักของ num เชน 2345 ก็จะเปน 2+3+4+5 = 14 เปนตน


Chapter 3: Controls

หัวขอนี้จะเริ่มมีการเขียนโปรแกรมมากยิ่งขึ้นอีก(อีกละ) และตอง focus หนักกวาเดิม(นั่น) เพราะหัวขอนี้ถือวา เปนหัวขอที่เปนหัวใจของการเขียนโปรแกรมเลยทีเดียว (สวนอื่นเหมือนตับไต ขาดไมไดเหมือนกัน) สวนนี้จะมี Syntax คอนขางนอย แตจะไปเนนหนักเรื่อง Algorithm มากกวาเยอะ ไมเสียเวลาเริ่มกันเลยดีกวา

If…else…

If…else… เปนคําสั่งที่ใชในการตัดสินใจ เมื่อตองตัดสินใจ (เฮอๆๆ) ยกตัวอยางเชน ถา(if) จะมาติว (เงื่อนไข)

ตองกินขาวมากอน(คําสั่งเมื่อจริง) หากไม(else) ก็กินตามปกติ(คําสั่งเมื่อเท็จ) (แอบแซวนิดหนึง) จะเห็นไดวา เมื่อมี ขอความๆ หนึ่งซึ่ง มีโอกาสเปน จริง หรือเปนเท็จ ไดเมื่อรันโปรแกรม (เงื่อนไข) แลวมีทางออกใหเลือกมากกวา 1 ทาง เหมือนตัวอยาง เราจะใช if else มาจัดการ รูปแบบคําสั่ง มีดวยกัน 3 แบบ คือ if (เงื่อนไข){ }

คําสั่งs;

คําสั่ง; else

if (เงื่อนไข) {

คําสั่ง; … } else {

คําสั่ง; }

if (เงื่อนไข)

คําสั่ง; if (เงื่อนไข) { คําสั่ง; … } else if (เงื่อนไข 2) { } … เงื่อนไขถัดไป ถามี } else { คําสั่ง; … }

แบบที่ 1 (มุมบนซาย) คือ มีทางเลือก 2 ทางคือถาจริงก็ทําคําสั่ง และถาเท็จก็ไมทําอะไร แบบที่ 2 (มุมลางซาย) คือ มีทางเลือก 2 ทาง คือถาจริงทําชุดคําสั่งบน ถาเท็จทําคําสั่งลาง แบบที่ 3 (มุมลางขวา) คือ ถามีมากกวา 2 ทางขึ้นไป ก็ else if ไปเรื่อยๆ จนครบ สวน else สุดทายคือไมเขากรณีใดๆ เลย เงื่อนไขในที่นี้ สวนใหญจะเปน นิพจน ที่ประกอบไปดวยเครื่องหมายแบบตรรกะ แลวใหผลลัพธ เปน จริง หรือ เท็จเทานั้น สังเกต หากเปนคําสั่งเดียว จะไมจําเปนตองใส { } (ยกใหเห็นใน แบบมุมบนขวา) แตถามีคําสั่งมากกวา 2 คําสั่งจะตองใส { } ครอบ ขอแนะนํา หากเขียนโปรแกรมควรมีการเวนเขาไปใหบอกวาใครอยูในวงไหน สังเกตจากตัวอยางวา คําสั่งจะมี การเวนเขาไปขางในอีก


Computer Programming Control

16

มาดูตัวอยางกันโปรแกรมกัน เชน #include <stdio.h> int main(){ int x; printf(“Please enter even number :”); scanf(“%d”,&x); if (x%2 == 0) printf(“It\’s even number\n”); else { printf(“%d is ”,x); printf(“Odd Number\n”); } }

ผลการรัน Please enter even number : 20 It’s even number

ผลการรัน Please enter even number : 11 11 is Odd Number

Switch…case switch…case เปนคําสั่งที่มีลักษณะคลายกับ if…else หลายเงื่อนไข เหมาะกับการทํา if…else ที่มีการ

เปลี่ยนเงื่อนไขเฉพาะคาเทานั้น อาจจะงงเล็กๆ ลองมาดูรูปแบบ switch(ตัวแปรที่เปนเงื่อนไข){ ตัวอยางเชน case คาที่ 1 : คําสั่งs; switch(x){ }

break; case คาที่2 : คําสั่งs; break; …. case คาที่ n : คําสั่งs; break; default : คําสั่งs;

}

case 1 : printf(“X is One”); break; case 2 : printf(“X is Two”); break; case 3 : printf(“X is Three”); break; default : printf(“X is other”);

การทํางานของตัวอยางที่ใหก็เชนวา ถา x =1 ก็จะพิมพคําวา “X is One” ถา x=2 ก็พิมพคําวา “X is Two” ถา x=3 ก็พิมพคําวา “X is Three” แตถาไมใชก็พิมพคําวา “X is other”

default สําหรับกรณีที่ไมใชคาที่ระบุไวใน case กอนหนานี้ แลวจะทําคําสั่งภายใน default เหมือนกับ

if…else หลายๆทางเลือกอะ default ก็จะเหมือนกับ else ตัวสุดถา คือถาไมเขากรณีไหนเลยก็ทําคําสั่งนี้ อะไร

ประมาณนี้ จุดที่จะเนน เปนพิเศษ (ไมไดบอกอะไรนะ) นั้นก็คือ สังเกตวาจะมีการใส break; ทุกๆ case ที่พิมพเลย ให ลองเดาดูกอนถาเราไมใส break; จะเกิดอะไรขึ้น.... ผลลัพธคือ เบรกแตกไง เหมือนรถไมมี เบรกแหละ มันก็จะหยุด ไมได อันนี้ก็เหมือนกัน เชน


Computer Programming Control

17

ตัวอยางเชน switch(x){ case 1 : printf(“X is One”); case 2 : printf(“X is Two”); case 3 : printf(“X is Three”); default : printf(“X is other”); } ถา x=1 ก็จะพิมพ “X is OneX is TwoX is ThreeX is other” ถา x=2 ก็จะพิมพ “X is TwoX is ThreeX is other” เฮอๆๆ เห็นถึงการ break แตกหรือยัง คือมันจะทํางานลงมาเรื่อยๆจนจบ switch เลย ดังนั้น ทุก case จะตองมี break; เปนคําสั่งหลังสุดทุกครั้ง แบบฝกหัด: If‐else & switch‐case 1. จงเขียนโปรแกรมรับคาจํานวนเต็ม n จากผูใช หากผูใชกรอกตัวเลขที่มากกวา 30 และเปนเลขคู ใหพิมพ

วา “You’re right” หากไมใชใหพิมพคําวา “You’re wrong” 2. จงเขียนโปรแกรมรับคาจํานวนเต็ม score จากผูใช แลวทําการหาเกรด โดยมีเกณฑดังนี้ 80 ขึ้นไป 70‐79 60‐69 50‐59

A B C D F

นอกนั้น

3. จงเขียนโปรแกรมถามแปลงคาองศาจากฟาเรนไฮตเปน เซลเซียส หรือจาก เซลเซียสเปนฟาเรนไฮต โดยการ

รับอักษร 1 ตัวมาจากผูใช หากเปน C ใหรับคาขององศาเซลเซียส แปลงเปน ฟาเรนไฮต หากเปน F ใหรับ คาขององศาฟาเรนไฮต แปลงเปน เซลเซียส หากไมใช ใหพิมพคําวา “You’re wrong” 4. จงเขียนโปรแกรมรับจํานวนเต็มมา 10 จํานวน แลวทําการหาคาสูงสุด พรอมทั้งคาเฉลี่ย ของเลขคู 

for loop คําวา loop คือ จะมีการวนซ้ํา ดังนั้น for loop จึงเปนการวนซ้ําแบบ for การวนซ้ําแบบนี้สวนใหญใชกับการ วนซ้ําที่มีการวนรอบที่แนนอน (นับได) และการวนซ้ําแบบนี้มักจะมีตัว index ที่ใชในการบอกวาไปถึงรอบที่เทาใดแลว index ที่อยูในความนิยมมักจะใช i , j , k , l (อันนี้คือความนิยม) ลองมาดูรูปแบบของ for loop กันเลยดีกวา for (คําสั่งเริ่มตน;เงื่อนไข;คําสั่งจบรอบ) for (คําสั่งเริ่มตน;เงื่อนไข;คําสั่งจบรอบ){

คําสั่ง;

}

คําสั่งs;


Computer Programming Control

18

อยากจะบอกวา { } ใชหลักการเดียวกับ if‐else คือ ถามีคําสั่งภายใต for เพียงคําสั่งเดียว ไมจําเปนที่จะตองใส แตถามีมากกวา 1 คําสั่ง จะตองใสดวย

มาดูตัวอยางกันเลยดีกวา #include <stdio.h> int main(){ int num,i; printf(“Please enter a number :”); scanf(“%d”,&num); for (i=0;i<num;i++) printf(“%d ”,i); } #include <stdio.h> int main(){ int num,i; printf(“Please enter a number :”); scanf(“%d”,&num); for (i=1;i<=num;i++) printf(“%d ”,i); }

ผลการรัน Please enter a number : 10 0 1 2 3 4 5 6 7 8 9

ผลการรัน Please enter a number : 10 1 2 3 4 5 6 7 8 9 10

แบบฝกหัด: for‐loop 1. จงเขียนโปรแกรมรับคาตัวเลขจํานวนเต็มบวกจากผูใช แลวทําการพิมพ คาจากตัวเลขนั้น จนถึง 1 (นับลง) 2. จงเขียนโปรแกรมรับคาตัวเลขจํานวนเต็มบวกจากผูใช หากผูใช ใสคาเลขคี่ ใหพิมพตั้งแต 1 ถึง ตัวเลขนั้น

โดยพิมพเฉพาะเลขคี่ หากรับเลขคู ใหพิมพตั้งแต 0 ถึงตัวเลขนั้น โดยพิมพเฉพาะเลขคู 3. จงเขียนโปรแกรมคลายกับขอที่ 2 แตใหนับลงแทน 4. แสดงเลขที่หาร 5 ลงตัว ที่มีคาระหวาง 50‐100 พรอมทั้งนับจํานวน 5. แสดงเลขที่หาร 9 ลงตัว ที่มีคาระหวาง 1‐199 พรอมทั้งนับจํานวน 6. จงเขียนโปรแกรมรับคาตัวเลขจํานวนเต็มบวก แลวทําการพิมพแมสูตรคูณของเลขจํานวนนั้น 7. จงเขียนโปรแกรมหาผลรวมเลข ตั้งแต 1 ถึง N เมื่อ N เปนจํานวนที่รับเขามา 8. จงเขียนโปรแกรมรับจํานวนเต็มมา 10 จํานวน แลวทําการหาคาสูงสุด พรอมทั้งคาเฉลี่ย 9. จงเขียนโปรแกรมพิมพคาจาก A ถึง Z 10. จงเขียนโปรแกรมพิมพคาจาก Z ถึง A 11. จงเขียนโปรแกรมรับคาตัวอักษร 1 ตัวจากผูใชแลวทําการพิมพจาก A ถึงตัวอักษรนั้น แลวพิมพกลับไปยัง A อีกครั้ง Please enter a character : L A B C D E F G H I J K L K J I H G F E D C B A 12. จงเขียนโปรแกรมรับคาของตัวเลขจํานวนเต็ม แลวทําการพิมพสี่เหลี่ยมที่มีความกวางเทากับจํานวนเต็มนั้น Please enter a number : 4 * * * * * * * * * * * * * * * *


Computer Programming Control

13. จงสรางรูปตอไปนี้ดวย for loop

14. จงเขียนโปรแกรมคลายๆกับ ขอ 12 แตเปนรูปเหลี่ยมกลวง Please enter a number : 4 * * * * * * * * * * * * 15. จงเขียนโปรแกรมคลายกับขอ 14 แตเปนสี่เหลี่ยมกลวงของตัวอักษร Please enter a number : 4 A B C D E F G H I J K L 16. จงใชความรูที่ไดจากขอ 12,14,15 แลวจงสรางรูป Character Diamon Please enter a number : 4 A B C D E F G H I J K L 17. จงใหความรูจากขอที่ 16 แลวสรางรูปสามเหลี่ยมกลวง Please enter a number : 4 A B C D E F G H I 18. จงเขียนโปรแกรมสรางสามเหลี่ยมกลับหัว

19


Computer Programming Control

20

while loop & do‐while loop while loop จะนิยมใชกันมากกับ loop ที่โปรแกรมเมอร (คนที่เขียน) คิดวาลูปนั้นหนะมีจํานวนรอบไม แนนอน (คือเรื่อยๆ ประมาณนั้น) ตัวรูปแบบจะมีลักษณะที่งายกวา for loop เล็กนอย (คิดวางั้น) while loop มีคูหูอยู ตัวหนึ่งคือ do‐while loop ซึง่ มีลักษณะที่เหมือนกับ while loop แตตางกันตรงนิดเดียว เดี๋ยวลองดู รูปแบบและการ ทํางานกอน while (เงื่อนไข){ }

คําสั่งs;

การทํางานของ while 1. ตรวจสอบเงื่อนไขวาเปนจริงหรือไม หาก พบวาเท็จ ก็จบ loop while หากจริงให ดําเนินการตอไป 2. ทําคําสั่งภายใน while loop 3. กลับไปทําขอ 1

do{

คําสั่งs; }while (เงื่อนไข); การทํางานของ do‐while 1. ทําคําสั่งภายใน do‐while loop 2. ตรวจสอบเงื่อนไขวาเปนจริงหรือไม หาก พบวาเท็จ ก็จบ loop หากจริงใหกลับไปทํา ขอ 1

ขอสังเกต while กับ do‐while จะตางกันตรงที่วา หากเงื่อนไขเปนเท็จตั้งแตแรก while จะไมทําคําสั่ง ภายในลูปเลย แต do‐while จะไดรับการทําคําสั่ง 1 ครั้ง เอาแบบทางการคือวา do‐while จะไดรับการทําคําสั่งภายใน loop อยางนอย 1 ครั้งเสมอ แต while จะทําคําสั่งก็ตอเมื่อ เงื่อนไขยังคงเปนจริงอยู 

มาดูตัวอยางกันเลย #include <stdio.h> int main(){ int num,i; printf(“Please enter a number :”); scanf(“%d”,&num); while(num>0){ printf(“%d ”,num); num‐‐; } } #include <stdio.h> int main(){ int num,i; printf(“Please enter a number :”); scanf(“%d”,&num); do { printf(“%d ”,num); num‐‐; } while(num>0); }

ผลการรัน Please enter a number : 10 10 9 8 7 6 5 4 3 2 1 Please enter a number : 0

ผลการรัน Please enter a number : 10 10 9 8 7 6 5 4 3 2 1 Please enter a number : 0 0


Computer Programming Control

21

แบบฝกหัด: while & do‐while 1. จงเลือกหนึ่งโปรแกรมจากแบบฝกหัด for loop แตใหเปลี่ยนไปใช while loop แทน 2. จงเขียนโปรแกรมรับคาตั้งแต 5 – 20 จากผูใช หากผูใชกรอกผิดใหขึ้นคําวา “Wrong number” แลวทําการ

รับคาใหมจนกวาผูใชจะรับคาถูกตอง 3. จงเขียนโปรแกรมรับคา 10 คาจากผูใช โดยคาที่เก็บนั้นตองอยูระหวาง 0 – 10 แลวทําการหาคาสูงสุด 4. เขียนโปรแกรมเพื่อรับขอมูลของคนๆหนึ่ง ประกอบดวย เพศ (‘F’,’M’) อายุ (int 20‐50) และน้ําหนัก

(weight) ถาเปนผูชายอายุ 30‐50 น้ําหนัก 50 – 60 หรือผูหญิงอายุ 20‐30 น้ําหนัก 45 – 55 แลวพิมพคํา วา “GREAT” ถาไมใหพิมพคําวา “HOHOHO” 5. รับคาตัวเลข 2 จํานวนจากผูใช a ,b โดยที่ 0<a<10 และ 20<b<40 ถาไมอยูในชวงดังกลาวใหพิมพวา “ERROR” และวนรับใหม เมื่อได a,b แลวใหทําการพิมพคาเลขคูตั้งแต a ถึง b 6. จงเขียนโปรแกรมถามผูใชใหปอนคาเลขจํานวนเต็ม 1 จํานวน ซึ่งมีคา 1‐12 ถาไมอยูในพิสัย โปรแกรมจะแสดง

ขอความวา “Invalid Input!” แลวทําการวนลูปรับขอมูลใหม จนกวาจะไดขอมูลที่ตองการ หลังจากนั้นให แสดงผลลัพธตารางสูตรคูณ 7. จงเขียนโปรแกรมรับคาจํานวนเต็ม 1 จํานวน ซึ่งมีคาระหวาง 1‐100 ถาไมถูกตองใหโปรแกรมวนรับคาจนกวา

จะไดคาที่ถูกตองพรอมแสดงขอความเตือน จากนั้นคํานวณผลบวกจํานวนคี่ n จํานวน โดยเริ่มจาก 1 เชน n = 4 ผลลัพธ คือ 1+3+5+7 = 16 8. จงเขียนโปรแกรมใหรับคาจากผูใชเปนอักขระ 1 ตัวเฉพาะสระภาษาอังกฤษ(a,e,i,o,u) และเลขจํานวนเต็ม 1

จํานวนมีคาระหวาง 5‐20 ถาขอมูลที่ใสเขามาไมถูกตองใหแสดงขอความ “Invalid data!” และวนรับคาใหม หลังจากนั้นทําการแสดงคาสลับระหวางตัวเล็กแลวตัวใหญตามจํานวนเลขจํานวนเต็มที่ปอนเขามา

แถม...Break, Continue คําสั่ง break; และคําสั่ง continue; เปนคําสั่งที่ใชในการควบคุม loop โดยที่ break; จะไวสําหรับการออก จากลูป หรือ switch (...กําลังจะเขียน) โดยที่จะออกในทันที แต continue; จะเปนคําสั่งที่จะใชไดเฉพาะลูป เมื่อเจอ คําสั่งนี้ในลูป โปรแกรมจะไมทําคําสั่งใดๆตอ แตจะกลับไปตรวจสอบเงื่อนไขใหม แปลงายๆวาคลายกับ break; แตจะ ไปเริ่มใหม แต break;จะออกไปเลย (หมายเหตุ ถาเปน for loop จะกลับไปทําคําสั่งจบรอบ กอนแลวจึงไปตรวจสอบ เงื่อนไข)


Chapter 4: Function

คําถามที่ตองตอบ ฟงกชันคืออะไร ... มันคือการนํากระบวนการบางสวนมาเขียนแยกออกจากโปรแกรมนั่นเอง เปนการกระทํากระบวนการยอย (Module) ... (ยังงงอยูใชปะ) โดยกระบวนการยอยนี้อาจจะมองกับไปถึงหัวขอแรกของ เรา เชน การตมมามา กระบวนการที่อยูที่ main ก็จะสนใจแควา ตมน้ําใหเดือด ,เอาเสนลงหมอ ,รอจนสุก และตักใสถวย แต function จะมองถึงวา กระบวนการตมน้ําใหเดือดทํายังไง แคนั้น แลวคอยเอา function ที่ได มาให main ใช ก็จะ เปนคําสั่งตมน้ําภายใน main main เปนฟงกชันหนึ่งใน ภาษาซี ซึ่งจะถือวาเปนฟงกชันแรกที่ตัว Compiler จะทํางานดวยเลย แลวแตวา main จะไปเรียกฟงกชันไหนมาทํางานตอก็สุดแลวแต (อันนี้ตองรูนะ) เอาหละ เราวามาไกลพอสมควรแลวมาดูวิธีการมองฟงกชันกันเลยดีกวา Parameter

Function

ตัวแปรที่สงใหฟงกชัน

Return Value

คาที่สงกลับมายังคนที่เรียก ฟงกชัน

ฟงกชันเราจะสนในตัว Parameter ที่สงเขาไปใหกับ Function ที่จะเขียน กระบวนการภายใน Function และคาที่สงกลับมาใหกับคนที่เรียกมัน (Return Value) เอาหละเรามาดูรูปแบบการประกาศและการเรียกใชกันกอน ดีกวา การประกาศ ชนิดของคาที่จะสงกลับ ชื่อฟงกชัน(ตัวแปรที่จะสงใหฟงกชัน){ คําสั่งs; return คาที่สงกลับ; //ในกรณีที่มีการสงคากลับ }

การประกาศฟงกชันตนแบบ (Prototype) ชนิดของคาที่จะสงกลับ ชื่อฟงกชัน(ตัวแปรที่จะสงใหฟงกชัน); การเรียกใชกรณีมีการสงคากลับ ตัวแปรที่ใชรับ = ชื่อฟงกชัน(คาที่สงใหฟงกชันตามที่ไดประกาศ); การเรียกใชกรณีที่ไมมีการสงคากลับ ชื่อฟงกชัน(คาที่สงใหฟงกชันตามที่ไดประกาศ);

ชนิดของคาที่จะสงกลับ จะเหมือนกับชนิดของตัวแปรเลย แตเพิ่มมาหนึ่งชนิดนั่นคือ void นั่นคือการบอกวาจะ ไมสงคากลับ (ถาเปน void ไมตองมีคําสั่งบรรทัด return) ตัวแปรที่จะสงให จะประกาศเหมือนกับประการตัวแปรเลย แตวาแตละตัวแปรจะขั้นดวยเครื่องหมาย , (comma) โดยเมื่อประกาศเสร็จจะไมมี ; ปดทาย ชื่อฟงกชัน ใชหลักการ เดียวกับชื่อตัวแปรเลย แตระวังในการใชชื่อฟงกชันที่ซ้ํากับฟงกชันที่มีอยูแลว คําสั่งภายใน คิดเหมือนตอนอยูใน main จะเห็นวามีการประกาศฟงกชันตนแบบ อันนี้ใชในกรณีที่อยากจะระบุรายละเอียดของฟงกชันไวหลัง main แต หากทําอยางนั้น main จะไมรูจักแลวจะทําให error ได ดังนั้นจะตองมีการประกาศฟงกชันตนแบบไวสวนหนา main หรือ ไวภายใน main ก็ได (ในกรณีที่ไวภายใน main, main เทานั้นที่จะสามารถใชฟงกชันนี้ได) การประกาศตนแบบ นี้เรียกวา Prototype ซึ่งจะเหมือนกับบรรทัดแรกของการประกาศฟงกชันแตเปลี่ยนจาก { เปน ; ปดทายเลย


Computer Programming Function

23

ฟงกชันที่มีการเรียกใชฟงกชันอื่น จะตองเขียนไวหลังฟงกชันที่ตัวเองเรียกใชเสมอ ไมงั้น error (ดูกรณี main เปนตัวอยาง) เอาหละ มาดูตัวอยางการเขียนโปรแกรมกันเลยดีกวา ไมใชฟงกชัน (Before) ใชฟงกชัน (After) #include<stdio.h> #include<stdio.h> int main(){ int getnumber(char strwel[],char strerr[]){ int a,b; int a; do{ do{ printf(“Please enter a :”); printf(strwel); scanf(“%d”,&a); scanf(“%d”,&a); if(a>=0&&a<=50) if(a>=0&&a<=50) break; break; else else printf(“Error Na”); printf(strerr); }while(1); }while(1); do{ return a; printf(“Please enter b :”); } scanf(“%d”,&b); if(b>=0&&b<=50) int main(){ break; int a,b; else a=getnumber(“Please enter a:”, “Error printf(“Error Na”); Naja”); b=getnumber(“Please enter b:”, “Error }while(1); Na Ja”); printf(“%d+%d=%d”,a,b,a+b); printf(“%d+%d=%d”,a,b,a+b); } } จากตัวอยางขางตนนี้เห็นวาหลังจากการใชฟงกชัน จะทําให main สั้นลงเยอะมาก และเราไมตองเขียน do { … } while หลายๆรอบดวย เพียงเขียนรอบเดียวก็สมบูรณได อีกอยาง จะทําให main อานงายขึ้นดวยวาเปนโปรแกรมทํา

อะไร

ฟงกชันสําเร็จรูป

strlen() ;

strcat(); strcmp();

strcpy();

isalpha() islower() isupper() isdigit() isspace() tolower()

หาความยาว String การนํา String หนึ่งมาตอกับอีก String หนึ่ง การเปรียบเทียบ String 2 ตัว การคัดลอง String toupper() ceil() floor() pow() sqrt()


Computer Programming Function

24

แบบฝกหัด 1.

จงเขียน Prototype ของฟงกชันตอไปนี้ a.

ฟงกชัน calculate ทําหนาที่คํานวณ รับอารกิวเมนทจํานวนเต็ม 2 จํานวน และสงคากลับเปน จํานวนเต็ม ________________________________________________

b.

ฟงกชัน display ทําหนาหนาแสดงผล รับอารกิวเมนทจํานวนเต็ม 1 คา ________________________________________________

c.

ฟงกชัน display2 ไมรับอารกิวเมนท และไมสงคากลับ ________________________________________________

d.

ฟงกชัน grade_cal ทําหนาที่คํานวณเกรด โดยรับอารกิวเมนทเปนคาคะแนน(จํานวนเต็ม) แลว สงคากลับเปนเกรด A,B,C,D หรือ F ________________________________________________

e.

ฟงกชัน getArea รับอารกิวเมนทเปนคารัศมีวงกลม(ทศนิยม) และสงคากลับเปนคาพื้นที่ วงกลม(ทศนิยม)

________________________________________________

2. จงเขียนโปรแกรมรับคาอักขระ 1 ตัว โดยตองเปน a‐z ถาปอนเขามาไมถูกตองใหวนรับคาใหม จากนั้นสง

คาใหฟงกชัน loop() แสดงผล ผลรวม และจํานวนตามตัวอยางการรัน ตัวอยางการรันโปรแกรม 3. จงเขียนโปรแกรมแสดงขอความเปนจํานวนครั้งที่ผูใชตองการโดยโปรแกรมจะรับอักขระและจํานวนครั้ง

จากผูใช ในสวนของการแสดงขอความใหเขียนเปนฟงกชัน โดยสงอารกิวเมนตเปนตัวอักขระและจํานวน ครั้ง 4. จงเขียนโปรแกรมรับขอมูลใหกับ a,b,c ซึ่งเปนความยาวดานทั้งสามของสามเหลี่ยมแลวสงใหกับฟงกชัน area() ซึ่งเปนฟงกชันที่จะทําการคํานวณคาพื้นที่สามเหลี่ยม แลวสงคืนกลับให main แสดงคาพื้นที่นั้น

(ในกรณีที่รับขอมูลหา a,b,c เปนลบใหวนรับคาใหม) 5. ทําการเขียนโปรแกรมรับขอมูลแบบสตริงชื่อ name สงไปยังฟงกชัน backward() ฟงกชันนี้จะทําการ

กลับ String แลวสงคาคืนใหกับ main เพื่อไปพิมพคา 6. จงเขียนโปรแกรมรับขอมูลตัวเลขจํานวนเต็ม 3 คาดวยฟงกชัน findMax() แลวสงคามากที่สุดกลับมาให main แสดงผล 7. จงเขียนฟงกชันคํานวณหาคา factorial 8. จงเขียนฟงกชัน isTriangle() โดยรับขอมูลตัวเลข 3 จํานวน แลวสงคา กลับมาเปน 0 หรือ 1 หากวาเลข

ทั้งสามสามารถนํามาสราง 3 เหลี่ยมไดใหสง 1 กลับมา แตถาไมใหสง 0 กลับมา


Computer Programming Function

25

9. จงเขียนโปรแกรมรับคาจํานวนเต็ม 1 จํานวนจากผูใช ซึ่งมีคาระหวาง 1‐10 ถาคาที่ปอนเขามาไมถูกตองให

โปรแกรมวนรับจนกวาจะไดคาที่ถูกตอง จากนั้นสงคาใหฟงกชัน find5() ทําการวนลูปเริ่มจากคาปอนเขา มาไปถึง 100 แลวแสดงคาที่ลงทายดวยเลข 5 แลวสงจํานวนที่พบกลับมาแสดงผลที่ฟงกชัน main() 10. จงเขียนโปรแกรมถามผูใชใหปอนคาเลขจํานวนเต็ม 1 จํานวน ซึ่งมีคา 100‐999 ถาคาไมถูกตอง

โปรแกรมจะแสดงขอความวา “ERROR!” แลวทําการวนลูปรับขอมูลใหม จนกวาจะไดขอมูลที่ตองการ หลังจากนั้นใหสงคาใหกับฟงกชัน fineMax() แยกเลขแลวหาคา maximum จากคาเลขที่ปอนเขามา แลวสงหลับมาแสดงผลที่ฟงกชัน main() 11. จงเขียนโปรแกรมรับคาจํานวนเต็ม 2 จํานวนจากผูใช จากนั้นหาคา หรม (Greatest Common Divisor: gcd) 12. จงเขียนโปรแกรมรับคาจํานวนเต็ม 2 จํานวนจากผูใช จากนั้นหาคา ครน (Least Common Multiple: lcm)


Chapter 5: Array

จะขอบอก Keyword สําหรับอาเรยซักนิดกอนเลยนะครับ “Array คือ ชุดขอมูลชนิดเดียวกัน ขนาดตามที่เรา กําหนดตั้งแตแรก และตัวแปรแตละตัวมี index (เหมือนเลขที่) เฉพาะแตละตัว” ... เมื่อบอกแบบนี้จะตองลงลึกใน รายละเอียดกันซักนิด ชุดขอมูลชนิดเดียวกัน คือ ตัวแปรที่ไมไดมาเพียงตัวเดียวแตมาทีหลายๆตัว ทุกตัวมีชื่อเหมือนกัน และมีชนิดเดียวกัน แตจะตางกันที่เลขที่ หรือ Index หรือ Subscript ที่ตางกันเทานั้น เจา Index นี้ก็คิดเหมือนสมัย เรียนมัธยม มันก็เหมือนเลขที่ของแตละคนตองแตกตางกัน แตทุกคนก็ใชชื่อหองเดียวกัน อาจจะเชนหอง ป.9/20 เลขที่ 2 อะไรประมาณนี้ คือจะเรียกหองนี้ (ชุดขอมูลนี้) ก็จะตองเรียกวา ป.9/20 แตถาจะเรียกทีละคนก็จะตองเรียกวา หอง ป. 9/20 เลขที่ 2

เอาละคงพอจะเขาใจกัน Concept กันพอสมควรแลว ตอไปคงจะตองมาดูวา Array นี้หนาตาเปนอยางไร ... แตจะบอกวากวาจะมาถึงหัวขอนี้ ทุกคนคงไดใช Array ไปแลวอยางไมรูตัว (หรือเปลา) งงละซิ จํา char[] ไดหรือเปลา หรือที่เราเรียกวา String นั้นเอง String ถือวาเปน Array of Char หรือ อาเรยของ char นั่นเอง แลวตัวไหนหละที่ บอกวาเปนอาเรย ก็ [] ไงถาเห็น [] คงจะตองบอกใหคิดถึง Array ไวกอน มาดูวิธีสรางอาเรยกันดีกวา ชนิดตัวแปร ชื่อตัวแปร[ขนาดอาเรย] (={คาของอาเรย});

(={คาของอาเรย}) คือคาเริ่มตนที่กําหนดใหกับ อาเรยตั้งแตทีแรกเลย สามารถกําหนดเทากับขนาดของอาเรย ถา

ไมเทาจะทําใหเกิด error วิธีแกมี 2 ทางคือ ลบตัวคาขนาดของอาเรย หรือไมก็ไมตองกําหนดคาให การกําหนดคานั้นแต ละคาตองคั้นดวยเครื่องหมาย , (comma) สังเกตวาจะมีลักษณะคลายกับการประกาศตัวแปรธรรมดา แคมี [] เพิ่มขึ้นมาเทานั้น มาดูตัวอยางการประกาศตัว แปรอาเรย เอาแบบทั้งถูกและผิดกันเลยดีกวา วิธีที่ถูกตอง วิธีที่ผิด int x[]; //ไมใสขนาด int x[10]; int x[5]={1,2,3,4,5,6}; //กําหนดคาไมตรงกับขนาด int x[5]={1,2,3,4,5}; int x[] = {1,2,3,4,5}; char name[] = {‘H’,‘e’,‘l’,‘l’,‘o’}; char name[]= “Hello”; //พิเศษสําหรับ char[] เทานั้น

ขนาดของ name[] ในทั้งสองในตัวอยางจะมีขนาดไมเทากัน ลองดูใน sizeof เพราะวาการประกาศอยางหลัง จะไดขนาดเพิ่มขึ้นอีก 1 จากจํานวนตัวอักษร เพราะจะมีการสราง ‘\0’ ขึ้นอีกตัวหนึ่งเพื่อเปนการบอกวาเปนจุดสิ้นสุดของ String ตัวนั้น แตการประกาศแบบแรกจะไมสราง ‘\0’ ขึ้น การประกาศแบบแรกจะไมสามารถ printf ดวย %s ได sizeof เปนคําสั่งในการหาขนาดของตัวแปรครับ มาถึงวิธีเรียกอาเรยแตละตัวกันบาง ... อันนี้งายๆครับ วิธีคือ ชื่อตัวแปร[index] ใหมองวาเปนเหมือนตัวแปรตัวหนึ่งไปเลยครับ ลองมาดูตัวอยางกันนะ


Computer Programming Array

27

ตัวอยาง #include<stdio.h> #include<conio.h> int main(){ int x[3]; x[0]=4; x[1]=2; x[2]=1; printf(“%d+%d+%d=%d”,x[0],x[1],x[2],x[0]+x[1]+x[2]); getch(); return 0; } ผลการรัน 4+2+1=7

ขอสังเกตจะพบวา อาเรยจะเริ่ม index ที่ 0 จนไปถึง ขนาดอาเรย ‐1 หากเรียกเกินจะเกิดอะไรขึ้น??? คําตอบคือ จะแสดงคาอะไรก็ไมรูแทนที่ เฮอๆๆ ไม error นะ เจาตัว index นี้สามารถใชตัวแปรเก็บคาแลวเรียก Array โดยใชตัว แปรแทน index ได (สวนใหญนิยมใชตัวแปร i,j,k) มาดูตัวอยางกัน #include<stdio.h> #include<conio.h> int main(){ int x[7],i,sum=0; for(i=0;i<7;i++) x[i]=i+1; for(i=0;i<7;i++) printf(“%d ”,x[i]); getch(); return 0; } ผลการรัน 1 2 3 4 5 6 7

หลักการของอาเรยยังมีตออีกนิด กรณีที่เปนหลายมิติ ... อาจจะมองเปน Matrix ก็ได หรือมองแบบเปนตาราง หรือยังไงก็ไดอันนี้คงไมวากัน ... แตอยากใหมองแบบนี้ ลองมองวาเปน Array ของ Array ดูบาง เชน int x[2][3] ก็คือ มีอาเรย แบบ 3 ตัวอยู 2 ตัว (อาจจะงงกวาเดิม) คือ x[0] เปนอาเรยขนาด 3 ตัว x[1] เปนอาเรยขนาด 3 ตัวเชนกัน คือ เปนอาเรยที่ซอนอยูในอาเรยนั่นเอง ลองดูตัวอยาง แลวลองเปรียบเทียบกันตัวอยางกอนหนา แลวจะเขาใจที่บอก


Computer Programming Array

28

ตัวอยาง #include<stdio.h> #include<conio.h> int main(){ int x[2][3],i,sum=0; for(i=0;i<3;i++) x[0][i]=i+1; for(i=0;i<3;i++) x[1][i]=2*i+1; for(i=0;i<3;i++) printf(“%d ”,x[0][i]); printf(“\n”); for(i=0;i<3;i++) printf(“%d ”,x[1][i]); getch(); return 0; } ผลการรัน 1 2 3 1 3 5

แบบฝกหัด: Array 1. จงเขียนโปรแกรมรับตัวเลขจํานวน 15 ตัวจากผูใช แลวทําการหาแสดงคาทั้งหมดที่รับมา แลวหาคาสูงสุด

คาต่ําสุด และผลรวมของเลขทั้งหมดนั้น 2. จงเขียนโปรแกรมรับคา n จากผูใช โดยที่ 5<n<15 แลวทําการรับตัวเลขจํานวน n ตัวจากผูใช แลวให

แสดงผลลัพธแบบขอที่ 1 3. ทําโปรแกรมคลายกับขอ 2 แตวาใหรับตัวเลขไดเฉพาะตัวเลขที่ไมเกิน 20 แลวทําการแสดงผล 4. จงเขียนโปรแกรมรับคา String 1 ตัวจากผูใชแลวทําการหานับจํานวนตัวพิมพใหญ ตัวพิมพเล็ก และ

ชองวาง แลวพิมพออกทางหนาจอ 5. จงเขียนโปรแกรมรับคา String จากผูใชจํานวน 5 ตัวแลวทําการหาวาตัวไหนมีความยาวมากที่สุด 6. จงเขียนโปรแกรมรับคาตัวเลขจํานวนเต็มจากผูใช แลวทําการพิมพ เลขคู และเลขคี่ โดยการพิมพทีละชนิด 7. ทําการเขียนโปรแกรมคนหาอักษรภายใน String โดยการรับ String และตัวอักษรที่ตองการคนหาจาก

ผูใช แลวทําการพิมพขอความออกมาวาภายใน String มีตัวอักษรนั้นกี่ตัว และตําแหนงใดบาง String : The river is no return Character : r Found character r = 4 in the position : 5 9 17 21


Computer Programming Array

29

8. จงเขียนโปรแกรมรับ String จากผูใชโดยมีความยาวตั้งแต 4‐15 หากไมใชใหแสดงขอความ ERROR!

แลววนกลับไปรับใหม เมื่อได String แลวทําการหาวา เปนตัวพิมพใหญ ตัวพิมพเล็ก และอักขระอื่นๆ อยางละกี่ตัว 9. จงเขียนโปรแกรมเพื่อรับคะแนนของนักศึกษา 4 คนๆ ละ 3 วิชา (คะแนนเต็มแตละวิชา = 10) เก็บไวในตัว

แปร score แลวคํานวณคะแนนเฉลี่ยในแตละวิชา และคะแนนเฉลี่ยของนักศึกษาแตละคนโดยกําหนดให คะแนนเฉลี่ยของนักศึกษาถาต่ํากวา 7.5 ถือวาสอบไมผาน โปรแกรมตองตรวจสอบดวยวามีนักศึกษาสอบ ไมผานกี่คน Enter score of student No.1 Subject 1: 8 Subject 2: 6 Subject 3: 7 Enter score of student No.2 Subject 1: 9 Subject 2: 8 Subject 3: 10 Enter score of student No.3 Subject 1: 7 Subject 2: 8 Subject 3: 6 Enter score of student No.4 Subject 1: 6 Subject 2: 5 Subject 3: 8 Sum and Average score of subject 1 = 30, 7.50 Sum and Average score of subject 2 = 27, 6.75 Sum and Average score of subject 3 = 31, 7.75 Sum and Average score of student No 1: 21, 7.00 Sum and Average score of student No 2: 27, 9.00 Sum and Average score of student No 3: 21, 7.00 Sum and Average score of student No 4: 19, 6.33 Total of student not pass the exam: 3


Review Mid‐Term

ขอสอบกลางภาค 1/2550

ขอที่ 1 (1/2550) 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.

#include<stdio.h> #include<string.h> ‐‐‐‐‐‐‐‐‐‐‐‐‐ เขียนคําตอบ --------------; void main(){ int i,n[10],x; ‐‐‐‐‐‐‐‐‐‐‐‐‐ เขียนคําตอบ --------------; for(i=0;i<x;i++){ n[i] = 'A'+i; if(n[i]%2==0) printf("n[%d] = %c\n",i,n[i]); else printf("n[%d] = %d\n",i,n[i]); } } int test(){ int k; char str[11]; do{ printf("Enter a string (5‐10 characters) : "); gets(str); k=strlen(str); }while(‐‐‐‐‐‐‐‐‐‐‐‐‐ เขียนคําตอบ --------------); return k; }

บรรทัดที่ 3 ฟงกชัน prototype ของฟงกชัน test() คือ int test() บรรทัดที่ 6 คําสั่งที่ใชในการเรียกฟงกชัน test() คือ x=test() บรรทัดที่ 22 คําสั่งที่ใชในการเปรียบเทียบโดยใช || เปนตัวเชื่อมคือ

k<5 || k>10

บรรทัดที่ 22 คําสั่งที่ใชในการเปรียบเทียบโดยใช && เปนตัวเชื่อมคือ

k>=5 && k<=10 ถาผูใชปอนสตริง “AAAAAA” เขามา สิ่งที่

แสดงออกที่จอภาพ คือ n[0] = n[1] = n[2] = n[3] = n[4] = n[5] =

65 B 67 D 69 F


Computer Programming Review Mid‐Term

ขอที่ 2 (1/2550) 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.

จากการรันโปรแกรม สิ่งที่แสดงออกทางจอภาพ คือ

#include<stdio.h> #include<string.h> void main(){ char str1[30]="Trimester 1/2550" ,str2[30]="Com Pro"; int n1,n2,n3; n1=sizeof(str1); n2=strlen(str1); strcpy(str2,"SUT"); strcat(str1,str2); n3=strlen(str2); printf("n1=%d\n",n1); printf("n2=%d\n",n2); printf("n3=%d\n",n3); printf("str1=%s\n",str1); printf("str2=%s\n",str2); }

n1 = 30 n2 = 16 n3 = 3 str1 = Trimester 1/2550SUT str2 = SUT

ขอที่ 3 (1/2550) 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.

#include<stdio.h> void main(){ int test[3][5]={15,14,13,12 ,11,10,9,8,7,6,5,4,3,2,1}; int i,j,a=0,b=0,c=0; for(i=0;i<3;i++){ b++; for(j=0;j<5;j++){ if(j%2==1) continue; c=c+test[i][j]; a++; i++; } } printf("i=%d\n",i); printf("j=%d\n",j); printf("a=%d\n",a); printf("b=%d\n",b); printf("c=%d\n",c); }

จากการรันโปรแกรมสิ่งที่แสดงผลออกทางหนาจอคือ

i = j = a = b = c =

4 5 3 1 24

31


Computer Programming Review Mid‐Term

32

ขอที่ 4 (1/2550) 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.

#include<stdio.h> void main(){ char ch='C'; int i=1, total=0; printf("Output: "); while(i){ if(ch>'E') i=0; else if (ch%2==0) ch=ch+2; else if (ch<'E') ch‐‐; printf("%c ",ch); total++; } printf("\nTotal = %d",total); }

จากการรันโปรแกรม ผลลัพธทางจอภาพ คือ

Output: B D F F Total = 4

สําหรับขอสอบชุดอื่นๆ

สามารถหาไดจาก โปรแกรม HKSOnline

สามารถ ปลดล็อกการพิมพจากโปรแกรม Portable PDF Password Remover 3.0

สามารถหาและ Download ไดที่ http://student.sut.ac.th/b4909446/


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.