برنامه نویسی زبان C – مرور دستورات و مفاهیم

برنامه نویسی C

در ابتدا برای ایجاد برنامه ها به زبان C نیازمند محیطی برای مدیریت و نوشتن پروژه ها هستیم. به این محیط ها اصطلاحا IDE گفته می شود. وازه IDE خلاصه شده: Integrated Development Environment

به معنی: محیط توسعه یکپارچه، هست.

پیشنهاد ما  Code:: Blocks IDEبه دلیل محیطی قابل درک و امکانات نسبتا زیاد و رایگان بودن هست.

برای شروع به برنامه نویسی در ابتدای برنامه همیشه یک پیش پردازنده (Pre-Processor) جهت تعریف دستورها نوشته می شود.

#include <stdio.h>

در اینجا منظور از عبارتstd  همان استاندارد یا standard هست وio  یعنی : ورودی و خروجی یا Input & output و <h>  یعنی که این عبارت یک هدر header  است. بعد از پیش پردازنده همیشه یک تابع اصلی (main) نوشته می شود و دو گیومه {} باز و بسته گذاشته و برنامه داخل این دو گیومه نوشته می شود که نشانگر این است که برنامه از این قسمت باید خط به خط و به ترتیب خوانده و اجرا شود. درواقع محل شروع برنامه را به سیستم اعلام می کند، مانند :

Int main()

{

}

بعد از اتمام کد نویسی قبل از بسته شدن گیومه تابع اصلی باید یک نتیجه ای را بازگشت داد که بازگشت دادن عدد صفر مرسوم است. این عدد هر چیز دیگری می تواند باشد و با برگشت داده شدن آن یعنی این که برنامه درست اجرا شده است. و به نوعی این عدد همان ارور کد ما می باشد که در برنامه های پیچیده تر اگر مثلا برنامه ای قرار باشد چیزی را با پرینتر چاپ کند و در آن زمان پرینتر نصب نباشد آنگاه با یک ارور کد مثلا ۱۸۵ که نشانگر در دسترس نبودن پرینتر است این موضوع به کاربر اعلام می شود مانند :

Int main()

{

Return 0;

}

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

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

ما گونه ای دیگر از اشکال را داریم که به آن اشکال منطقی گویند که مترجم یا کامپایلر متوجه اشکال نمیشود و از نظر او تمامی دستورات درست نوشته شده اند ولی در عمل کرد جوابی که طی محاسبات برگشت داده می شود درست نیست. مثلا  اگر در دستور محاسبه ی یک ضرب بین ۲ عدد به جای علامت ضرب * از + اضافه استفاده کنیم برنامه دچار یک خطای منطقی شده است و در اجرا شاهد یک اشتباه محاسباتی خواهیم شد.

 نکته دیگر این است که زبان C  حساس به حروف کوچک و بزرگ می باشد (Void≠void) پس در نوشتن دستورات همواره از حروف کوچک استفاده کنید. در ادامه می خواهیم یک برنامه ای بنویسیم که از کاربر یک عددی را دریافت کند و همان عدد را دوباره برایش نمایش دهد.

در هدر stdio  دستورهای دریافت و چاپ جهت استفاده تعریف شده است:

برای چاپ یک عبارت از دستور :  ;(“…”)printf  استفاده می کنیم و عبارت مورد نظر را به جای … می نویسیم.

و برای دریافت یک چیز از دستور : ;(“…”)scanf استفاده می کنیم و نوع دریافتی را در … مشخص می کنیم. به طور مثال :

ما یک متغیر از جنس اعداد صحیح را تعریف کرده :

int a;

و با دستور scanf از کاربر یک عدد را میگیریم و در جایی که a  قرار دارد ذخیره می کنیم:

scanf(“%d”, &a);

در اینجا علامت درصد % درواقع به معنی فرمت می باشد و d   یعنی فرمت این عبارت دریافتی به صورت یک دیجیت یا digital است و & یعنی در آدرس و a هم که متغیری هست که خودمان تعریف کردیم. در اینجا یعنی یک مقداری به صورت (فرمت) عدد صحیح دریافت کن و آن را در محلی که a ذخیره شده است ذخیره کن.

&  = Ampersand  و چون حرف اول A  هست آن را به Address تشبیه کردند و به جای آدرس از این عبارت استفاده می کنند.

نکته: دقت کنید در دستور scanf حتما باید عبارت & را بنویسید و آدرس را مشخص کنید.

در ادامه باید دستور چاپ این عبارت دریافتی را بدهیم که به شیوه زیر عمل می کنیم:

printf(“you are enterd : %d” , a);

در اینجا از دستور پرینت اف استفاده کردیم جهت چاپ عبارت مدنظر در داخل (“…”) هر چیزی می توان جهت نمایش نوشت و مانند دستور اسکن اف باید فرمت عددی که می خواهیم نمایش بدهیم را مشخص کنیم که در اینجا چون عدد صحیح هست از %d  استفاده شده است.

