অপারেটর ও এক্সপ্রেশন: গাণিতিক ও যৌক্তিক অপারেশন

সি প্রোগ্রামিং অপারেটর: অ্যারিথমেটিক, রিলেশনাল, লজিক্যাল, অ্যাসাইনমেন্ট ও ইউনারি অপারেটর। প্রিফিক্স ও পোস্টফিক্স ইনক্রিমেন্ট এবং অপারেটর প্রিসিডেন্স।

শেখা শুরু করুন

অপারেটর ও এক্সপ্রেশন: গাণিতিক ও যৌক্তিক অপারেশন

  1. অপারেটর ও এক্সপ্রেশন: গাণিতিক ও যৌক্তিক অপারেশন
  2. গণিত বনাম সি প্রোগ্রামিং: একটি ধাঁধাঁ
  3. অপারেটর ও অপারেন্ড কী?
  4. অপারেটরের প্রকারভেদ
  5. অ্যারিথমেটিক অপারেটর (Arithmetic Operators)
  6. ভাগের নিয়ম: পূর্ণসংখ্যা বনাম ভগ্নাংশ
  7. মডুলাস বা ভাগশেষ অপারেটর (%)
  8. রিলেশনাল অপারেটর (Relational Operators)
  9. সতর্কতা: '=' এবং '==' এক নয়!
  10. লজিক্যাল অপারেটর (Logical Operators)
  11. লজিক্যাল AND (&&) ও OR (||) এর ব্যবহার
  12. অ্যাসাইনমেন্ট অপারেটর ও শর্টহ্যান্ড
  13. ইনক্রিমেন্ট (++) ও ডিক্রিমেন্ট (--) অপারেটর
  14. প্রিফিক্স (++a) বনাম পোস্টফিক্স (a++)
  15. কন্ডিশনাল বা টার্নারি অপারেটর (? :)
  16. অপারেটর প্রিসিডেন্স (কার কাজ আগে?)
  17. সারসংক্ষেপ

অপারেটর ও এক্সপ্রেশন: গাণিতিক ও যৌক্তিক অপারেশন

এই লেকচার শেষে আমরা-

১। সি ভাষার বিভিন্ন ধরনের অপারেটর ও তাদের কাজ ব্যাখ্যা করতে পারব।
২। গাণিতিক অপারেশন বিশেষ করে ইনটিজার ভাগ ও ভাগশেষ নির্ণয় করতে পারব।
৩। রিলেশনাল ও লজিক্যাল অপারেটর ব্যবহার করে শর্ত যাচাই করতে পারব।
৪। ইউনারি অপারেটর (ইনক্রিমেন্ট ও ডিক্রিমেন্ট) এর প্রিফিক্স ও পোস্টফিক্স ব্যবহার সঠিকভাবে প্রয়োগ করতে পারব।

সবাইকে স্বাগতম আজকের লেকচারে। আজ আমরা সি প্রোগ্রামিংয়ের অত্যন্ত গুরুত্বপূর্ণ একটি বিষয় নিয়ে আলোচনা করব, যা হলো অপারেটর। প্রোগ্রামিংয়ের ভিতে যদি কোনো ফাটল থাকে, তবে দেখবে এই অপারেটর অংশটাতেই সেটা লুকিয়ে আছে। এই লেকচার শেষে আমরা- ১। সি ভাষার বিভিন্ন ধরনের অপারেটর ও তাদের কাজ ব্যাখ্যা করতে পারব, ২। গাণিতিক অপারেশন বিশেষ করে ইনটিজার ভাগ ও ভাগশেষ নির্ণয় করতে পারব, ৩। রিলেশনাল ও লজিক্যাল অপারেটর ব্যবহার করে শর্ত যাচাই করতে পারব, এবং ৪। ইউনারি অপারেটর এর প্রিফিক্স ও পোস্টফিক্স ব্যবহারের প্যাঁচগুলো সমাধান করতে পারব।

গণিত বনাম সি প্রোগ্রামিং: একটি ধাঁধাঁ

প্রশ্ন: ৫ কে ২ দিয়ে ভাগ করলে কত হয়?

সাধারণ গণিত:
$5 \div 2 = 2.5$

সি প্রোগ্রামিং (Integer Division):
5 / 2 = ?

উত্তর: 2 (কিন্তু কেন?)

দশমিক অংশ .5 হারিয়ে গেছে। একে বলে Integer Division

লেকচারের শুরুতে তোমাদের একটা ছোট্ট প্রশ্ন করি। ছোটবেলার সাধারণ অঙ্কের কথা ভাবো তো। ৫ কে ২ দিয়ে ভাগ করলে কত হয়? তোমরা নিশ্চয়ই বলবে ২.৫ বা আড়াই। কিন্তু জানো কি, সি প্রোগ্রামিংয়ে যদি তুমি দুটি পূর্ণসংখ্যাকে ভাগ করো, যেমন ৫ ভাগ ২, উত্তর কিন্তু ২.৫ আসবে না, আসবে শুধু ২! দশমিকের পরের অংশটি হারিয়ে যাবে। কেন এমন হয়? কম্পিউটার কি ভুল করছে? না! এটাই হলো অপারেটরের খেলা। চলো, আজকের ক্লাসে এই রহস্যগুলোই আমরা ভেদ করব।

অপারেটর ও অপারেন্ড কী?

অপারেটর (Operator):
বিশেষ চিহ্ন যা গাণিতিক বা যৌক্তিক কাজ সম্পন্ন করে। (যেমন: +, -, *, /)

অপারেন্ড (Operand):
যার ওপর অপারেটর কাজ করে।

উদাহরণ: a + b
* + হলো Operator
* ab হলো Operand

শুরুতেই আমাদের টার্মিনোলজি বা পরিভাষাগুলো ঠিক করে নিতে হবে। স্ক্রিনে ছবিটা দেখো। 'a + b'। এখানে যোগ করার কাজটি যে চিহ্নটি করছে, অর্থাৎ প্লাস সাইন, তাকে আমরা বলি 'অপারেটর'। আর এই অপারেটর যাদের ওপর কাজ করছে, অর্থাৎ a এবং b, এদের বলা হয় 'অপারেন্ড'। অপারেটর হলো সেই মিস্ত্রি যে কাজ করে, আর অপারেন্ড হলো সেই কাঁচামাল যার ওপর কাজ করা হয়।

অপারেটরের প্রকারভেদ

সি ভাষায় ব্যবহৃত প্রধান অপারেটরসমূহ:

  1. অ্যারিথমেটিক (Arithmetic): +, -, *, /, %
  2. রিলেশনাল (Relational): >, <, >=, <=, ==, !=
  3. লজিক্যাল (Logical): &&, ||, !
  4. অ্যাসাইনমেন্ট (Assignment): =, +=, -=
  5. ইনক্রিমেন্ট/ডিক্রিমেন্ট (Unary): ++, --
  6. কন্ডিশনাল (Conditional): ? :

সি ভাষায় অনেক ধরনের অপারেটর আছে। তবে আমাদের সিলেবাস এবং কাজের জন্য প্রধানত এই কয়েক ধরনের অপারেটর জানা প্রয়োজন। ১। অ্যারিথমেটিক বা গাণিতিক কাজের জন্য। ২। রিলেশনাল বা তুলনা করার জন্য। ৩। লজিক্যাল বা যুক্তি মেলানোর জন্য। এছাড়াও অ্যাসাইনমেন্ট, ইনক্রিমেন্ট-ডিক্রিমেন্ট এবং কন্ডিশনাল অপারেটর নিয়ে আমরা ধাপে ধাপে আলোচনা করব। ঘাবড়ানোর কিছু নেই, আমরা এক এক করে সব শিখব।

