سی (زبان برنامه‌نویسی): تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
Rezabot (بحث | مشارکت‌ها)
جز ربات: افزودن رده از مقاله همسنگ در ویکی‌انگلیسی
Ryanblack993 (بحث | مشارکت‌ها)
بدون خلاصۀ ویرایش
خط ۱:
{{دیگر کاربردها|سی}}
{{بهبود منبع}}
'''زبان برنامه‌نویسی سی''' به سخت افزار یا سیستم عامل خاصی وابسته نیست . این زبان خصوصیات و اجزا زبان های برنامه نویسی پیشرفته را همراه با کارآیی بالای زبان اسمبلی دربردارد و گاهی آن را یک زبان نیمه پیشرفته می دانند . </br>
C به گونه ای است که تطبیق نرم افزار از یک نوع کامپیوتر به نوع دیگر را آسان می کند. </br>
امروزه برنامه ریزی ریزکنترل ها و انواع [[سی‌پی‌یو|سی‌پی‌یوها]] و همچنین تولید سیستم عامل های جدید و نرم افزارهای کاربردی از طریق زبان C صورت می گیرد .
 
 
'''زبان برنامه‌نویسی سی'''، زبانی همه منظوره، ساخت یافته و روندگرا می‌باشد که در سال ۱۹۷۲ توسط [[دنیس ریچی]] در [[آزمایشگاه بل]] ساخته شد.<ref>{{یادکرد|فصل=|کتاب=|ناشر= |چاپ= |شهر= |کوشش= |ویرایش= Living Internet |سال=|شابک=|نویسنده=Stewart, {{چر}}Bill |نویسندگان سایر بخش‌ها=|ترجمه=|صفحه= |زبان=en |مقاله= [http://www.livinginternet.com/i/iw_unix_c.htm History of the C Programming Language] |ژورنال= |نشریه= |تاریخ=2000-01-07 |دوره= |شماره= |شاپا=}} Retrieved on 2006-10-31. </ref>
== تاریخچه زبان C ==
زبان C در سال 1972 توسط Dennis Ritchie در آزمایشگاه های Bell ساخته شد (بعدها این آزمایشگاه ها به AT&T Labs تبدیل شد) . سیستم عامل Unix هم قبلا در همان Bell Labs توسط زبان B نوشته شده بود.
C که از زبان B حاصل شده است، به منظور پیاده سازی سیستم عامل Unix روی یک کامپیوتر PDP-11 ارائه شد .Ritchie زبان B را گسترش داد و یک سری امکانات از جمله نوع دار کردن داده ها را به آن اضافه نمود و زبان حاصل را C نامید .
البته زبان B که توسط Ken Thompson در سال 1970 ساخته شده بود نیز از زبان BCPL حاصل شده که آن را Martin Ritchard ارائه داده بود. پس از آن که Ritchie و همکارش Kernighan در سال 1978 کتابی جهت آشنایی عموم با این زبان منتشر نمودند، توجه گسترده ی برنامه نویسان به آن جلب شد . به گونه ای که نسخه های مختلفی از آن روی کامپیوترهای مختلف به وجود آمد . همین امر موجب شد در سال 1983 انستیتوی استانداردهای ملی آمریکا (ANSI) کمیته ای برای استاندارد کردن این زبان تشکیل دهد . بالاخره در سال 1989 استاندارد آن تثبیت شد .
 
== ویژگی‌ها ==
زبان برنامه نویسی C :
* تاثير گذارترين زبان برنامه نويسي در دنیای كامپيوتر است.
* یک زبان برنامه نویسی سطح میانی است.
* یک زبان ساخت یافته‌ و قابل حمل است.
* دارای سرعت، قدرت و انعطاف پذیری بالایی است و هیچ محدودیتی را برای برنامه نویس به وجود نمی آورد.
* زبان برنامه نویسی [[سیستم]] است.
* زبان کوچکی است و تعداد کلمات کلیدی آن انگشت شمار است.
* نسبت به حروف حساس است و تمام کلمات کلیدی این زبان با حروف کوچک نوشته می‌شوند.
* در محیط‌های توسعه دهنده مجتمع (Integrated Development Envoirements) صورت می‌گیرد.
 
 
BCPL و B، زبان‌های ''بدون نوع داده‌ای'' هستند. اما در مقابل آن، در زبان C انواع مختلفی از نوع‌های داده‌ای تدارک دیده شده‌است. نوع‌های اصلی و پایه‌ای انواع کارکتری و اعشاری اعداد با اندازه‌های مختلف هستند. علاوه بر این، سلسله مراتبی از انواع داده‌ای فرعی در زبان C وجود دارد که می‌توان آن‌ها را به همراه [[اشاره‌گر|اشاره‌گرها]] (Pointers)، [[آرایه (رایانه)|آرایه]]، [[ساختارها|ساختار]] (Structuers) و Unionها ایجاد کرد.
 
عبارت‌ها، از عملگرها و عملوندها ساخته می‌شوند. هر عبارت از جمله، یک جایگزینی یا احضار یک تابع می‌تواند یک دستور باشد. اشاره گرها برای محاسبات روی آدرس‌ها، که مستقل از ماشین هستند در نظر گرفته شده‌اند.
 
C، یک زبان نسبتاً ''سطح پایین'' به‌شمار می‌آید، این یک توصیف تحقیرآمیز نبوده، و صرفاً به این معنی است که C با همین نوع از اشیائی سروکار دارد که بیشتر کامپیوترها با آن سروکار دارند، نظیر کارکترها، اعداد و آدرس‌ها.
این اشیا را می‌توان با هم ترکیب کرد و می‌توان روی آنها همان عملیات محاسباتی و منطقی را انجام داد که توسط یک کامپیوتر حقیقی پیاده سازی کرد.
 
سیستم‌عامل [[سیمبیان]] (symbian) با زبان C نوشته شده و بهمین دلیل این زبان به‌عنوان زبان اولیه برای برنامه نویسی در آن انتخاب شده‌است.C بیشترین امکان دسترسی به APIهای سیستم‌عامل سیمبیان را فراهم می‌کند و بهترین کارکرد در حافظه و سرعت اجرا را داراست.
برای مثال این زبان قدرتمند را می‌توان در زمینه‌های زیر بکار گرفت:
* برنامه‌هایی که مانند سرور عمل می‌کنند. برای نمونه برنامه‌هایی که در پشت صحنه کار می‌کنند و یکی از بخش‌های سیستم- به عنوان مثال [[درگاه]]‌های COM - را مدیریت می‌کنند.
* PLUG inها که محیطی را بر پایه سیستم‌عامل ایجاد می‌کنند. بطور مثال برنامه‌ای که فایل‌های html را به فایل‌های word سیمبیان تبدیل می‌کند از کتابخانه مبدل سیستم‌عامل استفاده می‌کند.
* درایورهای دستگاه که با Kernel کار متعامل می‌کنند و...
 
استفاده از زبان C در سیستم‌عامل سیمبیان بر روی مناسب بودن کارکرد گوشی‌ها متمرکز شده‌است، که بدین معناست که چند تا از عملگرهای استاندارد زبان C مانند مدیریت [[استثنا (برنامه‌نویسی)|استثناها]] قابل استفاده در برنامه نویسی سیمبیان نیستند.
 
== ورودی و خروجی ==
* به خواندن داده ها از طریق دستگاه‌های ورودی، ورود اطلاعات به کامپیوتر می‌گویند.
* زبان C شامل توابع متنوعی جهت خواندن داده ها است.
* کاراکترها و اعدادی که توسط کاربر تایپ می‌شوند، داده های ورودی برنامه ها را تشکیل می‌دهند.
* نمایش اطلاعات به کاربر توسط کامپیوتر را خروجی می‌نامند.
* زبان C به کمک دستورهای خروجی امکان نمایش اطلاعات به روی کامپیوتر و چاپگر را فراهم می‌کند.
 
=== دستورهای خروجي ===
برای نوشتن یک متن ساده به روی مانتیور از شکل کلی روبرو استفاده می‌گردد: printf(" ---- "); 1
</br>
به عنوان مثال جهت چاپ متن "Hello World" از دستور روبرو استفاده می‌گردد : printf("Hello World"); 2
 
 
== مدیریت حافظه ==
یکی از مهمترین توابع زبان‌های برنامه نویسی فراهم آوردن ابزاری جهت ادارهٔ حافظه و اشیا ذخیره شده در حافظه می‌باشد. سی دو راه اصلی برای تخصیص حافظه به اشیا را فراهم می‌کند.
* تخصیص حافظه به صورت اتوماتیک: اشیا موقتی می‌توانند بر روی پشته ذخیره شوند، این فضای اختصاص داده شده به اشیا به صورت اتوماتیک پس از خارج شدن از بلاکی که اشیا در آنها تعریف شده‌اند، آزاد و مجددا قابل استفاده خواهد بود.
* تخصیص حافظه به صورت دینامیک : اندازه‌های اختیاری از بلاک‌های حافظه می‌توانند توسط توابع کتابخانه‌ای همانند تابع malloc از ناحیه‌ای از رم موسوم به هیپ در هنگام اجرای برنامه درخواست بشود. این بلاک‌های حافظه تا زمانیکه متعاقبا توسط تابع free به سیستم باز گردانده نشوند در حافظه باقی می‌مانند. برای تخصیص حافظه به صورت پویا(دینامیک) باید آدرس بلوک حافظه‌ای که توسط تابع malloc گرفته می‌شود را در یک اشاره گر ذخیره کنیم.
 
==کلمات کلیدی==
{{چپ‌چین}}
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
{{پایان چپ‌چین}}
 
==تابع:==
 
برنامه ای است که برای حل بخشی از مسئله نوشته می شود.
 
با استفاده از توابع می توان برنامه های ساخت یافته نوشت که وظایف این نوع برنامه ها توسط بخش های مستقلی که تشکیل دهنده برنامه اند انجام می شود. این بخش های مستقل همان توابع هستند.
 
'''امتیازهای برنامه نویسی ساخت یافته عبارتند از:'''
 
1.نوشتن برنامه های ساخت یافته آسان است، زیرا برنامه های پیچیده به بخش های کوچک تری تقسیم می شوند و هر بخش توسط تابعی نوشته می شود. دستورالعمل ها و داده های موجود در تابع، مستقل از سایر بخش های برنامه است.
 
2.همکاری بین افراد را فراهم می کند.به طوری که افراد می توانند بخش های مختلفی از برنامه را بنویسند.
 
3.اشکال زدایی برنامه های ساخت یافته ساده تر است.اگر برنامه اشکالی داشته باشد، بررسی تابعی که این اشکال در آن به وجود آمده ساده است.
 
4.برنامه نویسی ساخت یافته موجب صرفه جویی در وقت می شود.
 
'''توابع کتابخانه ای'''
 
C دارای توابعی است که از قبل نوشته شده اند، و توابع کتابخانه ای نامیده می شوند .در واقع فرایند هایی که پر کاربرد هستند و در اغلب برنامه ها مورد استفاده قرار می گیرند به صورت توابع مستقل قبلاً نوشته شده اند.
 
'''نوشتن توابع'''
 
برای نوشتن تابع باید اهداف مشخص باشد.
 
هر تابع سه بخش دارد:فراخوانی، الگوی تابع، تعریف تابع
 
تعریف تابع مجموعه ای از دستورهاست که عملکرد تابع را مشخص می کند.
 
فراخوانی تابع دستوری است که تابع را فراخوانی می کند که با نام تابع انجام می شود.
 
<نوع تابع>یکی از چیزهایی است که توسط کاربر تعریف می شود.
 
'''نکات مهم در استفاده از توابع'''
 
1.الگوی تمام توابع را قبل از تابع ()main اعلان کنید.(البته می توانید در خود تابع ()main نیز اعلان کنید.)
 
2.نوع توابع را تعیین نمایید.
 
3.برای اجرای توابع آنها را با نامشان فراخوانی کنید.
 
4.متغیرهای مورد نیاز توابع را در داخل توابع تعریف کنید.
 
5.تعریف تابع در داخل تابع دیگر امکان پذیر نیست.
 
6.هنگام فراخوانی تابع دقت داشته باشید که تعداد و نوع پارامترها وآرگومان ها یکسان باشد.
 
7.توابع از نظر تعداد مقادیری که می توانند به تابع فراخوان برگردانند به سه دسته تقسیم می شوند 1.توابعی که هیچ مقداری برنمی گردانند 2.توابعی که یک مقدار برمی گردانند3.توابعی که چندین مقدار برمی گردانند.
 
8. هنگام اعلان الگوی توابع، نیاز به ذکر اسامی پارامترها نیست و ذکر نوع آن ها کفایت می کند.
 
9.اگر تابعی فاقد آرگومان است به جای لیست آرگومان ها کلمه void قرار دهید.
 
'''نکاتی درباره نوشتن توابع'''
 
1.ابتدا بدون پرداختن به جزئیات پیاده سازی توابع، آرگومان ها و نتیجه ای که از توابع انتظار دارید، مشخص کرده و برنامه اصلی را بنویسید.
 
2.توابع را طوری طراحی وپیاده سازی کنید که هر تابع فقط به آنچه که نیاز دارد دسترسی داشته باشد و بقیه قسمت های برنامه و سایر اطلاعات توسط توابع غیر مرتبط قابل دستیابی نباشد.
 
3.برای ارتباط بین توابع از آرگومان ها و پارامترها استفاده کنید.
 
==مثال ها==
 
1.تابعی بنویسید که درجه فارنهایت را به سانتیگراد تبدیل کند؟
 
2.تابعی بنویسید که مقدار صحیح و غیر منفی k را دریافت کرده وk! را محاسبه و ارسال نماید.
 
3.تابعی بنویسید که سه مقدار صحیح را دریافت کند و کوچک ترین آن ها را پیدا نموده و ارسال کند.
 
4.تابعی بنویسید که یک مقدار صحیح و یک مقدار اعشار ساده را دریافت کند وچنانچه اختلاف دو عدد کمتر از 0.0001باشد حرف t و در غیر این صورت حرف fرا بازگرداند.
 
5.تابعی بنویسید که یک عدد صحیح دریافت کند و اول بودن یا نبودن آن را مشخص کند و در صورت اول بودن 1 و در غیر این صورت 0 را ارسال کند.
 
6.برنامه ای بنویسید که هریک از اعداد1 تا 10 را همراه با فاکتوریل آن ها مقابل هم چاپ کند.
 
7.برنامه ای بنویسید که سه مقدار صحیح را خوانده و حداقل آن ها را چاپ کند.(با استفاده از تابع)
 
8.تابعی بنویسید که مقدار π را از فرمول (...+7/1-5/1+3/1-1)4=π تا زمانی که آخرین عبارت از0.0001 بیشتر است بدست آورده و ارسال کند.
 
9.برنامه ای نویسید که با استفاده از تابع مثال قبل مقدار عدد π را چاپ کند.
 
10.تابعی بنویسید که مقدار عدد π را از فرمول (...+7/1-5/1+3/1-1)4=π تا n جمله به دست آورده و چاپ کند.
 
11.برنامه ای بنویسید که ابتدا سری اعداد فیبوناتچی را تا جمله دوازدهم چاپ کرده و سپس یک عدد از ورودی بخواند و جزء سری بودن یا نبودن آن را بررسی و اعلام کند.(با استفاده از دو تابع)
 
12.برنامه ای بنویسید که معکوس 123 را چاپ کند.
 
13.برنامه ای بنویسید که متنی را دریافت کند و تمام حروف a را که در متن وجود دارد را به A تبدیل کند و متن را دوباره چاپ کند.
 
14.برنامه ای بنویسید که دو ماتریس را از کاربر بگیرد سپس آن ها را در هم ضرب کرده و نمایش دهد.
 
==متغیرها==
 
'''متغیرهای محلی (local) :'''
 
متغیرهایی که در بدنه تابع معرفی می شوند، متغیرهای محلی هستند که فقط در همان تابعی که معرفی شده اند قابل استفاده هستند. پارامترهای تابع نیز که در عنوان تابع معرفی شده اند متغیرهای محلی هستند.
'''متغیرهای سراسری (global):'''
== پیشینه ==
برای بررسی تاریخچه زبان C باید به سال ۱۹۶۷ بازگردیم که [[مارتین ریچاردز]] زبان BCPL را برای نوشتن نرم‌افزارهای سیستم‌عامل و کامپایلر در دانشگاه کمبریج ابداع کرد. سپس در سال ۱۹۷۰ کن تامپسون [[زبان B]] را بر مبنای ویژگی‌های [[زبان]] BCPL نوشت و از آن برای ایجاد اولین نسخه‌های سیستم‌عامل [[یونیکس]] در [[آزمایشگاه‌های بل]] استفاده کرد. زبان C در سال ۱۹۷۲ توسط [[دنیس ریچی]] از روی زبان B و BCPL در آزمایشگاه بل ساخته شد و ویژگی‌های جدیدی همچون نظارت بر نوع داده‌ها نیز به آن اضافه شد. ریچی از این زبان برای ایجاد سیستم‌عامل یونیکس استفاده کرد اما بعدها اکثر سیستم‌عاملهای دیگر نیز با همین زبان نوشته شدند. این زبان با سرعت بسیاری گسترش یافت و چاپ کتاب "The C Programming Language" در سال ۱۹۷۸ توسط [[کرنیگان]] و ریچی باعث رشد روزافزون این زبان در جهان شد.
 
این متغیرها را می توان خارج از توابع مثلاً ابتدای برنامه قبل از تعریف تابع Main یا قبل از تعریف هر تابع دیگر معرفی کرد. متغیرهایی که خارج از توابع معرفی شوند، توسط کلیه توابعی که از آن به بعد تعریف شده اند، قابل استفاده اند.
متاسفانه استفاده گسترده این زبان در انواع کامپیوترها و سخت‌افزارهای مختلف باعث شد که نسخه‌های مختلفی از این زبان بوجود آید که با یکدیگر ناسازگار بودند. در سال ۱۹۸۳ [[انستیتوی ملی استاندارد آمریکا]] (ANSI) کمیته‌ای موسوم به X3J11 را را مأمور کرد تا یک تعریف فاقد ابهام و مستقل از ماشین را از این زبان تدوین نماید. در سال ۱۹۸۹ این استاندارد تحت عنوان ANSI C به تصویب رسید و سپس در سال ۱۹۹۰، [[سازمان استانداردهای بین‌المللی]] (ISO) نیز این استاندارد را پذیرفت و مستندات مشترک آنها تحت عنوان ANSI/ISO C منتشر گردید.
 
پس از هر فراخوانی همین که اجرای تابع خاتمه یافت، متغیرهای محلی آن از بین می روند.ولی متغیرهای سراسری تا پایان اجرای تابع mainفعال و قابل استفاده اند.
در سالهای بعد و با ظهور روشهای [[برنامه‌نویسی شئ‌گرا]] نسخه جدیدی از زبان C بنام C++ توسط [[بیارنه استراوستروپ]] در اوایل ۱۹۸۰ در آزمایشگاه بل توسعه یافت. در C++ علاوه بر امکانات جدیدی که به زبان C اضافه شده است، خاصیت شئ‌گرایی را نیز به آن اضافه شده‌است.
 
'''حوزه دسترسی به متغیر:'''
با گسترش شبکه و اینترنت، نیاز به زبانی احساس شد که برنامه‌های آن بتوانند برروی هر [[ماشین]] و هر [[سیستم‌عامل]] دلخواهی اجرا گردد. شرکت [[سان مایکروسیستمز]] در سال ۱۹۹۵ میلادی زبان [[جاوا]] را برمبنای C و C++ ایجاد کرد که هم اکنون از آن در سطح وسیعی استفاده می‌شود و برنامه‌های نوشته شده به آن برروی هر کامپیوتری که از چاوا پشتیبانی کند (تقریباً تمام سیستم‌های شناخته شده) قابل اجرا می‌باشد. شرکت [[مایکروسافت]] در رقابت با شرکت سان، در سال 2002 زبان جدیدی بنام C# ([[سی شارپ]]) را ارائه داد که رقیبی برای Java بشمار می‌رود.
محدوده ای که هر متغیر در آن قابل دسترسی است حوزه دسترسی نامیده می شود. متغیرهایی که به صورت محلی در ابتدای تابع معرفی شده اند دارای حوزه دسترسی تابع هستند. متغیرهایی که در یک بلوک به طور محلی تعریف شده اند دارای حوزه دسترسی بلوک هستند . متغیرهایی که خارج از توابع معرفی شده اند دارای حوزه دسترسی فایل می باشند.
 
کلاس های حافظه دارای چهار نوع اتوماتیک، ثبات، خارجی، ایستا هستند که به ترتیب توسط کلمات auto ،، register ، extern و static مشخص می شوند.
== برنامه نویسی ساخت یافته ==
 
==کلاس های حافظه==
در دهه ۱۹۶۰ میلادی توسعه نرم‌افزار دچار مشکلات عدیده‌ای شد. در آن زمان سبک خاصی برای برنامه نویسی وجود نداشت و برنامه‌ها بدون هیچگونه ساختار خاصی نوشته می‌شدند. وجود [[دستور پرش]] (goto) نیز مشکلات بسیاری را برای فهم و درک برنامه توسط افراد دیگر ایجاد می‌کرد، چرا که جریان اجرای برنامه مرتبا دچار تغییر جهت شده و دنبال کردن آن دشوار می‌گردید. لذا نوشتن برنامه‌ها عملی بسیار زمان بر و پرهزینه شده بود و معمولاً اشکال زدایی، اعمال تغییرات و گسترش برنامه‌ها بسیار مشکل بود. فعالیتهای پژوهشی در این دهه باعث بوجود آمدن سبک جدیدی از برنامه نویسی بنام [[روش ساخت‌یافته]] گردید؛ روش منظمی که باعث ایجاد برنامه‌هایی کاملاً واضح و خوانا گردید که [[اشکال‌زدایی]] و [[خطایابی]] آنها نیز بسیار ساده‌تر بود.
 
'''کلاس حافظه اتوماتیک'''
اصلی‌ترین نکته در این روش عدم استفاده از دستور پرش (goto) است. تحقیقات [[بوهم]] و [[ژاکوپینی]] نشان داد که می‌توان هر برنامه‌ای را بدون دستور پرش و فقط با استفاده از ۳ [[ساختار کنترلی]] [[ساختار ترتیب|ترتیب]]، [[ساختار انتخاب|انتخاب]] و [[ساختار تکرار|تکرار]] نوشت.
 
متغیرهای دارای این کلاس خصوصیات زیر را دارند:
ساختار '''ترتیب'''، همان اجرای دستورات بصورت متوالی (یکی پس از دیگری) است که کلیه زبانهای برنامه نویسی در حالت عادی بهمان صورت عمل می‌کنند.
 
فقط در همان بلوکی که معرفی شده اند قابل دسترسی هستند.
ساختار '''انتخاب''' به [[برنامه‌نویس]] اجازه می‌دهد که براساس درستی یا نادرستی یک شرط، تصمیم بگیرد کدام مجموعه از دستورات اجرا شود.
 
طول عمر آن ها به اندازه طول عمر بلوکی است که در آن معرفی شده اند.یعنی هنگام ورود به بلوکی که در آن معرفی شده ایجاد می شوند، و با خاتمه اجرای بلوک از میان می روند.
ساختار '''تکرار''' نیز به برنامه نویسان اجازه می‌دهد مجموعه خاصی از دستورات را تا زمانیکه شرط خاصی برقرار باشد، تکرار نماید.
 
چنانچه هنگام معرفی به آن ها مقدار اولیه داده نشده باشد، دارای مقدار معینی نیست.
هر برنامه ساخت‌یافته از تعدادی [[بلوک]] تشکیل می‌شود که این بلوکها به ترتیب اجرا می‌شوند تا برنامه خاتمه یابد (ساختار ترتیب). هر بلوک می‌تواند یک دستور ساده مانند خواندن، نوشتن یا تخصیص مقدار به یک [[متغیر]] باشد و یا اینکه شامل دستوراتی باشد که یکی از ۳ ساختار فوق را پیاده سازی کنند. نکته مهم اینجاست که درمورد دستورات داخل هر بلوک نیز همین قوانین برقرار است و این دستورات می‌توانند از تعدادی بلوک به شرح فوق ایجاد شوند و تشکیل ساختارهایی مانند [[حلقه]]‌های تودرتو را دهند.
 
'''کلاس حافظه ثبات'''
نکته مهم اینجاست که طبق قوانین فوق یک حلقه تکرار یا بطور کامل داخل حلقه تکرار دیگر است و یا بطور کامل خارج آن قرار می‌گیرد و هیچگاه حلقه‌های روی هم افتاده نخواهیم داشت.
 
در رابطه با متغیرهایی که با کلاس حافظه ثبات معرفی می شوند، به کامپیوتر پیشنهاد می شود که آن ها را در ثبات پردازنده قرار دهد.اگر پردازنده نتواند ثبات آزادی در اختیار متغیر قرار دهد، کلاس حافظه ثبات بودن آن را ندیده می گیرد و با آن مانند یک متغیر با کلاس حافظه اتوماتیک برخورد می گردد. بنابراین بهتر است فقط متغیرهایی با کلاس حافظه ثبات معرفی شوند که از آن ها زیاد استفاده می گردد. مثلاً متغیرهایی که وظیفه کنترل حلقه تکرار را دارند از این دسته می توانند باشند.
از جمله اولین تلاشها در زمینه ساخت زبانهای برنامه نویسی ساخت‌یافته، زبان [[پاسکال]] بود که توسط پروفسور [[نیکلاس ورث]] در سال ۱۹۷۱ برای آموزش برنامه نویسی ساختیافته در محیطهای آموزشی ساخته شد و بسرعت در دانشگاه‌ها رواج یافت. اما بدلیل نداشتن بسیاری از ویژگیهای مورد نیاز مراکز صنعتی و تجاری در بیرون دانشگاه‌ها موفقیتی نیافت.
 
خصوصیات متغیر دارای کلاس حافظه ثبات:
کمی‌بعد زبان C ارائه گردید که علاوه بر دارا بودن ویژگیهای برنامه نویسی ساختیافته بدلیل سرعت و کارایی بالا مقبولیتی همه گیر یافت و هم اکنون سالهاست که به‌عنوان بزرگ‌ترین زبان برنامه نویسی دنیا شناخته شده است.
 
فقط در همان بلوکی که معرفی شده است قابل دسترسی است.
== مراحل اجرای یک برنامه C ==
برای اجرای یک برنامه C ابتدا باید آن را نوشت. برای اینکار می‌توان از هر [[ویرایشگر متنی]] موجود استفاده کرد و سپس [[فایل]] حاصل را با پسوند .C ذخیره نمود (فایلهای C++ با پسوند.CPP ذخیره می‌گردند). به این فایل، [[کد مبدأ]] (source code) گفته می‌شود. مرحله بعدی تبدیل کد مبدا به [[زبان ماشین]] است که به آن [[کد مقصد]] (object code) گفته می‌شود. همانطورکه قبلا نیز گفته شد برای اینکار از یک برنامه [[مترجم]] بنام [[کامپایلر]] استفاده می‌شود. کامپایلرهای متعددی برای زبان C توسط شرکتهای مختلف و برای سیستم‌عاملهای مختلف نوشته شده است که می‌توانید برحسب نیاز از هریک از آنها استفاده نمایید. اما هنوز برنامه برای اجرا آماده نیست. معمولاً برنامه نویسان از در برنامه‌های خود از یک سری از کدهای از پیش آماده شده برای انجام عملیات متداول (مانند محاسبه جذر و یا سینوس) استفاده می‌کنند که برنامه آنها قبلا نوشته و ترجمه شده است. این برنامه‌ها یا در قالب کتابخانه‌های استاندارد توسط شرکتهای ارائه کننده نرم‌افزار عرضه شده است و یا توسط دیگر همکاران برنامه نویس اصلی نوشته و در اختیار وی قرار داده شده است. در این مرحله باید کد مقصد برنامه اصلی با کدهای مربوط به این برنامه‌های کمکی [[پیوند]] زده‌شود. برای اینکار نیاز به یک [[پیوندزننده]] (Linker) داریم و نتیجه این عمل یک [[فایل قابل اجرا]] خواهد بود (در سیستم‌عامل [[ویندوز]] این فایل پسوند .EXE خواهد داشت). مرحله بعدی اجرای برنامه و دادن ورودیهای لازم به آن و اخذ خروجیها می‌باشد. در شکل زیر این مراحل نشان داده شده اند.
[[پرونده:Sample_program_with_input_output.GIF|left|thumb|یک برنامه ساده با ورودی و خروجی]]
 
طول عمر آن به اندازه طول عمر بلوکی است که در آن معرفی شده است. یعنی هنگام ورود به بلوکی که در آن معرفی شده ایجاد می شود، و با خاتمه اجرای بلوک از میان می رود.
مسلما طی مراحل بالا برای اجرای هر برنامه زمانبر می‌باشد، بهمین دلیل اکثر تولید کنندگان [[کامپایلر|کامپایلرها]]، محیطهایی را برای برنامه نویسی ارائه کرده اند که کلیه مراحل بالا را بطور اتوماتیک انجام می‌دهند.
 
چنانچه هنگام معرفی به آن مقدار اولیه داده نشده باشد، دارای مقدار معینی نیست.
به این محیطها IDE (Integrated Development Environment) یا [[محیط مجتمع توسعه نرم‌افزار]] گفته می‌شود. این محیطها دارای یک ویرایشگر متن می‌باشند که معمولاً دارای خواص جالبی همچون استفاده از رنگهای مختلف برای نشان دادن اجزای مختلف برنامه مانند [[کلمات کلیدی]] و قابلیت تکمیل اتوماتیک قسمت‌های مختلف برنامه می‌باشد. پس از نوشتن برنامه و با انتخاب گزینه‌ای مانند Run کلیه عملیات فوق بطور اتوماتیک انجام شده و برنامه اجرا می‌گردد. علاوه براین، این محیطها معمولاً دارای امکانات اشکالزدایی برنامه (Debug) نیز می باشند که شامل مواردی همچون اجرای خط به خط برنامه و یا دیدن محتویات متغیرها در زمان اجرا است. چند محیط معروف برنامه نویسی عبارت‌اند از :
 
* Borland C++ 3.1 برای محیط DOS
* Borland C++ از نسخه 4 به بالا برای Windows
* Microsoft Visual C++ برای محیط Windows
* Borland C++ Builder برای محیط Windows
 
'''کلاس حافظه خارجی'''
== خطاهای برنامه نویسی ==
بنظر می‌رسد [[خطا|خطاها]] جزء جداناپذیر برنامه‌ها هستند. بندرت می‌توان برنامه‌ای نوشت که در همان بار اول بدرستی و بدون هیچگونه خطایی اجرا شود. اما خطاها از لحاظ تأثیری که بر اجرای برنامه‌ها می‌گذارند، متفاوتند. گروهی ممکن است باعث شوند که از همان ابتدا برنامه اصلاً کامپایل نشود و گروه دیگر ممکن است پس از گذشت مدتها و در اثر دادن یک ورودی خاص به برنامه، باعث یک خروجی نامناسب و یا یک رفتار دور از انتظار (مانند [[قفل شدن]] برنامه) شوند. بطور کلی خطاها به دو دسته تقسیم می‌شوند:
کلاس حافظه متغیرهایی می تواند خارجی باشد که بیرون تابع معرفی شده اند.
 
خصوصیات متغیر دارای این کلاس:
# '''[[خطاهای نحوی]]''' (خطاهای زمان کامپایل): این خطاها در اثر رعایت نکردن قواعد دستورات زبان C و یا تایپ اشتباه یک دستور بوجود می‌آیند و در همان ابتدا توسط کامپایلر به برنامه نویس اعلام می‌گردد. برنامه نویس باید این خطا را رفع کرده و سپس برنامه را مجدداً کامپایل نماید. لذا معمولاً این قبیل خطاها خطر کمتری را در بردارند.
# '''[[خطاهای منطقی]]''' (خطاهای زمان اجرا): این دسته خطاها در اثر اشتباه برنامه نویس در طراحی [[الگوریتم]] درست برای برنامه و یا گاهی در اثر درنظر نگرفتن بعضی شرایط خاص در برنامه ایجاد می‌شوند. متأسفانه این دسته خطاها در زمان کامپایل اعلام نمی‌شوند و در زمان اجرای برنامه خود را نشان می‌دهند. بنابراین، این خود برنامه‌نویس است که پس از نوشتن برنامه باید آن را تست کرده و خطاهای منطقی آن را پیدا کرده و رفع نماید. متاسفانه ممکن است یک برنامه‌نویس خطای منطقی برنامه خود را تشخیص ندهد و این خطا پس از مدتها و تحت یک شرایط خاص توسط کاربر برنامه کشف شود. بهمین دلیل این دسته از خطاها خطرناکتر هستند. خود این خطاها به دو دسته تقسیم می‌گردند:
## '''[[خطاهای مهلک]]''': در این دسته خطاها کامپیوتر بلافاصله اجرای برنامه را متوقف کرده و خطا را به کاربر گزارش می‌کند. مثال معروف این خطاها [[خطای تقسیم بر صفر]] می‌باشد.
## '''[[خطاهای غیرمهلک]]''': در این دسته خطا،d. اجرای برنامه ادامه می‌یابد ولی برنامه نتایج اشتباه تولید می‌نماید. به‌عنوان مثال ممکن است دراثر وجود یک خطای منطقی در یک برنامه حقوق و دستمزد،e. حقوق کارمندان اشتباه محاسبه شود و تا مدتها نیز کسی متوجه این خطا نشود!
 
در کلیه توابعی که بعد از معرفی آن قرار دارند، قابل دسترسی هستند.
با توجه به آنچه گفته شد، در می‌یابیم که رفع اشکال برنامه‌ها بخصوص خطاهای منطقی از مهم‌ترین و مشکلترین وظایف یک برنامه نویس بوده و گاهی حتی سخت‌تر از خود برنامه‌نویسی است! بهمین دلیل است که بسیاری از شرکتها(همانند [[مایکروسافت]]) ابتدا نسخهٔ اولیه نرم‌افزار خود را در اختیار کاربران قرار می‌دهند تا اشکالات آن گزارش شده و رفع گردد. بسیار مهم است که در ابتدا سعی کنید برنامه‌ای بنویسید که حداقل خطاها را داشته باشد، در گام دوم با آزمایش دقیق برنامه خود هرگونه خطای احتمالی را پیدا کنید و در گام سوم بتوانید دلیل بروز خطا را پیدا کرده و آنرا رفع نمایید. هر سه عمل فوق کار سختی بوده و نیاز به تجربه و مهارت دارد.
 
طول عمر آن تا پایان عمر کل برنامه است . یعنی هنگام معرفی ایجاد می شود، و با خاتمه اجرای تابع main از میان می رود.
آخرین نکته اینکه در اصطلاح برنامه نویسی به هرگونه خطا، bug و به رفع خطا debug گفته می‌شود.
 
چنانچه هنگام معرفی به آن مقدار اولیه داده نشده باشد، داری مقدار اولیه صفر است.
== یک برنامه نمونه ==
در این قسمت برای آشنایی اولیه با زبان C یک برنامه نمونه آورده شده است که بدون هیچ تغییری در محیط BorlandCPP قابل اجرا است.
 
'''کلاس حافظه ایستا'''
{{چپچین}}
<source lang="c">
// 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 = radius * 3.14 * radius;
printf( "Area is %f \n", area );
 
خصوصیات این کلاس حافظه:
}
</source>
 
چنانچه متغیر محلی باشد، تنها در تابعی که معرفی شده است قابل دسترسی می باشد. اگر متغیر سراسری باشد، فقط در فایلی که معرفی شده است، آن هم توسط توابعی که پس از آن تعریف شده اند قابل دسترسی می باشد.
please enter radius : 10
Area is 62.8
 
طول عمر آن تا پایان عمر کل برنامه است. یعنی هنگام معرفی ایجاد می شود، و با خاتمه اجرای تابع main از میان می رود.
{{پایان چپچین}}
 
چنانچه هنگام معرفی به آن مقدار اولیه داده نشده باشد، دارای مقدار اولیه صفر است.
درمورد برنامه فوق به نکات زیر توجه کنید:
* خط اول یک توضیح درمورد برنامه است. در زبان C برای توضیحات یک خطی از علامت // استفاده می‌گردد. اما چنانچه توضیحات بیش از یک خط بود، آن را با علامت /* شروع کرده و با */ پایان دهید. کامپایلر از این توضیحات صرفنظر خواهد کرد. این توضیحات باعث می‌شوند که برنامه شما خواناتر شده و دیگران بهتر آن را درک کنند.
* هر دستوری که با علامت # شروع شود، یک دستور C نیست، بلکه جزو [[دستورات پیش پردازنده]] محسوب می‌گردد. دستورات پیش پردازنده دستوراتی هستند که توسط کامپایلر قبل از شروع به کامپایل انجام می‌شوند. به‌عنوان مثال دستور #include باعث می‌شود که تعاریف اولیه مربوط به توابعی (زیربرنامه هایی) که قصد استفاده از آنها را داریم به برنامه اضافه شود. در مثال بالا برای استفاده از توابع printf و scanf که در کتابخانه استاندارد C تعریف شده‌اند، [[فایل سرآمد]] stdio.h را که این توابع در آن تعریف شده‌اند را استفاده کرده‌ایم.
* هر برنامه C باید دارای تابعی به نام main باشد که اجرای برنامه از آن شروع می‌شود و در حقیقت همان برنامه اصلی است. البته می‌توان هر تعداد دیگری تابع ([[زیربرنامه]]) نیز تعریف کرد، اما وجود تابع main الزامی است. دقت کنید که گرچه این تابع [[پارامتر]] ورودی ندارد، اما از پرانتز باز و بسته تنها استفاده شده است.در این برنامه چون تابع main دارای ورودی و خروجی نمی‌باشد قبل از این تابع و نیز در داخل پرانتز main از کلمه void استفاده می‌شود.
* در زبان C هر بلوک برنامه با علامت { آغاز شده و با } پایان می‌یابد. این دو معادل دستورات begin و end در زبانهای دیگر ازجمله [[پاسکال]] می‌باشند که برای سادگی زبان انتخاب شده اند.
* دو خط بعدی به تعریف متغیرهای radius و area می‌پردازد. در زبان C قبل از استفاده از هر متغیری باید آن را اعلان نمایید. اعلان متغیر شامل نام و نوع متغیر است. در مثال فوق، متغیر radius از نوع [[عدد صحیح]] (integer) و متغیر area از نوع [[عدد اعشاری]] (float) تعریف شده‌اند.
* توابع printf و scanf جزو کتابخانه استاندارد C محسوب می‌گردند و به ترتیب برای چاپ اطلاعات در خروجی استاندارد ([[نمایشگر]]) و دریافت اطلاعات از ورودی استاندارد ([[صفحه کلید]]) استفاده می‌شوند. برای چاپ رشته مورد نظر باید آنها را در داخل علامت " قرار داد.
* دقت کنید که در پایان هر دستورالعمل از علامت؛ استفاده شده است. در مجموع C یک زبان قالب آزاد است و شما می‌توانید دستورات را به هر نحوی که دوست دارید قرار دهید (مثلاً چند دستور در یک خط از برنامه). تنها چیزی که نشان‌دهنده پایان یک دستور است، علامت؛ است (و نه انتهای خط).
* از آنجا که C یک زبان قالب آزاد است، می‌توان با استفاده از مکان نوشتن دستورات شکل بهتری به برنامه داد. به‌عنوان مثال دقت کنید که پس از شروع تابع main، دستورات حدود ۳ [[کاراکتر]] جلوتر نوشته شده‌اند. به این نحوه نوشتن دستورات، [[دندانه‌گذاری]] می‌گویند. بطور کلی هربار که بلوک جدیدی آغاز می‌شود، باید آن را کمی‌جلوتر برد. این مسئله باعث جدا شدن بلوکها از یکدیگر و خوانایی بهتر برنامه می‌شود.
* در پایان برنامه و در داخل مستطیل خاکستری، یک نمونه از اجرای برنامه که شامل یک ورودی و خروجی نمونه است، آورده شده است.
 
== منابع ==
{{پانویس}}
 
== استفاده از آرایه ها در زبان C ==
{{ زبان‌های برنامه‌نویسی}}
 
بسیاری از موارد پیش می آید که برنامه نویس نیاز به استفاده از تعداد زیادی متغیر پیدا می کند. مثلا اگر بخواهیم جملات 1 تا 100 سری فیبوناچی را برای استفاده ذخیره کنیم، به صد متغیر نیاز داریم. تعریف این صد متغیر به صورت مستقل و با نام های جداگانه کاری سخت و طاقت فرساست و البته معقولانه نیست. به همین خاطر در زبان C قابلیتی پیش بینی شده تا بتواند تعداد دلخواهی متغیر از یک نوع را به راحتی ایجاد کرد.
 
به این متغیر ها که در حافظه پشت سر هم قرار می گیرند و همگی از یک نوع هستند آرایه (Array) می گویند. آرایه ها کاربردهای بسیار زیادی دارند و همانند دنباله ها در ریاضی عمل می کنند. همان طور که در ریاضی برای مشخص کردن یک جمله از دنباله از اندیس استفاده می کنیم، در C نیز برای مشخص کردن یک متغیر خاص از اندیس استفاده می شود.
 
 
همان طور که مشاهده می کنید خانه ی پنجم شماره ی 4 دارد و این بدین خاطر است که خانه ها از شماره ی 0 تا n-1 (که n تعداد خانه هاست) شماره گذاری می شود. پس باید به این مورد دقت کرد. مورد دیگر این که شماره ی خانه در [] قرار می گیرد. درون علامت آکلاد می توان عبارت نیز قرار داد.
 
همان طور که گفته شد در حافظه ی رایانه خانه های آرایه پشت سر هم قرار می گیرند. اندازه ی هر خانه به اندازه ی نوع تعریف شده است. مثلا در مثال قبل اگر int دو بایت اشغال کند آرایه ی array، در کل 20 بایت از حافظه اشغال خواهد کرد. این که خانه ها پشت سر هم قرار میگیرند ویژگی کارایی است که در بحث اشاره گر ها به کار می آید.
 
== اشاره گرها در C ==
یکی از مهم ترین قابلیت های زبان C، امکان استفاده از اشاره گر هااست. اشاره گر ها کارایی، قدرت و انعطاف پذیری برنامه را بیش تر می نمایند. علاوه بر فراهم آوردن امکان نوشتن کدهای برنامه ی کوتاهتر، غنی تر و کاراتر، گاهی مواردی پیش می آید که انجام محاسبات مورد نیاز برنامه تنها توسط اشاره گر ها امکان پذیر می باشد. به همین دلیل، از این توانایی در برنامه های C زیاد استفاده می گردد.اگر چه در ظاهر کار با اشاره گر ها مشکل است و درک برنامه ای که از آن ها استفاده شده است ساده نیست، اما در حقیقت اگر از آن ها به درستی استفاده گردد، وضوح و سادگی برنامه افزایش می یابد.
 
=== اشاره گر چیست؟ ===
روش مستقیم دسترسی به حافظه برای ذخیره سازی مقداری در آن، و یا بازیابی محتوای ذخیره شده، استفاده از نام متغیر است. همین که متغیری معرفی شد، سیستم بر اساس نوع اعلام شده، تعداد بایت لازم را به آن اختصاص می دهد و آدرس متغیر، شماره اولین بایت از مجموعه ی اختصاص یافته است. پس از آن به راحتی از طریق نام متغیر به محل مورد نظر دسترسی یافته، محتوای آن پردازش می گردد.
اما گاهی لازم می شود به جای نام، آدرس متغیر در اختیار برنامه نویس قرار گیرد تا از طریق آن دستیابی به محل مربوطه صورت گیرد. در زبان C، به راحتی می توان آدرس یک متغیر را در اختیار داشت و مقدارش را در حافظه ذخیره نمود تا در زمان نیاز، توسط آن به صورت غیر مستقیم به محل مورد نظر دست یافت.
برای این منظور از متغیر اشاره گر استفاده می گردد. متغیر اشاره گر، متغیری است که محتوای آن آدرس یک متغیر دیگر است.
 
== انواع متغیرها و داده ها در C ==
 
زبان C قابلیت های زیادی برای کار با داده ها دارد. تمام انواع عددی و غیر عددی به صورت کارا در سی یافت می شوند. در زیر به اختصار به بعضی اشاره می شود:
 
=== int ===
این نوع داده از نوع عددی صحیح (integer) است. در حافظه 2 بایت اشغال می کند ولی برخی کامپایلرها برای آن 4 بایت در نظر می گیرند.
 
=== float ===
این نوع داده از نوع اعشاری است. معمولا در حافظه 4 بایت اشغال می کند و اعداد اعشاری مثبت و منفی را در خود جای می دهد.
 
=== double ===
این نوع داده برای استفاده در اعداد اعشاری است که مقدار بیش تری فضا باید اشغال کنند. این نوع داده نیز 8 بایت اشغال می کند.
 
=== char ===
این نوع داده برای ذخیره ی کاراکتر استفاده می شود و 1 بایت اشغال می کند.
 
=== long int ===
 
برای داده های صحیحی که در حافظه فضای بیش تری اشغال می کنندو 4 بایت اشغال می کند.
 
=== short int ===
 
برای داده های صحیح که نیاز به حافظه ی زیادی ندارند قابل استفاده است.
 
== ساختارها در C ==
نوع داده هایی که تا به حال به آن ها برخورد داشته ایم مانند int,float,char,... در زبان C به صورت استاندارد تعریف شده اند و برنامه نویس مستقیما از آن ها برای تعیین نوع استفاده می نماید. مثلا C تعداد بایت هایی که float اشغال می شود. و فرم قرار گرفتن مقدار در حافظه مربوطه، مشخص نیست. ساختار ها هنوع دیگری از انواع داده ها می باشند با این تفاوت که توسط برنامه نویس تعریف می شوند.
=== ساختار چیست؟ ===
در بسیاری از برنامه ها، گروهی از داده ها در ارتباط با یکدیگر می باشند، به گونه ای که مجموعه ی آن ها یک واحد اطلاعاتی جامع تری را تشکیل می دهد. به عنوان مثال، اطلاعات دانشجو یک واحد اطلاعاتی مرکب است که شامل داده هایی نظیر نام، نام خانوادگی، شماره ی دانشجویی، معدل و ... می باشد. معمولا به مجموعه ای از داده ها که یک واحد اطلاعاتی کامل تر را تشکیل می دهند، یک رکورد گفته می شود و هر یک از این داده ها یک فیلد (field) نامیده می شود. خصوصیت یک رکورد آن است که نوع هر یک از فیلدهایش می تواند با نوع سایر فیلدهای آن متفاوت باشد.
در زبان C برای ذخیره و پردازش یک رکورد، از نوع داده ای به نام ساختار (structure) استفاده می شود. ساختار یک نوع داده ی مرکب است که مجموعه ای از چند نوع داده می باشد. داده های تشکیل دهنده ساختار را اعضا (members) آن می نامند. در حقیقت عضوهای ساختار، همان فیلدهای رکورد هستند.
نوع ساختار به صورت استاندارد تعریف نشده است. برنامه نویس بر اساس نوع و تعداد عضوهای تشکیل دهنده ی ساختار، آن را در متن برنامه تعریف می کند
 
==خود فراخوانی==
 
به فرایندی گفته می شود که طی آن از درون یک تابع همان تابع فراخوانی گردد.
 
== مثال هایی از برنامه نویسی به زبان C ==
 
برای آشنایی بیش تر با تمرینات C برنامه هایی در زیر برای شما قرار می گیرد:
 
1. برنامه ای که ضرب دو عدد m رقمی در n رقمی را انجام می دهد.
 
[https://docs.google.com/document/d/1ON5fnsGnSPFkbR-dzcP-wBkd7h2THcITwuD7tCmF2Pk/edit?hl=en m multi n]
 
2. برنامه ای که ماتریسی 6*6 را می خواند و سپس اولین بزگترین مقداری که از میانگین داده ها کوچک تر است با شماره ی خانه ی آن چاپ می کند.
 
[https://docs.google.com/document/d/1-YtopqlPX-5En-Ghdx0XJvFw2n9num8IVWg_HajCCTw/edit?hl=en MAX of means]
 
3. برنامه ای که ماتریسی 4*5 را می خواند سپس خود آن و ترانهاده اش را چاپ می کند، سپس حاصل ضرب آن ها را نیز به دست می آورد.
 
[https://docs.google.com/document/d/1ummTmPXXwE2IZmmiC6l_toYRx3DkiF5pNW0sdPxUGLA/edit?hl=en Matt Multi]
 
== منابع ==
* ویکی‌پدیای انگلیسی، C programming language .
* برنامه نویسی به زبان C، تالیف : هایده علی آبادی (عضو هیئت علمی دانشگاه صنعتی امیرکبیر)
*کتاب مهندس جعفر نژاد قمی
*کتاب برنامه نویسی با c، تالیف : بایرون اس.گاتفرید ترجمه : حسین ابراهیم زاده قلزم
 
[[رده:اختراعات آمریکایی]]
سطر ۱۰۱ ⟵ ۳۰۴:
[[رده:نرم‌افزارهای چندسکویی]]
[[رده:زبان‌های برنامه‌نویسی رویه‌ای]]
[[رده:زبان‌های برنامه‌نویسی خانواده سی]]
[[رده:زبان برنامه‌نویسی سی]]
[[رده:زبان‌های برنامه‌نویسی سیستمی]]
[[رده:زبان‌های برنامه‌نویسی سال ۱۹۷۲ (میلادی)]]
 
[[af:C (programmeertaal)]]
سطر ۱۳۲ ⟵ ۳۳۲:
[[en:C (programming language)]]
[[eo:C (programlingvo)]]
[[es:LenguajeC (lenguaje de programación C)]]
[[et:C (programmeerimiskeel)]]
[[eu:C (programazio lengoaia)]]
سطر ۱۴۰ ⟵ ۳۴۰:
[[gl:C (programación)]]
[[he:C (שפת תכנות)]]
[[hi:सी (प्रोग्रामिंग भाषा)]]
[[hr:C (programski jezik)]]
[[hu:C (programozási nyelv)]]
[[hy:C (ծրագրավորման լեզու)]]
[[ia:C (linguage de programmation)]]
[[id:C (bahasa pemrograman)]]
سطر ۱۴۸ ⟵ ۳۴۹:
[[it:C (linguaggio)]]
[[ja:C言語]]
[[jv:C (basa pamrograman)]]
[[ka:C (პროგრამირების ენა)]]
[[kab:C (tameslayt)]]
سطر ۱۵۴ ⟵ ۳۵۶:
[[ku:C (zimanê bernamekirinê)]]
[[la:C (lingua programmandi)]]
[[lo:ພາສາຊີ]]
[[lt:C (kalba)]]
[[lv:C (programmēšanas valoda)]]
سطر ۱۵۹ ⟵ ۳۶۲:
[[mk:C (програмски јазик)]]
[[ml:സി (പ്രോഗ്രാമിങ് ഭാഷ)]]
[[mn:Программчлалын Си хэл]]
[[mr:सी प्रोग्रॅमिंगआज्ञावली लँग्वेजभाषा]]
[[ms:C (bahasa pengaturcaraan)]]
[[nl:C (programmeertaal)]]
سطر ۱۷۸ ⟵ ۳۸۱:
[[sr:C (програмски језик)]]
[[sv:C (programspråk)]]
[[ta:சி நிரலாக்கல்-நிரலாக்க மொழி]]
[[te:సీ]]
[[th:ภาษาซี]]
[[tl:C (wikang pamprograma)]]
[[tr:C (programlama dili)]]
[[tt:Си (программалау теле)]]
[[uk:C (мова програмування)]]
[[vi:C (ngôn ngữ lập trình)]]