خانه / برنامه نویسی / ++c / c / آموزش برنامه نویسی سی / c – بخش اول
معرفی|زبان برنامه نویسی|برنامه نویسی سی|c|c compiler
معرفی|زبان برنامه نویسی|برنامه نویسی سی|c|c compiler آموزش زبان برنامه نویسی سی|متغیررها|ثوابت در زبان سی

آموزش برنامه نویسی سی / c – بخش اول

آموزش زبان برنامه نویسی سی|متغیررها|ثوابت در زبان سی

با سلام

در این بخش از آموزش زبان برنامه نویسی سی ، به معرفی کار با متغییرها در این زبان و تعریف ثوابت می پردازیم.

مطابق با دانش برنامه نویسی یک « متغیر » یک یا چند واحد از خانه های حافظه ( موقت ) است که :

۱ – دارای یک نام یا همان « شناسه » است که فقط با همان شناسه و از طریق آن می توان به آن متغیر دسترسی پیدا نمود ( حتی در صورتی که بخواهیم ، غیر مستقیم به محتوای آن توسط اشاره گر دسترسی پیدا کنیم ، باید اشاره گر را به نام یا همان شناسه متغیر اشاره دهیم )

۲ – دارای محتوایی است که به آن مقدار یا موجودی آن متغیر می گوئیم

۳ – در هر جای برنامه می تواینم به صورت دستی مقدار جدیدی به آن بدهیم یا همان مقداری که دارد دستخوش تغییر نمائیم و یا به صورت خودکار ، تغییر آن را واگذار کنیم به یک یا چند تابع ( مقدار آن قابل تغییر است ، مگر آنکه پیش از تعیین نوع داده از کلیدواژه const استفاده نموده باشیم )

اما در زبان سی شما موظف به تعیین نوع متغیر نیز می باشید . جهت سهولت در کار با داده ها دو نوع داده عددی و کاراکتری وجود دارند که متناسب با نیاز خود از آنها بهره می گیرید . همچنین متغیر های عددی در زبان سی در طیفی قرار می گیرند که با توجه به کوچک یا بزرگ بودن عدد شما ، تعیین باید گردند . ( گرچه امروزه با توجه به وجود حافظه های حجیم این نیاز کم رنگ تر جلوه می نماید ، اما باید یاد بگیرید که همواره به اندازه نیاز خود متغیر را تعریف کنید تا حافظه در همان اندازه اشغال گردد ) شما عموماً باید از متغیر های عددی استفاده نمائید تا بتوانید با رایانه ارتباط برقرار نمائید اما زمانی که صحبت از ارتباط شما با فرد است و میخواهید متنی را بنویسید یا ویرایش کنید و نمایش دهید به راحتی با وجود کاراکتر ها و رشته ها در زبان سی می توانید از اتلاف وقت خود برای تعیین و ایجاد ارتباط بین اعداد و کاراکتر ها جلوی گیری نمائید

اگر بخواهیم به زبان ساده تر بیان نمائیم و کمی مبحث داده ها و متغیر ها را تشریح نمائیم باید اینگونه بگوئیم :

شما در برنامه نویسی باید متن قابل فهم توسط کامپایلر را بر روی یک فایل متنی بنویسید ، ذخیره کنید و سپس آن را تحویل کامپایلر ( یا مفسر ) بدهید . در این حین شما از قوانین دانش رایانه تبعیت خواهید نمود و دست کم باید تبعیت کنید . در دانش رایانه که بخشی از دانش الکترونیک می باشد ، همان طور که در ابتدای فصل بدان اشاره نمودیم ، باید همواره جریانی ورود یابد و سپس دست خوش پردازش گردیده و در نهایت به خروجی ارسال گردد . طی برنامه نویسی شما باید داده هایی را ایجاد کنید ، داده ها را به یکدیگر یا به داده های سیستم عامل یا سخت افزار مرتبط نمائید و این داده ها را طی یک روال به خروجی برسانید که به آن برنامه می گوئیم .