অ্যারিথমেটিক অপারেটর (Arithmetic Operators)

গাণিতিক কাজের জন্য ব্যবহৃত হয়:

  • + (যোগ)
  • - (বিয়োগ)
  • * (গুণ) $\rightarrow$ 'x' নয়, * ব্যবহার হয়।
  • / (ভাগ)
  • % (মডুলাস বা ভাগশেষ)

প্রথমে আসি অ্যারিথমেটিক অপারেটরে। যোগ, বিয়োগ তোমরা জানো। গুণের ক্ষেত্রে খেয়াল রাখবে, আমরা ছোটবেলায় যে 'x' চিহ্ন দিতাম, কম্পিউটারে সেটা ব্যবহার হয় না। এখানে ব্যবহার হয় অ্যাস্টারিস্ক বা স্টার (*) চিহ্ন। আর ভাগের জন্য ফরওয়ার্ড স্ল্যাশ (/) এবং ভাগশেষের জন্য পার্সেন্টেজ (%) চিহ্ন, যাকে আমরা প্রোগ্রামিংয়ে বলি মডুলাস। মডুলাস নিয়ে আমরা একটু পরেই বিস্তারিত জানব।

ভাগের নিয়ম: পূর্ণসংখ্যা বনাম ভগ্নাংশ

Integer Division (পূর্ণসংখ্যার ভাগ):
উভয় অপারেন্ড পূর্ণসংখ্যা হলে ফলাফল পূর্ণসংখ্যা হবে। দশমিক অংশ বাদ যাবে।
* 5 / 2 = 2
* 10 / 3 = 3

Real/Float Division:
অন্তত একটি অপারেন্ড ফ্লোটিং পয়েন্ট হলে ফলাফল দশমিক হবে।
* 5.0 / 2 = 2.5
* 5 / 2.0 = 2.5

এই স্লাইডটা খুবই গুরুত্বপূর্ণ, ভিডিও পজ করে এটা ভালো করে দেখো। শুরুতে যে ধাঁধাঁ দিয়েছিলাম, তার উত্তর এখানে। সি ভাষায় নিয়ম হলো, যদি ভাগের ওপরের সংখ্যা (লব) এবং নিচের সংখ্যা (হর) দুটোই পূর্ণসংখ্যা বা ইন্টিজার হয়, তবে ফলাফলও ইন্টিজার হবে। অর্থাৎ 5 বাই 2 দিলে কম্পিউটার ২.৫ এর .৫ অংশটি ফেলে দিয়ে শুধু ২ রাখবে। কিন্তু যদি তুমি সঠিক দশমিক মান চাও, তবে যেকোনো একটি সংখ্যাকে দশমিকে লিখতে হবে। যেমন 5.0 বাই 2 লিখলে তখন সঠিক উত্তর 2.5 পাবে।

মডুলাস বা ভাগশেষ অপারেটর (%)

কাজ: ভাগশেষ নির্ণয় করা।
শর্ত: শুধুমাত্র পূর্ণসংখ্যার (Integer) সাথে কাজ করে।

উদাহরণ:
* 10 % 3 = 1 (১০ কে ৩ দিয়ে ভাগ করলে ভাগশেষ ১)
* 10 % 2 = 0 (ভাগশেষ নেই)

ব্যবহার:
* জোড়/বিজোড় সংখ্যা নির্ণয় (num % 2 == 0)
* লিপ ইয়ার নির্ণয়

এবার আসি মডুলাস অপারেটরে, যা '%' চিহ্ন দিয়ে প্রকাশ করা হয়। এটা কিন্তু শতকরা বের করে না, এটা ভাগশেষ বের করে। যেমন ১০ কে ৩ দিয়ে ভাগ করলে ভাগফল ৩ হয় আর ভাগশেষ থাকে ১। তাই ১০ মডুলাস ৩ এর উত্তর হবে ১। মনে রাখবে, এই অপারেটরটি ভগ্নাংশ বা ফ্লোটিং পয়েন্ট নম্বরের সাথে কাজ করে না, শুধু পূর্ণসংখ্যার সাথে কাজ করে। আমরা কোনো সংখ্যা জোড় না বিজোড় সেটা বের করতে এই অপারেটরটি খুব বেশি ব্যবহার করি।

রিলেশনাল অপারেটর (Relational Operators)

কাজ: দুটি সংখ্যার মধ্যে তুলনা করা।
ফলাফল: সত্য (True/1) অথবা মিথ্যা (False/0)।

চিহ্নসমূহ:
* > (বড়?)
* < (ছোট?)
* >= (বড় বা সমান?)
* <= (ছোট বা সমান?)
* == (সমান?)
* != (সমান নয়?)

কম্পিউটারকে সিদ্ধান্ত নিতে হলে তুলনা করতে জানতে হয়। রিলেশনাল অপারেটর দিয়ে আমরা এই তুলনা করি। যেমন ৫ কি ৩ এর চেয়ে বড়? উত্তর হবে হ্যাঁ বা সত্য। সি ভাষায় সত্যকে ১ এবং মিথ্যাকে ০ দিয়ে প্রকাশ করা হয়। এখানে চিহ্নগুলো খেয়াল করো। গ্রেটার দ্যান, লেস দ্যান। আর বিশেষ করে খেয়াল করো 'সমান সমান' চিহ্নটি। গণিতে আমরা একটা সমান চিহ্ন (=) দেই, কিন্তু সি ভাষায় তুলনা করতে ডাবল সমান চিহ্ন (==) ব্যবহার করতে হয়।

সতর্কতা: '=' এবং '==' এক নয়!

অ্যাসাইনমেন্ট (=):
* a = 5
* ৫ মানটি a এর মধ্যে রাখা হলো।

রিলেশনাল (==):
* a == 5
* a এর মান কি ৫ এর সমান? (প্রশ্ন করা বা তুলনা করা)

প্রোগ্রামিংয়ে নতুনরা সবচেয়ে বেশি যে ভুলটি করে তা হলো এই দুটি চিহ্নের ব্যবহার। ভালো করে মনে গেঁথে নাও: একটা সমান চিহ্ন (=) মানে হলো কোনো মান ভেরিয়েবলে রাখা বা অ্যাসাইন করা। আর দুটো সমান চিহ্ন (==) মানে হলো তুলনা করা। যদি তুমি লিখো 'a equal 5', তার মানে a এর মান ৫ হয়ে গেল। আর যদি লিখো 'a double equal 5', তার মানে তুমি চেক করছো a এর মান ৫ কিনা।

লজিক্যাল অপারেটর (Logical Operators)

কাজ: একাধিক শর্তকে যুক্ত করা।

প্রকারভেদ:
১. && (AND) $\rightarrow$ উভয় শর্ত সত্য হতে হবে।
২. || (OR) $\rightarrow$ যেকোনো একটি শর্ত সত্য হলেই হবে।
৩. ! (NOT) $\rightarrow$ সত্যকে মিথ্যা, মিথ্যাকে সত্য করে।

অনেক সময় আমাদের একাধিক শর্ত একসাথে চেক করতে হয়। যেমন, ধরো একটি চাকরিতে আবেদন করতে হলে বয়স ১৮ এর বেশি হতে হবে 'এবং' গ্র্যাজুয়েট হতে হবে। এই 'এবং' বা AND এর কাজ করে `&&` অপারেটর। আবার ধরো, টাকা দিতে পারো 'অথবা' কার্ড দিতে পারো - এই 'অথবা' বা OR এর কাজ করে `||` অপারেটর। আর না-বোধক বা উল্টো কাজের জন্য আছে NOT অপারেটর `!`।

লজিক্যাল AND (&&) ও OR (||) এর ব্যবহার

AND (&&):
* (5 > 3) && (2 < 4)
* True && True = True (1)
* সব শর্ত সত্য হতে হয়।

OR (||):
* (5 > 3) || (2 > 4)
* True || False = True (1)
* অন্তত একটি সত্য হলেই হয়।

একটা উদাহরণের মাধ্যমে দেখি। ধরো প্রথম শর্ত: ৫ কি ৩ এর চেয়ে বড়? সত্য। দ্বিতীয় শর্ত: ২ কি ৪ এর চেয়ে ছোট? সত্য। মাঝখানে যদি AND (&&) থাকে, তবে পুরো ফলাফল সত্য। কারণ AND এর দাবি হলো সব পক্ষকেই সত্য হতে হবে। কিন্তু OR (||) একটু ছাড় দেয়। OR বলে, যেকোনো একটা পক্ষ সত্য হলেই আমি খুশি, ফলাফল সত্য দেব। ছবিতে দেখো ট্রুথ টেবিলটা সহজ করে দেওয়া আছে।

অ্যাসাইনমেন্ট অপারেটর ও শর্টহ্যান্ড

সাধারণ অ্যাসাইনমেন্ট:
a = 10;

কম্পাউন্ড/শর্টহ্যান্ড অ্যাসাইনমেন্ট:
* a += 5 $\rightarrow$ a = a + 5
* a -= 2 $\rightarrow$ a = a - 2
* a *= 3 $\rightarrow$ a = a * 3
* a /= 2 $\rightarrow$ a = a / 2
* a %= 2 $\rightarrow$ a = a % 2

প্রোগ্রামাররা একটু অলস হয়, তারা কোড ছোট করতে পছন্দ করে। তাই `a = a + 5` না লিখে তারা সংক্ষেপে লেখে `a += 5`। এগুলোর অর্থ হুবহু এক। যোগ, বিয়োগ, গুণ, ভাগ সবগুলোর সাথেই সমান চিহ্ন লাগিয়ে এমন শর্টকাট বা কম্পাউন্ড অ্যাসাইনমেন্ট করা যায়। এটা দেখে ঘাবড়ে যেও না, এটা জাস্ট সময় বাঁচানোর উপায়।

ইনক্রিমেন্ট (++) ও ডিক্রিমেন্ট (--) অপারেটর

Unary Operator: একটি মাত্র অপারেন্ড নিয়ে কাজ করে।

Increment (++):
মান ১ করে বাড়ায়।
a++ বা ++a মানে a = a + 1

Decrement (--):
মান ১ করে কমায়।
a-- বা --a মানে a = a - 1

এখন আমরা খুব ইন্টারেস্টিং একটা অপারেটর দেখব যা শুধু একটি ভেরিয়েবল নিয়ে কাজ করে, তাই একে ইউনারি অপারেটর বলে। সেটা হলো প্লাস-প্লাস (++) এবং মাইনাস-মাইনাস (--)। `a++` লেখা মানে হলো a এর মান ১ বাড়িয়ে দেওয়া। ১০ থাকলে ১১ হবে। একইভাবে `a--` দিলে মান ১ কমে যাবে। লুপ বা কাউন্টিংয়ের ক্ষেত্রে এটা প্রচুর ব্যবহার হয়।

প্রিফিক্স (++a) বনাম পোস্টফিক্স (a++)

Prefix (++a):
আগে বাড়াও, পরে কাজ করো। (Change then Use)

Postfix (a++):
আগে কাজ করো, পরে বাড়াও। (Use then Change)

উদাহরণ (ধরি a = 10):
b = ++a; // a হবে 11, b হবে 11
b = a++; // b হবে 10, পরে a হবে 11

এখানেই অনেকে ভুল করে, খুব মনোযোগ দাও। `++` চলকের আগেও বসতে পারে (প্রিফিক্স), পরেও বসতে পারে (পোস্টফিক্স)। কাজ কি এক? না! প্রিফিক্স (`++a`) মানে হলো 'আগে বাড়াও, তারপর ব্যবহার করো'। অর্থাৎ সাথে সাথেই মান বেড়ে যাবে। আর পোস্টফিক্স (`a++`) মানে হলো 'আগে ব্যবহার করো, পরে বাড়াও'। অর্থাৎ বর্তমান লাইনে পুরোনো মানটিই ব্যবহৃত হবে, পরের লাইনে গিয়ে মানটি বাড়বে।

কন্ডিশনাল বা টার্নারি অপারেটর (? :)

গঠন:
Condition ? Value_if_True : Value_if_False;

উদাহরণ:
max = (10 > 5) ? 10 : 5;

ব্যাখ্যা:
১০ কি ৫ এর চেয়ে বড়?
* হ্যাঁ $\rightarrow$ তাহলে ১০ বসবে।
* না $\rightarrow$ তাহলে ৫ বসবে।

ছোটখাটো শর্তের জন্য আমরা টার্নারি অপারেটর ব্যবহার করি। এতে তিনটি অংশ থাকে বলে এর নাম টার্নারি। প্রথমে একটা প্রশ্নবোধক চিহ্নের আগে শর্ত থাকে। শর্ত সত্য হলে কোলনের বাম পাশের মানটি নেওয়া হয়, আর মিথ্যা হলে ডান পাশেরটি। যেমন এখানে চেক করা হচ্ছে ১০ কি ৫ এর বড়? যেহেতু সত্য, তাই max এর মান হবে ১০। এটা if-else এর একটা শর্টকাট রূপ।

অপারেটর প্রিসিডেন্স (কার কাজ আগে?)

সরল অংকের BODMAS এর মতো সি ভাষায়ও প্রায়োরিটি আছে:

  1. প্রথম বন্ধনী ( )
  2. ইউনারি ++, --, !
  3. গুণ, ভাগ, মডুলাস *, /, %
  4. যোগ, বিয়োগ +, -
  5. রিলেশনাল >, <, ==
  6. লজিক্যাল &&, ||
  7. অ্যাসাইনমেন্ট =

এক লাইনে অনেকগুলো অপারেটর থাকলে কার কাজ আগে হবে? ছোটবেলার BODMAS নিয়ম মনে আছে? সি ভাষায়ও এমন নিয়ম আছে। চার্টে দেখো, সবার আগে ব্র্যাকেটের কাজ। তারপর ইনক্রিমেন্ট-ডিক্রিমেন্ট। এরপর গুণ-ভাগ। তারপর যোগ-বিয়োগ। শেষে রিলেশনাল ও লজিক্যাল এবং একদম শেষে অ্যাসাইনমেন্ট। তাই জটিল সমীকরণে ভুল এড়াতে ব্র্যাকেট ব্যবহার করা বুদ্ধিমানের কাজ।

সারসংক্ষেপ

আজ আমরা শিখলাম-

১। বিভিন্ন অপারেটরের (Arithmetic, Relational, Logical) কাজ।
২। পূর্ণসংখ্যার ভাগের নিয়ম (Integer Division)।
৩। মডুলাস (%) দিয়ে ভাগশেষ নির্ণয়।
৪। প্রিফিক্স ও পোস্টফিক্স ইনক্রিমেন্টের পার্থক্য।

পরের ক্লাসে: ইনপুট ও আউটপুট ফাংশন (scanf, printf)।

আজকে আমরা অনেক গুরুত্বপূর্ণ বিষয় কাভার করেছি। অপারেটর ছাড়া কোনো লজিকই দাঁড় করানো যায় না। বিশেষ করে ভাগের নিয়মটা আর ইনক্রিমেন্টের আগে-পরে ব্যবহারের নিয়মটা ভালো করে প্র্যাকটিস করবে। এগুলো বুঝলে প্রোগ্রামিং অনেক সহজ হয়ে যাবে। আগামী ক্লাসে আমরা দেখব কীভাবে ইউজার থেকে ইনপুট নেওয়া যায়। সে পর্যন্ত সবাই ভালো থেকো, ধন্যবাদ!

অপারেটর ও এক্সপ্রেশন: সি প্রোগ্রামিংয়ের গাণিতিক ভিত্তি ও প্রয়োগ

পড়তে প্রায় 10 মিনিট

সি প্রোগ্রামিং শেখার শুরুতে অনেকেই একটি সাধারণ গাণিতিক সমস্যা দেখে বিভ্রান্ত হয়: ৫ কে ২ দিয়ে ভাগ করলে উত্তর কেন ২.৫ না এসে ২ আসে? এটি কোনো ভুল নয়, বরং সি প্রোগ্রামিংয়ের অপারেটর (Operator) এবং ডেটা টাইপ (Data Type) এর একটি মৌলিক বৈশিষ্ট্য। প্রোগ্রামিংয়ে আমরা যখন কোনো গাণিতিক বা যৌক্তিক কাজ করি, তখন আমাদের নির্দিষ্ট কিছু চিহ্ন বা সিম্বল ব্যবহার করতে হয়। এই চিহ্নগুলোই হলো অপারেটর।

এইচএসসি আইসিটি এবং ভর্তি পরীক্ষার জন্য অপারেটর ও এক্সপ্রেশন অধ্যায়টি অত্যন্ত গুরুত্বপূর্ণ। এখান থেকে প্রতি বছরই এমসিকিউ (MCQ) এবং সৃজনশীল প্রশ্নে (CQ) উদ্দীপক থাকে। বিশেষ করে Increment/Decrement অপারেটর এবং Logical Operator-এর প্যাঁচানো প্রশ্নগুলো শিক্ষার্থীদের ভোগান্তি বাড়ায়। এই পাঠে আমরা অপারেটরের প্রতিটি খুঁটিনাটি বিষয়, বিশেষ করে পরীক্ষার জন্য জটিল টপিকগুলো সহজভাবে আলোচনা করব।

অপারেটর ও অপারেন্ড: প্রাথমিক ধারণা

প্রোগ্রামিংয়ে গাণিতিক কাজ করার জন্য দুটি জিনিসের প্রয়োজন হয়: ১. যার ওপর কাজ করা হবে (Data/Variable) এবং ২. যে কাজটি করবে (Symbol)।

সংজ্ঞা (Definition):
অপারেটর (Operator): অপারেটর হলো কতগুলো বিশেষ চিহ্ন বা সিম্বল (যেমন: +, -, *, /) যা কম্পাইলারকে নির্দিষ্ট গাণিতিক বা যৌক্তিক কাজ করার নির্দেশ দেয়।


অপারেন্ড (Operand): অপারেটর যার ওপর কাজ করে বা অপারেশন চালায়, তাকে অপারেন্ড বলে। যেমন: a + b এখানে + হলো অপারেটর এবং a, b হলো অপারেন্ড।


এক্সপ্রেশন (Expression): অপারেটর, অপারেন্ড এবং কনস্ট্যান্টের সমন্বয়ে গঠিত একটি বৈধ গাণিতিক বা যৌক্তিক বাক্য। যেমন: c = a + b - 5;

অপারেন্ডের সংখ্যার ওপর ভিত্তি করে অপারেটরকে প্রধানত তিন ভাগে ভাগ করা যায়:
১. ইউনারি (Unary): ১টি অপারেন্ড নিয়ে কাজ করে। (যেমন: ++, --, -)
২. বাইনারি (Binary): ২টি অপারেন্ড নিয়ে কাজ করে। (যেমন: +, -, *, /)
৩. টার্নারি (Ternary): ৩টি অপারেন্ড নিয়ে কাজ করে। (যেমন: ? :)

অ্যারিথমেটিক অপারেটর: পূর্ণসংখ্যা ও মডুলাসের সতর্কতা

সি ল্যাঙ্গুয়েজে সাধারণ যোগ, বিয়োগ, গুণ অনেকটা গণিতের মতোই। তবে ভাগ (/) এবং ভাগশেষ (%) নির্ণয়ের ক্ষেত্রে বিশেষ কিছু নিয়ম আছে যা এমসিকিউ-এর জন্য খুবই গুরুত্বপূর্ণ।

Integer vs Float Division and Modulus

ইন্টিজার ডিভিশন (Integer Division)

প্রোগ্রামিংয়ে দুটি পূর্ণসংখ্যা (Integer) ভাগ করলে ফলাফল সবসময় পূর্ণসংখ্যাই আসবে, দশমিক অংশ বাদ যাবে। একে ইন্টিজার ডিভিশন বলে।
- 5 / 2 এর ফলাফল 2 (২.৫ নয়)।
- 5.0 / 2 এর ফলাফল 2.5 (কারণ একটি সংখ্যা ফ্লোটিং পয়েন্ট)।

মডুলাস অপারেটর (%)

ভাগশেষ বা Remainder বের করার জন্য মডুলাস অপারেটর ব্যবহৃত হয়। এটি Mod নামেও পরিচিত।

$$ a \% b = a - (\frac{a}{b} \times b) $$
(যেখানে ভাগফল পূর্ণসংখ্যায় নেওয়া হয়)

গুরুত্বপূর্ণ (Important):
- মডুলাস অপারেটর (%) কখনোই ভগ্নাংশ বা float/double ডেটার সাথে ব্যবহার করা যায় না। করলে 'Compile Error' দেখাবে।
- মডুলাসের ফলাফলের চিহ্ন সবসময় লব (Numerator) বা প্রথম সংখ্যার চিহ্নের মতো হয়। ভাজকের (Denominator) চিহ্নের ওপর এটি নির্ভর করে না।

উদাহরণ (Example):
ধরি, আমাদের -১৩ কে ৫ দিয়ে ভাগশেষ বের করতে হবে।
কোড: -13 % 5
সমাধান: -১৩ কে ৫ দিয়ে ভাগ করলে ভাগফল -২।
অবশিষ্ট = $-13 - (5 \times -2) = -13 - (-10) = -3$।
সুতরাং, উত্তর: -3


কিন্তু, 13 % -5 হলে উত্তর হবে 3 (কারণ প্রথম সংখ্যা ১৩ পজিটিভ)।

রিলেশনাল ও লজিক্যাল অপারেটর: সত্য-মিথ্যার খেলা

রিলেশনাল অপারেটর দুটি মানের মধ্যে তুলনা করে এবং লজিক্যাল অপারেটর একাধিক শর্তকে যুক্ত করে। এদের ফলাফল সবসময় হয় 0 (মিথ্যা/False) অথবা 1 (সত্য/True)।

Truth Table and Short Circuit Logic

