PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : آموزش زبان c



آبجی
8th December 2009, 12:10 PM
مقدمه

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

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

2- زبان اسمبلی : این زبان شکل ساده تر زبان ماشین است، بدین صورت که برای هر دستورالعمل زبان ماشین، یک اسم نمادین انتخاب شده است (مانند دستور ADD بجای کد متشکل از صفرها و یک ها برای دستورالعمل جمع) که بخاطر سپردن و برنامه نویسی با آنها برای انسانها ساده تر است. اما این برنامه ها برای ماشین قابل فهم نیست و باید قبل از اجرا شدن توسط برنامه مترجمی بنام اسمبلر به زبان ماشین تبدیل شود. توجه کنید که از آنجا که هر دستور زبان اسمبلی معادل یک دستور زبان ماشین است، این زبان نیز وابسته به ماشین می باشد و برنامه های نوشته شده به این زبان فقط برروی همان کامپیوتری که برای آن نوشته شده اند قابل اجرا است. علاوه براین کار با این زبانها نسبتا مشکل است و فقط متخصصین کامپیوتر قادر به استفاده از آنها هستند. نکته مهم آنکه در یک ماشین، برای هر کد زبان ماشین، انحصارا یک نماد اسمبلی وجود دارد و بر عکس.
مزیت زبان اسمبلی سطح پایین بودن آن است. چون به پایین ترین سخت سخت افزار ریزپردازنده (CPU) نزدیک است بنابراین با استفاده از این زبان ، متخصصین کامپیوتر می توانند هر برنامه ایی را که CPU (ماشین) قادر به اجرای آن است بنویسند.
عیب این زبان اینکه مختص یک ماشین بخصوصی است و با تغییر مشخصات ماشین برنامه باید عوض کرد. و البته برای هر کسی هم قابل فهم نیست.

3- زبانهای سطح بالا : دستورالعملهای این زبانها بسیار نزدیک به زبان انسانها (زبان انگلیسی) است و به همین دلیل برنامه نویسی با این زبانها بسیار ساده بوده و می توان الگوریتمها را به راحتی به این زبانها تبدیل کرد. از آنجا که این زبانها به هیچ ماشین خاصی وابسته نیستند، برنامه های نوشته شده با این زبانها (تا حد زیادی) قابل حمل می باشند. مثالهایی از این زبانها عبارتند از :

- بیسیک (Basic): برای کاربردهای آموزشی
- فرترن (Fortran) : برای کاربردهای علمی و مهندسی
- پاسکال (Pascal) : برای کاربردهای آموزشی و علمی
- زبان برنامه نویسی C که بحث ما در مورد آن خواهد بود. البته برنامه های نوشته شده به این زبانها ابتدا باید به زبان ماشین ترجمه شوند تا بر روی کامپیوتر قابل اجرا باشند. برای ترجمه این زبانها از کامپایلرها و یا مفسرها استفاده می شود.

آبجی
8th December 2009, 12:10 PM
تاریخچه زبان C برای بررسی تاریخچه زبان C باید به سال 1967 بازگردیم که مارتین ریچاردز زبان BCPL را برای نوشتن نرم افزارهای سیستم عامل و کامپایلر در دانشگاه کمبریج ابداع کرد. سپس در سال 1970 کن تامپسون زبان B را بر مبنای ویژگیهای زبان BCPL نوشت و از آن برای ایجاد اولین نسخه های سیستم عامل Unix در آزمایشگاههای بل استفاده کرد. زبان C در سال 1972 توسط دنیس ریچی از روی زبان B و BCPL در آزمایشگاه بل ساخته شد و ویژگیهای جدیدی همچون نظارت بر نوع داده ها نیز به آن اضافه شد. ریچی از این زبان برای ایجاد سیستم عامل Unix استفاده کرد اما بعدها اکثر سیستم عاملهای دیگر نیز با همین زبان نوشته شدند. این زبان با سرعت بسیاری گسترش یافت و چاپ کتاب "The C Programming Language" در سال 1978 توسط کرنیگان و ریچی باعث رشد روزافزون این زبان در جهان شد.

متاسفانه استفاده گسترده این زبان در انواع کامپیوترها و سخت افزارهای مختلف باعث شد که نسخه های مختلفی از این زبان بوجود آید که با یکدیگر ناسازگار بودند. در سال 1983 انستیتوی ملی استاندارد آمریکا (ANSI) کمیته ای موسوم به X3J11 را را مامور کرد تا یک تعریف فاقد ابهام و مستقل از ماشین را از این زبان تدوین نماید. در سال 1989 این استاندارد تحت عنوان ANSI C به تصویب رسید و سپس در سال 1990، سازمان استانداردهای بین المللی (ISO) نیز این استاندارد را پذیرفت و مستندات مشترک آنها تحت عنوان ANSI/ISO C منتشر گردید.

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

با گسترش شبکه و اینترنت، نیاز به زبانی احساس شد که برنامه های آن بتوانند برروی هر ماشین و هر سیستم عامل دلخواهی اجرا گردد. شرکت سان مایکروسیستمز در سال 1995 میلادی زبان Java را برمبنای C و C++ ایجاد کرد که هم اکنون از آن در سطح وسیعی استفاده می شود و برنامه های نوشته شده به آن برروی هر کامپیوتری که از Java پشتیبانی کند (تقریبا تمام سیستمهای شناخته شده) قابل اجرا می باشد. شرکت مایکروسافت در رقابت با شرکت سان، در سال 2002 زبان جدیدی بنام C# (سی شارپ) را ارائه داد که رقیبی برای Java بشمار م

آبجی
8th December 2009, 12:11 PM
برنامه نویسی ساخت یافته در دهه 1960 میلادی توسعه نرم افزار دچار مشکلات عدیده ای شد. در آن زمان سبک خاصی برای برنامه نویسی وجود نداشت و برنامه ها بدون هیچگونه ساختار خاصی نوشته می شدند. وجود دستور پرش (goto) نیز مشکلات بسیاری را برای فهم و درک برنامه توسط افراد دیگر ایجاد می کرد، چرا که جریان اجرای برنامه مرتبا دچار تغییر جهت شده و دنبال کردن آن دشوار می گردید. لذا نوشتن برنامه ها عملی بسیار زمان بر و پرهزینه شده بود و معمولا اشکال زدایی، اعمال تغییرات و گسترش برنامه ها بسیار مشکل بود. فعالیتهای پژوهشی در این دهه باعث بوجود آمدن سبک جدیدی از برنامه نویسی بنام روش ساخت یافته گردید؛ روش منظمی که باعث ایجاد برنامه هایی کاملا واضح و خوانا گردید که اشکال زدایی و خطایابی آنها نیز بسیار ساده تر بود.

اصلی ترین نکته در این روش عدم استفاده از دستور پرش (goto) است. تحقیقات بوهم و ژاکوپینی نشان داد که می توان هر برنامه ای را بدون دستور پرش و فقط با استفاده از 3 ساختار کنترلی ترتیب، انتخاب و تکرار نوشت.

ساختار ترتیب، همان اجرای دستورات به صورت متوالی (یکی پس از دیگری) است که کلیه زبانهای برنامه نویسی در حالت عادی به همان صورت عمل می کنند.

ساختار انتخاب به برنامه نویس اجازه می دهد که براساس درستی یا نادرستی یک شرط، تصمیم بگیرد کدام مجموعه از دستورات اجرا شود.

ساختار تکرار نیز به برنامه نویسان اجازه می دهد مجموعه خاصی از دستورات را تا زمانی که شرط خاصی برقرار باشد، تکرار نماید.

هر برنامه ساختیافته از تعدادی بلوک تشکیل می شود که این بلوکها به ترتیب اجرا می شوند تا برنامه خاتمه یابد (ساختار ترتیب). هر بلوک می تواند یک دستورساده مانند خواندن، نوشتن یا تخصیص مقدار به یک متغیر باشد و یا اینکه شامل دستوراتی باشد که یکی از 3 ساختار فوق را پیاده سازی کنند. نکته مهم اینجاست که درمورد دستورات داخل هر بلوک نیز همین قوانین برقرار است و این دستورات می توانند از تعدادی بلوک به شرح فوق ایجاد شوند و تشکیل ساختارهایی مانند حلقه های تودرتو را دهند.

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

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

کمی بعد زبان C ارائه گردید که علاوه بر دارا بودن ویژگیهای برنامه نویسی ساختیافته بدلیل سرعت و کارایی بالا مقبولیتی همه گیر یافت و هم اکنون سالهاست که بعنوان بزرگترین زبان برنامه نویسی دنیا شناخته شده است.

آبجی
8th December 2009, 12:22 PM
مراحل اجرای یک برنامه C

اول برنامه را خواهیم نوشت. برای نوشتن برنامه می توان از هر ویرایشگر متنی موجود استفاده کرد و سپس فایل حاصل را با پسوند .C ذخیره نمود (فایلهای C++ با پسوند .CPP ذخیره می گردند). به این فایل، کد مبدا (source code) گفته می شود(در زبان فارسی هم اصطلاحا فایل سورس می گویند).

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

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

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

به این محیطها IDE یا Integrated Development Environment یا محیط مجتمع توسعه نرم افزار گفته می شود. این محیطها دارای یک ویرایشگر متن می باشند که معمولا دارای خواص جالبی همچون استفاده از رنگهای مختلف برای نشان دادن اجزای مختلف برنامه مانند کلمات کلیدی و یا قابلیت تکمیل اتوماتیک قسمتهای مختلف برنامه می باشد. پس از نوشتن برنامه و با انتخاب گزینه ای مانند Run کلیه عملیات فوق بطور اتوماتیک انجام شده و برنامه اجرا می گردد. علاوه براين، اين محيطها معمولا داراي امكانات اشكالزدايي برنامه (Debug) نيز مي باشند كه شامل مواردي همچون اجراي خط به خط برنامه و يا ديدن محتويات متغيرها در زمان اجرا است. چند محيط معروف برنامه نويسي عبارتند از :

Borland C++ 3.1 براي محيط DOS
Borland C++ از نسخه 4 به بالا براي Windows
Microsoft Visual C++ براي محيط Windows
Borland C++ Builder برای محیط Windows

براي شروع می توانید از ساده ترین محيط Borland C++ 3.1 تحت Dos كه نحوه كار ساده تري نسبت به سايرين دارد استفاده كنيد. پس از نصب اين نرم افزار، برنامه BC.exe را اجرا كنيد تا وارد محيط borland c شويد
د اینجا اشاره ایی به این محیط ساده خواهیم داشت. خوانندگان می توانند از هر کدام از برنامه های کامپایلر یا مفسر C یا C++ برای این منظور استفاده کنند. اگر برنامه را در کامپیوترخودتان نصب کنید، خواهید دید که این محیط از سه قسمت اصلي تشكيل شده است :

- بخش ويرايش برنامه : بخش آبي رنگ وسط مي باشد كه در حقيقت يك ويرايشگر است كه برنامه در آن تايپ مي شود. همانطور كه مي بينيد در اين ويرايشگر از رنگهاي مختلف براي نشان دادن قسمتهاي مختلف برنامه استفاده مي شود. مثلا براي كلمات كليدي از رنگ سفيد استفاده شده است.