و بعد باید بگوییم که به جای این فرمت %d  چه چیزی چایگزین شود که در اینجا عبارت a را باید بنویسیم که مقدار عددی a در برنامه چاپ گردد.

نکته : دقت بفرمایید در دستور scanf ما برای ذخیره سازی عبارت دریافتی باید آدرس متغیر را با نوشتن & قبل از واژه متغیر به زبان C  نشان دهیم ولی در دستور printf نیازی به آدرس دادن نیست و نوشتن خود متغیر کافیست.

در تصویر بالا : تصویر سمت چپ محیط  کدبلاکس و دستورات نوشته شده است و تصویر سمت راست برنامه بعد از کامپایل و اجرا می باشد.(در محیط code::blocks کامپایل و اجرا به نام دیگری تعریف شده است . در نوار اول بالای برنامه با ایکن چرخ دنده و مثلث به نام Build & Run  تعریف گردیده)

بعد از دستور پرینت Hello world  اگر دقت کرده باشید یک عبارت : \n  تایپ شده است این عبارت باعث می شود که کلمات قبل از خودش نوشته شود و کلمات بعد از خودش به یک خط جدید رفته و از آن خط شروع به نوشتن کنند.

 نام \  به انگلیسی backslash  هست. بک اسلش درواقع یک دستور کنترل کاراکتری میباشد که هر حرفی بعد از بک اسلش یک معنای دیگری پیدا میکند و حرف بعد از آن یک مادیفای می شود و رفتار عادی رشته را تغییر می دهد.

حرف \n در اینجا به معنی خط جدید یا New Line می باشد.

حرف \t به معنی tab  هست و برای ایجاد فاصله و جدول بندی به کار میرود.یک تب ۳ فاصله ایجاد میکند.

حرف\a  به معنی Alert می باشد که با اجرا شدن آن باعث ارسال یک سیگنال و ایجاد صدای بیپ (بوق کوچک) می شود که اگر در مجیط ویندوز باشد صدای استارت ویندوز پخش می شود.

اگر بخواهیم خود بک اسلش (\) را چاپ نماییم باید دو تا بک اسلش را تاپ کنیم بک اسلش اول باعث میشود که بک اسلش دوم معنای قبلی خودش را از دست بدهد. مانند:

printf(“ \\Hello World\\”);

حال در هنگام اجرای برنامه به این گونه چاپ می شود: \Hello World\

اگر بخواهیم خود عبارت را چاپ کنیم به صورت عادی نمی توانیم ولی میتوان از “\” استفاده کرد تا خود عبارت  چاپ شود.

مانند عکس زیر که عبارت “Hello World” داخل خود ” قرار دارد:         

شرایط نام گذاری متغیرها:
  • نام یک متغیر باید شامل حروف یا ( _ ) خط زیر و یا خط زیر به اضافه اعداد باشند مانند : _۲
  • نام متغیر نمی تواند با یک عدد شروع شود مثلا int 2; نمیتواند باشد و کامپایلر زمان بیلد کردن اشکال میگیرد ولی می توان اعداد را با خط زیر تعریف کرد مانند: int _2;  
  • اگر خواستیم متغیری را با نامی طولانی و چند کلمه ای تعریف کنیم نمیتوانیم بین کلمات فاصله بگذاریم ولی میتوان حرف اول کلمه اول را کوچک و به این ترتیب حرف اول کلمه دوم را بزرگ بنویسیم و با بزرگ وچک کردن حروف, کلمات را از هم جدا کنیم. مانند :

int  myLastName;

یا می توان با خط زیرر از هم جدا کرد مانند:

Int  my_last_name;

هر دو روش مرسوم می باشد.

نکته: می توان متغیرها را در زمان تعریف مقداردهی کرد. مثلا می توان نوشت :

int a=5;    

حال با این تعریف عبارت a برابر با پنج می شود.

در حالت کلی یک متغیر باید سه تا ویژگی داشته باشد:

  • نوع متغیر مشخص باشد (type)
  • یک نام داشته باشد (name)
  • مقدار داشته باشد (Value)

نکته : مقدار یک متغیر حتما نباید همان اول مشخص گردد, این مقدار می تواند در حین اجرا توسط کاربر دریافت شود مانند برنامه ای که بالا نوشتیم و یا طی محاسباتی این مقدار به دست آید مانند:

Int a=2;

Int b=5;

Int c;

c = a + b;

یا می توان نوشت: 

int c = a + b;

نکته ۲: می توان چند متغیر را یکجا تعریف کرد مثلا بنویسیم: 

int a,b,c;    

در اینجا متغیرهای a  و b و c از جنس اعداد صحیح تعریف گردید. بین متغیرها باید این عبارت (,) نوشته شود و با این عبارت از هم جدا شوند. حال می خواهیم برنامه ای بنویسیم که از کاربر ۲ عدد را دریافت کند و جمع آنها را چاپ کند:

