تبلیغات :
آکوستیک ، فوم شانه تخم مرغی، صداگیر ماینر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 1 از 6 12345 ... آخرآخر
نمايش نتايج 1 به 10 از 51

نام تاپيک: آموزش c مقدماتی

  1. #1
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض آموزش c مقدماتی

    مقدمات زبان C

    زبان C در سال 1970 توسط دنيس ريچي طراحي گرديد. اين زبان تكامل يافته زبان BCPL
    ميباشد كه طراح آن مارتين ريچاردز است ،و زبان BCPL از زبان B كه طراح آن
    كن تامپسون مي باشد ، نتيجه شده است .
    زبان C معمولا" يك زبان مياني ناميده مي شود . اين بدان معني نيست كه آموزش
    اين زبان مشكل است ، يا قدرت آن از زبان هاي برنامه سازي مثل پاسكال و بيسيك
    كمتر است و يا اين كه مشكلاتي مشابه زبان اسمبلي براي برنامه نويس ايجاد مي كند.
    علت مياني بودن زبان C اين است كه عناصر زبان هاي سطح بالا را با خصيصه تابعي
    زبان اسمبلي درهم آميخته است .براي پي بردن به جايگاه زبان C درمقايسه با ساير
    زبان هاي برنامه سازي به جدول (1) مراجعه نماييد .
    جدول (1) . سطوح زبان هاي برنامه سازي

    زبان C همانند ساير زبانهاي مياني با مفاهيم بيت ، بايت و آدرس كه از عناصر
    ابتدايي ماشين هستند سر و كار دارد . يعني در اين زبان مي توان محتويات بيت ها
    و بايت ها را تيز تغيير داد .
    برنامه هاي نوشته شده به زبان C براحتي از ماشيني به ماشين ديگر قابل انتقال
    مي باشند . مثلا" برنامه نوشته شده براي كامپيوتر APPL در كامپيوترهاي IBM قابل
    اجرا است . اين خصيصه را قابل حمل بودن (Portability) زبان مي گويند .
    كليه زبان هاي برنامه سازي سطح بالا و مياني داراي نوعهاي داده (data types)
    هستند . هر نوع داده ، مجموعه اي از مقادير را مشخص مي كند كه اعمال خاصي روي
    آنها قابل انجام است . نوع داده اي كه در اكثر زبانها وجود دارد عبارتند از :
    اعداد صحيح ، كاراكتري و اعداد اعشاري . C داراي 5 نوع داده اصلي است كه در آن
    تقريبا" تبديل هر نوع داده به نوع ديگر امكان پذير است . مثلا" در يك عبارت
    مي توان نوع كاراكتري را با نوع عددي صحيح و يا اعشاري تركيب كرد .
    زبان C خطاي زمان اجرا مثل boundray checking را چك نمي كند . منظور از boundray checking
    اين است كه در آرايه ها تجاوز از حدود مشخص شده ، به راحتي
    امكان پذير بوده و از نظر كامپايلر با خطايي مواجه نميشود. اين مساله برميگردد
    به اين كه در زبان C آرايه يك اشاره گر (pointer) است . در اين راستا ، نوع
    پارامترها و آرگومان هاي توابع نيز در گونه هاي قديمي C با يكديگر مطابقت نشده و
    از نظر كامپايلر با خطا مواجه نمي شد ولي در گونه هاي جديد C با معرفي الگوي
    تابع (Function prototype) اين مشكل رفع شده است . C
    همانند زبان هاي ALGOL، PASCAL، و... يك زبان ساخت يافته است . يك زبان
    برنامه سازي ساخت يافته امكانات زيادي ، از جمله استفاده از چند ساختار حلقه سازي
    مثل while، do-while،و forو را فراهم مي كند . در اين گونه زبان ها از goto به
    ندرت استفاده مي شود و نوشتن دستورات برنامه در هر ستوني از خط و در هر جاي
    فايل امكان پذير بوده ، مثل زبان فرترن مقيد به ستون هاي خاصي نيستند. استفاده
    از زيربرنامه ها و بلاك ها نيز از خصيصه هاي اين نوع زبان ها هستند . ذكر اسامي
    چند زبان ساخت يافته و غير ساخت يافته ، در انتخاب زبان برنامه سازي جهت برنامه
    نويسي مفيد است . ( جدول (2) ) .
    جدول (2) . بعضي از زبانهاي ساخت يافته و غيرساخت يافته

    هر برنامه در زبان C داراي خصيصه هايي است كه بعضي از آنها عبارتند از : 1
    در زبان C هر دستور برنامه به يك ; ختم مي شود . 2
    هر دستور ميتواند درچند خط ادامه داشته و يك خط ممكن است شامل چند دستور
    باشد . 3
    حداكثر طول يك خط برنامه 254 كاراكتر است . 4
    در زبان C برنامه نويس مي تواند در هر نقطه از برنامه ، بااستفاده از علائم {
    و }و يك بلاك را مشخص كرده و هر متغيري را كه مي خواهد در آنجا تعريف نمايد .
    اين متغيرها فقط در آن بلاك معني خواهند داشت . توجه داريم كه هر بلاك مجموعه اي
    از دستورات وابسته به يكديگر خواهد بود :
    ؤؤ { |

    بلاك | ; مجموعه دستورات } |

    ؤؤ 5
    براي داشتن توضيحات در برنامه كافي است آنها را دربين /*و *و/ قرار داد: *

    توضيحات /* C
    يك زبان ساخت يافته بلاكي نيست . اين بدان معني است كه تعريف يك زيربرنامه
    ( در اينجا تابع ) در زيربرنامه ديگر ( همانند پاسكال ) امكان پذير نيست و اين
    امر از مساله coupling مي كاهد . C
    زبان برنامه نويسي سيستم است . منظور از برنامه هاي سيستم عبارتند از : 1
    سيستم عامل (Operating system) 2
    مفسر (Interpreter) 3
    ويراستار (Editor) 4
    اسمبلر (Assrmbler) 5
    كامپايلر (Compiler) 6
    مديريت بانكهاي اطلاعاتي (Database management)
    امروزه C در اكثر امور برنامه نويسي مورد استفاده قرار مي گيرد . زيرا اين
    زبان هم داراي خصيصه " قابل حمل بودن " است و هم داراي كارآيي خوبي مي باشد و
    سرعت زياد C بر محبوبيت آن افزوده است . مساله قابل حمل بودن ، يك مساله بسيار
    مهم است زيرا هم موجب صرفه جويي در وقت شده و هم باعث صرفه جويي در هزينه ها
    مي گردد .
    زبان C فقط داراي 32 كلمه كليدي است ( جدول (3) ) كه 27 كلمه كليدي آن توسط
    ريچي ( طراح زبان ) معرفي شده و 5 كلمه كليدي ديگر توسط موسسه استاندارد سازي
    زبان به آن اضافه شده است . اين تعداد در مقايسه با 159 كلمه كليدي كه در زبان
    بيسيك وجود دارد قابل توجه است .


    | 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 |


    اضافه شدن توسط موسسه استاندارد سازي زبان
    جدول (3) . كلمات كليدي زبان C

    بعضي از كامپايلرها علاوه بر 32 كلمه كليدي جدول (3) كلمات كليدي ديگري به
    زبان اضافه نموده اند . ( جدول (4) ) .

    | asm | ess |- ds |- es |
    |- ss | cdecl | far | huge |
    | intrrupt | near | pascal | |


    جدول (4) . كلمات كليدي زبان C كه بعضي از كامپايلرها اضافه كرده اند

    كليه كلمات كليدي در زبان C به حروف كوچك نوشته مي شوند . چون در اين زبان
    بين حروف كوچك و بزرگ تفاوت است ، به عنوان مثال كلمه else يك كلمه كليدي است

  2. #2
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    انواع داده

    همان طور كه قبلا" گفته شد در هر زبان برنامه سازي تعدادي از نوع هاي داده
    وجود دارند كه بازه اي را شامل بوده و اعمال خاصي روي آنها انجام پذير است و در C
    پنج نوع داده اصلي وجود دارد كه عبارتند از : char، int،، float،، double، و void
    . در اين زبان اندازه و محدوده اي كه هر نوع داده اختيار مي كند بستگي به
    نوع پردازشگر (Processor) و نحوه پياده سازي كامپايلر دارد. شناسه هايي ( متغير
    برچسب ، اسامي توابع و ... ) كه از نوع char باشند براي ذخيره كردن مقاديري كه
    توسط كاراكترهاي اسكي تعريف شده اند به كار مي روند. شناسه هايي از نوع int براي
    ذخيره كردن مقادير صحيح ، و از نوع floatو doubleو براي ذخيره كردن اطلاعات عددي
    اعشاري به كار ميروند كه محدوده آنها توسط تعداد ارقام و دقت آنها مشخص ميشود.
    نوع void در مورد توباع به كار مي رود .
    نوعهاي داده اصلي ( به جز void ) مي توانند با عباراتي مثل signed، long، unsigned
    و shortو تركيب شده و نوع هاي ديگري را به وجود آورند . ( جدول (1) ).

    نوع | اندازه تقريبي به بيت | بازه قابل قبول |

    char
    |
    | 8 | 127- تا | 127 unsigned char
    |
    | 8 | 0 تا | 255 signed char
    |
    | 8 | 127- تا | 127 int
    |
    | 16 | 32767- تا | 32767 unsigned int
    |
    | 16 | 0 تا | 65525 signed int
    |
    | 16 | 32767- تا | 32767 short int
    |
    | 16 | 32767- تا | 32767 unsigned
    |
    | 16 | 0 تا | 65525 | | | short int |
    signed
    |
    | 16 | 32767- تا | 32767 | | | short int |
    long int
    |
    | 32 | َ2147483647- تا | 2147483647 |
    float | 32 | 6 رقم دقت | |
    double | 64 | 10 رقم دقت | |
    long double | 128 | 10 رقم دقت | |
    signed | 32 | َ2147483647- تا | 2147483647 | | | long int |
    |
    | uunsigned long int 32 | 0 تا | 4294967295
    ول (1) . نوعهاي تركيبي

  3. #3
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    متغير

    متغير، نامي براي يك محل حافظه است كه محتويات آن در طول اجراي برنامه ممكن
    است تغيير كند . اسم هر متغير شامل حروف aتا zا، A،تا Zا ، ارقام 0تا 9ا و خط
    ربط است . به طوري كه با يكي از حروف و يا خط ربط شروع شده باشند . طول نام هر
    متغير بستگي به نوع كامپايلر دارد كه معمولا"از 1ز تا 31 كاراكتر قابل استفاده
    است . بعضي از اسامي مجاز و غير مجاز در زير آمده اند :

    اسامي مجاز براي متغيرها | اسامي غيرمجاز براي متغيرها |

    | 1count | count |
    | high! there | test123 |
    | grad.1 | high |



    تعريف نوع متغير
    براي استفاده از متغيرها درC بايد ابتدا آنها را تعريف كنيم . تعريف متغيرها
    شامل نامگذاري و تعيين نوع آنها است كه به صورت زير انجام مي شود :
    <نوع> <اسامي متغيرها>
    يكي از انواع است كه قبلا<نوع>" شامل متغيرهايي <اسامي متغيرها> ذكر كرديم و
    است كه مي خواهيم داراي آن نوع باشند . براي تعريف چند متغير در يك دستور بايد
    اسامي با كاما از يكديگر جدا گردد : int var1/ var2;

    دستور فوق دو متغير به اسامي var2و var1و را از نوع int تعريف مي كند . float flovar1/ flovar2;

    دستور فوق ، دو متغير به نام هاي flovar2و flovar1و را از نوع float تعريف
    مي كند . double d1;
    char ch;

    اولين دستور ، d1 را از نوع double و دستور دوم متغير ch را از نوع char
    تعريف مي كند .

    مقدار دادن به متغيرها
    براي مقدار دادن به متغيرها مي توان به دو طريق عمل كرد: 1 به هنگام تعريف
    متغير . 2 پس از تعريف متغير . به عنوان مثال : int a=0;
    int b/ c/ d/ e=0;
    char ch= 'a';
    b=0;
    c=d=0;

    دستور اول ضمن تعريف a از نوع int مقدار آن را برابر با 0 قرار مي دهد .
    دستور دوم چهار متغيرb، c،، d،و eو را از نوع int تعريف كرده وفقط مقدار متغير ch
    را از نوع كاراكتري تعريف كرده و مقدار آن را برابر با حرف a قرار مي دهد .
    دستور چهارم مقدار متغير b را برابر با 0 قرار مي دهد . دستور پنجم مقدار دو
    متغير cو dو را برابر صفر قرار مي دهد و اين دستور ، انتساب چندتايي را مشخص
    مي كند .
    همان طور كه قبلا"گفته شد مقدار متغيرها ممكن است در طول اجراي برنامه تغيير
    كند . با استفاده از كلمه كليدي const مي توانيم متغيرهايي را تعريف كنيم كه
    مقدار آنها در طول اجراي برنامه ثابت باشد . براي تعريف اين نوع متغيرها بصورت
    زير عمل مي شود :
    <نوع> <اسامي متغيرها>const
    نوع ، يكي از نوع هايي است كه قبلا" ذكر شده و اسامي متغيرها ، مشخص كننده
    متغيرهايي است كه بايد به صورت ثابت تعريف شوند : const int a = 10 / b = 20;

    دستور فوق دو متغير aو bو را از نوع int تعريف كرده و مقادير آنها را برابر مي دهد . اين مقادير در طول اجراي برنامه قابل تغيير هستند .

  4. #4
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    عملگرها

    عملگرها نمادهايي هستند كه براي انجام اعمال خاصي مورداستفاده قرارميگيرند.
    عملگرها در زبان C از تنوع زيادي برخوردارند . در C چهار دسته عملگر به نامهاي
    ( محاسباتي ، رابطه اي ، منطقي و دستكاري بيت ها ) وجود دارند كه آنها را بررسي
    مي كنيم .

    عملگرهاي محاسباتي
    عملگرهاي محاسباتي كه در C مورد استفاده قرار مي گيرند در جدول (1) فهرست
    شده اند .

    رديف | عملگر | نام | مثال |

    1 | - | تفريق و منهاي يكاني | |-xx/x-y

    2 | + | جمع | | x+y

    3 | * | ضرب | | x*y

    4 | / | تقسيم | | x/y

    5 | % | باقيمانده تقسيم | | x%y

    6 | - - | كاهش يك واحد * | - -xيا xا - |-

    7 | ++ + | افزايش يك واحد * | x+ + يا | + +xا

    * decrement ** increment

    جدول (1) . عملگرهاي محاسباتي

    عملگرهاي رديف 1تا 4ا در جدول (1) تقريبا" در همه زبانهاي برنامه سازي وجود
    دارند. عملگر % كه در بقيه زبانها با علامت ديگري ( مثلا" در بيسيك به صورت MOD)
    وجود دارد باقيمانده تقسيم دو عدد را محاسبه مي كند : x= 13;
    y= 5;
    z= x%y;

    اگر سه دستور فوق را توسط ماشين اجرا كنيم مقدار3 كه باقيمانده تقسيم 13 بر 5
    است در z قرار مي گيرد .
    عملگر كاهش ، يك واحد از عملوند مربوط كم مي كند . x= 10;
    - - x;

    دستور x - - از x يك واحد كم مي كند و نتيجه را در x قرار مي دهد كه معادل
    دستور 1 + َx = x-1 است .
    عملگر افزايش ، يك واحد به عملوند مربوطه اضافه مي كند : x= 40;
    ++x;

    دستور ++x معادل دستور x = + 1 است كه موجب افزودن يك واحد به x مي شود .
    عملگرهاي افزايش و كاهش يك واحد را مي توان بعداز عملوند مربوطه نيز به كار
    برد مثل : x + + و - - x .
    اگر در يك عبارت از عملگرهاي افزايش و كاهش يك واحد ، استفاده كنيم به كار
    بردن اين عملگرها در قبل و بعد از عملوند مربوطه ، با يكديگر متفاوت است . بدين
    معني كه اگر اين عملگرها قبل از عملوند باشند مقدار فعلي عملوند مورد استفاده
    قرار گرفته و سپس عملگرها بر روي آن عمل ميكنند، ولي اگر بعد از عملوند مربوطه
    باشند پس از انجام عمل افزايش و كاهش يك واحد به آنها مقادير جديد ، در عبارت
    مورد استفاده قرار مي گيرند. استفاده ازعملگرهاي افزايش و كاهش يك واحد ، سرعت
    محاسباتي را بالا مي برد .
    اگر در يك عبارت از چند عملگر محاسباتي استفاده شود ، مساله تقدم عملگرها
    مطرح مي شود . ( جدول (2) ) .

    بالاترين تقدم - - | + + |
    تفريق يكاني - | | * / % |
    |
    پايين ترين تقدم - | +

    جدول (2) . تقدم عملگرهاي محاسباتي

    همان طور كه در جدول (2) مشاهده مي شود ، عملگرهاي افزايش و كاهش يك واحد
    داراي بالاترين تقدم و عملگرهاي جمع و تفريق داراي كمترين تقدم هستند و منهاي
    يكاني ، داراي دومين تقدم است . عملگرهايي كه در يك سطر آمده اند ، مثل - و +
    بدين معني است كه داراي تقدم مكاني نسبت به يكديگر هستند. در اين صورت هر كدام
    از غملگرها كه اول ظاهر شود ، زودتر انجام خواهد شد .

    عملگرهاي رابطه اي
    عملگرهاي رابطه اي براي تشخيص ارتباط بين عملوندها يا مقايسه آنها مورد
    استفاده قرار مي گيرند ( جدول (3) ) .

    عملگر | نام | مثال |

    > | بزرگتر | y >x | >

    = >|> بزرگتر مساوي | =y >x | >

    < | كوچكتر | y
    = <|< كوچكتر مساوي | =y
    == | = مساوي بودن | | x=x==y

    != | ! نامساوي | | x=x!=y

    جدول (3) . عملگرهاي رابطه اي

    نكته قابل ذك درمورد عملگرهاي رابطه اي اين است كه عملگر== براي تشخيص مساوي
    بودن دو عبارت مورد استفاده قرار مي گيرد. اين عملگر با عملگر= كه براي انتساب
    يك عبارت به يك متغير استفاده مي شود متفاوت است .

    عملگرهاي منطقي
    عملگرهاي منطقي ( جدول (4) ) بر روي عملوندهاي منطقي عمل ميكنند. عملوندهاي
    منطقي داراي دو ارزش درستي و نادرستي هستند .

    عملگر | نام | مثال |

    && | & و(AND) z || x

    || | | يا (OR) z || x

    ! | نقيض (NOT) | !x |

    جدول (4) . عملگرهاي منطقي

    ارزش نادرستي درزبان C با مقدار صفر و ارزش درستي با مقادير غيراز صفر مشخص
    ميشود. عملگر منطقي ! داراي بالاترين تقدم و عملگر || داراي كمترين تقدم در بين
    عملگرهاي منطقي هستند . چون عملگرهاي منطقي رابطه نزديكي با عملگرهاي رابطه اي
    دارند مي توان تقدم آنها را نسبت به يكديگر بيان كرد ( جدول (5) ) .

    بالاترين تقدم | ! | > >= < <= |
    | == != |
    | && |
    |
    پايين ترين تقدم | ||

    جدول (5) . تقدم عملگرهاي منطقي و رابطه اي

    عملگرهاي محاسباتي و رابطه اي با يكديگر تركيب شده و عملگرهاي ديگري را بنام
    عملگرهاي محاسباتي رابطه اي ايجاد مي كنند ( جدول (6) ) . تقدم اين عملگرها از
    ساير عملگرها پايين تر است .

    عملگر | نام | مثال |

    += | + انتساب جمع | x+=y |

    = | انتساب تفريق | x-=y |

    *= | * انتساب ضرب | x*=y |

    /= | / انتساب تقسيم | x/=y |

    %= | % انتساب باقيمانده تقسيم | x%=y |

    جدول (6) . عملگرهاي محاسباتي و رابطه اي

    در جدول (6) ، عبارت x + = y معادل با x = x + y است و عبارت x % = y معادل y
    x = x % است كه موجب انتساب باقيمانده تقسيم xبر yربه x مي شود : int a=10;
    int b=20;
    a+= b;

    با اجراي دستورات فوق متغير a برابر30 خواهد بود. زيرا دستور a + = b معادل
    دستور a = a + b است .

    عملگر دستكاري بيت ها
    ازآنجايي كه زبان C طوري طراحي شده است كه بتواند دربسياري ازموارد جايگزين
    زبان اسمبلي گردد. بايد قادر باشد كليه اعمال ( يا حداقل بسياري از اعمال ) كه
    در زبان اسمبلي قابل انجام هستند را انجام دهد . يكي از اعمالي كه در زبان
    اسمبلي براحتي انجام پذير است . انجام اعمالي بر روي بيت هاي يك بايت يا يك
    كلمه از حافظه است كه در زبان C براي انجام اين منظور از عملگرهايي استفاده
    مي شود كه به عملگرهاي بيتي معروفند ( جدول (7) ) . اين عملگرها انجام اعمال
    تست ، مقدار دادن و يا انتقال (shift) بيت ها را در يك بايت يا كلمه حافظه
    امكان پذير مي نمايند. عملگرهاي بيتي فقط بر روي متغيرهايي از نوع charيا intا
    عمل مي كنند و بر روي متغيرهايي از نوع float، double،، long double،، void، و
    يا ساير متغيرها قابل اجرا نيستند . عملگرهاي بيتي &، |،و ~و(AND(، OR،و NOTو)
    مشابه عملگرهاي منطقي AND، OR،و NOTو عمل مي كنند با اين تفاوت كه عمل آنها بر
    روي يك بيت است . با فرض اين كه pو qو دو بيت مختلف باشند ، نحوه عمل عملگر ^
    را در ذيل مشاهده مي نماييد .
    p | q | p^q |

    0 | 0 | 0 |

    1 | 0 | 1 |

    1 | 1 | 0 |

    عملگرهاي بيتي در جدول (7) مشاهده مي شوند .
    عملگر | نوع عمل |
    & | AND ( و ) |
    | | OR ( يا ) |
    ^ | XOR ( يا انحصاري ) |
    ~ | NOT ( نقيض يا متمم يك ) |
    >> | انتقال به سمت راست (shift right) |
    << | انتقال به سمت چپ (shift left) |
    جدول (7) . عملگرهاي بيتي

    همان طور كه مشاهده شد ، نتيجه عملگر بيتي ^ وقتي يك (1) است كه يكي از
    عملوندهاي آن صفر و ديگري يك باشد . به عبارت ديگر ، نتيجه عملگر بيتي ^ وقتي
    صفر است كه هر دو عملوند آن صفر و يا هر دو يك باشند .
    عملگرهاي &، |،و ^و و << ، >> بر روي دو عملوند عمل مي كنند اما عملگرهاي ~
    به صورت ذيل به كار مي روند: >> و <<بر روي يك عملوند عمل مي كنند . عملگرهاي
    متغير >>تعداد انتقال
    متغير <<تعداد انتقال
    و <<در روش كلي فوق ، متغير ، يك بايت يا كلمه اي از حافظه است كه عملگرهاي
    بايد بر روي آن عمل كنند . تعداد انتقال عددي است كه مشخص مي كند بيت هاي >>"
    متغير " بايد چند محل به سمت راست و يا چپ انتقال يابند . همان طور كه قبلا"
    براي انتقال به چپ مورداستفاده << براي انتقال به راست و عملگر>>گفته شد عملگر
    قرار مي گيرد . هر انتقال به چپ ، معادل با تقسيم كردن مقدار متغير به 2 و هر
    انتقال به راست ، معادل ضرب كردن در 2 است .

    مثال 1 :
    تعداد عددي متغير | x مقدار بيتي متغير | x دستورات زبان | C
    | char x; | | |

    | x=7 ; | 00000111 | 7 |

    | x<<1 ; | 00001110 | 14 |

    | x<<3 ; | 01110000 | 112 |

    | x<<2 ; | 11000000 | 192 |

    | x>>1 ; | 01100000 | 96 |

    | x>>2 ; | 00011000 | 24 |

    همان طور كه مشاهده مي كنيد پس از اجراي دستور 2<< x< اطلاعات واقعي از بين
    مي روند و مساله ضرب در 2 شدن ، در اينجا صدق نمي كند .
    عملگر ~ در يك بايت يا كلمه حافظه ( يك متغير ) كليه بيت ها را نقيض ميكند.
    يعني بيت صفر را به بيت يك و بيت يك را به بيت صفر تبديل مي نمايد . لذا اگر
    اين عملگر دو بار بر روي يك متغير عمل كند وضعيت بيت هاي متغير به حالت اول
    برمي گردند .

    مثال 2 : x :00101100
    ~x :11010011
    ~x :00101100

    همان طور كه مشاهده مي شود بيت هاي رديف اول و رديف آخر داراي يك وضعيت
    ميباشند ( بيت هاي رديف آخر نتيجه دوبار اجراي عملگر نقيض بر روي متغير است ).
    نكته اي كه در مورد عملگرهاي بيتي بايد در نظر داشت اين است كه اين عملگرها
    معمولا" در مبدل هاي دستگاهها (device drivers) مورد استفاده قرار مي گيرند .
    مثل برنامه هايي كه براي كار با modem و با چاپگر نوشته مي شوند . زيرا در اين
    گونه موارد معمولا" تست كردن بيت هاي يك متغير مد نظر خواهد بود .

    عملگر ?
    عملگر ? با تست يك شرط ، مقداري را به يك متغير نسبت مي دهد . اين عملگر به
    صورت زير استفاده مي شود : exp3
    := exp1 ? exp2 متغير exp1
    ، exp2،و exp3و سه عبارت هستند . نحوه عمل ? به اين صورت است كه : ابتدا
    عبارت اول (exp1) ارزيابي مي شود چنانچه اين عبارت داراي ارزش true ( ارزش
    درستي ) باشد مقدار exp2 پس از ارزيابي ، در متغير ذكر شده قرار مي گيرد وگرنه
    عبارت سوم (exp3) ارزيابي شده و نتيجه آن به متغير ذكر شده منتقل مي شود . x= 10;
    y= x>9 ? 100 :200;

    نحوه عمل در دو دستور فوق به اين صورت است كه عبارت 9> x> ارزيابي مي شود .
    چون اين عبارت يك ارزش منطقي true دارد ( 9> x> است ) لذا عدد 100 در متغير y
    قرار مي گيرد .

    عملگرهاي &و *و
    عملگر & يك عملگر يكاني است كه آدرس عملوند خود را مشخص مي كند و به صورت
    زير به كار مي رود : ;
    نام عملوند &
    مثل : int num;
    p= #

    با اجراي دستورات فوق آدرس متغير num در متغير p قرار مي گيرد. لذا عملگر &
    به معني " آدرس " است . عملگر * همانند عملگر & يك عملگر يكاني است كه محتويات
    يك آدرس حافظه را مشخص مي كند و به صورت زير به كار مي رود . ;
    نام عملوند *
    مثل : p= #
    m= *p;

    دستور اول ، آدرس متغير num را در p قرار ميدهد و دستور دوم ، محتويات محلي
    را كه آدرس آن در p قرار دارد ( محتويات num ) ، را در m قرار ميدهد. بنابراين
    مفهوم " * محتويات آدرس " مي باشد . دو دستور فوق معادل دستور m = num; است كه
    موجب انتقال محتويات متغير num به متغير m مي شود .

    عملگر كاما (/)
    عملگر كاما براي انجام چند عمل در يك دستور ، به كار رفته و به صورت زير
    استفاده مي شود :
    ( عبارت 2 و عبارت 1) =) متغير
    عملگر كاما موجب مي شود تا " عبارت " 1 ارزيابي شده و سپس نتيجه ارزيابي "
    عبارت " 2 با يكديگر ارتباط دارند . x =( y = 3 / y + 5);

    ابتدا y باربر با 3 قرار مي گيرد و نتيجه عبارت y + 5 كه برابر 8 است در x
    قرار خواهد گرفت .

    عملگر sizeof
    اين عملگر كه عملگر زمان ترجمه ناميده مي شود، براي محاسبه طول يك نوع و يا
    يك متغير به كار رفته و به صورت زير استفاده مي شود . ;
    (نوع) sizeof ;
    متغير sizeof
    اگر بخواهيم با استفاده از اين عملگرها، طول يك نوع مثل int، double و غيره
    را محاسبه كنيم بايد آن را در داخل پرانتز قرار دهيم : اما اگر بخواهيم طول يك
    متغير را محاسبه كنيم نيازي به استفاده از پرانتز نيست . به عنوان مثال : int a/ b/ c;
    a= sizeof( int);
    b= sizeof c;

    دستور اول سه متغير a، b،ز cز را به صورت int تعريف مي كند . دستور دوم طول
    نوع int را محاسبه كرده و در متغير a قرار مي دهد . دستور سوم طول متغير c را
    محاسبه كرده و در متغير b قرار مي دهد. اين دستور براي مساله portability زبان C
    بسيار مفيد است . بعنوان مثال ممكن است طول نوع int از ماشيني به ماشين ديگر
    متفاوت باشد . نكته اي كه در مورد اين عملگر بايد توجه داشت اين است كه معمولا"
    روش اول مورد استفاده قرار مي گيرد و روش دوم چندان جالب نيست .

    تقدم عملگرها در حالت كلي
    وقتي كه در يك عبارت چندين عملگر مورد استفاده قرار مي گيرند تقدم عملگر به
    صورت جدول (8) خواهد بود .

    بالاترين تقدم () | | ! ~ + + - - * & sizeof |
    | * / % |
    | + - |
    | << >> |
    | << = >> = |
    | == =! |
    | & |
    | ^ |
    | | |
    | && |
    | || |
    | ? |
    | = +=- = *= /= %= |
    | / |


    جدول (8) . تقدم عملگرها در حالت كلي

    اگر در يك عبارت چندين عملگر وجود داشته باشد و درآن از پرانتز نيز استفاده
    شود ، تقدم پرانتز از ساير عملگرها بيشتر بوده و عبارت داخل پرانتز زودتر
    ارزيابي مي شوند .

    مثال 3 : int x=5/ y=10/ k=4;
    int s;
    s= x*((x+y-)3)/k;

    درنتيجه اجراي چند دستور فوق مقداري كه درs قرار مي گيرد برابر با 15 خواهد
    بود . سپس عدد 3 از 15 كم مي شود كه 12 حاصل مي گردد و بعداز آن عمل ضرب انجام برابر با 60 ( 5 * 12 ) مي باشد و عملگر تقسيم (/) آخرين

  5. #5
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    تبديل انواع

    وقتي كه متغيرهاي با نوع هاي مختلف در يك عبارت با يكديگر تركيب مي شوند
    بايد تبديل نوع صورت گيرد . قاعده كلي اين است كه نوع هاي با طول كوچك تر به
    نوع هايي با طول بزرگتر تبديل مي شوند . مثلا" اگر دو متغير از نوع كاراكتري و
    عددي صحيح با يكديگر تركيب شوند ، نوع كاراكتري به عددي صحيح تبديل مي شود .

    مثال 1: char ch;
    int i;
    float f;
    double d;
    result =( ch/i )+( f*d( - )f+i)
    | | | | | |
    int |double | | float
    | | | | | |
    | | | | | |

    ؤؤؤ ؤؤؤ ؤؤؤ | | |
    int double float
    | | |
    | | |
    |
    ؤؤؤؤؤؤؤؤؤ | |
    | |
    double |
    | |
    | |

    ؤؤؤؤؤؤؤؤؤؤؤؤؤ |
    double

    همان طور كه از مثال 1 پيداست ، نوع نتيجه double خواهد بود .
    علاوه بر تبديل انواع در عبارات ، در احكام انتساب نيز ممكن است تبديل انواع
    صورت گيرد . در تبديل انواع اطلاعاتي از بين مي روند كه بايد در نتيجه حاصل از
    احكام انتساب دقت كافي به خرج داد. در ذيل تبديل انواع در احكام انتساب مشاهده
    مي شود : int x;
    char ch;
    float f;
    ch= x;
    x= f;
    f= ch;
    f= x;

    كليه احكام انتساب فوق قابل انجام بوده و از طرف كامپايلر زبان C هيچ گونه
    خطايي گزارش نمي شود . اطلاعاتي كه ممكن است در تبديل انواع از بين بروند . در
    جدول (1) آمده است .
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
    نوع منبع | نوع مقصد | اطلاعاتي كه ممكن است از بين برود |
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
    | signed char | char اگر مقدار بزرگتر از127 باشد مقصد منفي خواهد شد |
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
    | short 8 | char بيت با ارزش |
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
    | int 8 | char بيت با ارزش |
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
    | long int | char َ24 بيت با ارزش |
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
    | long int | int َ16 بيت با ارزش |
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
    | float | int قسمت كسري يا بيشتر و نتيجه حاصل گرد مي شود |
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
    | double | float قسمت كسري و يا بيشتر و نتيجه حاصل گرد مي شود |
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
    جدول (1) . تبديل انواع

    دو نكته را بايد در مورد تبديل انواع ( جدول (1) ) به خاطر داشته باشيم : 1
    بعضي از تبديل انواع در جدول فوق وجود ندارد مثل doubleبه int . در اين
    موارد مي توان double را به float تبديل كرده و سپس float را به int تبديل نمود. 2
    وقتي نوع بزرگتري به نوع كوچكتري انتساب داده مي شود . قسمتي از اطلاعات
    از دست مي روند . همان طور كه مي دانيم ، معمولا" اعداد صحيح (int) در 2 بايت و
    اطلاعات از نوع char در يك بابت ذخيره مي شوند :
    ؤؤؤؤؤؤؤؤؤؤؤ char
    ؤؤؤؤؤؤؤؤؤؤؤ
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ int
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
    بايت كم ارزش بايت باارزش
    وقتي يك متغير int به يك متغير char انتساب داده مي شود بايت كم ارزش متغير
    از نوع int به متغير char منتقل شده ولي با ارزش متغير int در متغير char جايي ميگوييم در انتساب متغيرintبه char ، 8، بيت با ارزش از دست ميرود.

  6. #6
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    ساختمان زبان C و چند تابع ورودي خروجي

    همانطور كه قبلا" گفته شد C زبان ساخت يافته است و هر برنامه در اين زبان
    شامل يك يا چند تابع است . يكي از اين توابع كه اسم آن ()main است به عنوان
    تابع اصلي برنامه و بقيه توابع بعنوان تابع عرضي هستند . اجراي برنامه با تابع
    اصلي ، يعني ()main شروع مي شود. در نوشتن برنامه ، بايد تابع اصلي و سپس بقيه
    توابع را بنويسيم . تعريف يك تابع در داخل تابع ديگر امكان پذير نيست ولي هر
    تابع مي تواند يك يا چند تابع ديگر را فراخواني نمايد .
    برخلاف زبانهاي ديگر كه زير روال و توابع دو چيز جداگانه اي هستند در C همگي
    تحت عنوان تابع بررسي مي شوند .
    كليه متغيرهايي كه در برنامه استفاده مي شوند بايد تعريف شوند و منظور از
    تعريف متغير ، نامگذاري و تعيين نوع آن است . متغيرها در C مقدار اوليه ندارند
    و تا متغيري مقدار نگيرد قابل استفاده نخواهد بود . شكل (1) ساختمان ساده يك
    برنامه به زبان C را نشان مي دهد كه پس از مطالعه مفاهيم ديگري از زبان C ، آن
    را تكميل تر خواهيم كرد .
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤ | main )(|
    | { |
    |
    تعريف متغيرها | | . |
    | . |
    | . |
    | } |
    | f1 )(|
    | { |
    | . |
    | . |
    | . |
    | } |
    | f2 )(|
    | { |
    | . |
    | . |
    | . |
    | } |

    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤ
    شكل (1) . ساختمان ساده اي از برنامه C

    اولين تابع برنامه ، ()main است . ابتدا متغيرهاي مورد استفاده اين تابع
    تعريف ، سپس دستورات تابع اصلي با يك { شروع و به } ختم مي شود . بعضي از
    دستورات تابع اصلي ممكن است فراخواني توابع ()f1 ، ()f2 وغيره نيز باشند. ()f1
    ()f2 دو تابع فرعي هستند كه در برنامه وجود دارند همانطوري كه مشاهده مي گردد
    تعريف توابع فرعي پس از تابع اصلي صورت مي گيرد. در زبان C فرض ميشود كه نتايج
    حاصل از تابع بصورت int است كه اگر غير از اين باشد ، بايد ضمن تعريف متغيرها وع توابع استفاده شده در برنامه به كامپايلر اعلان شود .

  7. #7
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    تابع ()printf

    اين تابع براي انتقال اطلاعات از كامپيوتر به صفحه نمايش مورد استفاده قرار
    مي گيرد و بصورت زير استفاده مي شود : ;
    ( عبارت ديگر " / عبارت " 1) printf) "
    عبارت " 1 شامل تعدادي كاراكترهاي كنترلي ، كاراكترهاي قالب جهت تعيين شكل
    خروجي و رشته هاي ديگري است كه بايد به خروجي منتقل شوند . " عبارت ديگر " شامل
    اطلاعاتي هستند كه با فرمت مشخص شده در " عبارت " 1، بايد به خروجي منتقل شوند.
    كاراكترهايي كه براي تعيين فرمت خروجي مورد استفاده قرار مي گيرند با كاراكتر %
    شروع مي شوند ( جدول 1 ) .

    كاراكتر | نوع اطلاعات كه بايد به خروجي منتقل شود |

    %C | % يك كاراكتر | |
    %d | % اعداد صحيح دهدهي مثبت و منفي | |
    %i | % اعداد صحيح دهدهي مثبت و منفي | |
    %e | % نمايش علمي عدد همراه با حرف e | |
    %E | % نمايش علمي عدد همراه با حرف E | |
    %f | % عدد اعشاري مميز شناور | |
    %g | % اعداد اعشاري مميز شناور | |
    %G | % اعداد اعشاري مميز شناور | |
    %O | % اعداد مبناي 8 مثبت | |
    %S | % رشته اي از كاراكترها ( عبارت رشته اي ) | |
    %U | % اعداد صحيح بدون علامت ( مثبت ) | |
    %x | % اعداد مبناي 16 مثبت با حروف كوچك | |
    %X | % اعداد مبناي 16 مثبت با حروف بزرگ | |
    %p pointer | % ( اشاره گر ) | |
    %n | % موجب ميشود تا تعداد كاراكترهايي كه تا قبل | |
    | ازاين كاراكتر به خروجي منتقل شده اند شمارش | |
    | شده و در پارامتر متناظر با آن قرار گيرد . | |
    %% | % علامت % |

    جدول (1) . كاراكترهاي فرمت در تابع ()printf

    كاراكترهاي كنترلي كه در تابع ()printf بكار ميروند در جدول (2) آمده است .
    بعضي از كاراكترهاي كنترلي براي انتقال خروجي به يك محل معين از صفحه نمايش
    مورد استفاده قرار مي گيرند .

    | كاراكتر عملي كه انجام مي شود |

    \f | \ موجب انتقال كنترل به صفحه جديد مي شود | |
    \n | \ موجب انتقال كنترل به خط جديد مي شود | |
    \t | \ انتقال به 8 محل بعدي صفحه نمايش | |
    \" | \ چاپ كوتيشن (") | |
    \' | \ چاپ كوتيشن (') | |
    \0 NULL | \ رشته تهي | | back slash | \\ |
    |
    \V | \ انتقال كنترل به 8 سطر بعدي | |
    \N | \ ثابت هاي مبناي 8( N( عدد مبناي 8 است ) | |
    \xN | \ ثابت هاي مبناي 16( N( عدد مبناي 16 است ) |

    جدول (2) . كاراكترهاي كنترلي

    چند دستور متوالي كه شامل تابع ()print باشند ، خروجي خود را بر روي يك سطر
    منتقل يم كنند . مگر اين كه با پارامتر كنترلي \n كنترل را به سطر بعدي منتقل
    كنيم .
    مثال 1:

    main)(


    {


    printf(" i like %c "/'c' );


    printf("%s"/"very much." );


    }



    خروجي حاصل از اجراي برنامه فوق بصورت ذيل خواهد بود : i like c very much.

    با استفاده از \n مي توانيم خروجي را در چند سطر داشته باشيم . main)(
    {
    printf("this is second program.\n" );
    printf("output is in two line." );
    }

    خروجي حاصل از اجراي برنامه فوق بصورت ذيل است : this is second program.
    output is in two line.


    مثال 2: main)(
    {
    int num ;
    printf("the address of num is:" );
    printf(" %p"/ &num );
    }

    در مثال فوق عبارت &num آدرس متغير num را مشخص مي كند كه براي نوشتن آن از
    كاراكتر فرمت %p استفاده شده است . نمونه اي از خروجي مثال 2 بصورت زير است . the address of num is : 6A30:OFE4

    اگر در تابع ()printf چند كاراكتر فرمت داشته باشيم ، هر كاراكتر با يك عنصر
    داده كه بايد به خروجي برود تطبيق داده مي شود : main)(
    {
    int a=10 ;
    float b=20 ;
    printf(" a is:%d/b is :%f"/a/b);
    }

    خروجي حاصل از اجراي برنامه فوق بصورت ذيل است : a is:10/b is000000


    مثال 3: main)(
    {
    unsigned int num ;
    num=100 ;
    printf("the value of num is:%u"/num);
    }

    همانطوري كه در مثال 3 مشاهده مي شود ، براي چاپ عدد num كه بصورت عدد صحيح
    بدون علامت تعريف شد ، از %u استفاده شده است .
    خروجي حاصل از اجراي برنامه مثال 3 به صورت ذيل است : the value of num is:100


    مثال 4: main)(
    {
    double d ;
    d=le+007 ;
    printf("the value of d is:%e\n"/d);
    printf("the value of d is:%E\n"/d);
    printf("the value of d is:%g\n"/d);
    }

    خروجي حاصل از اجراي برنامه مثال 4 بصورت ذيل خواهد بود : the value of d is:1.00000e+07
    the value of d is:1.00000E+07
    the value of d is:1e+07

    همانطور كه مشاهده مي شود براي چاپ اعدادي كه بصورت نماد علمي باشند ميتوان
    از كاراكترهاي فرمت % e، % E،و % gو استفاده كرد .

    مثال 5: main)(
    {
    float f=12.50 ;
    int t=10 ;
    printf("\n f is:%f"/f );
    printf(" tenper is:%%%d"/t );
    }

    خروجي حاصل از اجراي برنامه فوق بصورت زير است : f is:12.500000/tenper is:%10

    در مثال 5 براي چاپ علامت % از كاراكتر %% و براي چاپ متغير f از نوع float
    مي باشد از %f استفاده شده است .
    كاراكتر فرمت %n از ساير كاراكترهاي فرمت متفاوت است . اين كاراكتر بجاي
    انتقال مقاديري به خروجي ، موجب مي شود تا تعداد كاركترهايي كه تا قبل از اين
    كاراكتر به خروجي منتقل شده اند ، شمارش شده و در پارامتر متناظر با آن قرار
    بگيرد .

    مثال 6: main)(
    {
    printf("\neach\tword\tis\n" );
    printf("tabbed\tover\tonce" );
    }

    خروجي از اجراي برنامه فوق بصورت زير خواهد بود : each word is
    tabbed over once

    كاراكتر كنترلي \b موجب انتقال مكان نما به اندازه يك كاراكتر به عقب ميشود
    ( بسمت چپ ). كاراكترهاي كنترلي \ "و \و براي چاپ كوتيشن درخروجي مورد استفاده
    قرار مي گيرند .

    تعيين طول ميدان در تابع ()printf
    در حين انتقال اطلاعات توسط تابع ()printf ميتوانيم طول ميدان خروجي را مشخص
    كنيم . در اين مورد مي توانيم محل نقطه اعشار و تعداد ارقام اعشار را نيز تعيين
    كنيم . تعيين طول ميدان در جدول بندي ها بسيار مفيد است . طول ميدان ، بصورت w.d
    است كه در اعداد اعشاري مميز شناور ، w طول ميدان و d تعداد ارقام اعشار را
    مشخص مي كند .

    مثال 7: main)(
    {
    printf("\n%8.1f %8.1f %8.1f\n"
    /3.0/12.5/523.3 );
    printf("\n%8.1f %8.1f %8.1f\n"
    /300.0/1200.5/5300.3 );
    }

    خروجي حاصل از اجراي برنامه فوق بصورت زير است : 3.0 12.5 523.3
    300.0 1200.5 5300.3

    همانطوركه مشاهده مي گردد طول ميدان برابر با 8 و تعداد ارقام اعشار، برابر
    با يك كه در منتهااليه سمت راست ميدان قرار گرفته ، منظور شده است . براي توضيح
    بيشتر ، عدد 5300/3 را در حافظه نشان مي دهيم :
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤ | | | 5 | 3 | 0 | 0 | . | 3 |

    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤ
    اگر فرمت w.d كه طول ميدان را مشخص مي كند در مورد رشته ها استفاده گردد ، w
    حداقل طول ميدان و d حداكثر كاراكترهاي قابل چاپ را مشخص مي كند .
    اگر w.d در مورد اعداد صحيح بكار برده شود ، w مشخص كننده حداقل طول ميدان
    و d تعيين كننده حداكثر طول ميدان است .

    مثال 8: main)(
    {
    printf("%7.4f\n"/123.1234567 );
    printf("%3.8d\n"/1000 );
    printf("%10.16a\n"/"this is a" );
    printf(" simple test" );
    }

    خروجي حاصل از اجراي برنامه فوق بصورت زير است : 123.1235
    00001000
    this is a simple

    در خروجي اول ، تعداد ارقام اعشاري 4 در نظر گرفته شده كه بقيه ارقام حذف
    شده اند و ضمنا" عدد حاصل گرد شده است .
    در خروجي دوم كه : ميدان 3/8 است عدد صحيح 1000 چاپ شده است .
    در خروجي سوم از رشته this is a simple به اندازه 16 كاراكتر چاپ شده است .
    در حالت معمولي ، خروجي حاصل در سمت راست ميدان قرار مي گيرد كه مي توان با
    قرار دادن علامت منها ( - ) بلافاصله پس از علامت % ، اطلاعات را در سمت چپ ميدان

  8. #8
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    تابع ()scanf

    اين تابع براي خواندن اطلاعات از ورودي استاندارد ( صفحه كليد ) بكار رفته و
    بصورت زير استفاده مي شود : ;
    (آدرس متغيرها ، " كاراكترهاي فرمت ") scanf
    كاراكترهاي فرمت ، نوع اطلاعاتي كه بايد خوانده شوند را مشخص مي كند. و آدرس
    متغيرها، مشخص كننده محل هايي از حافظه هستند كه اطلاعات ورودي بايد درآن محلها
    قرار گيرند. همانطور كه قبلا" ديده ايم آدرس متغيرها را با عملگر & مشخص ميكنيم .
    در تابع scanf همانند تابع printf از تعدادي كاراكترهاي فرمت استفاده مي شود .
    ( جدول 1 ) .
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤ |
    | كاراكتر اطلاعاتي كه خوانده مي شوند |
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤ |
    %c | % يك كاراكتر | |
    %d | % يك عدد صحيح دهدهي | |
    %i | % يك عدد صحيح دهدهي | |
    %e | % عدد اعشاري مميز شناور | |
    %f | % عدد اعشاري مميز شناور | |
    %g | % عدد اعشاري مميز شناور | |
    %o | % عدد مبناي 8 | |
    %x | % عدد مبناي 16 | |
    %p | % يك اشاره گر | |
    %n | % مشخص كننده تعداد كاراكترهايي است كه تا | %%n |
    | ورودي خوانده شده اند | |
    %u | % عدد صحيح مثبت | |
    %s | % رشته ها |
    ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤ
    جدول (1) . كاراكترهاي فرمت در تابع ()scanf

    مثال 1: main)(
    {
    char ch ;
    printf("\n enter a character :");
    scanf("%c"/&ch );
    printf("\n ch=%c".ch );
    }

    اجراي فرمان فوق ، ضمن صدور يك پيام ، كاراكتري را از ورودي خوانده در متغير ch
    قرار مي دهد . نمونه اي از خروجي را در زير مشاهده مي كنيم : enter a character : s
    ch=s


    مثال 2: main)(
    {
    int year ;
    printf("enter your age in year:");
    scanf("%d"/&year );
    printf("\n your age is");
    printf(" %d day."/year*365);
    }

    نمونه اي از خروجي را در زير مشاهده مي كنيم : enter your age in year:19
    your age 6935 day.

    اين برنامه ، سن شما را از ورودي دريافت كرده و آن را به روز تبديل ميكند و
    سپس به خروجي مي برد . لازم به ذكر است كه در مثال 2 تابع ()scanf بر روي خطي
    عمل مي كند كه تابع ()printf اولي عمل كرده است . تابع ()printf دومي به علت
    وجود \n ، بر روي خط بعدي از صفحه نمايش عمل خواهد كرد . استفاده از ساير
    كاراكترهاي قالب در تابع ()scanf همانند تابع ()printf است كه ذكر مثال درمورد
    آنها ضروري به نظر نمي رسد .
    قالب ديگري كه بايد در مورد آن توضيح داده شود %n است كه مشابه آن را در
    تابع ()printf داشته ايم . %n در تابع ()scanf تعداد كاراكترهاي خوانده شده توسط
    اين تابع تا %n را به متغيري كه آدرس آن متناظر با %n ذكر شده است منتقل ميكند.
    براي خواندن چند متغير از ورودي توسط تابع ()scanf ، اسامي متغيرها را كه
    به همراه & ( عملگر آدرس ) ذكر مي شوند با كاما از يكديگر جدا كرده و در حين
    ورود اطلاعات مي توانيم آنها را با فاصله (blank) ، كليد enter و يا tab جدا
    كنيم .

    مثال 3: main)(
    {
    int a/b/c ;
    float ave ;
    printf("\n enter three number :");
    scanf("%d %d %d"/&a/&b/&c );
    ave=(a+b+c)/3 ;
    printf("\n average is:%f"/ave );
    }

    به نتيجه اجراي برنامه و چگونگي ورود سه عدد 20 ، 19 و 18 بعنوان اطلاعات
    ووردي توجه كنيد : enter three number :20 19 18
    av

  9. #9
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    خواندن يك كاراكتر از ورودي

    براي خواندن يك كاراكتر از ورودي ، علاوه بر تابع ()scanf از توابع ديگري نيز
    استفاده ميشود كه قبل از بررسي آنها به مثالي از()scanf جهت خواندن يك كاراكتر
    توجه كنيد :
    مثال 1: main)(
    {
    char ch ;
    printf("enter a character : " );
    scanf("%c"/&ch );
    printf(" you typed the character");
    printf(": %c"/ch );
    }

    نمونه اي از خروجي حاصل از مثال 1 بصورت زير است : enter a character: j
    you typed the character:j


    تابع ()getch
    اين تابع براي خواندن يك كاراكتر از ورودي بكار مي رود و بصورت زير استفاده
    مي شود :
    ()= getch متغير
    پس از آن كه كنترل اجراي برنامه به تابع ()getch رسيد ، برنامه منتظر فشار
    دادن كليدي از صفحه كليد مي شود . اگر متغير مورد نظر كاراكتري باشد مقدار
    كاراكتري كليد ورود به اين متغير منتقل مي شود و در صورتي كه اين متغير از نوع
    عددي باشد ، كد اسكي كليد وارد شده ، در اين متغير قرار مي گيرد .

    مثال 2: main)(
    {
    char ch ;
    int x ;
    printf("\n enter a character : " );
    ch=getch )(;
    printf("\n enter this character" );
    printf(" second time :" );
    ch=getch )(;
    printf("\n character is:" );
    printf("%c/%c/%d/%d/ch/x/ch/x );
    }

    فرض كنيد در پاسخ به اجراي اين برنامه كليد s را دوبار در پاسخ به دو تابع
    ()getch وارد كنيم . در اين صورت خروجي حاصل از اجراي برنامه بصورت زير خواهد
    بود : enter a character:
    enter this character second time:
    character is:s/s/115/115

    اگر در مثال 2 به تابع ()printf توجه كنيد ، متغير chو xو را يكبار با فرمت %c
    و بار ديگر با فرمت %d نوشته ايم كه در هر دو حالت عدد 115 كه كد اسكي s است
    چاپ شده است . وقتي متغير عددي x را با فرمت %d نوشته ايم آنچه كه در آن قرار
    گرفته ( كد اسكي كليد s ) نوشته شده است و زماني كه اين متغير را با فرمت %c
    نوشته ايم كد اسكي به كاراكتر s تبديل شده و سپس در خروجي چاپ مي شود .

    تابع ()getche
    اين تابع همانند تابع ()getch براي خواندن يك كاراكتر از ورودي بكار مي رود
    و بصورت زير استفاده مي شود :
    ()= getche متغير
    نوع عمل اين تابع مثل ()getch است . با اين تفاوت كه اين تابع پس از اخذ
    ورودي ، آن را روي صفحه نمايش چاپ مي كند . حرف e در انتهاي تابع به معني echo
    ( عكس العمل ) است .

    تابع ()getchar
    اين تابع همانند توابع ()getch و ()getche براي خواندن يك كاراكتر از ورودي
    بكار رفته و بصورت زير استفاده مي شود :
    ()= getchar متغير
    نوع عمل اين تابع همانند دو تابع فوق الذكر است . با اين تفاوت كه در اين
    تابع پس از وارد نمودن كليه ( كاراكتر ) مورد نظر ، كليد enter نيز بايد وارد اله در توربو C رعايت مي شود ) .

  10. #10
    آخر فروم باز Nesta's Avatar
    تاريخ عضويت
    Jan 2005
    محل سكونت
    tehran
    پست ها
    3,343

    پيش فرض

    نوشتن يك كاراكتر در خروجي

    براي نوشتن يك كاراكتر در خروجي علاوه بر تابع ()printf ، دو تابع ديگر نيز
    معمولا" مورد استفاده قرار ميگيرند. قبل از بررسي آنها به مثالي درمورد ()print
    كه منجر به چاپ يك كاراكتر در خروجي مي گردد . مي پردازيم . main)(
    {
    printf("example for character");
    printf(": %c"/'a' );
    }

    خروجي حاصل از اجراي برنامه فوق ، حرف a است . example for character :a


    تابع ()putch
    اين تابع براي نوشتن يك كاراكتر در صفحه نمايش مورد استفاده قرار گرفته و
    بدين صورت استفاده مي شود : ;
    ( متغير ) putch

    مثال 1: main)(
    {
    char ch ;
    printf("\n enter a character: ");
    ch=getch )(;
    printf("you typed the character:");
    putch(ch );
    }

    خروجي حاصل بصورت زير است : enter a character:
    you typed the character : s

    براي نوشتن يك كاراكتر توسط تابع ()putch اين تابع را بصورت زير هم مي توان
    بكار برد : putch('a');

    دستور فوق موجب چاپ كاراكتر a در خروجي مي شود .

    تابع ()putchar
    اين تابع همانند تابع ()putch براي نوشتن يك كاراكتر در صفحه نمايش به كار
    مي رود و بصورت زير استفاده مي شود : ;
    ( متغير )putchar

    مثال 2: #include "stdio.h"
    main)(
    {
    char ch ;
    printf("enter a character :" );
    ch=getch )(;
    printf("\n you typed: " );
    putchar(ch );
    }

    به نمونه اي از خروجي برنامه مثال 2 كه در زير آمده است توجه كنيد : enter a character:
    you typed : s
    براي نوشتن حرف a در خروجي تابع ()putchar بصورت ;('a')putch بكار مي رود .

صفحه 1 از 6 12345 ... آخرآخر

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •