240
C++ Tutorial [email protected] 1 اﻳﺮان ﺻﻨﻌﺖ و ﻋﻠﻢ داﻧﺸﮕﺎه ﻛﺎﻣﭙﻴﻮﺗﺮ ﻣﻬﻨﺪﺳﻲ داﻧﺸﻜﺪه ﻧﻮﻳﺴﻲ ﺑﺮﻧﺎﻣﻪ آﻣﻮزشC++ C++ Programming Tutorial ﮔﺮدآورﻧﺪه: ﺟﻼﻟﻲ ﻋﺰﻳﺰ ﻋﺒﺎس

ﺮﺗﻮﻴﭙﻣﺎﻛ ﻲﺳﺪﻨﻬﻣ هﺪﻜﺸﻧاد ناﺮﻳا ﺖﻌﻨﺻ و …webpages.iust.ac.ir/azizjalali/CPP Tutorial/C++ Tutorial(1-10)F.pdf · ﺖﺳا ﻞﺋﺎﻗ

  • Upload
    others

  • View
    26

  • Download
    0

Embed Size (px)

Citation preview

C++ Tutorial [email protected] 1

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

آموزش برنامه نويسي C++

C++ Programming Tutorial

عباس عزيز جاللي : گردآورنده

C++ Tutorial [email protected] 2

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

فصل اول

آشنائي با C++

و محيط كامپايلر

C++ Tutorial [email protected] 3

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران :Cيك برنامه به زبان

/* P1.1 First Program */

#include <stdio.h>

main(){

int a, b;

scanf(“%d %d” , &a, &b);printf(“\n%d”, a + b);

}

Running program:12 36

48

C++ Tutorial [email protected] 4

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران : Cيك برنامه به زبان

/* P1.1 First Program */

#include <stdio.h>

main(){

int a, b;

scanf(“%d %d” , &a, &b);printf(“\n%d”, a + b);

}

Running program:12 3648

Comment

Basic Function

C Executable Statement

Start of program

End of program

Use of Library Function

Declaration part

End of each statement

.است نشان دهنده آن است كه آنچه كه خوانده و يا چاپ ميشود يك عدد صحيح d%الگوي . را الگوي پيمايش ميناميمd %d%رشته

C++ Tutorial [email protected] 5

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

: دستور افزايش متغير++ ;

++متغير ;: تعريف شده باشد، ميتوانيم بنويسيم aاگر متغير با نام

a++;++a;

و يا a = a + 1 ;

: يعني . همينطور مي توانيم دستور كاهشي داشته باشيم a = a -1 ; | a--; | --a;

C++ Tutorial [email protected] 6

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران : مقداردهي به متغيرها در بخش تعريف متغير

/* P1.1 First Program */

#include <stdio.h>

main(){

int a=12, b=36;

/*scanf(“%d %d” , &a, &b);*/printf(“\n%d”, a + b);

}

Running program:12 3648

C++ Tutorial [email protected] 7

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

فصل دوم

آشنائي با داده ها و انواع آن ها

C++ Tutorial [email protected] 8

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

:انواع داده ها . نويسه ها / حروف / كاراكترها -1. عددهاي صحيح -2. عددهاي اعشاري تك دقتي -3. عددهاي اعشاري دو دقتي -4. مقدار تهي -5

C++ Tutorial [email protected] 9

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

: كاراكترها -1. يم به هر يك از نشانه هائي كه در زبان به كار مي روند، كاراكتر مي گوئ

: اين كاراكترها عبارتند از

a.. z , A..Z حروف : : ارقام 9..0

: حروف ويژه % ,$ ,# ,“ ,! ,& ,.…

C++ Tutorial [email protected] 10

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

: عددهاي صحيح -2بوده و بيشتر براي شمارش ) بدون اعشار (اين اعداد در واقع اعداد طبيعي

عددهاي صحيح مي توانند بـا عالمـت و يـا بـدون عالمـت . بكار مي روند :مثال. باشند

32+164-5821

C++ Tutorial [email protected] 11

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

: عددهاي اعشاري تك دقتي -3، )يا به اختصار عددهاي اعشاري يا شناور (عددهاي اعشاري تك دقتي

چهار بايت عددهائي هستند كه داراي جزء كمتر از يك مي باشند و در / اين اعداد در كامپيوتر به شكل دودوئي . ذخيره مي شوند از حافظه

: مثال . باينري ضرب در تواني از عدد دو نگهداري مي شوند 12.5-132.754+64.

C++ Tutorial [email protected] 12

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

: عددهاي اعشاري دو دقتي -4عددهاي اعشاري دو دقتي هم عددهائي هستند كه داراي جزء كمتر از

ذخيره مي شوند، از اين رو از حافظه هشت بايت يك مي باشند ولي در اين اعداد هم در . اين عددها مي توانند مقدار بزرگتري را نشان دهند

باينري، ضرب در تواني از عدد دو نگهداري / كامپيوتر به شكل دودوئي . مي شوند

C++ Tutorial [email protected] 13

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

: مقدار تهي -5هر تابع . مقدار تهي را معموال همراه با توابع و نشانگرها به كار مي بريم

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

چنان چه نخواهيم نوع داده اي را كه . خاصي از داده ها را نشان مي دهد مي نشانگر به آن اشاره مي كند تعيين نمائيم، تابع را از نوع تهي تعريف

. كنيم

C++ Tutorial [email protected] 14

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

: متغيرها -5ا بكار مي متغيرها مكان هائي از حافظه هستند كه آن ها را براي نگهداري داده ه

تغيير اين محل ها را از آن رو متغير مي ناميم كه داده هاي آنها مي توانند . بريمان براي مراجعه به هر متغير، براي آن نامي قرار ميدهيم كه در حقيقت نش . نمايند

: براي تعريف متغيرها، الگوي زير را بكار ميبريم . دهنده محتويات آن متغير است char a;int i , cont;float first,second;/* single precision */double sum; /* double precision */

C++ Tutorial [email protected] 15

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

:2مثال /* P2.1 Second Program */

#include <stdio.h>

main(){int number;float sum;char ch;

scanf(“%d %f %c” , &number, &sum, &ch);printf(“\n%d %f %c”, number, sum, ch);

}

Running program:12 2.5 x

12 2.500000 x

C++ Tutorial [email protected] 16

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران : نام گذاري متغيرها -5

:براي نام گذاري بايستي قواعد زير را بكار بريم .شاخته شود) _(و حرف زيرخط ) 9..0(، ارقام )A..Z و a..z( نام بايد تنها از حروف -1. حرف نداشته باشد31 بيش از -2.متغيرهاي تعريف شده در توابع كتابخانه اي نباشد / و شناسه هاي C از واژه هاي كليدي -3

: اسامي درست monthDAY13new_year_yes

: اسامي نادرست month: 13DAYnew yearcharscanf

: يادآوري . حرف اول را در نظر مي گيرد 31 حرف باشد، مترجم فقط 31 اگر نام بيش از -1. نام دو متغير متفاوت مي باشد Sum و SUMبنابراين . براي حروف كوچك و بزرگ فرق قائل است C زبان -2.بنابراين بهتر است اين كاراكتر را در آغاز نام ها بكار نبريم معموال نام متغيرها در توابع كتابخانه اي با خط زير شروع مي شود، -3

C++ Tutorial [email protected] 17

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

Cبعضي از واژه هاي كليدي در structintdoubleautoswitchlongelsebreaktypedefregisterenumcaseunionreturnexternchar

whilestaticifdovolatilesizeofgotodefaultvoidsignedforcontinueunsignedshortfloatconst

C++ Tutorial [email protected] 18

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

) :constant( ثابت ها Cثابت ها در زبان . ثابت ها مقاديري هستند كه در طول برنامه تغيير نمي كنند

: عبارتند از اين اعداد . گذاشته مي شوند) بيت16( معموال در دو بايت :ثابت هاي صحيح

چرا؟. قرار مي گيرند -32678و + 32767بين ثابت هاي اعشاري همانند متغيرهاي اعشاري مي توانند تك : ثابت هاي اعشاري

2.35E6مثل . دقتي و يا دو دقتي باشند ثابت هائي هستند كه براي نمايش يك كاراكتر بكار مي :ثابت هاي كاراكتري

: مثال . اين ثابت ها را ميان دو گيومه تكي مي گذاريم . روند‘A’‘+’‘2’

C++ Tutorial [email protected] 19

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

) :Strings( رشته ها به . متغير رشته اي مستقيما به كار نمي رود C در زبان :متغيرهاي رشته اي

آرايه ها در فصول بعدي . (جاي متغير رشته اي از آرايه رشته اي استفاده مي كنيم )ارائه مي شوند

براي ساختن ثابت هاي رشته اي، رشته ها را در ميان دو : ثابت هاي رشته اي : مثال . گيومه دوتائي قرار مي دهيم

“year 1373”“m”

، براي مشخص شدن پايان رشته ها، عدد صفر دودوئي را به طول يك Cمترجم . بايت به انتهاي هر رشته اضافه مي كند

چيست؟ ”m“ و ’m‘ فرق دو ثابت : سوال

C++ Tutorial [email protected] 20

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

دستورهاي پيمايش و خواندن int a;float sum;char ch, name[10];scanf(“%d %f %c %s”, &a, &sum, &ch, &name);

C++ Tutorial [email protected] 21

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

دستورهاي پيمايش و چاپ printf(“Sum = %f\n”, sum);printf(“Mr. %c %s”, ch , name);printf(“%f\n”, sum * 4);

C++ Tutorial [email protected] 22

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران . ايد برنامه اي بنويسيد كه نام شخص و شماره تلفن او را بخواند و چاپ نم :مثال

/* P2.3 Name & Tel. No. */#include <stdio.h>

main(){char name[20], tel[10];printf(“Enter name and tel# : “);scanf(“%s %s” , &name , &tel);printf(“%s %s\n”, name, tel);

}Running program:Enter name and tel# : Ebrahim 6688007Ebrahim 6688007

. نمره ها و ميانگين آن ها را چاپ نمايد برنامه اي بنويسيد كه نام و چهار نمره دانشجوئي را بخواند، نام، :مثال

C++ Tutorial [email protected] 23

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران . نمره ها و ميانگين آن ها را چاپ نمايد برنامه اي بنويسيد كه نام و چهار نمره دانشجوئي را بخواند، نام، :مثال

/* P2.5 Staudent_Name & Marks */#include <stdio.h>main() {

char name[20];float g1, g2, g3, g4, avg;printf(“Enter name : “);scanf(“%s” , name );printf(“Enter 4 marks : “);scanf(“%f %f %f %f”, &g1, &g2, &g3, &g4);avg = (g1 + g2 + g3 + g4) / 4;printf(“\nName : %s\n”, name);printf(“Marks : %.2f %.2f %.2f %.2f\n”, g1, g2, g3, g4);printf(“Average : %.2f\n”, avg); }

Running program:Enter name : Ebrahim.AzariEnter 4 marks : 18 19 17.5 20

Name : Ebrahim AzariMarks : 18.00 19.00 17.50 20.00Average : 18.62

C++ Tutorial [email protected] 24

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

تمرين پايان فصل

برنامه اي بنويسيد كه طول، عرض و بلندي مكعبي را از كاربر -1.پرسيده، سپس حجم آن را محاسبه و چاپ نمايد

برنامه اي بنويسيد كه تعداد ساعت ها، دقيقه ها و ثانيه هاي يك -2.سال را محاسبه و در سه سطر چاپ نمايد

C++ Tutorial [email protected] 25

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

فصل سوم

عبارت ها و

عملگرها

C++ Tutorial [email protected] 26

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

عملگرها -3 انواع عملگرها-1-3حسابي . 1 رابطه اي . 2 منطقي. 3 بيتي. 4 جابه جائي . 5 يگاني . 6 واگذاري . 7 شرطي . 8

C++ Tutorial [email protected] 27

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

عملگرهاي حسابي -1

جمع+تفريق-

باقيمانده تقسيم دو مقدار صحيح %تقسيم/ضرب*

معناي عملگر عملگر

C++ Tutorial [email protected] 28

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

اولويت عملگرهاي حسابي -1

2- از چپ به راست+از چپ به راست* / 1%

اجراي عملگرهاي هم اولويت عملگراولويت

C++ Tutorial [email protected] 29

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

عملگرهاي رابطه اي -2

كوچكتر >كوچكتر يا مساوي =>

بزرگتر<بزرگتر يا مساوي =<

نامساوي =!مساوي==

معناي عملگر عملگر

C++ Tutorial [email protected] 30

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

اولويت عملگرهاي رابطه اي -2

از چپ به راست=! ==2از چپ به راست< =< > =>1

اجراي عملگرهاي هم اولويت عملگراولويت

C++ Tutorial [email protected] 31

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

عملگرهاي منطقي -3

نه يا نقيض !)Logical AND( و &&)Logical OR( يا ||

معناي عملگر عملگر

C++ Tutorial [email protected] 32

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

اولويت عملگرهاي منطقي -3

از چپ به راست!1

از چپ به راست||3از چپ به راست&&2

اجراي عملگرهاي هم اولويت عملگراولويت

C++ Tutorial [email protected] 33

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

نتيجه عملگرهاي منطقي -3

!a0 0 1 1a && b1 0 0 0

a1 1 0 0b1 0 1 0

a || b1 1 1 0

مقدار عبارت عبارت

C++ Tutorial [email protected] 34

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

عملگرهاي بيتي -4

)Exclusive OR( ياي انحصاري بيتي ^نقيض بيتي ~

)AND( وي بيتي &)OR( ياي بيتي |

)Shift Left(جابجائي به چپ >>)Shift Right(جابجائي به راست <<

معناي عملگر عملگر

C++ Tutorial [email protected] 35

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

نتيجه عملگرهاي بيتي -4 . مد نظر استb و يا aتوجه داشته باشيم كه هر بيت

a ^ b0 1 1 0~a0 0 1 1

a & b1 0 0 0

a1 1 0 0b1 0 1 0

a | b1 1 1 0

مقدار عبارت عبارت

C++ Tutorial [email protected] 36

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

عملگرهاي جابجائي -5د صحيح عملگرهاي جابجائي را براي جابجاكردن بيت هاي يك كاراكتر و يا يك عد

: مثال . به كار مي بريم ‘a’ >> 1‘E’ << 40110 0001 a آرايش بيتي كاراكتر 0100 0101 E آرايش بيتي كاراكتر‘a’ = 0 1 1 0 0 0 0 1

0 0 1 1 0 0 0 0 = ‘0’ :: ASCII = 48‘E’ = 0 1 0 0 0 1 0 1

0 1 0 1 0 0 0 0 = ‘P’ :: ASCII = ?

C++ Tutorial [email protected] 37

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

)ادامه ( عملگرهاي جابجائي -50110 0001 a آرايش بيتي كاراكتر 0100 0101 E آرايش بيتي كاراكترa = ‘a’ , E = ‘E’a & E = 0 1 0 0 0 0 0 1 = ‘A’a | E = 0 1 1 0 0 1 0 1 = ‘e’a ^ E = 0 0 1 0 0 1 0 0 = ‘$’a << 6 = 0 1 0 0 0 0 0 0 = ‘@’E >> 1 = 0 0 1 0 0 0 1 0 = ‘”’

C++ Tutorial [email protected] 38

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

اولويت عملگرهاي بيتي -5

از چپ به راست&3از چپ به راست^4

از راست به چپ~1

از چپ به راست|5

از چپ به راست<< >>2

اجراي عملگرهاي هم اولويت عملگراولويت

C++ Tutorial [email protected] 39

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

) مثال ( اولويت عملگرهاي بيتي -5a & b >> 3 | c ^ e << 2If a=1 , b=8 , c=3 , e=1 Then

1 & 8 >> 3 | 3 ^ 1 << 21 & 1 | 3 ^ 41 | 3 ^ 41 | 77

C++ Tutorial [email protected] 40

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

عملگرهاي يگاني -6

تبديل نوع)نوع(sizeofاندازه

افزايش++كاهش --

مثبت+منفي-

نشانگر*نشاني&

معناي عملگر عملگر

C++ Tutorial [email protected] 41

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

) مثال( عملگرهاي يگاني -6If i=3 , j=4 , k=5 , m=6++i 4 , j++ 5 , --k 4 , m-- 5i = i + 1; j = j + 1; k = k – 1; x = ++i;(int) 25.5 25 , (float) 12 12.0sizeof 12 2sizeof (float) 4sizeof (int) 2sizeof (double) 8

C++ Tutorial [email protected] 42

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

عملگرهاي واگذاري -7ه كار عملگرهائي هستند كه براي واگذار كردن مقدار يك عبارت به يك متغير ب

: مثال . ميروندa = b + 2;

اين . ئيم مي توانيم عملگرهاي دودوئي حسابي را با عملگرهاي واگذاري تركيب نما :عملگرها عبارتند از

+= -= *= /= %=x = x + 3; ::: x += 3;

خود اين عملگرها . اولويت عملگرهاي واگذاري از همه عملگرهاي ديگر كمتر است رت، داراي اولويت يكسانند و در صورت داشتن چند عملگر واگذاري در يك عبا

. مي باشد اولويت آن ها از راست به چپ

C++ Tutorial [email protected] 43

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

عملگر شرطي-8، عملگري است كه بسته به برقرار بودن و يا نبودن ):?( عملگر شرطي

الگوي به . يك شرط، مقدار يكي از دو عبارت پس از خود را برمي گزيند : كار بستن اين عملگر به صورت زير است

شرط ? 1عبارت : 2عبارت و در غير اين صورت 1مقدار اين عبار در صورت برقراي شرط عبارت

. خواهد شد 2عبارت x = n > 0 ? n : -n;

C++ Tutorial [email protected] 44

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران ترتيب اولويت عملگرها

از چپ به راست&&11

از چپ به راست^9

از چپ به راست== =!7

از چپ به راست||12

4- از چپ به راست+از چپ به راست<< >>5از چپ به راست< =< > =>6

از چپ به راست&8

از چپ به راست|10

از راست به چپ:?13

از چپ به راست* / 3%

از راست به چپ= =+ =- =* =/ =% =& =^ =| = << => >14

1-- از چپ به راست() ++2sizeof - * & (نوع ) از راست به چپ+ ! ~

اجراي عملگرهاي هم اولويت عملگر اولويت

C++ Tutorial [email protected] 45

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

)3-1برنامه (مثال /* P 3.1 Compound assignment operations */#include <stdio.h>main() {int p=10 , q=3;printf(“p = %d , q = %d\n” , p, q);printf(“p += q %d\n” , p += q);printf(“p -= q %d\n” , p -= q);printf(“p *= q %d\n” , p *= q);printf(“p /= q %d\n” , p /= q);printf(“p %= q %d\n” , p %= q);printf(“p ^= q %d\n” , p ^= q);printf(“p &= q %d\n” , p &= q);printf(“p |= q %d\n” , p |= q);printf(“p <<= q %d\n” , p <<= q);printf(“p >>= q %d\n” , p >>= q);

}

