فصل اول: طراحي الگوريتم

اگر در مراحل حل يک مسئله دقت کنيم مي بينيم که هر شخص بسته به سطح دانش و توانايي علمي خود مسئله را به مسائل کوچکتري که قابل حل باشند تقسيم مي کند و از حل نمودن متوالي مسائل کوچک نتيجه کلي مسئله را بدست مي آورد.

به مراحل حل يک مسئله که با ترتيب و توالي خاصي پشت سر هم قرار مي گيرند الگوريتم مي گوئيم که البته هر الگوريتم داراي ويژگي هاي زير مي باشد:

1-     داراي يک نقطه شروع و يک نقطه خاتمه است.

2-     داراي ترتيب در مراحل است.

3-     هر مرحله کارا است؛ يعني هر مرحله مارا بطور کارايي به جواب نزديک تر مي کند.

4-     تمامي مراحل بصورت دستي قابل اجرا هستند.

اکنون به بررسي نمونه اي از الگوريتم مي پردازيم:

فرض کنيد مي خواهيم معدل سه عدد 3، 5 و 7 را محاسبه نمائيم. حل اين مسئله را از ديد سه شخص با سطح دانش و توانايي علمي متفاوت بررسي مي کنيم.

شخص اول مي تواند با ديدن سه عدد و بدون نياز به محاسبه و اصطلاحاً بطور ذهني تشخيص دهد که ميانگين اين سه عدد برابر عدد 5 است. در اين مورد الگوريتم بصورت زير است:

1-     شروع

2-     سه عدد را بگير

3-     ميانگين سه عدد را بياب

4-     ميانگين را نمايش بده

5-     پايان

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

1-     شروع

2-     سه عدد را بگير

3-     سه عدد را با هم جمع کن

4-     حاصل جمع را بر سه تقسيم کن

5-     حاصل تقسيم را نمايش بده

6-     پايان

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

1-     شروع

2-     سه عدد را بگير

3-     سه عدد را با هم جمع کن

4-     معدل را برابر صفر فرض کن

5-     از حاصل جمع سه تا کم کن

6-     به معدل يکي اضافه کن

7-     اگر حاصل جمع از سه کمتر نشد بروبه 5

8-     معدل را نمايش بده

9-     پايان

همانگونه که مي بينيد مسئله تقسيم را نيز به مسائل کوچکتر تفريق و مقايسه تبديل نموده ايم. با توجه به نمونه الگوريتم فوق گاهي لازم است که با استفاده از يک سري دستورات مثل برو به روال ترتيب اجراي الگوريتم را تغيير دهيم. به اين گونه دستورات که معمولا به همراه يک کلمه اگر مي آيد دستورات کنترلي مي گوييم.

با فرض اينکه سه عددي که به الگوريتم تحويل داده مي شود 3 و 5 و 7 باشد جدول اجراي دستي الگوريتم بالا بصورت زير است:

A                     B                     C                     حاصل جمع                      معدل 

3                      5                      7                      15                                0

                                                                        12                                1

                                                                        9                                  2

                                                                        6                                  3

                                                                        3                                  4

                                                                        0                                   5

همانگونه که انتظار مي رفت نتيجه برابر 5 است.


فصل دوم: فلوچارت

در اين فصل به بيان نحوه رسم نمودارهاي دنبال شدني (flowchart)ها مي پردازيم و مثالهاي فصل گذشته را با استفاده از اين نمودارها پياده سازي مي کنيم.

فلوچارت ها از اجزايي هندسي تشکيل شده اند که هرکدام بيان گر مفهوم خاصي هستند. در زير برخي از اين شکال به همراه معنايشان را مشاهده مي کنيد:

 

 

      ورود داده                               پردازش                       تصميم گيري                  چاپ در خروجي

اکنون مثالهاي فصل قبل را با استفاده از فلوچارت نمايش مي دهيم تا اين مفهوم بهتر روشن شود:

مثال اول:

 


مثال دوم:

مثال سوم:


فصل سوم: ساختار برنامه در زبان C

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

زبان C يک زبان ساخت يافته است يعني برنامه به کمک توابع به بخشهاي مجزا تقسيم مي شود و در نوشتن برنامه از مفهوم بلوک استفاده مي شود. هر بلوک بين دو علامت { } قرار مي گيرد. همچنين در زبان C تا متغيري تعريف نشود نمي توان از آن متغير استفاده نمود. به اين خاصيت برنامه نويسي از بالا به پايين مي گويند. انتهاي هر دستور در زبان C با يک علامت نقطه ويرگول (;) مشخص مي شود. اين زبان نسبت به حروف کوچک و بزرگ حساس مي باشد، اين مبحث را در آينده بيشتر مورد بحث قرار مي دهيم.

يک نمونه از برنامه اي به زبان C بصورت روبرو است:

#include <stdio.h>

int i;

float a;

main()

{

            i = 10;

            a = i*i*3.14;

            printf(“Area = %f”, a);

}

تمامي برنامه هاي زبان C از بلوک اصلي که تابعي به نام main() مي باشد تشکيل شده اند. متن اصلي برنامه که قرار است اجرا شود بايد درون اين بلوک نوشته شود. برنامه هايي که شما در اين درس خواهيد نوشت جهت انجام اعمال ورودي و خروجي استاندارد از فايل سرآيند stdio.h استفاده مي کنند. پس خط اول اين برنامه را بايد در ابتداي تمامي برنامه هاي خود داشته باشيد. خطوط دوم و سوم تعريف متغيرها هستند که بعدا مورد بحث قرار مي گيرند. محتويات داخل بلوک دستورات برنامه هستند که در اثر اجراي آنها مساحت يک دايره محاسبه و چاپ مي شود. اگر اکنون متن برنامه براي شما قابل فهم نيست نگران نباشيد چراکه در اينجا فقط شکل ظاهر يک برنامه ساده مورد توجه است.

مطالب فوق قوانيني کلي را شامل مي شود که در هر برنامه زبان C معمولا وجود دارند و بايد رعايت شوند. اکنون به اين مطلب مي پردازيم که اجزاء تشکيل دهنده دستورات زبان C چه چيزهايي هستند؟ بطور کلي اين اجزاء شامل چند دسته هستند: کلمات کليدي، شناسه ها، عملگرها و … . کلمات کليدي مثل کلمات کليدي محاوره بين انسانها هستند. مثلا در زبان فارسي کلمه «اگر»، «آنگاه» و … کلمات کليدي به حساب مي آيند و نمي توانند به عنوان اسامي اشياء بکار روند. در زبان C کلماتي نظير int, do, if, elseو … کلمات کليدي بوده و نمي توانند غير از استفاده تعريف شده خود، مورد استفاده ديگري قرار گيرند.

دسته ديگر شناسه ها هستند که شامل نامهايي هستند که به توابع و متغيرها و غيره داده مي شود. نام يک شناسه مي تواند يک تا 32 کاراکتر باشد و اولين کاراکتر آن مي تواند يک حرف يا underline باشد. کاراکترهاي بعدي مي توانند حروف، اعداد يا underline باشند. در نام متغيرها و شناسه ها علائم خاصي مانند ? ! $ % & و … مجاز نمي باشد.

با عملگر ها در فصل هاي بعد آشنا خواهيد شد.


فصل چهارم: متغيرها و انواع داده

در يک برنامه برخي مقادير را بطور موقت نگهداري مي کنيم تا در انجام محاسبات از آنها استفاده نمائيم. بعنوان مثال در فصل دوم، در فلوچارتهاي هر يک از مثال ها مقاديري که قرار است معدل آنها را محاسبه کنيم و همچنين حاصل معدل را نگهداري مي کنيم و در مرحله يا مراحل بعد از آنها استفاده مي کنيم. جهت نگهداري اين مقداير از مفهومي استفاده مي کنيم که آنرا  متغير مي ناميم. اين متغيرها در واقع مانند ظرفهايي در حافظه برنامه هستند که مي توانند مقادير مختلف را در خود نگهداري کنند؛ به عبارت ديگر مقادير آنها مي تواند تغيير کند. در اين فصل به بررسي اين متغيرها، انواع داده اي که مي توانند در خود بگيرند و نحوه ساختن آنها در برنامه مي پردازيم.

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

