Sunday, August 21, 2011

सी प्रोग्रमिंग नोट्स

सी प्रोग्रामिंग नोट्स

इंट्रोडक्टरी सी प्रोग्रामिंग क्लास नोट्स, अध्याय 1



स्टीव शिखर सम्मेलन

इन नोटों UW का हिस्सा हैं प्रायोगिक कॉलेज इंट्रोडक्टरी सी प्रोग्रामिंग पर पाठ्यक्रम. वे (स्प्रिंग, 1995 में शुरुआत) तैयार किताब सी प्रोग्रामिंग भाषा के पूरक करने के लिए, किताब और इसके लेखक को प्यार से जाना जाता है के रूप में ब्रायन Kernighan और डेनिस रिची, या कश्मीर एंड आर द्वारा नोटों पर आधारित हैं. (द्वितीय संस्करण 1988 में अप्रेंटिस - हॉल, ISBN 0-13-110362-8 द्वारा प्रकाशित किया गया था.) ये नोट कर रहे हैं अब (1995-6, सर्दी के रूप में) अकेले खड़े होने का इरादा है, हालांकि वर्गों को अभी भी पार कर रहे हैं कश्मीर एंड आर के उन लोगों के लिए जो पाठक प्रदर्शनी में गहराई से अधिक का पीछा करना चाहता है के लिए, संदर्भित.

अध्याय 1: परिचय

सी (कश्मीर एंड आर के रूप में स्वीकार करते हैं) एक अपेक्षाकृत छोटे भाषा है, लेकिन एक जो (अपने प्रशंसकों के लिए, वैसे भी) अच्छी तरह से पहनता है. सी छोटी सी, unambitious सुविधा सेट एक असली लाभ यह है: वहाँ जानने के कम है, वहाँ अतिरिक्त सामान के रास्ते में नहीं है जब आप इसे ज़रूरत नहीं है. यह भी एक नुकसान हो सकता है: के बाद से यह आप के लिए सब कुछ नहीं है, वहाँ एक बहुत तुम अपने आप को क्या करना है. (वास्तव में, यह एक अतिरिक्त लाभ के रूप में कई द्वारा देखा जाता है: कुछ भी भाषा आप के लिए नहीं करता, यह आप के लिए निर्देशित नहीं करता है या तो, तो आप के लिए है कि कुछ है लेकिन आप चाहते करने के लिए स्वतंत्र हैं.)

सी कभी कभी एक `` विधानसभा उच्च स्तर की भाषा के रूप में कहा जाता है.''कुछ लोगों को लगता है कि है कि एक अपमान है, लेकिन यह वास्तव में भाषा की एक विचार और महत्वपूर्ण पहलू है. यदि आप विधानसभा भाषा में क्रमादेशित है, तो आप शायद सी बहुत प्राकृतिक और सहज लगता है (हालांकि यदि आप भी भारी मशीन स्तर के विवरण पर ध्यान केंद्रित कर रहे हैं, तो आप शायद अनावश्यक nonportable कार्यक्रमों के साथ समाप्त होगा). यदि आप विधानसभा भाषा में प्रोग्राम नहीं है, आप कुछ उच्च स्तरीय सुविधाओं की सी की कमी से निराश हो सकता है. या तो मामले में, तुम क्यों सी को इस तरह डिजाइन किया गया था समझना चाहिए: इतना है कि प्रतीत होता है सरल सी में व्यक्त निर्माण मनमाने ढंग से महंगा विस्तार नहीं मशीन (समय या स्थान में) भाषा निर्माण जब संकलित. यदि आप एक सी प्रोग्राम बस और संक्षेप लिखते हैं, यह एक संक्षिप्त, कुशल मशीन भाषा निष्पादन योग्य में परिणाम की संभावना है. यदि आप पाते हैं कि निष्पादन योग्य प्रोग्राम एक सी कार्यक्रम से परिणामस्वरूप कुशल नहीं है, यह शायद की वजह से तुमने कुछ मूर्खतापूर्ण कुछ संकलक अपनी पीठ है जो आप पर कोई नियंत्रण नहीं है के पीछे था की वजह से नहीं है,. किसी भी मामले में, वहाँ सी कम स्तर के स्वाद के बारे में शिकायत करने में कोई मतलब नहीं है: सी है कि यह क्या है.

एक प्रोग्रामिंग भाषा एक उपकरण है, और कोई उपकरण हर काम बेबस प्रदर्शन कर सकते हैं. यदि आप एक घर का निर्माण कर रहे हैं, और मैं तुम्हें सिखा रहा हूँ कैसे एक हथौड़ा का उपयोग करने के लिए, और आप से पूछना कैसे gables में छत और trusses इकट्ठा करने के लिए, कि एक वैध सवाल है, लेकिन जवाब `` कैसे दायरे से बाहर गिर गया है मुझे क्या करना है? एक हथौड़ा का उपयोग करें.''और `` में मैं एक घर का निर्माण कैसे करूँ?''. उसी तरह, हम कि सी बनाया में नहीं है देख सुविधाओं हूँ और हर समारोह है कि हम कभी जबकि प्रोग्रामिंग करने की आवश्यकता हो सकती है प्रदर्शन.

जैसा कि ऊपर उल्लेख किया, सी अपेक्षाकृत कुछ प्रोग्रामर पर बातें करने के तरीके में बनाया. लगाता है तार से छेड़छाड़, स्मृति आवंटन, और इनपुट / आउटपुट (आई / ) कर रहे हैं जैसे कुछ सामान्य कार्यों, पुस्तकालय कार्यों पर फोन करके प्रदर्शन कर रहे हैं. अन्य कार्य बनाने या निर्देशिका लिस्टिंग, या एक माउस के साथ बातचीत, या विंडोज़ या अन्य उपयोगकर्ता इंटरफ़ेस तत्वों प्रदर्शित, या रंग ग्राफिक्स कर के रूप में जो तुम करना चाहते हो सकता, सभी में सी भाषा द्वारा परिभाषित नहीं कर रहे हैं. आप एक सी प्रोग्राम से ये बातें करते हैं, पाठ्यक्रम के कर सकते हैं, लेकिन आप सेवाओं जो अपने प्रोग्रामिंग (संकलक, प्रोसेसर, और ऑपरेटिंग सिस्टम) पर्यावरण और जो सी मानक द्वारा परिभाषित नहीं कर रहे हैं अजीब कर रहे हैं पर बुला रहे हो जाएगा. इस पाठ्यक्रम के बाद से पोर्टेबल सी प्रोग्रामिंग के बारे में है, यह भी सभी सी वातावरण में नहीं उपलब्ध कराई गई सुविधाओं के स्पष्ट स्टीयरिंग जाएगा.

सी के एक अन्य पहलू यह है कि यहाँ उल्लेख के लायक है कि यह है, इसे साफ करना, थोड़ा खतरनाक है. सी, सामान्य रूप में नहीं है, कड़ी मेहनत की कोशिश गलतियों से एक प्रोग्रामर की रक्षा. यदि आप कोड का एक टुकड़ा है जो तुम्हारा कुछ निरीक्षण के माध्यम से () बेतहाशा क्या आप इसे करने के लिए इरादा से कुछ अलग करते हैं, और अपने डेटा को हटाने या आपके डिस्क trashing सहित लिखते हैं, और अगर यह संभव है संकलक के लिए संकलन करने के लिए यह, यह आम तौर पर. आप प्रपत्र की चेतावनी नहीं मिल `` क्या आप वास्तव में ...?'' मतलब है या `` क्या आप यकीन है कि तुम सच में ...?''. के लिए चाहते हैं सी अक्सर एक तेज चाकू की तुलना में है: यह कुछ मांग कार्य तुम्हारे मन में है पर एक शल्य चिकित्सा सटीक काम कर सकते हैं, लेकिन यह भी अपनी उंगली काटने के एक शल्य चिकित्सा सटीक काम कर सकते हैं. यह आप पर निर्भर है इसे सावधानी से इस्तेमाल.

सी का यह पहलू बहुत व्यापक रूप से आलोचना की है, यह भी प्रयोग किया जाता है (उचित) तर्क है कि सी एक अच्छा शिक्षण भाषा नहीं है. सी aficionados के सी के इस पहलू से प्यार है, क्योंकि यह मतलब है कि सी के लिए उन्हें खुद से बचाने की कोशिश नहीं करता है: जब वे जानते हैं कि वे क्या कर रहे हैं, तो भी यह जोखिम भरा है या अस्पष्ट है, वे ऐसा कर सकते है. के छात्र सी सी के इस पहलू से नफरत है, क्योंकि यह अक्सर लगता है कि भाषा के रूप में अगर एक विशेष रूप से उन मूर्ख जाल और पकड़ लिया ``''! एस में नेतृत्व करने के लिए डिज़ाइन साजिश के कुछ प्रकार है

इस भाषा का एक और पहलू है जो यह काफी व्यर्थ है के बारे में शिकायत है. यदि आप देखभाल और ध्यान देना है, तो आप नुकसान के कई से बचने कर सकते हैं. इन नोटों स्पष्ट है (और स्पष्ट तो नहीं) मुसीबत स्पॉट के कई बिंदु होगा.

1.1 एक पहला उदाहरण

[यह खंड कश्मीर एंड आर सेक करने के लिए संगत. 1.1]

प्रोग्रामिंग सीखने का सबसे अच्छा तरीका सही में गोता और असली कार्यक्रमों लेखन शुरू है. इस तरह, जो अन्यथा अमूर्त प्रतीत होता अवधारणाओं समझ बनाने, और तुम भी एक छोटे से कार्यक्रम में काम करने के लिए हो रही से सकारात्मक प्रतिक्रिया मिल आप इसे सुधार या अगले एक लिखने के लिए एक महान प्रोत्साहन देता है.