- بخش منوهاي كاري : اين بخش كه در قسمت بالا واقع شده است،- حاوي تعدادي منو (گزينه) براي انجام وظايف مختلف است. خلاصه اين عمليات عبارتند از :
o منوي File : عملياتي مانند باز كردن و يا ذخيره يك برنامه
o منوي Edit : عمليات ويرايش مانند حذف، كپي و يا چسباندن يك قسمت از برنامه
o منوي Search : جستجوي و يا تعويض يك متن در برنامه
o منوي Run : اجراي برنامه بصورت كامل يا دستور به دستور
o منوي Compile : عمليات مربوط به كامپايل و پيوند برنامه
o منوي Debug : عمليات مربوط به اشكال زدايي مانند ديدن مقادير متغيرها در زمان اجرا
o منوي Project : عمليات مربوط به مديريت برنامه هايي كه شامل چندين فايل مستقل هستند (پروژه)
o منوي Options : عمليات مربوط به تنظيمات سيستم مانند نحوه كامپايل و يا رنگ پيش فرض محيط
o منوي Windows : عمليات مربوط به پنجره هاي باز فعلي (مربوط به چندين برنامه يا نمايش متغيرها و ... )

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

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

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

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

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

b. خطاهای غیرمهلک: در این دسته خطا، اجرای برنامه ادامه می یابد ولی برنامه نتایج اشتباه تولید می نماید. بعنوان مثال ممکن است دراثر وجود یک خطای منطقی در یک برنامه حقوق و دستمزد، حقوق کارمندان اشتباه محاسبه شود و تا مدتها نیز کسی متوجه این خطا نشود!

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

آخرین نکته اینکه در اصطلاح برنامه نویسی به هر گونه خطا، bug و به رفع خطا debug گفته می شود.

آبجی
8th December 2009, 12:24 PM
يک برنامه کامپيوتری ، از مجموعه ای دستورالعمل که نوع و نحوه انجام يک فعاليت را برای کامپيوتر مشخص می نمايند ، تشکيل می گردد. دستورالعمل های نوشته شده بعنوان نمونه ممکن است به کامپيوتر اعلام نمايند که تعدادی از اعداد را با يکديگر جمع و يا دو عدد را با يکديگر مقايسه و بر اساس نتيجه بدست آمده ، اتخاذ تصميم نمايد. دستورالعمل های نوشته شده ، صرفا" برای کامپيوتر قابل فهم و اجراء خواهند بود. کامپيوتر دستورالعمل های نوشته شده را اجراء و ماحصل آن رسيدن به اهدافی خواهد بود که بر اساس آن برنامه طراحی و پياده سازی شده است . دستورالعمل ها ، می بايست با استفاده از يکی از زبانها ی برنامه نويسی نوشته شده ( کدينگ ) و در ادامه در اختيار کامپيوتر قرار داده شوند. زبانهای برنامه نويسی متعددی نظير : فرترن ، بيسيک ، کوبال ، پاسکال، ،C ، جاوا ، ويژوال بيسيک و ... وجود دارد.

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


برنامه نويسی مبتنی بر DOS در مقابل ويندوز
برنامه نويسی مبتنی بر ويندوز دارای تفاوت های عمده ای نسبت به برنامه نويسی سنتی در محيط DOS است. برنامه های DOS ، مسيری دقيق و مشخص را ازابتدا تا پايان دنبال می نمايند . رويکرد فوق ، باعث بروز محدوديت هائی در رابطه با عملکرد برنامه ها از يک طرف و تحميل محدوديت هائی به کاربران در طی نمودن مسير مشخص شده ، می گردد. از زاويه ای خاص می توان عملکرد يک برنامه مبتنی بر DOS را مشابه قدم زدن در يک راهرو ( سالن )، در نظر گرفت . به منظور رسيدن به نقطه انتهائی سالن ، می بايست طول سالن طی شود تا به انتهای آن رسيد . در اين راستا از موانع متعدد موجود در مسير ، می بايست عبور کرد تا سرانجام به مقصد مورد نظر رسيد . در زمان پيمودن مسير ، صرفا" امکان بازنمودن درب های خاصی ، وجود خواهد داشت .
ويندوز ، دنيای جديدی از برنامه نويسی مبتنی بر "رويداد" را ايجاد نموده است . کليک نمودن موس ، تغيير اندازه پنجره ، تغيير محتويات يک Textbox ، نمونه هائی از يک "رويداد" می باشند. کدهای نوشته شده ، نحوه برخورد با يک رويداد را مشخص می نمايد. برای رسيدن به انتهای يک سالن کافی است بر روی "انتهای سالن " ، کليک نمود و ديگر ضرورتی به پيمودن تمامی مسير تا رسيدن به انتهای سالن نخواهد بود . درصورتي که به انتهای سالن رسيده باشيم و متوجه گرديم که اين مکان ، محلی نيست که انتظار آن را داشته ايم ، بسادگی می توان مقصد جديدی را برای خود انتخاب ، بدون اينکه ضرورتی به برگشت در نقطه آغازين مسير وجود داشته باشد.
برنامه نوشته شده عکس العمل های لازم در ارتباط با حرکت شما را به همراه عمليات مربوطه به منظور تکميل فعاليت های مورد نظر انجام خواهد داد . در اين راستا ، برنامه نويسان می توانند کدهای لازم در رابطه با رويدادهائی که امکان تحقق آنها وجود دارد را نوشته تا در زمان بروز رويداد مورد نظر ، عکس العمل لازم از طرف برنامه صورت پذيرد. در اين زمينه می توان از نوشتن کدهای ديگر به منظور برخورد با رويدادهای غيرضروری ، صرفنظر کرد. مثلا" ويندوز قادر به تشخيص رويداد "کليک " از "کليک مضاعف " است . اين بدان معنی است که اگر می خواهيد برنامه مورد نظر شما ، عکس العمل لازم در ارتباط با رويداد "کليک" را داشته باشد ، می بايست صرفا" کد مربوط به رويداد " کليک"، نوشته گردد و الزامی به نوشتن کدهای لازم به منظور برخورد با رويداد "کليک مضاعف" ، وجود نخواهد داشت .
در دنيای برنامه نويسی DOS ، کاربر عکس العمل لازم را نسبت به برنامه انجام می دهد در صورتي که در ويندوز ، برنامه ها عکس العمل لازم را با توجه به رفتار کاربران ، انجام خواهند داد .
يکی ديگر از مزايای مهم برنامه های ويندوز ، عدم وابستگی برنامه ها به يک سخت افزار خاص است . ويندوز تمهيدات لازم در خصوص ارتباط با سخت افزار را پيش بينی و برنامه نويسان نياز به آگاهی از نحوه عملکرد يک دستگاه سخت افزاری خاص به منظور استفاده از آن ، نخواهند داشت . مثلا" برنامه نويسان ضرورتی به آگاهی از نحوه عملکرد هر نوع چاپگر ليزری، بمنظور ايجاد خروجی مورد نظر خود در برنامه ها ، نخواهند داشت. ويندوز، امکانات لازم در اين خصوص را از طريق ارائه روتين های عمومی که با درايورهای مورد نظر مرتبط می گردند ، فراهم می نمايد. شايد همين موضوع دليل موفقيت ويندوز باشد .
روتين های عمومی اصطلاحا" Windows (API ) Application Programming Interface ناميده می شوند .

آبجی
8th December 2009, 12:27 PM
يك برنامه نمونه در اين قسمت براي آشنايي اوليه با زبان C يك برنامه نمونه آورده شده است كه بدون هيچ تغييري در محيط کامپایلر C یا CPP قابل اجرا است. برای شروع توصیه می کنم که یکی از برنامه های کامپایلرC را تهیه کرده و آن را در کامپیوترخود نصب نموده و برنامه زیر را در آن اجرا کنید. برنامه را با هر ادیتوری که نوشتید با نام (test1.cpp) بر روی کامپیوتر خودتان ذخیره نمایید.
کد:
// This Program Computes The Area of a Circle
#include <stdio.h>
void main() {
int radius ;
float area;
printf("Please Enter Radius : ");
scanf("%d",&radius);
area = 2 * 3.14 * radius;
printf("Area is %f",area);
}

آبجی
8th December 2009, 12:28 PM
درمورد برنامه فوق به نکات زیر توجه کنید :

- خط اول یک توضیح درمورد برنامه است. در زبان C برای توضیحات تک خطی از علامت // استفاده می گردد. اما چنانچه توضیحات بیش از یک خط بود، آن را با علامت*/ شروع کرده و با /* پایان دهید. کامپایلر از این توضیحات صرفنظر خواهد کرد. این توضیحات باعث می شوند که برنامه شما خواناتر شده و دیگران بهتر آن را درک کنند.

- هر دستوری که با علامت # شروع شود، یک دستور C نیست، بلکه جزء دستورات پیش پردازنده محسوب می گردد. دستورات پیش پردازنده، دستوراتی هستند که توسط کامپایلر قبل از شروع به کامپایل اجرا می شوند. به عنوان مثال دستور #include باعث می شود که تعاریف اولیه مربوط به توابعی (زیربرنامه هایی) که قصد استفاده از آنها را داریم به برنامه اضافه شود. در مثال بالا برای استفاده از توابع printf و scanf که در کتابخانه استاندارد C تعریف شده اند، فایل سرآمد stdio.h را که این توابع در آن تعریف شده اند را استفاده کرده ایم.
بنابراین در مثال فوق با دستور include به کامپایلر می گوییم که از توابع تعریف شده در فایل سرآمد stdio.h در این برنامه استفاده شده است.

- هر برنامه C باید دارای تابعی به نام main باشد که اجرای برنامه از آن شروع می شود و در حقیقت همان برنامه اصلی است. البته می توان هر تعداد دیگری تابع (زیربرنامه) نیز تعریف کرد، اما وجود تابع main الزامی است. دقت کنید که گرچه این تابع پارامتر ورودی ندارد، اما از پرانتز باز و بسته الزاما استفاده شده است.