نکته ۱: اگر مقداری به یک متغیر ندهید و آن را بدون وجود مقدار در مرتبه اول نوشتن آن داخل متن منبع وارد کنید آن متغیر را اعلان نموده اید . در ادامه برنامه اگر قصد استفاده از آن متغیر را داشته باشید باید حتماً آن متغیر در بدو کار مقدار و موجودی داشته باشد و اگر نداشته باشد یا کامپایلر خطا خواهد گرفت و یا یک عدد تصادفی در آن قرار خواهد گرفت که برنامه شما را بر هم می زند . به دادن محتوا به متغیر جهت ایجاد آن مقدار دهی اولیه می گوئیم . پس از مقدار دهی اولیه برای متغیر ، آن متغیر تعریف شده است و شما مجاز به استفاده از آن خواهید بود .

کار با متغیر ها

کلیدواژه های زیر :

char
int
short
long
float
double
long long int
long double
enum

آموزش زبان برنامه نویسی سی|متغیررها|ثوابت در زبان سی

جهت ایجاد متغیر های پایه به کار می روند . همچنین دو کلیدواژه signed و unsigned جهت تعیین اینکه عدد وارد شده برای مقدار متغیر دارای علامت منفی یا مثبت بودن عدد می باشد یا خیر ، به کار می رود . زمانی که کلیدواژه های بالا را در متن منبع خود می نویسید ، مجاز و مجبور به استفاده از یک نام دلخواه خواهید بود تا یک متغیر ایجاد کنید . اما فراموش نکنید که زبان سی ، یک زبان حساس به کوچک و بزرگی حروف می باشد که اصطلاحاً به آن case sensitive می گویند . بنابراین شما نمی توانید بنویسید Int یا INT و فقط مجاز به استفاده از شکل صحیح آن یعنی « int » می باشید . در مورد نام یا همان شناسه متغیر نیز قوانینی وجود دارد که یکی از آنها همین حساس بودن به کوچک یا بزرگ بودن حروف می باشد . شما زمانی که نامی را برای یک متغیر انتخاب می کنید و می نویسید در دفعات بعدی که میخواهید آن را در جای دیگر برنامه مورد استفاده قرار دهید ، حتماً باید دقیقاً کاراکتر به کاراکتر نام آن را همانند آنچه که برای انتخاب نامش استفاده کرده اید ، استفاده کنید و بنویسید . یعنی اگر نام آن را name گذاشته اید ، نمی توانید در ادامه برنامه ، وقتی می خواهید آن را فرابخوانید بنویسید : Name ! در صورت این اشتباه شما ، کامپایلر از شما خطا خواهد گرفت .

در انتخاب نام یک متغیر شما مجاز به استفاده از حروف کوچک a-z و حروف بزرگ A-Z و اعداد ۹-۰ و کاراکتر زیر خط ، یعنی « _ » می باشید ، به غیر از اینکه کاراکتر اول نامی که انتخاب می کنید نباید یک عدد یا کاراکتر زیر خط باشد . همانند Name_05 ، اما نمی توانید این نام را انتخاب کنید : ۰۵Name

مثل :

int a;

پس از اعلان یک متغیر ، برای دادن مقدار به آن یا استفاده از آن هرگز نباید دوباره نوع داده آن را بنویسیم ، یعنی اگر بخواهیم بعدها به a مقداری بدهیم می نویسیم : a = 15 یا مثلاً a = 8 . و اگر متغیر دیگری داشته باشیم با نام b می نویسیم : a – b و نباید از واژه int دوباره استفاده نمائیم . همچنین نحوه ایجاد چند متغیر از یک نوع در یک خط و دادن مقدار به آنها به شکل زیر می باشد ( هر چند به مبتدی ها توصیه نمی شود ) :

int a, b, c, d = 5, 8, 16, 73;

تذکر :

