بخش اول زبان c یک زبان سطح میانی است .
کلمات کلیدی شاخص در این زبان عبارتند از auto do goto signed void break double if sizeof while case else int static char enum long switch const extem register typedef continue float returm union default for short unsigned انواع داده در c : زبان c شامل شش نوع اصلی می باشد که عبارتند از void ,enum double , float , int , char.
در زبان c برخی از انواع داده ها می توانند با عباراتی نظیر long short , unsigned , signed ترکیب شده ونوع داده أی دیگری را بوجود آورند.
هیچکدام از این عبارات نمی توانند با نوع داده أی void ترکیب شوند.
نوع داده أی void یک نوع داده تهی است یا به عبارت دیگر هیچ نوعی ندارد .
جدول زیر انواع داده ها و حالات مختلف ترکیب این عبارات ذکر شده با انواع داده ها را نشان می دهد .
نوع داده أی long با long int یکی است.
قوانین تعریف متغیرها نام متغیر شامل حروف a تا z بزرگ یا کوچک ، a تا z ،ارقام 0 تا 9 و خط ربط () است .
کاراکتر شروع نام متغیر نباید یک عدد باشد .
حداکثر تعداد کاراکتر های نام متغیر 32 کاراکتر است.
int var 1 , var2; char ch; unsigned int i; مقدار دهی به متغیرها به هنگام تعریف متغیر int b,c,d=4,e; char ch=’a’; 2-پس از تعریف b=0; c=d=2; در c مقدار دهی اولیه به متغیرها توسط کامپایلر انجام نمی گیرد .
با استفاده از کلمه کلیدی const می توانیم ثابتهایی تعریف کنیم که مقدار آنها در طول اجرای برنامه ثابت است .
نحوه تعریف این متغیر ها بصورت زیر است : لیست متغیرها نوع const const int a=10, b=20; اگر const ها را مقداردهی اولیه نکنیم از سوی کامپایلر پیغام خطا صادر می شود .
عملگر ها نمادهای هستند که برای انجام اعمال خاصی مورد استفاده قرار می گیرند .
عملگرها به چهار دسته محاسباتی ، رابطه أی ، منطقی و بیتی تقسیم می شوند .
عملگر های محاسباتی عملگر نام مثال + جمع و مثبت یکانی x+y , +x - تفریق و منهای یکانی x-y, -x * ضرب x*y / تقسیم x/y % باقیمانده تقسیم x%y -- کاهش یک واحد x--,--x ++ افزایش یک واحد x++,++x دستور ++x یا x++ معادل دستور x=x+1 است دستور x-- یا –x معادل دستور x=x-1 است اگر در یک عبارت از عملگر های افزایش و کاهش یک واحد استفاده کنیم به کاربردن این عملگر ها در قبل و بعد از عملوند مربوطه با یکدیگر متفاوت است .
اگر عمگرهای ++ و -- نظیر بعد از عملوند قرار گیرند مقدار فعلی عملوند مورد استفاده قرار گرفته و سپس عملگرها بر روی آن عمل می کنند a=4; b=a++; ابتدا مقدار 4 به متغیر b نسبت داده میشود و سپس مقدار a یک واحد افزایش یافته و 5 می شود .
اگر عملگرهای ++و -- قبل از عملوند مربوطه قرار گیرند پس از افزایش یا کاهش یک واحد به آنها مقدار جدید در عبارات مورد استفاده قرار می گیرند.
a=5; b=++a; ابتدا مقدارa یک واحد افزایش یافته و سپس بهb نسبت داده می شود.
ابتدا مقدارa یک واحد افزایش یافته و سپس بهb نسبت داده می شود.
تقدم عملگرهای محاسباتی عملگرهای محاسباتی – انتسابی عملگر های رابطه أی عملگر های منطقی بر روی عملوند های منطقی عمل می کنند .
در زبان c ارزش نادرستی (false) با مقدار صفر و ارزش درستی (true) با مقدار غیر صفر مشخص می شود .
عملگرهای بیتی این عملگر ها فقط بر روی متغیر های نوع int , char عمل می کنند و روی متغیرهایی از سایر نوعها مانند double , float و .
.
قابل اجرا نیستند .
نحوه کاربرد عملگر های شیفت به صورت زیر است : هر انتقال معادل راست به تقسیم کردن مقدار متغیر به 2 و هر انتقال به چپ معادل ضرب کردن در 2 است .
در صورت از دست دادن اطلاعات واقعی در شیفت به چپ یا راست مساله ضرب در 2 شدن با تقسیم بر 2 شدن صدق نمی کند.
عملگر ~ در متغیر کلیه بیتها را نقیض می کند یعنی بیت صفر را تبدیل به یک کرده و بیت یک را تبدیل به صفر می نماید .
عملگر ?: نحوه کاربرد: ابتدا exp 1 ارزیابی می شود اگر دارای ارزش true باشد مقدار exp2 پس از ارزیابی در متغیر قرار می گیرد و گرنه مقدار exp3 ارزیابی می شود و نتیجه به متغیر منتقل می شود .
x=(a>b)?5:10; در مثال فوق چنانچه a  از b بزرگتر باش مقدار 5  و در غیر اینصورت مقدار 10  به x  نسبت داده می شود .
عملگر های *,& عملگر & یک عملگر یکانی است که آدرس عملوند خود را مشخص می کند نحوه کاربرد به صورت زیر است .
نام عملوند & عملگر * یک عملگر یکانی است که محتویات یک آدرس حافظه را مشخص می کند عملگر sizeof جهت محاسبه طول یک نوع و یا یک متغیر به کار می رود .
نحوه کاربرد .
);متغیر یا نوع ) sizeof ;متغیر sizeof تقدم عملگر ها در حالت کلی تبدیل انواع داده أی به یکدیگر معمولاً در دو حالت انجام می شود 1- در عبارات 2- در حکم انتساب وقتیکه متغیرها با نوع های مختلف در یک عبارت با یکدیگر ترکیب می شوند با تبدیل نوع صورت می گیرد نوعهای با طول کوچکتر به نوعهای با طول بزرگتر تبدیل می شود در حکم انتساب نیز ممکن است تبدیل نوع داده ای است صورت گیرد .
در صورت تبدیل نوع ، ممکن است اطلاعاتی از بین برود که باید در نتیجه حاصل احکام انتساب دقت کافی به خرج داد .
در c چنانچه انواع گوناگون (به غیر از اشاره گرها) را به یکدیگر نسبت دهیم پیغام خطایی صادر نمی شود.
وقتی نوع بزرگتری به نوع کوچکتر انتساب داده می شود قسمتی از اطلاعات از بین می رود .
ساختار برنامه های c  هر برنامه در زبان c دارای یک تابع به نام main() است .
در زبان c  توابع را به دو صورت می توان تعریف نمود .
حالت اول : توابع قبل از تابع main() تعریف شوند .
func() { .
} .
main(){ .
} حالت دوم : عنوان (header) توابع را قبل از تابع main() تعریف کنیم و خود توابع را بعد از تابع main () قرار دهیم func(); .
} func(){ .
} تعریف یک تابع در داخل تابع دیگر امکان پذیر نیست ولی هر تابع می تواند یک یا چند تابع دیگر را فراخوانی کند.
در زبان c  در هر جای برنامه می توان متغیر ها را تعریف کرد هر بلاک برنامه با علامت }شروع و با علامت {  پایان می یابد.
جدا کننده دستورات ; است .
می توان چند دستور را در یک سطر نوشت.
می توان یک دستور را در چند سطر ادامه داد .
چنانچه نوع خروجی یک تابع تعیین نشود به طور پیش فرض از نوع int در نظر گرفته می شود.
چند تابع ورودی و خروجی تابع printf شکل کلی : “, رشته های ثابت ، کاراکترهای کنترلی و فرمت های خروجیprintf(“ ;(اطلاعات خروجی اطلاعات خروجی با فرمت مشخص شده در قسمت فرمت به خروجی منتقل می شوند.
کاراکترهای که برای تعیین فرمت خروجی مورد استفاده قرار می گیرند با کاراکتر % شروع می شوند وکاراکترهای کنترلی با کاراکتر 1 شروع می شوند .
خروجی تابع printf تعداد کاراکترهایی است که توانسته است بر روی خروجی ارسال کند.
برخی از کاراکترهای فرمت برخی از کاراکترهای کنترلی تعیین طول میدان در تابع printf() طول میدان به صورت n.d است که بعد از علامت % و قبل از کاراکتر فرمت ذکر می شود.
در اعداد اعشاری ممیز شناور ، طول میدان (حداکثر تعداد ارقام با در نظر گرفته نقطه اعشار)و d تعداد ارقام اعشاری را مشخص می کند.
printf(“\n%8.1f%16.4f,”,3.0,123.1234567); bbbbb3.0bbbbbbbb123.1235 چنانچه n ( حداکثر طول رقم ) از مجموع عدد تعیین شده برای d  ، تعداد ارقام صحیح خود عدد و یک کاراکتر نقطه اعشار کمتر باشد در نظر گرفته نمی شود .
به مثال زیر توجه کنید .
printf(“%4.4f” , 123.957); 123.9570 اگر برای اعداد اعشاری قسمت d حذف گردد و یا اینکه کلاً طول میدان را مشخص نکنیم عدد مورد نظر با شش رقم اعشار چاپ می شود printf (“%5f”,123.957) ; یا printf (“%f”, 123.957); 123.957000 گرد کردن عدد اگر تعداد ارقام قسمت اعشار بیشتر از عدد مشخص شده در قسمت d باشد قسمت اعشار گرد می شود و تبعاً ممکن است بر روی قسمت صحیح نیز تاثیر گذار باشد .
به مثال های زیر توجه کنید : printf (“%5.2f”,12.957); 12.96 printf(“%5.0f” , 12.54); 13 اگر طول میدان عددی مثبت باشد مکان عددی که باید چاپ شود از سمت راست تنظیم میشود و اگر طول میدان عددی منفی باشد مکان عدد از سمت چپ تنظیم خواهد شد .
مثالهای زیر این نکته را نشان می دهند .
printf(“%7.2f”,12.5); bb12.50 printf(“%-7.2f”,12.5); 12.50bb در چاپ اعداد صحیح چنانچه در قسمت d  نیز عددی قرار دهیم از بین d,n  هر کدام که بزرگتر باشند برای طول میدان درنظر گرفته میشوند .
به مثال زیر توجه کنید : printf(“%6.3d”,1451); b1451 اگر d از n بزرگتر باشد به جای فضای خالی کاراکتر صفر چاپ می شود.
printf(“%3.6d”,1451); 001451 در مورد رشته ها n حداقل طول میدان و d حداکثر کاراکتر های قابل چاپ می باشد .
printf(“%7.3s”,”hello”); bbbbhel چنانچه n  از d کوچکتر باشد هیچکدام در نظر گرفته نمی شوند و تمام رشته چاپ می شود .
printf(“%1.3s”,”hello”); hello در تنظیم مکان مقداری که قرار است چاپ شود منفی یا مثبت بودن طول میدان همانطور که گفته شد تاثیر گذار است تابع scanf() جهت خواندن اطلاعات از ورودی استاندارد مورد استفاده قرار می گیرد .
شکل کلی : scanf(“کاراکتر های فرمت “ , آدرس متغیرها); کاراکترهای فرمت نوع اطلاعاتی را که باید خوانده شوند را مشخص می کند .
آدرس متغیر ها مشخص کنند های محل هایی از حافظه هستند که اطلاعات ورودی باید در آن محلها باید قرار گیرند آدرس متغیر ها را با عملگر & مشخص می کنیم کاراکتر های فرمت در تابع scanf همانند تابع printf می باشد .
در ورود اطلاعات می توانیم آنها را با فاصله (blank) ، کلید enter یا tab جدا کنیم خروجی این تابع تعداد مقادیری است که از ورودی خوانده است .
int year; scanf(“%d” , & year); فرمان cout از cout می توانیم جهت چاپ در خروجی استفاده می کنیم.
شکل کلی : متغیر یا “رشته های ثابت ، کاراکترهای کنترلی” cout int i=3; cout فرمان cin از cin نیز جهت دریافت مقدار از ورودی استفاده می شود..
شکل کلی : cin از کاراکترهای کنترلی و کاراکترهای فرمت نمی توان در این فرمان استفاده کرد .
int i; float f; cin جهت استفاده از فرامین cin , cout باید فایل h.iostream در ابتدای برنامه include شود.
خواندن یک کاراکتر از ورودی تابع getch() شکل کلی : =getch(); متغیر پس از آن که کنترل اجرای برنامه به تابع getch() رسید برنامه منتظر فشار دادن کلیدی از صفحه کلید می شود .
تابع getche() مانند تابع getch() می باشد با این تفاوت که در این تابع پس از اخذ ورودی آن را روی صفحه نمایش چاپ می کند شکل کلی : ()=getche متغیر تابع getchar() عمل این تابع مانند دو تابع قبل است با این تفاوت که در این تابع پس از وارد نمودن کلید مورد نظر باید enter  زده شود .
نوشتن یک کاراکتر در خروجی علاوه بر printf() دو تابع دیگر نیز بکار می رود که عبارتند از putchar() putch() شکل کلی putch(متغیر); putchar(متغیر); بخش دوم ساختارهای کنترلی و حلقه های تکرار اگر بخواهیم بعضی از دستورات تحت شرایط خاصی اجرا شوند و یا تعدادی از دستورات چندین مرتبه اجرا شوند و یا در شرایط خاصی تکرار شوند ، از ساختارهای تکرار و تصمیم استفاده می کنیم ساختار های تکرار تحت شرایط خاصی امکان اجرای مکرر دستور یا مجموعه أی از دستورات را فراهم می کنند ساختار for در مواردی مفید است که تعداد دفعات تکرار دستورات معلوم باشد دارای یک شمارنده است که تعداد دفعات اجرای دستورات داخل حلقه را شمارش می کند شمارنده حلقه می تواند دارای مقادیر مثبت ، منفی ، صحیح و یا اعشاری باشد .
شکل کلی : for (مقدار اولیه = شمارنده ; شرط حلقه ; گام حرکت شمارنده )دستور; مقدار اولیه مشخص می کند که شمارنده ، از چه مقداری شروع می شود .
شرط حلقه مشخص می کند که مجموع دستورات داخل حلقه تکرار ، تحت چه شرایطی اجرا شوند.
گام حرکت شمارنده حلقه مشخص می کند که در هر بار اجرای دستورات داخل حلقه، چه مقداری به شمارنده حلقه اضافه شود.
گام حرکت می تواند مثبت ، منفی ، صحیح یا اعشاری باشد.
دربین هر یک از پارامترها در حلقه for