C++ Tutorial [email protected] 46

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

3-1اجراي برنامه p = 10 , q = 3p += q 13p -= q 10p *= q 30p /= q 10p %= q 1p ^= q 9p &= q 2p |= q 3p <<= q 24p >>= q 3

C++ Tutorial [email protected] 47

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران )3-2برنامه (مثال

/* P 3.2 Compound assignment operations */#include <stdio.h>main() {int x, n;printf(“Enter a number : “);scanf(“%d” , &n);x = n > 0 ? n : -n;printf(“Absolute value of %d is %d\n”, n , x);

}

Running ProgramEnter a number : 100Absolute value of 100 : is 100

Running ProgramEnter a number : -100Absolute value of -100 : is 100

C++ Tutorial [email protected] 48

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

تمرين پايان فصل . را از ورودي خوانده و عبارات زير را محاسبه و چاپ نمايد a , b, c, d, i, j, k برنامه اي بنويسيد كه مقادير -1

a + b / c – d(a + b) / c – da + b / (c – d)(a + b) / (c – d)i < ji > j i == j i <= ji >= ji != ji > j && j > ki > j || j > k! ( I > j || j > k)

C++ Tutorial [email protected] 49

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

فصل چهارم

دستورها (C Statements)

C++ Tutorial [email protected] 50

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

if عبارت كنترلي -1if (condition) then_clause; [else_clause;]

و در then_clause، بخش )condition(در صورت درست بودن شرط . اجرا مي شود else_clauseصورت نادرست بودن شرط، بخش

: مثال if (x > 100)

x = 100;if (i > 10)

x = 100;else

x = 200;

C++ Tutorial [email protected] 51

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران از دومي بزرگتر باشد مي خواهيم برنامه اي بنويسيم كه دو عدد را بخواند، چنان كه اولي :مثال

.تفاضل دو عدد و در غير اين صورت مجموع آن ها را چاپ نمايد /* P4.1 if statement */

#include <stdio.h>main(){int a, b;

printf(“Enter 2 Integer No. : “);scanf(“%d %d” , &a, &b);if (a>b)

printf(“a – b = %d\n”, a – b);else

printf(“a + b = %d\n”, a + b);}

Running program:Enter 2 Integer No. : 12 9a – b = 3

C++ Tutorial [email protected] 52

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران از دومي بزرگتر باشد تفاضل دو عدد را محاسبه و مي خواهيم برنامه اي بنويسيم كه دو عدد را بخواند، چنان كه اولي :مثال

.دد را چاپ نمايد چاپ نمايد، در غير اين صورت يك عدد ديگر را هم خوانده و مجموع سه ع /* P4.2 compound if statement */

#include <stdio.h>main(){

int a, b, c;printf(“Enter 2 Integer No. : “);scanf(“%d %d” , &a, &b);if (a>b)

printf(“a – b = %d\n”, a – b);else {printf(“Enter third No. : “);scanf(“%d”, &c);printf(“a + b + c = %d\n”, a + b + c); }

}

Running program:Enter 2 Integer No. : 20 32Enter third No. : 8a + b + c = 60

C++ Tutorial [email protected] 53

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران از دومي بزرگتر مي خواهيم برنامه اي بنويسيم كه دو عدد را بخواند، چنان كه اولي :مثال

مي كوچكتر باشد مجموع باشد تفاضل دو عدد را محاسبه و چاپ نمايد، در صورتي كه اولي از دو .دو عدد و در غير اين صورت حاصل ضرب دو عدد را چاپ نمايد

/* P4.3 compound if statement */

#include <stdio.h>main(){

int a, b, c;printf(“Enter 2 Integer No. : “);scanf(“%d %d” , &a, &b);if (a>b)

printf(“a – b = %d\n”, a – b);else if (a < b)printf(“a + b = %d\n “, a + b);

else printf(“a * b = %d\n”, a * b );

}

Running program:Enter 2 Integer No. : 20 20a * b = 400

C++ Tutorial [email protected] 54

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران )Switch(انتخابي - عبارت كنترلي -2

فرمت . خاب نمائيم را زماني به كار مي بريم كه بخواهيم از ميان چند گزينه يكي را انت switchعبارت نتخابي : عبارت به صورت زير است

switch (variable/expression) {case value1 : statement;case value2 : statement;…..[default : statement;]

} :تذكر

. در اين عبارت، مقادير بايستي از نوع كاراكتري و يا صحيح باشند . مقادير نبايد تكراري باشند

. مي توانيم يك يا چند دستور داشته باشيم case براي هر متناظر، بقيه عبارات ]هاي [اي عبارت در هنگام اجرا، به محض برابر شدن با هر يك از حاالت، عالوه بر اجر

case هاي به دنبال آن نيز اجرا خواهد شد .اجرا ) default(برابر نباشد، گزينه مربوط به بند پيش فرض ) value( اگر مقدار عبارت با هيچ يك از مقادير

. مي شود

C++ Tutorial [email protected] 55

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران بخواند ، نام آن مي خواهيم برنامه اي بنويسيم كه هر كدام از اعداد يك تا سه را كه :مثال

.عدد را چاپ نمايد/* P4.4 switch statement */

#include <stdio.h>main(){

int n;printf(“Enter a number (1 – 3) : “);scanf(“%d” , &n);switch (n) {

case 1 : printf(“One\n”);case 2 : printf(“Two\n”);case 3 : printf(“Three\n”);default : printf(“Other\n”); }

}

Running program:Enter a number (1 – 3) : 2TwoThreeOther

C++ Tutorial [email protected] 56

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران ادامه – switch عبارت كنترلي -2

خاتمه يابد و بقيه عبارات به دنبال آن اجرا نشود، بايد از دستور switch، دستور caseعبارات متناظر با يك / براي اينكه بعد از اجراي عبارت breakاستفاده نمائيم .

/* P4.5 switch statement */

#include <stdio.h>main(){

int n;printf(“Enter a number (1 – 3) : “);scanf(“%d” , &n);switch (n) {

case 1 : printf(“One\n”); break;

case 2 : printf(“Two\n”);break;

case 3 : printf(“Three\n”); break;

default : printf(“Other\n”); }}

Running program:Enter a number (1 – 3) : 2Two

C++ Tutorial [email protected] 57

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

ادامه – switch عبارت كنترلي -2ها case همانند هم باشند، مي توانيم آن caseاگر گزينه هاي چند

عبارات / را بدون گزينه زير هم و يا به دنبال هم نوشته، تنها عبارت . را بنويسيم caseمربوط به آخرين

C++ Tutorial [email protected] 58

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران :مثال

/* P 4.6 switch statement for similar value */#include<stdio.h>#include<conio.h>main(){

char ch;printf(“Enter a letter : “);ch = getche();switch (ch) {

case ‘A’ : case ‘E’ :case ‘I’ :case ‘O’ :case ‘U’ :case ‘Y’ :case ‘a’ :case ‘e’ :case ‘i’ :case ‘o’ :case ‘u’ :case ‘y’ :

printf(“\n%c is a vowel\n”, ch);break;

default :printf(“\n%c is a consonant\n” , ch);

}}Running programEnter a letter : EE is a vowel

C++ Tutorial [email protected] 59

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

عبارات ساخت حلقه-3 ناميده عبارات برنامه كه قابليت اجرا براي چند مرتبه را داشته باشند، حلقه / تعدادي از دستورها

. ، عبارات زير را براي ساخت حلقه ها به كار مي بريم Cدر زبان . مي شوند ).while( حلقه هاي پيش شرط -1).do while( حلقه هاي پس شرط -2).for( حلقه هاي با شمارش معين -3

C++ Tutorial [email protected] 60

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

)while( حلقه پيش شرط -1-3:قالب اين دستور به صورت زير است . مرتبه تكرار شوند nعباراتي هستند كه ميتوانند از صفر تا , اين عبارات

while (condition) statement;توجه داشته باشيم كه . قرار مي دهيم } و { و يا در صورتي كه بخواهيم چند عبارت در حلقه اجرا شود، آن ها را در

: يشودابتدا شرط بررسي و در صورت درست بودن شرط، عبارات داخل حلقه اجرا م

while (condition) {statement1;statement2;……

}

C++ Tutorial [email protected] 61

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران )مثال ( حلقه پيش شرط -1-3

/* P4.7 while statement */

#include <stdio.h>main(){

int n=0;while (n < 10) {

printf (“%d\n”, n);++n;}

}

Running program0123456789

C++ Tutorial [email protected] 62

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

) do while( حلقه پس شرط -2-3شود كه در صورت در اين حلقه ها، ابتدا دستورات داخل حلقه اجرا و سپس شرط بررسي مي دستور بعد از حلقه درست بودن شرط، حلقه مجددا اجرا و در غير اين صورت، كنترل به اولين

: قالب اين دستور به شكل زير است . مي رود do statement while (condition);

. قرار مي دهيم } و { و اگر بيش از يك عبارت در داخل حلقه داشته باشيم، آن ها را در ميان do {

….….

} while ( condition);وج از حلقه را توجه داشته باشيم كه در هر دو حلقه پيش شرط و پس شرط بايستي شرط خر

.در غير اين صورت يك حلقه بي پايان خواهيم داشت . محقق نمائيم.در حلقه پس شرط، عبارات داخل حلقه حداقل يك مرتبه اجرا مي شوند : تذكر

C++ Tutorial [email protected] 63

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران ) مثال ( حلقه پس شرط -2-3

/* P4.8 do-while statement */

#include <stdio.h>main(){

int n=0;do {

printf (“%d\n”, n);++n;} while (n < 10);

}

Running program0123456789

