Follow Us
माध्यम चुनें / Select Medium:
Eng (English) Beng (বাংলা) Hindi (हिन्दी)
WBB • कक्षा XI • Computer Science • अध्याय 3
अनुमानित समय: 45 Mins
प्रगति: अध्ययनरत

सी प्रोग्रामिंग का परिचय

पश्चिम बंगाल उच्च माध्यमिक शिक्षा परिषद (WBCHSE) कक्षा 11 कंप्यूटर साइंस पाठ्यक्रम का तृतीय अध्याय 'सी प्रोग्रामिंग का परिचय' व्यावहारिक कोडिंग और सिस्टम्स सॉफ्टवेयर विकास का आधारभूत स्तंभ है। 1972 में अमेरिकी संस्थान एटी एंड टी बेल लैबोरेटरीज में डेनिस रिची द्वारा यूनिक्स ऑपरेटिंग सिस्टम के निर्माण हेतु विकसित सी भाषा को आधुनिक कंप्यूटर भाषाओं की जननी और आदर्श मध्य-स्तरीय भाषा माना जाता है। यह अध्याय विद्यार्थियों को सी प्रोग्राम की संपूर्ण संरचनात्मक रूपरेखा और 5-चरणीय कंपाइलेशन पाइपलाइन—प्रीप्रोसेसिंग (cpp), कंपाइलेशन (cc1), असेंबली (as), लिंकिंग (ld) और ओएस लोडिंग—की आंतरिक कार्यप्रणाली से परिचित कराता है। इसके साथ ही निष्पादित हो रहे प्रोग्राम के पांच मेमोरी सेगमेंट्स—टेक्स्ट (कोड), इनिशियलाइज़्ड डेटा, BSS (शून्य-प्रारंभिक), हीप (ऊपर प्रसार) और स्टैक (नीचे प्रसार)—का विस्तृत विश्लेषण किया गया है। अध्याय में सी भाषा के मूलभूत लेक्सिकल घटकों अर्थात टोकन्स (Tokens) के छह प्रकारों—32 एएनएसआई कीवर्ड्स, पहचानकर्ता (Identifier) नामकरण के कड़े नियम, स्थिरांक (पूर्णांक, फ्लोट, वर्ण एवं एस्केप सीक्वेंस), नल-टर्मिनेटेड स्ट्रिंग्स, ऑपरेटर्स और विशेष प्रतीकों—का गहन अध्ययन कराया गया है। साथ ही प्रिमिटिव डेटा प्रकार (char, int, float, double, void), टाइप क्वालिफायर (const, volatile), चार स्टोरेज क्लासेस (auto, register, static, extern), stdio.h के फॉर्मेटेड इनपुट/आउटपुट फ़ंक्शंस (printf, scanf एवं एड्रेस-ऑफ़ ऑपरेटर &), सुरक्षित fgets(), 15-स्तरीय ऑपरेटर वरीयता पदानुक्रम और टाइपकास्टिंग का सांगोपांग विवरण प्रस्तुत किया गया है।

यह अध्याय क्यों महत्वपूर्ण है

अनेक आधुनिक उच्च-स्तरीय भाषाओं के आगमन के बावजूद, सी भाषा आज भी ऑपरेटिंग सिस्टम कर्नल (लिनक्स, विंडोज, मैकओएस), डेटाबेस इंजन (माईएसक्यूएल, ओरेकल), एम्बेडेड माइक्रोकंट्रोलर्स और हाई-परफॉर्मेंस गेमिंग इंजनों की रीढ़ बनी हुई है। सी भाषा का अध्ययन विद्यार्थियों को सीधे कंप्यूटर मेमोरी, सीपीयू रजिस्टर्स और मेमोरी एड्रेस के आंतरिक व्यवहार को समझने का पारदर्शी अवसर प्रदान करता है। WBCHSE बोर्ड परीक्षा के सैद्धांतिक और व्यावहारिक दोनों भागों में 10 से 12 अंक सुनिश्चित करने तथा कक्षा 12 के उन्नत डेटा स्ट्रक्चर्स और एल्गोरिदम्स को समझने के लिए सी भाषा का बुनियादी ज्ञान नितांत अनिवार्य है।

अध्याय रूपरेखा एवं प्रगति

1 मॉड्यूल 1: सी भाषा की उत्पत्ति, ऐति...
2 मॉड्यूल 2: सी कंपाइलेशन पाइपलाइन के...
3 मॉड्यूल 3: सी टोकन्स, कैरेक्टर सेट,...
4 मॉड्यूल 4: डेटा प्रकार, क्वालिफायर्...
5 मॉड्यूल 5: मानक इनपुट एवं आउटपुट फ़...
6 मॉड्यूल 6: ऑपरेटर्स, व्यंजक मूल्यां...

सम्पूर्ण सैद्धांतिक एवं वैचारिक अध्ययन

मॉड्यूल 1: सी भाषा की उत्पत्ति, ऐतिहासिक विकास एवं सी प्रोग्राम की संरचना

1.1 सी भाषा की ऐतिहासिक पृष्ठभूमि एवं उत्पत्ति

सी प्रोग्रामिंग भाषा का विकास 1969 से 1973 के मध्य एटी एंड टी बेल लैबोरेटरीज (AT&T Bell Laboratories) में कंप्यूटर वैज्ञानिक डेनिस रिची (Dennis Ritchie) द्वारा किया गया था। इसका प्राथमिक उद्देश्य यूनिक्स (Unix) ऑपरेटिंग सिस्टम के कर्नल को पुन: लिखना था, जो उस समय हार्डवेयर-विशिष्ट असेंबली भाषा में था। सी भाषा ने यूनिक्स को पोर्टेबल (अन्य कंप्यूटरों पर आसानी से चलने योग्य) बना दिया।

सी भाषा का विकास निम्नलिखित ऐतिहासिक अनुक्रम से हुआ:

  • ALGOL 60 (1960): ब्लॉक-संरचित प्रोग्रामिंग और औपचारिक व्याकरण का सूत्रपात।
  • CPL (Combined Programming Language, 1963): अत्यंत शक्तिशाली किंतु कंपाइलर निर्माण में अत्यधिक जटिल भाषा।
  • BCPL (Basic Combined Programming Language, 1967): कैम्ब्रिज के मार्टिन रिचर्ड्स द्वारा विकसित सरल और टाइप-रहित भाषा।
  • B भाषा (1969): बेल लैब्स में केन थॉम्पसन द्वारा यूनिक्स के प्रारंभिक विकास हेतु निर्मित सरल भाषा।
  • C भाषा (1972): डेनिस रिची ने B भाषा में डेटा प्रकार (Data Types), संरचनाएं और पॉइंटर्स जोड़कर आधुनिक सी भाषा की रचना की।
  • ANSI C (C89/C90): 1989 में अमेरिकन नेशनल स्टैंडर्ड्स इंस्टीट्यूट द्वारा सी का वैश्विक मानक निर्धारित किया गया।
