عصر رایانه

(فناوری - شبکه - اینترنت - نرم/سخت افزار )

آموزش برنامه نویسی به زبان C (قسمت اول)
ساعت ۱٢:٤۳ ‎ق.ظ روز ۱۳۸٧/۸/٦  

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

 


آموزش برنامه نویسی به زبان C

مقدمه

 

همانطور که میدانید زبان C در سال 1972 توسط آقای ریچی طراحی شد ..علت نامگذاری زبان C این است که چون بعد از زبان B طراحی شده است آن را C نامیده اند .

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

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

 

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

 

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

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

 

1-تعین نیازهای برنامه

2-تحلیل برنامه

3-طراحی الگوریتم برنامه

4-پیاده سازی الگوریتم

5-تست و کنترل برنامه

6-ذخیره برنامه

 

----------------------------------------------------------------------------------

یک مثال : فرض کنید از ما می خواهند برنامه ای بنویسیم تا میانگین دو عدد را پیدا کند ؟

 

مراحلی که طی می کنیم به شرح زیر است :

ابتدا پیش خود کمی فکر می کنیم و به این نتیجه می رسیم که برای اینکه روی این دو عدد عملیاتی انجام دهیم لازم است این برای این دو عدد حافظه ای را در نظر بگیریم (این دو عدد را داخل متغیر هایی از جنس آن عدد قرار دهیم ).سپس باید روی این دو عمل اعمال محاسباتی خود را انجام دهیم (که در این مثال باید آن دو را با هم جمع کرد و تقسیم بر 2 کرد ). اکنون نوبت این است که جواب بدست آمده برای این محاسبه در حافظه ذخیره شود تا بتوان از آن استفاده کرد (پس باید یک متغیر دیگر از نوع جواب محاسبات انجام شده تعریف کرد و این نتیجه را درون آن متغیر ریخت ... سپس بر طبق دستور با حافظه خود(متغیر سوم ) به دلخواه رفتار می کنیم ..(یعنی می توان آن را چاپ کرد .. وارد برنامه ای دیگر کرد و...)

--------------------------------------------------------------------------------

همانطور که می بینید این گونه ای از پیاده سازی یک طرح برای برنامه(الگوریتم برنامه ) است که سپس می توان آن را به شکل کد در آورد و پیاده سازی کرد ....

آیا به نظرتان این طرح (الگوریتم )نمی تواند در تمام برنامه ها یکسان باشد؟

اگر اجازه بدهید 2 نکته را درباره C اضافه کنم.یکی از بهترین مشخصه های این زبان این است به هیچ سخت افزار یا سیستمی بسته نیست.این باعث می شود تا برنامه هایی بنویسید که بدون هیچ تغییری در تمام ماشین ها اجرا میشود.در واقع این زبان دارای مشخصه ی "قابلیت حمل"است.مثلا شما برنامه هایی را به این زبان در یک نوع کامپیوتر مثل Ibm نوشته شده اند؛بدون انجام تغییرات یا تغییارات اندک در کامپیوترهای دیگر قابل استفاده اند.

‍c ساخته شده،تاثیر گرفته و تست شده به وسیله کار برنامه نویسان است.نتیجه آخر این است که C برنامه ای را می دهد که برنامه نویس می خواهد.

 

طراحی الگوریتم :

در مثال بالا یک نوع پیاده سازی الگوریتم را مشاهده کردید ....برای طراحی الگوریتم لازم است دستورات قدم به قدم طراحی شوند و محاسبه شود که الگوریتم به درستی کار می کند یا نه ....

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

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

 

دقت داشته باشید که اغلب الگوریتم ها مراحل زیر را شامل می شوند :

 

1-خواندن داده ها (ورودی ها به برنامه)

2-انجام عملیات ( مثل محاسبات . حلقه ها . شروط و...)

3-چاپ نتایج

 

 

فلوچارت چیست ؟

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

 

مثال : فلوچارتی رسم کنید که ماکسیمم دو عدد را پیدا کند ..

 

برای حل فرض می کنیم آن دو عدد 5 و 7 هستند

 

ابتدا دو عدد را درون متغیر هایی به نام A و B می ریزیم و بعد یک شرط ایجاد می کنیم که آیا A از B کوچکتر است یا خیر .. فلوچارت را به گونه ای طراحی کرده ایم که اگر جواب شرط ما درست بود(یعنی اگر A کوچکتر از B باشد ) B را در MAX بریزد و اگر جواب شرط غلط بود ( یعنی اگر A بزرگتر از B باشد ) A را در MAX بریزد و سپس به پایان برود ....

 

اشتباه

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

 

 

اکنون که با این شیوه طراحی الگوریتم آشنا شدید خود را با حل 2 تمرین آماده تر کنید

تمرین اول بسیار آسان و تمرین دوم نیاز به کمی فکر دارد ..

 (فقط برای اینکه این مقاله خالی از تمرین هم نباشد این 2 تمرین را می گذارم )

 

1-فلوچارتی طراحی کنید که ماکسیمم 3 عدد را بدست آورد

2-فلوچارتی طراحی کنید که میانگین 50 عدد را بدست آورد

 

 

آشنایی با زبان سی :

 

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

 

خوب همانطور که می دانید زبان سی شامل یک سری دستورات خاص می باشد که یک برنامه نویس که قصد برنامه نویسی به زبانی مثل سی را دارد کد های بر نامه را نوشته سپس توسط ادیتور یا همان کامپایلر ( توربو سی یا ویژوال سی پلاس پلاس ) آن را کامپایل می کند ....

 

خوب در اینجا اجازه دهید که با اولین مفهوم که کامپایل است شما را بیشتر آشنا کنم ..

 

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

 

 

ما در ابتدا با یک سری از ابتدایی ترین دستورات زبان سی آشنا خواهیم شد و قدم به قدم پیش خواهیم رفت .

------------------------------------------------

باز کردن و بستن برنامه : همانند تمام زبان های دیگر برای شروع باید برنامه باز شود و در انتها نیز باید برنامه بسته شود

 

ما برای شروع از دستور } و برای خاتمه از دستور { استفاده می کنیم ..

 

یعنی فرض کنید ما می خواهیم یک برنامه بنویسیم که حاوی 5 خط کد نویسی است برنامه باید به این شکل باشد :

 

}