- در زبان C هر قسمت یا بلوک برنامه با علامت } آغاز شده و با { پایان می یابد. این دو معادل دستورات begin و end در زبانهای دیگر ازجمله پاسکال می باشند که برای سادگی زبان انتخاب شده اند.

- دو خط بعدی به تعریف متغیرهای radius و area می پردازد. در زبان C قبل از استفاده از هر متغیری باید آن را اعلان (تعریف) نمایید. اعلان متغیر شامل نام و نوع متغیر است. در مثال فوق، متغیر radius از نوع عدد صحیح(integer) و متغیر area از نوع عدد اعشاری (float) تعریف شده اند.

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

- دقت کنید که در پایان هر دستورالعمل از علامت ; استفاده شده است. زبان C یک زبان قالب آزاد است و شما می توانید دستورات را به هر نحوی که دوست دارید قرار دهید (مثلا چند دستور در یک خط از برنامه). تنها علامتی که نشان دهنده پایان یک دستور است، علامت ; می باشد و انتهای خط به معنای پایان دستور نیست!

- چون زبان C یک زبان قالب آزاد است، می توان با استفاده از مکان نوشتن دستورات شکل بهتری به برنامه داد تا برنامه راحت تر خوانده و فهمیده شود. به عنوان مثال دقت کنید که پس از شروع تابع main، دستورات حدود 4 - 5 کاراکتر جلوتر نوشته شده اند. به این نحوه نوشتن دستورات دندانه گذاری می گویند. بطور کلی هربار که بلوک جدیدی آغاز می شود، باید آن را کمی جلوتر برد. این مسئله باعث جدا شدن بلوکها از یکدیگر و خوانایی بهتر برنامه می شود.

آبجی
8th December 2009, 12:29 PM
2 این مثال را به نام یک فایل مثلا test2.cpp در کامپیوترتان ذخیره کرده و آن را اجرا کنید:
کد:

#include < stdio.h >
void main() {
int a ,b ;
a = 5 ;
b = a + 1;
printf(“a=%d and b=%d \n”,a,b);
b = a + b;
printf(“a=%d and b=%d \n”,a,b);
printf("\n \n")
printf("This is test.\n")
}



اگر این مثال را اجرا کنید نتیجه حاصل باید به صورت زیر باشد:

کد:
a=5 b=6
a=5 b=11


This is test.

آبجی
8th December 2009, 12:30 PM
مقدمات زبان C


زبان C در سال 1970 توسط دنيس ريچي طراحي گرديد. اين زبان تكامل يافته زبان BCPL ميباشد كه طراح آن مارتين ريچاردز است ،و زبان BCPL از زبان B كه طراح آن كن تامپسون مي باشد ، نتيجه شده است .

زبان C معمولا" يك زبان مياني ناميده مي شود . اين بدان معني نيست كه آموزش اين زبان مشكل است ، يا قدرت آن از زبان هاي برنامه سازي مثل پاسكال و بيسيك كمتر است و يا اين كه مشكلاتي مشابه زبان اسمبلي براي برنامه نويس ايجاد مي كند.

علت مياني بودن زبان C اين است كه عناصر زبان هاي سطح بالا را با خصيصه تابعي زبان اسمبلي درهم آميخته است . زبان C همانند ساير زبانهاي مياني با مفاهيم بيت ، بايت و آدرس كه از عناصر ابتدايي ماشين هستند سر و كار دارد . يعني در اين زبان مي توان محتويات بيت ها و بايت ها را نيز تغيير داد .

برنامه هاي نوشته شده به زبان C براحتي از ماشيني به ماشين ديگر قابل انتقال مي باشند . مثلا" برنامه نوشته شده براي كامپيوتر APPL در كامپيوترهاي IBM قابل اجرا است . اين خصيصه را قابل حمل بودن (Portability) زبان مي گويند .

كليه زبان هاي برنامه سازي سطح بالا و مياني داراي نوعهاي داده (data types) هستند . هر نوع داده ، مجموعه اي از مقادير را مشخص مي كند كه اعمال خاصي روي آنها قابل انجام است . نوع داده اي كه در اكثر زبانها وجود دارد عبارتند از : اعداد صحيح ، كاراكتري و اعداد اعشاري . C داراي 5 نوع داده اصلي است كه در آن تقريبا" تبديل هر نوع داده به نوع ديگر امكان پذير است . مثلا" در يك عبارت مي توان نوع كاراكتري را با نوع عددي صحيح و يا اعشاري تركيب كرد .
زبان C خطاي زمان اجرا مثل boundray checking را چك نمي كند . منظور از boundray checking اين است كه در آرايه ها تجاوز از حدود مشخص شده ، به راحتي امكان پذير بوده و از نظر كامپايلر با خطايي مواجه نميشود. اين مساله برميگردد به اين كه در زبان C آرايه يك اشاره گر (pointer) است . در اين راستا ، نوع پارامترها و آرگومان هاي توابع نيز در گونه هاي قديمي C با يكديگر مطابقت نشده و از نظر كامپايلر با خطا مواجه نمي شد ولي در گونه هاي جديد C با معرفي الگوي تابع (Function prototype) اين مشكل رفع شده است . C
همانند زبان هاي ALGOL، PASCAL، و... يك زبان ساخت يافته است . يك زبان برنامه سازي ساخت يافته امكانات زيادي ، از جمله استفاده از چند ساختار حلقه سازي مثل while، do-while،و forو را فراهم مي كند . در اين گونه زبان ها از goto به ندرت استفاده مي شود و نوشتن دستورات برنامه در هر ستوني از خط و در هر جاي فايل امكان پذير بوده ، مثل زبان فرترن مقيد به ستون هاي خاصي نيستند. استفاده از زيربرنامه ها و بلاك ها نيز از خصيصه هاي اين نوع زبان ها هستند . ذكر اسامي چند زبان ساخت يافته و غير ساخت يافته ، در انتخاب زبان برنامه سازي جهت برنامه نويسي مفيد است .

آبجی
8th December 2009, 12:30 PM
هر برنامه در زبان C داراي خصيصه هايي است كه بعضي از آنها عبارتند از :
1 - در زبان C هر دستور برنامه به يك ; ختم مي شود .
2 - هر دستور ميتواند در چند خط ادامه داشته و يك خط ممكن است شامل چند دستور
باشد .
3 - حداكثر طول يك خط برنامه 254 كاراكتر است .
4 - در زبان C برنامه نويس مي تواند در هر نقطه از برنامه ، بااستفاده از علائم { و } يك بلاك را مشخص كرده و هر متغيري را كه مي خواهد در آنجا تعريف نمايد .
اين متغيرها فقط در آن بلاك معني خواهند داشت . توجه داريم كه هر بلاك مجموعه اي از دستورات وابسته به يكديگر خواهد بود :
5 - براي داشتن توضيحات در برنامه كافي است آنها را دربين /* و */ قرار داد:


C يك زبان ساخت يافته بلاكي نيست . اين بدان معني است كه تعريف يك زيربرنامه ( در اينجا تابع ) در زيربرنامه ديگر ( همانند پاسكال ) امكان پذير نيست و اين امر از مساله coupling مي كاهد . C زبان برنامه نويسي سيستم است . منظور از برنامه هاي سيستم عبارتند از :
1 - سيستم عامل ( Operating system )
2- مفسر (Interpreter)
3- ويراستار (Editor)
4- اسمبلر (Assrmbler)
5- كامپايلر (Compiler)
6- مديريت بانكهاي اطلاعاتي (Database management)

امروزه C در اكثر امور برنامه نويسي مورد استفاده قرار مي گيرد . زيرا اين زبان هم داراي خصيصه " قابل حمل بودن " است و هم داراي كارآيي خوبي مي باشد و سرعت زياد C بر محبوبيت آن افزوده است . مساله قابل حمل بودن ، يك مساله بسيار مهم است زيرا هم موجب صرفه جويي در وقت شده و هم باعث صرفه جويي در هزينه ها مي گردد .

آبجی
8th December 2009, 12:30 PM
زبان C فقط داراي 32 كلمه كليدي است كه 27 كلمه كليدي آن توسط ريچي ( طراح زبان سی ) معرفي شده و 5 كلمه كليدي ديگر توسط موسسه استاندارد سازي زبان به آن اضافه شده است . اين تعداد در مقايسه با 159 كلمه كليدي كه در زبان بيسيك وجود دارد قابل توجه است .

كليه كلمات كليدي در زبان C به حروف كوچك نوشته مي شوند . چون در اين زبان بين حروف كوچك و بزرگ تفاوت است ، به عنوان مثال كلمه else يك كلمه كليدي است

کلمات کلیدی زبان C در زیر آمده است :
ستاره دارها کلمات کلیدی هستند که به وسیله موسسه استاندارد سازی زبان افزده شده است:
کد:
| auto | double | int | struct |
| break | else | long | switch |
| case | enum* | register | typedef |
| char | extern | return | union |
| const* | float | short | unsigned |
| continue | for | signed* | void* |
| default | goto | sizeof | volatile* |
| do | if | static | while |


بعضي از كامپايلرها علاوه بر 32 كلمه كليدي كلمات كليدي ديگري به زبان C اضافه نموده اند که در زیر آمده است:

کد:
| asm | ess |- ds |- es |
|- ss | cdecl | far | huge |
| intrrupt | near | pascal |

آبجی
8th December 2009, 12:31 PM
انواع داده


همان طور كه قبلا" گفته شد در هر زبان برنامه سازي تعدادي از نوع هاي داده وجود دارند كه بازه اي را شامل بوده و اعمال خاصي روي آنها انجام پذير است و در C پنج نوع داده اصلي وجود دارد كه عبارتند از : char، int ، float ، double و void .

در اين زبان اندازه و محدوده اي كه هر نوع داده اختيار مي كند بستگي به نوع پردازشگر (Processor ) و نحوه پياده سازي كامپايلر دارد

شناسه هايي ( متغير برچسب ، اسامي توابع و ... ) كه از نوع char باشند براي ذخيره كردن مقاديري كه توسط كاراكترهاي اسكي تعريف شده اند به كار مي روند. شناسه هايي از نوع int براي ذخيره كردن مقادير صحيح و از نوع float و double و براي ذخيره كردن اطلاعات عددي اعشاري به كار ميروند كه محدوده آنها توسط تعداد ارقام و دقت آنها مشخص ميشود.

نوع void در مورد بدون مقدار به كار مي رود .

نوعهاي داده اصلي ( به جز void ) مي توانند با عباراتي مثل signed ، long ، unsigned
و short تركيب شده و نوع هاي ديگري را به وجود آورند .

آبجی
8th December 2009, 12:38 PM
متغيرها


متغير، نامي براي يك محل حافظه است كه محتويات آن در طول اجراي برنامه ممكن
است تغيير كند . اسم هر متغير شامل حروف a تا z ، A ، تا Z ، ارقام 0 تا 9 و خط
ربط است . به طوري كه با يكي از حروف و يا خط ربط شروع شده باشند . طول نام هر
متغير بستگي به نوع كامپايلر دارد كه معمولا" از 1 تا 31 كاراكتر قابل استفاده

آبجی
8th December 2009, 12:39 PM
تعريف نوع متغير


براي استفاده از متغيرها درC بايد ابتدا آنها را تعريف كنيم . تعريف متغيرها شامل نامگذاري و تعيين نوع آنها است كه به صورت زير انجام مي شود :
کد:
int var1 , var2;


نوع اسامي متغيرها يكي از انواعی است كه قبلا ذكر كرديم و مي خواهيم داراي آن نوع باشد . براي تعريف چند متغير در يك دستور ، همانند مثال فوق بايد اسامي را با كاما از يكديگر جدا کرد.
دستور فوق دو متغير به اسامي var2 و var1 را از نوع int تعريف مي كند .
کد:
float flovar1, flovar2;


دستور فوق ، دو متغير به نام هاي flovar2 و flovar1 را از نوع float تعريف مي كند .
کد:
double d1;
char ch;


اولين دستور ، d1 را از نوع double و دستور دوم متغير ch را از نوع char تعريف مي كند .

آبجی
8th December 2009, 12:39 PM
مقدار دادن به متغيرها


براي مقدار دادن به متغيرها مي توان به دو طريق عمل كرد:
1 - به هنگام تعريف متغير .
2 - پس از تعريف متغير .
به عنوان مثال :
کد:
int a=0;
int b, c, d, e=0;
char ch= 'a';
b=0;
c=d=0;


دستور اول ضمن تعريف a از نوع int مقدار آن را برابر با 0 قرار مي دهد .
دستور دوم چهار متغير b، c، d ، e را از نوع int تعريف كرده و فقط مقدار متغير e را برابر صفر قرار می دهد.
دستور سوم مقدار متغیر ch را از نوع كاراكتري تعريف كرده و مقدار آن را برابر با حرف a قرار مي دهد .
دستور چهارم مقدار متغير b را برابر با 0 قرار مي دهد . (در این دستور متغیری تعریف نشده یعنی قبل از این خط باید متغیر تعریف شده باشد) .
دستور پنجم مقدار دو متغير c و d را برابر صفر قرار مي دهد و اين دستور ، انتساب چندتايي را مشخص مي كند .

آبجی
8th December 2009, 12:40 PM
const


همان طور كه قبلا" گفته شد مقدار متغيرها ممكن است در طول اجراي برنامه تغيير كند . با استفاده از كلمه كليدي const مي توانيم متغيرهايي را تعريف كنيم كه مقدار آنها در طول اجراي برنامه ثابت باشد .
براي تعريف اين نوع متغيرها بصورت زير عمل مي شود :
مثال :
کد:
const int a = 10 , b = 20;


دستور فوق دو متغير a و b را از نوع int تعريف كرده و مقادير آنها را برابر 10 و 20 قرار مي دهد . اين مقادير در طول اجراي برنامه غیر قابل تغيير هستند .

آبجی
8th December 2009, 12:41 PM
عملگرها


عملگرها نمادهايي هستند كه براي انجام اعمال خاصي مورد استفاده قرارميگيرند. عملگرها در زبان c از تنوع زيادي برخوردارند . در c چهار دسته عملگر به نامهاي ( محاسباتي ، رابطه اي ، منطقي و دستكاري بيت ها ) وجود دارند كه آنها را بررسي
مي كنيم .

آبجی
8th December 2009, 12:41 PM
عملگر % كه در بقيه زبانها با علامت ديگري ( مثلا" در بيسيك به صورت MOD) وجود دارد باقيمانده تقسيم دو عدد را محاسبه مي كند :
کد:
x= 13;
y= 5;
z= x%y;


اگر سه دستور فوق را توسط ماشين اجرا كنيم مقدار 3 كه باقيمانده تقسيم 13 بر 5
است در z قرار مي گيرد .

عملگر كاهش - - ، يك واحد از عملوند مربوط كم مي كند .
کد:
x= 10;
-- x;


دستور x - - از x يك واحد كم مي كند و نتيجه را در x قرار مي دهد كه معادل دستور x = x-1 است .
عملگر افزايش ، يك واحد به عملوند مربوطه اضافه مي كند :
کد:
x= 40;
++x;


دستور ++x معادل دستور x = + 1 است كه موجب افزودن يك واحد به x مي شود .

عملگرهاي افزايش و كاهش يك واحد را مي توان بعد از عملوند مربوطه نيز به كار
برد مثل : x + + و - - x . یعنی هم قبل از x می توان انها را استفاده کرد و هم بعد از x. اگر در يك عبارت از عملگرهاي افزايش و كاهش يك واحد ، استفاده كنيم به كار بردن اين عملگرها در قبل و بعد از عملوند مربوطه ، با يكديگر متفاوت است . بدين معني كه اگر اين عملگرها قبل از عملوند باشند مقدار فعلي عملوند مورد استفاده قرار گرفته و سپس عملگرها بر روي آن عمل ميكنند، ولي اگر بعد از عملوند مربوطه باشند پس از انجام عمل افزايش و كاهش يك واحد به آنها مقادير جديد ، در عبارت مورد استفاده قرار مي گيرند.
استفاده ازعملگرهاي افزايش و كاهش يك واحد ، سرعت محاسباتي را بالا مي برد .

آبجی
8th December 2009, 12:41 PM
اگر در يك عبارت از چند عملگر محاسباتي استفاده شود ، مساله تقدم عملگرها مطرح مي شود جدول زیر :

بالاترين تقدم - - و + +

( تفريق يكاني - ) و * و %

پايين ترين تقدم - و +
همان طور كه در جدول فوق مشاهده مي شود ، عملگرهاي افزايش و كاهش يك واحد داراي بالاترين تقدم و عملگرهاي جمع و تفريق داراي كمترين تقدم هستند و منهاي يكاني ، داراي دومين تقدم است . عملگرهايي كه در يك سطر آمده اند ، مثل - و + بدين معني است كه داراي تقدم مكاني نسبت به يكديگر هستند. در اين صورت هر كدام از غملگرها كه اول ظاهر شود ، زودتر انجام خواهد شد .

آبجی
8th December 2009, 12:42 PM
عملگرهاي منطقي


عملگرهاي منطقي بر روي عملوندهاي منطقي عمل ميكنند. عملوندهاي منطقي داراي دو ارزش درستي و نادرستي هستند . جدول عملگرهاي منطقي در پست قبلی و به همراه جدول عملگرهای محاسباتی آورده شد.

ارزش نادرستي در زبان C با مقدار صفر و همچنین ارزش درستي با مقادير غير از صفر مشخص ميشود.
عملگر منطقي ! داراي بالاترين تقدم و عملگر || داراي كمترين تقدم در بين عملگرهاي منطقي هستند . چون عملگرهاي منطقي رابطه نزديكي با عملگرهاي رابطه اي دارند مي توان تقدم آنها را نسبت به يكديگر بيان كرد که در جدول پست قبلی به صورت یکجا نشان داده شد.

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

عملگرهاي محاسباتي و رابطه اي

=+ انتساب جمع | x+=y |

=- انتساب تفريق | x-=y |

=* انتساب ضرب | x*=y |

=/ انتساب تقسيم | x/=y |

=% انتساب باقيمانده تقسيم | x%=y |

در اینجا عبارت x += y معادل با x = x + y است
عبارت x %= y معادل با x= x% y است كه موجب انتساب باقيمانده تقسيم x بر yبه x مي شود .

مثال :
کد:
int a=10;
int b=20;
a+= b;


با اجراي دستورات فوق متغير a برابر 30 خواهد بود. زيرا دستور a += b معادل دستور a = a + b است .

آبجی
8th December 2009, 12:44 PM
عملگرهاي بيتي & ، | ، ~ ، AND ، OR و NOT


مشابه عملگرهاي منطقي AND ، OR و NOT عمل مي كنند با اين تفاوت كه عمل آنها بر
روي يك بيت است . با فرض اين كه p و q دو بيت مختلف باشند ، نحوه عمل عملگر ^
را در ذيل مشاهده مي نماييد .

p | q | p^q |

0 | 0 | 0 |

1 | 0 | 1 |

1 | 1 | 0 |

0 | 1 | 1 |

همان طور كه مشاهده شد ، نتيجه عملگر بيتي ^ وقتي يك (1) است كه يكي از عملوندهاي آن صفر و ديگري يك باشد . به عبارت ديگر ، نتيجه عملگر بيتي ^ وقتي صفر است كه هر دو عملوند آن صفر و يا هر دو يك باشند .


شرح عملگرهای جدول قبلی

& AND یا همان عملگر و
| OR یا همان عملگر يا
^ XOR یا همان عملگر يا انحصاري
~ NOT یا همان عملگر نقيض يا متمم يك
>> انتقال به سمت راست (shift right)
<< انتقال به سمت چپ (shift left)


عملگرهاي & ، | ، ^ ، << ، >> بر روي دو عملوند عمل مي كنند اما عملگری مثل ~ بر روي يك عملوند عمل مي كند . عملگرهايی مثل >> نیز تعداد انتقال متغير را مشخص می کنند در روش كلي متغير ، يك بايت يا كلمه اي از حافظه است كه عملگرها بايد بر روي آن عمل كنند . تعداد انتقال عددي است كه مشخص مي كند بيت هاي " متغير " بايد چند محل به سمت راست و يا چپ انتقال يابند . هر انتقال به چپ ، معادل با تقسيم كردن مقدار متغير به 2 و هر انتقال به راست ، معادل ضرب كردن در 2 است .

آبجی
8th December 2009, 12:45 PM
عملگر &

عملگر & يك عملگر يكاني است كه آدرس عملوند خود را مشخص مي كند و به صورت زير به كار مي رود :

نام عملوند&

مثال :
کد:
int num;
p= &num;



با اجراي دستورات فوق آدرس متغير num در متغير p قرار مي گيرد. لذا عملگر & به معني " آدرس " است . توجه داشته باشید که در این مثال متغیر p از نوع اشاره گر است.

آبجی
8th December 2009, 12:49 PM
عملگر *

عملگر * همانند عملگر & يك عملگر يكاني است كه محتويات يك آدرس حافظه را مشخص مي كند و به صورت زير به كار مي رود :

نام عملوند*

مثال :
کد:
p= &num;
m= *p;


دستور اول ، آدرس متغير num را در p قرار مي دهد و دستور دوم ، محتويات محلي را كه آدرس آن در p قرار دارد ( محتويات num ) را در m قرار ميدهد. بنابراين مفهوم * یعنی " محتويات آدرس " مي باشد . دو دستور فوق معادل دستور
کد:
m = num;


است كه موجب انتقال محتويات متغير num به متغير m مي شود .

آبجی
8th December 2009, 12:50 PM
تبدیل انواع

وقتي كه متغيرهاي با نوع هاي مختلف در يك عبارت با يكديگر تركيب مي شوند بايد تبديل نوع صورت گيرد . قاعده كلي اين است كه نوع هاي با طول كوچك تر به نوع هايي با طول بزرگتر تبديل مي شوند . مثلا" اگر دو متغير از نوع كاراكتري و عددي صحيح با يكديگر تركيب شوند ، نوع كاراكتري به عددي صحيح تبديل مي شود .

مثال 1
کد:
char ch;
int i;
float f;
double d;
result =( ch/i )+( f*d )- ( f+i )



همان طور كه از مثال 1 پيداست ، نوع نتيجه double خواهد بود .

علاوه بر تبديل انواع در عبارات ، در احكام انتساب نيز ممكن است تبديل انواع صورت گيرد . در تبديل انواع اطلاعاتي از بين مي روند كه بايد در نتيجه حاصل از احكام انتساب دقت كافي به خرج داد. در ذيل تبديل انواع در احكام انتساب مشاهده مي شود :

کد:
int x;
char ch;
float f;
ch= x;
x= f;
f= ch;
f= x;



كليه احكام انتساب فوق قابل انجام بوده و از طرف كامپايلر زبان C هيچ گونه خطايي گزارش نمي شود .
بايت كم ارزش - بايت باارزش
وقتي يك متغير int به يك متغير char انتساب داده مي شود بايت كم ارزش متغير از نوع int به متغير char منتقل شده ولي بایت ارزش متغير int از دست ميرود. (جایی که متغیر کاراکتر از نوع 8 بیتی و متغیر int از نوع 16 بیتی است

آبجی
8th December 2009, 12:52 PM
در ادامه چیزهایی که یاد گرفتیم خوبه که یک مسئله ساده رو توسط زبان c حل کنیم یا بهتر بگم برنامه ای رو بنویسیم که یکی از مسائل ساده ریاضیکی رو برای ما حل کنه http://www.forum.microrayaneh.com/images/smilies/hand.gif
فرض کنید می خواهیم برنامه ای رو بنویسیم که در شروع برنامه از ما شعاع دایره را خواسته و بعد از محاسبات لازم محیط و مساحت دایره مذکور را در خروجی چاپ کند.
http://i39.tinypic.com/f1l37n.jpg

در دستور اول شعاع دایره را با حرف r و نوع ان را نیز از نوع int تعریف می کنیم. int r
در دستور دوم میحط و مساحت رو از نوع عدد اعشاری float و با کلمات area و circle تعریف می کنیم. float area,circle
دستور سوم صفحه را برای استفاده بعدی پاک می کند. clrscr
دستور چهارم متنی را در خروجی چاپ می کند که از ما می خواهد تا شعاع را وارد کنیم. که از printf استفاده می کنیم.
دستور پنجم ورودی راخوانده در r قرار می دهد. scanf و & مشخص می کند که ورودی می تواند هر عددی از نوع int را قبول کند.
دستور ششم مساحت دایره را محاسبه می کند که برابر است با 3.14 ضربدر شعاع به توان دو
دستور هفتم محیط دایره را محاسبه می کند که برابر است با 3.14 ضربدر دو برابر شعاع یا همان قطر.
دستور هشتم و نهم هم که مقادیر area مساحت و circle محیط دایره را در خروجی چاپ می کند. printf
تموم

uody
19th April 2011, 12:31 AM
مقدمه ای بر زبان c


http://www.farinsoft.com/article/img/392.jpg

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




۱- زبان ماشین (سطح پایین) :
این زبان مستقیما با صفر و یک نوشته می شود و بدون هیچ واسطه ای برروی کامپیوتر قابل اجرا است. طراحان سخت افزار هر کامپیوتر، زبان ماشین خاص خود را برای آن ماشین طراحی می نمایند. به همین دلیل هر برنامه ای که به زبان ماشین نوشته شود، فقط برروی همان ماشین خاص کار می کند، بهمین دلیل برنامه های نوشته شده به زبان ماشین را غیر قابل حمل می نامند. از طرف دیگر یادگیری این زبان بسیار مشکل بوده و برنامه نویسی با آن نیز بسیار سخت است و همچنین احتمال بروز خطا نیز در آن زیاد است.
۲- زبان اسمبلی :
این زبان شکل ساده تر زبان ماشین است، بدین صورت که برای هر دستورالعمل زبان ماشین، یک اسم نمادین انتخاب شده است (مانند دستور ADD بجای کد دودویی دستورالعمل جمع) که بخاطر سپردن و برنامه نویسی با آنها برای انسانها ساده تر است. اما این برنامه ها برای ماشین قابل فهم نیست و باید قبل از اجرا شدن توسط برنامه مترجمی بنام اسمبلر به زبان ماشین تبدیل شود. توجه کنید که از آنجا که هر دستور زبان اسمبلی معادل یک دستور زبان ماشین است، این زبان نیز وابسته به ماشین می باشد و برنامه های نوشته شده به این زبان فقط برروی همان کامپیوتری که برای آن نوشته شده اند قابل اجرا است. علاوه براین کار با این زبانها هنوز هم نسبتا مشکل بود و فقط متخصصین کامپیوتر قادر به استفاده از آنها بودند.
۳- زبانهای سطح بالا :
دستورالعملهای این زبانها بسیار نزدیک به زبان انسانها (بطور مشخص زبان انگلیسی) می باشد و بهمین دلیل برنامه نویسی به آنها بسیار ساده تر بوده و می توان الگوریتمها را به راحتی به این زبانها تبدیل کرد. از آنجا که این زبانها به هیچ ماشین خاصی وابسته نیستند، برنامه های نوشته شده با این زبانها (تا حد زیادی) قابل حمل می باشند. مثالهایی از این زبانها عبارتند از :
- بیسیک (Basic): برای کاربردهای آموزشی
- فرترن (Fortran) : برای کاربردهای علمی و مهندسی
- پاسکال (Pascal) : برای کاربردهای آموزشی و علمی
و بالاخره زبان برنامه نویسی C که درمورد آن بیشتر صحبت خواهیم کرد. البته برنامه های نوشته شده به این زبانها ابتدا باید به زبان ماشین ترجمه شوند تا برروی کامپیوتر قابل اجرا باشند. برای ترجمه این زبانها از کامپایلرها و یا مفسرها مراجعه استفاده می شود….

تاریخچه C:
برای بررسی تاریخچه زبان C باید به سال ۱۹۶۷ بازگردیم که مارتین ریچاردز زبان BCPL را برای نوشتن نرم افزارهای سیستم عامل و کامپایلر در دانشگاه کمبریج ابداع کرد. سپس در سال ۱۹۷۰ کن تامپسون زبان B را بر مبنای ویژگیهای زبان BCPL نوشت و از آن برای ایجاد اولین نسخه های سیستم عامل Unix در آزمایشگاههای بل استفاده کرد. زبان C در سال ۱۹۷۲ توسط دنیس ریچی از روی زبان B و BCPL در آزمایشگاه بل ساخته شد و ویژگیهای جدیدی همچون نظارت بر نوع داده ها نیز به آن اضافه شد. ریچی از این زبان برای ایجاد سیستم عامل Unix استفاده کرد اما بعدها اکثر سیستم عاملهای دیگر نیز با همین زبان نوشته شدند. این زبان با سرعت بسیاری گسترش یافت و چاپ کتاب “The C Programming Language” در سال ۱۹۷۸ توسط کرنیگان و ریچی باعث رشد روزافزون این زبان در جهان شد.
متاسفانه استفاده گسترده این زبان در انواع کامپیوترها و سخت افزارهای مختلف باعث شد که نسخه های مختلفی از این زبان بوجود آید که با یکدیگر ناسازگار بودند. در سال ۱۹۸۳ انستیتوی ملی استاندارد آمریکا (ANSI) کمیته ای موسوم به X3J11 را را مامور کرد تا یک تعریف فاقد ابهام و مستقل از ماشین را از این زبان تدوین نماید.در سال ۱۹۸۹ این استاندارد تحت عنوان ANSI C به تصویب رسید و سپس در سال ۱۹۹۰، سازمان استانداردهای بین المللی (ISO) نیز این استاندارد را پذیرفت و مستندات مشترک آنها تحت عنوان ANSI/ISO C منتشر گردید.
در سالهای بعد و با ظهور روشهای برنامه نویسی شی گرا نسخه جدیدی از زبان C بنام C++ توسط بیارنه استراوستروپ در اوایل ۱۹۸۰ در آزمایشگاه بل توسعه یافت. در C++ علاوه بر امکانات جدیدی که به زبان C اضافه شده است، خاصیت شی گرایی را نیز به آن اضافه کرده است.
با گسترش شبکه و اینترنت، نیاز به زبانی احساس شد که برنامه های آن بتوانند برروی هر ماشین و هر سیستم عامل دلخواهی اجرا گردد. شرکت سان مایکروسیستمز در سال ۱۹۹۵ میلادی زبان Java را برمبنای C و C++ ایجاد کرد که هم اکنون از آن در سطح وسیعی استفاده می شود و برنامه های نوشته شده به آن برروی هر کامپیوتری که از Java پشتیبانی کند(تقریبا تمام سیستمهای شناخته شده) قابل اجرا می باشد. شرکت مایکروسافت در رقابت با شرکت سان، در سال ۲۰۰۲ زبان جدیدی بنام C# (سی شارپ) را ارائه داد که رقیبی برای Java بشمار می رود.
برنامه نویسی ساخت یافته:
در دهه ۱۹۶۰ میلادی توسعه نرم افزار دچار مشکلات عدیده ای شد. در آن زمان سبک خاصی برای برنامه نویسی وجود نداشت و برنامه ها بدون هیچگونه ساختار خاصی نوشته می شدند. وجود دستور پرش (goto) نیز مشکلات بسیاری را برای فهم و درک برنامه توسط افراد دیگر ایجاد می کرد، چرا که جریان اجرای برنامه مرتبا دچار تغییر جهت شده و دنبال کردن آن دشوار می گردید. لذا نوشتن برنامه ها عملی بسیار زمان بر و پرهزینه شده بود و معمولا اشکال زدایی, اعمال تغییرات و گسترش برنامه ها بسیار مشکل بود. فعالیتهای پژوهشی در این دهه باعث بوجود آمدن سبک جدیدی از برنامه نویسی بنام روش ساختیافته گردید؛ روش منظمی که باعث ایجاد برنامه هایی کاملا واضح و خوانا گردید که اشکال زدایی و خطایابی آنها نیز بسیار ساده تر بود.
اصلی ترین نکته در این روش عدم استفاده از دستور پرش (goto) است. تحقیقات بوهم و ژاکوپینی نشان داد که می توان هر برنامه ای را بدون دستور پرش و فقط با استفاده از ۳ ساختار کنترلی ترتیب، انتخاب و تکرار نوشت.
ساختار ترتیب، همان اجرای دستورات بصورت متوالی (یکی پس از دیگری) است که کلیه زبانهای برنامه نویسی در حالت عادی بهمان صورت عمل می کنند.
ساختار انتخاب به برنامه نویس اجازه می دهد که براساس درستی یا نادرستی یک شرط، تصمیم بگیرد کدام مجموعه از دستورات اجرا شود.
ساختار تکرار نیز به برنامه نویسان اجازه می دهد مجموعه خاصی از دستورات را تا زمانیکه شرط خاصی برقرار باشد، تکرار نماید.
هر برنامه ساختیافته از تعدادی بلوک تشکیل می شود که این بلوکها به ترتیب اجرا می شوند تا برنامه خاتمه یابد(ساختار ترتیب). هر بلوک می تواند یک دستورساده مانند خواندن، نوشتن یا تخصیص مقدار به یک متغیر باشد و یا اینکه شامل دستوراتی باشد که یکی از ۳ ساختار فوق را پیاده سازی کنند. نکته مهم اینجاست که درمورد دستورات داخل هر بلوک نیز همین قوانین برقرار است و این دستورات می توانند از تعدادی بلوک به شرح فوق ایجاد شوند و تشکیل ساختارهایی مانند حلقه های تودرتو را دهند.
نکته مهم اینجاست که طبق قوانین فوق یک حلقه تکرار یا بطور کامل داخل حلقه تکرار دیگر است و یا بطور کامل خارج آن قرار می گیرد و هیچگاه حلقه های روی هم افتاده نخواهیم داشت.
از جمله اولین تلاشها در زمینه ساخت زبانهای برنامه نویسی ساختیافته، زبان پاسکال بود که توسط پروفسور نیکلاس ویرث در سال ۱۹۷۱ برای آموزش برنامه نویسی ساختیافته در محیطهای آموزشی ساخته شد و بسرعت در دانشگاهها رواج یافت. اما بدلیل نداشتن بسیاری از ویژگیهای مورد نیاز مراکز صنعتی و تجاری در بیرون دانشگاهها موفقیتی نیافت.
کمی بعد زبان C ارائه گردید که علاوه بر دارا بودن ویژگیهای برنامه نویسی ساختیافته بدلیل سرعت و کارایی بالا مقبولیتی همه گیر یافت و هم اکنون سالهاست که بعنوان بزرگترین زبان برنامه نویسی دنیا شناخته شده است.
مراحل اجرای یک برنامه C
برای اجرای یک برنامه C ابتدا باید آن را نوشت. برای اینکار می توان از هر ویرایشگر متنی موجود استفاده کرد و سپس فایل حاصل را با پسوند .C ذخیره نمود (فایلهای C++ با پسوند .CPP ذخیره می گردند). به این فایل، کد مبدا (source code) گفته می شود. مرحله بعدی تبدیل کد مبدا به زبان ماشین است که به آن کد مقصد (object code) گفته می شود. همانطورکه قبلا نیز گفته شد برای اینکار از یک برنامه مترجم بنام کامپایلر استفاده می شود. کامپایلرهای متعددی برای زبان C توسط شرکتهای مختلف و برای سیستم عاملهای مختلف نوشته شده است که می توانید برحسب نیاز از هریک از آنها استفاده نمایید. اما هنوز برنامه برای اجرا آماده نیست. معمولا برنامه نویسان از در برنامه های خود از یک سری از کدهای از پیش آماده شده برای انجام عملیات متداول (مانند محاسبه جذر و یا سینوس) استفاده می کنند که برنامه آنها قبلا نوشته و ترجمه شده است. این برنامه ها یا در قالب کتابخانه های استاندارد توسط شرکتهای ارائه کننده نرم افزار عرضه شده است و یا توسط دیگر همکاران برنامه نویس اصلی نوشته و در اختیار وی قرار داده شده است. در این مرحله باید کد مقصد برنامه اصلی با کدهای مربوط به این برنامه های کمکی پیوند زده شود. برای اینکار نیاز به یک پیوند زننده (Linker) داریم و نتیجه این عمل یک فایل قابل اجرا خواهد بود (در ویندوز این فایل پسوند .EXE خواهد داشت). مرحله بعدی اجرای برنامه و دادن ورودیهای لازم به آن و اخذ خروجیها می باشد. در شکل زیر این مراحل نشان داده شده اند.
مسلما طی مراحل بالا برای اجرای هر برنامه زمانبر می باشد، بهمین دلیل اکثر تولید کنندگان کامپایلرها، محیطهایی را برای برنامه نویسی ارائه کرده اند که کلیه مراحل بالا را بطور اتوماتیک انجام می دهند.
به این محیطها IDE (Integrated Development Environment) یا محیط مجتمع توسعه نرم افزار گفته می شود. این محیطها دارای یک ویرایشگر متن می باشند که معمولا دارای خواص جالبی همچون استفاده از رنگهای مختلف برای نشان دادن اجزای مختلف برنامه مانند کلمات کلیدی، و یا قابلیت تکمیل اتوماتیک قسمتهای مختلف برنامه می باشد. پس از نوشتن برنامه و با انتخاب گزینه ای مانند Run کلیه عملیات فوق بطور اتوماتیک انجام شده و برنامه اجرا می گردد. علاوه براین، این محیطها معمولا دارای امکانات اشکالزدایی برنامه (Debug) نیز می باشند که شامل مواردی همچون اجرای خط به خط برنامه و یا دیدن محتویات متغیرها در زمان اجرا است. چند محیط معروف برنامه نویسی عبارتند از :
Borland C++ 3.1 برای محیط DOS
Borland C++ از نسخه ۴ به بالا برای Windows
Microsoft Visual C++ برای محیط Windows
Borland C++ Builder برای محیط Windows
برای شروع ما از محیط Borland C++ 3.1 تحت Dos که نحوه کار ساده تری نسبت به سایرین دارد استفاده می کنیم.
پس از نصب این نرم افزار، برنامه BC.exe را اجرا کنید تا وارد محیط borland c شوید



همانطور که می بینید، این محیط از ۳ قسمت اصلی تشکیل شده است :
- بخش ویرایش برنامه :
بخش آبی رنگ وسط می باشد که در حقیقت یک ویرایشگر است که برنامه در آن تایپ می شود. همانطور که می بینید در این ویرایشگر از رنگهای مختلف برای نشان دادن قسمتهای مختلف برنامه استفاده می شود. مثلا برای کلمات کلیدی از رنگ سفید استفاده شده است.
- بخش منوهای کاری :
این بخش که در قسمت بالا واقع شده است،- حاوی تعدادی منو (گزینه) برای انجام وظایف مختلف است. خلاصه این عملیات عبارتند از :
o منوی File : عملیاتی مانند باز کردن و یا ذخیره یک برنامه
o منوی Edit : عملیات ویرایش مانند حذف،o کپی و یا چسباندن یک قسمت از برنامه
o منوی Search : جستجوی و یا تعویض یک متن در برنامه
o منوی Run : اجرای برنامه بصورت کامل یا دستور به دستور
o منوی Compile : عملیات مربوط به کامپایل و پیوند برنامه
o منوی Debug : عملیات مربوط به اشکالزدایی مانند دیدن مقادیر متغیرها در زمان اجرا
o منوی Project : عملیات مربوط به مدیریت برنامه هایی که شامل چندین فایل مستقل هستند (پروژه)
o منوی Options : عملیات مربوط به تنظیمات سیستم مانند نحوه کامپایل و یا رنگ پیش فرض محیط
o منوی Windows : عملیات مربوط به پنجره های باز فعلی (مربوط به چندین برنامه یا نمایش متغیرها و … )
خطاهای برنامه نویسی
بنظر می رسد خطاها جزء جداناپذیر برنامه ها هستند. بندرت می توان برنامه ای نوشت که در همان بار اول بدرستی و بدون هیچگونه خطایی اجرا شود. اما خطاها از لحاظ تاثیری که بر اجرای برنامه ها می گذارند، متفاوتند. گروهی ممکن است باعث شوند که از همان ابتدا برنامه اصلا کامپایل نشود و گروه دیگر ممکن است پس از گذشت مدتها و در اثر دادن یک ورودی خاص به برنامه، باعث یک خروجی نامناسب و یا یک رفتار دور از انتظار (مانند قفل شدن برنامه) شوند. بطور کلی خطاها به دو دسته تقسیم می شوند:
خطاهای نحوی (خطاهای زمان کامپایل): این خطاها در اثر رعایت نکردن قواعد دستورات زبان C و یا تایپ اشتباه یک دستور بوجود می آیند و در همان ابتدا توسط کامپایلر به برنامه نویس اعلام می گردد. برنامه نویس باید این خطا را رفع کرده و سپس برنامه را مجددا کامپایل نماید. لذا معمولا این قبیل خطاها خطر کمتری را در بردارند.
خطاهای منطقی (خطاهای زمان اجرا): این دسته خطاها در اثر اشتباه برنامه نویس در طراحی الگوریتم درست برای برنامه و یا گاهی در اثر درنظر نگرفتن بعضی شرایط خاص در برنامه ایجاد می شوند. متاسفانه این دسته خطاها در زمان کامپایل اعلام نمی شوند و در زمان اجرای برنامه خود را نشان می دهند. بنابراین، این خود برنامه نویس است که پس از نوشتن برنامه باید آن را تست کرده و خطاهای منطقی آن را پیدا کرده و رفع نماید. متاسفانه ممکن است یک برنامه نویس خطای منطقی برنامه خود را تشخیص ندهد و این خطا پس از مدتها و تحت یک شرایط خاص توسط کاربر برنامه کشف شود. بهمین دلیل این دسته از خطاها خطرناکتر هستند. خود این خطاها به دو دسته تقسیم می گردند:
a. خطاهای مهلک:
در این دسته خطاها کامپیوتر بلافاصله اجرای برنامه را متوقف کرده و خطا را به کاربر گزارش می کند. مثال معروف این خطاها،b. خطای تقسیم بر صفر می باشد.
b. خطاهای غیرمهلک:
در این دسته خطا،d. اجرای برنامه ادامه می یابد ولی برنامه نتایج اشتباه تولید می نماید. بعنوان مثال ممکن است دراثر وجود یک خطای منطقی در یک برنامه حقوق و دستمزد،e. حقوق کارمندان اشتباه محاسبه شود و تا مدتها نیز کسی متوجه این خطا نشود!
با توجه به آنچه گفته شد، در می یابیم که رفع اشکال برنامه ها بخصوص خطاهای منطقی از مهمترین و مشکلترین وظایف یک برنامه نویس بوده و گاهی حتی سخت تر از خود برنامه نویسی است! بهمین دلیل است که بسیاری از شرکتها(همانند مایکروسافت) ابتدا نسخه اولیه نرم افزار خود را در اختیار کاربران قرار می دهند تا اشکالات آن گزارش شده و رفع گردد. بسیار مهم است که در ابتدا سعی کنید برنامه ای بنویسید که حداقل خطاها را داشته باشد، در گام دوم با آزمایش دقیق برنامه خود هرگونه خطای احتمالی را پیدا کنید و در گام سوم بتوانید دلیل بروز خطا را پیدا کرده و آنرا رفع نمایید. هر سه عمل فوق کار سختی بوده و نیاز به تجربه و مهارت دارد.
آخرین نکته اینکه در اصطلاح برنامه نویسی به هر گونه خطا، bug و به رفع خطا debug گفته می شود.

uody
19th April 2011, 12:36 AM
آموزش c (بخش 1) :: مقدمات زبان c



http://www.farinsoft.com/article/img/394.jpg


زبان C در سال ۱۹۷۰ توسط دنیس ریچی طراحی گردید. این زبان تکامل یافته زبان BCPL میباشد که طراح آن مارتین ریچاردز است ،و زبان BCPL از زبان B که طراح آن کن تامپسون می باشد ، نتیجه شده است .




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

جدول (۱) . سطوح زبان های برنامه سازی

زبان C همانند سایر زبانهای میانی با مفاهیم بیت ، بایت و آدرس که از عناصر ابتدایی ماشین هستند سر و کار دارد . یعنی در این زبان می توان محتویات بیت ها و بایت ها را تیز تغییر داد .
برنامه های نوشته شده به زبان C براحتی از ماشینی به ماشین دیگر قابل انتقال می باشند . مثلا” برنامه نوشته شده برای کامپیوتر APPL در کامپیوترهای IBM قابل اجرا است . این خصیصه را قابل حمل بودن (Portability) زبان می گویند .
کلیه زبان های برنامه سازی سطح بالا و میانی دارای نوعهای داده (data types) هستند . هر نوع داده ، مجموعه ای از مقادیر را مشخص می کند که اعمال خاصی روی آنها قابل انجام است . نوع داده ای که در اکثر زبانها وجود دارد عبارتند از :
اعداد صحیح ، کاراکتری و اعداد اعشاری .
C دارای ۵ نوع داده اصلی است که در آن تقریبا” تبدیل هر نوع داده به نوع دیگر امکان پذیر است . مثلا” در یک عبارت می توان نوع کاراکتری را با نوع عددی صحیح و یا اعشاری ترکیب کرد .
زبان C خطای زمان اجرا مثل boundray checking را چک نمی کند . منظور از boundray checking این است که در آرایه ها تجاوز از حدود مشخص شده ، به راحتی امکان پذیر بوده و از نظر کامپایلر با خطایی مواجه نمیشود. این مساله برمیگردد به این که در زبان C آرایه یک اشاره گر (pointer) است . در این راستا ، نوع پارامترها و آرگومان های توابع نیز در گونه های قدیمی C با یکدیگر مطابقت نشده و از نظر کامپایلر با خطا مواجه نمی شد ولی در گونه های جدید C با معرفی الگوی تابع (Function prototype) این مشکل رفع شده است .
C همانند زبان های ALGOL، PASCAL، و… یک زبان ساخت یافته است . یک زبان برنامه سازی ساخت یافته امکانات زیادی ، از جمله استفاده از چند ساختار حلقه سازی مثل while، do-while،و forو را فراهم می کند . در این گونه زبان ها از goto به ندرت استفاده می شود و نوشتن دستورات برنامه در هر ستونی از خط و در هر جای فایل امکان پذیر بوده ، مثل زبان فرترن مقید به ستون های خاصی نیستند. استفاده از زیربرنامه ها و بلاک ها نیز از خصیصه های این نوع زبان ها هستند . ذکر اسامی چند زبان ساخت یافته و غیر ساخت یافته ، در انتخاب زبان برنامه سازی جهت برنامه نویسی مفید است . ( جدول (۲) ) .

جدول (۲) . بعضی از زبانهای ساخت یافته و غیرساخت یافته

هر برنامه در زبان C دارای خصیصه هایی است که بعضی از آنها عبارتند از :
۱-در زبان C هر دستور برنامه به یک ; ختم می شود .
۲-هر دستور میتواند درچند خط ادامه داشته و یک خط ممکن است شامل چند دستورباشد .
۳-حداکثر طول یک خط برنامه ۲۵۴ کاراکتر است .
۴-در زبان C برنامه نویس می تواند در هر نقطه از برنامه ، بااستفاده از علائم {و }و یک بلاک را مشخص کرده و هر متغیری را که می خواهد در آنجا تعریف نماید .
این متغیرها فقط در آن بلاک معنی خواهند داشت . توجه داریم که هر بلاک مجموعه ای از دستورات وابسته به یکدیگر خواهد بود :



۵-برای داشتن توضیحات در برنامه کافی است آنها را دربین /*و */ قرار داد:

*/ توضیحات /*

یک زبان ساخت یافته بلاکی نیست . این بدان معنی است که تعریف یک زیربرنامه ( در اینجا تابع ) در زیربرنامه دیگر ( همانند پاسکال ) امکان پذیر نیست و این امر از مساله coupling می کاهد .
Cزبان برنامه نویسی سیستم است . منظور از برنامه های سیستم عبارتند از :
-1سیستم عامل (Operating system)
-2مفسر (Interpreter)
-3ویراستار (Editor)
-4اسمبلر (Assrmbler)
-5کامپایلر (Compiler)
-6مدیریت بانکهای اطلاعاتی (Database management)

امروزه C در اکثر امور برنامه نویسی مورد استفاده قرار می گیرد . زیرا این زبان هم دارای خصیصه ” قابل حمل بودن ” است و هم دارای کارآیی خوبی می باشد و سرعت زیاد C بر محبوبیت آن افزوده است . مساله قابل حمل بودن ، یک مساله بسیار مهم است زیرا هم موجب صرفه جویی در وقت شده و هم باعث صرفه جویی در هزینه ها می گردد .
زبان C فقط دارای ۳۲ کلمه کلیدی است ( جدول (۳) ) که ۲۷ کلمه کلیدی آن توسط ریچی ( طراح زبان ) معرفی شده و ۵ کلمه کلیدی دیگر توسط موسسه استاندارد سازی زبان به آن اضافه شده است . این تعداد در مقایسه با ۱۵۹ کلمه کلیدی که در زبان بیسیک وجود دارد قابل توجه است .


http://www.farinsoft.com/article/img/394-1.gif

اضافه شدن توسط موسسه استاندارد سازی زبان
جدول (۳) . کلمات کلیدی زبان C

بعضی از کامپایلرها علاوه بر ۳۲ کلمه کلیدی جدول (۳) کلمات کلیدی دیگری به زبان اضافه نموده اند . ( جدول (۴) ) .



http://www.farinsoft.com/article/img/394-2.gif
جدول (۴) . کلمات کلیدی زبان C که بعضی از کامپایلرها اضافه کرده اند



کلیه کلمات کلیدی در زبان C به حروف کوچک نوشته می شوند . چون در این زبان بین حروف کوچک و بزرگ تفاوت است ، به عنوان مثال کلمه else یک کلمه کلیدی است.




{
;مجموعه دستورات بلاک
{

uody
19th April 2011, 12:39 AM
آموزش C (بخش 2) :: انواع داده

همان طور که قبلا” گفته شد در هر زبان برنامه سازی تعدادی از نوع های داده وجود دارند که بازه ای را شامل بوده و اعمال خاصی روی آنها انجام پذیر است و در C پنج نوع داده اصلی وجود دارد که عبارتند از : char، int،، float،، double، و void .





در این زبان اندازه و محدوده ای که هر نوع داده اختیار می کند بستگی به نوع پردازشگر (Processor) و نحوه پیاده سازی کامپایلر دارد. شناسه هایی ( متغیر برچسب ، اسامی توابع و … ) که از نوع char باشند برای ذخیره کردن مقادیری که توسط کاراکترهای اسکی تعریف شده اند به کار می روند. شناسه هایی از نوع int برای ذخیره کردن مقادیر صحیح ، و از نوع floatو doubleو برای ذخیره کردن اطلاعات عددی اعشاری به کار میروند که محدوده آنها توسط تعداد ارقام و دقت آنها مشخص میشود. نوع void در مورد توابع به کار می رود .
نوعهای داده اصلی ( به جز void ) می توانند با عباراتی مثل signed، long، unsigned و short و ترکیب شده و نوع های دیگری را به وجود آورند . ( جدول (۱) ).


http://www.farinsoft.com/article/img/396-1.jpg

uody
19th April 2011, 12:41 AM
آموزش C (بخش 3) :: متغیرها در زبان C

متغیر، نامی برای یک محل حافظه است که محتویات آن در طول اجرای برنامه ممکن است تغییر کند . اسم هر متغیر شامل حروف
aتا zا ، Aتا Zا ، ارقام ۰تا ۹ا و خط ربط(آندرلاین) است . به طوری که با یکی از حروف و یا خط ربط شروع شده باشند . طول نام هر
متغیر بستگی به نوع کامپایلر دارد که معمولا” از ۱ز تا ۳۱ کاراکتر قابل استفاده است .




اسامی مجاز برای متغیرها | اسامی غیرمجاز برای متغیرها |






| ۱count | count |
| high! there | test123 |
| grad.1 | high |






تعریف نوع متغیر
برای استفاده از متغیرها درC باید ابتدا آنها را تعریف کنیم . تعریف متغیرها شامل نامگذاری و تعیین نوع آنها است که به صورت زیر انجام می شود :
<نوع> <اسامی متغیرها>
برای تعریف چند متغیر در یک دستور باید اسامی با کاما از یکدیگر جدا گردد :


int var1, var2 ;


دستور فوق دو متغیر به اسامی var2و var1 را از نوع int تعریف می کند .

float flovar1, flovar2 ;


دستور فوق ، دو متغیر به نام های flovar2و flovar1و را از نوع float تعریف می کند .

double d1 ;
char ch ;


اولین دستور ، d1 را از نوع double و دستور دوم متغیر ch را از نوع char تعریف می کند .

مقدار دادن به متغیرها

برای مقدار دادن به متغیرها می توان به دو طریق عمل کرد:
۱ به هنگام تعریف متغیر .
۲ پس از تعریف متغیر .
به عنوان مثال :


http://www.farinsoft.com/article/img/398-1.gif

دستور اول ضمن تعریف a از نوع int مقدار آن را برابر با ۰ قرار می دهد . دستور دوم چهار متغیرb، c،، d،و eو را از نوع int تعریف کرده وفقط مقدار متغیر ch را از نوع کاراکتری تعریف کرده و مقدار آن را برابر با حرف a قرار می دهد . دستور چهارم مقدار متغیر b را برابر با ۰ قرار می دهد . دستور پنجم مقدار دو متغیر cو dو را برابر صفر قرار می دهد و این دستور ، انتساب چندتایی را مشخص می کند .
همان طور که قبلا”گفته شد مقدار متغیرها ممکن است در طول اجرای برنامه تغییر کند . با استفاده از کلمه کلیدی const می توانیم متغیرهایی را تعریف کنیم که مقدار آنها در طول اجرای برنامه ثابت باشد . برای تعریف این نوع متغیرها بصورت زیر عمل می شود :

<نوع> <اسامی متغیرها>const

نوع ، یکی از نوع هایی است که قبلا” ذکر شده و اسامی متغیرها ، مشخص کننده متغیرهایی است که باید به صورت ثابت تعریف شوند :

const int a = 10 , b = 20 ;


دستور فوق دو متغیر aو bو را از نوع int تعریف کرده و مقادیر آنها را برابر می دهد . این مقادیر در طول اجرای برنامه قابل تغییر هستند .

uody
19th April 2011, 12:44 AM
آموزش C (بخش 4) :: عملگرها


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




عملگرهای محاسباتی:
عملگرهای محاسباتی که در C مورد استفاده قرار می گیرند در جدول (۱) فهرستشده اند .

ردیف | عملگر | نام | مثال |






۱ | - | تفریق و منهای یکانی | x-y






2 | + | جمع | x+y






3 | * | ضرب | x*y






4 | / | تقسیم | x/y






5 | % | باقیمانده تقسیم | x%y






6 | - - | کاهش یک واحد * | - -x یا x






۷ | ++ | افزایش یک واحد * | x+ + یا | + +xا






* decrement ** increment

جدول (۱) . عملگرهای محاسباتی

عملگرهای ردیف ۱تا ۴ در جدول (۱) تقریبا” در همه زبانهای برنامه سازی وجود دارند. عملگر % که در بقیه زبانها با علامت دیگری ( مثلا” در بیسیک به صورت MOD) وجود دارد باقیمانده تقسیم دو عدد را محاسبه می کند :




اگر سه دستور فوق را توسط ماشین اجرا کنیم مقدار۳ که باقیمانده تقسیم ۱۳ بر ۵ است در z قرار می گیرد .

عملگر کاهش ، یک واحد از عملوند مربوط کم می کند .


x= 10 ;
- - x ;


دستور x - - از x یک واحد کم می کند و نتیجه را در x قرار می دهد که معادل دستور x = x-1 است .

عملگر افزایش ، یک واحد به عملوند مربوطه اضافه می کند :


x= 40 ;
x ++ ;


دستور ++x معادل دستور x = x + 1 است که موجب افزودن یک واحد به x می شود .
عملگرهای افزایش و کاهش یک واحد را می توان بعداز عملوند مربوطه نیز به کار برد مثل : x + + و - - x .
اگر در یک عبارت از عملگرهای افزایش و کاهش یک واحد ، استفاده کنیم به کار بردن این عملگرها در قبل و بعد از عملوند مربوطه ، با یکدیگر متفاوت است . بدین معنی که اگر این عملگرها قبل از عملوند باشند مقدار فعلی عملوند مورد استفاده قرار گرفته و سپس عملگرها بر روی آن عمل میکنند، ولی اگر بعد از عملوند مربوطه باشند پس از انجام عمل افزایش و کاهش یک واحد به آنها مقادیر جدید ، در عبارت مورد استفاده قرار می گیرند. استفاده ازعملگرهای افزایش و کاهش یک واحد ، سرعت محاسباتی را بالا می برد .
اگر در یک عبارت از چند عملگر محاسباتی استفاده شود ، مساله تقدم عملگرها مطرح می شود . ( جدول (۲) ) .

بالاترین تقدم - - | + + |
تفریق یکانی - | | * / % |
پایین ترین تقدم - | +





جدول (۲) . تقدم عملگرهای محاسباتی

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

عملگرهای رابطه ای :
عملگرهای رابطه ای برای تشخیص ارتباط بین عملوندها یا مقایسه آنها مورد استفاده قرار می گیرند ( جدول (۳) ) .

نکته قابل ذک درمورد عملگرهای رابطه ای این است که عملگر== برای تشخیص مساوی بودن دو عبارت مورد استفاده قرار می گیرد. این عملگر با عملگر= که برای انتساب یک عبارت به یک متغیر استفاده می شود متفاوت است .

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

ارزش نادرستی درزبان C با مقدار صفر و ارزش درستی با مقادیر غیراز صفر مشخص میشود. عملگر منطقی ! دارای بالاترین تقدم و عملگر || دارای کمترین تقدم در بین عملگرهای منطقی هستند . چون عملگرهای منطقی رابطه نزدیکی با عملگرهای رابطه ای
دارند می توان تقدم آنها را نسبت به یکدیگر بیان کرد ( جدول (۵) ) .

بالاترین تقدم: | ! |
> >= < <= |
| == != |
| && |
|
پایین ترین تقدم : ||





جدول (۵) . تقدم عملگرهای منطقی و رابطه ای

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

عملگر | نام | مثال |





+= | + انتساب جمع | x+=y |





= | انتساب تفریق | x-=y |





*= | * انتساب ضرب | x*=y |





/= | / انتساب تقسیم | x/=y |





%= | % انتساب باقیمانده تقسیم | x%=y |





جدول (۶) . عملگرهای محاسباتی و رابطه ای



در جدول (۶) ، عبارت x + = y معادل با x = x + y است .

int a=10 ;
int b=20 ;
a+= b ;


با اجرای دستورات فوق متغیر a برابر۳۰ خواهد بود. زیرا دستور a + = b معادل دستور a = a + b است .

uody
19th April 2011, 12:51 AM
آموزش C (بخش 5) :: تبدیل انواع متغیرها

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




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

int x ;
char ch;
float f ;
ch= x ;
x= f ;
f= ch ;
f= x ;


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

نوع منبع | نوع مقصد | اطلاعاتی که ممکن است از بین برود |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
| signed char | char اگر مقدار بزرگتر از۱۲۷باشد مقصد منفی خواهد شد |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
| short 8 | char بیت با ارزش |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
| int 8 | char بیت با ارزش |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
| long int | char۲۴بیت با ارزش |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
| long int | int۱۶بیت با ارزش |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
| float | int قسمت کسری یا بیشتر و نتیجه حاصل گرد می شود |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
| double | float قسمت کسری و یا بیشتر و نتیجه حاصل گرد می شود |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
جدول (۱) . تبدیل انواع
دو نکته را باید در مورد تبدیل انواع ( جدول (۱) ) به خاطر داشته باشیم :
۱ بعضی از تبدیل انواع در جدول فوق وجود ندارد مثل doubleبه int . در این موارد می توان double را به float تبدیل کرده و سپس float را به int تبدیل نمود.
۲ وقتی نوع بزرگتری به نوع کوچکتری انتساب داده می شود . قسمتی از اطلاعات از دست می روند . همان طور که می دانیم ، معمولا” اعداد صحیح (int) در ۲ بایت و اطلاعات از نوع char در یک بابت ذخیره می شوند .
وقتی یک متغیر int به یک متغیر char انتساب داده می شود بایت کم ارزش متغیر از نوع int به متغیر char منتقل شده ولی با ارزش متغیر int در متغیر char جایی میگوییم در انتساب متغیرintبه char ، ۸، بیت با ارزش از دست میرود.

uody
19th April 2011, 12:55 AM
آموزش C (بخش 6) :: تابع (Printf)


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



http://www.farinsoft.com/article/img/404-1.gif


عبارت ” ۱ شامل تعدادی کاراکترهای کنترلی ، کاراکترهای قالب جهت تعیین شکل خروجی و رشته های دیگری است که باید به خروجی منتقل شوند . ” عبارت دیگر ” شامل اطلاعاتی هستند که با فرمت مشخص شده در ” عبارت ” ۱، باید به خروجی منتقل شوند.
کاراکترهایی که برای تعیین فرمت خروجی مورد استفاده قرار می گیرند با کاراکتر % شروع می شوند ( جدول ۱ ) .


نوع اطلاعات که باید به خروجی منتقل شود |کاراکتر |
%C یک کاراکتر
%d اعداد صحیح دهدهی مثبت و منفی
%i اعداد صحیح دهدهی مثبت و منفی
%e نمایش علمی عدد همراه با حرف e
%E نمایش علمی عدد همراه با حرف E
%f عدد اعشاری ممیز شناور
%g اعداد اعشاری ممیز شناور
%G اعداد اعشاری ممیز شناور
%O اعداد مبنای ۸ مثبت
%S رشته ای از کاراکترها ( عبارت رشته ای )
%U اعداد صحیح بدون علامت ( مثبت )
%x اعداد مبنای ۱۶ مثبت با حروف کوچک
%X اعداد مبنای ۱۶ مثبت با حروف بزرگ
%p pointer ( اشاره گر )
%n موجب میشود تا تعداد کاراکترهایی که تا قبل
ازاین کاراکتر به خروجی منتقل شده اند شمارش
شده و در پارامتر متناظر با آن قرار گیرد .

جدول (۱) . کاراکترهای فرمت در تابع ()printf
کاراکترهای کنترلی که در تابع ()printf بکار میروند در جدول (۲) آمده است . بعضی از کاراکترهای کنترلی برای انتقال خروجی به یک محل معین از صفحه نمایش مورد استفاده قرار می گیرند .

عملی که انجام می شود | کاراکتر|


f موجب انتقال کنترل به صفحه جدید می شود |
n موجب انتقال کنترل به خط جدید می شود |
t انتقال به ۸ محل بعدی صفحه نمایش |
چاپ کوتیشن (”)| "
چاپ کوتیشن (’)| '
V انتقال کنترل به ۸ سطر بعدی |
N ثابت های مبنای ۸|
xN ثابت های مبنای ۱۶|


جدول (۲) . کاراکترهای کنترلی


چند دستور متوالی که شامل تابع ()print باشند ، خروجی خود را بر روی یک سطر منتقل یم کنند . مگر این که با پارامتر کنترلی n کنترل را به سطر بعدی منتقل کنیم .

مثال ۱:


Main()
{
printf(" i like %c ",'c' );
printf("%s","very much." );
}


خروجی حاصل از اجرای برنامه فوق بصورت ذیل خواهد بود

i like c very much.
با استفاده ازn می توانیم خروجی را در چند سطر داشته باشیم .
Main()
{
printf(”this is second program.n” );
printf(”output is in two line.” );
}
خروجی حاصل از اجرای برنامه فوق بصورت ذیل است
this is second program.
output is in two line.


مثال ۲:
Main()
{
int num ;
printf(”the address of num is:” );
printf(” %p”/ &num );
}

در مثال فوق عبارت &num آدرس متغیر num را مشخص می کند که برای نوشتن آن ازکاراکتر فرمت p% استفاده شده است . نمونه ای از خروجی مثال ۲ بصورت زیر است .
the address of num is : 6A30:OFE4
اگر در تابع ()printf چند کاراکتر فرمت داشته باشیم ، هر کاراکتر با یک عنصر داده که باید به خروجی برود تطبیق داده می شود :

Main()
{
int a=10 ;
float b=20 ;
printf(” a is:%d/b is :%f”/a/b);
}
خروجی حاصل از اجرای برنامه فوق بصورت ذیل است:

a is:10/b is:20:000000
مثال ۳


Main()
{
unsigned int num ;
num=100 ;
printf(”the value of num is:%u”/num);
}
the value of num is:100
مثال ۴:


Main()
{
double d ;
d=le+007 ;
printf(”the value of d is:%en”/d);
printf(”the value of d is:%En”/d);
printf(”the value of d is:%gn”/d);
}
خروجی حاصل از اجرای برنامه مثال ۴ بصورت ذیل خواهد بود

the value of d is:1.00000e+07
the value of d is:1.00000E+07
the value of d is:1e+07
همانطور که مشاهده می شود برای چاپ اعدادی که بصورت نماد علمی باشند میتواناز کاراکترهای فرمت %e ، % Eو g% استفاده کرد .
مثال ۵:


Main()
{
float f=12.50 ;
int t=10 ;
printf(”n f is:%f”,f );
printf(” tenper is:%%%d”,t );
}
خروجی حاصل از اجرای برنامه فوق بصورت زیر است
f is:12.500000/tenper is:%10
در مثال ۵ برای چاپ علامت % از کاراکتر %% و برای چاپ متغیر f از نوع float می باشد از f% استفاده شده است. کاراکتر فرمت n% از سایر کاراکترهای فرمت متفاوت است . این کاراکتر بجایانتقال مقادیری به خروجی ، موجب می شود تا تعداد کارکترهایی که تا قبل از اینکاراکتر به خروجی منتقل شده اند ، شمارش شده و در پارامتر متناظر با آن قراربگیرد .

همانطوری که در مثال ۳ مشاهده می شود ، برای چاپ عدد num که بصورت عدد صحیحبدون علامت تعریف شد ، از u%استفاده شده است .

منبع:iran-forum

استفاده از تمامی مطالب سایت تنها با ذکر منبع آن به نام سایت علمی نخبگان جوان و ذکر آدرس سایت مجاز است

استفاده از نام و برند نخبگان جوان به هر نحو توسط سایر سایت ها ممنوع بوده و پیگرد قانونی دارد