برای این کار مانند قبل پیش پردازنده و تابع اصلی را می نویسیم و بعد از آن متغیرهای مورد نیاز را تعریف می کنیم. و در دستور پرینت برای کاربر پیغامی چاپ می کنیم که عدد اول را تاپ کند. بعد با دستور اسکن اف آن عدد را از کاربر دریافت می کنیم و آن را در آدرس a ذخیره می کنیم و دوباره یک پیغام برای کاربر چاپ میک نیم که عدد دوم را وارد کند و مجدد با دستور اسکن اف آن را از کاربر دریافت می کنیم و در آدرس b آن را ذخیره می کنیم.

حال دستور محاسبه را می نویسیم که در اینجا می خواهیم ان دو عدد جمع شوند پس می نویسیم:

a + b

ولی عبارتی که من بالا نوشتم اشتباه است و حتما باید عملیات را به یک متغیر نسبت بدهیم پس باید بنویسیم: 

c = a + b; 

حال متغیر c برابر می شود با حاصل جمع a و b دو عبارت مساوی با هم را معمولا به این شکل بیان می کنند که عبارت سمت راست را می گذاریم داخل عبارت سمت چپ در اینجا یعنی a + b را داخل c می گذاریم.

حال باید نتیجه را نمایش دهیم: با استفاده از دستور چاپ می گوییم که:

پرینت کن a + b =   و به جای فرمت %d مقدار c را نمایش بده:

  printf(“a + b =  %d” , c);

می توان به این صورت هم نوشت که:

پرینت کن: یک فرمت %d  و + و یک فرمت %d و = و %d و به جای فرمت دیجیت اول a را قرار بده و به جای فرمت دیجیت دوم b را قرار بده و به جای فرمت دیجیت سوم c را قرار بده.

printf(“ %d + %d = %d” ,  a,  b,  c);

 

نکته : ماشین متوجه نمی شود که به جای %d  اول چه متغیری را باید قرار دهد شما باید به ترتیب آنها را مشخص کنید. دقت کنید اگر اشتباه در تعریف  c را اول بنویسید به جای %d اول مقدار c چاپ می شود.

تصویر برنامه نوشته شده و زمان اجرای آن:

اگر در تصویر بالا دقت بفرمایید در رو به روی عبارت c= a + b  یک چیزی به رنگ سبز نوشته شده است. این چیست؟

این متنی که به رنگ سبز نوشته شده است یک کامنت هستش و برای درک بهتر برنامه نویس از   برنامه ی نوشته شده طراحی شده . در اینجا خطوط برنامه خیلی کم هست و همه چیز با یک نگاه قابل فهم است ولی در برنامه های پیچیده و حرفه ای امکاد دارد ۱۰۰ ها و حتی ۱۰۰۰ ها خط در یک برنامه نوشته شود و اگر آن کامنت ها را به درستی ننویسیم واقعا نمیشه فهمید که مثلا خط ۱۵ تا ۲۲ دارد چه کاری انجام می دهد. برای نوشتن کامنت فقط لازمه که دو تا / را تایپ کنید و کامنت مورد نظر راجب آن خط را بنویسید. اگر کامنت طولانی هست و شامل چند خط می شود کامنت را بین    /*..*/  بنویسید  مانند تصویر زیر:

درواقع وقتی کامپایلر به عبارت // و یا /**/  میرسد کلمات داخل آنها را نادیده گرفته و اصلا کاری به آنها ندارد.

 

در تصویر بالا یک برنامه ۷۹ خطی را مشاهده می کنید که اگر کامنت ها به درستی طراحی و نوشته نشده بودند درک این که برنامه الان چه کاری را انجام می دهد برای خود برنامه نویس هم سخت می شد.

کامنت چند خطی مانند بالا می توانید به گونه ای استفاده کنید که مثلا دستوراتی که نوشته اید به نظرتان زیاد جالب نیست و فکر می کنید که بهتر از این هم می توان نوشت و دستورات قبلی را کامنت می کنید و

روع به نوشتن دستورات جدید می کنید که اگر دستورات جدید نتیجه داد می توانید دستور قدیمی را پاک کنید و یا اصلا پاک نکنید و بگذارید که باشند و کامپایلر زمان کامپایل و اجرا کردن برنامه اصلا آن دستورات قدیمی را نمی بیند.

برنامه بالا برنامه ای است که یک سری اعداد را از کاربر دریافت می کند و به ترتیب کوچک به بزرگ نمایش می دهد. درواقع بک برنامه مرتب کردن (sort) می باشد.

 

 

آنچه مطالعه کردید، توسط جناب آقای مهیار مقدم به عنوان پیاده سازی و برداشت متنی بخش هایی از آموزش «برنامه‌نویسی C» تهیه شده و جهت استفاده مخاطبین گرامی در فرادرس منتشر می شود.

 

 

 

 

 

 




0 پاسخ

ارسال یک پاسخ

در گفتگو ها شرکت کنید.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *