مفاهیم اولیه زبان C
در این فصل به مقدمات اولیه برنامه نویسی به زبان C می پردازیم و اصول اولیه آن را بررسی می نماییم
شناسه ها در C
شناسه (identifier) نامی است که به یک قسمت از برنامه مانند متغیر، تابع، ثابت و یا ... داده می شود. در زبان C برای انتخاب شناسه ها فقط می توان از علائم زیر استفاده کرد: - حروف انگلیسی کوچک و بزرگ (A…Z a…z)
- ارقام (0…9)
- علامت خط پایین یا _
البته یک شناسه تمی تواند با یک رقم شروع شود. مثلا شناسه های sum ، average ، name2 و یا student_average مجاز هستند، اما شناسه های 2name و یا student average مجاز نیستند. البته در برنامه نویسی امروزی پیشنهاد می شود بجای شناسه هایی همانند student_average از studentAverage استفاده گردد. یعنی بجای اینکه در شناسه ها از _ برای جداکننده استفاده کنیم، اولین حرف هر قسمت را بصورت بزرگ بنویسیم.
نکته مهم دیگری که باید به آن اشاره کرد آنستکه زبان C برخلاف بسیاری از زبانهای دیگر به کوچک و بزرگی حروف حساس است (case sensitive). در نتیجه شناسه های زیر با یکدیگر متفاوتند :
این مسئله معمولا درهنگام برنامه نویسی باعث ایجاد بعضی خطاها می شود.
آخرین نکته اینستکه در هنگام انتخاب شناسه نمی توانید از کلمات کلیدی که برای منظورهای خاص در زبان C رزرو شده اند استفاده کنید. زبان C دارای 32 کلمه کلیدی است که عبارتند از :
Sum ≠ sum ≠ SUM
auto
break
case
char
Const
continue
default
do
double
Else
enum
extern
float
for
Goto
if
int
long
register
Return
short
signed
sizeof
static
Struct
switch
typedef
union
unsigned
Void
volatile
while
البته در نسخه های جدید C کلمات کلیدی دیگری نیز به لیست فوق اضافه شده است. دقت کنید که کلیه این کلمات با حروف کوچک نوشته شده اند.
انواع داده ها در C
همانطور که قبلا نیز گفتیم هر متغیر پیش از آنکه استفاده گردد ابتدا باید اعلان گردد. اعلان یک متغیر تعیین نوع آن را نیز دربر می گیرد. سوال اصلی آنستکه چه نوع داده هایی در زبان C و جود دارد. انواع داده های متداول عبارتند از :
نوع داده
توضیح
اندازه (بیت)
محدوده
char
کاراکتر
8
-128 to +127
int
عدد صحیح
16
-32768 to + 32767
float
عدد اعشاری
32
3.4e-38 to 3.4e+38
double
عدد اعشاری با دقت مضاعف
64
1.7e-308 to 1.7e+308
البته چند نکته مهم درمورد جدول فوق قابل ذکر است :
- اندازه int در محیطهای 16 بیتی مانند DOS برابر 16 بیت است. اما در محیطهای 32 بیتی همانند Windows اندازه آن 32 بیت می باشد که در اینصورت محدوده ای برابر -2,147,483,647 تا +2,147,483,647 را پوشش می دهد.
- در بعضی از کامپایلرهای C، نوع داده bool نیز وجود دارد که می تواند یکی از مقادیر true(درست) یا false (غلط) را نشان دهد . اما در نسخه های اولیه C از همان نوع داده صحیح یا int برای اینکار استفاده می شد. بدین صورت که 0 نشاندهنده false و هر عدد غیر صفر (معمولا 1) نشاندهنده true است.
- از آنجا که برای ذخیره سازی کاراکترها کد اسکی آنها ذخیره می گردد، از یک متغیر کاراکتری یا char می توان بعنوان یک عدد صحیح کوچک نیز استفاده کرد و اعمال ریاضی برروی آنها نیز مجاز است.
علاوه براین چندین اصلاح کننده نیز وجود دارد که به ما اجازه می دهد نوع داده مورد نظر را با دقت بیشتری برای نیازهای مختلف استفاده نماییم.
این اصلاح کننده ها عبارتند از : short, long, signed, unsigned
تمام اصلاح کننده های فوق می توانند به نوع داده int اعمال شوند و اثر آنها بستگی به محیط دارد. مثلا در یک محیط 16 بیتی، short int بازهم برابر 16 بیت است ولی long int برابر 32 بیت خواهد بود. علاوه براین unsigned int باعث می شود که یک عدد 16 بیتی بدون علامت داشته باشیم که بازه بین 0 تا 65535 را پوشش می دهد. signed int نیز همانند int معمولی بوده و تفاوتی ندارد. البته ترکیب این اصلاح کننده ها نیز ممکن است. مثلا unsigned long int یک عدد 32 بیتی بدون علامت است که بازه 0 تا 4,294,967,295 را پوشش می دهد.
اما برروی نوع داده char فقط اصلاح کننده های signed و unsigned را می توان اعمال کرد. معمولا از اصلاح کننده unsigned وقتی استفاده می شود که قصد داشته باشیم از char بعنوان یک عدد صحیح مثبت بین 0 تا 255 استفاده کنیم.
برروی نوع داده double تنها اصلاح کننده long قابل اعمال است و دراینصورت عدد اعشاری با 80 بیت را خواهیم داشت که قادر است هر عددی در بازه 3.4e-4932 تا 1.1e+4932 را در خود نگاه دارد.
تعریف متغیرها
برای تعریف متغیرها به شکل زیر عمل می کنیم:
<type> <variable-list>;
که type یکی از نوع داده های گفته شده و variable-list لیستی از متغیرها است که با کاما از یکدیگر جدا شده اند. بعنوان مثال :
کد:
int sum;
float average;
long int a, b, c ;
unsigned long int i, j, k ;
علاوه براین می توان در هنگام تعریف متغیر به آن مقدار اولیه نیز داد. مثال :
int d = 0 ;
نكته مهم آنكه زبان C به متغيرها مقدار اوليه نمي دهد (حتي 0) و برنامه نويس خود بايد اينكار را صريحا انجام دهد، درغير اينصورت مقدار اوليه متغير، نامعين خواهد بود.
تعریف متغیرها طبق اصول زبان C میتواند درهرجایی از برنامه صورت پذیرد، و متغیرهای تعریف شده از همان خط به بعد قابل استفاده خواهد بود. اما معمولا توصیه می گردد كه تعریف متغیرها در همان خط ابتدایی تابع و بلافاصله پس از { صورت پذیرد.
ثوابت
ثابتها مقادیر ثابتی هستند كه مقدار آنها در حین اجرای برنامه تغییر نمی یابد. ثابتها می توانند از هریك از نوع داده های اصلی باشند. برای نمایش هر ثابت بسته به نوع آن عمل می كنیم كه شرح هریك در زیر آمده است :
4 ثوابت عددی صحیح : برای نمایش این دسته از ثوابت، از دنباله ای از ارقام بعلاوه علامت + یا - استفاده می كنیم. بعنوان مثال 45- و یا 3489 ثوابت صحیح هستند. در حالت عادی C هر عدد را در كوچكترین نوع داده ای كه می تواند قرار می دهد. مثلا عدد 85 در یك int قرار می گیرد، اما عدد 145398 در یك long int قرار خواهد گرفت. اما اگر قصد دارید یك عدد كوچك بعنوان long محسوب گردد، می توانید از پسوند L در انتهای آن استفاده می كنیم. مثلا 245L یك عدد long محسوب می شود .
long int a = 20L
ضمن اینكه پسوند U در انتهای عدد نیز نشانه بدون علامت بودن آن است.
نكته دیگر آنكه C به شما اجازه می دهد درصورت لزوم ثوابت صحیح خود را در مبنای 8 یا 16 نیز كه از مبناهای متداول در برنامه نویسی هستند، بنویسید. برای نوشتن عدد در مبنای 8 باید آن را با 0 آغاز كنید، مثلا 0342 یك عدد در منای 8 محسوب می گردد. اما برای نوشتن یك عدد در مبنای 16 باید آن را با 0x آغاز نمایید، مانند 0x27A4.
8 ثوابت عددی اعشاری : برای نمایش اعداد اعشاری، باید از نقطه اعشار استفاده كنیم، مانند 237.45 ، اما نكته جالب آنستكه می توانید از نماد علمی نیز برای نمایش اعداد اعشاری استفاده كنید. برای اینكار كافی است از حرف e برای نمایش قسمت توان استفاده نمایید. بعنوان مثال :
-23.47 × 10 5 = -23.47e5
42.389 × 10 -3 = 42.389e-3
دقت كنید كه قسمت توان، حتما یك عدد صحیح است. نكته جالب اینجاست كه برخلاف مورد قبل، كامپایلر بطور پیش فرض داده های اعشاری را از نوع double فرض می كند.چنانچه دوست دارید ثابت شما ازنوع float درنظر گرفته شود، در انتهای آن F قرار دهید. ضمنا پسوند L نیز داده اعشاری را از نوع long double درنظر می گیرد. 10 ثوابت كاراكتری : برای نشان دادن ثوابت كاراكتری، آنها را در داخل ' قرار می دهیم. بعنوان مثال 'A' یك ثابت كاراكتری است.
دقت كنید كه همانطور كه قبلا گفته شد، كد اسكی كاراكترها در متغیر ذخیره می گردد، بنابراین می توان از آن بعنوان یك عدد صحیح نیز استفاده كرد. نكته مهم دیگر آنستكه به تفاوت عدد 5 و كاراكتر '5' دقت داشته باشید. در حقیقت '5' برابر است با عدد 53 كه همان كد اسكی آن است.
از آنجا كه بعضی كاراكترها، مانند enter قابل نمایش نیستند، بهمین دلیل آنها را با استفاده از \ نمایش می دهیم. علاوه براین بعضی كاراكترها مانند خود " نیز چون دارای معنای خاص هستند، باید با استفاده از \ نمایش داده شوند. موارد مهم عبارتند از :
char ch = 'S' ;
\n خط جدید
\t tab كاراكتر
\a بوق كامپیوتر \" "
\' ' \\ \
14 ثوابت رشته ای : C علاوه بر ثوابت فوق، از یك ثابت دیگر بنام رشته نیز حمایت می كند. رشته، دنباله ای از كاراكترها است كه در داخل " قرار می گیرند. بعنوان مثال "this is a test" یك رشته است. دقت كنید كه 'a' یك كاراكتر است، اما "a" یك رشته است كه فقط شامل یك كاراكتر می باشد.