C++ Tutorial [email protected] 64

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

)for( حلقه هاي با شمارش معين -3-3قالب اين . ي تكرار شود اين حلقه ها را زماني بكار مي بريم كه بدانيم حلقه چند مرتبه بايست

: دستور به صورت زير است for ( statement1 ; condition ; statement2 ) loop_statement

اين دستور . اجرا مي شود ) اجرا مي شود forيعني در اولين مرتبه كه دستور ( ، عبارتي است كه در آغاز كار 1عبارت ، عبارتي است منطقي كه اگر conditionشرط يا . را معموال براي مقداردهي اوليه به متغير شمارنده بكار مي بريم

هنگامي كه عبارت . ، كه آن را بدنه حلقه مي ناميم، اجرا مي شود loop_statementدرست باشد، عبارت اين عبارت، . ، معموال براي تغيير مقدار شمارنده به كار مي رود 2عبارت . نادرست شود، اجراي دستور پايان مي يابد

. كه حلقه تكرار شود، پس از آخرين دستور حلقه، اجرا مي شود هر بار :مثال

for ( n = 0 ; n < 10 ; ++n ) ……

C++ Tutorial [email protected] 65

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران )مثال ( حلقه با شمارش معين -3-3

/* P4.9 for statement */

#include <stdio.h>main(){

int n;for ( n = 0 ; n < 10 ; ++n )

printf (“%d\n”, n);}Running program0123456789

. بنويسيد دستورهاي معادل براي حلقه هاي پيش شرط و حلقه هاي با شمارش معين را : تمرين

C++ Tutorial [email protected] 66

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

) ادامه( حلقه هاي با شمارش معين -3-3. بنويسيد دستورهاي معادل براي حلقه هاي پيش شرط و حلقه هاي با شمارش معين را : تمرين

for ( statement1 ; condition ; statement2 ) loop statement[s]

statement1 ;while ( condition ) {

loop_statement[s] ;statement2 ;

}

C++ Tutorial [email protected] 67

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

) ادامه( حلقه با شمارش معين -3-3 مي توان بيش از يك دستور نوشت كه اين عبارات 2 و عبارت 1، به جاي عبارت forدر عبارت

:مثال . را با ويرگول از يكديگر جدا مي كنيم for ( n=0 , m=9 ; n<10 ; ++n , --m ) …..

سپس تا زماني . واگذار مي شوند m و nدر اين مثال، نخست عددهاي صفر و نه به متغيرهاي nپس از پايان اجراي عبارات داخل حلقه، به . است حلقه تكرار مي شود 10 كوچكتر از nكه

. يكي كم مي شود mيكي اضافه و از

C++ Tutorial [email protected] 68

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران )مثال ( حلقه با شمارش معين -3-3

/* P4.10 for statement */

#include <stdio.h>main(){

int n, m ;for ( n = 0 , m = 9 ; n < 10 ; ++n , --m )

printf (“n = %d m = %d\n”, n , m);}Running program

n = 0 m = 9n = 1 m = 8n = 2 m = 7n = 3 m = 6n = 4 m = 5n = 5 m = 4n = 6 m = 3n = 7 m = 2n = 8 m = 1n = 9 m = 0

. بنويسيد دستورهاي معادل براي حلقه هاي پيش شرط و حلقه هاي با شمارش معين را : تمرين

C++ Tutorial [email protected] 69

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

) Nested Loop( حلقه هاي تودرتو -4پيش شرط (ت حلقه حلقه هاي تودرتو هنگامي ساخته مي شوند كه در درون يك حلقه، يك عبار

:مثال . ، حلقه پس شرط و يا حلقه با شمارش معين، داشته باشيم

for ( i = 0 ; i <= 10 ; ++i )for ( j = 0 ; j <= 10 ; ++j )

……..

.برنامه اي بنويسيد كه جدول ضرب را روي صفحه نمايش نشان دهد : تمرين

C++ Tutorial [email protected] 70

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

) ادامه( حلقه هاي تودرتو -4.برنامه اي بنويسيد كه جدول ضرب را روي صفحه نمايش نشان دهد : تمرين

/* P4.11 Multiplication table */#include <stdio.h>main(){int i, j ;for ( i = 0 ; i <= 10 ; ++i )

for ( j = 0 ; j <= 10 ; ++j )printf (“%4d” , i * j ) ;

}آيا برنامه فوق بدرستي جدول ضرب را روي صفحه نشان مي دهد؟

C++ Tutorial [email protected] 71

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

) ادامه( حلقه هاي تودرتو -4. برنامه اي بنويسيد كه جدول ضرب را روي صفحه نمايش نشان دهد : تمرين

/* P4.11 Multiplication table */#include <stdio.h>main(){

int i , j ;for ( i = 0 ; i <= 10 ; ++i )

for ( j = 0 ; j <= 10 ; ++j )printf (“%4d” , i * j ) ;

printf (“\n”);}

آيا برنامه فوق بدرستي جدول ضرب را روي صفحه نشان مي دهد؟

C++ Tutorial [email protected] 72

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

) ادامه( حلقه هاي تودرتو -4. برنامه اي بنويسيد كه جدول ضرب را روي صفحه نمايش نشان دهد : تمرين

/* P4.11 Multiplication table */#include <stdio.h>main(){

int i , j ;for ( i = 0 ; i <= 10 ; ++i ) {

for ( j = 0 ; j <= 10 ; ++J )printf (“%4d” , i * j ) ;

printf (“\n”);}

}آيا برنامه فوق بدرستي جدول ضرب را روي صفحه نشان مي دهد؟ بلي

C++ Tutorial [email protected] 73

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

دستورهاي پرش -5عباراتي هستند كه مسير اجراي برنامه را بي / دستورهاي پرش، دستورها .اين عبارات به شرح زير مي باشند . هيچ شرطي تغيير مي دهند

).goto( دستور جهش -1).break( قطع / دستور برش -2). continue( دستور ادامه -3).return( دستور بازگشت -4

C++ Tutorial [email protected] 74

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

تمرين پايان فصل برنامه اي بنويسيد كه به كمك عبارت حلقه پيش شرط، مجموع -1

. بخش پذير باشند را نمايش دهد 7 را كه بر 100عددهاي كوچكتر از برنامه اي بنويسيد كه يكصد عدد صحيح را از ورودي خوانده، -2

.ميانگين، بزرگترين و كوچكترين آن ها را چاپ نمايد برنامه اي بنويسيد كه دومين كوچكترين را از ميان يكصد عدد -3

.ورودي صحيح كه خوانده مي شود را چاپ نمايد . را محاسبه و نمايش دهد 7 برنامه اي بنويسيد كه فاكتوريل عدد -4

C++ Tutorial [email protected] 75

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

) ادامه(تمرين پايان فصل. برنامه اي بنويسيد كه به كمك حرف ستاره، اشكال زير را چاپ نمايد -4

** ** * ** * * *

** * *

* * * * ** * * * * * * *

C++ Tutorial [email protected] 76

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

فصل پنجم

توابع (Functions)

C++ Tutorial [email protected] 77

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

. ندتابع، برنامه هاي كوچكي هستند كه براي انجام كاري ويژه نوشته مي شو :تعريف تابع تواند يك مقدار را در يك تابع ميتواند چند مقدار وروردي در زمان فراخواني داشته و نيز مي

:تابع ها بر دو نوع هستند . هنگام پايان در خروجي داشته باشد و cاين تابع ها توسط توليد كنندگان مترجم . كه از پيش آماده شده اند: توابع كتابخانه اي -1

، scanfاز جمله توابع كتابخانه اي ميتوانيم . يا نرم افزار نويسان ديگر نوشته و توليد مي گردد printf ،getche ،sqrt و از اين دست را نام برد .

اين توابع توسط كاربران براي انجام كارهاي خاص خود، : توابع نوشته شده توسط كاربر -2. نوشته مي شوند

C++ Tutorial [email protected] 78

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

:فرمت تابع return_type Function_Name ([argument_type argument][,…])

{statements;}

:مثال

int sum ( int x, int y){

return x + y;}

C++ Tutorial [email protected] 79

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران :5-1برنامه

/* P5.1 User_Defined function */#include<stdio.h>

int sum(int x, int y);

main(){int a, b;do {

printf(“\nEnter a & b : “);scanf(“%d %d”, &a, &b);printf(“a + b = %d\n”, sum(a, b));

} while (a);}

int sum(int x, int y){

return x + y ;}

C++ Tutorial [email protected] 80

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

:5-1اجراي برنامه Enter a & b : 12 28a + b = 40

Enter a & b : 2000 3210a + b = 5210

Enter a & b : 0 5a + b = 5

C++ Tutorial [email protected] 81

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران :5-2برنامه

/* P5.2 User_Defined function ver2 */#include<stdio.h>

int sum(int x, int y);

main(){int a, b;do {

printf(“\nEnter a & b : “);scanf(“%d %d”, &a, &b);sum (a , b);

} while (a);}

int sum(int x, int y){

printf (“a + b = %d\n” , x + y);}

C++ Tutorial [email protected] 82

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

:5-2اجراي برنامه Enter a & b : 12 8a + b = 20

Enter a & b : 234 615a + b = 849

Enter a & b : 0 2a + b = 2

C++ Tutorial [email protected] 83

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران :5-3برنامه

/* P5.3 User_Defined function ver2 */#include<stdio.h>

fun (int q);

int main(){

int p=100;

printf(“\np1 = %d\n“, p);fun(p);printf(“p4 = %d\n”, p);return 0;

}

fun (int q){printf (“p2 = %d\n” , q);q = 333;printf(“p3 = %d\n”, q);

}

C++ Tutorial [email protected] 84

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

:5-3اجراي برنامه p1 = 100p2 = 100p3 = 333p4 = 100

Aه شده يك حرف بزرگ تابعي بنويسيد كه يك كاراكتر را گرفته، در صورتي كه كاراكتر گرفت : 1تمرين .ا برگرداند باشد، معدل كوچك آن را برگردانده و در غير اين صورت خود كاراكتر ر Zتا

ه شده رقم باشد، مقدار تابعي بنويسيد كه يك كاراكتر را گرفته، در صورتي كه كاراكتر گرفت : 2تمرين True و در غير اين صورت مقدار False برگرداند .

C++ Tutorial [email protected] 85

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران :5-4برنامه ) : Recursive(توابع بازگشتي

/* P5.4 User_Defined function ver2 */#include<stdio.h>

Double fact (int n);

int main(){

int num = 1;while (num) {

printf(“\nEnter a number < 0 for quit > : “);scanf(%d”, &num);printf(“%d! = %.0f\n”, num, fact(num)); }

return 0;}

Double fact (int n){if (n <= 1)

return 1;elsereturn n * fact(n – 1);

}

C++ Tutorial [email protected] 86

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

:5-4اجراي برنامه Enter a number < 0 for quit > : 55! = 120

Enter a number < 0 for quit > : 88! = 40320

Enter a number < 0 for quit > : 1414! = 87178291200

Enter a number < 0 for quit > : 00! = 1

C++ Tutorial [email protected] 87

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

:روش كار در توابع بازگشتي

322 * fact(1)411

233 * fact(2)144 * fact(3)

مقدار بازگشتي مقدار پارامترشماره فراخواني

C++ Tutorial [email protected] 88

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

تمرين پايان فصل شده تابعي بنويسيد كه يك كاراكتر را گرفته، در صورتي كه كاراكتر گرفته -1

. حرف صدادار باشد مقدار يك و در غير اين صورت مقدار صفر برگرداند .ند تابعي بنويسيد كه يك كاراكتر را گرفته، كاراكتر بعدي آن را برگردا -2كار . ايد برنامه اي بنويسيد كه پنج عدد را خوانده، ميانگين آن ها را چاپ نم -3

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

بنويسيد كه يك عدد صحيح را گرفته و بدون استفاده از printbit تابعي بنام -4. آرايه، مقدار دودوئي آن را چاپ نمايد

C++ Tutorial [email protected] 89

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

فصل ششم

آرايه (Array)

C++ Tutorial [email protected] 90

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

:تعريف آرايه .ايه گفته مي شود به مجموعه اي از داده هاي هم نوع كه زير يك نام گرد آمده باشند، آر

. گفته مي شود arبراي مثال به مجموعه عناصر زير، مجموعه متغيرهاي آرايه

ar[ ] ar[ ] ar[ ] ar[ ] ar[ ]

C++ Tutorial [email protected] 91

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

: آرايه يك بعدي را به صورت زير نيز مي توان نشان داد

ar[ ]

ar[ ]

ar[ ]

ar[ ]

ar[ ]

C++ Tutorial [email protected] 92

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

) :ادامه (تعريف آرايه .، فرمت زير را به كار مي بريم Cبراي تعريف آرايه در زبان

data_type Array_Name [No_of_Elements]:مثال

int ar[4]; و 0 عنصر مي باشد كه اولين عنصر با انديس 5 داراي arاين تعريف به اين معني است كه آرايه

. مشخص مي گردد و همگي عناصر مقادير صحيح مي گيرند 4آخرين عنصر با انديس

ar[0] ar[1] ar[2] ar[3] ar[4]

C++ Tutorial [email protected] 93

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

بنابراين تمام قوانين . هر عنصر آرايه مانند يك متغير معمولي است . مربوط به متغيرها، در مورد عناصر آرايه نيز صادق است

: بنابراين ar[0] = 25;b = ar[0];ar[1] = ar[0] * 2;ar[4] = ar[0] + ar[1];

. مي توانيم در همان بخش تعريف، به عناصر آرايه مقداردهي كنيم int ar[5] = { 5, 3, 9, 12, 4, 3};

C++ Tutorial [email protected] 94

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

) :ادامه (تعريف آرايه : با اين تعريف خواهيم داشت

int ar[4]= { 5, 3, -9, 12, 4};

ar[0] ar[1] ar[2] ar[3] ar[4]

412-935

C++ Tutorial [email protected] 95

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

) :ادامه (تعريف آرايه . خودداري نمودنوشتن تعداد عناصر آرايه در تعريف آرايه و مقداردهي به آن مي توان از

int ar[]= { 5, 3, -9, 12, 4};

ar[0] ar[1] ar[2] ar[3] ar[4]

412-935

C++ Tutorial [email protected] 96

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران :6-1برنامه

/* P6.1 Array */#include<stdio.h>

void main(){int b, a[6] = {5, 3, 9, 12, 4, 3};printf(“a[3] = %d\n”, a[3]);printf(“a[5] = %d\n”, a[5]);b = a[3];a[5] = 100;printf(“b = %d\n”, b);printf(“a[5] = %d\n”, a[5]);

}

Running Program:a[3] = 12a[5] = 3b = 12a[5] = 100

C++ Tutorial [email protected] 97

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

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

.اين صورت، شمارنده حلقه مي تواند به عنوان انديس آرايه استفاده شود :6-2برنامه

/* P6.2 Array & Loops*/#include<stdio.h>

void main(){

int i, a[6] = {5, 3, 9, 12, 4, 3};for (i = 0 ; i <= 5 ; ++i)printf(“a[%d] = %d\n”, i , a[i]);

}

Running Program:a[0] = 5a[1] = 3a[2] = 9a[3] = 12a[4] = 4a[5] = 100

C++ Tutorial [email protected] 98

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران و برنامه اي بنويسيد كه عالوه بر كار انجام شده در مثال باال، مجموع :6-3برنامه

. ميانگين آنها را نيز چاپ نمايد /* P6.3 Array elements & sum & average*/#include<stdio.h>

void main(){int i, sum=0, a[] = {5, 3, 9, 12, 4, 3};for (i = 0 ; i <= 5 ; ++i){sum += a[i];printf(“a[%d] = %d\n”, i , a[i]); }

printf(“\nSum = %d\n”, sum);printf(“Average = %f\n”, sum / i);

}آيا برنامه باال نتيجه مورد نظر و درست را چاپ مي كند؟

C++ Tutorial [email protected] 99

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران )درست( :6-3برنامه

/* P6.3 Array elements & sum & average*/#include<stdio.h>

void main(){

int i, sum=0, a[] = {5, 3, 9, 12, 4, 3};for (i = 0 ; i <= 5 ; ++i) {sum += a[i];printf(“a[%d] = %d\n”, i , a[i]); }

printf(“Sum = %d\n”, sum);printf(“Average = %.2f\n”, (float)sum / i);

}

Running Program:a[0] = 5a[1] = 3a[2] = 9a[3] = 12a[4] = 4a[5] = 100Sum = 36Average = 6.00

C++ Tutorial [email protected] 100

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران نمايش مي دهد؟ / برنامه زير چه كاري انجام مي دهد :6-4برنامه

/* P6.4 */#include<stdio.h>

void main(){

int i, num[10];for (i = 0 ; i <= 9 ; ++i) {

printf(“num[%d] = ”, i);scanf(“%d”, num[i]); }

printf(“\n”);

for (i = 0 ; i <= 9 ; ++i) printf(“%3d”, num[i]);

printf(“\n”);

for (i = 9 ; i >= 0 ; --i) printf(“%3d”, num[i]);

printf(“\n”);

}

C++ Tutorial [email protected] 101

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

: اجراي برنامه :6-4برنامه Running Program:nam[0] = 12nam[1] = 9nam[2] = 6nam[3] = 7nam[4] = 11nam[5] = 15nam[6] = 43nam[7] = 80nam[8] = 1nam[9] = 5

12 9 6 7 11 15 43 80 1 55 1 80 43 15 11 7 6 9 12

C++ Tutorial [email protected] 102

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران نمايش مي دهد؟ / برنامه زير چه كاري انجام مي دهد :6-5برنامه

/* P6.5 */#include<stdio.h>int fun1(int x, int y);

main(){int i , ar[6] = {8,90,34,-75,55,2,};/*for (i=0; i<=6 ; ++i)

{printf("\n%dth No : ",i);scanf("%d",&ar[i]);

}*/for (i=0; i<=5 ; ++i){printf("\nAr[%d] = %d",i,ar[i]);/*printf("\n2 Vahed addition is = %d", fun1(ar[i],2));*/}

}int fun1(int x, int y){printf("Input No = %d %d",x , y);return x + y;

}

}

