Y@SiN
04-30-2010, 12:46 PM
فصل 1
کليات و مفاهيم
هدف کلی
آشنایی با مفاهیم اولیه و ویژگیهای کلی زبانC
هدفهای رفتاری
پس از مطالعة این فصل انتظار میرود دانشجو بتواند:
1. تاریخچة پیدایش زبان C را بگوید.
2. ویژگیهای اصلی این زبان را شرح دهد.
3. کاراکترهای این زبان را تشخیص دهد.
4. ویژگی شناسههای C را بیان کند.
5. متغیرها را شناسایی کند.
6. قسمتهای مختلف برنامة نوشته شده به این زبان را شرح دهد.
مقدمه
در اوايل دهة 1970 ميلادی، «دنيس ريچي» در آزمایشگاه كمپاني بل زبان C را برای برنامهنويسي سيستمها طراحي کرد. اين زبان از دو زبان پيشين به نامهاي BCPL و B منتج شده است که اين دو نيز در همين آزمایشگاه نوشته شدند. زبان C تا سال 1978 منحصر به استفاده در همين آزمایشگاه بود تا اينکه «ريچی» و «کرنيه» نسخة نهايي اين زبان را منتشر کردند. به سرعت مفسرهاي متعددي از C تهیه شد، ليکن براي جلوگيری از ناسازگاريهای ايجاد شده و نيز حفظ قابليت حمل زبان، استاندارد ANSI تعاريف متحدالشکلي مطرح کرد. آنچه در اين کتاب مطرح میشود بر اساس همين استاندارد است. مفسر خود برنامهاي کامپيوتري است که برنامة سطح بالا دادة ورودي آن و برنامة ايجاد شده به زبان ماشين خروجي آن را تشکیل میدهد.
به طور كلي ويژگيهاي مهم زبان C به اختصار به شرح زير است:
زبان C به طور گستردهاي در دسترس است. مفسرهاي تجارتي آن در بيشتر کامپيوترهاي شخصي، مينيکامپيوترها و نيز در کامپیوترهای بزرگ قابل استفادهاند.
C زباني است همه منظوره، ساختيافته سطح بالا (مانند زبان پاسکال و فورترن) و انعطافپذير كه برخي از خصوصيات زبانهاي سطح پايين را نیز كه معمولاً در اسمبلي يا زبان ماشين موجود است داراست. در عين حال اين زبان براي كاربردهاي ويژه طراحي نشده و ميتوان از آن در همة زمينهها، بخصوص به دليل نزديكي آن به زبان ماشين در برنامهنويسي سيستم، استفاده کرد. بنابراين C بين زبانهاي سطح بالا و سطح پايين قرار دارد و در نتيجه اجازه ميدهد كه برنامهنويس خصوصيات هر دو گروه زبان را به كار برد. از اين رو در بسياري از كاربردهاي مهندسي به طور انحصاري زبان C به كار ميبرند. (زبانهاي سطح بالا، دستورالعملهايي شبيه زبان انسان و پردازش فکري او دارند، همچنين يک دستورالعمل زبان سطح بالا معادل چند دستورالعمل به زبان ماشين است.)
برنامههاي نوشته شده به زبان C به طور كلي مستقل از ماشين يا نوع كامپيوتر است و تقريباً تحت كنترل هر سيستم عاملي اجرا ميشود.
مفسرهاي C معمولاً فشرده و كم حجماند و برنامههاي هدف ايجاد شده با آنها در مقايسه با ساير زبانهاي برنامهسازي سطح بالا، خيلي كوچك و كارآمدند.
برنامههاي C در مقايسه با ساير زبانهاي برنامهسازي سطح بالا، به راحتي قابل انتقالاند. دليل آن اين است كه C خيلي از ويژگيهاي وابسته به نوع كامپيوتر را در توابع كتابخانهاي خود منظور داشته است. بنابراين هر نسخه از C با مجموعهاي از توابع كتابخانهاي مخصوص به خود همراه است كه براساس ويژگيهاي كامپيوتر ميزبان مربوط نوشته شده است. اين توابع كتابخانهاي تا حدودي استاندارد است و معمولاً هر تابع كتابخانهاي در نسخههاي متعدد C به شکل يكسان در دسترس است.
C روش برنامهسازي ماژولار را پشتيباني ميكند. همچنين از نظر عملگرها نيز زبانی قوي است که عملگرهاي گوناگوني براي دستكاري روي دادهها در سطح بیت داراست.
به طور کلي جامعيت، عموميت، خوانايي، سادگي، کارآيي و پيمانهاي بودن که همگي از مشخصات برنامهای ايدهآلاند در زبان C پيادهسازي ميشوند.
ويژگيهاي فوق موجب شده زبان C يکي از قويترين و محبوبترين زبانهاي برنامهسازي در دنيا مطرح شود.
كاراكترها
زبان برنامهنويسي C مجموعهاي خاص از كاراكترها را شناسايي ميكند. اين مجموعه که در حکم مصالح اوليه جهت شکل دادن به اجزای اصلي برنامهاند عبارتاند از:
- حروف بزرگ و حروف كوچك. زبان C برخلاف زبان پاسكال بين حروف بزرگ و كوچك فرق ميگذارد. مثلاً FOR با for يكسان نيست.
- ارقام دهدهي. شامل 0 تا 9
- جاي خالي يا Blank
-كاراكترهاي مخصوص. شامل ^ % $ # @ ! + - = / \ * ? ( ) < > { } [ ] ~ ;. ,&
- كاراكترهاي فرمتبندی. که براي بيان حالتهای ويژهاي به کار ميروند و عبارتاند از كاراكترHorizontal Tab يا \t، كاراكترVertical Tab يا \v، كاراكتر خط جديد يا \n ، كاراكتر برگشت به عقب (Back Space) يا \b، كاراكتر تغذية فرم (Form Feed) يا \f، كاراكتر ابتداي سطر يا \r، كاراكتر تهي يا \0، و جز آن كه آنها را کاراکترهاي فرمان نيز مينامند. لازم به توضيح است که هر کاراکتر فرمان بيانکنندة تنها يک کاراکتر است هر چند که با دو يا چند کاراکتر نوشته ميشود.
شناسهها
شناسهها نشانههاي سمبوليكياند كه براي مراجعه به انواع دادهها مانند مقادير ثابت، متغيرها، نوعها و توابع به كار میروند. به عبارتي ديگر شناسه نامي است كه به عناصر مختلف برنامه مانند متغيرها، توابع، آرايهها، اشارهگرها و جز آن اختصاص مییابد. يك شناسة C دنبالهاي است از حروف، ارقام يا علامت زيرخط که با هر ترتيبي ميتوانند قرار گيرند. اما اولين کاراکتر بايد حرفی باشد. در شناسهها هر دو شکل حروف بزرگ و کوچک مجاز شناخته ميشوند. برحسب قرارداد شناسههايي كه با علامت زيرخط شروع ميشوند فقط در برنامههاي سيستم كاربرد دارند و در برنامههاي كاربردي قابل استفاده نيستند. در مورد تعداد کاراکترها در اسامي از نظر C محدوديتي وجود ندارد گرچه هر مفسر ويژگيها و محدوديتهاي خاص خودش را به كار ميبرد. طول اسامي در زبان C استاندارد تا 31 كاراكتر مجاز است.
v مثال 1ـ1 اسامي زير شناسههاي معتبرند.
x1 , sum , payam_noor , maximum
v مثال 1ـ2 اسامي زير شناسههاي غیرمعتبرند.
book-5 , 4s , $tax , "p" , number one
متغيرها
متغيرها در زبان C شناسههايياند كه محلهايي از حافظه را به خود اختصاص ميدهند. به عبارت ديگر متغير شناسهاي است که در ميان بخشی از برنامه براي نسبت دادن نوع تعيين شدهاي از اطلاعات مورد استفاده قرار ميگيرد. در سادهترين حالت هر متغير جانشين يک قلم داده میشود. متغير تركيبي است از ارقام، حروف و علامت زيرخط ( _ ). لازم به ذكر است متغيرهايي كه با علامت زيرخط شروع ميشوند براي متغيرهاي داخلي سيستم رزرو شدهاند. طول هر متغير در استاندارد ANSI تا 31 كاراكتر است، ولي در بعضي از مفسرهاي قديمي محدود به 8 كاراكتر است. تمامي متغيرهايي که در برنامههاي C به کار میروند بايد تعريف يا اعلان شوند. به يک متغير ميتوان دادههاي مختلفي در محلهاي گوناگون برنامه نسبت داد. بنابراين مقدار متغير در طول اجراي برنامه ممکن است تغيير کند.
بعضي از شناسههاي زبان C كلمات رزرو شده يا كليدياند. يعني معني و مفهوم آن از قبل در زبان تعريف و پيشبيني شده است. بنابراين شناسههاي تعريف شدة برنامهنويس نیستند. متداولترين كلمات كليدي زبان Cدر زير نشان داده شده است.
for
goto
else
If
Char
float
int
main
enum
register
return
signed
default
while
do
double
sizeof
static
struct
auto
Case
short
coutinue
const
union
unsigned
extern
typedef
Void
switch
long
break
البته در بعضي از مفسرهاي زبان C ممكن است كلمات كليدي ديگري نيز وجود داشته باشد كه بايد به كتاب راهنماي مربوط مراجعه کرد. همچنين توجه داشته باشيد كه همة كلمات كليدي با حروف كوچك نوشته ميشوند. پس main كلمة كليدي است درحالي كه Main كلمة كليدي نیست زيرا حرف اول آن بزرگ است. همين طور void کلمة کليدي است اما VOID کلمة کليدي نيست.
علامت توضيح
در زبان C هر عبارتي كه بين دو علامت */ و /* قرار گيرد صرفاً توضيح محسوب ميشود. مثلاً اگر بخواهيم در مورد دستوری توضيح دهيم كه چه كاري انجام ميدهد در هر جاي برنامه كه فضاي خالي مجاز باشد ميتوان براي توضيح از علامت فوق استفاده كرد. (در اغلب نسخهها علامت // هم مجاز است.)
v مثال 1ـ3 در برنامة زير از علامت توضيح استفاده شده است.
#include
main ()
{
int j , k ;
for (j =1 ; j <= 10 ; j+ +) /* outer loop */
{
printf("%5d ", j) ;
for (k=1; k<=10; k+ +) /* inner loop */
printf("%5d", j * k) ;
printf("\n") ;
}
}
ساختار برنامههاي C
در زبان C برنامهها با فرمت خاصي نوشته ميشوند. همة برنامههاي C شامل يك يا چندين تابعاند كه فقط يكي از آنها تابع اصلي يا main ناميده ميشود. بنابراين هر برنامه فقط يك تابع اصلي دارد. برنامه هميشه با اجراي تابع اصلي آغاز ميگردد. معرفي توابع ديگر ممكن است قبل و يا بعد از تابع اصلي قرار گيرد. به طور كلي ميتوان گفت كه هر برنامه به زبان C حداقل داراي اجزاي مقدماتي به ترتيب زير است.
دستورالعملهاي اجرايي
در هر برنامه دستورالعملهاي اجرايي بايد بعد از تعريف متغيرها درج شوند. دستوري قابليت اجرا دارد كه در پايان آن دستور، علامت سميكولون (;) نوشته شود. براي فهم بهتر اين موضوع به مثال زير توجه کنيد.
v مثال 1ـ4 برنامهاي بنويسيد كه مساحت مستطيلي به طول 6 و عرض 3 را محاسبه و چاپ كند.
#include
main()
{
int length , width , S ; /* variable declaration */
length = 6 ;
width = 3 ;
S = length * width ;
printf ("area = %d", S) ;
}
پس از اجراي برنامه، خروجي برنامه به صورت زير نمايش داده ميشود.
area = 18
توضیح. برنامه با حروف کوچک تايپ شده است. توضيحات نيز معمولاً با حروف کوچک تايپ ميشوند. در زبان C حروف بزرگ و کوچک معادل يکديگر نیستند. خط اول برنامه اعلان ميكند كه كتابخانة مربوط به توابع ورودي و خروجي براي دستيابي به توابع آن آماده شود. در واقع ارجاع به فايلي است که شامل اطلاعاتي است که هنگام تفسیر بايد در برنامه قرار گيرند. C يكي از زبانهايي است كه به لحاظ داشتن توابع توكار يا از پيشفرض شده بسيار غني است. هر مجموعه از توابع كه عمليات ويژهاي را انجام ميدهد در مجموعهای با عنوان كتابخانه يا library قرار ميگيرد. توابعي كه عمليات ورودي و خروجي را انجام ميدهند در كتابخانهاي به نام stdio.h قرار دارند كه در آن stdio به معني standard input output (ورودي و خروجي استاندارد) و h نيز معرف header يا عنوان است. تابع printf نيز يكي از توابع خروجي است.
حال به توضيح #include ميپردازيم. برنامههاي نوشته شده به زبان C قبل از اينكه بهوسيلة مفسر ترجمه شوند در اختيار برنامة ديگري با عنوان پيشپردازنده يا preprocessor قرار ميگيرند. يكي از كاربردهاي اصلي اين برنامه آن است كه كتابخانههاي مورد نياز برنامة منبع را يعني كتابخانههايي را كه توابع به كار رفته در برنامة منبع را شامل است براي استفاده آماده میکند. اين كار با دستور include كه در ابتداي آن علامت # و به دنبال آن نام كتابخانه در داخل علامت <> يا " " ميآيد انجام ميگيرد. اولين عبارت در برنامة بالا همين كار را براي ما انجام ميدهد.
در خط بعد تابع اصلي تعريف شده است. پرانتز خالي به دنبال نام تابع بيان ميکند که اين تابع آرگوماني ندارد. چند خط بعدي، متن برنامة اصلي را تشكيل ميدهند كه از پنج دستور ساده تشكيل شده است. پايان هر دستور را علامت سميكولون (;) مشخص مينمايد. چون متن برنامه بيش از يك دستور است مجموع آنها که دستور مركب يا بلاك را تشکیل میدهند در داخل يك زوج آكولاد قرار میگیرند. در واقع هر آكولاد چپ براي مفسر C به معني شروع بلاك و هر آكولاد راست معرف پايان آن است. البته در بعضي مواقع برحسب مورد آكولادها را ميتوان به صورت تودرتو نيز به كار برد.
اولين دستور در متن برنامه يا همان شروع آكولاد، توصيف متغيرهاست. سه دستور بعدي دستورات محاسباتي و جايگزينياند و در آخر نيز دستور خروجي است كه در آن تابع printf براي چاپ فرمتدار است. اولين آرگومان تابع مذكور متن داخل گيومه است كه تابع آن را به همان صورت در خروجي چاپ ميكند. البته بعضي از قسمتهاي متن كه شامل علامت % باشد مانند %d به مفسر اطلاع ميدهد كه اولين متغير بعد از بسته شدن گيومه كه در اين مثال S است مقادير صحيح ميپذيرد. در اينجا d معرف decimal است و %d فرمت متغير در خروجي را تعريف ميكند. در فصلهاي بعدي به طور كامل به بحث فرمت متغيرها خواهيم پرداخت.
v مثال 1ـ5 برنامة زير طول و عرض مستطيلي را از طريق ورودي استاندارد ميخواند و با فراخواندن تابعي به نام Rectangle مساحت آن را محاسبه میکند و سپس طول و عرض و مساحت را در دستگاه استاندارد خروجي نمايش ميدهد. طول با a و عرض با b و مساحت با area مشخص میشود.
# include
main ()
{
int a , b , area ;
int Rectangle (int a , int b) ;
scanf ("%d %d" , &a , &b) ;
area = Rectangle (a , b);
printf ("\n length = %d width = %d area = %d" , a , b , area) ;
}
int Rectangle (int a , int b) ;
{
int s ;
s = a * b ;
return (s) ;
}
اگر 5 = a و 4 = b، خروجي برنامة مذكور به صورت زير خواهد بود.
length = 5 width = 4 area = 20
توضيح. خط اول ارجاع به فايل کتابخانهاي، خط دوم تعريف تابع اصلي، خط سوم شروع تابع اصلي، و خط چهارم اعلان متغيرهاست. در خط پنجم تابع فرعي Rectangle اعلان شده است كه مقدار صحيح برميگرداند و آرگومانهاي آن نيز a و bاند كه مقادير صحيحاند. در خط ششم، تابع ورودي استاندارد scanf به كار رفته است. اين تابع كه جزء كتابخانة stdio.h است، اطلاعات را از طريق ورودي استاندارد كه صفحه كليد است دريافت ميكند. فرمت و ساز و كار اين گونه توابع را در فصلهای بعد بررسي میکنیم. در اينجا يادآور ميشويم كه فرم كلي تابع مزبور به صورت زیر است.
scanf (control string , argl , arg2 , … , argn) ;
كه در آن رشتة كنترل كه در داخل گيومه ("") میآید، اطلاعات مورد نياز دربارة فرمت اقلام دادههاي ورودي را شامل میشود و عناصر arg1 , arg2 ,... argn نيز آرگومانهايياند كه اقلام دادههاي ورودي را معرفي ميکنند. در اين دستور کاراکتر "&" عملگر آدرس است. در رشتة كنترلي نيز كه در داخل گيومه قرار دارد، از چپ به راست %d اول معرف فرمت اولين آرگومان يا دادة ورودي به عنوان عدد صحيح است و به دنبال آن %d دوم نيز معرف فرمت دومين آرگومان به عنوان عدد صحيح است. علامت \n در رشتة كنترلي تابع printf، موجب انتقال به سطر جديد ميگردد. بنابراين اطلاعات بعدي در سطر جديد چاپ خواهد شد.
خودآزمایی 1
1. كدام يك از اسامي زير مجاز است به عنوان نام متغيردر برنامه به كار رود؟
Integer, -19, Lesson four, Unit_25, define, Loop2, Star565void, Please?, Payam_noor, C+ +, S#, Five$
2. برنامة زير مساحت مربعي به ضلع 5 سانتیمتر را محاسبه و چاپ ميكند. قسمتهاي مختلف آن را شرح دهيد.
#include
main()
{
int x , S ;
x = 5 ;
S = x * x ;
printf ("area = %d", S) ;
}
3. ويژگيهاي برنامة ايدهآل را شرح دهيد.
4. چند نمونه از زبانهاي سطح بالا، سطح پايين و سطح مياني را نام ببريد.
کليات و مفاهيم
هدف کلی
آشنایی با مفاهیم اولیه و ویژگیهای کلی زبانC
هدفهای رفتاری
پس از مطالعة این فصل انتظار میرود دانشجو بتواند:
1. تاریخچة پیدایش زبان C را بگوید.
2. ویژگیهای اصلی این زبان را شرح دهد.
3. کاراکترهای این زبان را تشخیص دهد.
4. ویژگی شناسههای C را بیان کند.
5. متغیرها را شناسایی کند.
6. قسمتهای مختلف برنامة نوشته شده به این زبان را شرح دهد.
مقدمه
در اوايل دهة 1970 ميلادی، «دنيس ريچي» در آزمایشگاه كمپاني بل زبان C را برای برنامهنويسي سيستمها طراحي کرد. اين زبان از دو زبان پيشين به نامهاي BCPL و B منتج شده است که اين دو نيز در همين آزمایشگاه نوشته شدند. زبان C تا سال 1978 منحصر به استفاده در همين آزمایشگاه بود تا اينکه «ريچی» و «کرنيه» نسخة نهايي اين زبان را منتشر کردند. به سرعت مفسرهاي متعددي از C تهیه شد، ليکن براي جلوگيری از ناسازگاريهای ايجاد شده و نيز حفظ قابليت حمل زبان، استاندارد ANSI تعاريف متحدالشکلي مطرح کرد. آنچه در اين کتاب مطرح میشود بر اساس همين استاندارد است. مفسر خود برنامهاي کامپيوتري است که برنامة سطح بالا دادة ورودي آن و برنامة ايجاد شده به زبان ماشين خروجي آن را تشکیل میدهد.
به طور كلي ويژگيهاي مهم زبان C به اختصار به شرح زير است:
زبان C به طور گستردهاي در دسترس است. مفسرهاي تجارتي آن در بيشتر کامپيوترهاي شخصي، مينيکامپيوترها و نيز در کامپیوترهای بزرگ قابل استفادهاند.
C زباني است همه منظوره، ساختيافته سطح بالا (مانند زبان پاسکال و فورترن) و انعطافپذير كه برخي از خصوصيات زبانهاي سطح پايين را نیز كه معمولاً در اسمبلي يا زبان ماشين موجود است داراست. در عين حال اين زبان براي كاربردهاي ويژه طراحي نشده و ميتوان از آن در همة زمينهها، بخصوص به دليل نزديكي آن به زبان ماشين در برنامهنويسي سيستم، استفاده کرد. بنابراين C بين زبانهاي سطح بالا و سطح پايين قرار دارد و در نتيجه اجازه ميدهد كه برنامهنويس خصوصيات هر دو گروه زبان را به كار برد. از اين رو در بسياري از كاربردهاي مهندسي به طور انحصاري زبان C به كار ميبرند. (زبانهاي سطح بالا، دستورالعملهايي شبيه زبان انسان و پردازش فکري او دارند، همچنين يک دستورالعمل زبان سطح بالا معادل چند دستورالعمل به زبان ماشين است.)
برنامههاي نوشته شده به زبان C به طور كلي مستقل از ماشين يا نوع كامپيوتر است و تقريباً تحت كنترل هر سيستم عاملي اجرا ميشود.
مفسرهاي C معمولاً فشرده و كم حجماند و برنامههاي هدف ايجاد شده با آنها در مقايسه با ساير زبانهاي برنامهسازي سطح بالا، خيلي كوچك و كارآمدند.
برنامههاي C در مقايسه با ساير زبانهاي برنامهسازي سطح بالا، به راحتي قابل انتقالاند. دليل آن اين است كه C خيلي از ويژگيهاي وابسته به نوع كامپيوتر را در توابع كتابخانهاي خود منظور داشته است. بنابراين هر نسخه از C با مجموعهاي از توابع كتابخانهاي مخصوص به خود همراه است كه براساس ويژگيهاي كامپيوتر ميزبان مربوط نوشته شده است. اين توابع كتابخانهاي تا حدودي استاندارد است و معمولاً هر تابع كتابخانهاي در نسخههاي متعدد C به شکل يكسان در دسترس است.
C روش برنامهسازي ماژولار را پشتيباني ميكند. همچنين از نظر عملگرها نيز زبانی قوي است که عملگرهاي گوناگوني براي دستكاري روي دادهها در سطح بیت داراست.
به طور کلي جامعيت، عموميت، خوانايي، سادگي، کارآيي و پيمانهاي بودن که همگي از مشخصات برنامهای ايدهآلاند در زبان C پيادهسازي ميشوند.
ويژگيهاي فوق موجب شده زبان C يکي از قويترين و محبوبترين زبانهاي برنامهسازي در دنيا مطرح شود.
كاراكترها
زبان برنامهنويسي C مجموعهاي خاص از كاراكترها را شناسايي ميكند. اين مجموعه که در حکم مصالح اوليه جهت شکل دادن به اجزای اصلي برنامهاند عبارتاند از:
- حروف بزرگ و حروف كوچك. زبان C برخلاف زبان پاسكال بين حروف بزرگ و كوچك فرق ميگذارد. مثلاً FOR با for يكسان نيست.
- ارقام دهدهي. شامل 0 تا 9
- جاي خالي يا Blank
-كاراكترهاي مخصوص. شامل ^ % $ # @ ! + - = / \ * ? ( ) < > { } [ ] ~ ;. ,&
- كاراكترهاي فرمتبندی. که براي بيان حالتهای ويژهاي به کار ميروند و عبارتاند از كاراكترHorizontal Tab يا \t، كاراكترVertical Tab يا \v، كاراكتر خط جديد يا \n ، كاراكتر برگشت به عقب (Back Space) يا \b، كاراكتر تغذية فرم (Form Feed) يا \f، كاراكتر ابتداي سطر يا \r، كاراكتر تهي يا \0، و جز آن كه آنها را کاراکترهاي فرمان نيز مينامند. لازم به توضيح است که هر کاراکتر فرمان بيانکنندة تنها يک کاراکتر است هر چند که با دو يا چند کاراکتر نوشته ميشود.
شناسهها
شناسهها نشانههاي سمبوليكياند كه براي مراجعه به انواع دادهها مانند مقادير ثابت، متغيرها، نوعها و توابع به كار میروند. به عبارتي ديگر شناسه نامي است كه به عناصر مختلف برنامه مانند متغيرها، توابع، آرايهها، اشارهگرها و جز آن اختصاص مییابد. يك شناسة C دنبالهاي است از حروف، ارقام يا علامت زيرخط که با هر ترتيبي ميتوانند قرار گيرند. اما اولين کاراکتر بايد حرفی باشد. در شناسهها هر دو شکل حروف بزرگ و کوچک مجاز شناخته ميشوند. برحسب قرارداد شناسههايي كه با علامت زيرخط شروع ميشوند فقط در برنامههاي سيستم كاربرد دارند و در برنامههاي كاربردي قابل استفاده نيستند. در مورد تعداد کاراکترها در اسامي از نظر C محدوديتي وجود ندارد گرچه هر مفسر ويژگيها و محدوديتهاي خاص خودش را به كار ميبرد. طول اسامي در زبان C استاندارد تا 31 كاراكتر مجاز است.
v مثال 1ـ1 اسامي زير شناسههاي معتبرند.
x1 , sum , payam_noor , maximum
v مثال 1ـ2 اسامي زير شناسههاي غیرمعتبرند.
book-5 , 4s , $tax , "p" , number one
متغيرها
متغيرها در زبان C شناسههايياند كه محلهايي از حافظه را به خود اختصاص ميدهند. به عبارت ديگر متغير شناسهاي است که در ميان بخشی از برنامه براي نسبت دادن نوع تعيين شدهاي از اطلاعات مورد استفاده قرار ميگيرد. در سادهترين حالت هر متغير جانشين يک قلم داده میشود. متغير تركيبي است از ارقام، حروف و علامت زيرخط ( _ ). لازم به ذكر است متغيرهايي كه با علامت زيرخط شروع ميشوند براي متغيرهاي داخلي سيستم رزرو شدهاند. طول هر متغير در استاندارد ANSI تا 31 كاراكتر است، ولي در بعضي از مفسرهاي قديمي محدود به 8 كاراكتر است. تمامي متغيرهايي که در برنامههاي C به کار میروند بايد تعريف يا اعلان شوند. به يک متغير ميتوان دادههاي مختلفي در محلهاي گوناگون برنامه نسبت داد. بنابراين مقدار متغير در طول اجراي برنامه ممکن است تغيير کند.
بعضي از شناسههاي زبان C كلمات رزرو شده يا كليدياند. يعني معني و مفهوم آن از قبل در زبان تعريف و پيشبيني شده است. بنابراين شناسههاي تعريف شدة برنامهنويس نیستند. متداولترين كلمات كليدي زبان Cدر زير نشان داده شده است.
for
goto
else
If
Char
float
int
main
enum
register
return
signed
default
while
do
double
sizeof
static
struct
auto
Case
short
coutinue
const
union
unsigned
extern
typedef
Void
switch
long
break
البته در بعضي از مفسرهاي زبان C ممكن است كلمات كليدي ديگري نيز وجود داشته باشد كه بايد به كتاب راهنماي مربوط مراجعه کرد. همچنين توجه داشته باشيد كه همة كلمات كليدي با حروف كوچك نوشته ميشوند. پس main كلمة كليدي است درحالي كه Main كلمة كليدي نیست زيرا حرف اول آن بزرگ است. همين طور void کلمة کليدي است اما VOID کلمة کليدي نيست.
علامت توضيح
در زبان C هر عبارتي كه بين دو علامت */ و /* قرار گيرد صرفاً توضيح محسوب ميشود. مثلاً اگر بخواهيم در مورد دستوری توضيح دهيم كه چه كاري انجام ميدهد در هر جاي برنامه كه فضاي خالي مجاز باشد ميتوان براي توضيح از علامت فوق استفاده كرد. (در اغلب نسخهها علامت // هم مجاز است.)
v مثال 1ـ3 در برنامة زير از علامت توضيح استفاده شده است.
#include
main ()
{
int j , k ;
for (j =1 ; j <= 10 ; j+ +) /* outer loop */
{
printf("%5d ", j) ;
for (k=1; k<=10; k+ +) /* inner loop */
printf("%5d", j * k) ;
printf("\n") ;
}
}
ساختار برنامههاي C
در زبان C برنامهها با فرمت خاصي نوشته ميشوند. همة برنامههاي C شامل يك يا چندين تابعاند كه فقط يكي از آنها تابع اصلي يا main ناميده ميشود. بنابراين هر برنامه فقط يك تابع اصلي دارد. برنامه هميشه با اجراي تابع اصلي آغاز ميگردد. معرفي توابع ديگر ممكن است قبل و يا بعد از تابع اصلي قرار گيرد. به طور كلي ميتوان گفت كه هر برنامه به زبان C حداقل داراي اجزاي مقدماتي به ترتيب زير است.
دستورالعملهاي اجرايي
در هر برنامه دستورالعملهاي اجرايي بايد بعد از تعريف متغيرها درج شوند. دستوري قابليت اجرا دارد كه در پايان آن دستور، علامت سميكولون (;) نوشته شود. براي فهم بهتر اين موضوع به مثال زير توجه کنيد.
v مثال 1ـ4 برنامهاي بنويسيد كه مساحت مستطيلي به طول 6 و عرض 3 را محاسبه و چاپ كند.
#include
main()
{
int length , width , S ; /* variable declaration */
length = 6 ;
width = 3 ;
S = length * width ;
printf ("area = %d", S) ;
}
پس از اجراي برنامه، خروجي برنامه به صورت زير نمايش داده ميشود.
area = 18
توضیح. برنامه با حروف کوچک تايپ شده است. توضيحات نيز معمولاً با حروف کوچک تايپ ميشوند. در زبان C حروف بزرگ و کوچک معادل يکديگر نیستند. خط اول برنامه اعلان ميكند كه كتابخانة مربوط به توابع ورودي و خروجي براي دستيابي به توابع آن آماده شود. در واقع ارجاع به فايلي است که شامل اطلاعاتي است که هنگام تفسیر بايد در برنامه قرار گيرند. C يكي از زبانهايي است كه به لحاظ داشتن توابع توكار يا از پيشفرض شده بسيار غني است. هر مجموعه از توابع كه عمليات ويژهاي را انجام ميدهد در مجموعهای با عنوان كتابخانه يا library قرار ميگيرد. توابعي كه عمليات ورودي و خروجي را انجام ميدهند در كتابخانهاي به نام stdio.h قرار دارند كه در آن stdio به معني standard input output (ورودي و خروجي استاندارد) و h نيز معرف header يا عنوان است. تابع printf نيز يكي از توابع خروجي است.
حال به توضيح #include ميپردازيم. برنامههاي نوشته شده به زبان C قبل از اينكه بهوسيلة مفسر ترجمه شوند در اختيار برنامة ديگري با عنوان پيشپردازنده يا preprocessor قرار ميگيرند. يكي از كاربردهاي اصلي اين برنامه آن است كه كتابخانههاي مورد نياز برنامة منبع را يعني كتابخانههايي را كه توابع به كار رفته در برنامة منبع را شامل است براي استفاده آماده میکند. اين كار با دستور include كه در ابتداي آن علامت # و به دنبال آن نام كتابخانه در داخل علامت <> يا " " ميآيد انجام ميگيرد. اولين عبارت در برنامة بالا همين كار را براي ما انجام ميدهد.
در خط بعد تابع اصلي تعريف شده است. پرانتز خالي به دنبال نام تابع بيان ميکند که اين تابع آرگوماني ندارد. چند خط بعدي، متن برنامة اصلي را تشكيل ميدهند كه از پنج دستور ساده تشكيل شده است. پايان هر دستور را علامت سميكولون (;) مشخص مينمايد. چون متن برنامه بيش از يك دستور است مجموع آنها که دستور مركب يا بلاك را تشکیل میدهند در داخل يك زوج آكولاد قرار میگیرند. در واقع هر آكولاد چپ براي مفسر C به معني شروع بلاك و هر آكولاد راست معرف پايان آن است. البته در بعضي مواقع برحسب مورد آكولادها را ميتوان به صورت تودرتو نيز به كار برد.
اولين دستور در متن برنامه يا همان شروع آكولاد، توصيف متغيرهاست. سه دستور بعدي دستورات محاسباتي و جايگزينياند و در آخر نيز دستور خروجي است كه در آن تابع printf براي چاپ فرمتدار است. اولين آرگومان تابع مذكور متن داخل گيومه است كه تابع آن را به همان صورت در خروجي چاپ ميكند. البته بعضي از قسمتهاي متن كه شامل علامت % باشد مانند %d به مفسر اطلاع ميدهد كه اولين متغير بعد از بسته شدن گيومه كه در اين مثال S است مقادير صحيح ميپذيرد. در اينجا d معرف decimal است و %d فرمت متغير در خروجي را تعريف ميكند. در فصلهاي بعدي به طور كامل به بحث فرمت متغيرها خواهيم پرداخت.
v مثال 1ـ5 برنامة زير طول و عرض مستطيلي را از طريق ورودي استاندارد ميخواند و با فراخواندن تابعي به نام Rectangle مساحت آن را محاسبه میکند و سپس طول و عرض و مساحت را در دستگاه استاندارد خروجي نمايش ميدهد. طول با a و عرض با b و مساحت با area مشخص میشود.
# include
main ()
{
int a , b , area ;
int Rectangle (int a , int b) ;
scanf ("%d %d" , &a , &b) ;
area = Rectangle (a , b);
printf ("\n length = %d width = %d area = %d" , a , b , area) ;
}
int Rectangle (int a , int b) ;
{
int s ;
s = a * b ;
return (s) ;
}
اگر 5 = a و 4 = b، خروجي برنامة مذكور به صورت زير خواهد بود.
length = 5 width = 4 area = 20
توضيح. خط اول ارجاع به فايل کتابخانهاي، خط دوم تعريف تابع اصلي، خط سوم شروع تابع اصلي، و خط چهارم اعلان متغيرهاست. در خط پنجم تابع فرعي Rectangle اعلان شده است كه مقدار صحيح برميگرداند و آرگومانهاي آن نيز a و bاند كه مقادير صحيحاند. در خط ششم، تابع ورودي استاندارد scanf به كار رفته است. اين تابع كه جزء كتابخانة stdio.h است، اطلاعات را از طريق ورودي استاندارد كه صفحه كليد است دريافت ميكند. فرمت و ساز و كار اين گونه توابع را در فصلهای بعد بررسي میکنیم. در اينجا يادآور ميشويم كه فرم كلي تابع مزبور به صورت زیر است.
scanf (control string , argl , arg2 , … , argn) ;
كه در آن رشتة كنترل كه در داخل گيومه ("") میآید، اطلاعات مورد نياز دربارة فرمت اقلام دادههاي ورودي را شامل میشود و عناصر arg1 , arg2 ,... argn نيز آرگومانهايياند كه اقلام دادههاي ورودي را معرفي ميکنند. در اين دستور کاراکتر "&" عملگر آدرس است. در رشتة كنترلي نيز كه در داخل گيومه قرار دارد، از چپ به راست %d اول معرف فرمت اولين آرگومان يا دادة ورودي به عنوان عدد صحيح است و به دنبال آن %d دوم نيز معرف فرمت دومين آرگومان به عنوان عدد صحيح است. علامت \n در رشتة كنترلي تابع printf، موجب انتقال به سطر جديد ميگردد. بنابراين اطلاعات بعدي در سطر جديد چاپ خواهد شد.
خودآزمایی 1
1. كدام يك از اسامي زير مجاز است به عنوان نام متغيردر برنامه به كار رود؟
Integer, -19, Lesson four, Unit_25, define, Loop2, Star565void, Please?, Payam_noor, C+ +, S#, Five$
2. برنامة زير مساحت مربعي به ضلع 5 سانتیمتر را محاسبه و چاپ ميكند. قسمتهاي مختلف آن را شرح دهيد.
#include
main()
{
int x , S ;
x = 5 ;
S = x * x ;
printf ("area = %d", S) ;
}
3. ويژگيهاي برنامة ايدهآل را شرح دهيد.
4. چند نمونه از زبانهاي سطح بالا، سطح پايين و سطح مياني را نام ببريد.