`` असली''कार्यक्रमों के साथ गोताखोरी सही दूर एक और लाभ है, अगर केवल व्यावहारिक: यदि आप एक पारंपरिक संकलक का उपयोग कर रहे हैं, आप एक कार्यक्रम का एक टुकड़ा नहीं चला और देखो यह क्या करता है है सकते हैं, कुछ भी नहीं है जब तक आप चलेंगे एक पूरा कार्यक्रम (अगर छोटे या तुच्छ). तुम सब कुछ आप के लिए एक पूरा कार्यक्रम एक बार में सभी लिखने की जरूरत है, ताकि आप कुछ चीजें लेने के लिए होगा चाहते हैं `` विश्वास और अपना पहला कार्यक्रम में उन्हें तोता''पर इससे पहले कि आप उन्हें समझने के लिए शुरू नहीं सीख सकते हैं. (आप एक बार में सिर्फ एक अभिव्यक्ति या बयान किसी भी अधिक की तुलना में आप एक समय में एक विदेशी भाषा के एक शब्द बोलना सीख सकते हैं कार्यक्रम नहीं जानने के लिए यदि आप सभी जानते शब्दों की एक मुट्ठी है, तो आप वास्तव में कुछ नहीं कह सकते हैं कर सकते हैं. तुम भी भाषा के शब्द क्रम और व्याकरण और वाक्य संरचना और लेख और verbs की अवनति के बारे में कुछ पता करने की आवश्यकता है).

आस्था पर चीजें लेने के लिए कभी कभी आवश्यकता के अलावा, वहाँ एक और अधिक गंभीर इस `` में गोता और कार्यक्रम के संभावित खामी''दृष्टिकोण है: यह सीखने परीक्षण और त्रुटि के लिए सीखने के द्वारा कर से एक छोटा सा कदम है, और जब आप परीक्षण और त्रुटि द्वारा प्रोग्रामिंग जानने के, तो आप बहुत आसानी से कई त्रुटियाँ सीख सकते हैं. जब आप यकीन नहीं है कि कुछ काम करेंगे, नहीं कर रहे हैं या आप भी यकीन है कि तुम क्या इस्तेमाल कर सकते हैं कि काम हो सकता नहीं कर रहे हैं, और आप कुछ प्रयास करें, और यह काम करता है, तो आप किसी भी गारंटी है कि तुम क्या करने की कोशिश की अधिकार के लिए काम नहीं है कारण. तुम बस `` सीखा''कुछ है कि दुर्घटना के द्वारा ही या अपने संकलक पर ही काम करता है, सकता है और यह बहुत कठिन हो सकता है यह बाद में संयुक्त राष्ट्र जानने के लिए, हो सकता है जब यह काम बंद हो जाता है.

इसलिए, जब आप कुछ के बारे में सुनिश्चित नहीं कर रहे हैं, बहुत सावधान रहना होगा इससे पहले कि आप रवाना हो जाओ और यह कोशिश `` सिर्फ अगर यह काम करेंगे देखने के लिए बेशक.'', तुम बिल्कुल यकीन है कि तुम से पहले कुछ काम चल रहा है कभी नहीं हो सकता यह प्रयास करें, अन्यथा हम चीजों की कोशिश कभी नहीं था. लेकिन आप एक उम्मीद है कि कुछ काम करने से पहले आप इसे करने की कोशिश की जा रही है, और यदि आप भविष्यवाणी कैसे करने के लिए कुछ है या नहीं है कि कुछ काम है और अपने आप को यह प्रयोगात्मक निर्धारित कर रहे मिल जाएगा कर सकते हैं, अपने मन में एक नोट बनाने चाहिए कि जो कुछ भी तुम सिर्फ प्रयोग के परिणाम के आधार पर सीखा है शक है.

कश्मीर एंड आर में पहला उदाहरण कार्यक्रम किसी भी भाषा में पहला उदाहरण कार्यक्रम है: प्रिंट या एक साधारण स्ट्रिंग प्रदर्शित करने के लिए, और बाहर निकलें. यहाँ कश्मीर एंड आर के अपने संस्करण `` हैलो, दुनिया''कार्यक्रम है:

 #  शामिल
 
 (मुख्य)
 {
 printf ("नमस्ते, दुनिया \ n!");
 वापसी 0;
 }

यदि आप एक सी संकलक है, पहली बात करने के लिए बाहर आंकड़ा कैसे इस कार्यक्रम में टाइप करने के लिए और यह संकलन और इसे चलाने और देखने के लिए जहां अपने उत्पादन गया है.

(यदि आप अभी तक एक सी संकलक नहीं है, पहली बात करने के लिए एक मिल रहा है.)