خط اول کد نویسی

خط دوم کد نویسی

خط سوم کد نویسی

خط چهارم کد نویسی

خط پنجم کد نویسی

{

همانطور که ملاحظه می کنید باید تمام کد نویسی مابین } و { قرار گیرد

 

---------------------------

 

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

 

یک نمونه :

(scanf("%d",&i

 

-------------------------

 

دستور چاپ بر روی صفحه نمایش : برای اینکه متغیری یا عبارت ثابتی را بر روی صفحه نمایش چاپ کنیم از دستور () printf استفاده می کنیم ... توجه داشته باشید اگر بخواهیم عبارتی عینا بر روی صفحه نمایش چاپ شود به صورت ("عبارت مورد نظر ")printf عمل خواهیم کرد ...

 

دو نمونه :

 

("printf("DrEaMeR

(printf("%d",i

 

 

 

نکته 1:شاید بعضی از دستورات بکار برده در نمونه ها برایتان نامفهوم باشد مثل d%و یا i& و.. با این دستورات در ادامه کار آشنا خواهید شد ..

 

نکته2: توجه کنید باید در انتهای هر خط کد نویسی در زبان سی باید ; به کار رود (بجز در مواردی که ذکر خواهد شد )..

 

-------------------------------------

توجه کنید به دستوراتی مثلprintf یا scanf توابع کتابخانه ای گویند ...این بدین معنا است که زبان سی این چنین توابعی را در خود برنامه برای استفاده کاربر قرار داده .... نکته مهم در اینجا این است که برای استفاده از این دستورات ( توابع کتابخانه ای ) ما باید این توابع را به برنامه بشناسانیم (یعنی به برنامه بگوییم آقا تو یک همچین دستوری را به صورت پیش فرض داری که فلان کار را انجام می دهد ) این کار را در زبان سی توسط HEADER FILE ها انجام می دهیم (فایل های سر آیند )

 

 

نحوه تعریف کردن این توابع هم به برنامه بدین شکل است که در ابتدای کد نویسی حتی قبل از } باید دستور(دستورات) include# را به کار برد .... در ادامه بیشتر با فایل های سر آیند آشنا می شویم ....

 

 

اولین برنامه :

در پست های قبل تا حدودی با الگوریتم و طرح آشنا شدیم و چند دستور پایه ای زبان سی را فرا گرفتیم .در این پست قصد دارم تا با نوشتن اولین برنامه شما را تا حدی با دستورات گفته شده آشنا کنم ..

همانند اکثر آموزش زبان های برنامه نویسی ما هم اولین برنامه خود را با برنامه hello world آغاز خواهیم کرد ..در این برنامه ما قصد داریم تا تنها یک نوشتهhello world را در خروجی چاپ کنیم .

 

 

#include <stdio.h>

void main()

{

printf("hello world");

}

 

کد نویسی این برنامه به صورتی که من در بالا نوشته ام است.من با دادن توضیحات شما را با تک تک کد های این برنامه آشنا می کنم .

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

 

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

 

اسم فایل سرآیند(header file) ای که در آن تعریفات printf (و چند تابع دیگر ) وجود دارد stdio است ..

طریقه معرفی این فایل هم بدین گونه است که قبل از شروع برنامه بنویسید <include <stdio.h#

 

دقت کنید جمله include# در تعریف همه این فایل های سرآیند ثابت است تنها جمله بین <> بسته به نوع تابع ها تغیر می کند ...

 

مورد دیگر نیز h. بعد از stdio است که آن نیز به برنامه میگوید این فایل از نوع فایل سرآیند است (header file ) پس باید بعد از قرار دادن نام هر کدام از فایل های سر آیند بین <> یک h. نیز بعد از نام آن فایل سرآیند بگذاریم

 

;("printf("hello world

 

این هم کد چاپ کردن نوشته ما است .. همانطور که گفتم باید در زبان سی در انتهای هر خط کد نویسی (بجز بعضی مورد ها ) باید یک ; بگذاریم

 

خوب اگر دقت کنید دیگر چیز خاصی در کد نویسی این برنامه نمی ماند بجز یک خط و آن هم

()void main است ....این دستور چیست؟؟؟

 

دقت کنید زبان سی به صورت پیش فرض دوست دارد تا به شکل تابعی عمل کند (در این مورد بعدا مفصل بحث خواهیم کرد) و تمایل دارد یک مقدار را به جایی برگرداند ..ما فعلا نمی خواهیم تا یک همچین اتفاقی رخ دهد پس با نوشتن این یک خط مانع از این کار می شویم (تا به توضیحاتش برسیم یادتان باشد فعلا در ابتدای هر برنامه {مابینinclude# و } در یک خط این دستور را بنویسید )

 

خوب برنامه اول ما تمام شد

 

شاید بگویید ::وای یه نوشتن hello world این قدر مکافات داشتش خدا بخیر کنه :: و ممکن است کمی دلسرد شوید و بگویید باید خیلی سخت باشد اما باور کنید بسیار آسان تر از چیزی که شنا فکر می کنید است این فقط تعریفاتش بود تا با کار آشنا شوید وگر نه از این به بعد که فهمیدیم چه هست دیگر آسان می شود

در C   پنج نوع داده اصلی وجود دارد که عبارتند از : char، int،، float،، double، و void

. در این زبان اندازه و محدوده ای که هر نوع داده اختیار می کند بستگی به

نوع پردازشگر (Processor) و نحوه پیاده سازی کامپایلر دارد. شناسه هایی ( متغیر

برچسب ، اسامی توابع و ... ) که از نوع char باشند برای ذخیره کردن مقادیری که

توسط کاراکترهای اسکی تعریف شده اند به کار می روند. شناسه هایی از نوع int برای

ذخیره کردن مقادیر صحیح ، و از نوع floatو doubleو برای ذخیره کردن اطلاعات عددی

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

نوع void در مورد توباع به کار می رود .

نوعهای داده اصلی ( به جز void ) می توانند با عباراتی مثل signed، long، unsigned

و shortو ترکیب شده و نوع های دیگری را به وجود آورند . ( جدول (1) ).

نوع | اندازه تقریبی به بیت | بازه قابل قبول |

char

|

| 8 | 127- تا | 127 unsigned char

|

| 8 | 0 تا | 255 signed char

|

| 8 | 127- تا | 127 int

|

| 16 | 32767- تا | 32767 unsigned int

|

| 16 | 0 تا | 65525 signed int

|

| 16 | 32767- تا | 32767 short int

|

| 16 | 32767- تا | 32767 unsigned

|

| 16 | 0 تا | 65525 | | | short int |

signed

|

| 16 | 32767- تا | 32767 | | | short int |

long int

|

| 32 | َ2147483647- تا | 2147483647 |

 

 

 

آموزش کامپایل کردن برنامه اول توسط ویژوال سی پلاس پلاس :

 

این بخش را برای دوستانی که بر روی دستگاهشان برنامه ++ Visual C را نصب کرده اند توضیح می دهم ...

دقت داشته باشید که این روش کامپایل کردن برای تمامی برنامه های دیگری که می نویسید هم یکسان خواهد بود (البته شایان ذکر می شوم که این راه برای ابتدای کار است و در ادامه راه اصلی را به شما آموزش خواهم داد ..اما چون در حال حاضر تنها با سی کار داریم من این راه را برای جلوگیری از سردرگمی شما در برنامه ++ Visual C توصیه می کنم )

 

فرض کنید ما کد برنامه خود را در محیطی مثل Notepad نوشته ایم ... گزینه Save As را که در بخش File است زده و برنامه را به نام دلخواه خود و با پسوند c در محلی که مورد نظرمان است ذخیره می کنیم فرضا من می خواهم اسم برنامه خود را با نام Dreamer ذخیره کنم پس باید به صورت Dreamer.c آن را ذخیره کنیم ...

سپس به جایی که تعیین کرده ایم می رویم و مشاهده می کنیم که یک آیکون با شکل c در آن محل ذخیره شده ..بر روی آن دابل کلیک کرده تا برنامه ++Visual C باز شود ...برای کامپایل کردن برنامه به بخش Build که در نوار بالایی برنامه است می رویم و گزینه Compile را می زنیم تا برنامه ما را کامپایل کنید ( یا به جای طی این مراحل یک باره F7 + Ctrl را فشار دهیم ) .

 

دقت کنید وقتی برنامه را کامپایل می کنیم برنامه به دنبال ایرادهای دستوری کدی که ما نوشته ایم می گردد و اگر برنامه بدون اشکال باشد در نوار سفیدی که در پایین برنامه است می نویسد

 

 

 

و اگر برنامه دارای خطا باشد که تعداد خطا ها را می نویسد اگر Scrol کنار آن نوار را مقداری بالا تر ببرید می توانید ببینید که خطا های شما چه می باشد (و اگر روی خطا ها دابل کلیک کنید مکان خطا در کد شما را نشان می دهد )

 

دقت داشته باشید تا زمانی که Error ها را به صفر نرسانید برنامه شما اجرا نمی شود ولیwarning ها مانعی برای اجرا نمی باشند (همانطور که از نامش پیداست فقط هشدار است )

 

حال که برنامه را کامپایل کردیم وقت آن رسیده تا برنامه را به فایل EXE تبدیل کنیم برای این کار گزینه زیر کامپایل که همانBuild...exe را می زنیم ( یا F7 ) وقتی این کار را انجام دادیم و برنامه ایرادی نگرفت فایل EXE ما ساخته شده و ما می توانیم نتیجه زحمات خودمان را ببینیم ..

به جایی که فایل خود را ذخیره کرده بودیم می رویم مشاهده می کنیم که چندین آیکون جدید نیز ساخته شده است در این میان یک پوشه (Folder) ساخته شده است به نام Debug خوب وارد این پوشه شوید و فایلی خود را که به همان نامی که دخیره کرده بودید را با پسوند EXE مشاهده کنید ...می توانید آن را اجرا کنید تا نتیجه کار خود را ببینید.

 ادامه دارد...

 


کلمات کلیدی: برنامه نویسی