সি প্রোগ্রামিং এর পরিচিতি ও গঠন

এইচএসসি আইসিটি সি প্রোগ্রামিং: সি ভাষার ইতিহাস, ডেনিস রিচি, প্রোগ্রামের গঠন, হেডার ফাইল, মেইন ফাংশন এবং হ্যালো ওয়ার্ল্ড প্রোগ্রামের বিস্তারিত ব্যাখ্যা।

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

অধ্যায় ৫: প্রোগ্রামিং ভাষা - সি প্রোগ্রামিং এর পরিচিতি ও গঠন

  1. সি প্রোগ্রামিং এর পরিচিতি ও গঠন
  2. ৫০ বছরের পুরনো ভাষা কেন এখনও সেরা?
  3. সি ভাষার জন্মকথা (History of C)
  4. সি ভাষার প্রধান বৈশিষ্ট্যসমূহ
  5. সি প্রোগ্রামের গঠন (Structure)
  6. আমাদের প্রথম কোড: Hello World
  7. কোড বিশ্লেষণ - ১: #include <stdio.h>
  8. কোড বিশ্লেষণ - ২: int main()
  9. কোড বিশ্লেষণ - ৩: printf ও return
  10. সি প্রোগ্রাম রান করার ধাপসমূহ
  11. সারসংক্ষেপ (Summary)

সি প্রোগ্রামিং এর পরিচিতি ও গঠন

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

১। সি (C) প্রোগ্রামিং ভাষার ইতিহাস ও বৈশিষ্ট্য বর্ণনা করতে পারব।
২। সি প্রোগ্রামের মৌলিক গঠন (Structure) ব্যাখ্যা করতে পারব।
৩। হেডার ফাইল ও মেইন ফাংশনের কাজ বুঝতে পারব।
৪। আমাদের প্রথম সি প্রোগ্রাম 'Hello World' লিখতে ও ব্যাখ্যা করতে পারব।

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

৫০ বছরের পুরনো ভাষা কেন এখনও সেরা?

নিচের প্রযুক্তিগুলোর কথা চিন্তা করো:

  • মঙ্গল গ্রহে পাঠানো রোভার (Mars Rover)
  • স্মার্ট কারের ড্যাশবোর্ড (Smart Car)
  • উইন্ডোজ বা লিনাক্স অপারেটিং সিস্টেম

এগুলোর মূলে কী আছে জানো? উত্তর: সি প্রোগ্রামিং ল্যাঙ্গুয়েজ

৫০ বছর আগে তৈরি হয়েও এটি আজও "Mother of all languages" হিসেবে পরিচিত।

আচ্ছা, একটা প্রশ্ন করি। তোমরা নিশ্চয়ই মঙ্গল গ্রহে পাঠানো রোভারগুলোর ছবি দেখেছো? কিংবা আজকালকার স্মার্ট কারগুলোর ড্যাশবোর্ড? অথবা তুমি যে ল্যাপটপে এই ভিডিওটি দেখছো, তার অপারেটিং সিস্টেম? তোমরা কি জানো, এই সবকিছুর মূলে কোন ভাষা কাজ করছে? উত্তর হলো - সি প্রোগ্রামিং। অবাক লাগছে না? প্রায় ৫০ বছর আগে তৈরি হওয়া একটা ল্যাঙ্গুয়েজ এখনও পৃথিবীর বড় বড় সব সিস্টেমকে চালিয়ে নিচ্ছে। এজন্যই সি-কে বলা হয় 'Mother of all languages'। আজ আমরা সেই পাওয়ারফুল ভাষাটাই শিখতে যাচ্ছি।

সি ভাষার জন্মকথা (History of C)

আবিষ্কারক: ডেনিস রিচি (Dennis Ritchie)

স্থান: বেল ল্যাবরেটরি (Bell Labs), USA

সাল: ১৯৭২

উদ্দেশ্য: ইউনিক্স (UNIX) অপারেটিং সিস্টেম তৈরি করা।

বিবর্তন:
ALGOL $\rightarrow$ BCPL $\rightarrow$ B $\rightarrow$ C

সি ভাষার ইতিহাসটা কিন্তু বেশ চমৎকার। ১৯৭২ সালের কথা। আমেরিকার বিখ্যাত বেল ল্যাবরেটরিতে কাজ করতেন একজন জিনিয়াস কম্পিউটার বিজ্ঞানী, নাম ডেনিস রিচি। স্ক্রিনে তোমরা তাঁর ছবি দেখতে পাচ্ছো। তিনি চেয়েছিলেন এমন একটা অপারেটিং সিস্টেম বানাতে যেটা খুব দ্রুত কাজ করবে। সেই লক্ষ্যেই তিনি ইউনিক্স (UNIX) অপারেটিং সিস্টেমের জন্য সি ভাষাটি তৈরি করেন। এর আগে 'B' নামের একটি ভাষা ছিল, সেটার সীমাবদ্ধতা দূর করেই জন্ম হলো 'C' এর। অনেকটা ইংরেজির মতোই, প্রোগ্রামিং জগতে সি হলো আন্তর্জাতিক ভাষার মতো।

সি ভাষার প্রধান বৈশিষ্ট্যসমূহ

  1. মিড লেভেল ল্যাঙ্গুয়েজ (Mid Level): হার্ডওয়্যার ও অ্যাপ্লিকেশন উভয়ের সাথেই কাজ করতে পারে। মানুষের ভাষা ও মেশিনের ভাষার সেতু।

  2. স্ট্রাকচার্ড ল্যাঙ্গুয়েজ (Structured): কোডকে ছোট ছোট ফাংশন বা ব্লকে ভাগ করা যায়।

  3. Case Sensitive: 'A' এবং 'a' আলাদা অর্থ বহন করে।

  4. পোর্টেবল (Portable): এক কম্পিউটারের কোড অন্য কম্পিউটারে সহজে চলে।

সি কেন এত জনপ্রিয়? এর কিছু বিশেষ কারণ আছে। ছবিতে দেখো, প্রথম আইকনটা একটা সেতুর মতো। সি হলো 'মিড লেভেল ল্যাঙ্গুয়েজ'। এটি মেশিনের কঠিন ভাষা এবং মানুষের সহজ ভাষার মধ্যে সেতুর মতো কাজ করে। দ্বিতীয়ত, এটি 'স্ট্রাকচার্ড'। মানে তুমি পুরো প্রোগ্রামটাকে ছোট ছোট ব্লকে ভাগ করে গুছিয়ে লিখতে পারো। আর একটা খুব গুরুত্বপূর্ণ বিষয় হলো 'Case Sensitivity'। সি ভাষায় বড় হাতের 'A' আর ছোট হাতের 'a' কিন্তু এক জিনিস নয়! পাসওয়ার্ডের মতো, একটু ভুল হলেই কাজ করবে না।

সি প্রোগ্রামের গঠন (Structure)

একটি আদর্শ সি প্রোগ্রামে নিচের ৬টি অংশ থাকতে পারে:

  1. Documentation Section (মন্তব্য বা Comment)
  2. Link Section (Header files যুক্ত করা)
  3. Definition Section (Constants তৈরি)
  4. Global Declaration Section (ভেরিয়েবল ঘোষণা)
  5. Main() Function Section { ... } [আবশ্যিক অংশ]
  6. Subprogram Section (User defined functions)

দ্রষ্টব্য: সব প্রোগ্রামে সব অংশ থাকা বাধ্যতামূলক নয়, তবে Main() ফাংশন থাকতেই হবে।