علامت کالن یعنی « , » یک عملگر می باشد که وظیفه آن جدا کردن کد ها می باشد ، کاربرد آن در این قطعه کد برای جدا کردن نام متغیر ها و همچنین مقادیر آنها بود . اگر آن را فراموش کنید ، توسط کامپایلر به صورت یکپارچه خوانده خواهد شد که اگر فاصله ای هم بین آنها باشد مطمئناً کامپایلر خطا خواهد گرفت . پس وجود آن ضروری می باشد .

همچنین علامت سمی کالن یعنی « ; » به معنی پایان دهنده و فاسخ می باشد . وظیفه آن که در انتهای حکم می آید ، پایان دادن به قطعه از کد و به اجرا گذاشتن آن می باشد . این عملگر از زبان های اسمبلی سطح بالا توسط زبان سی به ارث برده شده است . بنابراین زمانی که شما یک سمی کالن را قرار می دهید ، هر آنچه که پیش از آن نوشته شده است به صورت مجزا به اجرا در می آید که در اینجا یک متغیر را ایجاد می نماید و در صورت داشتن مقدار ، مقدار آن را داخل حافظه جای میدهد . پس نوشتن غیر ضروری آن یک خطای بارز خواهد بود و توسط کامپایلر به شما گوشزد خواهد گردید . در ایجاد و استفاده عملیاتی از داده ها و همین طور در پایان توابع کتابخانه ای باید از علامت سمی کالن استفاده نمائید و وجود آن ضروری می باشد ولی استفاده غیر ضروری از آن منجر به خطا در کامپایل برنامه شما خواهد گردید

در جدول زیر انواع داده های عددی به همراه فضای اشغال شده در حافظه توسط آنها ( مطابق با استاندارد سی ) و بازه اعدادی که می توانید در آنها جای دهید ، نوشته شده است :

بازه عددی حجم اشغال شده ( به بایت ) نوع داده
-۳۲,۷۶۸ —— ۳۲,۷۶۷ ۲ signed short , short , short int , signed short int , int
۰ —— ۶۵,۵۳۵ ۲ unsigned short , unsigned short int , unsigned int
-۲,۱۴۷,۴۸۳,۶۴۸ —— ۲,۱۴۷,۴۸۳,۶۴۷ ۸ signed long , signed long int , long , long int
۰ —— ۴,۲۹۴,۹۶۷,۲۹۵ ۸ unsigned long , unsigned long int
-۹,۲۲۳,۳۷۲,۰۳۶,۸۵۴,۷۷۵,۸۰۸ —— ۹,۲۲۳,۳۷۲,۰۳۶,۸۵۴,۷۷۵,۸۰۷ ۱۶ long long , long long int , signed long long , signed long long int
۰ —— ۱۸,۴۴۶,۷۴۴,۰۷۳,۷۰۹,۵۵۱,۶۱۵ ۱۶ unsigned long long , unsigned long long int
-۱٫۱۷۵۴۹۴۳۵ * (۱۰^-۳۸) —— ۳٫۴۰۲۸۲۳۴۷ * (۱۰^+۳۸) ۴ float
۲٫۲۲۵۰۷۳۸۵۸۵۰۷۲۰۱۴ * (۱۰^-۳۰۸) —— ۱٫۷۹۷۶۹۳۱۳۴۸۶۲۳۱۵۷ * (۱۰^+۳۰۸) ۸ double
۳٫۴ * (۱۰^-۴۹۳۲) —— ۱٫۱ * (۱۰^۴۹۳۲) ۱۰ long double

متغیر هایی که از نوع اعشاری هستند ، همانطور که از اسمشان پیداست ؛ جهت ذخیره اعداد اعشاری به کار می روند . بنابراین اگر قصد ایجاد یک عدد اعشاری را ندارید ، بیهوده از آنها استفاده ننمائید و تنها زمانی دست به ایجاد متغیر هایی از نوع عدد اعشاری بزنید که به آنها نیاز داشته باشید ، آن هم دقیقاً متناسب با مقدار مورد نیاز خود . متغیر های float دقت کم تری نسب به double و در نهایت نسبت به long double دارند . دقت کنید که برخی کامپایلر های قدیمی نوع داده long long یا همان long long int را به رسمیت نمی شناسند و یا حتی long double را ، ابتدا از به رسمیت شناخته شدن این نوع داده ها توسط کامپایلر خود ، پیش از استفاده از آنها ، اطمینان حاصل نمائید . همچنین به صورت اختیاری برخی کامپایلر ها از نوع داده long long double پشتیبانی می نمایند که می تواند در محیط آن کامپایلر ها از این نوع داده استفاده نمائید ، اما یک نوع داده استاندارد نیست .

کاملاً دقت داشته باشید که انواع داده ای float و double و long double به صورت پیش فرض علامت دار هستند و بازه عددی آنها در کوچک ترین و بزرگ ترین اعدادی که می توانند ذخیره کنند را در جدول نوشتیم که همین مقدار با قوانینی که بیان گردید در بازه اعداد مثبت نیز قرار می گیرد و شما نمی توانید آنها را بر خلاف نوع داده ای مثل int بدون علامت نمائید .

حتی اگر مبانی ریاضیات را به خوبی می دانید بدنیست ، به استاندارد تعریف شده اعداد اعشاری توسط مؤسسه مهندسان برق و الکترونیک رجوع کنید تا بهتر از نحوه پردازش و ذخیره اعداد اعشاری در رایانه آگاه شوید :

https://en.wikipedia.org/wiki/IEEE_floating_point

متغیر های کاراکتری

به واسطه استفاده از کلیدواژه char شما مجاز و مجبور به استفاده از یک داده کاراکتری در متن برنامه سی خود هستید . همانند متغیر های عددی ، متغیر کاراکتری نیز باید یک نام داشته باشد و شما می توانید اول آن را اعلان کرده و سپس تعریف نمائید . ولی در داخل هر داده کاراکتر تنها یک کاراکتر که می تواند هر کدام از کاراکتر های ANSI مطابق با استاندارد ۹۸/۹۹ باشد و مطابق با آخرین استاندارد زبان سی یعنی C11 شما می توانید هر کدام از کاراکتر های Unicode را ذخیره نمائید . اما اکثر کامپایلر ها ، هنوز با آخرین استاندارد سی ، به روز رسانی نشده اند . هر کاراکتری را که میخواهید در متغیر خود ذخیره نمائید باید داخل دو علامت سینگل کوت قرار دهید . مانند : ‘۰’ یا ‘A’ یا ‘*’ که هر کدام یک کاراکتر از کاراکتر های کاراکترست ANSI هستند . کاراکترست های بسیاری موجود هستند که در ابتدای کتاب نیز بدین مبحت اشاره نمودیم . اما شما برای کار با زبان سی باید تا به صورت مطلوبی به کاراکترست ANSI مسلط باشید . ANSI نام مستعار کاراکترست اسکی موسسه استاندارد سازی آمریکاست ، بنابراین نام اصلی آن ASCII می باشد که دارای ۱۲۸ کاراکتر می باشد .

در هر کاراکترست ، مقدار متناظر کاراکتری برای هر مقدار باینری موجود می باشد . بنابراین زمانی که شما کاراکتر عدد هشت را به صورت ‘۸’ در داخل یک متغیر کاراکتری ذخیره می نمائید ، مقدار آن ۵۶ خواهد بود و نه ۸ . یعنی زمانی که شما با اعداد کار می کنید ، واسطه ای در کار نیست و عدد ۸ شما اگر مبنای ۱۰ ذخیره و پردازش گردد ، همان ۸ است . اما زمانی که می خواهید کاراکتر ۸ را در یک متغیر کاراکتری ذخیره نمائید ، این مقدار یک عدد نیست بلکه به مثابه یک حرف و به عبارت بهتر یک کاراکتر است که در درون متغیر ذخیره می گردد .

