:

if-else 



การเขียนคำสั่งเพื่อเลือกทำคำสั่ง

รูปแบบของคำสั่งเลือกทำในภาษาซีคือ
if(ประโยคเงื่อนไข){
    คำสั่ง;
    คำสั่ง;
    ...
}
หากจริง จะเข้าไปทำคำสั่งทั้งหมดในวงเล็บปีกกา
แต่ if ไม่จำเป็นต้องมีวงเล็บปีกกา หากคำสั่งภายใน มีเพียงคำสั่งเดียว เช่น
if(ประโยคเงื่อนไข) คำสั่ง;

ประโยคเงื่อนไขคือ นิพจน์ที่จะให้ค่าได้เพียง 2 ค่าเท่านั้นคือ จริงหรือเท็จ เช่น x == 4 จะให้ค่า 0 หรือ 1 เป็นต้น (ในทางปฏิบัติ สามารถประยุกต์ประโยคเงื่อนไขได้หลากหลายมากๆ)

ปกติแล้ว เราสามารถใช้ตัวดำเนินการทางตรรกศาสตร์ เข้ามาช่วยในการเขียนประโยคเงื่อนไขได้ โดย

!        แทนตัวดำเนินการ not
&&    แทนตัวดำเนินการ and
||       แทนตัวดำเนินการ or

เช่น ประโยค x + 2 น้อยกว่า 8 และ x หาร 3 ลงตัว หรือ x ไม่น้อยกว่า 2 จะสามารถเขียนให้เป็นประโยคเงื่อนไขได้ว่า
x + 2 < 8 && x % 3 == 0 || !(x < 2)

คราวนี้มาดูวิธีการเขียน if แบบเต็มๆ กัน
โค๊ด 027if
#include<stdio.h>
int main(){
    int x = 5;
    if(x + 3 > 7 || (x <= 5 || x % 3 == 0) && x < 1){
        printf("That's true!\n");
    }
    return 0;
}

ให้เวลาคิด 2 นาที ว่าโปรแกรมนี้จะพิมพ์อะไรออกมาทางหน้าจอหรือไม่..
...
...

ผิดครับ

ข้อนี้ พิมพ์ That's true! ออกมาทางหน้าจอนะคร๊าบบบ


ผลลัพธ์That's true!

เรามาดูกันว่าทำไม

หากเราเปลี่ยนประโยคเปรียบเทียบเป็นค่าของประโยคเปรียบเทียบ จะได้ดังนี้
if(1 || (1 || 0) && 0)
if(1 || 1 && 0)

โดยปกติแล้ว ตัวดำเนินการนั้น จะทำจากซ้ายไปขวา แต่จะให้ความสำคัญกับ && มากกว่า ||

if(1 || 0)
if(1) 
จึงเข้าไปทำคำสั่งข้างในต่อไป

อีกซักคำถามละกัน



#include<stdio.h>
int main(){
    int x = 5;
    if((x + 3 > 7 || (x <= 5 || x % 3 == 0)) && x < 1){
        printf("That's true!\n");
    }
    return 0;
}
ให้เวลาคิด 2 นาที ว่าโปรแกรมนี้จะพิมพ์อะไรออกมาทางหน้าจอหรือไม่..
...
...

ถูกครับ

ข้อนี้ไม่พิมพ์อะไรออกมาทางหน้าจอนะครับ

ผลลัพธ์        

เขียนเป็นขั้นๆได้ดังนี้

if((1 || (1 || 0)) && 0)
if((1 || 1) && 0)
if(1 && 0)
if(0)

ดังนั้น จึงไม่เข้าไปทำคำสั่งข้างในครับ

จากข้อนี้ หากเราต้องการเขียนคำว่า That's not true! ออกมาทางหน้าจอ ภาษา C มีรูปแบบการเขียนดังนี้


    if((x + 3 > 7 || (x <= 5 || x % 3 == 0)) && x < 1){
        printf("That's true!\n");
    }
    else{
        printf("That's not true!\n");
    }

พูดง่ายๆคือ จะเข้าไปทำใน else เมื่อ condition ใน if ไม่เป็นจริงนั่นเอง

----------------------------------------------------------------
Operator Precedence  
----------------------------------------------------------------

จาก Code ที่ให้มา
จงแก้เฉพาะส่วนของการประกาศตัวแปร โดยใส่ค่าเข้าไปให้ x และ y
เพื่อให้พิมพ์คำว่า That's good. ออกมาทางหน้าจอ

โค๊ด 027ifelse
#include<stdio.h>
int main(){
int x = ;
int y = ;
if((y == 4 || (x < 5 && y > 2) && x == 5) && x == -20)
printf("That's good.");
return 0;
}


----------------------------------------------------------------
Operator Precedence  
----------------------------------------------------------------

จาก Code Workshop 1
เมื่อกำหนดค่า x=8 และ y=6 จะเขียนโค้ดอย่างไร
เมื่อเงื่อนไขเป็น เท็จ จากนั้นพิมพ์คำว่า That's not good. ออกมาทางหน้าจอ (ให้ดูจากตัวอย่างด้านบน)




ตัวอย่างโจทย์ if-else
จงเขียนโปรแกรมเพื่อตรวจสอบเพศของผู้ใช้ โดยให้รับตัวอักขระจากผู้ใช้ ถ้าผู้ใช้ป้อน G แสดงข้อความ You are girl. ถ้าผู้ใช้ป้อน B ให้แสดงข้อความ You are boy. หากป้อนตัวอักขระอื่นๆ จะแสดงข้อความ Error.
Algorithm โปรแกรมตรวจสอบเพศผู้ใช้โปรแกรม
เริ่มต้น
รับอักขระจากผู้ใช้เก็บไว้ในตัวแปร message
ตรวจสอบอักขระ ถ้า message เป็นค่า G แสดง ข้อความ You are girl. ถ้า message เป็นค่า B ให้แสดงข้อความ You are boy. แต่หากเป็นอักขระอื่น แสดงข้อความ Error.
จบการทำงาน

Program Flowchart โปรแกรมตรวจสอบเพศผู้ใช้โปรแกรม



Pseudo Code โปรแกรมตรวจสอบเพศผู้ใช้โปรแกรม
START
READ message
if(message=='G'){
   PRINT "You are girl."
   else if(message=='B'{
   PRINT "You are boy."
   }}
   else{
   PRINT "Error"
   }
END

Source Code  โปรแกรมตรวจสอบเพศผู้ใช้โปรแกรม

#include<stdio.h>
int main(){
char message;
printf("Please input your gender (B=Boy,G=Girl): ");
scanf("%c",&message);
if(message=='G'){ 
   printf("You are girl.");
    }
    else if(message=='B'){
    printf("You are boy.");
    }
else{
printf("Error.");
}
}


Refer: Link