C++ Tutorial [email protected] 103

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

:آرايه كاراكتري ، Cدر زبان . كتري مي باشند آرايه كاراكتري آرايه اي هستند كه عناصر آرايه داراي داده هاي كارا

در اين حالت، هر كاراكتر در يك عنصر آرايه جاي . اين آرايه ها را به جاي رشته به كار مي بريم :مثال . مي گيرد

char ar[7];char ar[7] = {‘A’ , ‘l’ , ‘i’ };

ar[0] ar[1] ar[2] ar[3] ar[4] ar[5] ar[6]

A l ???\0i

C++ Tutorial [email protected] 104

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

) ادامه: (آرايه كاراكتري يعني همه بيت هاي آن (0 ، كاراكتر پوچ كه داراي كد اسكي 3 در عنصر شماره

برنامه هنگامي كه به اين صفر مي رسد ميفهمد . قرار مي گيرد ) صفر دودوئي است . بقيه عناصر داراي مقدار قبلي خود مي باشند . كه به پايان رشته رسيده است

char ar[7];char ar[7] = {‘A’ , ‘l’ , ‘i’ };

ar[0] ar[1] ar[2] ar[3] ar[4] ar[5] ar[6]

A l ???\0i

C++ Tutorial [email protected] 105

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران نمايش مي دهد؟ / برنامه زير چه كاري انجام مي دهد :6-5برنامه

/* P6.5 */#include<stdio.h>

void main(){

char i, num[10] = {‘F’ , ‘e’ , ‘r’ , ‘d’ , ‘o’ , ‘w’ , ‘s’ , ‘i’ } ;for (i = 0 ; i <= 9 ; ++i)

printf(“%c = %d\n”, name[i] , name[i]);printf(“\nName = %s\n”, name);

}

Running ProgramF = 70e = 101r = 114d = 100o = 111w = 119s = 115i = 105

= 0= 0

Name = Ferdowsi

C++ Tutorial [email protected] 106

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

: آرايه دو بعدي سطر و آرايه دو بعدي را مي توان همچون جدولي در نظر گرفت كه داراي تعداي

. تعدادي ستون باشد

ar[0][0]

ar[3][2]

ar[0][1] ar[0][2]

ar[3][0]

ar[2][0]

ar[1][0]

ar[2][2]

ar[1][2]

ar[2][1]

C++ Tutorial [email protected] 107

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

) ادامه: (آرايه دو بعدي int ar[4][3] = {

{15, 6, 13 },{9, 17, 2},{4, 5, 4}, {10, 11, 12} }

121110

454

2179

13615

ar[0][0]

ar[3][2]

ar[0][1] ar[0][2]

ar[3][0]

ar[2][0]

ar[1][0]

ar[2][2]

ar[1][2]

ar[2][1]

C++ Tutorial [email protected] 108

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

. مقداردهي باال را به صورت زير نيز مي توانيم بنويسيم )ادامه(: آرايه دو بعدي int ar[4][3] ={15, 6, 13, 9, 17, 2, 4, 5, 4, 10, 11, 12};

121110

454

2179

13615

ar[0][0]

ar[3][2]

ar[0][1] ar[0][2]

ar[3][0]

ar[2][0]

ar[1][0]

ar[2][2]

ar[1][2]

ar[2][1]

C++ Tutorial [email protected] 109

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

)ادامه(: آرايه دو بعدي تن تعداد سطرها و چنانچه تعداد داده ها و عنصرهاي آرايه برابر باشند، مي توان از نوش

. ستون هاي آرايه خودداري كرد float x[][] ={

{1.25, 12.2, 42.3}{5.6, 4.11, 98.7}

};.د، آرايه اي دو بعدي و اعشاري است كه داراي دو سطر و سه ستون مي باش xدر اين مثال، آرايه

ره سطر و پس از آن شماره براي دستيابي به عناصر آرايه دوبعدي، نخست بايد نام آرايه، سپس شما . ستوني كه عنصر در آن جاي دارد را نوشت

: مثالu = t[2][1] ;t[1][2] = 200 ;

C++ Tutorial [email protected] 110

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

):ادامه (آرايه دو بعدي :مقداردهي به عناصر آرايه دو بعدي از ورودي

/*P6.5 Two_Dimensional Array */#include<stdio.h>void main() {

int i, j, ar[4][3];for (i = 0 ; i <= 3 ; ++i)

for (j = 0 ; j <= 2 ; ++j) {printf(“ar[%d][%d] = “, i , j);scanf(“%d”, ar[i][j]);

……………………

}

C++ Tutorial [email protected] 111

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران ):ادامه(آرايه دو بعدي

:مقداردهي به عناصر آرايه دو بعدي از ورودي و چاپ مقادير /*P6.5 Two_Dimensional Array */#include<stdio.h>void main() {int i, j, ar[4][3];for (i = 0 ; i <= 3 ; ++i)

for (j = 0 ; j <= 2 ; ++j){printf(“ar[%d][%d] = “, i , j);scanf(“%d”, ar[i][j]);}

for (i = 0 ; i <= 3 ; ++i) for (j = 0 ; j <= 2 ; ++j)

printf(“ar[%d][%d] = %d“, i , j, ar[i][j]);

}

C++ Tutorial [email protected] 112

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

: آرايه چند بعدي data-type array-name [dimension-1][dimension-2][……]

: مثالint r[2][3][2]={

{{1, 2},{3, 4},{5, 6}

},{{6, 7},{8, 9},{10, 11}

};. عنصر مي باشد 12=2*3*2 تعريف كرده ايم كه داراي rدر اين مثال آرايه اي سه بعدي و صحيح به نام

C++ Tutorial [email protected] 113

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

تمرين پايان فصل رگ ترين، كوچك ترين برنامه اي بنويسيد كه تعداد صد عدد اعشاري را از ورودي خوانده، بز – 1

.و انديس موقعيت اين اعداد در آرايه را چاپ نمايد ه صد عنصري صحيح برنامه اي بنويسيد كه دومين بزرگ ترين را از يك مجموعه عناصر آراي -2

.يدكه مقادير آن از ورودي دريافت مي شود را به همراه انديس آن چاپ نما عنصره قرار 256 را در يك آرايه 255 تا 0 برنامه اي بنويسيد كه كاراكترهاي با كد اسكي -3

. دهد و در نهايت هر عنصر را با مقدارش در هر سطر چاپ نمايد . برنامه اي بنويسيد كه جدول ضرب را چاپ نمايد -4ا به صورت حبابي برنامه اي بنويسيد كه يكصد عدد صحيح را از ورودي خوانده و آن ها ر -5

.مرتب و چاپ نمايد -ا به صورت درجي برنامه اي بنويسيد كه يكصد عدد صحيح را از ورودي خوانده و آن ها ر -6

.درجا مرتب و چاپ نمايد

C++ Tutorial [email protected] 114

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

فصل هفتم

كتابخانه اي / توابع توكار Library Function

C++ Tutorial [email protected] 115

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

فايل هائي كه متشكل از پرونده ها و توابع كاربردي هستند، در :مهم ترين آن ها عبارتند از . بسيار وجود دارند ++Cزبان

stdio.h ورودي خروجي استاندارد -1 string.h رشته-2 math.h توابع رياضي -3 stdlib.h كتابخانه استاندارد -4 ctype.h نوع كاراكتري -5 time.h زمان -6

C++ Tutorial [email protected] 116

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

پرونده توابع رياضي . وجود دارد و حاوي توابعي براي عمليات رياضي ميباشد math.hپرونده توابع رياضي با نام

تابع كمان كسينوس -acos(d) d

1 و -1كسينوس بايستي بين . كماني كه كسينوس آن معلوم است، محاسبه ميكند . باشد

تابع كمان سينوس -asin(d) d

1 و -1سينوس بايستي بين . كماني كه سينوس آن معلوم است، محاسبه ميكند . باشد

C++ Tutorial [email protected] 117

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

تابع كمان كسينوس -cos(d) dcosh(d) d

در تابع دوم، كسينوس هذلوليائي پارامتر محاسبه . كسينوس پارامتر را برميگرداند. مي شود

توابع سينوس -sin(d) d

sinh(d) dشكل دوم تابع براي محاسبه سينوس هذلوليائي . سينوس پارامتر را برمي گرداند

. بكار مي رود

C++ Tutorial [email protected] 118

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

تابع كمان كتانژانت -atan(d) d

atan2(d1,d2) dدر تابع دوم، كمان تانژانت . كماني كه تانژانت آن معلوم است، محاسبه ميكند

d1/d2 رامحاسبه ميكند .

تابع حد باال-ceil(d) d

دو دقتي كوچكترين عدد صحيح بزرگتر از پارامتر را پيدا كرده، آن را به عددي : مثال . تبديل و برمي گرداند

ceil(2.3) 3

C++ Tutorial [email protected] 119

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

توابع تانژانت-tan(d) d

tanh(d) dتابع دوم براي محاسبه تانژانت . تانژانت پارامتر را محاسبه مي كند

چنان كه گفتيم، در توابع رياضي، زوايا برحسب . هذلوليائي بكار مي رود . براي تبديل درجه به راديان، فرمول زير را بكار ميبريم . راديان مي باشد

r = d * pi / 180 ثابت pi زاويه برحسب درجه و d زاويه برحسب راديان، rدر اين فرمول،

از اين رو . به صورت ثابت نمادين تعريف شده است pi. پي مي باشد . نيازي به تعريف دوباره آن نيست

C++ Tutorial [email protected] 120

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

تابع قدرمطلق اعشاري-fabs(d) d. قدرمطلق اعشاري پارامتر را محاسبه مي كند

تابع حد پائين-floor(d) d

دو بزرگترين عدد صحيح كوچكتر از پارامتر را پيدا كرده، آن را به عددي : مثال . دقتي تبديل و برمي گرداند

ceil(2.3) 2.0

C++ Tutorial [email protected] 121

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

تابع باقيماند اعشاري-fmod(d1,d2) d

عالمت باقيمانده همانند . را محاسبه مي كند d2 و d1باقيمانده تقسيم d1 است .

لگاريتم طبيعي -log(d) d

.پارامتر را محاسبه مي كند ) در پايه نپر (لگاريتم طبيعي

C++ Tutorial [email protected] 122

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

10لگاريتم در پايه -log10(d) d

. محاسبه مي كند 10لگاريتم پارامتر را در پايه

تابع توان-pow(d1,d2) d

d1 را به توان d2 اگر . رسانده، نتيجه را برميگرداندd1 ،برابر صفر باشد d2 بايد عددي مثبت باشد، و اگر d1 ،منفي باشد d2 بايد عددي

.صحيح باشد

C++ Tutorial [email protected] 123

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

تابع ريشه دوم -sqrt(d) d

.پارامتر بايستي عددي مثبت باشد . ريشه دوم پارامتر را محاسبه ميكند

تابع نمائي -exp(d) d

را به توان پارامتر رسانده، نتيجه را ) e = 2.718282( عدد نپر پايه e. ( با اين كار آنتي اگاريتم پارامتر محاسبه مي شود . برميگرداند

). لگاريتم طبيعي است

C++ Tutorial [email protected] 124

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران /* P7.1 Mathematical Function */#include<stdio.h>#include<math.h>void main() {printf("acos(.5) = %f\n",acos(.5));printf("asin(.5) = %f\n",asin(.5));printf("atan(.5) = %f\n",atan(.5));printf("ceil(1.2) = %f\n",ceil(1.2));printf("cos(1.047198) = %f\n",cos(1.047198));printf("cosh(.5) = %f\n",cosh(.5));printf("cot(.5) = %f\n", 1 / tan(.5));printf("exp(.5) = %f\n",exp(.5));printf("fabs(-.5) = %f\n",fabs(.5));printf("floor(1.2) = %f\n",floor(1.2));printf("fmod(7.,4.) = %f\n",fmod(7.,4.)); printf("log(1.648721) = %f\n",log(1.648721));printf("log10(1.648721) = %f\n",log10(1.648721));printf("pow(2.,3.) = %f\n",pow(2.,3.));printf("sin(.523599) = %f\n",sin(.523599));printf("sinh(.523599) = %f\n",sinh(.523599));printf("sqrt(9.) = %f\n",sqrt(9.));printf("tan(.463648) = %f\n",tan(.463648));printf("tanh(.463648) = %f\n",tanh(.463648));

}