انواع داده ها در زبان C به پنج نوع اصلي تقسيم مي شود: int ، float، double، char و void نوع داده int اعداد صحيح را در بر مي گيرد. نوع داده هاي float و double اعداد اعشاري را در بر مي گيرند و نوع داده char کاراکترهاي اسکي را در خود جاي مي دهد. در اين جزوه نوع void را مورد بررسي قرار نمي دهيم.

مطلب قابل توجه اين است که برخي از انواع داده فوق مي توانند تحت تأثير modifierها با قابليتهاي مختلفي ظاهر شوند؛ بعنوان مثال نوع داده int در حالت عادي اعداد صحيح در بازه [-32768 , +32767] را در خود جاي دهند اما تحت تأثير modifierي با عنوان unsigned اين محدوده به [0 , +65535] تغيير مي کند. در جدول زير انواع داده به همراه modifireهاي مجاز و محدوده مقاديري که مي توانند در خود جاي دهند را مي بينيد.

Type

Bytes

Range

char = signed char

1

-128 ~ +127

unsigned char

1

0 ~ 255

short char = long char = char

1

-128 ~ +127

unsigned short char

1

0 ~ 255

unsigned long char

1

0 ~ 255

int = signed int = short int = signed short int

2

-32768 ~ +32767

unsigned int = unsigned short int

2

0 ~ 65535

long int = signed long int

4

-231 ~ +231-1

unsigned long int

4

0 ~ 232-1

float = short float

4

3.4 * 10-38 ~ 3.4 * 1038

double = short double = long float

8

1.7 * 10-308 ~ 1.7 * 10308

long double

10

10-4932 ~ 104932

همانگونه که مي بينيد برخي از انواع با يکديگر متناظرند. بايد دقت داشته باشيد درصورتي که بخواهيم مقداري از نوع اعشار را در متغيري از نوع صحيح بريزيم درست مانند ريختن آب در آبکش بوده و باعث بروز خطا در برنامه مي شود.

در ادامه به نحوه تعريف و ساخت متغير در يک برنامه مي پردازيم. همانگونه که در فصل سوم بحث شد در زبانهاي از بالا به پايين مثل زبان C ابتدا بايد يک متغير ساخته شود يا در اصطلاح تعريف شود تا بتوان از آن استفاده نمود. در نمونه برنامه اي که در فصل سوم آمده است خطوط دوم و سوم شامل تعريف متغير مي باشند. همانگونه که مي بينيد در تعريف يک متغير ابتدا نوع و سپس شناسه يا شناسه هاي متغير يا متغيرها و در انتها علامت نقطه ويرگول مي آيد. در زير نمونه هاي ديگري از تعريف متغير را مشاهده مي نماييد.

int  i, j, k;

float  x, z;

char  ch1,  _ch23;

در فصول بعد با بکار بردن اين مفاهيم در برنامه هاي خود از دانستن اين مطالب لذت خواهيد برد.


فصل پنجم: عملگرها

همانگونه که در فصل سوم نيز اشاره شد يکي از اجزاء برنامه ها به زبان C عملگرها هستند که در اين فصل به بررسي برخي از آنها خواهيم پرداخت. عملگرها در يک دسته بندي کلي مي توان به عملگرهاي رياضي، عملگرهاي رابطه اي، عملگرهاي منطقي و چند دسته ديگر تقسيم نمود که بنا به نياز تنها به تشريح برخي از آنها مي پردازيم.