মানুষের শরীরের যেমন মাথা, হাত, পা - এমন গঠন আছে, সি প্রোগ্রামেরও একটা নির্দিষ্ট গঠন বা Structure আছে। স্ক্রিনে তোমরা ৬টি অংশের নাম দেখছো। সব প্রোগ্রামে এই ৬টি অংশই লাগবে এমন না, তবে এদের ক্রমটা মনে রাখা জরুরি। এর মধ্যে ৫ নম্বরটা, অর্থাৎ 'Main Function' হলো প্রোগ্রামের হৃদপিণ্ড। এটা ছাড়া প্রোগ্রাম চলবেই না। আর ২ নম্বর 'Link Section' টাও প্রায় সব সময় লাগে। আমরা একটু পরেই একটা উদাহরণ দেখলে বিষয়টা একদম ক্লিয়ার হয়ে যাবে।

আমাদের প্রথম কোড: Hello World

নিচের কোডটি লক্ষ্য করো:

#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}

আউটপুট:
Hello, World!

এবার চলো আমরা আমাদের প্রথম কোডটা দেখি। ভয় পাওয়ার কিছু নেই, শুধু কোডটার দিকে তাকাও। এটাকে বলা হয় 'Hello World' প্রোগ্রাম। প্রোগ্রামিং শেখার সময় ঐতিহ্যগতভাবে সবাই এই প্রোগ্রাম দিয়েই শুরু করে। এখানে দেখো কিছু অদ্ভুত শব্দ আছে - `#include`, `stdio.h`, `int main`, `printf`। দেখতে কঠিন লাগছে? একদম চিন্তা করো না। আমরা এখন এই কোডটাকে অপারেশন থিয়েটারে নিয়ে যাব এবং এর প্রতিটি অংশের কাজ ব্যবচ্ছেদ করে দেখব।

কোড বিশ্লেষণ - ১: #include <stdio.h>

ব্যাখ্যা:
* # : প্রি-প্রসেসর ডিরেক্টিভ (Pre-processor directive)
* include : যুক্ত করা
* stdio.h : Standard Input Output Header file

কাজ:
প্রোগ্রামে ইনপুট (scanf) এবং আউটপুট (printf) ফাংশন ব্যবহারের জন্য লাইব্রেরি যুক্ত করা।

কোডের একদম শুরুতে ছিল `#include <stdio.h>`। এটাকে তোমরা একটা 'টুলবক্স' এর সাথে তুলনা করতে পারো। মনে করো তুমি একটা গাড়ি মেরামত করবে। কাজ শুরু করার আগে তোমাকে তো টুলবক্সটা সাথে নিতে হবে, তাই না? সি প্রোগ্রামে `stdio.h` হলো সেই টুলবক্স। এর ভেতরে `printf` বা `scanf` এর মতো টুলসগুলো রাখা আছে। এই লাইনটা না লিখলে কম্পিউটার বুঝতেই পারবে না `printf` আসলে কী। `stdio` মানে হলো Standard Input Output।

কোড বিশ্লেষণ - ২: int main()

int main() { ... }

  • main(): এটি প্রোগ্রামের প্রধান ফাংশন। এখান থেকেই প্রোগ্রামের কাজ (Execution) শুরু হয়।
  • { } : কার্লি ব্রেস বা সেকেন্ড ব্র্যাকেট। এটি মেইন ফাংশনের সীমানা বা Scope নির্ধারণ করে।
    • { = শুরু (Start)
    • } = শেষ (End)

এরপর আসে `int main()`। এটাকে বলা যায় প্রোগ্রামের 'মেইন গেইট' বা 'ইঞ্জিন'। কম্পিউটার যখন কোনো প্রোগ্রাম রান করে, সে সবার আগে এই `main()` ফাংশনটাকেই খোঁজে। এখান থেকেই কাজ শুরু হয়। আর এই যে সেকেন্ড ব্র্যাকেট `{` দেখছো, এটা দিয়ে বোঝানো হয় কাজ শুরু হলো, আর শেষের ব্র্যাকেট `}` দিয়ে বোঝানো হয় কাজ শেষ। এর ভেতরের সব কিছুই হলো মেইন ফাংশনের অংশ।

কোড বিশ্লেষণ - ৩: printf ও return

printf("...");
* এটি একটি আউটপুট ফাংশন।
* ডাবল কোটেশনের " " ভেতরের লেখা হুবহু স্ক্রিনে দেখায়।
* \n : নিউ লাইন (New Line)। কার্সর পরের লাইনে নিয়ে যায়।
* ; (সেমিকোলন): প্রতিটি স্টেটমেন্ট বা নির্দেশের শেষে দিতে হয়। (যেমন বাংলা বাক্যের শেষে দাড়ি)।

return 0;
* প্রোগ্রাম সফলভাবে শেষ হয়েছে তা অপারেটিং সিস্টেমকে জানায়।

এবার আসি `printf` এ। নাম শুনেই বোঝা যাচ্ছে এর কাজ কিছু প্রিন্ট করা বা স্ক্রিনে দেখানো। ইনভার্টেড কমার ভেতরে যা লিখবে, সেটাই স্ক্রিনে ভেসে উঠবে। এখানে একটা খুব গুরুত্বপূর্ণ বিষয় খেয়াল করো - লাইনের শেষে একটা সেমিকোলন (;) আছে। এটা কিন্তু মিস করা যাবে না! বাংলায় যেমন দাড়ি না দিলে বাক্য শেষ হয় না, সি প্রোগ্রামে সেমিকোলন না দিলে এরর আসবে। আর শেষে `return 0` মানে হলো আমরা কম্পিউটারকে বলছি - 'বস, আমাদের কাজ সাকসেসফুলি শেষ!'