সংজ্ঞা (Definition):
রিলেশনাল অপারেটর: >, <, >=, <=, == (সমান), != (সমান নয়)।


লজিক্যাল অপারেটর: && (AND), || (OR), ! (NOT)।

শর্ট-সার্কিট লজিক (Short-circuit Evaluation)

এটি পরীক্ষার জন্য অত্যন্ত গুরুত্বপূর্ণ একটি কনসেপ্ট। সি কম্পাইলার লজিক্যাল এক্সপ্রেশন বাম থেকে ডানে চেক করে এবং চূড়ান্ত ফলাফল নিশ্চিত হওয়া মাত্রই বাকি অংশ চেক করা বন্ধ করে দেয়।

পরীক্ষার টিপস (Exam Tip):
১. AND (&&) এর ক্ষেত্রে: যদি প্রথম শর্ত মিথ্যা (False/0) হয়, তবে পুরো এক্সপ্রেশন মিথ্যা হবে। তাই কম্পাইলার দ্বিতীয় শর্ত আর চেক করে না।
২. OR (||) এর ক্ষেত্রে: যদি প্রথম শর্ত সত্য (True/1) হয়, তবে পুরো এক্সপ্রেশন সত্য হবে। তাই কম্পাইলার দ্বিতীয় শর্ত আর চেক করে না।

উদাহরণ (Example):

int x = 5;
if (x > 10 && x++) {
    // কিছু কোড
}
printf("%d", x);

ব্যাখ্যা: এখানে x > 10 মিথ্যা। যেহেতু && ব্যবহার করা হয়েছে এবং প্রথম অংশ মিথ্যা, তাই কম্পাইলার পরের অংশ x++ আর এক্সিকিউট করবে না। ফলে x-এর মান বাড়ব না, 5-ই থাকবে। এটিই শর্ট-সার্কিট লজিক।

অ্যাসাইনমেন্ট এবং ইনক্রিমেন্ট/ডিক্রিমেন্ট অপারেটর

প্রোগ্রামিংয়ে = এবং == এর মধ্যে আকাশ-পাতাল পার্থক্য। এছাড়াও ++a এবং a++ এর পার্থক্য বোঝা জরুরি।

= বনাম ==
বৈশিষ্ট্য = (Assignment) == (Relational)
কাজ ডান পাশের মান বাম পাশের ভেরিয়েবলে রাখে। দুটি মান সমান কি না তা যাচাই করে।
উদাহরণ a = 5; (a এর মান ৫ হলো) if (a == 5) (a এর মান ৫ কি না?)
প্রিফিক্স (Prefix) ও পোস্টফিক্স (Postfix) ইনক্রিমেন্ট

সংজ্ঞা (Definition):
Prefix (++a): "Change first, then use." আগে মান ১ বাড়বে, তারপর সেই বর্ধিত মান এক্সপ্রেশনে ব্যবহৃত হবে।


Postfix (a++): "Use first, then change." আগে বর্তমান মান এক্সপ্রেশনে ব্যবহৃত হবে, পরে মেমোরিতে মান ১ বাড়বে।

উদাহরণ (Worked Example):

int a = 10, y;
y = ++a; // এখানে a আগে বেড়ে ১১ হবে, তারপর y তে ১১ অ্যাসাইন হবে। (y=11, a=11)

বনাম

int a = 10, y;
y = a++; // এখানে a এর বর্তমান মান ১০ আগে y তে যাবে, পরে a বেড়ে ১১ হবে। (y=10, a=11)

বিটওয়াইজ অপারেটর (Bitwise Operators)

অনেক শিক্ষার্থী এই অংশটি এড়িয়ে যায়, কিন্তু এখান থেকে সৃজনশীল ও এমসিকিউ প্রশ্ন আসে। বিটওয়াইজ অপারেটর সরাসরি সংখ্যার বাইনারি বিট (0 বা 1) নিয়ে কাজ করে।

Bitwise Operators Visualization

প্রধান বিটওয়াইজ অপারেটরগুলো হলো:
- & (Bitwise AND): দুটি বিট ১ হলেই কেবল ১ হবে।
- | (Bitwise OR): যেকোনো একটি বিট ১ হলেই ১ হবে।
- ^ (Bitwise XOR): দুটি বিট ভিন্ন হলে ১ হবে (0,1 বা 1,0), একই হলে ০ হবে।
- << (Left Shift): বিটগুলোকে বামে সরিয়ে দেয় (প্রতি শিফটে মান দ্বিগুণ হয়)।
- >> (Right Shift): বিটগুলোকে ডানে সরিয়ে দেয় (প্রতি শিফটে মান অর্ধেক হয়)।

উদাহরণ (Example):
ধরি, a = 5 (বাইনারি 101) এবং b = 6 (বাইনারি 110)।

  1. AND (&):
    101
    110

100 (ডেসিমাল মান: 4)

  1. OR (|):
    101
    110

111 (ডেসিমাল মান: 7)

  1. XOR (^):
    101
    110

011 (ডেসিমাল মান: 3)

অপারেটর প্রিসিডেন্স ও অ্যাসোসিয়েটিভিটি

যখন একটি লাইনে একাধিক অপারেটর থাকে, তখন কোনটির কাজ আগে হবে তা নির্ধারণ করে Precedence। আর যদি একই প্রিসিডেন্সের একাধিক অপারেটর থাকে, তবে কোন দিক থেকে কাজ শুরু হবে তা নির্ধারণ করে Associativity

গুরুত্বপূর্ণ (Operator Hierarchy):
কাজের অগ্রাধিকার (উচ্চ থেকে নিম্ন):
১. () : ব্র্যাকেট
২. ++, --, ! : ইউনারি (ডান থেকে বামে)
৩. *, /, % : গুণ, ভাগ, মডুলাস (বাম থেকে ডানে)
৪. +, - : যোগ, বিয়োগ (বাম থেকে ডানে)
৫. >, <, >= : রিলেশনাল
৬. ==, != : ইকুয়ালিটি
৭. && : লজিক্যাল AND
৮. || : লজিক্যাল OR
৯. =, += : অ্যাসাইনমেন্ট (ডান থেকে বামে - খুবই গুরুত্বপূর্ণ)

পরীক্ষার টিপস (Exam Tip):
লক্ষ্য করো, অ্যাসাইনমেন্ট অপারেটরের কাজ সবার শেষে হয় এবং এটি ডান থেকে বামে (Right to Left) কাজ করে।
যেমন: a = b = 10; এখানে আগে b = 10 হবে, তারপর a তে সেই মান যাবে।

সংক্ষিপ্ত সারাংশ (Quick Revision)

মনে রাখার মূল পয়েন্ট:
- ইন্টিজার ভাগ করলে দশমিক অংশ হারিয়ে যায় (5/2 = 2)।
- মডুলাস অপারেটর (%) ফ্লোট বা ডাবলের সাথে কাজ করে না।
- && অপারেশনে প্রথম শর্ত মিথ্যা হলে পরেরটি চেক হয় না (Short-circuit)।
- a++ মানে আগে ব্যবহার, পরে বৃদ্ধি। ++a মানে আগে বৃদ্ধি, পরে ব্যবহার।
- অ্যাসাইনমেন্ট অপারেটর (=) এবং রিলেশনাল অপারেটর (==) এক নয়।
- বিটওয়াইজ অপারেটর সরাসরি বাইনারি মানে কাজ করে।

পরিভাষা (Glossary)

