ﺮﺗﻮﻴﭙﻣﺎﻛ ﻲﺳﺪﻨﻬﻣ هﺪﻜﺸﻧاد ناﺮﻳا ﺖﻌﻨﺻ و...

Post on 19-May-2020

28 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

C++ Tutorial azizjalali@iust.ac.ir 1

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

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

C++ Programming Tutorial

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

C++ Tutorial azizjalali@iust.ac.ir 2

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

فصل اول

آشنائي با C++

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

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 5

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

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

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

a++;++a;

و يا a = a + 1 ;

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

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 7

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

فصل دوم

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

C++ Tutorial azizjalali@iust.ac.ir 8

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

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

C++ Tutorial azizjalali@iust.ac.ir 9

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 10

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

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

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

32+164-5821

C++ Tutorial azizjalali@iust.ac.ir 11

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 12

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 13

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

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

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

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

. كنيم

C++ Tutorial azizjalali@iust.ac.ir 14

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 17

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

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

whilestaticifdovolatilesizeofgotodefaultvoidsignedforcontinueunsignedshortfloatconst

C++ Tutorial azizjalali@iust.ac.ir 18

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

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 19

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

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

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

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

“year 1373”“m”

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

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

C++ Tutorial azizjalali@iust.ac.ir 20

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

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

C++ Tutorial azizjalali@iust.ac.ir 21

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

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

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 24

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 25

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

فصل سوم

عبارت ها و

عملگرها

C++ Tutorial azizjalali@iust.ac.ir 26

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

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

C++ Tutorial azizjalali@iust.ac.ir 27

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

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

جمع+تفريق-

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

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

C++ Tutorial azizjalali@iust.ac.ir 28

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 29

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

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 30

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 31

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 32

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 33

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

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

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

a1 1 0 0b1 0 1 0

a || b1 1 1 0

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

C++ Tutorial azizjalali@iust.ac.ir 34

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

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 38

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

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

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 40

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

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

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

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

مثبت+منفي-

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

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

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 42

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

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

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 43

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 44

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

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

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

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

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

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

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

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

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 49

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

فصل چهارم

دستورها (C Statements)

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 54

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

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

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

} :تذكر

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

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

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

. مي شود

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 57

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 59

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 60

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

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

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

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

while (condition) {statement1;statement2;……

}

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 62

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

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

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

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

….….

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

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

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 64

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

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

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 66

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

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

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

statement1 ;while ( condition ) {

loop_statement[s] ;statement2 ;

}

C++ Tutorial azizjalali@iust.ac.ir 67

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 69

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

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

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

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

……..

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

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 73

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 74

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 75

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

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

** ** * ** * * *

** * *

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

C++ Tutorial azizjalali@iust.ac.ir 76

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

فصل پنجم

توابع (Functions)

C++ Tutorial azizjalali@iust.ac.ir 77

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 78

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

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

{statements;}

:مثال

int sum ( int x, int y){

return x + y;}

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 84

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 87

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

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

322 * fact(1)411

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

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

C++ Tutorial azizjalali@iust.ac.ir 88

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 89

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

فصل ششم

آرايه (Array)

C++ Tutorial azizjalali@iust.ac.ir 90

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 91

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

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

ar[ ]

ar[ ]

ar[ ]

ar[ ]

ar[ ]

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 94

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

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

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

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

412-935

C++ Tutorial azizjalali@iust.ac.ir 95

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

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

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

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

412-935

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 113

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

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

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 114

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

فصل هفتم

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

C++ Tutorial azizjalali@iust.ac.ir 115

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 116

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

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 117

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

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

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

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

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

. بكار مي رود

C++ Tutorial azizjalali@iust.ac.ir 118

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

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

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

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

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

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

ceil(2.3) 3

C++ Tutorial azizjalali@iust.ac.ir 119

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

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 120

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

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

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

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

ceil(2.3) 2.0

C++ Tutorial azizjalali@iust.ac.ir 121

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 122

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

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

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

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

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

.صحيح باشد

C++ Tutorial azizjalali@iust.ac.ir 123

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

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 127

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 129

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 130

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

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

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 131

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

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 132

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 133

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

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

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 134

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

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

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 135

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 136

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 137

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 138

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

فصل هشتم

نشانگر Pointer

C++ Tutorial azizjalali@iust.ac.ir 139

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

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

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

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

:مثال x = *p;

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

C++ Tutorial azizjalali@iust.ac.ir 140

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 141

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

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

65522 100

65520

p

65522

a

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 144

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 146

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 148

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 150

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 157

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 159

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 161

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

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 163

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

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