সি প্রোগ্রাম রান করার ধাপসমূহ

  1. কোড লেখা (Editing): Code::Blocks বা অনলাইন কম্পাইলারে কোড লেখা।
  2. সেভ করা (Saving): ফাইলের নাম .c এক্সটেনশন দিয়ে সেভ করা (যেমন: hello.c
  3. কম্পাইল করা (Compiling): সোর্স কোডকে (মানুষের ভাষা) মেশিন কোডে (0, 1) রূপান্তর করা।
  4. রান করা (Execution): প্রোগ্রামটি চালু করে ফলাফল দেখা।

তোমরা তো কোড বুঝলে, কিন্তু এটা চালাবে কীভাবে? ধাপগুলো খুব সহজ। প্রথমে কোডটা লিখবে, তারপর সেটাকে সেভ করতে হবে। মনে রাখবে, সি ফাইলের নামের শেষে অবশ্যই `.c` দিতে হবে, যেমন `test.c`। এরপর আসে 'কম্পাইল' করা। কম্পাইলার তোমার লেখা ইংরেজি কোডটাকে মেশিনের ভাষায় অর্থাৎ ০ আর ১ এ রূপান্তর করে। সবশেষে রান করলেই তুমি আউটপুট দেখতে পাবে। তোমরা মোবাইলে বা কম্পিউটারে Code::Blocks সফটওয়্যার দিয়ে এটা প্র্যাকটিস করতে পারো।

সারসংক্ষেপ (Summary)

আজ আমরা যা শিখলাম:

  • সি একটি মিড লেভেল ও স্ট্রাকচার্ড ভাষা (১৯৭২ সালে ডেনিস রিচি তৈরি করেন)।
  • সি প্রোগ্রামের মেইন ফাংশন main() অপরিহার্য।
  • হেডার ফাইল stdio.h ইনপুট-আউটপুটের জন্য লাগে।
  • প্রতিটি স্টেটমেন্টের শেষে সেমিকোলন (;) দিতে হয়।

আজকের ক্লাসে আমরা সি প্রোগ্রামিংয়ের জগতে প্রথম পা রাখলাম। আমরা জানলাম ডেনিস রিচি এবং বেল ল্যাবসের কথা। দেখলাম একটা সি প্রোগ্রামের গঠন কেমন হয় এবং কীভাবে `printf` দিয়ে লেখা প্রিন্ট করতে হয়। সবচেয়ে জরুরি যেটা মনে রাখবে - মেইন ফাংশন ছাড়া প্রোগ্রাম হয় না, আর সেমিকোলন দিতে ভুল করা যাবে না। পরের ক্লাসে আমরা ভেরিয়েবল এবং ডেটা টাইপ নিয়ে বিস্তারিত আলোচনা করব। তখন তোমরা আরও জটিল সব প্রোগ্রাম লিখতে পারবে। সে পর্যন্ত সবাই ভালো থেকো, আর হ্যাঁ, `Hello World` কোডটা একবার নিজে রান করে দেখো কিন্তু! আল্লাহ হাফেজ।

লেকচার নোট ১: সি প্রোগ্রামিং এর পরিচিতি ও গঠন

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

আধুনিক প্রোগ্রামিং জগতের অন্যতম ভিত্তি হলো সি (C) প্রোগ্রামিং ভাষা। আজকের লেকচারে আমরা যেমন মার্স রোভার বা মহাকাশ অভিযানের জটিল প্রযুক্তির কথা শুনেছি, এই সবকিছুর মূলে রয়েছে প্রোগ্রামিং। সি ভাষাকে বলা হয় "প্রোগ্রামিংয়ের জননী" বা Mother of All Languages। কারণ, সি শিখলে পৃথিবীর যেকোনো প্রোগ্রামিং ভাষা শেখা সহজ হয়ে যায়। এইচএসসি আইসিটি পঞ্চম অধ্যায়ের প্রস্তুতির জন্য সি ভাষার ইতিহাস, গঠন এবং বেসিক সিনট্যাক্স বোঝা অত্যন্ত জরুরি। এখান থেকেই মূলত তোমাদের প্রোগ্রামিংয়ের হাতেখড়ি হবে।

সি ভাষার ইতিহাস ও বৈশিষ্ট্য

১৯৭২ সালে যুক্তরাষ্ট্রের বেল ল্যাবরেটরিতে (Bell Laboratories) ডেনিস রিচি (Dennis Ritchie) ইউনিক্স (UNIX) অপারেটিং সিস্টেম তৈরি করার জন্য সি ভাষা উদ্ভাবন করেন। এর আগে 'B' এবং 'BCPL' নামে দুটি ভাষা ছিল, সেগুলোর সীমাবদ্ধতা দূর করতেই 'C' এর জন্ম।

সি ভাষাকে "মিড লেভেল ল্যাঙ্গুয়েজ" (Mid-Level Language) বলা হয়। কারণ এটি মানুষের বোধগম্য হাই লেভেল ল্যাঙ্গুয়েজ (যেমন ইংরেজি শব্দের ব্যবহার) এবং মেশিনের বোধগম্য লো লেভেল ল্যাঙ্গুয়েজ (যেমন হার্ডওয়্যার নিয়ন্ত্রণ) - উভয়ের সুবিধাই প্রদান করে। অর্থাৎ, সি দিয়ে যেমন সফটওয়্যার তৈরি করা যায়, তেমনি সরাসরি হার্ডওয়্যার বা মেমোরি নিয়ন্ত্রণও করা যায়।

সংজ্ঞা (Definition): সি (C) হলো একটি স্ট্রাকচার্ড, প্রসিডিউরাল এবং মিড লেভেল প্রোগ্রামিং ভাষা যা ১৯৭২ সালে ডেনিস রিচি বেল ল্যাবরেটরিতে ইউনিক্স অপারেটিং সিস্টেম তৈরির উদ্দেশ্যে উদ্ভাবন করেন।

সি একটি স্ট্রাকচার্ড প্রোগ্রামিং ভাষা। এর মানে হলো, একটি বড় প্রোগ্রামকে ছোট ছোট অংশে বা ফাংশনে ভাগ করে সমাধান করা যায়। এতে ভুল নির্ণয় (Debug) করা এবং কোড পরিবর্তন করা সহজ হয়।

গুরুত্বপূর্ণ তথ্য (Important Facts):
- জনক: ডেনিস রিচি (Dennis Ritchie)
- উৎপত্তিস্থল: এটি অ্যান্ড টি বেল ল্যাবরেটরি (AT&T Bell Labs), যুক্তরাষ্ট্র
- সাল: ১৯৭২
- পূর্বসূরি ভাষা: B এবং BCPL
- প্রধান ব্যবহার: সিস্টেম সফটওয়্যার (যেমন: উইন্ডোজ, লিনাক্স কার্নেল) তৈরিতে।


সি প্রোগ্রামের আবশ্যিক গঠন (Structure of C Program)

মানুষের দেহের যেমন মাথা, হাত, পা ও হৃদপিণ্ড—এসব মিলিয়ে একটি পূর্ণাঙ্গ গঠন তৈরি হয়, তেমনি একটি সি প্রোগ্রামেরও সুনির্দিষ্ট গঠন বা কাঠামো রয়েছে। একটি আদর্শ সি প্রোগ্রামে সাধারণত ৬টি অংশ থাকে। নিচে চিত্রের মাধ্যমে এই গঠনটি দেখানো হলো:

সি প্রোগ্রামের গঠন - ৬টি সেকশন

এই ৬টি সেকশনের কাজ নিচে বিস্তারিত আলোচনা করা হলো:

  1. ডকুমেন্টেশন সেকশন (Documentation Section): এখানে প্রোগ্রামের নাম, লেখকের নাম, তৈরির তারিখ বা প্রোগ্রামের উদ্দেশ্য কমেন্ট (Comment) হিসেবে লেখা হয়। এটি প্রোগ্রামের অংশ হলেও কম্পাইলার এটি পড়ে না বা এক্সিকিউট করে না।

  2. লিংক সেকশন (Link Section): এই অংশে প্রয়োজনীয় হেডার ফাইলগুলো (Header Files) সংযুক্ত করা হয়। যেমন printf বা scanf ফাংশন ব্যবহার করতে হলে #include <stdio.h> লিখতে হয়। এটি মূলত লাইব্রেরি ফাংশনগুলোর সাথে আমাদের প্রোগ্রামের সংযোগ স্থাপন করে।

  3. ডেফিনিশন সেকশন (Definition Section): প্রোগ্রামে ব্যবহৃত বিভিন্ন কনস্ট্যান্ট (Constant) বা ধ্রুবক এখানে ডিফাইন করা হয়। যেমন: #define PI 3.1416

  4. গ্লোবাল ডিক্লারেশন সেকশন (Global Declaration Section): যেসব ভেরিয়েবল বা ফাংশন পুরো প্রোগ্রামের যেকোনো জায়গা থেকে ব্যবহার করা যায়, সেগুলোকে এখানে ঘোষণা করা হয়। এটি main() ফাংশনের উপরে থাকে।

  5. মেইন ফাংশন সেকশন (Main Function Section): এটি সি প্রোগ্রামের আবশ্যিক অংশ। এখান থেকেই প্রোগ্রামের কাজ শুরু হয়। এর দুটি অংশ থাকে:
    - Declaration Part: যেখানে ভেরিয়েবল ঘোষণা করা হয়।
    - Executable Part: যেখানে মূল কাজ বা লজিক লেখা হয়।

  6. সাব-প্রোগ্রাম সেকশন (Sub-program Section): ব্যবহারকারী নিজের প্রয়োজনে কোনো ফাংশন তৈরি করলে (User-defined function) তা মেইন ফাংশনের পরে লেখা হয়।

পরীক্ষার টিপস (Exam Tip): পরীক্ষায় প্রায়ই 'সি প্রোগ্রামের গঠন চিত্রসহ বর্ণনা করো' (৩ বা ৪ মার্কস) প্রশ্নটি আসে। তখন উপরের ৬টি সেকশনের নাম এবং একটি নমুনা ডায়াগ্রাম আঁকা জরুরি। তবে মনে রাখবে, ছোট প্রোগ্রামে সব সেকশন থাকার প্রয়োজন নেই, কিন্তু Main Function Section থাকতেই হবে।


কোড বিশ্লেষণ: হেডার ফাইল ও মেইন ফাংশন

চলো একটি সাধারণ "Hello World" প্রোগ্রাম দেখে নিই এবং এর প্রতিটি অংশ বিশ্লেষণ করি। এটি সি প্রোগ্রামের বেসিক সিনট্যাক্স বুঝতে সাহায্য করবে।

#include <stdio.h>    // Link Section

int main() {          // Main Function Start
    printf("Hello World");  // Executable Part
    return 0;         // End of program
}
১. #include <stdio.h>

এটি একটি প্রি-প্রসেসর ডিরেক্টিভ। এখানে stdio.h মানে হলো Standard Input Output header file। প্রোগ্রামে ইনপুট (যেমন scanf) এবং আউটপুট (যেমন printf) ফাংশন ব্যবহার করার জন্য এই ফাইলটি লিংক করতে হয়।

হেডার ফাইল (Header File): যে ফাইলে সি প্রোগ্রামের বিভিন্ন লাইব্রেরি ফাংশনের (যেমন printf, scanf, sqrt) প্রোটোটাইপ বা সংজ্ঞা সংরক্ষিত থাকে, তাকে হেডার ফাইল বলে। একে .h এক্সটেনশন দ্বারা প্রকাশ করা হয়।

২. int main()

এটি প্রোগ্রামের মূল ফাংশন। অপারেটিং সিস্টেম যখন প্রোগ্রামটি চালায়, তখন সবার আগে এই main() ফাংশনটি কল করে। int মানে হলো এই ফাংশনটি শেষে একটি পূর্ণসংখ্যা (Integer) রিটার্ন করবে।

৩. printf("Hello World");

printf একটি লাইব্রেরি ফাংশন যা আউটপুট স্ক্রিনে কোনো লেখা বা ফলাফল প্রদর্শন করে। এটি stdio.h ফাইলের অন্তর্গত। ডাবল কোটেশনের " " ভেতরের অংশটি হুবহু স্ক্রিনে দেখাবে।

৪. সেমিকোলন (;)

সি ভাষায় প্রতিটি স্টেটমেন্ট বা নির্দেশের শেষে সেমিকোলন দেওয়া বাধ্যতামূলক। এটি কম্পাইলারকে জানায় যে একটি লাইনের কাজ শেষ হয়েছে। এটি বাংলার 'দাড়ি' (।) বা ইংরেজির 'Full stop'-এর মতো।

৫. return 0;

এটি নির্দেশ করে যে প্রোগ্রামটি সফলভাবে শেষ হয়েছে। 0 অপারেটিং সিস্টেমকে সিগন্যাল দেয় যে কোনো এরর ছাড়াই কাজটি সম্পন্ন হয়েছে।

গুরুত্বপূর্ণ (Important): সি ভাষায় ব্যবহৃত প্রতিটি ক্ষুদ্রতম একককে (যেমন: main, printf, {, }, ;) টোকেন (Token) বলা হয়। সি ভাষায় প্রধানত ৬ ধরনের টোকেন আছে: Keywords, Identifiers, Constants, Strings, Special Symbols, এবং Operators।


গুরুত্বপূর্ণ সিনট্যাক্স: কমেন্ট এবং এসকেপ সিকুয়েন্স

কোড লেখার সময় প্রায়ই আমাদের নোট রাখা প্রয়োজন হয় বা আউটপুটকে সাজাতে হয়। এর জন্য কমেন্ট এবং এসকেপ সিকুয়েন্স ব্যবহৃত হয়।

কমেন্ট (Comments)

কোডের যে অংশ কম্পাইলার অনুবাদ করে না, তাকে কমেন্ট বলে। এটি মূলত প্রোগ্রামারদের বোঝার সুবিধার জন্য ব্যবহৃত হয়। সি ভাষায় দুই ধরণের কমেন্ট আছে:
১. সিংগেল লাইন কমেন্ট: // দিয়ে শুরু হয়।
২. মাল্টি লাইন কমেন্ট: /* দিয়ে শুরু এবং */ দিয়ে শেষ হয়।

এসকেপ সিকুয়েন্স (Escape Sequence)

আউটপুট সুন্দরভাবে সাজানোর জন্য কিছু বিশেষ ক্যারেক্টার ব্যবহার করা হয় যা ব্যাকস্ল্যাশ \ দিয়ে শুরু হয়। এদের এসকেপ সিকুয়েন্স বলে।

সিকুয়েন্স কাজ
\n (New Line) কার্সরকে নতুন লাইনের শুরুতে নিয়ে যায়।
\t (Tab) এক ট্যাপ বা নির্দিষ্ট পরিমাণ ফাঁকা জায়গা তৈরি করে।
\" (Double Quote) আউটপুটে ডাবল কোটেশন প্রিন্ট করতে ব্যবহৃত হয়।
\\ (Backslash) আউটপুটে একটি ব্যাকস্ল্যাশ প্রিন্ট করতে ব্যবহৃত হয়।

উদাহরণ (Example):

printf("Name:\tRahim \nAge:\t18");

আউটপুট হবে:

Name:   Rahim
Age:    18

লক্ষ্য করো, \t এর কারণে নাম ও বয়সের আগে ফাঁকা জায়গা তৈরি হয়েছে এবং \n এর কারণে Age পরের লাইনে চলে গেছে।


প্রোগ্রাম এক্সিকিউশন বা রান করার ধাপ

আমরা যখন সি ভাষায় কোড লিখি (Source Code), কম্পিউটার কিন্তু তা সরাসরি বোঝে না। কম্পিউটার শুধু বোঝে ০ আর ১ (মেশিন ভাষা)। তাই আমাদের লেখা কোডকে মেশিনের ভাষায় রূপান্তর করতে হয়। এই প্রক্রিয়াটি কয়েকটি ধাপে সম্পন্ন হয়:

সি প্রোগ্রাম এক্সিকিউশন প্রসেস

  1. সোর্স কোড তৈরি: এডিটর ব্যবহার করে প্রোগ্রামার কোড লেখে এবং .c এক্সটেনশন দিয়ে সেভ করে (যেমন: test.c
  2. কম্পাইলিং (Compiling): কম্পাইলার সফটওয়্যার সোর্স কোডকে পড়ে এবং ভুল (Syntax Error) থাকলে তা জানায়। ভুল না থাকলে একে অবজেক্ট কোডে (.obj) রূপান্তর করে।
  3. লিংকিং (Linking): লিংকার সফটওয়্যার অবজেক্ট কোডের সাথে প্রয়োজনীয় লাইব্রেরি ফাইল (যেমন stdio.h এর কোড) যুক্ত করে একটি এক্সিকিউটেবল ফাইল (.exe) তৈরি করে।
  4. রানিং (Running): অবশেষে এই .exe ফাইলটি রান করা হয় এবং আমরা আউটপুট দেখতে পাই।

কম্পাইলার (Compiler): যে অনুবাদক প্রোগ্রাম সম্পূর্ণ সোর্স কোডকে একসাথে পড়ে, ভুল সনাক্ত করে এবং মেশিনের ভাষায় (Machine code) রূপান্তর করে, তাকে কম্পাইলার বলে।


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

রিভিশন পয়েন্ট:
- সি একটি কেস সেনসিটিভ (Case Sensitive) ভাষা। অর্থাৎ main এবং Main এক নয়। সব কি-ওয়ার্ড ছোট হাতের অক্ষরে লিখতে হয়।
- প্রতিটি স্টেটমেন্টের শেষে সেমিকোলন (;) দেওয়া বাধ্যতামূলক।
- main() ফাংশন ছাড়া সি প্রোগ্রাম রান করে না।
- হেডার ফাইল ছাড়া লাইব্রেরি ফাংশন (যেমন printf) কাজ করে না।
- সি ভাষাকে মিড লেভেল ল্যাঙ্গুয়েজ বলা হয় কারণ এটি হার্ডওয়্যার ও অ্যাপ্লিকেশন—উভয় স্তরেই কাজ করতে পারে।

সতর্কতা (Caution): কোড লেখার সময় অনেকেই void main() ব্যবহার করে, যা আধুনিক স্ট্যান্ডার্ড (ANSI C) অনুযায়ী সঠিক নয়। সবসময় int main() ব্যবহার করবে এবং শেষে return 0; লিখবে। এটি পরীক্ষকদের কাছে ভালো ইম্প্রেশন তৈরি করে।

পরিভাষা (Glossary)

পরিভাষা (Term) সংজ্ঞা (Definition)
Source Code সি বা অন্য উচ্চস্তরের ভাষায় লেখা মূল প্রোগ্রাম যা মানুষ বুঝতে পারে।
Object Code কম্পাইলার দ্বারা সোর্স কোডকে মেশিন ভাষায় রূপান্তর করার পর যা পাওয়া যায় (.obj ফাইল)।
Syntax প্রোগ্রামিং ভাষায় কোড লেখার সুনির্দিষ্ট নিয়মকানুন বা ব্যাকরণ।
Linker সিস্টেম সফটওয়্যার যা অবজেক্ট কোডের সাথে লাইব্রেরি ফাইল যুক্ত করে এক্সিকিউটেবল ফাইল (.exe) তৈরি করে।
IDE Integrated Development Environment (যেমন Code::Blocks), যেখানে কোড লেখা, কম্পাইল এবং রান করা যায়।

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

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

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

জাহিদ আইসিটি ল্যাবে বসে একটি সি প্রোগ্রাম টাইপ করল। প্রোগ্রামটিতে সে main() ফাংশন এবং printf() ফাংশন ব্যবহার করেছে। কিন্তু সে প্রোগ্রামের শুরুতে #include ব্যবহার করে কোনো ফাইল যুক্ত করেনি। ফলে প্রোগ্রামটি কম্পাইল করার সময় এরর (Error) দেখাল।

ক) সি ভাষা কে আবিষ্কার করেন?
খ) সি ভাষাকে ‘মাদার ল্যাঙ্গুয়েজ’ (Mother Language) বলা হয় কেন?
গ) উদ্দীপকে জাহিদের প্রোগ্রামটি রান না করার কারণ ব্যাখ্যা কর।
ঘ) উদ্দীপকের আলোকে একটি আদর্শ সি প্রোগ্রামের গঠন বিশ্লেষণ কর।

উত্তর

(ক) সি ভাষা ডেনিস রিচি (Dennis Ritchie) আবিষ্কার করেন।

(খ) সি ভাষাকে ‘মাদার ল্যাঙ্গুয়েজ’ বলা হয় কারণ অধিকাংশ আধুনিক প্রোগ্রামিং ভাষা (যেমন— C++, Java, Python, C# ইত্যাদি) সি ভাষার সিনট্যাক্স ও গঠনশৈলী অনুসরণ করে তৈরি হয়েছে। এছাড়া অপারেটিং সিস্টেম, কম্পাইলার এবং ডাটাবেস সিস্টেম তৈরির ক্ষেত্রে সি ভাষার মৌলিক ধারণাগুলো ভিত্তি হিসেবে কাজ করে।

(গ) উদ্দীপকে জাহিদের প্রোগ্রামটি রান না করার প্রধান কারণ হলো সে প্রোগ্রামের শুরুতে প্রয়োজনীয় হেডার ফাইল যুক্ত করেনি।
জাহিদ তার প্রোগ্রামে printf() ফাংশন ব্যবহার করেছে, যা সি ভাষার একটি লাইব্রেরি ফাংশন। এই ফাংশনটি stdio.h (Standard Input Output) নামক হেডার ফাইলের অন্তর্ভুক্ত। সি প্রোগ্রামে কোনো লাইব্রেরি ফাংশন ব্যবহার করতে হলে, সেই ফাংশনটি যে হেডার ফাইলে সংজ্ঞায়িত আছে, সেটিকে #include প্রি-প্রসেসর ডিরেকটিভের মাধ্যমে প্রোগ্রামের শুরুতে যুক্ত করতে হয়। জাহিদ যেহেতু #include <stdio.h> লাইনটি লেখেনি, তাই কম্পাইলার printf() ফাংশনটিকে চিনতে পারেনি এবং এরর প্রদর্শন করেছে।

(ঘ) উদ্দীপকে জাহিদের ভুলের মাধ্যমে সি প্রোগ্রামের গঠনের একটি গুরুত্বপূর্ণ দিক ফুটে উঠেছে। একটি আদর্শ সি প্রোগ্রামের গঠন সুনির্দিষ্ট কিছু অংশের সমন্বয়ে গঠিত হয়। নিচে তা বিশ্লেষণ করা হলো:

  1. ডকুমেন্টেশন সেকশন (Documentation Section): প্রোগ্রামের শুরুতে কমেন্ট আকারে প্রোগ্রামের নাম, লেখকের নাম বা উদ্দেশ্য লেখা হয়। যদিও এটি ঐচ্ছিক।
  2. লিংক সেকশন (Link Section): এখানে প্রয়োজনীয় হেডার ফাইলগুলো (যেমন stdio.h, math.h) যুক্ত করা হয়। জাহিদ এখানেই ভুল করেছিল।
  3. ডেফিনিশন সেকশন (Definition Section): এখানে কনস্ট্যান্ট বা সিম্বলিক কনস্ট্যান্ট ডিফাইন করা হয়।
  4. গ্লোবাল ডিক্লারেশন সেকশন (Global Declaration Section): মেইন ফাংশনের বাইরে ভেরিয়েবল বা ফাংশন ডিক্লেয়ার করা হয়, যা পুরো প্রোগ্রামে ব্যবহার করা যায়।
  5. মেইন ফাংশন সেকশন (Main Function Section): এটি সি প্রোগ্রামের অত্যাবশ্যকীয় অংশ। এখান থেকেই প্রোগ্রামের এক্সিকিউশন শুরু হয়। এর দুটি অংশ থাকে—
    * ডিক্লারেশন পার্ট (Declaration Part)
    * এক্সিকিউশন পার্ট (Execution Part)
  6. সাব-প্রোগ্রাম সেকশন (Sub-program Section): ব্যবহারকারীর তৈরি অন্যান্য ফাংশনগুলো মেইন ফাংশনের পরে লেখা হয়।

সুতরাং, একটি সি প্রোগ্রাম সঠিকভাবে কাজ করার জন্য এই গঠনশৈলী বা স্ট্রাকচার মেনে চলা জরুরি। বিশেষ করে লিংক সেকশন ও মেইন ফাংশন ছাড়া সি প্রোগ্রাম কল্পনা করা যায় না।


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

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

ক) হেডার ফাইল কী?
খ) stdio.h এর কাজ কী?
গ) শিক্ষকের উল্লিখিত ‘প্রবেশ পথ’ টির গুরুত্ব ব্যাখ্যা কর।
ঘ) উদ্দীপকের আলোকে একাধিক হেডার ফাইল ব্যবহারের প্রয়োজনীয়তা উদাহরণসহ আলোচনা কর।