آموزش زبان برنامه نویسی سی|متغیررها|ثوابت در زبان سی

نوع داده کاراکتری به شما کمک می کند تا در مواقعی که نیاز به نوشتن و خواندن متن در برنامه خود دارید از اتلاف وقت جلوگیری گردد . در صورت عدم وجود این نوع داده شما خودتان موظف بودید تا متون را به مقادیر عددی بنویسید و وارد کنید و در نهایت تحویل بگیرید . نحوه ایجاد یک کاراکتر :

char word = 'W';
آموزش زبان برنامه نویسی سی|متغیررها|ثوابت در زبان سی

از آنجایی که هنوز با مبحث اشاره گر ها آشنا نشده ایم نمی توانیم مبحث را خلط کنیم ، اما اگر مشتاقید تا بدانید که چگونه می توان متونی را که مطمئناً بیش از یک کاراکتر هستند در سی استفاده نمود ؛ باید بگوئیم که با استفاده از ترفند اشاره گر و اضافه نمودن آن به تعریف کارکتر در برنامه خود می توانیم ، متونی را که حتماً به یاد دارید به آنها رشته می گوئیم ، ذخیره و مورد پردازش قرار داد .

enum

متغیر enum یک متغیر پایه نیست . بدین معنا که نمی تواند نوع مستقلی از متغیر را ایجاد کند ، بلکه روشی است برای ایجاد متغیر هایی از نوع صحیح که ثابت مقداری هستند و به تعداد تعیین شده توسط برنامه نویس ایجاد می شوند که به صورت خودکار و متوالی مقدار دهی می گردند . بعد از نوشتن کلیدواژه enum شما مجاز هستید تا یک نام یا همان شناسه نیز بنویسید که مختص همان enum می باشد و این به شما کمک می کند تا اگر از چند enum استفاده نموده اید ، طی احضار آنها در برنامه بتوانید آنها از یکدیگر تفکیک نمائید و بدیهی است که در صورت عدم داشتن نام یا شناسه ، قادر به تفکیک آنها نخواهید بود . همچنین ایجاد شناسه شما را قادر می سازد تا اگر تصمیم به ایجاد متغیر هایی که میخواهید مقدار آنها را تغییر دهید را از روی آن enum ( یا همان متغیر شمارگان ) ایجاد کنید ، بتوانید این کار را انجام دهید . پس از نوشتن شناسه جفتی از کروشه های باز و بسته باید موجود باشند که در آن دست کم یک نام یا همان شناسه نوشته گردد . روش مقدار دهی C برای متغیر های شمارگان یا همان enum بدین روال است که از مقدار ۰ برای اولین شناسه استفاده می نماید و در شناسه های بعدی یک واحد مثبت به مقدار قبلی اضافه می نماید .

شما مجازید تا برای هر یک از شناسه ها مقدار بدهید ولی اگر مثلاً فقط برای یکی از آنها مقدار ۲۰ بدهید ، شناسه بعدی مقدار ۲۱ خواهد گرفت و همچنین دقت کنید که نوع متغیر های enum صحیح علامت گذاری شده می باشد و شما می توانید مقادیر منفی را نیز وارد نمائید اما قادر به وارد کردن مقادیر اعشاری نیستید . شناسه ها را همواره باید با علامت کالن ( , ) از یکدیگر جدا نمائید و همانند ایجاد هر متغیر دیگری در پایان از علامت سمی کالن ( ; ) استفاده نمائید.

مثال :

enum fruit { grape, cherry, lemon, kiwi } apple=kiwi;