C++ Tutorial azizjalali@iust.ac.ir 164

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

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

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 165

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

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 167

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

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 168

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

فصل نهم

فايل ها Files

C++ Tutorial azizjalali@iust.ac.ir 169

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

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

C++ Tutorial azizjalali@iust.ac.ir 170

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 171

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

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 172

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

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 173

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 174

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

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

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

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

.وجود دارند

C++ Tutorial azizjalali@iust.ac.ir 175

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 176

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 177

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

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

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 178

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

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

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

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

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

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

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

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 180

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

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

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

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

f%عدد اعشاري

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

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

C++ Tutorial azizjalali@iust.ac.ir 181

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

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

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

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

%%%كاراكتر

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

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 183

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

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

Name : AhmadMark : 18

Name : MehdiMark : 16.5

Name : end

C++ Tutorial azizjalali@iust.ac.ir 184

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

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

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

؟ TYPE دستور -

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 186

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

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

c%كاراكتر i%عدد صحيح در مبناي ده، شانزده و هشت

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

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

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

الگو ....براي خواندن يك

C++ Tutorial azizjalali@iust.ac.ir 187

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

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

lf%اعداد اعشاري دو دقتي بلند

ld%اعداد صحيح بلند

[]%مجموعه اي از كاراكترها

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

الگو ....براي خواندن يك

C++ Tutorial azizjalali@iust.ac.ir 188

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