উত্তর

(ক) সি প্রোগ্রামে লাইব্রেরি ফাংশনগুলোর প্রোটোটাইপ বা সংজ্ঞা যে ফাইলে সংরক্ষিত থাকে, তাকে হেডার ফাইল (Header File) বলে। এর এক্সটেনশন হলো .h

(খ) stdio.h এর পূর্ণরূপ হলো Standard Input Output Header। সি ভাষায় ইনপুট (যেমন scanf, gets) এবং আউটপুট (যেমন printf, puts) ফাংশনগুলো ব্যবহার করার জন্য এই হেডার ফাইলটি প্রোগ্রামে অন্তর্ভুক্ত করা অত্যাবশ্যক। এটি ছাড়া ইনপুট-আউটপুট ফাংশন কাজ করে না।

(গ) শিক্ষকের উল্লিখিত ‘প্রবেশ পথ’ টি হলো main() ফাংশন
সি প্রোগ্রামে main() ফাংশনের গুরুত্ব অপরিসীম কারণ:
১. এক্সিকিউশন শুরু: সি প্রোগ্রাম সবসময় main() ফাংশন থেকে কাজ শুরু করে। প্রোগ্রামে হাজার হাজার লাইন কোড থাকলেও কম্পাইলার প্রথমে main() কে খোঁজে।
২. নিয়ন্ত্রণ কেন্দ্র: এটি প্রোগ্রামের অন্যান্য ফাংশন কল করা এবং প্রোগ্রামের প্রবাহ নিয়ন্ত্রণ করার মূল কেন্দ্রবিন্দু।
৩. অত্যাবশ্যকীয়তা: একটি সি প্রোগ্রামে একাধিক ফাংশন থাকতে পারে, কিন্তু অবশ্যই একটি এবং কেবল একটি main() ফাংশন থাকতেই হবে। এটি ছাড়া প্রোগ্রাম রান করা সম্ভব নয়। তাই একে প্রোগ্রামের প্রবেশ পথ বা Entry Point বলা হয়।

