คำสั่งเลือกแบบทางเดียว
การเลือกแบบทางเดียวเพื่อจะตรวจสอบว่าชุดคำสั่งที่ตามมาจะทำหรือไม่ ในภาษาซีจะใช้คำสั่ง if ในการทำงานของคำสั่งคอมพิวเตอร์จะตรวจสอบเงื่อนไขก่อน ถ้าเงื่อนไขเป็นจริงจะทำคำสั่งหรือสเตตเมนต์ที่ตามหลังหรือเป็นสเตตเมนต์รวมที่อยู่ในเครื่องหมาย { } แต่ถ้าเงื่อนไขเป็นเท็จคอมพิวเตอร์จะทำคำสั่งหรือสเตตเมนต์ต่อไป รูปแบบของคำสั่งเป็นดังนี้
รูปแบบ : if (condition) {action statement}
โดยการตรวจสอบเงื่อนไข จะเป็นการกระทำแบบบูลีน ผลลัพธ์ที่ได้จะเป็นจริงหรือเท็จเท่านั้น ถ้าหากมีการใช้ตัวดำเนินการจะใช้ตัวดำเนินการบูลีน สำหรับการทำงานของคำสั่ง if สามารถเขียนเป็นผังงานได้ดังนี้
รูปแบบ : if (condition) {action statement}
โดยการตรวจสอบเงื่อนไข จะเป็นการกระทำแบบบูลีน ผลลัพธ์ที่ได้จะเป็นจริงหรือเท็จเท่านั้น ถ้าหากมีการใช้ตัวดำเนินการจะใช้ตัวดำเนินการบูลีน สำหรับการทำงานของคำสั่ง if สามารถเขียนเป็นผังงานได้ดังนี้
codition คือเงื่อนไขหรือในการเปรียบเทียบมีอยู่ 2 ค่าคือ
1. จริง
2. ไม่จริง,เท็จ(ทั้ง 2 คำนี้มีความหมายเดียวกัน
Statement คือคำสั่งที่จะทำ
ตัวอย่างรูปแบบ if
if(<condition>) Statement1;
Statement 2;
ถ้าเงื่อนไขใน condition เป็นจริง จะทำงาน Statement 1 แล้วต่อด้วย
Statement 2 เป็นไม่จริง จะทำงาน Statement 2 เลย จะไม่ทำงาน Statement1
ตัวอย่าง condition
เช่น 5 > 10 ค่าที่ให้จะเป็น ไม่จริง
2 < 8 ค่าที่ให้จะเป็น จริง
1. จริง
2. ไม่จริง,เท็จ(ทั้ง 2 คำนี้มีความหมายเดียวกัน
Statement คือคำสั่งที่จะทำ
ตัวอย่างรูปแบบ if
if(<condition>) Statement1;
Statement 2;
ถ้าเงื่อนไขใน condition เป็นจริง จะทำงาน Statement 1 แล้วต่อด้วย
Statement 2 เป็นไม่จริง จะทำงาน Statement 2 เลย จะไม่ทำงาน Statement1
ตัวอย่าง condition
เช่น 5 > 10 ค่าที่ให้จะเป็น ไม่จริง
2 < 8 ค่าที่ให้จะเป็น จริง
สำหรับการตรวจสอบเงื่อไขจะใช้ตัวดำเนินการเปรียบเทียบ ได้แก่
ในการตรวจสอบเงื่อนไขนั้นตัวแปรที่นำมาเปรียบเทียบจะต้องเป็นข้อมูลประเภทเดียวกัน ตัวอย่างเช่น ถ้าให้ chเป็น char ให้ numและ mark เป็น int การตรวจสอบเงื่อนไขอาจจเป็นได้ดังนี้
นอกจากนี้การตรวจสอบเงื่อนไขสามารถใช้ตัวดำเนินการทางตรรกะมาร่วมด้วยได้ อย่างเช่น ถ้าหากตัวแปร score ใช้เก็บคะแนน และต้องการตรวจสอบว่าถ้าคะแนนมากกว่าหรือเท่ากับ 70 และน้อยกว่า 80 ให้ได้เกรด B จะเขียนคำสั่ง if ได้เป็น
- if ต้องตามด้วยวงเล็บ และภายในวงเล็บต้องมีเงื่อนไขระบุว่าจะทําสิ่งที่ตามมาหรือไม่
- ถ้าเงื่อนไขเป็นจริง โปรแกรมจะทําคําสั่งที่ตามมาทันที
- สิ่งที่แตกต่างไปจากซูโดโค้ดก็คือเราต้องประกาศตัวแปรและให้ความสําคัญกับชนิดข้อมูลของตัวแปรนั้น
- ถ้ามีการอ่านข้อมูลเข้า และ/หรือ การแสดงข้อความจะต้องมีการใช้ #include <stdio.h>
- ถ้าเงื่อนไขเป็นจริง โปรแกรมจะทําคําสั่งที่ตามมาทันที
- สิ่งที่แตกต่างไปจากซูโดโค้ดก็คือเราต้องประกาศตัวแปรและให้ความสําคัญกับชนิดข้อมูลของตัวแปรนั้น
- ถ้ามีการอ่านข้อมูลเข้า และ/หรือ การแสดงข้อความจะต้องมีการใช้ #include <stdio.h>
ตัวอย่าง เงื่อนไขที่ซับซ้อนขึ้น
จงเขียนโปรแกรมภาษาซี ที่รับตัวเลขสองจํานวนจากผู้ใช้ โปรแกรมนี้จะพิมพ์คําว่า positive เมื่อตัวเลขทั้งสองจํานวนเป็นบวก และจะไม่พิมพ์อะไรเลยหากมีตัวเลขที่ไม่ได้เป็นบวกอยู่ด้วย
วิเคราะห์ในกรณีนี้เราต้องพิจารณาเงื่อนไขจากค่าสองค่าพร้อมกัน วิธีที่นิยมใช้กันมากก็คือ ‘ให้แยกออกเป็นสองเงื่อนไขย่อย แล้วนํามารวมกันด้วยวิธีทางตรรกศาสตร์’ สําหรับข้อนี้หากเราตั้งชื่อทั้งสองค่าว่า x และ y เราจะได้เงื่อนไขย่อยเป็น (1) x > 0 กับ (2) y > 0 เนื่องจากเงื่อนไขทั้งสองต้องเป็นจริงพร้อมกัน การนําเงื่อนไขย่อยนี้มารวมกันจึงใช้ ‘และ’ ซึ่งก็คือเครื่องหมาย ^ ในตรรกศาสตร์ และ เครื่องหมาย&&ในภาษาซี
จงเขียนโปรแกรมภาษาซี ที่รับตัวเลขสองจํานวนจากผู้ใช้ โปรแกรมนี้จะพิมพ์คําว่า positive เมื่อตัวเลขทั้งสองจํานวนเป็นบวก และจะไม่พิมพ์อะไรเลยหากมีตัวเลขที่ไม่ได้เป็นบวกอยู่ด้วย
วิเคราะห์ในกรณีนี้เราต้องพิจารณาเงื่อนไขจากค่าสองค่าพร้อมกัน วิธีที่นิยมใช้กันมากก็คือ ‘ให้แยกออกเป็นสองเงื่อนไขย่อย แล้วนํามารวมกันด้วยวิธีทางตรรกศาสตร์’ สําหรับข้อนี้หากเราตั้งชื่อทั้งสองค่าว่า x และ y เราจะได้เงื่อนไขย่อยเป็น (1) x > 0 กับ (2) y > 0 เนื่องจากเงื่อนไขทั้งสองต้องเป็นจริงพร้อมกัน การนําเงื่อนไขย่อยนี้มารวมกันจึงใช้ ‘และ’ ซึ่งก็คือเครื่องหมาย ^ ในตรรกศาสตร์ และ เครื่องหมาย&&ในภาษาซี
การใช้เครื่องหมาย&&เพื่อรวมเงื่อนไขใน if
#include <stdio.h>
void main() {
int x, y;
scanf("%d %d", &x, &y);
if(x > 0 && y > 0) ใช้เครื่องหมาย&&ภายในวงเล็บเงื่อนไขของ if
printf("positive");
}
#include <stdio.h>
void main() {
int x, y;
scanf("%d %d", &x, &y);
if(x > 0 && y > 0) ใช้เครื่องหมาย&&ภายในวงเล็บเงื่อนไขของ if
printf("positive");
}
ตัวอย่าง เงื่อนไขที่ซับซ้อนขึ้น
จงเขียนโปรแกรมภาษาซี ที่รับตัวเลขสองจํานวนจากผู้ใช้ โปรแกรมนี้จะพิมพ์คําว่า positive หนึ่งครั้ง เมื่อมีตัวเลขอย่างน้อยหนึ่งตัวเป็นบวก และจะไม่พิมพ์อะไรเลยหากมีตัวเลขที่ไม่ได้เป็นบวกอยู่ด้วย
วิเคราะห์ ตอนนี้เงื่อนไขเปลี่ยนเป็น ‘มีอย่างน้อยหนึ่งตัว’ แสดงว่ามีตัวหนึ่งที่เป็นบวกก็เพียงพอแล้ว และจะเป็น x หรือ y ก็ได้ หรือตัวเลขทั้งสองจะเป็นบวกด้วยกันทั้งคู่ก็ได้ปัญหานี้ ต้องการหาว่าเงื่อนไขย่อยอย่างน้อยหนึ่งตัว เป็นจริงหรือไม่ จะตรงกับการรวมเงื่อนไขด้วยคําว่า ‘หรือ’ ซึ่งใช้เครื่องหมาย v ในตรรกศาสตร์และใช้เครื่องหมาย || ในภาษาซี
จงเขียนโปรแกรมภาษาซี ที่รับตัวเลขสองจํานวนจากผู้ใช้ โปรแกรมนี้จะพิมพ์คําว่า positive หนึ่งครั้ง เมื่อมีตัวเลขอย่างน้อยหนึ่งตัวเป็นบวก และจะไม่พิมพ์อะไรเลยหากมีตัวเลขที่ไม่ได้เป็นบวกอยู่ด้วย
วิเคราะห์ ตอนนี้เงื่อนไขเปลี่ยนเป็น ‘มีอย่างน้อยหนึ่งตัว’ แสดงว่ามีตัวหนึ่งที่เป็นบวกก็เพียงพอแล้ว และจะเป็น x หรือ y ก็ได้ หรือตัวเลขทั้งสองจะเป็นบวกด้วยกันทั้งคู่ก็ได้ปัญหานี้ ต้องการหาว่าเงื่อนไขย่อยอย่างน้อยหนึ่งตัว เป็นจริงหรือไม่ จะตรงกับการรวมเงื่อนไขด้วยคําว่า ‘หรือ’ ซึ่งใช้เครื่องหมาย v ในตรรกศาสตร์และใช้เครื่องหมาย || ในภาษาซี
การใช้เครื่องหมาย || เพื่อรวมเงื่อนไขใน if
#include <stdio.h>
void main() {
int x, y;
scanf("%d %d", &x, &y);
if(x > 0 || y > 0) ใช้เครื่องหมาย || ภายในวงเล็บเงื่อนไขของ if
printf("positive");
}
#include <stdio.h>
void main() {
int x, y;
scanf("%d %d", &x, &y);
if(x > 0 || y > 0) ใช้เครื่องหมาย || ภายในวงเล็บเงื่อนไขของ if
printf("positive");
}
สิ่งที่มือใหม่มักทําผิด
เวลาที่บอกว่า ‘ถ้าเงื่อนไขเป็นจริงอย่างน้อยหนึ่งอย่าง’ มือใหม่จะคิดผิดแล้วแยกเงื่อนไขออกจากกัน แล้วใช้ if สองครั้ง ถ้าจับเงื่อนไขแยกกัน การทํางานจะผิดไปจากเดิม
int x, y;
scanf("%d %d", &x, &y);
if(x > 0)
printf("positive");
if(y > 0)
printf("positive");
เวลาที่บอกว่า ‘ถ้าเงื่อนไขเป็นจริงอย่างน้อยหนึ่งอย่าง’ มือใหม่จะคิดผิดแล้วแยกเงื่อนไขออกจากกัน แล้วใช้ if สองครั้ง ถ้าจับเงื่อนไขแยกกัน การทํางานจะผิดไปจากเดิม
int x, y;
scanf("%d %d", &x, &y);
if(x > 0)
printf("positive");
if(y > 0)
printf("positive");
ตัวอย่างโจทย์
จงเขียนโปรแกรมภาษาซี ที่พิมพ์คําว่า positive เมื่อผู้ใช้ใส่ค่าตัวเลขที่เป็นบวก และไม่ว่าผู้ใช้จะใส่เลขใดเข้ามา ก่อนจบโปรแกรมให้พิมพ์คําว่า good bye
วิเคราะห์ เห็นได้ว่างานที่ต้องทํามีสองแบบ แบบแรกคือแบบเลือกทํา และแบบที่สองก็คือยังไงก็ต้องทําแน่ ๆ มีเทคนิคในการคิดง่าย ๆ แต่ได้ผลก็คือ
- งานที่เลือกทําจะเกี่ยวข้องกับ if คือ ทําเมื่อเงื่อนไขที่กําหนดให้เป็นจริง
- งานที่ต้องทําแน่ ๆ จะอยู่นอก if คือ ต้องทําอย่างไม่มีเงื่อนไข
จากโจทย์ เห็นได้ว่า การพิมพ์คําว่าpositive เกิดขึ้นเมื่อเงื่อนไขเป็นจริงส่วนการพิมพ์คําว่า good bye เป็นสิ่งที่ต้องทําโดยไม่มีเงื่อนไข
#include <stdio.h>
void main() {
int x;
scanf("%d", &x);
if (x > 0)
printf("positive\n");
printf("good bye");
}
คําสั่งนี้ตามหลัง if มาทันทีจึงอยู่ใต้เงื่อนไขของ ifคําสั่งนี้อยู่ภายนอก if โปรแกรมจะทําคําสั่งนี้อย่างไม่มีเงื่อนไข ถ้าเทียบกับโฟลวชาร์ต มันก็คือคําสั่งที่มาหลังการบรรจบกันของทางแยกทั้งสองนั่นเอง
จงเขียนโปรแกรมภาษาซี ที่พิมพ์คําว่า positive เมื่อผู้ใช้ใส่ค่าตัวเลขที่เป็นบวก และไม่ว่าผู้ใช้จะใส่เลขใดเข้ามา ก่อนจบโปรแกรมให้พิมพ์คําว่า good bye
วิเคราะห์ เห็นได้ว่างานที่ต้องทํามีสองแบบ แบบแรกคือแบบเลือกทํา และแบบที่สองก็คือยังไงก็ต้องทําแน่ ๆ มีเทคนิคในการคิดง่าย ๆ แต่ได้ผลก็คือ
- งานที่เลือกทําจะเกี่ยวข้องกับ if คือ ทําเมื่อเงื่อนไขที่กําหนดให้เป็นจริง
- งานที่ต้องทําแน่ ๆ จะอยู่นอก if คือ ต้องทําอย่างไม่มีเงื่อนไข
จากโจทย์ เห็นได้ว่า การพิมพ์คําว่าpositive เกิดขึ้นเมื่อเงื่อนไขเป็นจริงส่วนการพิมพ์คําว่า good bye เป็นสิ่งที่ต้องทําโดยไม่มีเงื่อนไข
#include <stdio.h>
void main() {
int x;
scanf("%d", &x);
if (x > 0)
printf("positive\n");
printf("good bye");
}
คําสั่งนี้ตามหลัง if มาทันทีจึงอยู่ใต้เงื่อนไขของ ifคําสั่งนี้อยู่ภายนอก if โปรแกรมจะทําคําสั่งนี้อย่างไม่มีเงื่อนไข ถ้าเทียบกับโฟลวชาร์ต มันก็คือคําสั่งที่มาหลังการบรรจบกันของทางแยกทั้งสองนั่นเอง
ตัวอย่างการให้ ifทําคําสั่งมากกว่าหนึ่งคําสั่ง
ตัวอย่างโจทย์ จงเขียนโปรแกรมภาษาซีที่รับค่าจํานวนเต็มจากผู้ใช้มาสองจํานวน หากจํานวนทั้งสองเป็นบวกทั้งคู่ โปรแกรมจะพิมพ์คําว่า positive จากนั้นจะทําการบวกเลขทั้งสองนั้น แล้วพิมพ์ผลบวกออกมา แต่หากตัว
เลขที่ใส่เข้ามามีจํานวนที่ไม่ได้เป็นบวกอยู่ด้วย โปรแกรมจะจบการทํางานโดยไม่พิมพ์อะไรออกมา
วิเคราะห์ สิ่งที่ต้องทําเมื่อเงื่อนไขใน if เป็นจริงมีอยู่มากกว่าหนึ่งอย่าง เมื่อคําสั่งที่อยู่ภายใต้เงื่อนไข if มีมากกว่าหนึ่ง เราต้องรวบคําสั่งพวกนี้เป็นก้อนเดียวด้วยการนําไปใส่ไว้ในวงเล็บปีกกา
#include <stdio.h>
void main() {
int x, y;
scanf("%d %d", &x, &y);
if (x > 0 && y > 0) {
printf("positive");
int sum = x + y;
printf("%d", sum);
}
}
ตัวอย่างโจทย์ จงเขียนโปรแกรมภาษาซีที่รับค่าจํานวนเต็มจากผู้ใช้มาสองจํานวน หากจํานวนทั้งสองเป็นบวกทั้งคู่ โปรแกรมจะพิมพ์คําว่า positive จากนั้นจะทําการบวกเลขทั้งสองนั้น แล้วพิมพ์ผลบวกออกมา แต่หากตัว
เลขที่ใส่เข้ามามีจํานวนที่ไม่ได้เป็นบวกอยู่ด้วย โปรแกรมจะจบการทํางานโดยไม่พิมพ์อะไรออกมา
วิเคราะห์ สิ่งที่ต้องทําเมื่อเงื่อนไขใน if เป็นจริงมีอยู่มากกว่าหนึ่งอย่าง เมื่อคําสั่งที่อยู่ภายใต้เงื่อนไข if มีมากกว่าหนึ่ง เราต้องรวบคําสั่งพวกนี้เป็นก้อนเดียวด้วยการนําไปใส่ไว้ในวงเล็บปีกกา
#include <stdio.h>
void main() {
int x, y;
scanf("%d %d", &x, &y);
if (x > 0 && y > 0) {
printf("positive");
int sum = x + y;
printf("%d", sum);
}
}