পরিভাষা (Term) সংজ্ঞা (Definition)
Operator গাণিতিক বা যৌক্তিক কাজ সম্পাদনকারী বিশেষ চিহ্ন।
Operand যেই ভেরিয়েবল বা মানের ওপর অপারেটর কাজ করে।
Unary Operator যে অপারেটর একটিমাত্র অপারেন্ড নিয়ে কাজ করে (যেমন ++, --)।
Ternary Operator যে অপারেটরে তিনটি অংশ থাকে (? :)। এটি if-else এর সংক্ষিপ্ত রূপ।
Short-circuit লজিক্যাল অপারেশনের সময় অপ্রয়োজনীয় শর্ত চেক না করার পদ্ধতি।
Precedence একাধিক অপারেটরের মধ্যে কার কাজ আগে হবে তার অগ্রাধিকার।

অনুশীলনের প্রশ্ন

সৃজনশীল প্রশ্ন

সৃজনশীল প্রশ্ন ১

শিহাব সি ভাষায় একটি প্রোগ্রাম লিখছিল। সে দুটি পূর্ণসংখ্যা ভেরিয়েবল a = 10 এবং b = 3 ঘোষণা করল। এরপর সে res = a / b সূত্র ব্যবহার করে ভাগফল নির্ণয় করল। সে ফলাফল হিসেবে 3.33 আশা করেছিল কিন্তু আউটপুট এল 3। পরবর্তীতে সে % অপারেটর ব্যবহার করে ভাগশেষও নির্ণয় করল।

ক) ইউনারি অপারেটর কী?
খ) i++ এবং ++i এর মধ্যে পার্থক্য ব্যাখ্যা কর।
গ) শিহাবের কাঙ্ক্ষিত ফলাফল (3.33) না আসার কারণ ব্যাখ্যা কর এবং কাঙ্ক্ষিত ফলাফল পেতে কোডটি কীভাবে পরিবর্তন করতে হবে তা দেখাও।
ঘ) উদ্দীপকে ব্যবহৃত অপারেটরগুলোর ধরন এবং কাজের বিশ্লেষণ কর।

উত্তর

(ক) যে অপারেটর শুধুমাত্র একটি অপারেন্ডের (operand) উপর কাজ করে তাকে ইউনারি (Unary) অপারেটর বলে। যেমন: ++, --, - (unary minus) ইত্যাদি।

(খ) i++ হলো পোস্ট-ফিক্স (Post-fix) ইনক্রিমেন্ট, যা প্রথমে ভেরিয়েবলের বর্তমান মান ব্যবহার করে এবং পরে মান ১ বৃদ্ধি করে। অন্যদিকে ++i হলো প্রি-ফিক্স (Pre-fix) ইনক্রিমেন্ট, যা প্রথমে ভেরিয়েবলের মান ১ বৃদ্ধি করে এবং তারপর সেই বর্ধিত মান এক্সপ্রেশনে ব্যবহার করে।

(গ) উদ্দীপকে শিহাব a এবং b উভয়কেই পূর্ণসংখ্যা (integer) হিসেবে ঘোষণা করেছে। সি ভাষায় দুটি পূর্ণসংখ্যার মধ্যে ভাগ (/) করলে ফলাফলও একটি পূর্ণসংখ্যা হয়, দশমিক অংশ বর্জন করা হয়। তাই 10 / 3 এর গাণিতিক মান 3.333... হলেও প্রোগ্রাম 3 আউটপুট দিয়েছে। এটি ইনটিজার ডিভিশন (Integer Division) সমস্যা।

কাঙ্ক্ষিত ফলাফল 3.33 পেতে হলে শিহাবকে টাইপ কাস্টিং (Type Casting) ব্যবহার করতে হবে অথবা যেকোনো একটি ভেরিয়েবলকে ফ্লোটিং পয়েন্ট (float) হিসেবে নিতে হবে।
সঠিক কোডটি হতে পারে:

float res = (float)a / b;

অথবা,

float res = a / (float)b;

এতে কম্পাইলার ভাগ করার সময় দশমিক মান সংরক্ষণ করবে।

(ঘ) উদ্দীপকে প্রধানত তিনটি অপারেটর ব্যবহৃত হয়েছে: অ্যাসাইনমেন্ট অপারেটর (=), অ্যারিথমেটিক বা গাণিতিক অপারেটর (/ এবং %)।

  1. অ্যাসাইনমেন্ট অপারেটর (=): এটি ডান পাশের মান বা এক্সপ্রেশনের ফলাফল বাম পাশের ভেরিয়েবলে সংরক্ষণ করে। উদ্দীপকে a = 10 এবং res = a / b তে এটি ব্যবহৃত হয়েছে।

  2. গাণিতিক অপারেটর (/): এটি ভাগফল নির্ণয়ে ব্যবহৃত হয়। উদ্দীপকে a / b এর মাধ্যমে ভাগফল বের করা হয়েছে। যেহেতু অপারেন্ডগুলো পূর্ণসংখ্যা ছিল, তাই এটি ইনটিজার ডিভিশন বা পূর্ণবর্গ ভাগফল প্রদান করেছে।

  3. গাণিতিক অপারেটর (%): এটি মডুলাস বা ভাগশেষ নির্ণায়ক অপারেটর। উদ্দীপকে শিহাব এটি ব্যবহার করেছে, যার কাজ হলো a কে b দিয়ে ভাগ করে ভাগশেষ বের করা। 10 % 3 এর ক্ষেত্রে ফলাফল হবে 1

সুতরাং, শিহাবের প্রোগ্রামে গাণিতিক কাজ সম্পন্ন করতে অ্যারিথমেটিক এবং মান সংরক্ষণের জন্য অ্যাসাইনমেন্ট অপারেটরগুলোর সমন্বিত ব্যবহার হয়েছে।


সৃজনশীল প্রশ্ন ২

একটি অফিসের সফটওয়্যারে লগইন করার জন্য প্রোগ্রামার একটি শর্ত জুড়ে দিলেন যেখানে ইউজারনেম এবং পাসওয়ার্ড উভয়ই সঠিক হতে হবে। এর জন্য তিনি && অপারেটর ব্যবহার করলেন। শর্তটি ছিল অনেকটা এরকম: if (username_valid == 1 && password_valid == 1)

ক) অপারেটর কী?
খ) রিলেশনাল অপারেটরের কাজ কী?
গ) উদ্দীপকের শর্তটি সত্য হওয়ার জন্য ইনপুটগুলোর অবস্থা কী হতে হবে? ট্রুথ টেবিলের সাহায্যে ব্যাখ্যা কর।
ঘ) প্রোগ্রামার যদি && এর পরিবর্তে || অপারেটর ব্যবহার করতেন, তবে সফটওয়্যারের নিরাপত্তায় কী প্রভাব পড়ত? বিশ্লেষণপূর্বক মতামত দাও।

উত্তর

(ক) অপারেটর হলো বিশেষ কিছু চিহ্ন বা সিম্বল যা কম্পিউটার প্রোগ্রামে গাণিতিক বা যৌক্তিক কাজ সম্পন্ন করার জন্য অপারেন্ডের উপর ক্রিয়াশীল থাকে। যেমন: +, -, *, && ইত্যাদি।

(খ) রিলেশনাল অপারেটর দুটি অপারেন্ডের মধ্যে সম্পর্ক যাচাই করে এবং ফলাফল হিসেবে সত্য (True/1) বা মিথ্যা (False/0) প্রদান করে। এটি সাধারণত দুটি সংখ্যার মধ্যে ছোট, বড় বা সমান কিনা তা তুলনা করতে ব্যবহৃত হয়। উদাহরণস্বরূপ: ==, >, <, >=, <=, !=। কন্ডিশনাল স্টেটমেন্টে (যেমন if, while) সিদ্ধান্ত গ্রহণের জন্য এর গুরুত্ব অপরিসীম।