1.2 सी को "मध्य-स्तरीय भाषा" (Middle-Level Language) क्यों कहा जाता है?
मध्य-स्तरीय भाषा का औचित्य: सी भाषा उच्च-स्तरीय भाषाओं की भांति मानव-पठनीय संरचित नियंत्रण (लूप्स, फ़ंक्शंस, कंडीशनल ब्लॉक्स) प्रदान करती है, और साथ ही निम्न-स्तरीय भाषाओं की भांति सीधे भौतिक मेमोरी पते (Pointers), बिटवाइज़ संक्रियाएं तथा सीपीयू रजिस्टर्स को नियंत्रित करने की शक्ति देती है। उच्च और निम्न दोनों स्तरों के इस अनूठे समन्वय के कारण सी को मध्य-स्तरीय भाषा कहा जाता है।
1.3 एक मानक सी प्रोग्राम के संरचनात्मक भाग

एक सुव्यवस्थित सी प्रोग्राम में मुख्य रूप से छह अनुभाग होते हैं:

  1. दस्तावेज़ीकरण अनुभाग (Documentation Section): प्रोग्राम के उद्देश्य, लेखक और नियमों से संबंधित टिप्पणियां (Comments)। सी में बहु-पंक्ति टिप्पणी (`/* टिप्पणी */`) और C99 एकल-पंक्ति टिप्पणी (`// टिप्पणी`) मान्य हैं। कंपाइलर प्रीप्रोसेसिंग के दौरान टिप्पणियों को हटा देता है।
  2. लिंक अनुभाग (प्रीप्रोसेसर निर्देश): हेडर फ़ाइलों को शामिल करने के निर्देश (`#include <stdio.h>`, `#include <math.h>`), जो मानक लाइब्रेरी फ़ंक्शंस के प्रोटोटाइप प्रदान करते हैं।
  3. परिभाषा अनुभाग (Definition Section): `#define` निर्देश द्वारा प्रतीकात्मक स्थिरांक घोषित करना (`#define PI 3.14159`)।
  4. ग्लोबल घोषणा अनुभाग: सभी फ़ंक्शंस में प्रयुक्त होने वाले ग्लोबल चरों और यूज़र-डिफ़ाइंड फ़ंक्शंस के प्रोटोटाइप की घोषणा।
  5. मुख्य फ़ंक्शन अनुभाग (`main()`): प्रत्येक सी प्रोग्राम का अनिवार्य प्रवेश द्वार (Entry Point)। प्रोग्राम का निष्पादन सदैव `main()` से ही प्रारंभ होता है। आधुनिक ANSI C में इसे `int main(void)` घोषित कर अंत में ऑपरेटिंग सिस्टम को सफलता का संकेत देने हेतु `return 0;` लिखा जाता है।
  6. उप-प्रोग्राम अनुभाग (यूज़र-डिफ़ाइंड फ़ंक्शंस): प्रोग्राम की कार्यप्रणाली को मॉड्यूलर बनाने हेतु `main()` के बाहर परिभाषित किए गए अन्य स्वतंत्र फ़ंक्शंस।

मॉड्यूल 2: सी कंपाइलेशन पाइपलाइन के 5 चरण एवं रनटाइम मेमोरी संरचना

2.1 सी कंपाइलेशन पाइपलाइन के पांच चरण

सी भाषा में मानव द्वारा लिखे गए स्रोत कोड को कंप्यूटर द्वारा निष्पादन योग्य मशीन कोड में बदलने के लिए पांच सुव्यवस्थित चरण होते हैं:

पाइपलाइन चरणसक्रिय टूलइनपुट फ़ाइलआउटपुट फ़ाइलप्रमुख कार्य
1. प्रीप्रोसेसिंगप्रीप्रोसेसर (`cpp`)`file.c``file.i`टिप्पणियों को हटाना, `#include` हेडर फ़ाइलों का कोड जोड़ना, `#define` मैक्रोज़ का विस्तार और कंडीशनल प्रीप्रोसेसिंग।
2. कंपाइलेशनकंपाइलर (`cc1` / `gcc`)`file.i``file.s`व्याकरण, सिंटैक्स और टाइप चेकिंग करना, कोड को अनुकूलित कर असेंबली भाषा (Assembly Code) में अनुवाद करना।
3. असेंबलीअसेम्बलर (`as`)`file.s``file.o` / `file.obj`असेंबली निर्देशों को सीधे मशीन कोड में बदलकर रीलोकेटेबल ऑब्जेक्ट कोड तैयार करना।
4. लिंकिंगलिंकर (`ld`)`file.o` + लाइब्रेरीज़`file.exe` / `a.out`लाइब्रेरी फ़ंक्शंस (जैसे `printf`) के अनसुलझे संदर्भों को जोड़ना और स्वतंत्र निष्पादन योग्य फ़ाइल बनाना।
5. लोडिंगओएस कर्नल लोडर`file.exe`रैम में प्रक्रिया निष्पादनवर्चुअल मेमोरी आवंटित करना, डिस्क से कोड को रैम में लोड करना और `_start` द्वारा `main()` को सक्रिय करना।
2.2 रनिंग प्रोसेस की वर्चुअल मेमोरी संरचना (Memory Layout)