اولين عملگري که زياد مورد توجه ما است عملگر انتساب ( = ) است. اين عملگر داراي دو عملوند است و هميشه ارزش عملوند سمت چپ خود را برابر با عملوند سمت راست خود قرار مي دهد. از اين مطلب نتيجه مي گيريم که عملوند سمت چپ حتما بايد يک متغير باشد؛ اما عملوند سمت راست مي تواند يک عبارت، مقدار ثابت و يا يک متغير باشد. البته درصورتي که بين نوع عملوند سمت راست و عملوند سمت چپ اختلاف نوع وجود داشته باشد درصورتي که تبديل نوع مجاز باشد تغيير نوع نيز صورت مي گيرد. درغير اين صورت خطا رخ مي دهد. حالات مجاز جهت انجام تغيير نوع به شرح زير است:

1-     اگر يک مقدار اعشاري به متغير صحيح نسبت داده شود قسمت اعشار آن حذف مي شود (توجه کنيد گرد نمي شود بلکه حذف مي شود). البته ممکن است از قسمت صحيح نيز از بين برود.

2-     هنگامي که عبارت صحيح دو بايتي يا چهار بايتي به يک متغير کاراکتري (يک بايتي) نسبت داده مي شود، تنها يک بايت سمت راست عدد صحيح در متغير کاراکتري ريخته مي شود و بيتهاي ديگر سمت چپ از بين مي رود.

3-     هنگامي که عبارت صحيح چهار بايتي (long) به متغير صحيح دو بايتي نسبت داده مي شود، دوبايت سمت راست عدد long در متغير سمت چپ ريخته شده و دو بايت ديگر از بين مي رود.

4-     هنگامي که عبارت double سمت راست به متغير float سمت چپ ريخته مي شود دقت کاهش مي يابد، يعني تعدادي از اعشار حذف شده و حاصل گرد مي شود.

5-     به طور کلي عبارت با دقت و تعداد بايت کمتر مي تواند به راحتي در متغير سمت چپ که دقت بيشتر (تعداد بايت بيشتري) دارد ريخته شود و مشکلي در اين حالت پديد نمي آيد.[1]

نمونه هايي از کاربرد عملگر انتساب را در زير مي بينيد:

i = 5 * x;

c = ‘A’;

x = 256;

f1 = 12.87;

عملگرهاي رياضي را به دو دسته دوتايي (Binary) و يکتايي (Unary) تقسيم مي کنيم. عملگرهاي دوتايي داراي دو عملوند هستند و عملگرهاي يکتايي داراي تنها يک عملوند هستند. عملگرهاي دوتايي عبارتند از +، -، *، / و % . عملگر % باقيمانده تقسيم عملوند اول بر عملوند دوم خود را محاسبه مي کنند. آنچه در اينجا مهم است اولويت و ترتيب اجراي اعمال در يک عبارت است. بعنوان مثال مقدار x در عبارت زير چند مي شود؟

x = 4 + 5 + 6 / 3;

در نگاه اول ممکن است به اشتباه x را برابر با ميانگين سه عدد 4، 5 و 6 يعني عدد 5 بدست آوريم اما آنچه مهم است اينکه عملگر / داراي اولويت بالاتري نسبت به عملگر + است و ابتدا عمل تقسيم بين 6 و 3 انجام شده سپس حاصل با 4 و 5 جمع شده نتيجه برابر 11 خواهد شد. در بين عملگرهاي رياضي که گفته شد اوليت عملگرها به ترتيب زير است:

* /

+ – %

هنگامي که دو عملگر داراي اولويت يکسان باشند عملگر سمت چپ ابتدا اعمال مي شود.

توضيح ديگر درباره عملگر تقسيم / است که درصورتي که عملوندهاي آن هر دو صحيح باشند نتيجه تقسيم صحيح خواهد بود. به عبارت ديگر نتيجه برابر خارج قسمت صحيح خواهد بود. به عنوان مثال حاصل عبارت زير برابر عدد 6 است:

int a, b;

a = 20;

b = 3;

x = a / b;