C++ Tutorial [email protected] 125

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران پرونده توابع رشته اي

. است كه حاوي توابعي جهت عمليات رشته اي ميباشد string.hپرونده توابع رشته اي

تابع هاي پيوند رشته -strcat(s1,s2) p

strncat(s1,s2,i) p را نشان s1 به پايان رشته اول پيوند داده مي شود و نشانگر، نشاني s2در تابع اول، رشته

. الحاق مي شود s1 به s2 نشان دهنده تعداد كاراكترهائي است كه از iدر تابع دوم، . ميدهد

توابع جستجوي كاراكتر در رشته -strchr(s,c) pstrrchr(s,c) p

. گذاشته مي شود pشاره گر در تابع اول، اولين بار كه كاراكتر در رشته پيداشود، نشاني آن در ا . گذاشته مي شود pشاره گر در تابع دوم، آخرين بار كه كاراكتر در رشته پيداشود، نشاني آن در ا

. اگر كاراكتر در رشته پيدا نشود، نشانگر پوچ مي شود

C++ Tutorial [email protected] 126

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران تابع هاي مقايسه رشته -

strcmp(s1,s2) istrncmp(s1,s2,i) i

باشد، مقدار مثبت، صفر و s1 < s2 و يا s1 > s2 ، s1 = s2بسته به اين كه كاراكتر از دو رشته با هم مقايسه مي iدر تابع دوم، . . يا منفي برگردانده مي شود

.شوند

توابع كپي برداري از رشته -strcpy(s1,s2) p

strncpy(s1,s2,i) p را نشان مي s1 كپي برداري شده، نشانگر نشاني s1 در s2در تابع اول، از رشته

. منتقل مي شود s1 به s2 كاراكتر از iدر شكل دوم تابع، . . دهد

C++ Tutorial [email protected] 127

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

تابع طول رشته -strlen(s) i

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

توابع جستجوي رشته در رشته -strstr(s1,s2) p

پيدا شود، نشاني آن در نشانگر گذاشته s1 در s2اگر رشته اي همانند . در غير اين صورت، نشانگر پوچ مي شود . مي شود

C++ Tutorial [email protected] 128

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران /* P7.2 Mathematical Function */#include<stdio.h>#include<string.h>void main() {

char s1[80] = “Welcome to c “;char s2[80] = “Programming ! “;char s3[] = “Welcome to home “;char *p;strcat(s1,s2);puts(s1);p = strchr(s1,’m’);puts(p);p = strchr(s2,’m’);printf(“\n%d\n”, strcmp(s1,s3));printf(“\n%d\n”, strcmp(s3,s1));printf(“\n%d\n”, strcmp(s1,s3,10));strcpy(s2,s3);puts(s2);strncpy(s2, “This is my school”, 11);puts(s2);printf(“\n%d\n\n”, strlen(s3);p = strstr(s1, “c pro”);printf(“%s\n\n” , p);puts(strtok(s1, “1’)); /*This function split one string to many substring */

}

C++ Tutorial [email protected] 129

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

) stdlib.h(توابع كتابخانه استاندارد

تابع رها كردن -abort()

تابع هاي قدر مطلق-abs(x)labs(i)

در تابع نخست، پارامتر، عددي صحيح و در تابع دوم، پارامتر، . قدرمطلق پارامتر را برمي گرداند . عددي صحيح و بلند مي باشد

C++ Tutorial [email protected] 130

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

تابع تبديل رشته به عددي دو دقتي -atof(s) d

رشته بايد از كاراكترهاي قابل تبديل به عدد دو دقتي . رشته را به عددي دو دقتي تبديل مي كند كار تبديل هنگامي به پايان مي رسد كه كاراكتري . ساخته شده باشد ) 9 تا 0مثل كاراكترهاي (

:مثال . جز اين كاراكترها در رشته باشد atof(“2.5meter”) 2.5

تابع تبديل رشته به عدد صحيح -atoi(s) i

رشته بايد از كاراكترهاي قابل تبديل به عدد دو دقتي . رشته را به عددي دو دقتي تبديل مي كند كار تبديل هنگامي به پايان مي رسد كه كاراكتري . ساخته شده باشد ) 9 تا 0مثل كاراكترهاي (

:مثال . جز اين كاراكترها در رشته باشد atoi(“12-8-74”) 12

C++ Tutorial [email protected] 131

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

تابع تبديل رشته به عدد صحيح بلند -atol(s) i

رشته بايد از كاراكترهاي قابل تبديل به . رشته را به عددي دو دقتي تبديل مي كند كار تبديل هنگامي به . ساخته شده باشد ) 9 تا 0مثل كاراكترهاي (عدد دو دقتي

: مثال . پايان مي رسد كه كاراكتري جز اين كاراكترها در رشته باشد atol(“12-8-74”) 12L

تابع خروج -exit(i)كه -پارامتر به برنامه فراخواننده . برنامه را به صورت طبيعي به پايان مي رساند

. برگشت داده مي شود -معموال سيستم عامل مي باشد

C++ Tutorial [email protected] 132

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

تابع تصادفي rand() i

ير هر بار كه تابع را فراخوانيم، عددي تصادفي را كه مقدار آن صحيح و غ . منفي است، برمي گرداند

C++ Tutorial [email protected] 133

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

) time.h(فايل تابع هاي زمان تابع زمان -

time(p) iمي دهد، و در غير اين اگر دستگاه داراي ساعت سخت افزاري باشد، زماني را كه آن ساعت نشان

. زمان برحسب ثانيه است و از تاريخ معيني محاسبه مي شود . را برمي گرداند -1صورت مقدار .نشانگر از نوع صحيح بلند است كه نشاني همين زمان را داراست

تابع تبديل زمان به رشته -ctime(p) s

با اين كار . ت تبديل مي كند زماني را كه نشاني آن در نشانگر قرار دارد از ثانيه به تاريخ و ساع .تاريخ روز و ساعت به صورت رشته اي همانند رشته زير به دست مي آيد

Sun Jan 01 11:37:13 1995 .1995 ثانيه سال 13 دقيقه و 37 و 11 ژانويه، ساعت 1يكشنبه : يعني

C++ Tutorial [email protected] 134

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

) ctype.h( فايل تابع هاي نوع كاراكتري م يك كاراكتر چه نوع فايل نوع كاراكتري را زماني به كار مي بريم كه بخواهيم بررسي نمائي

....حرف است؟ رقم است؟ و يا از نوع كاراكترهاي كنترلي است؟ و : كاراكتري است رقمي است؟ -تابع تعيين اينكه كاراكتر حرفي -

isalnum(c) iو در غير اين صورت، مقدار ) عددي غير صفر(اگر كاراكتر حرف يا رقم باشد، مقدار درست

.برمي گرداند ) صفر(نادرست تابع تعيين اينكه كاراكتر حرفي است؟ -

isalpha(c) iو در غير اين صورت، مقدار نادرست ) عددي غير صفر(اگر كاراكتر حرف باشد، مقدار درست

.برمي گرداند ) صفر(

C++ Tutorial [email protected] 135

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

تابع تعيين اينكه كاراكتر كنترلي است؟ -iscntrl(c) i

عددي (، مقدار درست ) باشد127 يا برابر 32كد اسكي آن كوچكتر از (اگر كاراكتر كنترلي باشد .برمي گرداند ) صفر( و در غير اين صورت، مقدار نادرست ) غير صفر

تابع تعيين اينكه كاراكتر رقمي است؟ -isdigit(c) i

و در غير اين ) عددي غير صفر( باشد، مقدار درست 9 تا 0اگر كاراكتر يكي از كاراكترهاي .برمي گرداند ) صفر( صورت، مقدار نادرست

C++ Tutorial [email protected] 136

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

تابع تعيين اينكه كاراكتر حرف كوچك است؟ -islower(c) i

و در غير اين ) عددي غير صفر(، مقدار درست )z تا aيعني (اگر كاراكتر حرف كوچك باشد .برمي گرداند ) صفر( صورت، مقدار نادرست

تابع تعيين اينكه كاراكتر حرف بزرگ است؟ -isupper(c) i

و در غير اين ) عددي غير صفر( ، مقدار درست )Z تا Aيعني (اگر كاراكتر حرف بزرگ باشد .برمي گرداند ) صفر( صورت، مقدار نادرست

C++ Tutorial [email protected] 137

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

تابع تبديل به حروف كوچك-tolower(c) i

تا aيعني (باشد، آن را به حرف كوچك معادل خود ) Z تا A( اگر كاراكتر يكي از حروف بزرگ z ( تبديل مي كند.

تابع تبديل به حروف كوچك-toupper(c) i

تا Aيعني (باشد، آن را به حرف بزرگ معادل خود ) z تا a( اگر كاراكتر يكي از حروف كوچك Z ( تبديل مي كند.

C++ Tutorial [email protected] 138

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

فصل هشتم

نشانگر Pointer

C++ Tutorial [email protected] 139

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران به عبارن ديگر، . متغيري است كه براي نگهداري نشاني داده ها در حافظه به كار ميرود :نشانگر

: فرمت تعريف نشانگر چنين است . نشانگر آدرس و يا مكان داده ها در حافظه را نشان مي دهد ; /* data_type * pointer_name; */ نوع داده*نام نشانگر

:مثال int *p;char *ch;

هم ch نشانگري است كه مي تواند نشاني متغيرهاي صحيح را نگهداري نمايد و pدر اين مثال، .نشانگري است كه مي تواند براي نگهداري آدرس كاراكترها به كار رود

:مثال x = *p;

. واگذار نمائيمx قرار دادرد به pدر اين مثال خواسته ايم داده اي را كه نشاني آن در

C++ Tutorial [email protected] 140

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

: مثال int a , *p;a = 100;p = &a;

. به كار بريم a را به جاي p*اكنون در همه جا مي توانيم x = a;y = *p;

. مي شوند 100 برابر y و هم xبا دو دستور فوق، هم

C++ Tutorial [email protected] 141

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

a و متغير 65520 در آدرس pدر شكل زير فرض كرده ايم كه متغير . قرار دارد 65522در آدرس

65522 100

65520

p

65522

a

C++ Tutorial [email protected] 142

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران :8-1برنامه

/* P8.1 Pointer Example */#include <stdio.h>int main(void){

int a,*p;a = 100;p = &a;printf(“address of a = %5u\n”, &a); /* u is unsigned Integer & equal d */printf(“value of a = %d\n\n”, a);printf(“address of p = %5u\n”, &p);printf(“value of p = %5u\n”, p);

}

Running Program

address of a = 65522value of a = 100

address of p = 65520value of p = 65522

C++ Tutorial [email protected] 143

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران : 8-2برنامه

/* P8.2 Pointer & variables */#include <stdio.h>int main(void){

int a, *p, x, y;a = 100;p = &a;x = a;y = *p;printf(“x = %d\n”, x);printf(“y = %d\n”, y);printf(“\na = %d\n”, a);++*p;printf(“a = %d\n”, a);

}

Running Program

x = 100y = 100

a = 100a = 101

C++ Tutorial [email protected] 144

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

. افزوده است a را به 1، عدد p*++در مثال قبل توجه نمائيد كه دستور بايد اگر بخواهيم عملگر افزايش و يا كاهش را پس از نشانگر به كار بريم،

. نشانگر را درون پرانتز قرار دهيم (*p)++(*p)--

++همانگونه كه در مورد اولويت ها صحبت نموديم، اولويت عملگرهاي بنابراين اگر از پرانتز براي تغيير اولويت عملگرها . بيشتر است * از --و

به عبارت (استفاده نكنيم، نخست مقدار نشانگر افزايش و يا كاهش يافته . ، سپس به محتويات نشاني مراجعه ميگردد )ديگر، نشاني تغيير مي كند

C++ Tutorial [email protected] 145

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران : 8-3برنامه

/* P8.3 Pointer increment */#include <stdio.h>int main(void){

int b = 20, a = 10, *p;p = &a;printf(“address of a = %5u\n”, &a);printf(“address of b = %5u\n\n”, &b);++*p;printf(“a = %d p = %u\n”, a, p);*p++;printf(“a = %d p = %u\n”, a, p);++*p;printf(“b = %d p = %u\n”, b, p);

}

Running Program

address of a = 65520address of b = 65522

a = 11 p = 65520a = 11 p = 65522b = 21 p = 65522

C++ Tutorial [email protected] 146

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

: نشانگر و محاسبه ولي تنها . نشانگرها را هم مي توان همچون متغيرهاي ديگر، در محاسبه به كار برد

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

و يا 2n يا n را مي افزائيم، بسته به نوع نشانگر، nهنگامي كه به يك نشانگر عدد دو ، اعشاري ، صحيحكاراكتري، مثال اگر نشانگر از نوع . به آن افزوده مي شود . . . . .

بعد . مي شود . . . و n ،2n ،4n ،8nباشد، مقدار افزايش به ترتيب برابر . . . . و دقتي . را هم نگهداري كند ساختارها و انجمن ها خواهيم ديد كه نشانگر مي تواند آدرس

C++ Tutorial [email protected] 147

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران :8-4برنامه

/* P8.3 Pointer Arithmetic */#include <stdio.h>int main(void){

char c = ‘*’, *p;p = &c;printf(“c = %c p = %u\n” , *p, p);

p += 10;printf(“c = %c p = %u\n” , *p, p);

p -= 10;printf(“c = %c p = %u\n” , *p, p);

}

Running Program

c = * p = 65523c = p = 65533c = * p = 65523

C++ Tutorial [email protected] 148

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

): ادامه (نشانگر و محاسبه دارند، با افزايش و كاهش نشانگر مي توان بر همه داده هائي كه در حافظه جاي

را در حافظه 10 تا 1در برنامه صفحه بعد، به كمك نشانگر عددهاي . دست يافت . گذاشته، سپس آن ها را از حافظه برداشته و چاپ مي كنيم

C++ Tutorial [email protected] 149

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران :8-5برنامه

/* P8.5 Pointer as Array */#include <stdio.h>int main(void){

char n, a[100], *p;p = &a[0] + 10;for (n = 1; n <= 10 ; ++n) {

*p = n;--p; }

for (n = 1; n <= 10 ; ++n) {++p;printf(“%4d”, *p); }

printf(“\n”);for (n = 1; n <= 10 ; ++n) {

printf(“%4d”, *p); --p;}

}