(গ) উদ্দীপকে ব্যবহৃত && হলো লজিক্যাল AND অপারেটর। এই অপারেটরের বৈশিষ্ট্য হলো, এটি তখনই সত্য (True) বা 1 রিটার্ন করে যখন এর সাথে যুক্ত উভয় কন্ডিশনই সত্য হয়। উদ্দীপকের শর্ত (username_valid == 1 && password_valid == 1) সত্য হওয়ার জন্য ইউজারনেম এবং পাসওয়ার্ড উভয়কেই সঠিক হতে হবে।

নিচে ট্রুথ টেবিলের মাধ্যমে বিষয়টি ব্যাখ্যা করা হলো (ধরি, A = username_valid, B = password_valid, Y = A && B):

ইউজারনেম (A) পাসওয়ার্ড (B) ফলাফল (A && B) মন্তব্য
০ (ভুল) ০ (ভুল) ০ (অ্যাক্সেস নেই) উভয়ই ভুল
০ (ভুল) ১ (সঠিক) ০ (অ্যাক্সেস নেই) ইউজারনেম ভুল
১ (সঠিক) ০ (ভুল) ০ (অ্যাক্সেস নেই) পাসওয়ার্ড ভুল
১ (সঠিক) ১ (সঠিক) ১ (অ্যাক্সেস আছে) উভয়ই সঠিক

অর্থাৎ, শুধুমাত্র শেষ ক্ষেত্রে যখন উভয় ইনপুট ১ (সঠিক), তখনই শর্তটি সত্য হবে এবং ইউজার লগইন করতে পারবে।

(ঘ) উদ্দীপকে && (AND) এর পরিবর্তে || (OR) অপারেটর ব্যবহার করলে সফটওয়্যারের নিরাপত্তায় মারাত্মক ঝুঁকি তৈরি হতো।

লজিক্যাল || বা OR অপারেটরের নিয়ম হলো, এর সাথে যুক্ত যেকোনো একটি শর্ত সত্য হলেই সম্পূর্ণ এক্সপ্রেশনটি সত্য হয়।
যদি কোডটি হতো if (username_valid == 1 || password_valid == 1), তবে নিচের ঘটনাগুলো ঘটত:
১. কেউ যদি সঠিক ইউজারনেম জানে কিন্তু পাসওয়ার্ড ভুল দেয়, তবুও সে লগইন করতে পারত।
২. একইভাবে, কেউ যদি কারো পাসওয়ার্ড জানে কিন্তু ইউজারনেম ভুল দেয় (যদিও এটি বাস্তবে কম সম্ভব), তবুও সিস্টেম তাকে অ্যাক্সেস দিত।

নিরাপত্তা ব্যবস্থার মূল নীতি হলো "অথেনটিফিকেশন" বা যাচাইকরণ, যেখানে ব্যবহারকারীর পরিচয় এবং গোপন চাবিকাঠি (পাসওয়ার্ড) দুটোই মিলতে হয়। || অপারেটর ব্যবহার করলে এই যাচাইকরণ প্রক্রিয়া দুর্বল হয়ে পড়ত কারণ যেকোনো একটি তথ্য জানলেই সিস্টেমে প্রবেশ করা যেত। ফলে হ্যাকার বা অননুমোদিত ব্যক্তিরা সহজেই সিস্টেম হ্যাক করতে পারত। তাই লগইন সিস্টেমের নিরাপত্তার জন্য && অপারেটরই অপরিহার্য এবং || ব্যবহার করা সম্পূর্ণ অনুচিত।

এমসিকিউ

১। C ভাষায় 13 % 5 এর মান কত?

ক) 2.6
খ) 3
গ) 2
ঘ) 1

সঠিক উত্তর: খ) 3

ব্যাখ্যা: % হলো মডুলাস অপারেটর যা ভাগশেষ নির্ণয় করে। ১৩ কে ৫ দিয়ে ভাগ করলে ভাগফল ২ এবং ভাগশেষ ৩ থাকে।


২। 5 / 2 এর ফলাফল কোনটি হবে (C ভাষায়)?

ক) 2.5
খ) 2.0
গ) 2
ঘ) 3

সঠিক উত্তর: গ) 2

ব্যাখ্যা: যেহেতু ৫ এবং ২ উভয়ই পূর্ণসংখ্যা (integer), তাই কম্পাইলার ইনটিজার ডিভিশন বা পূর্ণবর্গ ভাগফল প্রদান করে, দশমিক অংশ বর্জন করে।


৩। 5.0 / 2 এর ফলাফল কত?

ক) 2
খ) 2.5
গ) 3
ঘ) 2.0

সঠিক উত্তর: খ) 2.5

ব্যাখ্যা: এখানে একটি অপারেন্ড (5.0) ফ্লোটিং পয়েন্ট হওয়ায় ফলাফলটি ফ্লোটিং পয়েন্টে (দশমিক যুক্ত) আসবে।


৪। নিচের কোনটি রিলেশনাল অপারেটর?

ক) +
খ) &&
গ) >=
ঘ) =

সঠিক উত্তর: গ) >=

ব্যাখ্যা: >= (Greater than or equal to) দুটি মানের মধ্যে সম্পর্ক যাচাই করে। + হলো অ্যারিথমেটিক, && লজিক্যাল এবং = অ্যাসাইনমেন্ট অপারেটর।


৫। যদি a = 5 এবং b = 3 হয়, তবে (a > b) && (a < 10) এর মান কত?

ক) 0
খ) 1
গ) 5
ঘ) 3

সঠিক উত্তর: খ) 1

ব্যাখ্যা: a > b (5 > 3) সত্য (1)। a < 10 (5 < 10) সত্য (1)। 1 && 1 এর ফলাফল 1 (True)।


৬। int x = 5; int y = x++; এখানে y এর মান কত হবে?

ক) 5
খ) 6
গ) 4
ঘ) 0

সঠিক উত্তর: ক) 5

ব্যাখ্যা: x++ হলো পোস্ট-ফিক্স ইনক্রিমেন্ট। এটি প্রথমে x এর বর্তমান মান (5) y তে অ্যাসাইন করে, তারপর x এর মান এক বৃদ্ধি করে।


৭। int x = 5; int y = ++x; এখানে y এর মান কত হবে?

ক) 5
খ) 6
গ) 4
ঘ) 0

সঠিক উত্তর: খ) 6

ব্যাখ্যা: ++x হলো প্রি-ফিক্স ইনক্রিমেন্ট। এটি প্রথমে x এর মান এক বৃদ্ধি করে (6 হয়), তারপর সেই মান y তে অ্যাসাইন করে।


৮। নিচের কোনটি লজিক্যাল অপারেটর নয়?

ক) &&
খ) ||
গ) !
ঘ) &

সঠিক উত্তর: ঘ) &

ব্যাখ্যা: & হলো বিটওয়াইজ (Bitwise) AND অপারেটর। &&, ||, ! হলো লজিক্যাল অপারেটর।


৯। a = 10; a += 5; এর পর a এর মান কত?

ক) 5
খ) 10
গ) 15
ঘ) 50

সঠিক উত্তর: গ) 15

