10/3 এর ফলাফল 3 হবে, 3.33 নয়। কিন্তু যদি একটি Operand Float হয় তবে ফলাফল Float হবে। যেমন 10.0/3 এর ফলাফল হবে 3.333333।#include <stdio.h>
int main() {
int a = 10, b = 3;
printf("Sum: %d\n", a + b); // 13
printf("Difference: %d\n", a - b); // 7
printf("Product: %d\n", a * b); // 30
printf("Quotient: %d\n", a / b); // 3 (Integer Division)
printf("Remainder: %d\n", a % b); // 1
float x = 10.0, y = 3.0;
printf("Float Division: %.2f\n", x / y); // 3.33
return 0;
}
a/b) এর ফলাফল 3 হয়েছে, কিন্তু Float Division (x/y) এর ফলাফল 3.33 হয়েছে। Modulus Operator শুধুমাত্র Integer-এর জন্য কাজ করে, তাই x % y লিখলে Compiler Error হবে।5 == 5 → 1 (True)5 == 3 → 0 (False)5 != 3 → 1 (True)5 != 5 → 0 (False)7 > 3 → 1 (True)3 > 7 → 0 (False)3 < 7 → 1 (True)7 < 3 → 0 (False)5 >= 5 → 1 (True)3 >= 5 → 0 (False)3 <= 5 → 1 (True)7 <= 5 → 0 (False)1 (True) অথবা 0 (False)। C Language-তে কোনো শূন্য নয় এমন Value-কে True ধরা হয় এবং শূন্যকে False ধরা হয়। Relational Operator সাধারণত Conditional Statement (if-else) এবং Loop (for, while) তে ব্যবহৃত হয়।a + b > c Expression-এ প্রথমে a+b যোগ হবে, তারপর ফলাফল c-এর সাথে তুলনা করা হবে।#include <stdio.h>
int main() {
int a = 10, b = 5;
printf("a == b: %d\n", a == b); // 0 (False)
printf("a != b: %d\n", a != b); // 1 (True)
printf("a > b: %d\n", a > b); // 1 (True)
printf("a < b: %d\n", a < b); // 0 (False)
printf("a >= b: %d\n", a >= b); // 1 (True)
printf("a <= b: %d\n", a <= b); // 0 (False)
// Relational + Arithmetic একসাথে
printf("a + b > 12: %d\n", a + b > 12); // 1 (True) কারণ 15 > 12
return 0;
}
a + b > 12 Expression-এ দেখা যাচ্ছে যে Arithmetic Operator (+) এর Precedence Relational Operator (>) এর চেয়ে বেশি, তাই প্রথমে a+b = 15 হিসাব হয়েছে, তারপর 15 > 12 তুলনা করে 1 (True) রিটার্ন হয়েছে।(a > 0) && (b > 0)(a > 0) || (b > 0)!(a > b) — যদি a > b True হয়, তবে !(a > b) হবে False। এটি সাধারণত কোনো Condition-কে Negate করতে ব্যবহৃত হয়।#include <stdio.h>
int main() {
int a = 10, b = 5, c = 0;
// AND Operator
if (a > 0 && b > 0)
printf("Both positive\n"); // Print হবে
// OR Operator
if (a > 0 || c > 0)
printf("At least one positive\n"); // Print হবে
// NOT Operator
if (!(a == b))
printf("a is not equal to b\n"); // Print হবে
// Short-Circuit Evaluation উদাহরণ
if (c != 0 && a/c > 2) // এখানে a/c Execute হবে না
printf("Safe division\n");
return 0;
}
c != 0 && a/c > 2 Expression-এ যেহেতু c = 0, তাই c != 0 False। AND Operator-এর Short-Circuit বৈশিষ্ট্য অনুযায়ী প্রথম Condition False হলে দ্বিতীয় Condition (a/c > 2) Check করা হয় না। ফলে a/c (যা Division by Zero হতো) Execute হয় না এবং Program Crash হয় না। এটি Logical Operator-এর একটি অত্যন্ত গুরুত্বপূর্ণ ব্যবহার।a = a + 5; এর পরিবর্তে a += 5; লিখলে একই কাজ হয় কিন্তু কোড ছোট হয়। সব Compound Assignment Operator মূল Variable-এর উপর Operation করে ফলাফল একই Variable-এ Store করে।a = 5; b = ++a;a = 5; b = a++;#include <stdio.h>
int main() {
int a = 5, b = 5;
int x = ++a; // Pre: a=6, x=6
int y = b++; // Post: y=5, b=6
printf("x = %d, a = %d\n", x, a); // x=6, a=6
printf("y = %d, b = %d\n", y, b); // y=5, b=6
// Compound Assignment
int c = 10;
c += 5; // c = 15
c -= 3; // c = 12
c *= 2; // c = 24
c /= 4; // c = 6
c %= 4; // c = 2
printf("Final c = %d\n", c);
return 0;
}
x = ++a এর ক্ষেত্রে প্রথমে a-এর Value ১ বেড়ে 6 হয়েছে, তারপর সেই Value x-এ Assign হয়েছে। কিন্তু y = b++ এর ক্ষেত্রে প্রথমে b-এর মূল Value 5 y-এ Assign হয়েছে, তারপর b-এর Value ১ বেড়ে 6 হয়েছে। এই পার্থক্যটি Loop এবং Array Manipulation-এ বিশেষভাবে গুরুত্বপূর্ণ।condition ? expression1 : expression2;#include <stdio.h>
int main() {
int a = 10, b = 5;
int max;
// Conditional Operator ব্যবহার
max = (a > b) ? a : b;
printf("Maximum = %d\n", max); // Maximum = 10
// সরাসরি printf-এ ব্যবহার
printf("%d is %s\n", a, (a > 0) ? "positive" : "negative");
// Nested Conditional Operator
int x = 0;
char sign = (x > 0) ? 'P' : (x < 0) ? 'N' : 'Z';
printf("Sign: %c\n", sign); // Sign: Z
// Odd or Even check
int num = 7;
printf("%d is %s\n", num, (num % 2 == 0) ? "Even" : "Odd");
return 0;
}
max = (a > b) ? a : b; — এখানে যদি a > b True হয় তবে max-এ a-এর Value Assign হবে, নাহলে b-এর Value Assign হবে। দ্বিতীয় উদাহরণে সরাসরি printf-এর মধ্যে Conditional Operator ব্যবহার করা হয়েছে। তৃতীয় উদাহরণে Nested Conditional Operator দেখানো হয়েছে — একাধিক Condition Check করার জন্য একটি Conditional Operator-এর ভেতরে আরেকটি Conditional Operator ব্যবহার করা যায়।if (a > b)
max = a;
else
max = b;
max = (a > b) ? a : b;
#include <stdio.h>
int main() {
// Comma Operator ব্যবহার
int a, b;
a = (b = 5, b + 3, b * 2); // a = 10
printf("a = %d, b = %d\n", a, b);
// for Loop-এ Comma Operator
for (int i = 0, j = 10; i < j; i++, j--)
printf("%d %d\n", i, j);
return 0;
}
a = (b = 5, b + 3, b * 2); Expression-এ Comma Operator বাম থেকে ডানে Evaluate হয়েছে। প্রথমে b = 5 হয়েছে, তারপর b + 3 (যা 8) Evaluate হয়েছে কিন্তু Value ব্যবহার করা হয়নি, শেষে b * 2 (যা 10) Evaluate হয়েছে এবং সেই Value a-এ Assign হয়েছে। for Loop-এও Comma Operator ব্যবহার করা হয়েছে একাধিক Variable Initialize এবং Update করার জন্য।#include <stdio.h>
int main() {
int a = 5, b = 3, c = 2;
// Precedence উদাহরণ
int x = a + b * c; // 5 + (3*2) = 11 (* আগে)
int y = (a + b) * c; // (5+3) * 2 = 16 () আগে
int z = a == b + c; // 5 == (3+2) → 5 == 5 → 1 (+ আগে)
printf("x = %d\n", x); // 11
printf("y = %d\n", y); // 16
printf("z = %d\n", z); // 1
// Associativity উদাহরণ
int p = 10, q = 5, r = 2;
int m = p - q - r; // (10-5)-2 = 3 (Left to Right)
int n = p = q = r; // p=(q=(r=2)) → সব = 2 (Right to Left)
printf("m = %d\n", m); // 3
printf("n = %d, p = %d, q = %d\n", n, p, q); // 2, 2, 2
return 0;
}
a + b * c Expression-এ * Operator-এর Precedence + এর চেয়ে বেশি, তাই প্রথমে b*c হয়েছে। কিন্তু (a+b)*c Expression-এ Parenthesis ব্যবহার করার ফলে প্রথমে a+b হয়েছে। Associativity-এর উদাহরণে p - q - r Left to Right Associate করে অর্থাৎ (p-q)-r, আর p = q = r Right to Left Associate করে অর্থাৎ p = (q = r)।(data_type) expression;#include <stdio.h>
int main() {
// Implicit Type Conversion
int a = 10;
float b = 3.5;
float result1 = a + b; // a automatically float-এ convert
printf("Implicit: %.2f\n", result1); // 13.50
// Integer Division সমস্যা
int x = 10, y = 3;
float div1 = x / y; // 3.00 (ভুল! আগে int division, পরে float)
float div2 = (float)x / y; // 3.33 (সঠিক! Type Casting)
printf("Without cast: %.2f\n", div1);
printf("With cast: %.2f\n", div2);
// Explicit Type Casting
double d = 9.87;
int i = (int)d; // d কে int-এ convert
printf("Casted: %d\n", i); // 9 (দশমিক অংশ বাদ)
char c = 'A';
int ascii = (int)c; // char to int
printf("ASCII of %c = %d\n", c, ascii); // 65
return 0;
}
float div1 = x / y; Expression-এ প্রথমে Integer Division হয়েছে (10/3 = 3), তারপর সেই Integer Value Float-এ Convert হয়েছে, তাই ফলাফল 3.00। কিন্তু float div2 = (float)x / y; Expression-এ Type Casting-এর ফলে প্রথমে x Float-এ Convert হয়েছে, তারপর Float Division হয়েছে, তাই সঠিক ফলাফল 3.33 পাওয়া গেছে। এটি Type Casting-এর একটি অত্যন্ত গুরুত্বপূর্ণ ব্যবহার।int + float → float(float)a / b<stdio.h> Header File-এ Define করা আছে।#include <stdio.h>
int main() {
char ch;
printf("Enter a character: ");
ch = getchar(); // একটি character পড়া
printf("You entered: ");
putchar(ch); // একটি character লেখা
putchar('\n'); // Newline
// getchar() রিটার্ন Value দেখা
int val = getchar();
printf("ASCII Value: %d\n", val);
return 0;
}
#include <stdio.h>
int main() {
printf("Hello\nWorld\n"); // \n ব্যবহার
printf("Name:\tRahul\n"); // \t ব্যবহার
printf("Path: C:\\folder\n"); // \\ ব্যবহার
printf("He said \"Hi\"\n"); // \" ব্যবহার
printf("It\'s okay\n"); // \' ব্যবহার
printf("Line1\rLine2\n"); // \r ব্যবহার
printf("Back\bspace\n"); // \b ব্যবহার
printf("\a"); // \a - Beep Sound
return 0;
}
\n নতুন লাইনে নিয়ে যায়, \t Tab Space দেয়, \\ Backslash Print করে, \" Double Quote Print করে, \' Single Quote Print করে, \r লাইনের শুরুতে ফিরিয়ে আনে, \b একটি Character পেছনে সরায় এবং \a Beep Sound তৈরি করে।<stdio.h> Header File-এ Define করা আছে। Format Specifier ব্যবহার করে বিভিন্ন Data Type-এর Variable Handle করা যায়।#include <stdio.h>
int main() {
// printf() ব্যবহার
int age = 20;
float salary = 25000.50;
char grade = 'A';
char name[] = "Rahul";
printf("Name: %s\n", name);
printf("Age: %d years\n", age);
printf("Salary: Rs. %.2f\n", salary); // 2 decimal places
printf("Grade: %c\n", grade);
// Width এবং Precision
printf("%10d\n", age); // 10 character width
printf("%05d\n", age); // 0 দিয়ে পূরণ
printf("%8.2f\n", salary); // width=8, 2 decimal
// scanf() ব্যবহার
int num;
float price;
printf("Enter number and price: ");
scanf("%d %f", &num, &price); // & (Address) জরুরি
printf("You entered: %d and %.2f\n", num, price);
// Character Input
char ch;
printf("Enter a character: ");
scanf(" %c", &ch); // Space before %c (newline skip)
printf("Character: %c\n", ch);
return 0;
}
%.2f ব্যবহার করে Float Value-এর পরে কতটি Decimal Place দেখানো হবে তা নিয়ন্ত্রণ করা যায়। %10d ব্যবহার করে Minimum Field Width নির্ধারণ করা যায়। %05d ব্যবহার করলে সংখ্যাটি ৫ Digit-এর হবে এবং প্রয়োজনে বামদিকে ০ দিয়ে পূরণ হবে। scanf()-তে Variable-এর Address (&) ব্যবহার করা জরুরি — যেমন &num, &price। Character Input-এর ক্ষেত্রে scanf(" %c", &ch) লিখতে হয় (Space before %c) কারণ আগের Input-এর Newline Character Skip করা যায়।printf("Age: %d", age);%.2f%10dscanf("%d", &age);scanf("%d %f", &a, &b);scanf(" %c", &ch);C Programming-এ Operator, Type Conversion, Character I/O, Escape Sequence এবং Formatted I/O — এই সব Topic মিলিয়ে একটি শক্তিশালী ভিত্তি তৈরি হয়। এই বিষয়গুলো ভালোভাবে আয়ত্ত করলে Advanced C Programming শেখা অনেক সহজ হয়ে যায়।