Running Program10 9 8 7 6 5 4 3 2 11 2 3 4 5 6 7 8 9 10

C++ Tutorial [email protected] 150

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

:نشانگر و آرايه . نام آرايه نشانگري است كه نشاني نخستين عنصر آرايه را دارا ميباشد cدر زبان

به كار مي بريم، همين &علت اين كه در دستور پيمايش، نام آرايه را بدون نويسه .است

به روش در زير روش دستيابي به عناصر آرايه اي را هم به شيوه نشانگري و هم . آرايه اي نشان داده ايم

a[0] = *aa[1] = *(a+1)a[2] = *(a+2)……a[n] = *(a+n)

C++ Tutorial [email protected] 151

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران : 8-6برنامه

/* P8.6 Arrays as Pointers */#include<stdio.h>int main(void) {int n,a[10]={1,2,3,4,5,6,7,8,9,10};for (n=0; n<10 ; ++n)printf(“a[%d] = %2d *(a + %d)= %2d\n”, n, a[n], n, *(a + n);

}

Running Programa[0] = 1 *(a + 0) = 1a[1] = 2 *(a + 1) = 2a[2] = 3 *(a + 2) = 3a[3] = 4 *(a + 3) = 4a[4] = 5 *(a + 4) = 5a[5] = 6 *(a + 5) = 6a[6] = 7 *(a + 6) = 7a[7] = 8 *(a + 7) = 8a[8] = 9 *(a + 8) = 9a[9] = 10 *(a + 9) = 10

C++ Tutorial [email protected] 152

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران ، نشانگر را نيز مي توان همانند آرايه به كار بايد دانست همان گونه كه آرايه را مي توان همچون نشانگر به كار برد

. گرفت/* P8.7 Pointers and Arrays */#include<stdio.h>int main(void) {int n, *p, a[10]={1,2,3,4,5,6,7,8,9,10};p = a;for (n=0; n<10 ; ++n)printf(“a[%d] = %2d p[%d] = %2d\n”, n, a[n], n, p[n];

}

Running Programa[0] = 1 p[0] = 1a[1] = 2 p[1] = 2a[2] = 3 p[2] = 3a[3] = 4 p[3] = 4a[4] = 5 p[4] = 5a[5] = 6 p[5] = 6a[6] = 7 p[6] = 7a[7] = 8 p[7] = 8a[8] = 9 p[8] = 9a[9] = 10 p[9] = 10

C++ Tutorial [email protected] 153

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران . واگذار نمائيمpشانگر البته مي توانستيم به جاي نام آرايه، نشاني نخستين عنصر آن را به ن

/* P8.8 Pointers and Arrays */#include<stdio.h>int main(void) {int n, *p, a[10]={1,2,3,4,5,6,7,8,9,10};p = &a[0];for (n=0; n<10 ; ++n)

printf(“a[%d] = %2d p[%d] = %2d\n”, n, a[n], n, p[n];}

Running Programa[0] = 1 p[0] = 1a[1] = 2 p[1] = 2a[2] = 3 p[2] = 3a[3] = 4 p[3] = 4a[4] = 5 p[4] = 5a[5] = 6 p[5] = 6a[6] = 7 p[6] = 7a[7] = 8 p[7] = 8a[8] = 9 p[8] = 9a[9] = 10 p[9] = 10

C++ Tutorial [email protected] 154

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران : نشانگر و رشته

از آن جائي كه آرايه و نشانگر . ، آرايه هاي كاراكتري را به جاي رشته به كار مي بريم Cپيش از اين ديديم كه در زبان . به جاي رشته به كار گرفته شوند را مي توان به جاي هم به كار برد، پس نشانگرهاي كاراكتري مي توانند

: مثال /* P8.9 Pointers and Strings */#include<stdio.h>int main(void) {char *name, name[20]=“Anahita”;name = nam;printf(“%s \n%s \n”, nam, name);

}

Running ProgramAnahitaAnahita

C++ Tutorial [email protected] 155

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران ) : ادامه(نشانگر و رشته

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

: مثال /* P8.10 Pointers and Strings */#include<stdio.h>int main(void) {char *name2, name1[10]”;

/* name1 = “Farshad”; Error! */name2 = “Farshad”;printf(“%s\n”, name2);

}

Running ProgramFarshad

C++ Tutorial [email protected] 156

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران ) : ادامه(نشانگر و رشته

به آرايه منتقل كنيم و يا اينكه با استفاده از براي گذاشتن رشته در آرايه كاراكتري، يا بايد كاراكترها را يكي يكي . قرار دارد string.hاين تابع در فايل . اين كار را انجام دهيم strcpyتابع

: مثال /* P8.11 Pointers and Strings */#include<stdio.h>#include<string.h>int main(void) {char nam[10];strcpy(nam, “Farshad”);printf(“%s\n”, nam);

}

Running ProgramFarshad

C++ Tutorial [email protected] 157

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

آرايه نشانگري، آرايه اي است كه هر عنصر آن يك نشانگر : آرايه نشانگري :مثال . ميباشد

char *city[5]; جاي رشته به كار در اين مثال، چون نشانگرها از نوع كاراكتري مي باشند، مي توانند به

در مثال صفحه . در نتيجه مثال باال را مي توان به عنوان آرايه رشته اي به كار برد . روند. ايمبعد، از اين روش براي نگهداري نام پنج شهر بزرگ ايران استفاده كرده

