TechnoTejas.Online मैं आपका स्वागत है ... टेक्नोलॉजी से जुड़ी हर खबर की जानकारी पाइए वह भी हिंदी में....

c programming language in hindi क्या है और कैसे सीखे?

 

C सीखें अब हिंदी में



Introduction Of C Programming language

C language दुनिया की पहली ऐसी computer language है जो बहुत पुरानी है, पर इसका उपयोग आज भी बड़े पैमाने पर किया जा रहा है। आप आज जितने भी Operating System(OS) देखते हैं जैसे Windows के सभी version: Windows XP, Windows 7, Windows 8...; Linux के सभी version: Ubuntu, Fedora, Suse...; Mac OSX इत्यादि सब C में ही लिखे गए हैं। अधिकांश software भी C में ही लिखे जाते हैं। यहाँ तक कि अधिकतर programming language जैसे PHP, Python, Perl के compiler भी C language में लिखे हैं और Java का भी कुछ भाग C language में लिखा गया है।

इसका मतलब यह भी नहीं कि सिर्फ C सीखने से आप कोई भी software बनाना सीख जायेंगे। C, C++, Java ये सब computer की सिर्फ भाषाएँ हैं। computer language सीखने पर हम ये सीख जाते हैं की computer से बात किस तरह करनी , चाहिए, उसे किस तरह से instruction देना चाहिए। इस instruction को किस तरह से व्यस्थित तरीके से देकर बड़े बड़े काम कम समय में करवा सकते हैं, यह सब सीखने के लिए computer के दुसरे subject जैसे Data Structure, Operating System, Algorithm को पढना होता है।जिस तरह से सिर्फ अंग्रेजी के tense सीख लेने पर हम अंग्रेजी बोलना नहीं सीख जाते, उसके लिए practice की जरुरत होती है, उसी तरह सिर्फ concept पढने से program बनाना नहीं सीख पाते।यह बहुत जरुरी है कि जो भी concept पढ़ें उसका program बनाकर उसे चलाकर जरुर देखें।

अपने अनुभव से मेरा यह मानना है कि C सीखने के बाद और दूसरी programming language भी आसानी से सीख सकते हैं, क्योंकि हर एक language के basic में काफी समानता है।जैसे C++ और Java में Object Oriented के concept के अलावा program लिखने के basic concept एक ही हैं। हर language के लिखने का एक syntax(तरीका) होता है, जो की लगभग एक ही होता है। अगर आप human language जैसे हिंदी,अंग्रेजी को देखें तो sentence लिखने का तरीका लगभग एक ही है, किसी में क्रिया पहले है किसी में बाद में पर basic एक ही हैं। इसी तरह से programming language भी हैं।


c programming language in hindi


Computer और Programming का इतिहास

More to come later.

Convention used in Blog.

mix of hindi and english to make it easy to read.

पहला program: लिखना और चलाना

Program लिखना और समझना

अब program लिखना शुरू करते हैं। हो सकता है इस program की हर एक line अभी आपके समझ में न आये, परन्तु जैसे जैसे आगे बढ़ेंगे आपको इस program की प्रत्येक line समझ में आ जाएगी। नीचे दिए गए program को चलाने पर screen में Namaskar लिखा आ जायेगा। इसे एक बार पढ़िए।


1

2

3

4

5

#include <stdio.h>

int main() {

  printf("Namaskar \n");

  return 0;

}

note: इसमें 1,2,3,4,5 program का हिस्सा नहीं है, reference के लिये सिर्फ line number लिखे गये हैं।


इसमें पहली line में लिखा है #include <stdio.h> stdio का मतलब है standard(std) input(i) output(o)। Program में input लेने और output देने के लिए यह line लिखी जाती है। इस program में screen में output(Namaskar) दिखाने के लिए यह line लिखी गयी है। आगे के सभी programs में कुछ output screen पर आएगा इसलिए यह line आगे के हर एक program में होगी। इसके बारे में chapter में detail में पढेंगे।