در اینجا مقدار grape مقدار عددی ۰ احتساب می گردد و سپس cherry مقدار ۱ ، lemon مقدار ۲ , kiwi مقدار ۳ ؛ این مقادیر غیر قابل تغییر در ادامه برنامه خواهند بود . اما مقدار apple قابل تغییر می باشد که مقدار اولیه تعیین شده برای آن ۳ خواهد بود . با کمک شناسه enum می توان علاوه بر بعد از کروشه بسته می توان در ادامه برنامه ، متغیر هایی ایجاد نمود که همانند متغیر های صحیح دیگر ، مقدار آنها نیز قابل تغییر است :

enum fruit mango;

نحوه ثابت کردن یک متغیر

در مبحث ثابت ها بیان نمودیم که یک متغیر را می توان ثابت مقداری نمود . بدین معنا که مقدار آن پس از تعیین شدن ، در ادامه برنامه قابل تغییر نمی باشد . برای این منظور نیز از کلیدواژه const استفاده می نمائیم . اکنون که نحوه اعلان و تعریف متغیر ها را مشاهده نمودید می توانیم مثالی برای نحوه تعریف یک متغیر ثابت بزنیم تا به صورت ملموس ، آشنا گردید . مثال :

const int a = 8;

کلیدواژه const را پیش از کلیدواژه int نوشته و سپس به آن مقدار دهی اولیه نمودیم ، اما نکته اصلی اینجاست که پس از تعیین مقدار برای آن نمی توانیم در جای دیگری از برنامه مجدداً به آن مقدار بدهیم یا متغیر a را در یک تابع قرار دهیم که بخواهد مقدار آن را تغییر دهد . در این صورت کامپایلر خطا خواهد گرفت.

آموزش زبان برنامه نویسی سی|متغیررها|ثوابت در زبان سی

نکته مهم

یک نکته در مورد مقدار دهی به متغیر ها حائز اهمیت زیادی می باشد و آن اینکه علاوه بر مقدار متناسب با هر متغیر که شما می توانید آن را داخل متغیر خود جای دهید ، شما قادر به تخصیص یک متغیر دیگر و یا یک تابع به عنوان مقدار و موجودی متغیر خود هستید . اولین شرط این است که مقداری که متغیر جایگذاری شده دارد باید با نوع متغیر شما متناسب باشد . مثلاً اگر متغیر b را داخل متغیر a می گذارید ( به عنوان مقدار و موجودی متغیر a تعریف می کنید ) باید مقداری که b دارد از نوع متغیر a باشد . مثلاً یک متغیر کاراکتری را نمی توانید به عنوان مقدار و موجودی یک متغیر صحیح تعریف کنید . شرط دوم نیز همانند شرط اول است ولی در مورد تابعی است که شما می خواهید آن را به عنوان مقدار و موجودی یک متغیر استفاده کنید . مثلاً متغیر a یک متغیر صحیح int است ، اگر می خواهید مقدار آن را یک تابع بنویسید تا خروجی آن به عنوان مقدار و موجودی متغیر a قرار بگیرد ، باید خروجی تابع حتماً یک عدد صحیح باشد

در ادامه باید گفت که برخی از مقادیر در برخی از کامپایلر ها به یکدیگر ، قابل تبدیل هستند . برای این منظور باید دفترچه راهنمای کامپایلر خود را مطالعه کنید . ولی این تبدیل کاملاً منطقی است و بدیهیست شما هرگز قادر نخواهید بود یک حرف را داخل یک متغیر صحیح قرار بدهید . اما برخی از کامپایلر ها زمانی که با یک عدد اعشاری رو به رو می شوند که به عنوان مقدار یک متغیر صحیح تعیین شده ، به جای خطا گرفتن از شما ، قسمت اعشاری آن را نادیده می گیرند ! پس بهتر است اگر میخواهید کمی با خیال راحت در این کامپایلر ها برنامه بنویسید ، نکات ضروری نحوه کامپایل آن را با دقت مطالعه کنید.

آموزش زبان برنامه نویسی سی|متغیررها|ثوابت در زبان سی

منبع: ویکی کتاب

 

درباره admin

پاسخ دهید