C++ Tutorial [email protected] 158

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران ) پس از چاپ رشته، چشمك زن را به سطر بعد مي برد putsتابع ): ( آرايه نشانگري (مثال

/* P8.12 Pointers Arrays */#include<stdio.h>int main(void) {int i; char *city[]= {“Tehran”,”Mashad”,”Esfahan”,”Tabriz”,Shiraz”};puts(“Five Great Cities”);puts(“-----------------”);for (i=0; i < 5 ; ++i)

printf(“ %s\n”, city[i]);}

Running ProgramFive Great Cities-----------------TehranMashadEsfahanTabrizShiraz

C++ Tutorial [email protected] 159

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

: آرايه نشانگري در برنامه صفحه بعد، آرايه دو . آرايه نشانگري مي تواند بيش از يك بعد داشته باشد

گليسي را همراه بعدي و نشانگري به نام فرهنگ تعريف كرده ايم كه در آن، چند واژه ان . با معادل هاي فارسي آن ها نوشته ايم

C++ Tutorial [email protected] 160

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران ) پس از چاپ رشته، چشمك زن را به سطر بعد مي برد putsتابع ): (آرايه نشانگري (2مثال

/* P8.13 English – Persian Dictionary */#include<stdio.h>int main(void) {int i; char *Farhang[][2]= {“Flower”,“Gol”,”Apple”,”Sib”,”Peach”,”Holu”};puts(“\nEnglish Persian”);puts(“-----------------------”);for (i=0; i < 3 ; ++i)

printf(“-10s %-10s\n”, farhang[i][0], farhang[i][1]);}

Running ProgramEnglish Persian-----------------Flower GolApple SibPeach Holu

C++ Tutorial [email protected] 161

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

: پارامتر نشانگري پارامتر نشانگري . ري مي ناميماگر پارامترهاي تابع از نوع نشانگري باشند، آن ها را پارامتر نشانگ

. به تابع بفرستيم را هنگامي به كار مي بريم كه بخواهيم به جاي يك داده، نشاني آن را :مثال

fun (int *p);. مي باشد n تابعي است كه داراي سك پارامتر نشانگري از نوع صحيح به نام funمثال، در اين

نوع آرايه اي يا تابع ها نمي توانند پارامترهاي خود را تغيير دهند، مگر اين كه از :تذكر در واقع مقداري ( پارامتر نشانگري است، مقدار آن در تابع nدر مثال باال، چون . نشانگري باشند

.مي تواند در تابع تغيير كند) كه اين نشانگر نشاني آن را دارد

C++ Tutorial [email protected] 162

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران :8-14برنامه

/* P8.14 Pointer as Parameter */#include<stdio.h>

void fun (int *p);

int main(){

int a=100, *p = &a;

printf(“\np1 = %d\n“, *p);fun(p);printf(“p4 = %d\n”, *p);return 0;

}

void fun (int *p){printf (“p2 = %d\n” , *q);*q = 333;printf(“p3 = %d\n”, *q);

}

C++ Tutorial [email protected] 163

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

:8-14اجراي برنامه p1 = 100p2 = 100p3 = 333p4 = 100

C++ Tutorial [email protected] 164

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران : نشانگر تابعي

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

نوع *) نشانگر )(پارامترها ( ;:مثال

int (*p) (int n);يح كه داراي يك پارامتر نشانگر تابعي است كه مي تواند براي نگهداري نشاني تابع هاي نوع صح pدر اين مثال،

: براي مثال، اگر تابعي را به شكل زير تعريف كنيم . صحيح باشند به كار رود int fun (int n)

:آن گاه مي توانيم آن را به كمك نشانگر به صورت زير تعريف كنيم p = fun;x = (*p) (y);

: اين دو دستور، روي هم كار دستور زير را انجام مي دهند x = fun (y);

C++ Tutorial [email protected] 165

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

:نشانگر تهي :مثال . تعريف شده باشد ) void(نشانگر تهي، نشانگري است كه از نوع تهي

void *vp;نشان نشانگر نوع تهي است، يعني در حقيقت نوع داده اي را كه اين نشانگر vpدر اين مثال،

نشانگرهاي تهي را براي نشان دادن هر گونه داده مي توان به كار . مي دهد را تعيين نكرده ايمي همنوع خود به كار برد، در حالي كه نشانگرهاي نوع ديگر معموال براي نشان دادن داده ها

.ميروند، و بار ديگر براي nصحيح در برنامه صفحه بعد، نشانگر تهي را يك بار براي نگهداري نشاني عدد

البته براي چاپ اعداد، دوباره نشاني آن ها را در . به كار برده ايم mنگهداري نشاني عدد اعشاري . نشانگرهاي همنوع خود آن ها گذاشته ايم

C++ Tutorial [email protected] 166

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران : مثال

/* P8.15 void pointers */#include<stdio.h>int main() {int i , *ip; float m = 20.5, *fp;void *vp;vp = &n;ip = vp;printf(“n = %d\n” , *ip);vp = &m;fp = vp;printf(“m = %.1f\n”, *fp);return 0;}

Running Programn = 10m = 20.5

C++ Tutorial [email protected] 167

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

تمرينات پايان فصل . و نشانگر، اعداد يك تا ده را پاچ نمايد) while( برنامه اي بنويسيد كه به كمك دستور حلقه -1

. نيز انجام دهيدforاين كار را با به ترتيب نشانگرهاي كاراكتري، صحيح، اعشاري و دو دقتي باشند، dp و cp ،ip ،fp اگر -2

دستورهاي زير چه كار را انجام مي دهند؟ cp++;ip++;fp++;dp++;

را يك بار به كمك رشته و يك بار به كمك نشانگر ) strcmp(تابع مقايسه رشته ها -3.بنويسيد

را يك بار به كمك پارامتر آرايه اي و يك بار به كمك پارامتر ) strcpy( تابع كپي رشته ها -4.نشانگري بنويسيد

C++ Tutorial [email protected] 168

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

فصل نهم

فايل ها Files

C++ Tutorial [email protected] 169

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

: انواع فايل ها -File of Character-Text File-File of Record

C++ Tutorial [email protected] 170

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

فايل هاي كاراكتري

براي . فايل هاي كاراكتري را فايل هاي دودوئي نيز مي نامند و براي fputcنوشتن يك كاراكتر داخل آن ها مي توان از تابع

. استفاده كرد fgetcخواندن يك كاراكتر از داخل آن مي توان از

C++ Tutorial [email protected] 171

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

)Text Files( فايل هاي متني

فايل هاي متني، فايل هائي هستند كه از تعدادي سطر تشكيل شده اند و براي كار با فايل هاي متني، معموال . اندازه هر سطر مي تواند متفاوت باشد

در اين فايل ها، . يك سطر از فايل را مي خوانيم و يا داخل فايل مي نويسيم سطرها در هنگام ذخيره شدن به دنبال هم قرار مي گيرند و سطرها با

از ) 10با كد (Line Feedو كاراكتر ) 13با كد (CRاستفاده از دو كاراكتر .يكديگر جدا مي شوند

پيمايش / و براي خواندن fprintfبراي نوشتن در پرونده هاي متني از تابع . استفاده مي كنيم fscanfاز پرونده هاي متني از تابع

C++ Tutorial [email protected] 172

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

فايل هاي ركوردي تعريف ركورد ؟ -

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

.فايل ها، ركوردها بي هيچ نشانه اي به دنبال يكديگر نوشته مي شوند يم و براي كار با فايل هاي ركوردي، يا يك يا چند ركورد را در آن مي نويس

.يا اينكه يك يا چند ركورد را از آن مي خوانيم ) خواندن يك ركورد از فايل ( freadبراي كار با فايل هاي ركوردي از توابع

.استفاده مي كنيم) نوشتن يك ركورد در فايل ( fwriteو .به فايل هاي ركوردي نيز فايل هاي دودوئي گفته مي شود : تذكر

C++ Tutorial [email protected] 173

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

روش هاي دستيابي به اطالعات داخل فايل ها

) Sequential( ترتيبي -1) Random( تصادفي / مستقيم -2

براي پردازش فايل هاي تصادفي و خواند يك ركورد مشخص، مي . استفاده كنيم fseekتوانيم از تابع

C++ Tutorial [email protected] 174

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

روش هاي پردازش فايل ها

نوشتن-1 خواندن -2پيوست كردن / الحاق كردن -3اصالح كردن / به روز كردن -4

پردازش پرونده ها به كمك تعدادي تابع كتابخانه اي انجام ) stdlib.h( خروجي استاندار = ميشوند كه در فايل ورودي

.وجود دارند

C++ Tutorial [email protected] 175

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

) متني (توابع پردازش فايل هاي سطري

) fopen ( بازكردن پرونده -1) fprintf ( نوشتن در پرونده-2) fscanf ( پيمايش پرونده -3) feof ( پايان پرونده -4) fclose ( بستن پرونده -5

C++ Tutorial [email protected] 176

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

) fopen(تابع باز كردن پرونده :فرمت نوشتاري اين تابع به صورت زير است

variable_file_name = fopen (file_name , pattern);:مثال

main(){...FILE *out;...out = fopen (“daneshju” , “w”);...}

C++ Tutorial [email protected] 177

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

شيوه هاي پردازش استاندارد

wنوشتن در فايل متني rخواندن از فايل متني

aالحاق كردن در فايل متني b(wb=دودوئي (نوشتن در فايل كاراكتري و يا ركوردي

ab)دودوئي (الحاق كردن به فايل كاراكتري و يا ركوردي

rb)دودوئي (خواندن از فايل كاراكتري و يا ركوردي

شيوه پردازش ....بازكردن براي

C++ Tutorial [email protected] 178

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

) ادامه(شيوه هاي پردازش استاندارد

+wنوشتن و به روز كردن فايل متني +rخواندن و به روز كردن فايل متني

+aالحاق كردن در فايل متني و به روز كردن آن w+bنوشتن در و به روز كردن فايل كاراكتري و يا ركوردي

a+bالحاق كردن به فايل كاراكتري و يا ركوردي و به روز كردن

r+bخواندن از فايل كاراكتري و يا ركوردي و به روز كردن

شيوه پردازش ....بازكردن براي

C++ Tutorial [email protected] 179

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

)fprintf( تابع نوشتن در پرونده متني : فرمت نوشتاري اين تابع به صورت زير است

[no_of_char=] fprintf (file_name , print_pattern,variables);:مثال

main(){...FILE *out;...out = fopen (“daneshju” , “w”);...fprintf(out, “%s %5.2f\n”, name, mark);...}

C++ Tutorial [email protected] 180

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

الگوهاي نوشتن در پرونده متني

c%كاراكتر i , %d%عدد صحيح در مبناي ده

u%عدد صحيح بدون عالمت و د رمبناي دهoctal(%o( عدد صحيح در مبناي هشت

f%عدد اعشاري

Hex(%X , %x(عدد صحيح در مبناي شانزده

الگو ....براي چاپ يك

C++ Tutorial [email protected] 181

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

) ادامه (الگوهاي نوشتن در پرونده متني

E , %e%عدد اعشاري به صورت نمائي G , %g%عدد اعشاري به صورت نمائي يا معمولي

s%رشتهp%نشانگر / اشاره گر

%%%كاراكتر

الگو ....براي چاپ يك

C++ Tutorial [email protected] 182

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران :مثال

/* file example */#include<stdio.h>void main(){

char name[20];float mark;FILE *out;out = fopen (“Daneshju” , “w”);if (out == NULL) /*the file is not open for a reason */ {

puts (“Cannot open output file !!!);return; }

puts(“\nEnter ‘end’ to EXIT “)“\n-------------------- “);

printf(“ Name : “);scanf(“%s”, name);while (strcmp(name , “end” )) {

printf (“ Mark : “); scanf (“%f”, &mark);fprintf(out, “%s %5.2f\n”, name , mark);printf(“\n Name : “);scanf(“%s”, name);

}}

C++ Tutorial [email protected] 183

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران :اجراي برنامه مثال قبل

Enter ‘end’ to EXIT-------------------Name : RezaMark : 19

Name : AhmadMark : 18

Name : MehdiMark : 16.5

Name : end

C++ Tutorial [email protected] 184

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

همانند ( را با يك واژه پرداز Daneshjuحال مي توانيم فايل notepad ( باز كرده و يا با استفاده از برنامهtype سيستم

.عامل، محتواي آن را روي صفحه مانيتور ببينيم

؟ TYPE دستور -

C++ Tutorial [email protected] 185

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

)fscanf( تابع خواندن از فايل متني [no_of_char=] fscanf (file_name , read_pattern,variables);

. مي شود-1 و يا EOF متغير برابر اگر فايل به پايان برسد، يا در خواندن اشكالي بوجود آيد، مقدار اين :مثال

main(){...FILE *in;...in = fopen (“daneshju” , “r”);...fscanf(in, “%s %f\n”, name, &mark);...}

C++ Tutorial [email protected] 186

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

الگوهاي خواندن از پرونده متني

c%كاراكتر i%عدد صحيح در مبناي ده، شانزده و هشت

d%عدد صحيح د رمبناي دهoctal(%o( عدد صحيح در مبناي هشت

g , %e , %f%عدد اعشاري به صورت معمولي و يا نمائي

Hex(%x(عدد صحيح در مبناي شانزده

الگو ....براي خواندن يك

C++ Tutorial [email protected] 187

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

) ادامه (الگوهاي خواندن از پرونده متني

lf%اعداد اعشاري دو دقتي بلند

ld%اعداد صحيح بلند

[]%مجموعه اي از كاراكترها

s%رشتهp%نشانگر / اشاره گر

الگو ....براي خواندن يك

C++ Tutorial [email protected] 188

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

كاراكترهائي را كه . ، را براي خواندن رشته ها به كار مي بريم []%الگوي قرار مي ] و [رشته بايد تنها از آن ها ساخته شوند را در ميان دو كاراكتر

.دهيم-%[abc] : نشان دهنده آن است كه رشته بايستي از كاراكترهايa و b اگر رشته داراي كاراكتري جز اين باشد، كار . ساخته شده باشد cو

.خواندن رشته به پايان رسيده و خواندن داده بعدي شروع مي شود - %[a-k] : يعني رشته بايد از كاراكترهايa تا k ساخته شده باشد .- %[^ijk] : يعني رشته مي تواند از هر كاراكتري جز كاراكترهايi و j و k

.تشكيل شده باشد

C++ Tutorial [email protected] 189

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران : مثال

/* file reading example */#include<stdio.h>void main(){char name[20];float mark;FILE *in;in = fopen (“Daneshju” , “r”);if (out == NULL) /*the file is not open for a reason */ {

puts (“Cannot open output file !!!);return; }

puts(“\nName Mark “)“\n-------------------- “);

while (!feof(in)) {fscanf(in , “%s %f\n” , name , &mark);printf(“%-20s %6.2f\n”, name , mark);

}}

C++ Tutorial [email protected] 190

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

:اجراي برنامه مثال قبل Name Mark-------------------Reza 19.00Ahmad 18.00Mehdi 16.50

C++ Tutorial [email protected] 191

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

تابع بستن فايل :مثال

fclose(in)

C++ Tutorial [email protected] 192

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

:تابع خواندن كاراكتر از فايل [Variable = ] fgetc(file_name);

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

و يا فايل به پايان برسد، مقدار متغير برابر با مقدار ثابت پايان .مي شود) EOF(پرونده

پرونده بايستي براي خواندن و يا به روز شدن باز شده :تذكر .باشد

C++ Tutorial [email protected] 193

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران ايجاد شد notepadخواندن نام فايل از ورودي، خواندن اطالعات فايلي كه با : مثال

)برنامه اجرا شده كپي شد . (و نمايش آن روي صفحه مانيتور #include<stdio.h>int main(){int ch;char fname[20];FILE *tele;printf("\nFile Name : ");gets(fname);puts("------------------");tele = fopen(fname , "rb");if (tele==NULL) {

puts("Cannot open Input File !!!");return 0;}

while ((ch=fgetc(tele)) != EOF)putchar(ch);

}

C++ Tutorial [email protected] 194

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

:تابع نوشتن رشته در فايل

براي استفاده از اين تابع، فايل بايستي به صورت نوشتن، : تذكر .الحاق كردن و يا به روز كردن، باز شده باشد

fputs (str, fstr). نوشته مي شودfstr در فايل strدر اين مثال، رشته

fgets (str , 80 , fstr) خوانده و در fstr كاراكتر از فايل 80عبارت باال، تعداد حداكثر

. قرار مي دهد strمتغير

C++ Tutorial [email protected] 195

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران : مثال

#include<stdio.h>int main(){int ch;char str[81];FILE *fstr;fstr = fopen(“string” , “wb");if (tele == NULL) {

puts("Cannot open Input File !!!");return 0;}

puts(“Enter some string”“\n <^z to exit >““\n----------------”);

while (gets(str)) != NULL) fputs(str, fstr);

fputs(“\n” , fstr);}

Running Program

Enter some string

<^z to exit >

-------------------------

Welcome

To

C

Textbook

!

^z

C++ Tutorial [email protected] 196

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

توابع پردازش فايل هاي ركوردي

)fwrite( نوشتن در فايل -1: فرمت نوشتاري اين تابع به صورت زير است

]متغير = [ fwrite) نام فايل ، تعداد ركوردها ، طول ركورد ، اشاره گر (fwrite (&danesh , sizeof danesh , 1 , out)

. باشد اين فايل بايستي به شيوه نوشتن، الحاق كردن و به روز كردن باز شده :تذكر . همان نشاني واسطي است كه ركوردها در آن قرار دارد :اشاره گر

)fread(خواندن از فايل -2: فرمت نوشتاري اين تابع به صورت زير است

]متغير = [ fread) نام فايل ، تعداد ركوردها ، طول ركورد ، اشاره گر (

C++ Tutorial [email protected] 197

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

:توابع ديگر كار با فايل

) fseek(جستجوي فايل -) ftell( گزارش فايل -) ferror( نمايانگر اشكال در فايل -) remove(پاك كردن فايل -) rename( تغيير نام فايل -

C++ Tutorial [email protected] 198

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

تمرينات پايان فصل برنامه اي بنويسيد كه اطالعات شماره دانشجوئي، نام، نام -1

خانوادگي و نمره ميان ترم، پايان ترم و تكاليف را از يك فايل اطالعات هر شخص در يك سطر از فايل نوشته شده (خوانده

. را در انتهاي هر سطر اضافه نمايد 20، نمره كل از )است 2. يك دفترچه تلفن بسازيد -

C++ Tutorial [email protected] 199

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

فصل ده

ساختار Structure

C++ Tutorial [email protected] 200

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

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

.ارائه مي كنيم به هر شئي، موجود و يا مفهوم جهان اطراف خود، يك :موجوديت

.موجوديت مي گوئيم :مثال

صندلي موجوديت -1انسان موجوديت -2دانشجو موجوديت -3صفحه نمايش موجوديت -4درس موجوديت -5

C++ Tutorial [email protected] 201

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

:ويژگي هاي يك موجوديت هر موجوديت داراي يك سري ويژگي است كه از نظر ما مي تواند بعضي از آن ها در ارتباط با كاري كه انجام مي دهيم، حائز اهميت

.باشد :ويژگي هاي صندلي

.....)اداري، آموزشي و (نوع صندلي / كاربرد -1 رنگ صندلي -2......)فلزي، چوبي و ( جنس صندلي -34-......

C++ Tutorial [email protected] 202

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

:موجوديت درس نام درس -1 كد درس -2 كد درس پيش نياز -3 تعداد واحد -4) عملي / تئوري ( نوع درس -56-.......

C++ Tutorial [email protected] 203

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران )از نگاه اطالعات فردي (ويژگي هاي موجوديت دانشجو

شماره دانشجوئي -1 نام -2 نام خانوادگي -3 شماره شناسنامه -4 سال تولد -5 كد رشته تحصيلي -6 معدل دوره دبيرستان -7 رتبه كنكور-8 قد -9 وزن -1011-......

C++ Tutorial [email protected] 204

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

) از نظر اطالعات ترمي (ويژگي هاي دانشجو شماره دانشجو -1 كد درس -2 نمره ميان ترم اول -3 نمره ميان ترم دوم -4 نمره تكاليف -5 نمره پايان ترم -6 نمره نهائي -7.....) عادي، محروم و ( وضعيت دانشجو -8

C++ Tutorial [email protected] 205

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

همانگونه كه مي بينيم با توجه به كاربرد يك موجوديت، ويژگي ويژگي هاي مورد نظر از . هاي خاصي از آن را بايد درنظر بگيريم

داده اي ) Types( يك موجوديت مي توانند داراي تايپ هاي :به طور مثال . گوناگون باشند

:موجوديت درس ) رشته( نام درس -1 )صحيح چهار بايتي بدون عالمت / رشته ( كد درس -2) صحيح چهار بايتي بدون عالمت / رشته ( كد درس پيش نياز -3) صحيح ( تعداد واحد -4) مقدار دودوئي () عملي / تئوري ( نوع درس -5

C++ Tutorial [email protected] 206

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

:و يا موجوديت دانشجو در ترم ) صحيح چهار بايتي بدون عالمت / رشته ( شماره دانشجو -1) صحيح چهار بايتي بدون عالمت / رشته ( كد درس -2) صحيح( نمره ميان ترم اول -3) صحيح ( نمره ميان ترم دوم -4) صحيح ( نمره تكاليف -5) صحيح ( نمره پايان ترم -6) اعشاري ( نمره نهائي -7) صحيح ( .....) عادي، محروم و ( وضعيت دانشجو -8

C++ Tutorial [email protected] 207

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران يت بوده و ضمنا حال مجموعه اي از داده ها را در اختيار داريم كه متعلق به يك موجود

. داراي تايپ هاي داده اي متفاوت مي باشندويژگي گفته مي شود و به هر يك از ) Structure(، به موجوديت، ساختار cدر زبان

. گفته مي شود)element(ساختار، عنصر / هاي يك موجوديت . به ساختار، ركورد هم گفته مي شود: تذكر

: ، داريمcبراي تعريف ساختار در زبان

struct [ struct_code] {data_type1 element1; data_type2 element2;…….

} struct_name;

C++ Tutorial [email protected] 208

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

:مثال struct {

int stno;char name[20];float avg;

} student;: تعريف كرديم كه شامل عناصر studentدر اين مثال ساختاري با نام

.شماره دانشجوئي با نوع داده اي صحيح -. كاراكتري مي باشد 20 نام دانشجو، كه ممتغيري -.ميانگين، كه از نوع اعشاري است -

C++ Tutorial [email protected] 209

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

، studentدر حافظه با نام براي تعريف صفحه قبل، ساختاري .به صورت زير و با عناصر مربوطه ايجاد نموديم

student

stno name avg

C++ Tutorial [email protected] 210

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

: مقدار دهي به عناصر يك ساختار پس براي مراجعه به عناصر يك متغير ساختاري، ابتدا نام متغير ساختار، س

.عملگر نقطه و پس از آن نام عنصر را مي نويسيم هر آن چه در مورد متغيرهاي معمولي داشته ايم، در مورد اين نوع از : تذكر

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

student.stno = 7318;student.name = “Ali Mousavi”;student.avg = 18.25;

آيا عبارات باال صحيح است؟ : سوال

C++ Tutorial [email protected] 211

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

:عبارات صحيح مثال قبل student.stno = 7318;strcpy(student.name, “Ali Mousavi”);student.avg = 18.25;

به studentبا توجه به مثال باال، مقادير در متغير ساختاري :صورت زير خواهد بود

18.25Ali Mousavi7318student

stno name avg

C++ Tutorial [email protected] 212

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران . در برنامه زير ساختار مثال قبل را چاپ كرده ايم : مثال

/* P10.1 Structures */#include <stdio.h>main() {struct {

int stno;char name[20];float avg;

} student;student.stno = 7318;strcpy(student.name, “Ali Mousavi”);student.avg = 18.25;printf(“%d %s %.2f\n”,student.stno,student.name,student.avg);

}

Running Program7318 Ali Mousavi 18.25

C++ Tutorial [email protected] 213

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران :مثال . مي توانيم به عناصر يك ساختار در همان زمان تعريف، مقدار بدهيم

/* P10.2 Structures */#include <stdio.h>main() {struct {

int stno;char name[20];float avg;

} student = {7318,“Ali Mousavi”,“18.25”}

printf(“%d %s %.2f\n”,student.stno,student.name,student.avg);}