पहली पंक्ति व्यावहारिक है बॉयलरप्लेट, यह लगभग सभी कार्यक्रमों हम लिख में दिखाई देगा. यह पूछते हैं कि `` मानक पुस्तकालय मैं / हे के साथ क्या कुछ होने की परिभाषाओं''हमारे कार्यक्रम में शामिल किया, इन परिभाषाओं अगर हम पुस्तकालय समारोह printf सही ढंग से फोन कर रहे हैं की जरूरत है.

दूसरी पंक्ति का कहना है कि हम एक मुख्य समारोह का नाम को परिभाषित कर रहे हैं. समय से अधिकांश, हम हमारे कार्यों कुछ भी हम चाहते हैं के नाम है, लेकिन कर सकते हैं समारोह में मुख्य नाम खास है: यह समारोह में कहा कि `` पहली बार बुलाया''जब हमारे कार्यक्रम चल रहा है शुरू होता है. कोष्ठकों के खाली जोड़ी को इंगित करता है कि हमारी मुख्य समारोह में कोई बहस नहीं है, कि है, वहाँ किसी भी जानकारी है जो जब समारोह कहा जाता है में पारित होने की जरूरत नहीं है स्वीकार.

ब्रेसिज़ और {} यहाँ सी. में बयान की एक सूची के चारों ओर, वे समारोह बनाने के मुख्य बयानों की सूची के चारों ओर.

लाइन

         printf ("नमस्ते, दुनिया \ n!");

कार्यक्रम में पहले बयान है.

यह पूछते हैं कि printf समारोह बुलाया जा; printf एक पुस्तकालय समारोह जो स्वरूपित उत्पादन प्रिंट है. जानकारी जो यह करने के लिए सौंप दिया है जो इसे पर कार्य करना चाहिए: कोष्ठकों है printf तर्क सूची के चारों ओर . पंक्ति के अंत में सेमीकोलन बयान समाप्त.

(Printf 'नाम तथ्य यह है कि सी पहले विकसित किया गया था जब Teletypes और अन्य मुद्रण टर्मिनलों व्यापक उपयोग में अभी भी थे को दर्शाता है आज, बेशक, वीडियो प्रदर्शित करता है कहीं अधिक आम हैं printf..' मानक आउटपुट के लिए ``''प्रिंट, कि कार्यक्रम के लिए उत्पादन के लिए जाना डिफ़ॉल्ट स्थान पर है, आजकल, कि लगभग हमेशा एक वीडियो या कि स्क्रीन पर एक खिड़की के परदे यदि आप एक प्रिंटर है, तो आप आमतौर पर अतिरिक्त कुछ करना है मुद्रित करने के लिए एक कार्यक्रम यह करने के लिए).

printf 'पहले (और इस मामले में, केवल) तर्क स्ट्रिंग है जो इसे प्रिंट करना चाहिए. स्ट्रिंग, डबल उद्धरण "" में संलग्न है, `` शब्द नमस्ते, दुनिया''एक विशेष अनुक्रम द्वारा पीछा के होते हैं: \ n. तार में, बैकस्लैश \ के साथ किसी भी दो चरित्र अनुक्रम शुरुआत एक एक विशेष चरित्र का प्रतिनिधित्व करता है. \ n अनुक्रम `` नया''लाइन चरित्र, जो एक गाड़ी वापसी या लाइन फ़ीड या जो कुछ भी यह करने के लिए उत्पादन की एक पंक्ति के अंत और अगले करने के लिए नीचे ले जाने के लेता प्रिंट का प्रतिनिधित्व करता है. (यह कार्यक्रम केवल उत्पादन की एक पंक्ति प्रिंट, लेकिन यह अभी भी इसे समाप्त करने के लिए महत्वपूर्ण है.)

मुख्य समारोह में दूसरी पंक्ति है

         वापसी 0;

सामान्य में, एक समारोह अपनी कॉलर में एक मूल्य वापसी, और हो सकता है मुख्य कोई अपवाद नहीं है.

जब मुख्य रिटर्न (है कि, इसके अंत तक पहुँच और कामकाज बंद हो जाता है है), कार्यक्रम अपनी समाप्ति पर है, और मुख्य से वापसी मान ऑपरेटिंग प्रणाली (या जो भी प्रोग्राम है कि मुख्य के मुख्य समारोह लागू) चाहे वह सफल हो या कहता है नहीं. परंपरा के अनुसार, 0 की वापसी मान सफलता इंगित करता है.