दूसरी line में लिखा गया है int main() {। यह program का main method कहलाता है। हर एक C program इसी line के बाद से run होता है। इस line के अंत में { लगा हुआ है जो कि 5th line में बंद हो रहा है। C program को चलाने पर int main() { और इसके matching } के बीच जो लिखा होता है वह एक एक line करके चलता है।


तीसरी line में लिखा है printf("Namaskar \n"); इसी line के कारण screen पर Namaskar लिखा आएगा।

चौथी line में लिखा है return 0; जो OS (operating system) को यह बता रहा है कि program ठीक से चलकर बंद हुआ है।

हर एक program को OS चलाता है। जब कोई program पूरा चलकर बंद है तो OS को बताता है कि वह सफलतापूर्वक चलकर बंद हुआ है या फिर कोई error आने के कारण बंद हुआ है। अगर कोई error आती है तो program OS को यह बताता है कि किस तरह की error आने के कारण program बंद हुआ है। इसके लिए अंत में program OS को एक संख्या देता(return करता) है। अगर वह संख्या 0 है तो OS यह मानता है कि program में कोई error नहीं आई, अन्यथा कोई error है। चौथी line के द्वारा यह program OS को यही बताया जा रहा है कि इस program में कोई error नहीं आई। ध्यान रखें की यह जिम्मेदारी program(और program लिखने वाले) की है कि वह OS को सही संख्या return करके यह बताये कि  error आई है या नहीं।

Program चलाने से सम्बंधित महत्त्वपूर्ण Concept

हमने यह तो समझ लिया कि पहला program कैसा होगा और क्या output देगा। अब प्रश्न यह है कि इसको लिखेंगे कहाँ और चलाएंगे कैसे। इसके बारे में एक एक step जानेंगे पर उसके पहले इससे सम्बंधित कुछ concept समझते हैं।

Text editor

text editor उस तरह के software होते हैं जिनका उपयोग करके plain text file(जिसमे कोई formatting न हो) लिखते हैं।जैसे कि windows में notepad, Linux में gedit, Vim.

Compiler

हम जब computer के लिए निर्देश(computer program) लिखते हैं तो वो English भाषा की तरह लिखते हैं जिसका एक उदहारण आपने  ऊपर देखा। जिसे हम और आप पढ़कर समझ सकते हैं परन्तु computer इसे नहीं समझ सकता। computer मशीन की भाषा समझता है जिसे हम आसानी से नहीं समझ सकते। इसके लिए हमें ऐसे software की जरूरत पड़ती है जो हमारे द्वारा लिखे गए program को computer की language में convert कर देता है। इस तरह के software को compiler कहते हैं। Windows में जो .exe file होती हैं वो मशीन की भाषा में बदले गए program ही होते हैं। सबसे ज्यादा उपयोग में आने वाला और standard compiler है Linux में gcc (GNU Compiler Collection) और windows में Visual C++। gcc windows के लिए भी आता है जिसका नाम है mingw(minimal gnu for windows) और हम उसी का उपयोग करना सीखेंगे। Windows का एक पुराना प्रसिद्ध compiler है Turbo C परन्तु वह बहुत पुराने कंप्यूटर के लिए बनाया गया था। इस समय के कंप्यूटर के लिए हमारे पास Turbo C से बहुत अच्छे compiler हैं।

IDE(Integrated Development Environment)

किसी program को चलाने के लिए 3 step होते हैं।पहला यह कि उस program को text editor का उपयोग करके किसी file में लिखना और उसे save करना, दूसरा यह कि उस file को compiler का उपयोग करके compile करना जिससे हमें मशीन की  भाषा का program( executable file) बन जाये। इसके बाद उस executable file को चलाने पर हमारे द्वारा लिखा गया program चल जाता है। IDE ऐसे software को कहते हैं जिसमे ये तीनो step आसानी से हो जाते हैं। अगर IDE का उपयोग करते हैं तो उसके अन्दर editor भी होता है, compile और run करने के options भी होते हैं। अलग से किसी और software की जरुरत नहीं पड़ती। C के लिए कुछ free और अच्छे IDE हैं eclipse, code blocks जो windows और Linux दोनों में चलते हैं। Windows के लिए एक और IDE है Microsoft Visual C++ express।

Note: C++ C का ही extension है। C में ही कुछ नए feature के साथ C++ बनायी गयी है। इसलिए C++ के compiler में C के program भी चल जाते हैं।

बिना किसी software के online program चलाना

ideone website (http://ideone.com/) पर आप किसी भी language का program चला कर उसका output देख सकते हैं। इसके लिए कोई भी program लिखकर Run बटन पर click करें। Run बटन बगल में language select कर सकते हैं, इस किताब में C language उपयोग होगा। अगर कोई input देना है तो stdin में click करके input लिख सकते हैं। 

Windows में program चलाने के steps

windows में code blocks IDE के द्वारा program चलाएंगे जिसके steps नीचे दिए गए हैं

  1. code blocks download और install करना

    • http://www.codeblocks.org/ इस website पर जाये।

    • सबसे ऊपर downloads की link पर click करें।

    • पहला option जो कि Download the binary release है उस पर click करें।

    • codeblocks mingw setup वाली file download करके उसे install कर लें।


  1. अब code blocks को open करें और उसमे ऊपर दिखाए गए चित्र के अनुसार File → New → Empty file पर click करें।

  2. अब वहां पर ऊपर दिया गया program लिख दें। ध्यान रहे कि लिखने में एक अक्षर की भी गलती नहीं होना चाहिए अन्यथा program नहीं चलेगा।

  3. इस program को File → Save file में click करके save कर लें। file को किसी भी नाम से, किसी भी folder में save कर सकते हैं। 


  1. अब ऊपर दिखाए चित्र के अनुसार Build → Build and run पर click करें। इससे program compile होकर run हो जायेगा और उसका output एक काली window में दिख जायेगा। उसमे लिखा होगा Namaskar। यानि की आपके द्वारा लिखा गया program ठीक से चल गया। keyboard पर कोई भी बटन दबाकर उस काली window को बंद कर सकते हैं। compile होने के बाद .exe file बनती है जिसे उस folder में देख सकते हैं जहाँ प्रोग्राम save किया गया है। यदि program को hello.c नाम की file में save किया गया है तो hello.exe नाम की file बनी हुई होगी।

Linux में program चलाने के steps

  1. ऊपर दिए गए program को एक file बनाकर उसमे save कर लें। file का नाम program.c रख ले। file के नाम के अंत में .c (.c extension) होना चाहिए। file को किसी plain text editor में ही लिखें जैसे gedit, vim...। अगर MS Office जैसे software में program लिखते हैं तो वह compile नहीं होगा क्योंकि ये software लिखे गए text को किसी और format में रखते हैं, सीधे text नहीं रखते जो लिखा जाता है। ध्यान रहे कि लिखने में एक अक्षर की भी गलती नहीं होना चाहिए अन्यथा program नहीं चलेगा।

  2. अब terminal open करें। terminal में कोई भी command चलाई जा सकती है। Gnome environment में Application Menu में Accessories में terminal मिल जायेगा। Unity और kde में ternimal serch करके मिल जायेगा। 

  3. अब cd command का उपयोग करके उस folder तक जाएँ जहाँ file save की गयी है। ls command चलाने पर save की गयी file का नाम दिख जायेगा।

  4. अब command चलायें gcc program.c

  5. इससे file compile हो जाएगी और a.out नाम की executable file बन जाएगी।  जिसे सीधे चला(run) सकते हैं। इसे चलाकर output देखने के लिए  command है   ./a.out ध्यान रहे शुरु में एक . है। अगर आपके  में error है तो पिछली command चलाने पर a.out नहीं बनेगी। इस स्थिति में command का output धयान से पढ़ें जिससे यह पता लगेगा कि program की किस line मे क्या error है।

  6. screen पर Namaskar लिखा आ जायेगा इसका मतलब है program ठीक तरीके से चल गया है।

Program में comment और space

comment 

Program लिखते समय अक्सर हम उस program के साथ उसके बारे में भी लिखना चाहते हैं जैसे कि यह program क्या करता है, कैसे करता है। परन्तु अगर यह वर्णन सीधे उसी file में लिखने पर program compile नहीं होगा, errors आएँगी। इसके समाधान के लिए C में comment की सुविधा होती है। program में comment के रूप में जो भी लिखा होता है उसे compiler ignore कर देता है। किसी program में कितने भी comment लिख दें या न लिखे इससे program के चलने पर कोई फर्क नहीं पड़ता। comment लिखने के 2 syntax (तरीके) हैं।

  1. /* से */ के बीच में लिखा गया भाग comment होता है।

  2. किसी भी line में अगर कहीं भी // लिखा है तो उसके बाद उसी line में // के बाद का भाग comment होता है।

नीचे दिए गए सभी program ऊपर दिए गए program के समान ही हैं।

#include <stdio.h>

/* this is my first program

it will print namaskar

run this program */

int main() {

  printf("Namaskar \n");

  return 0;

}


#include <stdio.h>

int main() {

  printf("Namaskar \n");//this line will print

  return 0;

}


#include <stdio.h>

/* my first program */

int main() {//print namaskar

  printf("Namaskar \n");

  return 0;

}

Space

program में किन्ही दो शब्दों के बीच 1 space की जगह कितने भी space दें या line break(enter button) दें इससे program के चलने पर कोई फर्क नहीं पड़ता। नीचे दिए गए सभी program एक ही हैं।

#include <stdio.h>

int main() {

  printf("Namaskar \n");

  return 0;

}


#include <stdio.h>

int main() {printf("Namaskar \n");return 0;}

Small Exercise

  1. ऊपर दिए गए program में Namaskar की जगह कुछ और लिखकर program चलाये और देखें क्या output आता है।

  2. पहली line हटाकर program चलाये और देखें क्या error या output आता है।

  3. return 0 की जगह  return 1 लिखकर program चलायें और देखें क्या output आता है।

  4. तीसरी line में \n को हटाकर program चलायें और देखें क्या output आता है।

  5. अलग अलग तरीके से space देकर, comment लिखकर और उसे modify करके program चलाकर देखें।


Variable

किसी भी program में data रखने की जरुरत पड़ती है। C program में यह data memory में variable के माध्यम से रखा जाता है। Variable यहाँ पर गणित की तरह ही होता है, जिसे किसी भी नाम से बना(define) सकते हैं और वह कोई भी मान(value) ले सकता है। variable, memory में कुछ निश्चित जगह लेता है।

program में पहले variable define करते हैं। define करने का मतलब यह है की सबसे पहले हमें C program को बताना होता है की हम किस नाम के variable का उपयोग कर रहे हैं, यह करने से उस variable को memory मे जगह है। उसके बाद उस variable में data रख सकते हैं। नीचे दिये गये program के द्वारा देखते हैं कि variable कैसे define करते हैं।

#include <stdio.h>

int main() {

  int myvar;

  myvar = 1;

  myvar = 5;

  printf("value is %d", myvar);

  int y = 10;

  printf("value is %d", y);

  return 0;

}

int myvar; के द्वारा हम program को यह बता रहे हैं कि myvar नाम का variable define किया गया है जो केवल int (integer या पूर्णांक का short form) मान ले सकता है। इससे memory में myvar variable के लिए जगह निर्धारित हो जाएगी। इसके बाद अगली line में myvar variable का मान 1 और उसके बाद 5 हो गया है। program में कितने भी variable बनाये जा सकते हैं। इसके बाद myvar को screen में print किया गया है। int को print करने के लिए %d का उपयोग करते हैं, यह %d की जगह उसको दिये गये int को print करता है। print करने का syntax(तरीका) Input/Putput वाले chapter में पढ़ेंगे।

एक ही line में variable define करके उसको value भी दे सकते हैं। ऊपर दिए गए example में int y = 10; लिखकर हम program को ये भी बता रहे हैं कि y नाम का variable पूर्णांक(int) रखेगा और साथ ही उसमें 10 रख भी रहे हैं।

किसी एक नाम के variable को 2 बार define नहीं कर सकते। ऐसा करने से program मे error आ जाती है। एक बार define करके उसमे रखी गयी value कितनी भी बार बदल सकते हैं। 


ऊपर दिए गए example में int type का variable बनाया गया है। कुछ और प्रकार (type) के variable भी होते हैं जिन्हें data type भी कहते हैं। data type यह बताता है variable किस तरह के मान(value) रखता है। इस तरह कोई भी variable बनाते समय सबसे पहले data type लिखना होता है उसके बाद variable का नाम। विभिन्न प्रकार के data type के बारे में नीचे बताया गया है।

short

यह memory में 2 byte(16 bit) की जगह लेता है और पूर्णांक store करने के काम आता है। यह -32768(-215) से 32767(215-1) तक मान रख सकता है। (32767 को binary में बदलने पर 15 अंक(bit) की संख्या बनेगी और एक अंक(bit) इसके लिए कि संख्या + की है या - की।

उदाहरण: short x = 50;

int

यह भी ऊपर की तरह पूर्णांक रखता है पर यह memory में 4 byte(32 bit) की जगह लेता है इसलिए -231 से 231-1(लगभग 200 करोड़) तक के मान रख सकता है।

उदाहरण: int x = -50;

long

यह भी ऊपर की तरह पूर्णांक रखता है पर यह memory में 8 byte(64 bit) की जगह लेता है इसलिए -263 से 263-1(लगभग 9x1018) तक के मान रख सकता है। इसे define करते समय संख्या के अंत में L लिखते हैं।

उदाहरण: long x = 70L;

unsigned sort, unsigned int, unsigned long

यह short, int, long की तरह ही हैं पर सिर्फ धनात्मक value ही रखते हैं इसकी इनकी range दोगुनी हो जाती है। unsigned short 0 से 65535(216-1), unsigned int 0 से 232-1(लगभग 400 करोड़) और unsigned long 0 से 264-1 तक के मान रख सकते हैं।

उदाहरण: unsigned short x = 50;

unsigned int x = 60;

unsigned long x = 70L;

float 

यह memory में 4 byte(32 bit) की जगह लेता है और वास्तविक संख्या(दशमलव वाली संख्या) store करने के काम आता है। इसे define करते समय संख्या के अंत में F लिखते हैं।

उदाहरण: float x = 8.8F;

double

यह memory में 8 byte(64 bit) की जगह लेता है और वास्तविक संख्या(दशमलव वाली संख्या) store करने के काम आता है। यह float की तरह ही है पर दशमलव के बाद और भी ज्यादा अंक ज्यादा शुद्धता से रख सकता है।

उदाहरण: double x = 19.02847;

long double

यह memory में 16 byte(128 bit) की जगह लेता है और वास्तविक संख्या(दशमलव वाली संख्या) store करने के काम आता है। यह double की तरह ही है पर दशमलव के बाद और भी ज्यादा अंक ज्यादा शुद्धता से रख सकता है।

उदाहरण: long double x = 19.02847;

char

यह memory में 1 byte(8 bit) की जगह लेता है और character(अक्षर) जैसे a b या अन्य कोई चिन्ह(special character) store करने के काम आता है। जब char variable में कोई character value रखते हैं तो उस value को ' ' में लिखते हैं जैसे 'a' या '*'

उदाहरण: char c = 'h';

variable का नाम

ऊपर दिए गए example में variable का नाम myvar रखा गया है। variable का नाम क्या क्या हो सकता है इसके नियम इस प्रकार हैं।

  1. variable के नाम में छोटे और बड़े अक्षर(a to z, A to Z), अंक(0 to 9) और _ होना चाहिए। इसके अलावा अन्य अक्षर(space, *, # इत्यादि) नहीं हो सकते।

  2. variable के नाम case sensitive होते हैं। अगर एक नाम capital letter में है और दूसरा small में तो दोनों अलग अलग variable माने जाते हैं। myvar, Myvar, MYVAR, myVar ये सब अलग अलग variable हैं।

  3. variable का नाम अंक(0 to 9) से शुरू नहीं होना चाहिए।

  4. C language के keyword(जैसे int, float...) variable का नाम नहीं हो सकते। ये keywords नीचे दिए जा रहे हैं।

auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile, while, asm, bol, catch, class, const_cast, delete, dynamic_cast, false, friend, inline, mutable, namespace, new, operator, private, protected, public, reinterpret_cast, static_cast, template, this, throw, true, try, typeid, using, virtual

Array

इसका उपयोग एक ही type के एक से ज्यादा variable रखने के लिए होता है। array बनाते समय यह बताना होता है कि वह अधिकतम कितने variable रखेगा और उतनी ही memory शुरू में ही array द्वारा ले ली जाती है। array में अलग अलग type के variable जैसे कुछ int, कुछ float नहीं आते। array बनाने का तरीका यह है। 

int arr[10];

इससे एक array बनती है जिसमे सिर्फ int आ सकते हैं जिसकी size या capacity 10 है यानि इसमें 10 int रखे जा सकते हैं। array में numbering 0 से शुरू होती है, इसमें 0 से 9 तक की position में int रखे जा सकते हैं। इन्हे arr[0], arr[1]... arr[9] से access करते हैं। अलग type और size की array बनाने के लिए int और 10 की जगह वह type और size लिखेंगे। नीचे दिए गए example में 3 size की array बनायी गयी है। 

#include <stdio.h>

int main() {

  int x[3];

  x[0] = 4;

  x[1] = 8;

  x[2] = x[1] + x[2];

  printf("value in x %d %d %d", x[0], x[1], x[2]);

  return 0;

}

एक ही line में array बनाकर उसमे value इस तरह से डाल सकते हैं। 

int x[] = {2,3,4,1,4,6,8};

String(char*)

इसका उपयोग पूरा sentence रखने के लिए किया जाता है। इसका data-type char* होता है। program में char* का उपयोग किया जाता है, पर इसको string भी कहा जाता है। इसको बनाते समय value को " " में लिखते हैं। वास्तव में char* एक array ही है। इसे array की तरह भी बना सकते हैं।

उदाहरण: char* str = "I am learning C.";

या char str[] = "I am learning C.";


Operators and Expressions

Operator का मलतब है चिन्ह जैसे +, -, x इत्यादि। इन चिन्हों को variable और संख्याओ के साथ मिलाकर expression बनाते हैं जैसे 2 + 3 - 1 एक expression है। इन्हें program में इसी तरह लिखते हैं जैसा कि नीचे example में बताया गया है।

#include <stdio.h>

int main() {

  int x = 5;

  int y = x;

  int z = x + y - 2;

  printf("value is %d", z);

  return 0;

}

इस program में x और y के मान बदल-बदल कर चलाकर देखें।

अधिकांश operator दो संख्याओं के बीच लगते हैं जिन्हें Binary Operator कहते हैं। कुछ operator सिर्फ एक संख्या पर ही लग जाते हैं जिन्हें Unary Opeator कहते हैं। प्रमुख Operators इस प्रकार हैं।

Assignment Operator(=)

किसी variable में value रखने(assign करने) के लिए इसका उपयोग होता है जैसा की अभी तक बहुत से example में देखा है जैसे int x = 5; या int y = x; या int z = x + y - 2;

= के left में एक variable होता है जिसको कोई मान assign करना है और right में constant, variable या expression हो सकती है। int x = 5; में = के right में constant(5) है जो सीधे x को assign हो जायेगा। int y = x; में = के right में variable(x) है, इस variable का जो भी मान होगा वह y(जो कि = के left में है) को assign हो जायेगा। int z = x + y - 2; में = के right में expression(x + y - 2) है इस expression को हल करने पर जो result आएगा वह z को assign हो जायेगा।

Arithmetic Operators (+, -, *, /, %)

इनका use पहले के program में भी देख चुके हैं। ये सभी Binary Operator हैं।

+ : दो संख्याओं को जोड़ने के लिए।

- : पहली संख्या में दूसरी घटाने के लिए।

* : दो संख्याओं का गुणा करने के लिए।

/ : पहली संख्या को दूसरी से भाग देने पर आये भागफल के लिए।

% : पहली संख्या को दूसरी से भाग देने पर आये शेषफल के लिए।

किसी expression में ये गणित के नियमों के अनुसार ही काम करते हैं। * / और % पहले हल होते हैं और + - बाद में। अगर + - को पहले हल करना हो तो छोटे कोष्ठक का उपयोग कर सकते हैं। ध्यान रखें कि यहाँ expression में मंझला और बड़ा कोष्ठक नहीं लगा सकते क्योंकि इनका उपयोग अन्य जगह होता है।

ये अंक-गणितीय संक्रियाएँ(arithmetic operators) जिन दो संख्याओ के बीच लगाया गया है अगर उन दोनों का datatype(जैसे int, long, float, double...) एक ही है तो result(उत्तर) का datatype भी वही होगा। इसका एक उदाहरण देखते हैं।

#include <stdio.h>

int main() {

  int x = 13;

  int y = 4;

  int z = x/y;

  int w = x%y;

  printf("z is %d.", z);

  printf("w is %d.", w);

  return 0;

}

output

z is 3.w is 1

ऊपर दिए गए program में x और y दोनों int हैं इसलिए भाग देने पर उत्तर भी int(जो सिर्फ पूर्णांक रखता है) आएगा इसलिए उत्तर 3 आया है, भाग देने पर शेष 1 आया है। इस program को अलग अलग operator और datatype के साथ संख्या बदल बदलकर देखें कि क्या output आता है। 

Note: इस example में अगर आप दशमलव वाली संख्या(float, double, long doube) print करना चाहते हैं तो printf में %d की जगह %f लिखें। printf के बारे में विस्तार से आगे पढेंगे।

अगर arithmetic operator दो अलग अलग datatype के बीच लगाया जाए तो उत्तर का datatype इस प्रकार निर्धारित होगा।

  1. अगर दोनों में से एक भी संख्या का datatype दशमलव वाली संख्या है तो उत्तर का भी वही होगा।

  2. उत्तर का datatype दोनों में से वह होगा जो memory में ज्यादा जगह लेता है। परन्तु दो short का उत्तर int होता है।

  3. % शेषफल देता है इसलिए यह सिर्फ पूर्णांक(short, int, long) के बीच लगाया जा सकता है और उत्तर भी पूर्णांक आता है।

नीचे दी गयी table में यह बताया गया है कि दो अलग अलग datatype के बीच arithmetic operation करने पर उत्तर का datatype क्या होगा।

datatype →

   ↓

short 

16 byte

int

32 byte

long

64 byte

float

32 byte

double

64 byte

long double

128 byte

short

int

int

long

float

double

long double

int

int

int

long

float

double


long

long

long

long

float



float

float

float

float




double

double

double





long double

long double







Logical Oparators( ==, >, <, <=, >=, !=, &&, ||, !)

ये किन्ही दो variable या संख्याओं की तुलना करने के लिए उपयोग में लाये जाते हैं। इनका परिणाम true या false होना चाहिए, जैसे 4 < 10 का परिणाम true और 3 > 1 का परिणाम false। परन्तु C में true और false रखने के लिए अलग से कोई datatype नहीं होता इसलिए इसका परिणाम int ही आता है। false के लिए परिणाम 0 आता है और true के लिए 1। इनका विवरण इस प्रकार है।

== (equal to): यह दो संख्याओं की तुलना के लिए उपयोग में आता है। दोनों संख्याएँ बराबर होने पर true(1) अन्यथा false(0) देता है।

!= (not equal to): दोनों संख्याएँ बराबर होने पर false(0) अन्यथा true(1) देता है।

> (greater than): पहली संख्या बड़ी होने पर true(1) अन्यथा false(0) देता है।

>= (greater than or equal to): पहली संख्या बड़ी या बराबर होने पर true(1) अन्यथा 0(false) देता है।


< (less than): पहली संख्या छोटी होने पर true(1) अन्यथा false(0) देता है।

<= (less than or equal to): पहली संख्या छोटी या बराबर होने पर true(1) अन्यथा false(0) देता है।

&& (and): अगर दोनों में से कोई भी एक संख्या false(0) है तो false(0) देता है अन्यथा true(1) देता है।

|| (or): अगर दोनों में से कोई भी एक संख्या true(0 के अलावा कोई भी संख्या) है तो true(1) देता है अन्यथा false(0) देता है।

! (not): यह Unary Operator है, सिर्फ एक संख्या पर लगता है, दो संख्याओ के बीच नहीं लगता। यह false(0) के पहले लगाने पर true(1) देता है और true(0 के अलावा कोई भी) पर false(0) देता है। इसे जिस संख्या या variable पर लगाना हो उसके पहले ! लगा देते हैं।


#include <stdio.h>

int main() {

  int x = 13;

  int y = 4;

  int w = !(x > y);

  int z = (x > y) || (x > 100);

  printf("z is %d.", z);

  printf("w is %d.", w);

  return 0;

}

output

z is 1.w is 0

ऊपर दिए गए उदाहरण में अलग अलग operator और संख्याओं का उपयोग करके चलाकर output का अध्ययन करें।

Bitwise Operator(&, |, ~, ^, >>, <<)

Program बनाते समय इनकी जरुरत कम ही पड़ती है। कभी कभी कुछ operation bitwise operator का उपयोग करके ज्यादा तेजी से किये जा सकते हैं, परन्तु उनका उपयोग भी बहुत कम होता है। फिर भी हम इनके बारे में थोडा जान लेते हैं।

कंप्यूटर की memory में हर एक संख्या Binary format में होती है, जैसे कि 5 के लिए memory में 101 होगा (Decimal से Binary और Binary से decimal बदलने की प्रक्रिया जानने के लिए Appendix 1 देखें)। ये operator संख्या की हर एक bit(Binary के अंक) पर लगते हैं।

& दो संख्याओ के बीच हर एक bit पर Logical and लगा देता है। जैसे कि 11(1011) और 13(1101) के बीच & लगाने पर 9(1001) इस तरह से आएगा.

1011

1101

------

1001 = 9

इसी तरह bitwise or के लिए | और bitwise xor के लिए ^ का उपयोग करते हैं।

~ एक Unary Operator है, सिर्फ एक ही संख्या पर लगता है। जिस संख्या पर लगाया जाता है उसकी bits को बदल देता है यानि 0 को 1 में और 1 को 0 में। जैसे 8 bit में 76 = 01001100. इसलिए ~76 = 10110011 = -77

>> bits को right में और << left में खिसकाता(shift) है। जैसे 13 = 1101. 13<<3 13 की bits को left में 3 बार खिसका देगा जिससे 90 = 1011010 आएगा। इसी तरह 90 = 1011010. 90>>2 90 की bits को right में 2 बार खिसका देगा जिससे 22 = 10110 आएगा, right की 2 bits बाहर निकल जाएंगी। इन दोनों उदाहरणों को नीचे दिए गए चित्र से समझा जा सकता है।


Decimal Number system(दाशमिक संख्या पद्धति: जो हम सामान्यता उपयोग करते हैं) में किसी संख्या को right में 1  खिसकाने पर (यानि अंत में 0 लगाने पर) उसमे 10 का गुणा हो जाता है और left में 1 खिसकाने पर( यानी अंतिम अंक हटा देने पर) 10 का भाग हो जाता है। Memory में सब कुछ Binary Number system(द्विआधारी संख्या पद्धति) में store होता है, इसलिए यहाँ right में 1 खिसकाने पर 2 से गुणा और left में खिसकाने पर 2 से भाग हो जाता है।

Overflow

हमने देखा कि अलग अलग type के datatype memory में अलग अलग जगह लेते हैं। जैसे short 2 byte(16 bits) की जगह लेता है। short datatype में धनात्मक संख्या रखने के लिए केवल 15 bit ही उपयोग में आयेंगे और 32767 तक की संख्या ही रख सके हैं। अगर दो संख्याओं को जोड़ने पर योग 32767 से ज्यादा हो जाता है तो इतनी बड़ी संख्या short datatype में नहीं आ पायेगी result कुछ और ही आ जायेगा। इसे overflow कहते हैं। सिर्फ जोड़ ही नहीं अन्य operator के साथ भी overflow हो सकता है। नीचे दिए गए चित्र में 16 bit की दो संख्याओं को जोड़ने पर होने वाले overflow को दिखाया गया है।


इसी से संबंधित नीचे दिए गए program को चलाकर देखें।

#include<stdio.h>


int main() {

   short a = 32767;

   short b = 8;

   short c = a + b;

   printf("%d %d %d \n", a,b,c);

}


इसी तरह एक और example नीचे चित्र में दिखाया गया है जिसका program आप बनाकर देख सकते हैं।


16 bit की दो संख्याओं को जोड़ने पर 17 bit हो रहे हैं परन्तु short datatype में केवल 16 bit की जगह है इसलिए 17वीं bit program द्वारा drop कर दी गयी है।

Type casting

ऊपर हमने विभिन्न प्रकार के datatype पढ़े हैं। कई बार एक को दूसरे में बदलने की जरुरत पड़ती है। किसी एक variable को दूसरे type में बदलने के लिये type operator यह है। 

(type) variable या expression

एक example में देखा था 13/4 को int में रखने पर 3 मिला है क्योंकि इसका result int आता है। अगर हमें 13/4 को double में बदल दें तो उसका result 3.25 मिल जायेगा।

#include <stdio.h>

int main() {

  int x = 13;

  int y = 4;

  double z = (double) x/y;

  printf("z is %f.", z);

  return 0;

}

output

z is 3.250000

इस program में x/y को double type में बदलने  के लिए x/y के पहले (double) लिखा गया है जैसा कि उपर बताया गया था। इसमें x, y के अलग अलग value डालकर चलाकर देखें। 

अगर किसी double को int में बदलते हैं तो दशमलव के आगे वाले अँक हट  जाएँगे। इसका भी एक example देखते हैं। 

#include <stdio.h>

int main() {

  double d = 4.81

  int i = (int) d;

  printf("i is %d.", i);

  return 0;

}

output

i is 4

Standard Input और Output

Input और Output, Computer और Programming का बहुत ही महत्वपूर्ण भाग है। कोई भी Program कुछ input लेता है और उसे process करके output देता है। Input और Output कई माध्यमों से लिया जा सकता है। जैसे Output सीधे Screen पर दिखा सकते हैं, किसी file में save कर सकते हैं, printer को भेजकर कागज पर print करके output ले सकते हैं, अगर output कोई sound/audio तो speaker में play करके output सुन सकते हैं। इसी तरह Input भी keyboard, mouse, file, microphone, internet इत्यादि से ले सकते हैं।

ऊपर दिए गए सभी program में output screen पर दिखाया गया है। यहाँ हम keyboard से input लेना और screen पर अलग अलग तरीकों से output  दिखाना सीखेंगे।

Output

Screen पर Output दिखाने(print करने) के लिये अभी तक हमने printf का उपयोग किया है। इसके लिए 3 मुख्य तरीके हैं। 

Character output (putchar)

आपने datatypes में char datatype के बारे में पढा होगा जो एक character(अक्षर) रखता है। उसे screen पर print करने के लिये putchar का उपयोग किया जाता है। इसका एक example नीचे दिया गया है। इसे चलाकर देखें।

#include<stdio.h>

int main() {

char ch = 'H';

putchar(ch);

putchar('e');

putchar('l');

putchar('l');

putchar('o');

}

putchar एक function है जो एक character(char type का variable) लेता है और उसे screen पर print करता है।

Line output(puts)

उपर दिये गये तरीके से कोई भी वाक्य print करने के लिए putchar बहुत बार लिखना पड़ेगा। puts के द्वारा string को एक ही line के program से print कर सकते हैं। इसे एक example से समझते हैं। 

#include<stdio.h>

int main() {

puts("I am trying printf");

char* line = "This is sentence.";

puts(line);

char line2[] = "This is another sentence.";

puts(line2);

}


formatted output (printf)

printf के द्वारा भी string को एक ही line के program से print कर सकते हैं। इसके साथ साथ variable भी आसानी से  print कर सकते हैं। इसका उपयोग करने के अलग अलग तरीके हैं जिन्हे नीचे समझाया गया है।

  • Simple text को print करना: इसके लिए printf सिर्फ वह string लेता है जिसे print करना है।ये puts जैसा ही है। इसका example यह है -

#include<stdio.h>

int main() {

printf("I am trying printf");

}

  • Format Specifier: printf को दी गई string को formatted string कहते हैं और उसमें % से शुरू होने वाले format specifier कहलाते हैं और ये सीधे print नहीं होते, इनकी जगह printf को दिए गए variable print होते हैं। ये variable, string के बाद क्रम से दिए जाते हैं। इसे  example से समझते हैं। ऊपर %d का उपयोग गया है। नीचे table में बताया गया है कि कौन सा specifier किस type variable लिये use होता है।


format specifier

विवरण

%d

पूर्णांक वाले type(byte, short, int, long, long long)

%u

unsigned वाले सभी type 

%c

char

%f

दशमलव वाले type(float, double, long double)

s

string (char*) या char var_name[]

ध्यान रखें printf को string मे जिस क्रम मे format specifier(%d, %f…) दिए जाते हैं उसी क्रम में सम्बन्धित type के variable दिये जाते हैं। नीचे इसका example दिया गया है जिसमे अलग अलग type के variable ड़ालकर चलाकर देखें। 

#include<stdio.h>

int main() {

int total = 10;

char myChar = 'H';

double pi = 3.14159;

char city[] = "Delhi";

printf("total:%d, myChar:%c, PI=%f, mycity=%s ", total, myChar, pi, city);

}

output

total:10, myChar:H, PI=3.141590, mycity=Delhi

इस example में देखेंगे कि printf को दी गयी string ही print हो रही है, पर उसमें %d %c और %f की जगह उसी क्रम दिए गए variable की value print हो रही है।

ऊपर हमने देखा कि PI= 3.141590 print हुआ अगर हमें सिर्फ़ 3.14 print करना हो या 010 print करना हो इसके कुछ तरीके तरह हैं। 

format specifier का syntax है: %[width][.precision]specifier

जो भी [] के अंदर है उसे लिखना ज़रुरी नहीं है, अगर लिखा गया है तो वह output को आगे बताये अनुसार प्रभावित करेंगे। specifier की जगह d, u, f, c या s लिखा जाता है जिनका विवरण ऊपर table दिया गया है। ऊपर दिए गए programs में width और precision नहीं लिखा गया 

width की जगह वह संख्या आती है जितनी कम से कम जगह वह variable लेगा। जैसे कि अगर format specifier %4d से 11 print कर रहे हैं जो 4 अंक कम की संख्या है तो शुरु के 2 अंक की जगह space आ जायेगा। अगर %04d लिखते हैं तो शुरू के 2 अंक की जगह 0 print होगा। अगर %4d के साथ 4 अंक  संख्या print करते हैं तो सारे अंक print होंगे। %4s के साथ hi print करने पर hi के शुरु मे 2 space print होंगे। 

precision दशमलव संख्याओं(float, double) में उपयोगी है। इसके द्वारा  बताते हैं कि दशमलव के बाद कितने अंक print करना है। 

#include<stdio.h>

int main() {

int num = 11;

double pi = 3.14159;

char* city = "Delhi";

printf("num:%3d, PI=%05.2f, mycity=%2s ", num, pi, city);

}

output

num: 11, PI=03.14, mycity=Delhi

इस program में 11 के लिए %3d, 3.14159 के लिए %05.2f और Delhi के लिए %2s format specifier लिए गए हैं। 11 के लिए width 3 ली गयी है जबकि 11 सिर्फ 2 अंक का है इसलिए 11 के पहले एक space print हुआ है (ध्यान दें कि program में num: और %3d के बीच कोई space नहीं है)।  3.14159 के लिए precision 2 लिया गया है इसलिए दशमलव के बाद सिर्फ़ 2 अंक print हुए हैं, width 5 ली गयी है जबकि 3.14 में 4 ही अक्षर हैं और width के पहले 0 है इसलिए 3.14 के पहले 0 लगकर print हुआ है। Delhi के लिए 2 width ली गयी है जबकि Delhi में 5 अक्षर हैं(2 से ज्यादा) इसलिए पांचो print हुए हैं। 

  • escape sequence: कई बार कुछ special character print करने की जरुरत पड़ती है। जैसे एक line print करने के बाद अगला शब्द नई line में print करना है या " print करना। इसके लिए कुछ special character होते हैं जिन्हे \ के बाद लिखते हैं और वे इस प्रकार हैं। 


character

उसका अर्थ 

\n 

यह new line character है, इसके print होने के बाद अगले अक्षर अगली line से शुरु होते हैं। 

\"

चूँकि string " से शुरू और खत्म होती है, इसलिए अगर खुद " को print करना है तो \" लिखते हैं।

\t 

यह Tab character है, इससे Tab(थोड़ा ज्यादा space)print होता है।

\0 

यह NULL character है। यह इस बात का चिन्ह होता है कि string खत्म हो गई है। 

इसका एक example देखते हैं जिसे चलाकर देखिये। 

#include<stdio.h>

int main() {

printf("first line\nsecondline,quote:\"\0end");

}

output

first line

second line,quote:"

output में आप देखेंगे कि first line के बाद second line दूसरी line में print हुई है क्योंकि first line के बाद \n है। end print नहीं हुआ क्योंकि वह \0 के बाद है, इससे program को लगा की string यहीं ख़त्म हो गयी है।

ऊपर दिए गए सभी example में आप printf का उपयोग ध्यान से देख सकते हैं।

Input

output की तरह ही input लेने के भी 3 तरीके हैं।

Character input(getchar)

output की तरह ही एक character का input के लिए getchar का use करते हैं। एक example से इसका उपयोग देखते हैं जिसमे input लेकर उसे वापस output करेंगे। 

#include<stdio.h>

int main() {

char ch = getchar();

putchar(ch);

}

इस program को चलाने पर यह input के लिया रुका रहेगा। जैसे ही आप कोई अक्षर type करके enter दबाते हैं, वह char ch नाम के variable में चला जायेगा जो putchar के द्वारा वापस screen पर print हो जायेगा। 

Line input(gets)

puts की तरह ही एक line का input लेने के लिए gets उपयोग होता है। पहले एक char की array बनाते हैं जिसमे input आएगा। एक example से इसे समझते हैं जिसमे input लेकर उसे वापस output(screen पर print) करेंगे। 

#include<stdio.h>

int main() {

char line[20];

gets(line);

puts("You have entered");

puts(line);

}

इस program में पहले 20 size की array बनायी है इसलिए यह एक line में अधिकतम 20 char(अक्षर) तक input ले सकता है। इसे चलाने के बाद एक line लिखकर enter करके output देखिये। 

Formatted input(scanf)

यह printf की तरह ही काम करता है जो एक formatted string लेता है और variables  लेता है जिसमे input लेना है। पर यह variable के address लेता है जो उसके पहले & लगाकर निकालते हैं, परन्तु array का variable पहले से ही address होता है इसलिए उसमे & नहीं लगाते। address के बारे में pointer वाले chapter में विस्तार से पढ़ेंगे। इसका एक example देखते हैं।

#include<stdio.h>

int main() {

char name[20];

int age;

printf("Enter name:");

scanf("%s", name);

printf("Enter age:");

scanf("%d", &age);

printf("name=%s and age=%d", name, age);

}

इस program में पहले scanf से string input लिया है जिसके लिए %s का उपयोग किया  गया है और name नाम के string variable में store किया गया है। इसी तरह दूसरे int input के लिए %d का उपयोग किया गया है और इसे age variable में store करने  age  address &age दिया गया है।



Control Statements

Program में हर एक instruction को statement कहते हैं। जैसे variable बनाना, function call करना।ऊपर के सभी example में printf, scanf function को call किया है, variable बनाया है ये सभी statements हैं और सभी के अंत में ; लगाया गया है। हर एक statement के बाद ; लगाना जरूरी है अन्यथा program compile नहीं होगा, error देगा। यह ध्यान रखना जरुरी है कि किसी program के statement sequencially यानि एक के बाद एक ही execute(चलते) होते हैं। जो पहले लिखा होगा वह पहले execute होता है और एक statement के execute होने के बाद अगला statement execute होता है।

अभी तक हमने जो statements देखे वो सभी simple statements थे। इनमे एक instruction होता था जैसे variable को define करना, input या output लेना। ये सभी statement एक के बाद एक करके run होते हैं। कई बार यह जरुरत पड़ती है कि किसी statement को बहुत बार run करना है या किसी statement को कुछ condition होने पर run करना है। इसके लिए control statement का उपयोग करते हैं। control statements वो instruction होते हैं जो control करता है कि कब कौन सा instruction run होगा। इनके प्रकार और यह कैसे काम करते हैं, इनके बारे में नीचे दिया गया है। 

If else statement

जब किसी condition के सही होने पर कोई statement चलाना हो, अन्यथा कोई और statement चलाना हो तब इसका प्रयोग करते हैं। इसे एक example से समझते हैं।

#include<stdio.h>

int main() {

int marks;

printf("Enter Marks: ");

scanf("%d", &marks);

if(marks < 33) {

printf("You have failed!\n");

printf("You got only %d marks\n", marks);

}

else {

printf("You have passed\n");

printf("You got %d marks\n", marks);

}

printf("program completed\n");

}

इस program को run करके देखिये। scanf से marks veriable में input लेने बाद if else statement शुरू होता है। if के कोष्ठक( ) में लिखी condition सही होने पर उसके बाद लिखे block( {…} के बीच statements लिखने से एक block बन जाता है) के statements execute होते है। अगर condition गलत है तो else वाले block के statements execute होते हैं। last वाला printf if else के बाद है इसलिए वह print होगा ही चाहे कोई भी condition सही हो।

ध्यान रखे कि program का syntax सही हो। if के बाद condition ( ) में ही लिखी जाएगी किसी और कोष्ठक में नहीं। इसी तरह condition के बाद statements भी { } के अंदर ही आएंगे किसी और कोष्ठक में नहीं। else का block if के ठीक बाद आता है कहीं अलग से नहीं। 

if without else

ऊपर दिए गए program में if condition का एक block था jisme 2 statements थे और else के block में भी 2 statements. अगर condition गलत होने पर कुछ नहीं करना हो तो else का block लिखने की जरुरत नहीं जैसे कि नीचे एक example में दिया गया है। 

#include<stdio.h>

int main() {

int marks;

printf("Enter Marks: ");

scanf("%d", &marks);

if(marks < 33) {

printf("You have failed!\n");

printf("You got only %d marks\n", marks);

}

printf("program completed\n");

}

इसको चलाकर देखिये। जब आप marks 33 से कम enter करेंगे if condition सही हो जाएगी और if के अंदर वाले statements execute होंगे, अन्यथा नहीं होंगे। last वाला printf statement किसी condition के अंदर नहीं है इसलिए वह execute होगा ही। 

if..else if.... else

जब बहुत सी condition हो और अलग अलग condition के आधार पर अलग अलग statement चलाना हो तो इसका उपयोग किया जा सकता है। इसका example दिया जा रहा है।

#include<stdio.h>

int main() {

int marks;

printf("Enter Marks: ");

scanf("%d", &marks);


if(marks < 33) {

printf("You have failed!\n");

}

else if(marks < 45) {

printf("You passed in third division.\n");

}

else if(marks < 60) {

printf("You passed in second division.\n");

}

else {

printf("You have passed\n");

}

printf("You got %d marks\n", marks);

printf("program completed\n");

}

else if की condition  if के साथ ही आती है। जब भी कोई condition सही हो जाती है तो उसके 

indentation, print in Hindi, decimal to binary and how they stored, -ve numbers as well, ASCII table


TODO

  1. ASCII table.

  2. Binary to decimal and vice versa.

  3. different types of errors and their meaning.


For more information Comment.

एक टिप्पणी भेजें

0 टिप्पणियाँ