जब ऑपरेटिंग सिस्टम किसी सी प्रोग्राम को रैम में निष्पादित करता है, तो उसकी मेमोरी को पांच विशिष्ट सेगमेंट्स में विभाजित किया जाता है:

  • 1. टेक्स्ट सेगमेंट (Text / Code Segment): सबसे निचले मेमोरी पते पर स्थित होता है। इसमें प्रोग्राम के कंपाइल किए गए मशीन निर्देश होते हैं। कोड में दुर्घटनावश बदलाव रोकने हेतु यह केवल-पठनीय (Read-Only) होता है।
  • 2. इनिशियलाइज़्ड डेटा सेगमेंट (Data Segment): प्रोग्राम में घोषित वे सभी ग्लोबल और स्टैटिक चर जिनका प्रारंभिक मान पहले से तय होता है (उदा. `int count = 10; static float rate = 5.5;`)।
  • 3. अन-इनिशियलाइज़्ड डेटा सेगमेंट (BSS Segment): "Block Started by Symbol" का संक्षिप्त रूप। वे सभी ग्लोबल और स्टैटिक चर जिन्हें कोई प्रारंभिक मान नहीं दिया जाता (उदा. `int arr[100];`)। प्रोग्राम लोड होते ही ओएस इसे स्वचालित रूप से शून्य (`0`) से भर देता है।
  • 4. हीप सेगमेंट (Heap Segment): रनटाइम पर डायनामिक मेमोरी आवंटन (`malloc()`, `calloc()`) के लिए प्रयुक्त होता है। यह BSS के ऊपर से उच्च मेमोरी पते की ओर (ऊपर) बढ़ता है।
  • 5. स्टैक सेगमेंट (Stack Segment): सबसे उच्च मेमोरी पते से प्रारंभ होकर निम्न मेमोरी पते की ओर (नीचे) बढ़ता है। इसमें स्थानीय चर, फ़ंक्शन पैरामीटर और एक्टिवेशन रिकॉर्ड्स (LIFO क्रम में) संग्रहीत होते हैं।

मॉड्यूल 3: सी टोकन्स, कैरेक्टर सेट, कीवर्ड्स, पहचानकर्ता एवं स्थिरांक

3.1 सी कैरेक्टर सेट (Character Set)

सी भाषा में कोड लिखने हेतु स्वीकृत बुनियादी वर्ण समूह निम्नलिखित हैं:

  • वर्णमाला: अंग्रेजी वर्णमाला के बड़े अक्षर `A`–`Z` और छोटे अक्षर `a`–`z` (सी भाषा केस-संवेदनशील है)।
  • अंक: दशमलव अंक `0` से `9` तक (कुल 10 अंक)।
  • विशेष प्रतीक: `+ - * / % = < > ! & | ^ ~ . , ; : ? ' " ( ) [ ] { } _ # \`।
  • रिक्त स्थान वर्ण: स्पेस बार, क्षैतिज टैब (` `), न्यूलाइन (` `), कैरिज रिटर्न (` `)।
3.2 सी टोकन्स (C Tokens) की औपचारिक परिभाषा एवं वर्गीकरण

एक सी प्रोग्राम की सबसे छोटी अविभाज्य एवं अर्थपूर्ण इकाई को टोकन कहा जाता है। लेक्सिकल विश्लेषण के दौरान कंपाइलर स्रोत कोड को टोकन्स की धारा में विभाजित करता है। सी टोकन्स 6 प्रकार के होते हैं:

  1. कीवर्ड्स (Keywords): पूर्वनिर्धारित आरक्षित शब्द जिनका अर्थ स्थिर और निश्चित होता है।
  2. पहचानकर्ता (Identifiers): चरों, फ़ंक्शंस या सरणियों (Arrays) को दिया गया उपयोगकर्ता-परिभाषित नाम।
  3. स्थिरांक (Constants / Literals): वे मान जो प्रोग्राम निष्पादन के दौरान कभी नहीं बदलते।
  4. स्ट्रिंग्स (Strings): दोहरे उद्धरण चिह्नों (`" "`) में बंद अक्षरों का समूह, जो नल वर्ण (`'\0'`) पर समाप्त होता है।
  5. ऑपरेटर्स (Operators): गणितीय, संबंधपरक या तार्किक कार्य करने वाले विशेष प्रतीक।
  6. विशेष प्रतीक (Special Symbols / Punctuators): कोष्ठक `( )`, बड़े कोष्ठक `[ ]`, मंझले कोष्ठक `{ }`, अल्पविराम `,`, अर्धविराम `;` आदि।
3.3 32 मानक एएनएसआई सी कीवर्ड्स

ANSI C (C89) मानक में कुल 32 कीवर्ड्स आरक्षित हैं। इन्हें सदैव छोटे अक्षरों (lowercase) में लिखा जाता है और इन्हें पहचानकर्ता के रूप में उपयोग करना पूर्णतः वर्जित है:

श्रेणीकीवर्ड्सउपयोग का उद्देश्य
डेटा प्रकार`char`, `int`, `float`, `double`, `void`मेमोरी आकार और उपपत्ति का प्रकार तय करना।
टाइप मॉडिफायर्स`signed`, `unsigned`, `short`, `long`पूर्णांक की सीमा या चिन्ह में बदलाव।
शाखा नियंत्रण`if`, `else`, `switch`, `case`, `default`शर्त आधारित निर्णय लेना।
लूप नियंत्रण`for`, `while`, `do`पुनरावृत्ति संपन्न करना।
जंप निर्देश`break`, `continue`, `goto`, `return`प्रवाह को बीच में मोड़ना या समाप्त करना।
स्टोरेज क्लासेस`auto`, `register`, `static`, `extern`चर का कार्यक्षेत्र, जीवनकाल और मेमोरी स्थान।
कस्टम डेटा प्रकार`struct`, `union`, `enum`, `typedef`मिश्रित संरचनाएं व नया नाम देना।
टाइप क्वालिफायर्स`const`, `volatile`अपरिवर्तनीयता या हार्डवेयर अनुकूलन।
कंपाइलर ऑपरेटर`sizeof`बाइट आकार ज्ञात करने वाला ऑपरेटर।
3.4 पहचानकर्ता (Identifier) नामकरण के नियम
  • मान्य वर्ण: केवल अक्षर (`A-Z`, `a-z`), अंक (`0-9`) और अंडरस्कोर (`_`) मान्य हैं।
  • प्रथम वर्ण का नियम: नाम सदैव किसी अक्षर या अंडरस्कोर से ही प्रारंभ होना चाहिए; अंक से प्रारंभ नहीं हो सकता (उदा. `1num` अवैध है; `num1` या `_count` वैध हैं)।
  • केस संवेदनशीलता: बड़े और छोटे अक्षरों का अलग अर्थ होता है; जैसे `total`, `Total` और `TOTAL` तीन अलग-अलग चर हैं।
  • वर्जित तत्व: कोई रिक्त स्थान (Space), विराम चिह्न या विशेष प्रतीक (`@`, `$`, `#`, `-`) और 32 आरक्षित कीवर्ड्स का नाम के रूप में उपयोग नहीं किया जा सकता।
  • महत्वपूर्ण लंबाई: मानक सी में पहचानकर्ता के प्रथम 31 वर्ण विशिष्ट माने जाते हैं।