كاراكترهائي را كه . ، را براي خواندن رشته ها به كار مي بريم []%الگوي قرار مي ] و [رشته بايد تنها از آن ها ساخته شوند را در ميان دو كاراكتر

.دهيم-%[abc] : نشان دهنده آن است كه رشته بايستي از كاراكترهايa و b اگر رشته داراي كاراكتري جز اين باشد، كار . ساخته شده باشد cو

.خواندن رشته به پايان رسيده و خواندن داده بعدي شروع مي شود - %[a-k] : يعني رشته بايد از كاراكترهايa تا k ساخته شده باشد .- %[^ijk] : يعني رشته مي تواند از هر كاراكتري جز كاراكترهايi و j و k

.تشكيل شده باشد

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 190

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

:اجراي برنامه مثال قبل Name Mark-------------------Reza 19.00Ahmad 18.00Mehdi 16.50

C++ Tutorial azizjalali@iust.ac.ir 191

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

تابع بستن فايل :مثال

fclose(in)

C++ Tutorial azizjalali@iust.ac.ir 192

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

:تابع خواندن كاراكتر از فايل [Variable = ] fgetc(file_name);

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

و يا فايل به پايان برسد، مقدار متغير برابر با مقدار ثابت پايان .مي شود) EOF(پرونده

پرونده بايستي براي خواندن و يا به روز شدن باز شده :تذكر .باشد

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 194

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

:تابع نوشتن رشته در فايل

براي استفاده از اين تابع، فايل بايستي به صورت نوشتن، : تذكر .الحاق كردن و يا به روز كردن، باز شده باشد

fputs (str, fstr). نوشته مي شودfstr در فايل strدر اين مثال، رشته

fgets (str , 80 , fstr) خوانده و در fstr كاراكتر از فايل 80عبارت باال، تعداد حداكثر

. قرار مي دهد strمتغير

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 196

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

توابع پردازش فايل هاي ركوردي

)fwrite( نوشتن در فايل -1: فرمت نوشتاري اين تابع به صورت زير است

]متغير = [ fwrite) نام فايل ، تعداد ركوردها ، طول ركورد ، اشاره گر (fwrite (&danesh , sizeof danesh , 1 , out)

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

)fread(خواندن از فايل -2: فرمت نوشتاري اين تابع به صورت زير است

]متغير = [ fread) نام فايل ، تعداد ركوردها ، طول ركورد ، اشاره گر (

C++ Tutorial azizjalali@iust.ac.ir 197

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

:توابع ديگر كار با فايل

) fseek(جستجوي فايل -) ftell( گزارش فايل -) ferror( نمايانگر اشكال در فايل -) remove(پاك كردن فايل -) rename( تغيير نام فايل -

C++ Tutorial azizjalali@iust.ac.ir 198

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

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

خانوادگي و نمره ميان ترم، پايان ترم و تكاليف را از يك فايل اطالعات هر شخص در يك سطر از فايل نوشته شده (خوانده

. را در انتهاي هر سطر اضافه نمايد 20، نمره كل از )است 2. يك دفترچه تلفن بسازيد -

C++ Tutorial azizjalali@iust.ac.ir 199

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

فصل ده

ساختار Structure

C++ Tutorial azizjalali@iust.ac.ir 200

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

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

.ارائه مي كنيم به هر شئي، موجود و يا مفهوم جهان اطراف خود، يك :موجوديت

.موجوديت مي گوئيم :مثال

صندلي موجوديت -1انسان موجوديت -2دانشجو موجوديت -3صفحه نمايش موجوديت -4درس موجوديت -5

C++ Tutorial azizjalali@iust.ac.ir 201

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

:ويژگي هاي يك موجوديت هر موجوديت داراي يك سري ويژگي است كه از نظر ما مي تواند بعضي از آن ها در ارتباط با كاري كه انجام مي دهيم، حائز اهميت

.باشد :ويژگي هاي صندلي

.....)اداري، آموزشي و (نوع صندلي / كاربرد -1 رنگ صندلي -2......)فلزي، چوبي و ( جنس صندلي -34-......

C++ Tutorial azizjalali@iust.ac.ir 202

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

:موجوديت درس نام درس -1 كد درس -2 كد درس پيش نياز -3 تعداد واحد -4) عملي / تئوري ( نوع درس -56-.......

C++ Tutorial azizjalali@iust.ac.ir 203

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران )از نگاه اطالعات فردي (ويژگي هاي موجوديت دانشجو

شماره دانشجوئي -1 نام -2 نام خانوادگي -3 شماره شناسنامه -4 سال تولد -5 كد رشته تحصيلي -6 معدل دوره دبيرستان -7 رتبه كنكور-8 قد -9 وزن -1011-......

C++ Tutorial azizjalali@iust.ac.ir 204

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

) از نظر اطالعات ترمي (ويژگي هاي دانشجو شماره دانشجو -1 كد درس -2 نمره ميان ترم اول -3 نمره ميان ترم دوم -4 نمره تكاليف -5 نمره پايان ترم -6 نمره نهائي -7.....) عادي، محروم و ( وضعيت دانشجو -8

C++ Tutorial azizjalali@iust.ac.ir 205

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

همانگونه كه مي بينيم با توجه به كاربرد يك موجوديت، ويژگي ويژگي هاي مورد نظر از . هاي خاصي از آن را بايد درنظر بگيريم

داده اي ) Types( يك موجوديت مي توانند داراي تايپ هاي :به طور مثال . گوناگون باشند

:موجوديت درس ) رشته( نام درس -1 )صحيح چهار بايتي بدون عالمت / رشته ( كد درس -2) صحيح چهار بايتي بدون عالمت / رشته ( كد درس پيش نياز -3) صحيح ( تعداد واحد -4) مقدار دودوئي () عملي / تئوري ( نوع درس -5

C++ Tutorial azizjalali@iust.ac.ir 206

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

:و يا موجوديت دانشجو در ترم ) صحيح چهار بايتي بدون عالمت / رشته ( شماره دانشجو -1) صحيح چهار بايتي بدون عالمت / رشته ( كد درس -2) صحيح( نمره ميان ترم اول -3) صحيح ( نمره ميان ترم دوم -4) صحيح ( نمره تكاليف -5) صحيح ( نمره پايان ترم -6) اعشاري ( نمره نهائي -7) صحيح ( .....) عادي، محروم و ( وضعيت دانشجو -8

C++ Tutorial azizjalali@iust.ac.ir 207

دانشكده مهندسي كامپيوتر –دانشگاه علم و صنعت ايران يت بوده و ضمنا حال مجموعه اي از داده ها را در اختيار داريم كه متعلق به يك موجود

. داراي تايپ هاي داده اي متفاوت مي باشندويژگي گفته مي شود و به هر يك از ) Structure(، به موجوديت، ساختار cدر زبان

. گفته مي شود)element(ساختار، عنصر / هاي يك موجوديت . به ساختار، ركورد هم گفته مي شود: تذكر

: ، داريمcبراي تعريف ساختار در زبان

struct [ struct_code] {data_type1 element1; data_type2 element2;…….

} struct_name;

C++ Tutorial azizjalali@iust.ac.ir 208

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

:مثال struct {

int stno;char name[20];float avg;

} student;: تعريف كرديم كه شامل عناصر studentدر اين مثال ساختاري با نام

.شماره دانشجوئي با نوع داده اي صحيح -. كاراكتري مي باشد 20 نام دانشجو، كه ممتغيري -.ميانگين، كه از نوع اعشاري است -

C++ Tutorial azizjalali@iust.ac.ir 209

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

، studentدر حافظه با نام براي تعريف صفحه قبل، ساختاري .به صورت زير و با عناصر مربوطه ايجاد نموديم

student

stno name avg

C++ Tutorial azizjalali@iust.ac.ir 210

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

: مقدار دهي به عناصر يك ساختار پس براي مراجعه به عناصر يك متغير ساختاري، ابتدا نام متغير ساختار، س

.عملگر نقطه و پس از آن نام عنصر را مي نويسيم هر آن چه در مورد متغيرهاي معمولي داشته ايم، در مورد اين نوع از : تذكر

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

student.stno = 7318;student.name = “Ali Mousavi”;student.avg = 18.25;

آيا عبارات باال صحيح است؟ : سوال

C++ Tutorial azizjalali@iust.ac.ir 211

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

:عبارات صحيح مثال قبل student.stno = 7318;strcpy(student.name, “Ali Mousavi”);student.avg = 18.25;

به studentبا توجه به مثال باال، مقادير در متغير ساختاري :صورت زير خواهد بود

18.25Ali Mousavi7318student

stno name avg

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 216

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

: تعريف ساختار به گونه ديگر struct student {

int stno;char name[20];float avg;

};struct student stud;

student متغيري است ساختاري، كه كد آن studدر اين مثال، پس از اين تعريف مي توانيم همانند مثال هائي كه پيش از اين . ميباشد

. را به كار بريمstudديديم، متغير ساختاري

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 218

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

Enter ‘end’ for quit--------------------Enter Name : RezaEnter tel# : 238071

Reza 238071

Enter Name : AhmadEnter tel# : 452201

Ahmad 452201

Enter Name : end

C++ Tutorial azizjalali@iust.ac.ir 219

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

typedefتعريف ساختار با استفاده از يك ديگر از روش هاي تعريف ساختار، تعريف آن در دستور تعريف نوع

)Type Definition (دستور تعريف نوع را زماني به كار مي گيريم . است. كه بخواهيم بر يك نوع داده، نامي جديد نسبت دهيم

:مثال typedef int sahih;

استفاده sahih از intپس از اين دستور، همه جا مي توانيم به جاي :كنيم

sahih a, b; .همين كار را براي تعريف ساختار مي توانيم به كار بريم

C++ Tutorial azizjalali@iust.ac.ir 220

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

ادامه- typedefتعريف ساختار با استفاده از typedef struct {

char name[20];char num[12];} telefon;

telefon tel;

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 222

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

Enter ‘end’ for quit--------------------Enter Name : RezaEnter tel# : 238071

Reza 238071

Enter Name : AhmadEnter tel# : 452201

Ahmad 452201

Enter Name : end

C++ Tutorial azizjalali@iust.ac.ir 223

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

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

struct {char name[20];char num[12];} telefon;

telefon tel1, tel2;tel1 = tel2;

يك ساختار تعريف كرده باشيم، باز typedefاگر با استفاده از .به همين ترتيب مي توانيم متغيرهاي هم نوع تعريف كنيم

C++ Tutorial azizjalali@iust.ac.ir 224

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

:ساختار و آرايه

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

. هم نوع بودن عناصر آرايه، و نا هم نوع بودن عناصر ساختار -1. انديس دار بودن عناصر آرايه، و نام داشتن عناصر ساختار -2. اشاره گر بودن نام آرايه، و معمولي بودن نام ساختار -3.ر به هم نشدني بودن واگذاري دو آرايه به هم، و شدني بودن واگذاري دو ساختا -4

:با درهم آميختن ساختار و آرايه، تركيب هاي زير بدست مي آيد . آرايه ساختاري -1. ساختار آرايه اي -2

C++ Tutorial azizjalali@iust.ac.ir 225

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

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

struct {char name[20];char num[12];} tel[100];

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

: داشت tel[i].nametel[i].num

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 228

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

:ساختار آرايه اي ساختار آرايه اي، متغير ساختاري است كه بعضي از عناصر آن يك آرايه

.است:مثال

struct {char name [15];char ketab [10] [15];

} author; 30 كاراكتر، و براي نام كتاب تا 15در اين ساختار، بري نام نويسنده تا

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

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 232

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

:ساختار زير را شرح دهيد struct {

char stno[8];char name[30];int grade[3];

} Student;

C++ Tutorial azizjalali@iust.ac.ir 233

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

:ساختار زير را شرح دهيد struct {

char stno[8];char name[30];int grade[3];

} Student[100];

C++ Tutorial azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 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 azizjalali@iust.ac.ir 237

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

ساختار و اشاره گر

C++ Tutorial azizjalali@iust.ac.ir 238

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

ساختار بازگشتي

C++ Tutorial azizjalali@iust.ac.ir 239

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

تابع ساختاري –ساختار و تابع

C++ Tutorial azizjalali@iust.ac.ir 240

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

پارامتر ساختاري

top related