Running Program7318 Ali Mousavi 18.25

C++ Tutorial [email protected] 214

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران : مثال. عناصر يك ساختار مي توانند از ورودي مقدار بگيرند

/* P10.3 Structure reading from keyboard */#include <stdio.h>main() {struct {

int stno;char name[20];float avg;

} student;printf(“Enter Num Name Average : “);scanf(“%d %s %f”, &student.stno,student.name,&student.ang);printf(“%d %s %.2f\n”,student.stno,student.name,student.avg);

}

Running ProgramEnter Num Name Average : 7318 Ali.Mousavi 18.257318 Ali.Mousavi 18.25

.به كاراكتر نقطه بين نام و نام خانوادگي توجه نمائيد : تذكر

C++ Tutorial [email protected] 215

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران در صفحه قبل، در الگوي ( بهتر است كه براي خواندن مقادير، با توجه به الگوي پيمايش

، )تفاده كرديمپيمايش براي جداسازي مقادير ورودي براي عناصر، از كاراكتر فاصله اس مقادير را به استفاده كنيم و يا اين كه 255جاي حرف فاصله از كاراكتر با كد اسكي به

: بخوانيم صورت منفرد:مثال

...printf(“\nEnter Student Specification\n Number :”;scanf(“%d” , &student.stno);printf(“ Name : “);scanf(“%s”, student.name);printf(“ Average : “);scanf(“%f” , &student.avg);......

C++ Tutorial [email protected] 216

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

: تعريف ساختار به گونه ديگر struct student {

int stno;char name[20];float avg;

};struct student stud;

student متغيري است ساختاري، كه كد آن studدر اين مثال، پس از اين تعريف مي توانيم همانند مثال هائي كه پيش از اين . ميباشد

. را به كار بريمstudديديم، متغير ساختاري

C++ Tutorial [email protected] 217

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران استفاده از متغيرهاي ساختاري در حلقه ها

/* P10.4 Structure & Loop */#include <stdio.h>#include<string.h>void main() {struct telefon {

char name[20];char num[12];

};struct telefon tel;puts(“\nEnter ‘end’ for quit”);puts(“----------------------”);do {

printf(“Enter Name : “);scanf(“%s”, tel.name);if (!strcmp(tel.name,”end”)) break;printf(“Enter tel# : “);scanf(“%s”,tel.num);printf(“\n%-20s %-12s\n\n, tel.name, tel.num);} while (1);

}

C++ Tutorial [email protected] 218

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران :اجراي برنامه مثال قبل

Enter ‘end’ for quit--------------------Enter Name : RezaEnter tel# : 238071

Reza 238071

Enter Name : AhmadEnter tel# : 452201

Ahmad 452201

Enter Name : end

C++ Tutorial [email protected] 219

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

typedefتعريف ساختار با استفاده از يك ديگر از روش هاي تعريف ساختار، تعريف آن در دستور تعريف نوع

)Type Definition (دستور تعريف نوع را زماني به كار مي گيريم . است. كه بخواهيم بر يك نوع داده، نامي جديد نسبت دهيم

:مثال typedef int sahih;

استفاده sahih از intپس از اين دستور، همه جا مي توانيم به جاي :كنيم

sahih a, b; .همين كار را براي تعريف ساختار مي توانيم به كار بريم

C++ Tutorial [email protected] 220

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

ادامه- typedefتعريف ساختار با استفاده از typedef struct {

char name[20];char num[12];} telefon;

telefon tel;

C++ Tutorial [email protected] 221

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران استفاده از متغيرهاي ساختاري در حلقه ها

/* P10.5 Structure & Loop */#include <stdio.h>#include<string.h>void main() {typedef struct {

char name[20];char num[12];

} telefon;telefon tel;puts(“\nEnter ‘end’ for quit”);puts(“----------------------”);do {

printf(“Enter Name : “);scanf(“%s”, tel.name);if (!strcmp(tel.name,”end”)) break;printf(“Enter tel# : “);scanf(“%s”,tel.num);printf(“\n%-20s %-12s\n\n, tel.name, tel.num);} while (1);

}

C++ Tutorial [email protected] 222

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران :اجراي برنامه مثال قبل

Enter ‘end’ for quit--------------------Enter Name : RezaEnter tel# : 238071

Reza 238071

Enter Name : AhmadEnter tel# : 452201

Ahmad 452201

Enter Name : end

C++ Tutorial [email protected] 223

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

اگر متغيرهاي ساختاري از يك نوع باشند، مي توان مقادير آن ها :را همانند متغيرهاي معمولي و نشانگرها به يكديگر واگذار كرد

struct {char name[20];char num[12];} telefon;

telefon tel1, tel2;tel1 = tel2;

يك ساختار تعريف كرده باشيم، باز typedefاگر با استفاده از .به همين ترتيب مي توانيم متغيرهاي هم نوع تعريف كنيم

C++ Tutorial [email protected] 224

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

:ساختار و آرايه

زير يك نام گرد آمده اند، با هم ساختار و آرايه از اين نظر كه هر دو مجموعه اي از داده ها هستند كه :ه آن ها اشاره شده استهمانند هستند، ولي در ميان آن ها تفاوت هائي وجود دارد كه در زير ب

. هم نوع بودن عناصر آرايه، و نا هم نوع بودن عناصر ساختار -1. انديس دار بودن عناصر آرايه، و نام داشتن عناصر ساختار -2. اشاره گر بودن نام آرايه، و معمولي بودن نام ساختار -3.ر به هم نشدني بودن واگذاري دو آرايه به هم، و شدني بودن واگذاري دو ساختا -4

:با درهم آميختن ساختار و آرايه، تركيب هاي زير بدست مي آيد . آرايه ساختاري -1. ساختار آرايه اي -2

C++ Tutorial [email protected] 225

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران :آرايه ساختاري

. دآرايه اي كه هر عنصر آن يك ساختار باشد، آرايه ساختاري ناميده ميشو :مثال

struct {char name[20];char num[12];} tel[100];

آرايه اي است كه داراي يكصد عنصر بوده و هر يك از telدر اين مثال، براي رسيدن به هر يك از عناصر، خواهيم . عناصر يك ساختار مي باشد

: داشت tel[i].nametel[i].num

C++ Tutorial [email protected] 226

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران استفاده از متغيرهاي ساختاري در حلقه ها

/* P10.6 Structure & Array */#include <stdio.h>#include<string.h>void main() { struct {

char name[20];char num[12];

} tel[100];int i = 0, n;puts(“\nEnter ‘end’ for quit”);puts(“----------------------”);do {

printf(“Enter Name : “);scanf(“%s”, tel[i].name);if (!strcmp(tel[i].name,”end”)) break;printf(“Enter tel# : “);scanf(“%s”,tel[i].num); puts(“ “);} while (++i);

puts(“\n\n Name Tel # “);puts(“-----------------------------------”);for (n=0 ; n < i; ++n)

printf(“\n%-20s %-12s\n\n, tel.name, tel.num); }

C++ Tutorial [email protected] 227

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران : اجراي برنامه مثال قبل

Enter ‘end’ for quit--------------------Enter Name : RezaEnter tel# : 238071

Enter Name : AhmadEnter tel# : 452201

Enter Name : MahdiEnter tel# : 761132

Enter Name : end

Name Tel #----------------------------Reza 238071Ahmad 452201Mahdi 761132

C++ Tutorial [email protected] 228

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

:ساختار آرايه اي ساختار آرايه اي، متغير ساختاري است كه بعضي از عناصر آن يك آرايه

.است:مثال

struct {char name [15];char ketab [10] [15];

} author; 30 كاراكتر، و براي نام كتاب تا 15در اين ساختار، بري نام نويسنده تا

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

C++ Tutorial [email protected] 229

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران استفاده از متغيرهاي ساختاري در حلقه ها

/* P10.7 Structure & Array */#include <stdio.h>#include<string.h>void main() { struct {

char name[15];char Ketab[10][30];

} author;int i;puts(“\nEnter ‘end’ for quit”);puts(“----------------------”);do {

printf(“Enter Name : “);scanf(“%s”, author.name);if (!strcmp(author.name,”end”)) break;i = 0;do {

printf(“ book %d : “, i + 1);scanf(“%s” , author.ketab[i]);if (!strcmp(author.ketab[i],”end”)) break;++i} while(1); / C

C++ Tutorial [email protected] 230

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

:ادامه برنامه اساليد قبل i = 0;puts(“\n\nName Book(s)“);puts(“-----------------------------------”);while (strcmp(author.ketab[i], “end”)) {printf(“\n%-15s %-30s\n, author.name, author.ketab[++i]);

strcmp(author.name, “ “);}

} while(1);}

C++ Tutorial [email protected] 231

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران :اجراي برنامه صفحه قبل

Enter ‘end’ for quit--------------------Enter Name : Molavi

book 1 : Masnavibook 2 : Divan.e.Shamsbook 3 : end

Name Book(s)-----------------------Molavi Masnavi

Divane.e.Shams

Enter Name : end

C++ Tutorial [email protected] 232

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

:ساختار زير را شرح دهيد struct {

char stno[8];char name[30];int grade[3];

} Student;

C++ Tutorial [email protected] 233

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

:ساختار زير را شرح دهيد struct {

char stno[8];char name[30];int grade[3];

} Student[100];

C++ Tutorial [email protected] 234

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران مثال : coutنحوه استفاده از

2: /* This Program Describe the use of COUT */3: #include <iostream.h>4: int main()5: { 6: cout << "Hello there.\n";7: cout << "Here is 5: " << 5 << "\n"; 8: cout <<"The manipulator endl writes a new line to the screen."<<endl;9: cout << "Here is a very big number:\t" << 70000 << endl; 10: cout << "Here is the sum of 8 and 5:\t" << 8+5 << endl; 11: cout << "Here's a fraction:\t\t" << (float) 5/8 << endl; 12: cout <<"And a very very big number:\t"<<(double)7000 * 7000 <<endl; 13: cout << "Don't forget to replace Baski with your name...\n";14: cout << "Baski is a C++ programmer!\n"; 15: return 0; 16: }

C++ Tutorial [email protected] 235

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران توضيح مثال صفحه قبل – coutنحوه عملكرد

On line 3, the statement #include <iostream.h> causes the iostream.h file to be added to your source code. This is required if you use cout and its related functions.

On line 6 is the simplest use of cout, printing a string or series of characters. The symbol \n is a special formatting character. It tells cout to print a newline character to the screen.

Three values are passed to cout on line 7, and each value is separated by the insertion operator. The first value is the string "Here is 5: ". Note the space after the colon. The space is part of the string. Next, the value 5 is passed to the insertion operator and the newline character (always in double quotes or single quotes). This causes the lineHere is 5: 5 to be printed to the screen. Because there is no newline character after the first string, the next value is printed immediately afterwards. This is called concatenating the two values.

On line 8, an informative message is printed, and then the manipulator endl is used. The purpose of endl is to write a new line to the screen. (Other uses for endl are discussed on Day 16.)

On line 9, a new formatting character, \t, is introduced. This inserts a tab character and is used on lines 8-12 to line up the output. Line 9 shows that not only integers, but long integers as well can be printed. Line 10 demonstrates that cout will do simple addition. The value of 8+5 is passed to cout, but 13 is printed.

On line 11, the value 5/8 is inserted into cout. The term (float) tells cout that you want this value evaluated as a decimal equivalent, and so a fraction is printed. On line 12 the value 7000 * 7000 is given to cout, and the term (double) is used to tell cout that you want this to be printed using scientific notation. All of this will be explained on Day 3, "Variables and Constants," when data types are discussed.

On line 14, you substituted your name, and the output confirmed that you are indeed a C++ programmer. It must be true, because the computer said so!

C++ Tutorial [email protected] 236

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران اين برنامه اجرا و به خروجي توجه شود – strncmp و تابع strcmpمثالي از كار با تابع

#include <iostream.h> #include <string.h>void main(){char *s1 = "Happy New Year";char *s2 = "Happy New Year"; char *s3 = "Happy Holidays"; cout << "s1 = " << s1 << "\ns2 = " << s2 << "\ns3 = " <<

s3 << "\n\nstrcmp(s1, s2) = " << " " << strcmp( s1, s2 ) << "\nstrcmp(s1, s3) = " << " " << strcmp( s1, s3 ) << "\nstrcmp(s3, s1) = " << " " << strcmp( s3, s1 );

cout << "\n\nstrncmp(s1, s3, 6) = " << " " << strncmp(s1,s3,6) << "\nstrncmp(s1,s3,7) = " << " " << strncmp( s1, s3, 7 ) << "\nstrncmp(s3, s1, 7) = " << " " << strncmp( s3, s1, 7 ) << endl;}

C++ Tutorial [email protected] 237

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

ساختار و اشاره گر

C++ Tutorial [email protected] 238

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

ساختار بازگشتي

C++ Tutorial [email protected] 239

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

تابع ساختاري –ساختار و تابع

C++ Tutorial [email protected] 240

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران

پارامتر ساختاري