(ঘ) উদ্দীপকে শিক্ষক লাইব্রেরি ফাংশন ব্যবহারের জন্য ফাইল যুক্ত করার কথা বলেছেন, যা মূলত হেডার ফাইলের দিকে ইঙ্গিত করে। একটি সি প্রোগ্রামে কাজের ধরন অনুযায়ী একাধিক হেডার ফাইলের প্রয়োজন হতে পারে।

বিভিন্ন ধরণের কাজের জন্য সি ভাষায় আলাদা আলাদা লাইব্রেরি ফাংশন রয়েছে এবং এগুলো ভিন্ন ভিন্ন হেডার ফাইলে থাকে। যেমন:
১. ইনপুট/আউটপুট: সাধারণ ইনপুট-আউটপুট কাজের জন্য #include <stdio.h> ব্যবহার করা হয়।
২. গাণিতিক কাজ: গাণিতিক জটিল হিসাব-নিকাশ (যেমন pow, sqrt, sin, cos) করার জন্য #include <math.h> ব্যবহার করতে হয়।
৩. স্ট্রিং ম্যানিপুলেশন: টেক্সট বা স্ট্রিং নিয়ে কাজ করার জন্য (যেমন strlen, strcpy) #include <string.h> প্রয়োজন হয়।

উদাহরণস্বরূপ, যদি আমরা এমন একটি প্রোগ্রাম লিখি যেখানে ব্যবহারকারীর কাছ থেকে একটি সংখ্যার ইনপুট নিয়ে তার বর্গমূল (Square Root) বের করতে হবে, তবে আমাদের দুটি হেডার ফাইল লাগবে:
* ইনপুট নেয়ার জন্য ও ফলাফল দেখানোর জন্য stdio.h
* বর্গমূল বের করার sqrt() ফাংশনের জন্য math.h

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


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

উদ্দীপক:
নিচের কোডটি লক্ষ্য কর:

#include <stdio.h>
void main() {
    int a = 10;
    /* This is a comment
       to explain the code */
    printf("Value: %d", a);
}

ক) টোকেন (Token) কী?
খ) সি ভাষাকে কেন কেস সেনসিটিভ (Case Sensitive) ভাষা বলা হয়?
গ) উদ্দীপকে ব্যবহৃত কমেন্ট (Comment) এর ধরণ ব্যাখ্যা কর।
ঘ) উদ্দীপকের কোডটি বিশ্লেষণ করে সি ভাষার বৈশিষ্ট্যগুলো চিহ্নিত কর।

উত্তর

(ক) প্রোগ্রামে ব্যবহৃত ক্ষুদ্রতম একক বা অংশকে টোকেন (Token) বলে। যেমন— কী-ওয়ার্ড, আইডেন্টিফায়ার, কনস্ট্যান্ট ইত্যাদি।

(খ) সি ভাষাকে কেস সেনসিটিভ বা অক্ষর সংবেদনশীল ভাষা বলা হয় কারণ এই ভাষায় বড় হাতের অক্ষর (Upper case) এবং ছোট হাতের অক্ষর (Lower case) এর অর্থ ভিন্ন। যেমন— সি ভাষায় Main এবং main বা Variable এবং variable এক নয়, এগুলোকে কম্পাইলার আলাদা হিসেবে গণ্য করে।

(গ) উদ্দীপকে ব্যবহৃত কমেন্টটি হলো:
/* This is a comment to explain the code */
এটি একটি মাল্টি-লাইন কমেন্ট (Multi-line Comment)

সি ভাষায় দুই ধরণের কমেন্ট ব্যবহার করা যায়:
১. সিঙ্গেল লাইন কমেন্ট: যা // দিয়ে শুরু হয় এবং এক লাইনেই শেষ হয়।
২. মাল্টি-লাইন কমেন্ট: যা /* দিয়ে শুরু হয় এবং */ দিয়ে শেষ হয়। এটি একাধিক লাইন জুড়ে বিস্তৃত হতে পারে।
উদ্দীপকে মন্তব্যটি একাধিক লাইনে লেখা হয়েছে এবং /* ... */ ব্যবহার করা হয়েছে, তাই এটি মাল্টি-লাইন কমেন্ট। প্রোগ্রাম কম্পাইল করার সময় কম্পাইলার এই অংশটি উপেক্ষা করে, এটি শুধুমাত্র প্রোগ্রামারের বোঝার সুবিধার জন্য ব্যবহৃত হয়।

