সি প্রোগ্রামিং ভাষার বিভিন্ন শর্ত পরীক্ষার জন্য if স্টেটমেন্ট ব্যবহার করা হয়।
if (conditional expression)
{
statement 1;
. . . .
}
প্রথম বন্ধনীর ভেতরের conditional expression যদি সত্য হয়, তাহলে if ব্লক্লের পরের দ্বিতীয় বন্ধনীর ভেতরের statement সমূহ রান হবে। আর যদি মিথ্যা হয়, তাহলে if ব্লক্লের পরের দ্বিতীয় বন্ধনীর ভেতরের statement সমূহ রান হবে না। ব্লকের ভেতরে এক বা একাধিক স্টেটমেন্ট থাকতে পারে।
উদাহরণ ৬
এখন একটি প্রোগ্রাম লেখা হবে, যেটি দুটি সংখ্যার মধ্যে তুলনা করে বের করবে তারা সমান কি না।
#include <stdio.h>
int main()
{
int n1 = 5, n2 = 7;
if (n1 == n2)
{
printf ("Numbers are equal.\n");
}
return 0;
}
প্রোগ্রামঃ ৫.৮
প্রোগ্রামটি রান করলে আমরা আউটপুটে কিছেই দেখতে পাব না। কেননা, if-এর ভেতরে ব্যবহৃত কন্ডিশনাল এক্সপ্রেশনটির মান মিথ্যা। তাই if-ব্লকের ভেতরের কোড এক্সিকিউট হয়নি।
if ব্লকের সঙ্গে else ব্লকও ব্যবহার করা যায়। যেমন-
#include <stdio.h>
int main()
{
int n1 = 5, n2 = 7;
if (n1 == n2)
{
printf ("Numbers are equal.\n");
}
else
{
printf ("Numbers are not equal.\n");
}
return 0;
}
প্রোগ্রামঃ ৫.৯
এই প্রোগ্রামটি রান করলে আমরা এরকম আউটপুট দেখতে পাব-
| Numbers are not equal. |
if-এর সঙ্গে ব্যবহৃত কন্ডিশনাল এক্সপ্রেশনটি (n1 == n2) মিথ্যা হওয়ায় if ব্লকের কোড এক্সিকিউট হয়নি, else ব্লকের কোডগুলো এক্সিকিউট হয়েছে। আবার যদি, n1, এবং n2 দুটি ভ্যারিয়েবলের মান সমান হতো, তাহলে if ব্লকের কোড এক্সিকিউট হতো, কিন্তু else ব্লকের কোড এক্সিকিউট হতো না। তখন আমরা আউটপুট দেখতাম-
| Numbers are equal. |
আবার আরেকটি ব্লক আছে, else if. কখনো যদি এমন প্রোগ্রাম লেখা হয় যে একটি শর্তের পরে অন্য একটি শর্ত পরীক্ষা করা হবে, তখন if-এর সঙ্গে এক বা একাধিক else if ব্লক ব্যবহার করা হয়। যেমন-
#include <stdio.h>
int main()
{
int n1 = 5, n2 = 7;
if (n1 == n2)
{
printf ("Numbers are equal.\n");
}
else if (n1 > n2)
{
printf ("n1 is greater than n2.\n");
}
else
{
printf ("n1 is smaller than n2.\n");
}
return 0;
}
প্রোগ্রামঃ 5.10
এক্ষেত্রে যে ব্লকের কন্ডিশনাল এক্সপ্রেশনটি সত্য শুধু সেই ব্লকটির কোড এক্সিকিউট হবে, অন্য কোনো ব্লকের কোড এক্সিকিউট হবে না। আর যদি কোনো ব্লকের শর্তই সত্য না হয়, তাহলে, সবশেষের else ব্লকের কোড এক্সিকিউট হবে।
উপরের প্রোগ্রামটির যদি ফ্লোচার্ট তৈরী করা হয়, তাহলে সেটি হবে চিত্র ৫.৮-এর মত।

এখন আরেকটি উদাহরণ দেখানো হবে।
উদাহরণ ৭
ধরা যাক, কোনো পরীক্ষায় একজন শিক্ষার্থীর প্রাপ্ত নম্বর ইনপুট নেওয়া হবে। এই নম্বরের উপর ভিত্তি করে এই বিষয়ের লেটার গ্রেড আউটপুট দেখানো হবে।
#include <stdio.h>
int main()
{
int marks;
scanf ("%d", &marks);
if (marks >= 80) {
printf ("Your grade is A+\n");
}
else if (marks >= 70) {
printf ("Your grade is A\n");
}
else if (marks >= 60) {
printf ("Your grade is A-\n");
}
else if (marks >= 50) {
printf ("Your grade is B\n");
}
else if (marks >= 40) {
printf ("Your grade is C\n");
}
else if (marks >= 33) {
printf ("Your grade is D\n");
}
else {
printf ("Your grade is F\n");
}
return 0;
}
এভাবে অসংখ্য if, else if যখন পরপর থাকে, তখন কোনো একটি শর্ত যদি সত্য হয়, তখন বাকি else if গুলোর শর্ত আর পরীক্ষা করা হয় না। যেমন- ইনপুট যদি হয় 75, তখন প্রথমে marks>=80 শর্তটি পরীক্ষা করা হবে। শর্তটি মিথ্যা, তাই পরবর্তী শর্ত (marks >= 70) পরীক্ষা করা হবে। এটি সত্য। তাই এই ব্লকের ভেতরের কাজ শুরু হয়ে যাবে। এক্ষেত্রে printf() স্টেটমেন্টটি এক্সিকিউট হবে। তারপরে আর কোনো else if ব্লকের শর্ত পরীক্ষা করা হবে না।
নিজে করি
উপরের প্রোগ্রামে নিচের সংখ্যা ইনপুট দেওয়া হলে কী আউটপুট পাওয়া যাবে তা নির্ণয় করিঃ
ক) 98
খ) 80
গ) 79
ঘ) 64
ঙ) 37
চ) 23
ছ) -20