عملگرهاي يکتايي رياضي در زبان C عبارتند از عملگر منفي ( – ) عملگر افزايش ( ++ ) و عملگر کاهش ( — ). عملگر منفي اعداد منفي را به عدد مثبت و اعداد مثبت را به عدد منفي تبديل مي نمايد و نسبت به ديگر عملگرهاي رياضي داراي اولويت بالاتري است. عملوند عملگرهاي افزايش و کاهش تنها متغيره ها مي توانند باشند. عملگر افزايش يک واحد به مقدار متغير افزوده و عملگر کاهش يک واحد از مقدار متغير مي کاهد.

اولويت عملگرهاي کاهش و افزايش نکته بسيار جالب و حساسي است. درصورتي که اين عملگر در سمت چپ عملوند خود بيايد داراي بيشترين اولويت است و درصورتي که در سمت راست عملوند خود بيايد داراي کمترين اولويت است. به مثالهاي زير توجه کنيد.

int x, y, z;

x = 2;

y = 4;

z = x++ * y;

در مثال فوق ابتدا حاصل ضرب يعني 4 * 2 انجام مي شود و مقدار 8 در متغير z ريخته مي شود و سپس مقدار متغير x يکي افزايش يافته و برابر با 3 مي شود.

int x, y, z;

x = 2;

y = 4;

z = ++x * y;

در مثال فوق ابتدا مقدار متغير  x يکي اضافه شده و برابر با 3 مي شود و بعد از آن محاسبه انجام مي شود. نتيجه اين محاسبه برابر 12 خواهد بود. در مورد عملگر — نيز وضعيت به همين صورت است.

در ادامه به بررسي عملگرهاي رابطه اي و منطقي مي پردازيم. اين دو دسته از عملگرها با مفاهيم منطقي صحيح (True) و غلط (False) سروکار دارند. حاصل يک عمليات رابطه اي همواره يک مقدار صحيح يا غلط است. عملگرهاي رابطه اي عبارتند از: کوچکتر (<)، کوچکتر يا مساوي (<=)، بزرگتر (>)، بزرگتر يا مساوي (>=)، مساوي (==) و نا مساوي (!=). به عنوان مثال حاصل عبارت 6 <= 4 برابر با مقدار منطقي غلط است.

نتيجه هر کدام از عبارات زير در مقابل آن نوشته شده است:

int x, y, z;

x = 100;

y = 50;

z = 60;

x <= 100;         à True

y == 10;           à False

z != 0;              à True

x != z;              à True

z > y;               à True

x < y;               à False

بين عباراتي که ارزش منطقي صحيح/غلط دارند مي تواند عملگرهاي منطقي «و»(&&)، «يا»(||) يا «نه»(!) قرار گيرد. نتيجه اين عملگرها در حالات مختلف در جدول زير آمده است:

P

Q

P && Q

P || Q

! P

True

True

True

True

False

True

False

False

True

False

False

True

False

True

True

False

False

False

False

True

در مثال زير حاصل عبارات در مقابل آنها نوشته شده است:

int x, y, z;

x = 100;

y = 50;

z = 60;

x <= 100 && y == 10;           à False

z != 0 || x != z;                      à True

!(z > y);                                  à False

به مثالي که از عملگرهاي مختلف در زير آمده توجه کنيد و مقداير متغيرها را در انتهاي برنامه بررسي کنيد:

#include <stdio.h>

int x, y, z;

float f;

main()

{

x = 10;

y = 5;

z = 6;

z = 28 % y++;

f = x– / ++ y;

}

با اجراي برنامه فوق ابتدا متغيرهاي x، y و z به ترتيب مقادير 10، 5 و 6 به خود مي گيرند. در اولين محاسبه ابتدا باقي مانده تقسيم عدد 28 بر مقدار y (که مقدار y برابر 5 است) يعني عدد 3 در متغير z ريخته مي شود. سپس مقدار y يکي افزايش يافته و برابر 6 مي شود. در سطر بعد ابتدا مقدار y يکي افزوده شده و برابر 7 مي شود، سپس مقدار x يعني عدد 10 بر y که 7 است تقسيم مي شود که البته اين يک تقسيم عدد صحيح است و نتيجه آن عدد صحيح يک (1) است؛ اين مقدار در متغير f ريخته مي شود و در آخر مقدار z يکي کم مي شود و برابر 9 مي شود.


فصل ششم: توابع ورودي و خروجي

در الگوريتم ها و فلوچارتهايي که بررسي کرديم دستوراتي جهت خواندن و نمايش يا چاپ مقادير و متغيرها وجود داشت. در اين فصل به توابعي که در زبان C اين اعمال را انجام مي دهند مي پردازيم. جهت انجام عمل خواندن مقدار از تابع scanf() و براي اجراي دستور نمايش و چاپ از تابع printf() استفاده مي کنيم. دقت داشته باشيد هر دو اين توابع با حروف کوچک نوشته شده اند.

قالب کلي تابع printf() به صورت روبرو است                                             );ليست متغيرها يا مقادير  ” , رشته کنترليprintf(“

رشته کنترلي شامل دو نوع اطلاعات است. يکي کاراکترهايي که عينا روي مانيتور نمايش داده مي شود و ديگري دستورات قالب بندي است که مشخص مي کنند که مقادير و متغيرها به چه صورت نمايش داده شوند. اين دستورات از علامت % و يکي از کدهاي قالب بندي تشکيل شده است. در جدول زير دستورات قالب بندي آورده شده است.

Format

Code

يک کاراکتر را چاپ مي کند

%c

عدد Decimal

%d

عدد Decimal

%i

عدد اعشاري بصورت نماد علمي

%E يا %e

عدد اعشاري بصورت مميز شناور

%f

يک علامت %

%%

به مثالهاي زير توجه کنيد:

#include <stdio.h>

int x, y, z;

char c;

float f;

main()

{

x = 10;

y = 5;

z = 6;

c = ‘A’;

f = 3.14;

printf(“Maghadi = %d  %i  %d  %c  %f”, x, y, z, c, f);

}

خروجي برنامه فوق بصورت زير است:

Maghadir = 10 5 6 A 3.140000

مي توانيد با برخي دستورات کنترلي که در رشته کنترلي مي نويسيد محل مکان نما و نمايش مقادير را تا حدودي کنترل نمائيد. جدول برخي از اين دستورات را در زير مي بينيد.

کاراکتر

دستور کنترلي

\n

New line

\t

Horizontal tab

\b

Back space

\\

Backslash (\)

با توجه به جدول فوق به خروجي تکه کد زير دقت کنيد.

x = 10;

y = 5;

z = 6;

c = ‘A’;

f = 3.14;

printf(“X =  %d \n *** \n Y =  %i\n ***\n %d  %c \n %f”, x, y, z, c, f);

X = 10

***

Y = 5

***

6 A

3.140000

برنامه اي بنويسيد که مساحت دايره اي به شعاع 2 را محاسبه نموده و چاپ کند.

#include<stdio.h>

float area;

main ()

{

area = 2 * 2 * 3.14;

printf(“**********\n”);

printf(“Area is equal to: %f \n”, area);

printf(“**********”);

}

**********

Area is equal to: 12.560000

**********

براي اينکه بتوانيم مقاديري را از کاربر گرفته و به برنامه بدهيم از تابع scanf() استفاده مي کنيم که قالب کلي آن بصورت زير است:

scanf(“رشته کنترلي”, &ليست متغيرها با علامت );

رشته کنترلي در اين تابع تقريبا شبيه به رشته کنترلي در تابع printf() است. دقت داشته باشيد که به ازاء هر دستور کنترلي بايد متغيري را جهت پذيرفتن مقدار وارد شده در ليست متغيرها مشخص نمائيد. به مثالهايي که در ادامه آمده است توجه کنيد.

برنامه اي که شعاع يک دايره را از کاربر گرفته سپس مساحت و محيط آنرا محاسبه و چاپ مي کند.

#include<stdio.h>

int r;

float area, p;

main ()

{

            printf(“Please enter radius of circle:”);

            scanf(“%d”, &r);

area = r * r * 3.14;

p = 2 * r * 3.14;

printf(“**********\n”);

printf(“Area is equal to: %f \n”, area);

printf(“**********\n”);

printf(“P is equal to: %f \n”, p);

 

}

خروجی برنامه با فرض اینکه کاربر عدد 6 را وارد کند بصورت زیر است:

Please enter radius of circle: 6

**********

Area is equal to: 113.040000

**********

P is equal to: 37.680000

خروجی برنامه زیر چیست؟

i = 6;

j = 4;

printf(“I = %d , J = %d”, i++, ++j);

I = 6 , J = 5


فصل هفتم: ساختار کنترلی (ساختار شرط)

بسیاری مواقع در برنامه نیاز به این داریم که به ازای وجود شرایط مختلف دستورات متفاوتی را اجرا کنیم؛ در این گونه موارد از ساختارهای تصمیم گیری که به ساختار کنترلی معروف هستند استفاده می کنیم. در زبان برنامه نویسی C دو ساختار کنترلی متفاوت وجود دارد که در این جزوه تنها به بررسی ساختار کنترلی if می پردازیم.

ساختار کلی if بصورت زیر است:

If (شرط)

{

    دستوراتی که درصورت برقراری شرط اجرا می شود

}

else if (شرط)

{

    دستوراتی که درصورت برقرار نبودن شرط اول و برقرار بودن شرط دوم اجرا می شود

}

else

{

     دستوراتی که درصورت برقرار نبودن هیچکدام از شروط اجرا می شود

}

البته ساختار فوق می تواند در بسیاری موارد تغییر کند. مثلا ممکن است در یک ساختار شرط، قسمت else یا else if و یا هردو آنها حذف شوند. آنچه مسلم است قسمت if جزء لاینفک این ساختار می باشد.

به چند مثال از این ساختار که در ادامه آمده است توجه فرمائید:

مثال 1: برنامه ای که عددی بین 1 تا 3 را از ورودی گرفته و آنرا به حروف چاپ کند:

#include <stdio.h>

int n;

main()

{

            printf(“Enter an integer number (1-3):”);

            scanf(“%d”, &n);

 

            if (n == 1)

            {

                        printf(“ONE”);

}

            else if (n == 2)

            {

                        printf(“TWO”);

}

            else if (n == 3)

            {

                        printf(“THREE”);

}

else

{

            printf(“Out of range”);

}

}

مثال 2: برنامه ای که با گرفتن ضرائب یک معادله درجه دو ریشه های معادله را درصورت وجود بیابد و درصورتی که معادله ریشه ندارد پیغام مناسب نمایش دهد.

#include <stdio.h>

int a, b, c, d;

float x1, x2;

main()

{

            printf(“Enter A, B and C in Ax2 + Bx + C =0”);

            scanf(“%d %d %d”, &a, &b, &c);

 

            d = b * b * 4 * a * c;

 

            if (d > 0)

            {

                        x1 = (-b + sqrt(d)) / (2 * a);

                        x2 = (-b – sqrt(d)) / (2 * a);

                        printf(“X1 = %f, X2 = %f”, x1, x2);

}

            else if (d == 0)

            {

                        x1 = -b / (2 * a);

                        printf(“X = %f”, x1);

}

else

{

            printf(“No Root”);

}

}

مثال 3: برنامه ای که عددی را از کاربر گرفته و در صورتی که این عدد در بازه [0 – 20] باشد پیغام معتبر بودن و درغیر اینصورت پیغام نامعتبر بودن می دهد.

#include <stdio.h>

int n;

main()

{

            printf(“Enter a number:”);

            scanf(“%d”, &n);

 

            if (n >= 0 && n <= 20)

            printf(“Valid number.”);

else

            printf(“Invalid number.”);

}



[1] کتاب درس و کنکور زبان C – حميدرضا مقسمي-مرداد 81- فصل سوم