ব্যাখ্যা: a += 5 এর অর্থ হলো a = a + 5। অর্থাৎ ১০ এর সাথে ৫ যোগ করে a তে রাখা হয়।


১০। !(5 > 3) এর মান কত?

ক) 1
খ) 0
গ) True
ঘ) 5

সঠিক উত্তর: খ) 0

ব্যাখ্যা: 5 > 3 সত্য (True বা 1)। ! (NOT) অপারেটর সত্যকে মিথ্যা (False বা 0) করে দেয়।


১১। নিচের কোনটি ইউনারি অপারেটর?

ক) +
খ) - (বियोग)
গ) ++
ঘ) *

সঠিক উত্তর: গ) ++

ব্যাখ্যা: ++ (ইনক্রিমেন্ট) অপারেটর একটি মাত্র অপারেন্ডের উপর কাজ করে, তাই এটি ইউনারি অপারেটর। বাকিগুলো বাইনারি অপারেটর।


১২। 10 != 10 এর ফলাফল কী?

ক) True
খ) False
গ) 1
ঘ) Error

সঠিক উত্তর: খ) False

ব্যাখ্যা: != মানে "সমান নয়"। ১০ এবং ১০ সমান, তাই "সমান নয়" দাবিটি মিথ্যা (False বা 0)।


১৩। সি ভাষায় pow(2, 3) ফাংশনটি কোন হেডার ফাইলে থাকে?

ক) stdio.h
খ) conio.h
গ) math.h
ঘ) stdlib.h

সঠিক উত্তর: গ) math.h

ব্যাখ্যা: গাণিতিক ফাংশন যেমন pow(), sqrt() ইত্যাদি ব্যবহারের জন্য math.h হেডার ফাইল অন্তর্ভুক্ত করতে হয়।


১৪। x = 5; x *= 2 + 3; এখানে x এর মান কত হবে?

ক) 13
খ) 25
গ) 10
ঘ) 15

সঠিক উত্তর: খ) 25

ব্যাখ্যা: x *= 2 + 3 এর অর্থ x = x * (2 + 3)। প্রথমে ব্র্যাকেটের কাজ হবে (5), তারপর গুণ হবে। 5 * 5 = 25


১৫। লজিক্যাল অপারেটরগুলো মূলত কী রিটার্ন করে?

ক) পূর্ণসংখ্যা মান
খ) ভগ্নাংশ মান
গ) ১ অথবা ০
ঘ) ক্যারেক্টার

সঠিক উত্তর: গ) ১ অথবা ০

ব্যাখ্যা: লজিক্যাল অপারেটর সত্য (True/1) অথবা মিথ্যা (False/0) রিটার্ন করে।


নিচের উদ্দীপকটি পড়ো এবং ১৬ ও ১৭ নং প্রশ্নের উত্তর দাও:
int a = 10, b = 20, c;
c = (a > b) ? a : b;

১৬। উদ্দীপকের কোডটি রান করলে c এর মান কত হবে?

ক) 10
খ) 20
গ) 30
ঘ) 0

সঠিক উত্তর: খ) 20

ব্যাখ্যা: এটি টারনারি অপারেটর ? :। শর্ত a > b (10 > 20) মিথ্যা। তাই কোলন এর পরের মানটি (b) c তে যাবে। b এর মান ২০।


১৭। উদ্দীপকে ব্যবহৃত অপারেটরটিকে কী বলা হয়?

ক) ইউনারি
খ) বাইনারি
গ) টারনারি
ঘ) বিটওয়াইজ

সঠিক উত্তর: গ) টারনারি

ব্যাখ্যা: কন্ডিশনাল অপারেটর ? : তিনটি অপারেন্ড নিয়ে কাজ করে বলে একে টারনারি অপারেটর বলা হয়।


১৮। অ্যারিথমেটিক অপারেটর কোনটি?
i. +
ii. %
iii. &&

নিচের কোনটি সঠিক?

ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii

সঠিক উত্তর: ক) i ও ii

ব্যাখ্যা: + এবং % হলো গাণিতিক (Arithmetic) অপারেটর। && হলো লজিক্যাল অপারেটর।


১৯। if(a == 5 || b == 5) শর্তটি সত্য হবে যদি-
i. a এর মান ৫ হয়
ii. b এর মান ৫ হয়
iii. a ও b উভয়ের মান ৫ হয়

নিচের কোনটি সঠিক?

ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii

সঠিক উত্তর: ঘ) i, ii ও iii

ব্যাখ্যা: || (OR) অপারেটরের ক্ষেত্রে যেকোনো একটি অথবা উভয় শর্ত সত্য হলেই ফলাফল সত্য হয়।


২০। বিটওয়াইজ অপারেটরগুলো হলো-
i. &
ii. |
iii. ^

নিচের কোনটি সঠিক?

ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii

সঠিক উত্তর: ঘ) i, ii ও iii

ব্যাখ্যা: & (AND), | (OR), ^ (XOR) তিনটিই বিটওয়াইজ অপারেটর যা বিট লেভেলে কাজ করে।


২১। a = 10 হলে a-- এর মান কত?

ক) 9
খ) 10
গ) 11
ঘ) 8

সঠিক উত্তর: খ) 10

ব্যাখ্যা: এটি পোস্ট-ফিক্স ডিক্রিমেন্ট। অপারেশনের সময় মান ১০ থাকে, পরে কমে ৯ হয়। কিন্তু প্রশ্নে এক্সপ্রেশনের মান জানতে চাওয়া হয়েছে, যা ১০।


২২। অপারেটর প্রিসিডেন্স (Precedence) অনুযায়ী নিচের কোনটির অগ্রাধিকার সবচেয়ে বেশি?

ক) =
খ) +
গ) *
ঘ) &&

সঠিক উত্তর: গ) *

ব্যাখ্যা: সি ভাষায় গাণিতিক অপারেটর * এবং / এর অগ্রাধিকার যোগ + বা বিয়োগ - এর চেয়ে বেশি। অ্যাসাইনমেন্ট = এর অগ্রাধিকার অনেক নিচে।


২৩। 5 % 2 এর মান কত?

ক) 1
খ) 2
গ) 2.5
ঘ) 0

সঠিক উত্তর: ক) 1

ব্যাখ্যা: ৫ কে ২ দিয়ে ভাগ করলে ভাগশেষ ১ থাকে।


২৪। int a = 5, b = 2; float c; c = a / b; প্রিন্ট করলে c এর মান কত দেখাবে?

ক) 2.5
খ) 2.0
গ) 2
ঘ) 3.0

সঠিক উত্তর: খ) 2.0

ব্যাখ্যা: a এবং b ইনটিজার হওয়ায় a/b এর ফলাফল হবে 2 (ইনটিজার)। সেই 2 যখন ফ্লোট c তে রাখা হবে তখন তা 2.0 হয়ে যাবে।


২৫। রিলেশনাল অপারেটরের কাজ হলো-
i. তুলনা করা
ii. মান অ্যাসাইন করা
iii. সত্য বা মিথ্যা ফলাফল দেওয়া

নিচের কোনটি সঠিক?

ক) i ও ii
খ) i ও iii
গ) ii ও iii
ঘ) i, ii ও iii

সঠিক উত্তর: খ) i ও iii

ব্যাখ্যা: রিলেশনাল অপারেটর তুলনা করে এবং সত্য/মিথ্যা রিটার্ন করে। মান অ্যাসাইন করা এর কাজ নয়, সেটি অ্যাসাইনমেন্ট অপারেটরের কাজ।