इस कार्यक्रम तो बिल्कुल तुच्छ है कि यह लगता है कि के रूप में अगर यह भी यह में टाइप और इसे चलाने की कोशिश कर रहा लायक नहीं है लग सकता है, लेकिन ऐसा करने से एक बड़ा हो सकता है (और निश्चित रूप से एक महत्वपूर्ण है) हो सकता है बाधा पहली. कंप्यूटर पर एक अपरिचित, यह मनमाने ढंग से करने के लिए बाहर आंकड़ा कैसे एक पाठ कार्यक्रम स्रोत, या संकलन और यह लिंक कैसे, या इसे कैसे आह्वान, या बाद क्या हुआ (यदि?) दौड़ा युक्त फ़ाइल को दर्ज करने के लिए मुश्किल हो सकता है. सबसे अनुभवी प्रोग्रामर सी तुरंत यह एक साधारण प्रोग्राम है जब भी वे बाहर एक नई प्रणाली की कोशिश कर रहे हैं या में प्रवेश करने या प्रोग्राम या प्रोग्राम्स के भीतर से एक मुद्रण उत्पादन का नया तरीका इमारत का एक नया तरीका करने के लिए वापस जाओ. के रूप में Kernighan और रिची का कहना है, बाकी सब अपेक्षाकृत आसान है.

कैसे आप संकलन और चलाने के इस प्रोग्राम (या किसी भी) संकलक और ऑपरेटिंग सिस्टम आप उपयोग कर रहे हैं की एक समारोह है. पहला कदम प्रकार में, बिल्कुल के रूप में दिखाया गया है, इस प्रोग्राम को पाठ वाली फ़ाइल बनाने के लिए एक पाठ संपादक का उपयोग करने के लिए शामिल हो सकता है. आप फ़ाइल एक नाम दे देंगे, और सभी सी compilers (है कि मैं कभी सुना है) कि एक्सटेंशन . के साथ सी स्रोत अंत युक्त फ़ाइलों की आवश्यकता होती है. तो तुम एक hello.c बुलाया फ़ाइल में प्रोग्राम को पाठ की जगह हो सकता है .

दूसरे चरण के लिए कार्यक्रम संकलन है. (कड़ाई से बोल रहा हूँ, संकलन दो कदम, उचित संकलन को जोड़ने के द्वारा बाद के होते हैं, लेकिन हम पहले इस तरह के अंतर की अनदेखी, विशेष रूप से, क्योंकि संकलक अक्सर जोड़ने कदम स्वचालित रूप से शुरू करने के ख्याल रखता है. सकते हैं) कई यूनिक्स प्रणालियों पर, आदेश एक संकलन करने के लिए किसी स्रोत फ़ाइल hello.c से सी कार्यक्रम है

         सीसी -  हैलो hello.c

आप यूनिक्स शैल प्रांप्ट पर इस आदेश टाइप करें, और यह अनुरोध है कि सीसी (सी संकलक) कार्यक्रम चलाए जा, अपने उत्पादन रखने (यानी नई निष्पादन योग्य प्रोग्राम है बनाता है यह) फ़ाइल हैलो में, और अपने इनपुट ले ( यानी स्रोत कोड फ़ाइल hello.c से हो सकता है) संकलित.

तीसरे चरण (निष्पादित आह्वान) नव निर्मित नमस्ते कार्यक्रम चलाने के लिए है. एक यूनिक्स प्रणाली पर फिर से, यह बस कार्यक्रम का नाम टाइप करके किया जाता है:

         नमस्ते

कैसे अपने सिस्टम को सेट कर दिया जाता है (विशेष रूप में, कि क्या वर्तमान निर्देशिका निष्पादनयोग्य के लिए खोज पथ चर पर आधारित है, पर) पर निर्भर करता है, आप टाइप हो सकता है

         /. हैलो

संकेत मिलता है कि हैलो कार्यक्रम वर्तमान निर्देशिका (के रूप में कुछ `` बिन''निष्पादन योग्य कार्यक्रमों की पूर्ण निर्देशिका, कहीं विरोध) में है.

तुम भी सी compilers की अपनी पसंद हो सकता है. कई यूनिक्स मशीनों पर, सीसी कमांड एक बड़े संकलक जो आधुनिक, एएनएसआई मानक सी वाक्यविन्यास पहचान नहीं करता है. एक पुरानी संकलक साधारण प्रोग्राम हम के साथ शुरू हो जाएगा स्वीकार करते हैं, लेकिन यह हमारे बाद के कार्यक्रमों के सबसे नहीं स्वीकार करेंगे. यदि आप पाते हैं अपने आप प्रोग्राम है जो आप में टाइप किया है बिल्कुल के रूप में वे पता चला रहे हैं पर चौंकाने वाला संकलन त्रुटियाँ हो रही, यह शायद इंगित करता है कि आप एक बड़े संकलक का उपयोग कर रहे हैं. कई मशीनों पर एक और संकलक एसीसी या जीसीसी उपलब्ध है, और आप इसे उपयोग करना चाहते है, बजाय बुलाया . (एसीसी और जीसीसी दोनों आम तौर पर सीसी के रूप में ही लागू कर रहे हैं, कि, ऊपर सीसी कमांड के बजाय कहते हैं, gcc-o हैलो hello.c टाइप किया जा .)