3.5 स्थिरांक एवं एस्केप सीक्वेंस
  • पूर्णांक स्थिरांक: दशमलव (`45`), अष्टक (प्रारंभ में `0`, जैसे `075` = $61_{10}$), षोडश आधारी (प्रारंभ में `0x`, जैसे `0x2A` = $42_{10}$)।
  • फ्लोटिंग-पॉइंट स्थिरांक: दशमलव भिन्न (`3.1415`) या वैज्ञानिक घातांक संकेतन (`1.5e-3` = $1.5 imes 10^{-3}$)।
  • वर्ण स्थिरांक (Character Constant): एकल उद्धरण चिह्नों में बंद एक अकेला वर्ण (`'A'`, `'9'`)। मेमोरी में इसका ASCII पूर्णांक मान (जैसे `'A'` का 65) जमा होता है। यह 1 बाइट लेता है।
  • एस्केप सीक्वेंस: बैकस्लैश (`\`) से प्रारंभ होने वाले गैर-मुद्रण योग्य वर्ण: `\n` (नई पंक्ति), `\t` (टैब), `\0` (नल वर्ण), `\\` (बैकस्लैश), `\'` और `\"`।
  • स्ट्रिंग स्थिरांक: दोहरे उद्धरण चिह्नों में बंद वर्णों की श्रृंखला (`"Hello"`), जिसके अंत में कंपाइलर स्वचालित रूप से नल वर्ण `'\0'` जोड़ता है। अतः `"A"` मेमोरी में 2 बाइट्स लेता है (`'A'` और `'\0'`), जबकि `'A'` लेता है 1 बाइट।

मॉड्यूल 4: डेटा प्रकार, क्वालिफायर्स, चर घोषणा एवं स्टोरेज क्लासेस

4.1 सी भाषा के प्रिमिटिव डेटा प्रकार एवं उनकी मेमोरी सीमा
डेटा प्रकारमेमोरी आकारबिट संख्याफॉर्मेट विनिर्देशकटू-ज़ कॉम्प्लिमेंट मान सीमा
`char` (चिन्हित)1 बाइट8`%c`$-128$ से $+127$ ($-2^7$ से $2^7 - 1$)
`unsigned char`1 बाइट8`%c`$0$ से $255$ ($0$ से $2^8 - 1$)
`short int`2 बाइट्स16`%hd`$-32,768$ से $+32,767$
`unsigned short`2 बाइट्स16`%hu`$0$ से $65,535$
`int` (32-बिट आर्किटेक्चर)4 बाइट्स32`%d` / `%i`$-2,147,483,648$ से $+2,147,483,647$
`unsigned int`4 बाइट्स32`%u`$0$ से $4,294,967,295$
`long int`4 या 8 बाइट्स32 / 64`%ld`$-2^{31}$ से $2^{31} - 1$ (या $-2^{63}$ से $2^{63}-1$)
`long long int`8 बाइट्स64`%lld`$-9.22 imes 10^{18}$ से $+9.22 imes 10^{18}$
`float` (एकल परिशुद्धता)4 बाइट्स32`%f`$\pm 3.4 imes 10^{-38}$ से $\pm 3.4 imes 10^{+38}$ (6 दशमलव अंक)
`double` (दोहरी परिशुद्धता)8 बाइट्स64`%lf`$\pm 1.7 imes 10^{-308}$ से $\pm 1.7 imes 10^{+308}$ (15 दशमलव अंक)
`void`0 बाइट0लागू नहींमान-रहित; फ़ंक्शन का रिटर्न न होना या जेनेरिक पॉइंटर
4.2 टाइप क्वालिफायर्स: const एवं volatile
  • `const`: चर को केवल-पठनीय (Read-Only) बनाता है; प्रोग्राम में इसका मान बदलने का प्रयास करने पर कंपाइलर एरर देता है (`const float PI = 3.14;`)।
  • `volatile`: कंपाइलर को सूचित करता है कि इस चर का मान बाहरी हार्डवेयर या इंटरप्ट द्वारा कभी भी बदल सकता है, अतः इसे सीपीयू रजिस्टर में कैश करने के बजाय हर बार सीधे रैम से पढ़ा जाए।
4.3 चार स्टोरेज क्लासेस (Storage Classes)

सी भाषा में स्टोरेज क्लास चर के चार प्रमुख लक्षणों को नियंत्रित करती है: मेमोरी स्थान, डिफ़ॉल्ट मान, कार्यक्षेत्र (Scope) और जीवनकाल (Lifetime):

स्टोरेज क्लासकीवर्डमेमोरी स्थानडिफ़ॉल्ट मानकार्यक्षेत्र (Scope)जीवनकाल (Lifetime)
Automatic`auto`रनटाइम कॉल स्टैकअनिर्धारित कचरा मान (Garbage)स्थानीय ब्लॉक `{ }` के अंदरब्लॉक समाप्ति तक
Register`register`सीपीयू रजिस्टरअनिर्धारित कचरा मान (Garbage)स्थानीय ब्लॉक `{ }` के अंदरब्लॉक समाप्ति तक
Static`static`डेटा / BSS सेगमेंटसुनिश्चित शून्य (`0` या `NULL`)ब्लॉक या फ़ाइल तक सीमितसंपूर्ण प्रोग्राम निष्पादन तक स्थायी
External`extern`डेटा / BSS सेगमेंटसुनिश्चित शून्य (`0` या `NULL`)सभी लिंक्ड फ़ाइलों में ग्लोबलसंपूर्ण प्रोग्राम निष्पादन तक स्थायी

महत्वपूर्ण तकनीकी बिंदु:

  • `register` चर सीधे सीपीयू में स्थित होने के कारण इस पर एड्रेस-ऑफ़ ऑपरेटर `&` का प्रयोग नहीं किया जा सकता (`&reg_var` कंपाइल एरर देता है)।
  • फ़ंक्शन के अंदर घोषित `static` स्थानीय चर फ़ंक्शन समाप्त होने के बाद भी अपना मान बनाए रखता है और पूरे प्रोग्राम में केवल एक बार इनिशियलाइज़ होता है।

मॉड्यूल 5: मानक इनपुट एवं आउटपुट फ़ंक्शंस (stdio.h)

5.1 printf() द्वारा फॉर्मेटेड आउटपुट प्रदर्शन

`<stdio.h>` हेडर फ़ाइल में घोषित `printf()` फ़ंक्शन स्क्रीन पर फॉर्मेटेड टेक्स्ट प्रदर्शित करता है:

int printf(const char *format, ...);

रिटर्न मान: यह स्क्रीन पर सफलतापूर्वक मुद्रित कुल वर्णों की संख्या रिटर्न करता है।

फॉर्मेट विनिर्देशक संरचना: `%[flags][width][.precision]type`

  • फ़ील्ड विड्थ (Width): न्यूनतम कितने कॉलम में मान छपेगा (जैसे `%6d` से `42` छापने पर आगे 4 स्पेस जोड़कर `____42` बनेगा)।
  • परिशुद्धता (.precision): दशमलव के बाद अंकों की संख्या (जैसे `%.2f` से `3.14159` बन जाता है `3.14`)। स्ट्रिंग हेतु अधिकतम वर्ण सीमा।
  • फ्लैग्स: `-` (बायाँ संरेखण / Left Align), `0` (स्पेस के स्थान पर शून्य भरना), `+` (धनात्मक चिन्ह का स्पष्ट प्रदर्शन)।
5.2 scanf() द्वारा फॉर्मेटेड इनपुट एवं & ऑपरेटर

कीबोर्ड से डेटा इनपुट लेने हेतु `scanf()` का उपयोग किया जाता है:

int scanf(const char *format, ...);

एड्रेस-ऑफ़ ऑपरेटर (&) की अनिवार्यता: सी फ़ंक्शंस में मान प्रतिलिपि (Call by Value) के रूप में पास होते हैं। `scanf` इनपुट किए गए मान को सीधे कॉलर चर के मेमोरी स्थान पर लिख सके, इसके लिए चर के नाम के पूर्व मेमोरी एड्रेस ऑपरेटर `&` (जैसे `&num`) लगाना अनिवार्य है।

स्ट्रिंग ऐरे का अपवाद: सी भाषा में ऐरे का नाम स्वयं उसके प्रथम तत्व के मेमोरी पॉइंटर को दर्शाता है, अतः स्ट्रिंग इनपुट में `&` नहीं लगाया जाता (`scanf("%s", str)` पर्याप्त है)।

5.3 अन-फॉर्मेटेड I/O फ़ंक्शंस: कैरेक्टर एवं स्ट्रिंग ऑपरेशन्स
  • `getchar()`: इनपुट से एक अकेला वर्ण पढ़कर उसका ASCII पूर्णांक मान रिटर्न करता है।
  • `putchar(c)`: स्क्रीन पर एक वर्ण प्रदर्शित करता है।
  • `gets()` का गंभीर खतरा एवं बफ़र ओवरफ़्लो: `gets()` फ़ंक्शन इनपुट की लंबाई की जांच किए बिना ऐरे में डेटा भरता है। क्षमता से अधिक डेटा देने पर यह स्टैक फ्रेम को नष्ट कर देता है (Buffer Overflow)। अतः आधुनिक C11 मानक में इसे पूर्णतः हटा दिया गया है।
  • सुरक्षित `fgets()`: बफ़र सीमा तय करके सुरक्षित इनपुट लेने का मानक फ़ंक्शन: `fgets(str, sizeof(str), stdin)`।
  • `puts(str)`: स्ट्रिंग प्रदर्शित कर अंत में स्वचालित रूप से नई पंक्ति (`\n`) बनाता है।

मॉड्यूल 6: ऑपरेटर्स, व्यंजक मूल्यांकन, टाइप रूपांतरण एवं वरीयता पदानुक्रम

6.1 सी भाषा के विभिन्न ऑपरेटर्स का वर्गीकरण
  1. अंकगणितीय ऑपरेटर्स: जोड़ (`+`), घटाव (`-`), गुणा (`*`), भाग (`/`), और मापांक या शेषफल (`%`)। ध्यान रहे कि `%` ऑपरेटर के दोनों ऑपरेंड्स का पूर्णांक होना अनिवार्य है; फ्लोट संख्याओं में `%` लगाने से कंपाइल एरर आता है।
  2. संबंधपरक (Relational) ऑपरेटर्स: सत्य होने पर `1` तथा असत्य होने पर `0` देते हैं: `==`, `!=`, `<`, `<=`, `>`, `>=`।
  3. तार्किक (Logical) ऑपरेटर्स: शॉर्ट-सर्किट विधि से हल होते हैं: `&&` (AND), `||` (OR), `!` (NOT)।
  4. बिटवाइज़ ऑपरेटर्स: बाइनरी बिट स्तर पर संक्रिया करते हैं: बिटवाइज़ AND (`&`), OR (`|`), XOR (`^`), वन्स कॉम्प्लिमेंट (`~`), लेफ्ट शिफ्ट (`<<`, मान को $2^k$ से गुणा), राइट शिफ्ट (`>>`, मान को $2^k$ से भाग)।
  5. असाइनमेंट ऑपरेटर्स: सरल आवंटन (`=`) एवं संयुक्त रूप: `+=`, `-=`, `*=`, `/=`, `%=`, `&=`, `|=`, `^=`, `<<=`, `>>=` (दाएँ से बाएँ हल होते हैं)।
  6. इंक्रीमेंट / डिक्रीमेंट: प्री-इंक्रीमेंट (`++x`, पहले बढ़ता है फिर उपयोग होता है), पोस्ट-इंक्रीमेंट (`x++`, पहले उपयोग होता है फिर बढ़ता है)।
  7. कंडीशनल (टर्नरी) ऑपरेटर: `शर्त ? सत्य_मान : असत्य_मान`। तीन ऑपरेंड्स वाला एकमात्र ऑपरेटर।
  8. विशेष ऑपरेटर्स: `sizeof` (बाइट आकार निकालना), कॉमा ऑपरेटर `,` (बाएँ से दाएँ चलकर सबसे दायाँ मान देना)।
6.2 15-स्तरीय ऑपरेटर वरीयता एवं साहचर्य सারণी
वरीयता स्तरऑपरेटर श्रेणीऑपरेटर्सदिशा (Associativity)
1 (सर्वोच्च)पोस्टफिक्स / समूहन`()` `[]` `->` `.` `x++` `x--`बाएँ से दाएँ
2यूनरी ऑपरेटर्स`++x` `--x` `+` `-` `!` `~` `(type)` `*` `&` `sizeof`दाएँ से बाएँ
3गुणा एवं भाग`*` `/` `%`बाएँ से दाएँ
4जोड़ एवं घटाव`+` `-`बाएँ से दाएँ
5बिटवाइज़ शिफ्ट`<<` `>>`बाएँ से दाएँ
6संबंधपरक असमानता`<` `<=` `>` `>=`बाएँ से दाएँ
7समानता तुलना`==` `!=`बाएँ से दाएँ
8बिटवाइज़ AND`&`बाएँ से दाएँ
9बिटवाइज़ XOR`^`बाएँ से दाएँ
10बिटवाइज़ OR`|`बाएँ से दाएँ
11तार्किक AND`&&`बाएँ से दाएँ
12तार्किक OR`||`बाएँ से दाएँ
13कंडीशनल टर्नरी`? :`दाएँ से बाएँ
14असाइनमेंट`=` `+=` `-=` `*=` `/=` `%=` आदिदाएँ से बाएँ
15 (निम्नतम)कॉमा ऑपरेटर`,`बाएँ से दाएँ
6.3 टाइप रूपांतरण: अंतर्निहित पदोन्नति बनाम प्रत्यक्ष टाइपकास्टिंग
  • अंतर्निहित रूपांतरण (Implicit Promotion / Coercion): मिश्रित प्रकार के व्यंजकों में कंपाइलर स्वचालित रूप से छोटे डेटा प्रकार को बड़े प्रकार में बदल देता है (जैसे `5 / 2.0` में पूर्णांक `5` बदलकर `5.0` हो जाता है और परिणाम `2.5` आता है)।
  • प्रत्यक्ष टाइपकास्टिंग (Explicit Casting): प्रोग्रामर द्वारा जबरन डेटा प्रकार बदलना: `(type) expression`। जैसे `(float)15 / 4` लिखने से दशमलव परिणाम `3.75` प्राप्त होता है, अन्यथा पूर्णांक भाग से केवल `3` आता।

प्रोग्रामिंग सिंटेक्स, स्टेटमेंट्स एवं भाषा अनुवादक नियम

चिन्हित टू-ज़ कॉम्प्लिमेंट पूर्णांक सीमा सूत्र
$$R_{signed} = [-2^{n-1}, +2^{n-1} - 1]$$
अचिन्हित (Unsigned) पूर्णांक सीमा सूत्र
$$R_{unsigned} = [0, 2^n - 1]$$
बिटवाइज़ लेफ्ट शिफ्ट गुणन समतुल्यता
$$x ll k = x times 2^k$$
बिटवाइज़ राइट शिफ्ट विभाजन समतुल्यता
$$x gg k = lfloor frac{x}{2^k} rfloor$$
बिटवाइज़ वन्स कॉम्प्लिमेंट संबंध
~x = -(x + 1)
कंपाइल-टाइम ऐरे तत्व गणना सूत्र
$$N_{elements} = frac{sizeof(arr)}{sizeof(arr[0])}$$

अवधारणात्मक हल उदाहरण एवं अनुप्रयोग (Solved Examples)

उदाहरण 1
विस्तृत समाधान / उत्तर:
सी कंपाइलेशन के 5 चरणों का विस्तृत विश्लेषण:

1. चरण 1: प्रीप्रोसेसिंग (Preprocessing):
- टूल: सी प्रीप्रोसेसर (`cpp` या `gcc -E`)।
- इनपुट: `sum.c` (मानव-लिखित स्रोत फ़ाइल)।
- आउटपुट: `sum.i` (विस्तारित फ़ाइल)।
- कार्य: सभी टिप्पणियां हटा दी जाती हैं; `#include <stdio.h>` का पूरा कोड शामिल किया जाता है; तथा `#define BONUS 500` मैक्रो के स्थान पर सीधे `500` लिख दिया जाता है।

2. चरण 2: कंपाइलेशन (Compilation):
- टूल: कंपाइलर (`cc1` या `gcc -S`)।
- इनपुट: `sum.i`।
- आउटपुट: `sum.s` (असेंबली भाषा फ़ाइल)।
- कार्य: व्याकरण व डेटा प्रकार की जांच कर सी कोड को प्रोसेसर के असेंबली निर्देशों (`movl`, `addl`) में बदला जाता है।

3. चरण 3: असेंबली (Assembly):
- टूल: असेम्बलर (`as` या `gcc -c`)।
- इनपुट: `sum.s`।
- आउटपुट: `sum.o` / `sum.obj` (मशीन ऑब्जेक्ट फ़ाइल)।
- कार्य: असेंबली कोड को बाइनरी मशीन कोड में बदला जाता है। बाहरी फ़ंक्शंस (जैसे `printf`) के लिंक अभी अधूरे रहते हैं।

4. चरण 4: लिंकिंग (Linking):
- टूल: लिंकर (`ld` या `gcc`)।
- इनपुट: `sum.o`, मानक लाइब्रेरीज़ (`libc.a`) एवं स्टार्टअप कोड (`crt0.o`)।
- आउटपुट: `sum.exe` (विंडोज) या `a.out` (लिनक्स)।
- कार्य: लिंकर बाहरी लाइब्रेरीज़ को जोड़कर स्वतंत्र निष्पादन योग्य बाइनरी फ़ाइल बनाता है।

5. चरण 5: लोडिंग (Loading):
- टूल: ओएस कर्नल लोडर।
- कार्य: डिस्क से बाइनरी फ़ाइल को रैम में लोड कर वर्चुअल मेमोरी सेगमेंट्स बनाता है और `main()` का निष्पादन प्रारंभ करता है।
उदाहरण 2
विस्तृत समाधान / उत्तर:
भाग A: sizeof द्वारा मेमोरी आकार:
- `signed char` और `unsigned char` दोनों मेमोरी में ठीक 1 बाइट (8 बिट्स) स्थान लेते हैं।
- `sizeof(x) = 1 byte`, `sizeof(y) = 1 byte`।

भाग B: इंक्रीमेंट एवं टू-ज़ कॉम्प्लिमेंट ओवरफ़्लो:
1. चिन्हित चर `x`:
- प्रारंभिक मान: $127_{10} = 01111111_2$ (8-बिट चिन्हित संख्या का अधिकतम मान)।
- `x++` करने पर बाइनरी जोड़: $01111111_2 + 1 = 10000000_2$।
- टू-ज़ कॉम्प्लिमेंट में पहला बिट `1` होने पर यह ऋणात्मक संख्या बन जाती है: $-2^7 = -128$।
- परिणाम: x = -128 (पूर्णांक ओवरफ़्लो)।

2. अचिन्हित चर `y`:
- प्रारंभिक मान: $255_{10} = 11111111_2$ (8-बिट अचिन्हित संख्या का अधिकतम मान)।
- `y++` करने पर बाइनरी जोड़: $11111111_2 + 1 = 100000000_2$ (9 बिट्स)।
- 8-बिट चर में 9वाँ बिट बाहर छूट जाता है, अतः बचता है $00000000_2 = 0$।
- परिणाम: y = 0।
उदाहरण 3
विस्तृत समाधान / उत्तर:
चरणबद्ध ड्राई-रन विश्लेषण:

1. प्रथम बार `test()` कॉल:
- `auto int a = 10;` स्टैक पर बनता है और मान 10 से शुरू होता है।
- `static int s = 10;` डेटा सेगमेंट में केवल एक बार इनिशियलाइज़ होता है।
- `a++` से `a = 11`; `s++` से `s = 11`।
- प्रथम आउटपुट: a=11, s=11।
- फ़ंक्शन समाप्त होने पर `a` स्टैक से नष्ट हो जाता है, किंतु `s` डेटा सेगमेंट में 11 बनाए रखता है।

2. द्वितीय बार `test()` कॉल:
- `a` पुनः स्टैक पर नया बनकर 10 से शुरू होता है; `a++` होकर 11 बनता है।
- `s` अपना पिछला मान 11 बनाए रखता है (इनिशियलाइज़ेशन दोबारा नहीं चलता); `s++` होकर 12 बनता है।
- द्वितीय आउटपुट: a=11, s=12।

3. तृतीय बार `test()` कॉल:
- `a` फिर से 10 से 11 बनता है।
- `s` 12 से बढ़कर 13 बनता है।
- तृतीय आउटपुट: a=11, s=13।

कुल कंसोल आउटपुट:
a=11, s=11
a=11, s=12
a=11, s=13
उदाहरण 4
विस्तृत समाधान / उत्तर:
फॉर्मेट विनिर्देशकों का सटीक मूल्यांकन:

1. पंक्ति 1: पूर्णांक विड्थ एवं फ्लैग्स (`n = 42`):
- `%6d`: कुल 6 कॉलम, दायाँ संरेखित। 4 रिक्त स्पेस और 42: `| 42|`।
- `%-6d`: कुल 6 कॉलम, बायाँ संरेखित (`-` फ्लैग)। पहले 42 बाद में 4 स्पेस: `|42 |`।
- `%06d`: कुल 6 कॉलम, शून्य से भरा (`0` फ्लैग)। 4 शून्य और 42: `|000042|`।
- पंक्ति 1 आउटपुट: `| 42|42 |000042|`

2. पंक्ति 2: फ्लोट परिशुद्धता (`f = 3.14159`):
- `%8.2f`: कुल 8 कॉलम, दशमलव के बाद 2 अंक। `3.14159` राउंड होकर `3.14` (4 वर्ण) बनेगा। आगे 4 स्पेस: `| 3.14|`।
- `%.3f`: दशमलव के बाद 3 अंक। `3.14159` राउंड होकर `3.142` बनेगा: `|3.142|`।
- पंक्ति 2 आउटपुट: `| 3.14|3.142|`

3. पंक्ति 3: स्ट्रिंग विड्थ एवं कटौती (`str = "KOLKATA"` - 7 वर्ण):
- `%10s`: कुल 10 कॉलम, दायाँ संरेखित। 3 स्पेस और KOLKATA: `| KOLKATA|`।
- `%-10.4s`: बायाँ संरेखित, प्रिसिशन `.4` केवल पहले 4 वर्ण `KOLK` रखेगा। शेष 6 कॉलम स्पेस से भरे जाएंगे: `|KOLK |`।
- पंक्ति 3 आउटपुट: `| KOLKATA|KOLK |`
उदाहरण 5
विस्तृत समाधान / उत्तर:
प्रारंभिक मान एवं बाइनरी रूप:
- $a = 12_{10} = 00001100_2$
- $b = 5_{10} = 00000101_2$
- $c = 2_{10} = 00000010_2$

वरीयता का क्रम:
1. यूनरी बिटवाइज़ NOT (`~c`) [स्तर 2]
2. जोड़ ऑपरेटर (`1 + b`) [स्तर 4]
3. बिटवाइज़ शिफ्ट (`>>`, `<<`) [स्तर 5]
4. बिटवाइज़ AND (`&`) [स्तर 8]
5. बिटवाइज़ XOR (`^`) [स्तर 9]
6. बिटवाइज़ OR (`|`) [स्तर 10]

चरणबद्ध समाधान:
1. `~c` हल करें: `~2 = -(2 + 1) = -3`।
2. `1 + b` जोड़ें: `1 + 5 = 6`। व्यंजक बना: `a >> 6 & 7 ^ -3 | a << 1`।
3. शिफ्ट संक्रियाएं (बाएँ से दाएँ):
- `a >> 6` = $12 >> 6 = 0$।
- `a << 1` = $12 << 1 = 24$।
व्यंजक बना: `0 & 7 ^ -3 | 24`।
4. बिटवाइज़ AND (`&`): `0 & 7 = 0`। व्यंजक बना: `0 ^ -3 | 24`।
5. बिटवाइज़ XOR (`^`): `0 ^ -3 = -3`। व्यंजक बना: `-3 | 24`।
6. बिटवाइज़ OR (`|`): -3 और 24 का बिटवाइज़ OR करने पर परिणाम -3 आता है।

अंतिम मान: x = -3।
उदाहरण 6
विस्तृत समाधान / उत्तर:
gets() के उपयोग का गंभीर खतरा:
`gets()` फ़ंक्शन में बफ़र की क्षमता तय करने वाला कोई पैरामीटर नहीं होता:
char buffer[8];
gets(buffer); /* अत्यंत खतरनाक */
यदि उपयोगकर्ता 8 वर्णों से अधिक (जैसे `"TargetExams2026"` - 15 वर्ण) इनपुट करता है, तो:
1. पहले 8 वर्ण `buffer` ऐरे में जाते हैं।
2. शेष वर्ण स्टैक की अगली मेमोरी में उपचे पड़ते हैं (Overflow)।
3. इससे स्टैक फ्रेम में मौजूद फ़ंक्शन का रिटर्न पता (Return Address) विकृत हो जाता है।
4. फ़ंक्शन समाप्त होते ही सीपीयू गलत पते पर जाता है और प्रोग्राम सेगमेंटेशन फॉल्ट (Segmentation Fault) क्रैश हो जाता है।

fgets() द्वारा सुरक्षित कोड:
#include <stdio.h>
int main() {
    char buffer[8];
    if (fgets(buffer, sizeof(buffer), stdin) != NULL) {
        printf("सुरक्षित इनपुट: %s\n", buffer);
    }
    return 0;
}

लाभ: `fgets` अधिकतम `sizeof(buffer) - 1` (7 वर्ण) पढ़ता है और अंत में निश्चित रूप से `'\0'` लगाता है, जिससे मेमोरी कभी दूषित नहीं होती।

सामान्य गलतियाँ एवं परीक्षक के जाल (Examiner Traps)

सामान्य भ्रम / गलत उत्तर

प्रिमिटिव चरों में इनपुट लेते समय scanf() में एड्रेस-ऑफ़ ऑपरेटर (&) लगाना भूल जाना (जैसे scanf("%d", n); लिखना)।

सही वैज्ञानिक तथ्य

सदैव मेमोरी पता `&n` दें (`scanf("%d", &n);`); अन्यथा प्रोग्राम रनटाइम पर क्रैश (Segmentation Fault) हो जाएगा।

सामान्य भ्रम / गलत उत्तर

स्ट्रिंग इनपुट लेते समय scanf() में & ऑपरेटर का प्रयोग करना (जैसे scanf("%s", &str); लिखना)।

सही वैज्ञानिक तथ्य

सी में ऐरे का नाम स्वयं उसके प्रथम तत्व का मेमोरी पता होता है, अतः सीधे `scanf("%s", str);` लिखें।

सामान्य भ्रम / गलत उत्तर

एकल उद्धरण वाले वर्ण 'A' और दोहरे उद्धरण वाली स्ट्रिंग "A" को एक ही समझना।

सही वैज्ञानिक तथ्य

`'A'` एक 1 बाइट का वर्ण स्थिरांक है; जबकि `"A"` एक 2 बाइट की स्ट्रिंग है जिसमें `'A'` और नल वर्ण `'\0'` होता है।

सामान्य भ्रम / गलत उत्तर

फ्लोट या दशमलव संख्याओं पर मापांक ऑपरेटर (%) का प्रयोग करना (जैसे 5.5 % 2)।

सही वैज्ञानिक तथ्य

मापांक ऑपरेटर `%` केवल पूर्णांकों पर कार्य करता है। फ्लोट संख्याओं का शेषफल निकालने के लिए `` का `fmod()` उपयोग करें।

सामान्य भ्रम / गलत उत्तर

यह मान लेना कि अ-प्रारंभिक स्थानीय चर (auto) का मान स्वतः शून्य होता है।

सही वैज्ञानिक तथ्य

स्थानीय चरों में कचरा या गारबेज (Garbage) मान होता है। उपयोग से पूर्व उनमें मान इनिशियलाइज़ करना अनिवार्य है।

अध्याय का सार संक्षेप एवं 10 मुख्य निष्कर्ष

मुख्य बिंदु 1
अध्याय 3 'सी प्रोग्रामिंग का परिचय' पश्चिम बंगाल उच्च माध्यमिक कक्षा 11 के पाठ्यक्रम का एक अत्यंत महत्वपूर्ण सैद्धांतिक व व्यावहारिक आधार प्रस्तुत करता है। हमने बेल लैब्स में डेनिस रिची द्वारा सी भाषा के विकास, इसकी मध्य-स्तरीय विशेषताओं और एक सी प्रोग्राम के छह प्रमुख भागों का अध्ययन किया। हमने 5-चरणीय कंपाइलेशन पाइपलाइन—प्रीप्रोसेसिंग, कंपाइलेशन, असेंबली, लिंकिंग और लोडिंग—का विश्लेषण किया तथा प्रोसेस मेमोरी के टेक्स्ट, डेटा, BSS, हीप और स्टैक सेगमेंट्स को समझा। हमने सी टोकन्स, 32 एएनएसआई कीवर्ड्स, पहचानकर्ता नियमों, स्थिरांकों, प्रिमिटिव डेटा प्रकारों, const/volatile क्वालिफायर्स और चार स्टोरेज क्लासेस (auto, register, static, extern) का विस्तृत अध्ययन किया। अंत में stdio.h के फॉर्मेटेड I/O (printf व scanf), fgets() द्वारा बफ़र सुरक्षा, तथा 15-स्तरीय ऑपरेटर वरीयता पदानुक्रम के आधार पर गणितीय व बिटवाइज़ व्यंजकों का मूल्यांकन संपन्न हुआ।

स्व-मूल्यांकन अभ्यास (Check Your Understanding)

मूल वैचारिक स्पष्टता की जांच के लिए नैदानिक प्रश्न। पहले स्वयं हल करें, फिर उत्तर देखें।

1
सी भाषा के आधुनिक मानकों से gets() फ़ंक्शन को पूर्णतः क्यों हटा दिया गया?
उत्तर एवं व्याख्या देखें
उत्तर: क्योंकि gets() बफ़र की सीमा की जांच नहीं करता, जिससे स्टैक मेमोरी दूषित होकर बफ़र ओवरफ़्लो सुरक्षा दोष व क्रैश उत्पन्न होता है।
2
"WEST BENGAL" स्ट्रिंग स्थिरांक मेमोरी में कुल कितने बाइट्स स्थान घेरेगा?
उत्तर एवं व्याख्या देखें
उत्तर: 12 बाइट्स (11 दृश्यमान वर्ण + 1 समापन नल वर्ण '\0')।
3
किस स्टोरेज क्लास के चर का मेमोरी पता प्राप्त करने हेतु एड्रेस-ऑफ़ ऑपरेटर (&) नहीं लगाया जा सकता?
उत्तर एवं व्याख्या देखें
उत्तर: `register` स्टोरेज क्लास के चर पर, क्योंकि यह सीधे सीपीयू रजिस्टर में होता है, किसी रैम पते पर नहीं।
4
सी भाषा में पूर्णांक व्यंजक 19 / 4 और 19 % 4 का मान क्या होगा?
उत्तर एवं व्याख्या देखें
उत्तर: 19 / 4 = 4 (पूर्णांक भागफल), और 19 % 4 = 3 (शेषफल)।
5
printf() फ़ंक्शन सफलतापूर्वक कार्य संपन्न करने पर क्या मान रिटर्न करता है?
उत्तर एवं व्याख्या देखें
उत्तर: स्क्रीन पर सफलतापूर्वक मुद्रित कुल वर्णों की संख्या रिटर्न करता है।
अध्याय का अध्ययन पूर्ण हुआ?
अभ्यास के लिए तैयार?

ऑनलाइन CBT टेस्ट देकर तैयारी का मूल्यांकन करें

झारखण्ड बोर्ड परीक्षा पैटर्न पर आधारित बहुविकल्पीय प्रश्नों का ऑनलाइन टेस्ट दें। तुरंत परिणाम, समय विश्लेषण और प्रत्येक प्रश्न का विस्तृत हल प्राप्त करें।