(ঘ) উদ্দীপকের কোডটি বিশ্লেষণ করলে সি ভাষার বেশ কিছু গুরুত্বপূর্ণ বৈশিষ্ট্য পরিলক্ষিত হয়:

  1. স্ট্রাকচার্ড ল্যাঙ্গুয়েজ: কোডটি একটি নির্দিষ্ট কাঠামো মেনে লেখা হয়েছে। এতে লাইব্রেরি ফাংশন যুক্ত করা (include), মেইন ফাংশন এবং ব্লক {} ব্যবহার করা হয়েছে, যা সি ভাষার স্ট্রাকচার্ড বৈশিষ্ট্যকে প্রকাশ করে।
  2. মডুলারিটি ও ফাংশন নির্ভরতা: কোডটিতে main() এবং printf() ফাংশন ব্যবহার করা হয়েছে। সি হলো একটি ফাংশন নির্ভর ভাষা।
  3. কমেন্টের ব্যবহার: কোডটিতে ডকুমেন্টেশনের জন্য কমেন্ট ব্যবহার করা হয়েছে, যা সি ভাষার একটি সুবিধাজনক বৈশিষ্ট্য।
  4. ডাটা টাইপ ও ভেরিয়েবল: int a = 10; লাইনে ডাটা টাইপ ডিক্লেয়ার করা হয়েছে। সি ভাষায় ভেরিয়েবল ব্যবহারের আগে তার টাইপ বলে দিতে হয় (Static Typing)।
  5. সেমিকোলনের ব্যবহার: প্রতিটি স্টেটমেন্টের শেষে সেমিকোলন (;) ব্যবহার করা হয়েছে, যা সি ভাষার সিনট্যাক্সের নিয়ম।
  6. হেডার ফাইল: stdio.h ব্যবহার করা হয়েছে যা সি ভাষার সমৃদ্ধ লাইব্রেরির প্রমাণ।

সুতরাং, উদ্দীপকের ছোট্ট কোডটি সি ভাষার মূল গঠন এবং বৈশিষ্ট্যগুলোকে স্পষ্টভাবে ফুটিয়ে তুলেছে।

এমসিকিউ

১। সি প্রোগ্রামিং ভাষার জনক কে?

ক) ডেনিস রিচি
খ) কেন থম্পসন
গ) বিল গেটস
ঘ) চার্লস ব্যাবেজ

সঠিক উত্তর: ক) ডেনিস রিচি

ব্যাখ্যা: ১৯৭২ সালে যুক্তরাষ্ট্রের বেল ল্যাবরেটরিতে ডেনিস রিচি (Dennis Ritchie) সি প্রোগ্রামিং ভাষাটি তৈরি করেন।


২। সি ভাষা কত সালে আবিষ্কৃত হয়?

ক) ১৯৭০
খ) ১৯৭১
গ) ১৯৭২
ঘ) ১৯৭৩

সঠিক উত্তর: গ) ১৯৭২

ব্যাখ্যা: সি ভাষার প্রাথমিক কাজ শুরু হয় ১৯৭০ সালে, তবে ১৯৭২ সালে এর পূর্ণাঙ্গ রূপ প্রকাশ পায়।


৩। সি কোন ধরণের ভাষা?

ক) লো লেভেল ভাষা
খ) হাই লেভেল ভাষা
গ) মিড লেভেল ভাষা
ঘ) মেশিন ভাষা

সঠিক উত্তর: গ) মিড লেভেল ভাষা

ব্যাখ্যা: সি ভাষায় হাই লেভেল এবং লো লেভেল উভয় ভাষার বৈশিষ্ট্য বিদ্যমান থাকায় একে মিড লেভেল ভাষা (Middle Level Language) বলা হয়।


৪। সি ভাষার পূর্বসূরি ভাষা কোনটি?

ক) B
খ) BCPL
গ) ALGOL
ঘ) উপরের সবগুলো

সঠিক উত্তর: ঘ) উপরের সবগুলো

ব্যাখ্যা: সি ভাষা তৈরির আগে ALGOL, BCPL এবং B ভাষার বিকাশ ঘটেছিল, যার ওপর ভিত্তি করে সি ভাষা তৈরি হয়।


৫। ANSI এর পূর্ণরূপ কী?

ক) American National Standard Institute
খ) American National Standard International
গ) Asian National Standard Institute
ঘ) American New Standard Institute

সঠিক উত্তর: ক) American National Standard Institute

ব্যাখ্যা: সি ভাষার মান নির্ধারণকারী প্রতিষ্ঠান হলো ANSI (American National Standards Institute)।


৬। সি প্রোগ্রামের এক্সিকিউশন কোথা থেকে শুরু হয়?

ক) #include
খ) main()
গ) printf()
ঘ) void

সঠিক উত্তর: খ) main()

ব্যাখ্যা: প্রতিটি সি প্রোগ্রামে অবশ্যই একটি main() ফাংশন থাকে এবং প্রোগ্রাম রান করলে কম্পাইলার এখান থেকেই কাজ শুরু করে।


৭। সি ভাষায় স্টেটমেন্ট শেষ করতে কোন চিহ্ন ব্যবহৃত হয়?

ক) : (Colon)
খ) ; (Semicolon)
গ) , (Comma)
ঘ) . (Dot)

সঠিক উত্তর: খ) ; (Semicolon)

ব্যাখ্যা: সি ভাষায় প্রতিটি পূর্ণাঙ্গ স্টেটমেন্ট বা নির্দেশের শেষে সেমিকোলন (;) দিতে হয়, একে স্টেটমেন্ট টার্মিনেটর বলে।


৮। সি ভাষায় ব্লক বা ফাংশনের শুরু ও শেষ বোঝাতে কোনটি ব্যবহৃত হয়?

ক) ( )
খ) [ ]
গ) { }
ঘ) < >

সঠিক উত্তর: গ) { }

ব্যাখ্যা: সি ভাষায় ফাংশন বা কোড ব্লকের শুরু ও শেষ বোঝাতে কার্লি ব্রেস বা দ্বিতীয় বন্ধনী { } ব্যবহার করা হয়।


৯। stdio.h হেডার ফাইলে কোন ফাংশনটি থাকে?

ক) clrscr()
খ) pow()
গ) printf()
ঘ) strcpy()

সঠিক উত্তর: গ) printf()

ব্যাখ্যা: printf() এবং scanf() হলো স্ট্যান্ডার্ড ইনপুট-আউটপুট ফাংশন যা stdio.h হেডার ফাইলে থাকে।


১০। গাণিতিক কাজের জন্য কোন হেডার ফাইলটি প্রয়োজন?

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

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

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


১১। সি ভাষায় হেডার ফাইলের এক্সটেনশন কী?

ক) .c
খ) .cpp
গ) .h
ঘ) .txt

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

ব্যাখ্যা: সি ভাষায় হেডার ফাইল বা লাইব্রেরি ফাইলের এক্সটেনশন হিসেবে .h ব্যবহৃত হয়।


১২। getch() ফাংশনটি কোন হেডার ফাইলের অন্তর্ভুক্ত?

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

সঠিক উত্তর: খ) conio.h

ব্যাখ্যা: getch() ফাংশনটি কনসোল ইনপুট-আউটপুট বা conio.h হেডার ফাইলের অন্তর্ভুক্ত।