(यूनिक्स प्रणालियों के बारे में एक अंतिम चेतावनी: नाम नहीं, अपने परीक्षण कार्यक्रमों परीक्षण है क्योंकि वहाँ पहले से ही एक मानक परीक्षण कहा जाता है आदेश है, और तुम और कमांड दुभाषिया बुरी तरह से अगर आप अपने खुद के साथ प्रणाली का परीक्षण आदेश जगह करने की कोशिश भ्रमित नहीं कम से कम क्योंकि लगभग निश्चित रूप से अपने खुद के कुछ पूरी तरह से अलग करता है.)

MS-DOS के तहत, संकलन प्रक्रिया काफी समान है. तुम प्रकार के आदेश के नाम पर अपने संकलक (जैसे Microsoft सी संकलक, टीसी या Borland टर्बो सी, आदि के लिए बीसीसी के लिए सीएल) पर निर्भर करेगा. आप मैन्युअल रूप से दूसरा, जोड़ने, शायद एक लिंक या tlink नाम कमांड के साथ कदम प्रदर्शन हो सकता है. निष्पादन योग्य फ़ाइल है जो संकलक / linker बनाता है. exe (या शायद कॉम.) में समाप्त नाम है, लेकिन आप अभी भी यह आधार नाम (जैसे हैलो) टाइप करके लागू कर सकते हैं . पूर्ण विवरण के लिए अपने संकलक प्रलेखन देखें, मैनुअल के कैसे दर्ज करें, संकलन, और एक छोटा सा प्रोग्राम है कि कुछ सरल उत्पादन प्रिंट चलाने के लिए, बस के रूप में हम यहाँ का वर्णन करने की कोशिश कर रहे हैं के एक प्रदर्शन को शामिल करना चाहिए.

एक एकीकृत या `` Macintosh पर या Microsoft Windows के विभिन्न संस्करणों के तहत उन जैसे दृश्य''progamming पर्यावरण, में, कदम तुम दर्ज करें, संकलन, और एक कार्यक्रम चलाने के ले कुछ अलग है (और, सैद्धांतिक रूप से सरल) कर रहे हैं. आमतौर पर, वहाँ में यह एक नया स्रोत खिड़की, प्रकार स्रोत कोड को खोलने के लिए एक तरीका है, यह एक फ़ाइल नाम देते हैं, और यह कार्यक्रम के लिए (या `` परियोजना'') आप का निर्माण कर रहे हैं जोड़ने. यदि आवश्यक हो, वहाँ क्या अन्य स्रोत फ़ाइलें (या `` मॉड्यूल'') निर्दिष्ट प्रोग्राम बनाने के लिए एक तरीका हो जाएगा. फिर, वहाँ एक बटन या मेनू चयन है जो compiles और चलाता है प्रोग्रामिंग वातावरण के भीतर से सभी कार्यक्रम, है. (वहाँ भी एक स्वसंपूर्ण निष्पादन योग्य फ़ाइल है जो आप पर्यावरण के बाहर से चला सकते हैं बनाने के लिए रास्ता हो जाएगा.) एक पीसी संगत वातावरण में, आप DOS प्रोग्राम या Windows प्रोग्राम बनाने के बीच चयन हो सकता है. (यदि आप printf समारोह से संबंधित परेशानी है, MS-DOS का लक्ष्य पर्यावरण को निर्दिष्ट करने की कोशिश माना जाता है, कुछ compilers है जो Windows वातावरण में लक्षित कर रहे हैं आप printf फोन नहीं दूँगी, क्योंकि जब तक आप कुछ विशेषज्ञ कार्यों का अनुरोध करने के लिए कहते हैं कि एक खिड़की बनाया जा करने के लिए printf मुद्रित करने के लिए कोई खिड़की है) फिर, परिचयात्मक या ट्यूटोरियल मैनुअल है कि प्रोग्रामिंग पैकेज के साथ आया की जाँच करें, यह आप करने के लिए अपना पहला कार्यक्रम चलाने के लिए आवश्यक कदम के माध्यम से चलना चाहिए.

1.2 दूसरा उदाहरण

हमारा दूसरा उदाहरण के पहले की तुलना में थोड़ा और अधिक व्यावहारिक उपयोग की है, लेकिन यह कुछ और प्रोग्रामिंग भाषा के तत्वों का परिचय:

 #  शामिल
 
 / * कुछ संख्या मुद्रित करने के लिए एक सरल पाश वर्णन * /
 
 (मुख्य)
 {
 int i;
 
 के लिए (i = 0; i <10, मैं मैं = 1 +)
         printf ("मैं% d \ n", i);
 
 वापसी 0;
 }

