Professional Documents
Culture Documents
ภาษาซีพื้นฐาน
ภาษาซีพื้นฐาน
¾ สามารถเขียนเปนภาษาเชิงโครงสรางไดวา
¾ สามารถนํามาเขียนเปนภาษา C ไดดังนี้
if ( grade >= 60 )
printf(“Passed\n”);
if ( condition ) {
statement;
}
1
2. คําสัง
่ if แบบสองทาง --- Double Selection
¾ สามารถเขียนเปนภาษาเชิงโครงสรางไดวา
¾ สามารถนํามาเขียนเปนภาษา C ไดดังนี้
if(grade>=60)
printf(“Passed\n”);
else
printf(“Failed\n”);
if (condition) {
statements1;
}
else {
statements2;
}
- ถาผลการตรวจสอบเงื่อนไขเปนจริง ก็ทํางานตามกลุมคําสั่งของ if
- ถาผลการตรวจสอบเงื่อนไขเปนเท็จ ก็ใหทํางานตามกลุมคําสั่งของ else แทน
2
3. คําสัง
่ if แบบหลายทางเลือก --- Multiple Selection
เชน...
¾ จากภาษาโครงสราง
if (grade >= 90 )
printf("A\n");
else if (grade >= 80)
printf("B\n");
else if (grade >= 70)
printf("C\n");
else if (grade >= 60)
printf("D\n");
else
printf("F\n");
3
รูปแบบของ if statement แบบ Multiple Selection คือ
if ( condition1 ) {
statement of condition1;
}
else if ( condition2 ) {
statement of condition2;
}
else if ( condition3 ) {
statement of condition3;
}
...
else if ( condition N ) {
statement of condition N;
}
else {
statement;
}
Remark :)
หากภายในเงื่อนไขมีมากกวาหนึ่งคําสั่งตองมีวงเล็บปกกาครอม
เชน...
if (grade >= 60)
printf("Passed\n");
else {
printf("Failed.\n");
printf("You must take this course again.\n");
}
หากไมใสปกกาครอม
เชน...
if (grade >= 60)
printf("Passed\n");
else
printf("Failed.\n");
printf("You must take this course again.\n");
สวนของโปรแกรมในบรรทัด
printf("You must take this course again.\n");
จะถูกแสดงทุกครั้ง ไมวา grade จะเกิน 60 หรือไมก็ตาม
if (x < y)
a = x * 2;
else
a = x + y;
สามารถเขียนไดในอีกรูปแบบหนึ่ง คือ
a = x < y ? x*2: x+y;
ซึ่งจะใหความหมายเดียวกันกับ code ขางบนนั่นเอง
4
Switch Case!
ในการเลือกการทํางานเมื่อมีทางเลือกหลายทาง การใช if-else ซอนๆกันทําใหโปรแกรมมีความยุงยาก
และซับซอน
เชน การเลือกเมนู 1, 2, 3 ซึ่งถาเราใช if-else จะใชคาํ สั่งดังตัวอยาง
if (menu == 1)
printf(“Menu choice is 1 \n”);
} else if (menu == 2)
printf(“Menu choice is 2 \n”);
} else if (menu == 3)
printf(“Menu choice is 3 \n”);
} else {
printf(“Menu choice is not 1, 2, 3 \n”);
}
switch (expression) {
case value_1: statement of value 1 break;
case value_2: statement of value 2 break;
case value_3: statement of value 3 break;
…
default: statement of default;
}
switch (menu) {
case 1: printf(“menu choice is 1 \n”); break;
case 2: printf(“menu choice is 2 \n”); break;
case 3: printf(“menu choice is 3 \n”); break;
default: printf(“Menu choice is not 1, 2, 3 \n”);
}
เชน ...
switch (menu) {
case 1: case 2: printf(“menu choice is either 1 and 2 \n”); break;
case 3: printf(“menu choice is 3 \n”); break;
default: printf(“Menu choice is not 1, 2, 3 \n”);
}
:)
5
พิจารณาจากสวนของโปรแกรมนี้ .........
switch (code) {
case 1: case 3: case 5: Level = “A”; break;
case 2: case 4: case 6: Level = “B” break;
case 6: case 7: case 8: case 9: case 10: Level = “C”; break;
default: Level = “D”
}
การทํางานแบบวนซ้ํา Loop!
เปนการทํางานที่ตองวนซ้ํา เชน การคํานวณคะแนนสอบ ที่ตอ งมีการรวมคะแนนของนักเรียนทุกคน > <
การทํางานแบบวนซ้ํานี้ จะมีดว ยกัน 2 สวน คือ
- สวนของการตรวจสอบ (loop test)
- สวนของการทําวนซ้ํา (loop body)
จะทํางานโดย ตรวจสอบเงื่อนไขกอน หากเงื่อนไขเปนจริง จะทํางานในนั้น และมาตรวจสอบ หากเปนจริง
ก็จะทําการทํางาน วนซ้ําไปเรือ่ ย ๆ จนกวาเงื่อนไขจะเปนเท็จ
while loop
เปนคําสั่งสําหรับการทําการวนซ้ําแบบตรวจสอบกอนหนา (pretest) มีการทํางานคลายกับ for loop แต
ตางกันตรงที่ while loop ไมตองมีการกําหนดคาเริ่มตนใหตัวควบคุมการทําวนซ้ํากอนการทํางาน
่ ){
While ( สวนที1
สวนที่2
}
6
ตัวอยางการใช while loop
1.
i=1;
while ( i<10 ) {
printf( “%d\n”, i );
i += 2;
}
เปนสวนของโปรแกรมพิมพเลขคี่ที่อยูร ะหวาง 1 ถึง 10
1. กําหนดคา i = 1
2. ตรวจสอบวา i นอยกวา 10 หรือไม ถาไม ใหหยุด
ถาใช ใหพิมพคา I พรอมขึ้นบรรทัดใหม
3. เพิ่มคา i ทีละ 2 หนวย แลวกลับไปทําที่ขอ 2
2.
scanf( “%f”, &score );
while( score>=0 && score<=100 ){
if(score>50)
printf(“Pass\n”);
else printf(“Fail\n”)
scanf( “%f”, &score )
}
เปนสวนของโปรแกรมแสดงการสอบผานหรือสอบตก
1. อานขอมูลจากแปนพิมพ ใสในตัวแปร score
2. ตรวจสอบ 0 < score < 100 ถาไม หยุดการวนซ้ํา
3. ถาใช ใหตรวจสอบวา score > 50 หรือไม ถาใช ใหพิมพคําวา Pass
ถาไมใช ใหพิมพคําวา Fail
4. อานขอมูล score ใหมแลวกลับไปทําขอที่ 2
do-while loop
เปนคําสั่งสําหรับการทําการวนซ้ําแบบตรวจสอบมีหลัง (post-test) มีการทํางานคลายกับ while loop
แตสวนทีต ่ นไขกอน คือ จะทํางานในสวนของ loop
่ างกันคือ ในการทํางานครั้งแรก จะไมมีการเช็คเงือ
body กอน 1 ครั้ง แลวจึงมาเช็คเงื่อนไขที่ while อีกที ~
do {
สวนที่1
} while ( สวนที่2 )
7
ตัวอยางการใช do-while loop
i=1;
do {
printf( “%d\n”, i );
i += 2;
} while ( i<10 )
เปนสวนของโปรแกรมพิมพเลขคี่ที่อยูร ะหวาง 1 ถึง 10
1. กําหนดคา i = 1
2. พิมพคา i พรอมขึ้นบรรทัดใหม
3. เพิ่มคา i ทีละ 2 หนวย
4. ตรวจสอบวา i นอยกวา 10 หรือไม ถาไม ใหหยุด
ถาใช ใหกลับไปทําที่ขอ 2
-----
for loop
เปนการทําการวนซ้ําแบบกอนหนา (pretest) คือ การตรวจสอบเงื่อนไขกอน จึงทํางานใน statement
นั้น ...
A = 10;
C = A++; // A= 11, C = 10
A = 10;
C = ++A; // A = 11, C = 11
A = 10;
C = A--; // A = 9, C = 10
A = 10;
C = --A; // A = 9, C = 9
8
ตัวอยางการใช for loop
1.
for ( i=1; i<10; i+=2 ){
printf( “%d\n”, i );
}
เปนสวนของโปรแกรมพิมพเลขคี่ที่อยูร ะหวาง 1 ถึง 10
1. กําหนดคา i = 1
2. ตรวจสอบวา I นอยกวา 10 หรือไม ถาไม ใหหยุด
3. ถาใช ใหพิมพคา i พรอมขึ้นบรรทัดใหม
4. เพิ่มคา i ทีละ 2 หนวย แลวกลับไปทําที่ขอ 2
-----
2.
count = 0;
scanf( “%f”, &score);
for (; score>=0 && score<=100;)
if(score>50)
printf(“Pass\n”);
else printf(“Fail\n”);
count += 1;
scanf( “%f”, &score);
}
เปนสวนของโปรแกรมแสดงการสอบผานหรือสอบตก
1. กําหนด count = 0 ซึ่งเก็บจํานวนคะแนนที่ปอ นทั้งหมด
2. อานขอมูลจากแปนพิมพ ใสในตัวแปร count
3. ถา 0 < score < 100 ใหทําการวนซ้ํา
4. ถา score > 50 พิมพคําวา Pass มิฉะนั้นพิมพคําวา Fail
5. เพิ่มจํานวนที่อยูใน count อีก 1 หนวย
6. อานขอมูล score ใหมแลวกลับไปทําขอ 3
Arrays
ตัวแปรแถวลําดับ หรือ Array คือ การเก็บขอมูลประเภทเดียวกันจํานวนมาก เพื่อใหงายตอการ
นํามาประมวลผล
เชน...
การเก็บขอมูลคะแนนสอบของนักเรียน 100 คน หากเปนการประกาศขอมูลแบบปกติ จะตอง
ประกาศตัวแปร score1, score2, score3, …, score100 เพื่อเก็บคาคะแนนของนักเรียนแตละคน ซึ่ง
จะทําใหนํามาใชงานยุงยาก อีกทั้ง ตองรูช
ื่อของตัวแปรนั้น ๆ ดวย
แต.. หากเปนการใชอาเรยในการเก็บขอมูล สามารถทําไดโดยการประกาศตัวแปรเพียงครั้งเดียว
int score [100];
โดยการอางอิงถึงขอมูลที่เก็บคาไว ก็ทําไดโดยการระบุ index ซึ่งในที่นี้ จะตองมีการเก็บขอมูล
ที่เปนจํานวนเต็ม เริ่มจาก score[0], score[1], score[2], … จนถึง score[99]
9
1. อาเรยหนึ่งมิติ
ตัวอยางของอาเรย
double v[20]; ตัวแปรแถวลําดับชื่อ v ประเภทจํานวนจริงความจุสูงจํานวน 20 ตัว
const int max = 40; กําหนดคาคงตัว max = 40 และสรางอาเรยชอ ื่ score ประเภท
จํานวนจริง
double score[max]; ความจุจํานวน max ตัว
#define MAX 20 กําหนดใหมีการแทนคา MAX = 20 และสรางอาเรยชื่อ score
ประเภท
double score[MAX]; จํานวนจริง ความจุจํานวน MAX ตัว
หลังจากการสรางอาเรยแลว ตองกําหนดคาเริม
่ ตนใหคาตัวแปรดวย เพราะการเรียกใช
ตัวแปรโดยไมมีการกําหนดคาเริ่มตน จะทําใหไดคําตอบซึ่งไมสามารถคาดการณได การ
กําหนดคาเริ่มตนจะใช loop โดยมี index ควบคุม loop
ดังตัวอยาง
const int MAX = 40; // ประกาศคาคงตัว MAX = 40
int i; // ประกาศตัวแปร i ชนิดจํานวนเต็ม เพื่อใชเปน
index
float score[max]; // สรางอาเรยชนิดจํานวนจริง ความจุ MAX ตัว
for( i=0; i<MAX; i++) // วน loop ตั้งแตรอบที่ i = 0 ถึง i = 39
score[i] = 0; // กําหนดคาเริม
่ ตนให score ที่ index ที่ i เปน
0
2. อาเรยหลายมิติ
ในการแกปญหาทางคณิตศาสตรมักพบวา อาจตองมีเก็บขอมูลในลักษณะของเมทริกซ
--- ทั้ง row และ column ซึ่งการใชอาเรย 1 มิติ อาจจะไมเพียงพอตอการคํานวณเมทริกซ
ดังนั้นเพื่อใหผใู ชงานเกิดความสะดวก ภาษาซีจึงมี อาเรย 2 มิติ เพื่อสนับสนุนการกําหนดตัว
แปร
รูปแบบอาเรยหลายมิติ คือ
type-declaration variable_name[DIM1][DIM2];
℘ type-declaration ชนิดของตัวแปร --- int, short, float, char เปนตน
℘ variable_name ชื่อของตัวแปรที่ใชอางถึง
℘ DIM1 จํานวนสมาชิกในมิติแรก --- row
℘ DIM2 จํานวนสมาชิกในมิติทส ี่ อง --- column
** การสรางอาเรย 3 มิติ หรือมากกวา ก็จะใชหลักการเดียวกัน โดยเพิ่มวงเล็บระบุ
ขนาดฃผของมิติเพิ่มเขาไป
10
เชน... ตารางหมากรุกที่มีขนาด 8x8 ตัวเลขแรก บอกถึงจํานวน row
ตัวแรกหลัง บอกถึงจํานวน column
[0]
[1]
[2] ♫
[3]
[4]
[5]
[6]
[7]
ตัวอยางโปรแกรม...
#include <stdio.h>
#define ROW 4
#define COL 5
int main(void) {
int r, c;
int arr[ROW][COL];
for( r=0; r<ROW; r++ ) {
for( c=0; c<COL; c++ ) {
arr[r][c] = r*c;
}
}
for ( r=0; r<ROW; r++ ){
for( c=0; c<COL; c++ ){
printf(“%d\n”,arr[r][c]);
}
printf(“\n”);
}
return 0;
}
11
โปรแกรมมีการทํางาน ดังนี.้ ..
1. ประกาศคาคงตัว ROW = 4 และ COL = 5
2. ประกาศตัวแปร r, c เพื่อใชในการระบุ index ของอาเรย
3. สรางตัวแปร arr เปนอาเรย 2 มิติ ขนาด 4x5 เพื่อใชในการเก็บคาของเมทริกซ
4. วน loop เพื่อกําหนดคาของเมทริกซดวยผลคูณของ index row และ column
5. วน loop เพื่อพิมพคาของเมทริกซ arr ออกมาทีละแถว
6. จบการทํางาน และสงคา 0 ออกไป
และมีเกณฑดังนี้
• Too Thin: นอยกวา 18.5 (<18.5)
• Balance: มากกวาหรือเทากับ 18.5 แตนอยกวา 25 (≥18.5 แต <25)
• Over weight: มากกวาหรือเทากับ 25 แตนอ ยกวา 30 (≥25 แต <30)
• Fat: มากกวาหรือเทากับ 30 แตนอยกวา 40 (≥30 แต <40)
• Dangerous: มากกวาหรือเทากับ 40 (≥40)
12
แบบฝกหัดเรื่อง Switch Case
นางสาวสุดสวยจึงอยากทราบวาตนเองจะมีน้ําหนักเทาใด เมื่ออยูบนดาวดังที่กลาวมาขางตน
จึงอยากขอใหนองๆ ชวยเขียนโปรแกรมรับคาน้ําหนักของนางสาวสุดสวย และจากนั้นใช
Switch case เพื่อเลือกดาวทีต ่ องการทราบน้าํ หนัก จากนั้นใหแสดงน้ําหนักของนางสาวสุดสวยบนดาวที่
เลือกนั้น ขอใหนองๆ ชวยนางสาวสุดสวยดวย
โดยกิจกรรมการออกกําลังกายที่นางสาวสุดสวยจะเลือกไดนน
ั้ มีดังตอไปนี้
ตารางการเผาผลาญแคลอรี่ของแตละกิจกรรม
13