১৩। সি ভাষায় সিঙ্গেল লাইন কমেন্ট লিখতে কোনটি ব্যবহৃত হয়?

ক) //
খ) /*
গ) */
ঘ) <!--

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

ব্যাখ্যা: সি ভাষায় এক লাইনের মন্তব্য বা কমেন্ট লিখতে ডাবল স্ল্যাশ // ব্যবহার করা হয়।


১৪। সি ভাষায় মাল্টি-লাইন কমেন্ট শুরু হয় কোনটি দিয়ে?

ক) //
খ) /*
গ) */
ঘ) */

সঠিক উত্তর: খ) /*

ব্যাখ্যা: একাধিক লাইনের মন্তব্য লিখতে /* দিয়ে শুরু এবং */ দিয়ে শেষ করতে হয়।


১৫। সি ভাষায় বড় ও ছোট হাতের অক্ষর আলাদা অর্থ বহন করে। একে কী বলে?

ক) Case Sensitive
খ) Case Insensitive
গ) Type Sensitive
ঘ) Word Sensitive

সঠিক উত্তর: ক) Case Sensitive

ব্যাখ্যা: সি একটি কেস সেনসিটিভ ভাষা, অর্থাৎ এতে A এবং a দুটি ভিন্ন আইডেন্টিফায়ার হিসেবে গণ্য হয়।


১৬। একটি সি প্রোগ্রামের আবশ্যিক অংশ কোনটি?
i. main() ফাংশন
ii. হেডার ফাইল
iii. কমেন্ট

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

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

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

ব্যাখ্যা: সি প্রোগ্রামে main() ফাংশন অত্যাবশ্যক। লাইব্রেরি ফাংশন ব্যবহারের জন্য হেডার ফাইলও প্রয়োজন। তবে কমেন্ট বা মন্তব্য ঐচ্ছিক।


১৭। সি ভাষার বৈশিষ্ট্য হলো—
i. এটি একটি স্ট্রাকচার্ড ভাষা
ii. এটি মেশিন নির্ভর ভাষা নয় (Portable)
iii. এতে প্রচুর লাইব্রেরি ফাংশন রয়েছে

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

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

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

ব্যাখ্যা: সি একটি উচ্চ স্তরের স্ট্রাকচার্ড ভাষা, যা পোর্টেবল (এক মেশিনের কোড অন্য মেশিনে চলে) এবং সমৃদ্ধ লাইব্রেরি ফাংশনযুক্ত।


১৮। আইডেন্টিফায়ার নামকরণের ক্ষেত্রে—
i. প্রথম অক্ষর অবশ্যই বর্ণ বা আন্ডারস্কোর হতে হবে
ii. কোনো বিশেষ চিহ্ন (Special Character) ব্যবহার করা যাবে না
iii. কি-ওয়ার্ড ব্যবহার করা যাবে না

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

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

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

ব্যাখ্যা: আইডেন্টিফায়ার নামকরণে প্রথম অক্ষর বর্ণ বা _ হতে হয়, কোনো স্পেশাল ক্যারেক্টার (যেমন @, #, %) এবং রিজার্ভড কি-ওয়ার্ড ব্যবহার নিষিদ্ধ।


১৯। নিচের কোনটি সি ভাষার সঠিক ভেরিয়েবল ডিক্লারেশন?

ক) int 1number;
খ) float number 1;
গ) int number_1;
ঘ) char #name;

সঠিক উত্তর: গ) int number_1;

ব্যাখ্যা: ভেরিয়েবলের নাম সংখ্যা দিয়ে শুরু হতে পারে না এবং মাঝে স্পেস বা বিশেষ চিহ্ন থাকতে পারে না (আন্ডারস্কোর ছাড়া)। তাই number_1 সঠিক।


২০। প্রি-প্রসেসর ডিরেকটিভ শুরু হয় কোন চিহ্ন দিয়ে?

ক) &
খ) #
গ) *
ঘ) @

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

ব্যাখ্যা: সি প্রোগ্রামে প্রি-প্রসেসর ডিরেকটিভ যেমন #include, #define ইত্যাদি সবসময় হ্যাশ # চিহ্ন দিয়ে শুরু হয়।


২১। main() ফাংশন থেকে কোনো মান ফেরত না পাঠাতে চাইলে রিটার্ন টাইপ কী হবে?

ক) int
খ) float
গ) void
ঘ) char

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

ব্যাখ্যা: ফাংশন কোনো মান রিটার্ন না করলে তার রিটার্ন টাইপ হিসেবে void ব্যবহার করা হয়।


নিচের উদ্দীপকটি পড়ে ২২ ও ২৩ নং প্রশ্নের উত্তর দাও:
সুমনা সি ভাষায় একটি প্রোগ্রাম লিখল যেখানে সে pow() ফাংশন ব্যবহার করেছে। কিন্তু কম্পাইল করার সময় এরর দেখাল। শিক্ষক বললেন, একটি বিশেষ হেডার ফাইল যুক্ত করলেই সমস্যা সমাধান হবে।

২২। সুমনার প্রোগ্রামে কোন হেডার ফাইলটি যুক্ত করা প্রয়োজন?

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

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

ব্যাখ্যা: pow() একটি গাণিতিক ফাংশন যা math.h হেডার ফাইলে সংজ্ঞায়িত থাকে। তাই এটি যুক্ত করা প্রয়োজন।


২৩। উদ্দীপকের ফাংশনটি নিচের কোন কাজের জন্য ব্যবহৃত হয়?

ক) বর্গমূল নির্ণয়
খ) সূচক বা পাওয়ার নির্ণয়
গ) সাইন মান নির্ণয়
ঘ) লসাগু নির্ণয়

সঠিক উত্তর: খ) সূচক বা পাওয়ার নির্ণয়

ব্যাখ্যা: pow(base, exponent) ফাংশনটি কোনো সংখ্যার ঘাত বা পাওয়ার নির্ণয়ের জন্য ব্যবহৃত হয়।


নিচের কোডটি লক্ষ্য কর এবং ২৪ ও ২৫ নং প্রশ্নের উত্তর দাও:

#include <stdio.h>
void main() {
    int x = 5;
    printf("Value: %d", x);
}

২৪। উদ্দীপকের প্রোগ্রামে %d কী নির্দেশ করে?

ক) ক্যারেক্টার ডাটা
খ) ইন্টিজার ডাটা
গ) ফ্লোট ডাটা
ঘ) ডবল ডাটা

সঠিক উত্তর: খ) ইন্টিজার ডাটা

ব্যাখ্যা: %d হলো ফরম্যাট স্পেসিফায়ার যা ইন্টিজার বা পূর্ণসংখ্যা প্রিন্ট করার জন্য ব্যবহৃত হয়।


২৫। উদ্দীপকের প্রোগ্রামটিতে সেমিকোলন (;) ব্যবহার না করলে কী ঘটবে?

ক) ওয়ার্নিং দেখাবে
খ) সিনট্যাক্স এরর দেখাবে
গ) লজিক্যাল এরর দেখাবে
ঘ) রান টাইম এরর দেখাবে

সঠিক উত্তর: খ) সিনট্যাক্স এরর দেখাবে

ব্যাখ্যা: সি ভাষায় স্টেটমেন্ট শেষে সেমিকোলন না দেওয়া ব্যাকরণগত ভুল বা Syntax Error। এতে কম্পাইলার কোড কম্পাইল করতে পারে না।


-->