से पहले के रूप में, रेखा # शामिल बॉयलरप्लेट जो आवश्यक के बाद से हम printf समारोह बुला रहे हैं, और मुख्य () और {ब्रेसिज़ की जोड़ी} संकेत मिलता है और समारोह में मुख्य नाम हम कर रहे हैं चित्रित (फिर से) लेखन.

पहले नई लाइन लाइन

         / * कुछ संख्या मुद्रित करने के लिए एक सरल पाश वर्णन * /

जो एक टिप्पणी है.

वर्णों के बीच कुछ भी / * और * / संकलक द्वारा नजरअंदाज कर दिया है, लेकिन एक कार्यक्रम को पढ़ने और समझने की कोशिश कर रहे व्यक्ति के लिए उपयोगी हो सकता है. आप टिप्पणी जोड़ने के कहीं भी आप इस कार्यक्रम में चाहते हैं, दस्तावेज़ के लिए कार्यक्रम क्या है, यह क्या करता है, जो इसे लिखा था, कि यह कैसे काम करता है, विभिन्न कार्यों के लिए क्या कर रहे हैं और वे कैसे काम, विभिन्न चर आदि, के लिए क्या कर रहे हैं कर सकते हैं .

दूसरी नई लाइन, समारोह के भीतर नीचे मुख्य है

         int i;

जो वाणी है कि हमारे समारोह चर मैं नाम का उपयोग करेगा .

चर प्रकार int है, जो एक सादे पूर्णांक है .

अगला, हम एक पाश सेट:

         के लिए (i = 0; i <10, मैं मैं = 1 +)

के लिए खोजशब्द को इंगित करता है. पाश के लिए एक तीन अभिव्यक्ति द्वारा नियंत्रित किया जाता है, कोष्ठकों में संलग्न और अर्धविरामों से विभाजित है कि हम स्थापित कर रहे हैं पाश के लिए एक ``''.

इन भाव का कहना है, कि इस मामले में, पाश मैं 0 करने के लिए सेटिंग के द्वारा शुरू होता है, कि यह रूप में लंबे समय जारी है के रूप में मैं कम से कम 10 एक है, और पाश के प्रत्येक चलना के बाद, मैं 1 (है कि incremented द्वारा किया जाना चाहिए कि 1 इसकी कीमत में जोड़ा).

अंत में, हम के रूप में पहले, लेकिन कई मतभेदों के साथ printf समारोह के लिए एक फोन है . सबसे पहले, printf के लिए कॉल पाश के लिए शरीर के भीतर है . इसका मतलब यह है कि नियंत्रण प्रवाह एक बार printf कॉल के माध्यम से पारित नहीं करता है, लेकिन इसके बजाय कि कॉल के रूप में कई बार के रूप में पाश के लिए तय कर रहे हैं किया जाता है. इस मामले में, printf कई बार बुलाया जाएगा: एक बार जब मैं 0 है, एक बार जब मैं एक है, एक बार जब मैं 2 है, और इतने पर जब तक मैं 9 कुल 10 बार के लिए है .

Printf फोन में एक दूसरा फर्क यह है कि स्ट्रिंग के लिए मुद्रित किया जा, "मैं% d", एक प्रतिशत चिह्न होता है. जब भी printf एक प्रतिशत चिह्न देखता है, यह इंगित करता है कि printf के लिए स्ट्रिंग के सटीक पाठ मुद्रित नहीं माना जाता है, लेकिन बजाय अपने तर्कों की एक और एक को पढ़ने के लिए निर्णय क्या मुद्रित करने के लिए चाहिए. पत्र प्रतिशत चिह्न के बाद यह बताता है की उम्मीद करने के लिए तर्क का प्रकार क्या है और कैसे इसे प्रिंट. इस मामले में, पत्र से पता चलता है कि printf एक int की उम्मीद है, और इसे दशमलव में मुद्रित है. अंत में, हम देखते हैं कि printf वास्तव में एक और तर्क के साथ बुलाया जा रहा है, दो के एक कुल के लिए, अल्पविराम के द्वारा अलग. दूसरा तर्क चर मैं, जो वास्तव में एक int के रूप में% d द्वारा अपेक्षित है. इस सब के प्रभाव है कि हर बार यह कहा जाता है, printf लाइन युक्त चर मैं वर्तमान मूल्य प्रिंट होगा:

         मैं 0 है
         मैं 1 है
         मैं 2 है
         ...

पाश के माध्यम से कई यात्राओं के बाद, मैं अंततः 9 के बराबर होगा . कि पाश के माध्यम से यात्रा के बाद, तीसरे नियंत्रण अभिव्यक्ति मैं = i + 1 इसकी कीमत 10 से वेतन वृद्धि करेंगे . हालत मैं <10 सच नहीं है, तो पाश के माध्यम से कोई अधिक यात्राएं ले रहे हैं. इसके बजाय, नियंत्रण प्रवाह विवरण के लिए नीचे पाश, जो वापसी बयान है के लिए निम्नलिखित कूदता है. मुख्य फ़ंक्शन देता है, और कार्यक्रम समाप्त हो गया है.


2.1 Types

[This section corresponds to K&R Sec. 2.2]

There are only a few basic data types in C. The first ones we'll be encountering and using are:

  • char a character
  • int an integer, in the range -32,767 to 32,767
  • long int a larger integer (up to +-2,147,483,647)
  • float a floating-point number
  • double a floating-point number, with more precision and perhaps greater range than float

If you can look at this list of basic types and say to yourself, ``Oh, how simple, there are only a few types, I won't have to worry much about choosing among them,'' you'll have an easy time with declarations. (Some masochists wish that the type system were more complicated so that they could specify more things about each variable, but those of us who would rather not have to specify these extra things each time are glad that we don't have to.)

The ranges listed above for types int and long int are the guaranteed minimum ranges. On some systems, either of these types (or, indeed, any C type) may be able to hold larger values, but a program that depends on extended ranges will not be as portable. Some programmers become obsessed with knowing exactly what the sizes of data objects will be in various situations, and go on to write programs which depend on these exact sizes. Determining or controlling the size of an object is occasionally important, but most of the time we can sidestep size issues and let the compiler do most of the worrying.

(From the ranges listed above, we can determine that type int must be at least 16 bits, and that type long int must be at least 32 bits. But neither of these sizes is exact; many systens have 32-bit ints, and some systems have 64-bit long ints.)

You might wonder how the computer stores characters. The answer involves a character set, which is simply a mapping between some set of characters and some set of small numeric codes. Most machines today use the ASCII character set, in which the letter A is represented by the code 65, the ampersand & is represented by the code 38, the digit 1 is represented by the code 49, the space character is represented by the code 32, etc. (Most of the time, of course, you have no need to know or even worry about these particular code values; they're automatically translated into the right shapes on the screen or printer when characters are printed out, and they're automatically generated when you type characters on the keyboard. Eventually, though, we'll appreciate, and even take some control over, exactly when these translations--from characters to their numeric codes--are performed.) Character codes are usually small--the largest code value in ASCII is 126, which is the ~ (tilde or circumflex) character. Characters usually fit in a byte, which is usually 8 bits. In C, type char is defined as occupying one byte, so it is usually 8 bits.

Most of the simple variables in most programs are of types int, long int, or double. Typically, we'll use int and double for most purposes, and long int any time we need to hold integer values greater than 32,767. As we'll see, even when we're manipulating individual characters, we'll usually use an int variable, for reasons to be discussed later. Therefore, we'll rarely use individual variables of type char; although we'll use plenty of arrays of char.


2.5 Arithmetic Operators

[This section corresponds to K&R Sec. 2.5]

The basic operators for performing arithmetic are the same in many computer languages:

        +       addition
        -       subtraction
        *       multiplication
        /       division
        %       modulus (remainder)

The - operator can be used in two ways: to subtract two numbers (as in a - b), or to negate one number (as in -a + b or a + -b).

When applied to integers, the division operator / discards any remainder, so 1 / 2 is 0 and 7 / 4 is 1. But when either operand is a floating-point quantity (type float or double), the division operator yields a floating-point result, with a potentially nonzero fractional part. So 1 / 2.0 is 0.5, and 7.0 / 4.0 is 1.75.

The modulus operator % gives you the remainder when two integers are divided: 1 % 2 is 1; 7 % 4 is 3. (The modulus operator can only be applied to integers.)

An additional arithmetic operation you might be wondering about is exponentiation. Some languages have an exponentiation operator (typically ^ or **), but C doesn't. (To square or cube a number, just multiply it by itself.)

Multiplication, division, and modulus all have higher precedence than addition and subtraction. The term ``precedence'' refers to how ``tightly'' operators bind to their operands (that is, to the things they operate on). In mathematics, multiplication has higher precedence than addition, so 1 + 2 * 3 is 7, not 9. In other words, 1 + 2 * 3 is equivalent to 1 + (2 * 3). C is the same way.

All of these operators ``group'' from left to right, which means that when two or more of them have the same precedence and participate next to each other in an expression, the evaluation conceptually proceeds from left to right. For example, 1 - 2 - 3 is equivalent to (1 - 2) - 3 and gives -4, not +2. (``Grouping'' is sometimes called associativity, although the term is used somewhat differently in programming than it is in mathematics. Not all C operators group from left to right; a few group from right to left.)

Whenever the default precedence or associativity doesn't give you the grouping you want, you can always use explicit parentheses. For example, if you wanted to add 1 to 2 and then multiply the result by 3, you could write (1 + 2) * 3.

By the way, the word ``arithmetic'' as used in the title of this section is an adjective, not a noun, and it's pronounced differently than the noun: the accent is on the third syllable.


No comments:

Post a Comment