ایران سرفراز- نرم افزار وپروژهای دانشجویی


نرم افزار وپروژهای دانشجویی

جلسة هفتم -آرایه‌های چندبعدی آرایه ها در زبان C

<!-- /* Font Definitions */ @font-face {font-family:Mitra; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:auto; mso-font-signature:3 0 0 0 1 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:35.4pt; mso-footer-margin:35.4pt; mso-paper-source:0;} div.Section1 {page:Section1;} /* List Definitions */ @list l0 {mso-list-id:396171410; mso-list-type:hybrid; mso-list-template-ids:-1944968990 -705007658 -657978352 48513554 419851508 1863329148 -1969483610 812695914 -1500339184 2130839800;} @list l0:level1 {mso-level-number-format:bullet; mso-level-text:•; mso-level-tab-stop:36.0pt; mso-level-number-position:left; text-indent:-18.0pt; font-family:"Times New Roman";} @list l1 {mso-list-id:1146776890; mso-list-type:hybrid; mso-list-template-ids:1379302224 818556196 244470744 -240777132 -1100081460 -478377994 2104389648 -1441356012 741622698 483833882;} @list l1:level1 {mso-level-number-format:bullet; mso-level-text:•; mso-level-tab-stop:36.0pt; mso-level-number-position:left; text-indent:-18.0pt; font-family:"Times New Roman";} ol {margin-bottom:0cm;} ul {margin-bottom:0cm;} -->

mo-mah.perssianblog.ir

mohsen_mahyar@yahoo.com

 

 

جلسة هفتم

 

  C آرایه ها در زبان

مجموعه‌ای از داده‌های:

 

همنوع

ترتیب‌دار توسط اندیسها

با حداکثر عناصر مشخص

 

 

آرایة یک بعدی

   نام آرایه    نوع عناصر آرایه[ تعداد عناصر آرایه ]

int   A [ 5 ] ;

 

 

 

 

 

چگونگی ارجاع به عناصر آرایه

 نام آرایه[ اندیس عنصر مورد نظر ]

مثال:

A [ 3 ] = 124 ;

مثال: خواندن عناصر یک آرایه از ورودی

int  a [ 100 ] , i  ;

for (i = 0 ; i < 100 ; i ++)

                        scanf (“%d”, &a[ i ] );

 

آرایة یک بعدی بعنوان پارامتر تابع

void  f ( int x [ ] )

{  ...  }

void  main () {

            int  a [10] ;  ...

            f (a) ;

}

mo-mah.perssianblog.ir

mohsen_mahyar@yahoo.com

 

آرایه‌های چندبعدی

  نام آرایه   نوع عناصر آرایه[بعد 1 ] [بعد 2 ]  ... [n بعد]

int   A [ 10 ] [ 12 ] [ 20 ] ;

دستیابی به عناصر آرایه:

A [0] [1] [2] = 400 ;

 

مثال: مقداردهی اولیه به عناصر یک آرایة دو بعدی

int  a [10] [20] , row , col ;

for (row = 0 ; row < 10 ; row ++)

                        for (col = 0 ; col < 20 ; col ++)

                                    a [row] [col]  = 0 ;

رشته

آرایه‌ای از کاراکتر

char  نام رشته   [طول رشته  ]

char  Str [20] ; مقداردهی اولیه و نحوة ذخیره

char  S [5] = “ali” ;

 

 

 

 

 

ورودی - خروجی رشته‌ها

scanf (“%s” , str)

gets (str)

printf (“%s” , str)

 

 

 

scanf  و gets فرق

 

کاراکتر فضای خالی مرز رشته است scanf در

در حالی که

پایان رشته است Enter    فقط  gets در

   “Computer Science” مثال: رشتة

 

نکته

برای کار با رشته‌ها نمی‌توان از اپراتورها استفاده کرد

بلکه باید

از توابع مربوط به رشته‌ها استفاده کرد.

<string.h>

 

مثال

char  s [10] ;

s = “ali” ;               // نادرست

if ( s == “ABC”)    // نادرست

                        printf (“%s” , s) ;

 

mo-mah.perssianblog.ir

mohsen_mahyar@yahoo.com

 

مهمترین توابع رشته‌ای

طول رشته:  strlen (s)

انتساب:  strcpy (s1 , s2)

مقایسه:  strcmp (s1 , s2)

 

مثال برنامه‌نویسی

برنامه‌ای بنویسید که تعدادی نام از ورودی دریافت کرده و بمحض دریافت نام ali تعداد نامهای دریافتی را چاپ کند.

#include  <stdio.h>

#include  <string.h>

void  main (){

            char  s [30] ;

            int  count ;     gets (s);

            for ( count = 0 ; strcmp (s , “ali”) != 0 ; ){

                        count ++ ;

                        gets (s) ;

            } ;

            printf (“The number is: %d” , count) ;

}

 

mo-mah.perssianblog.ir

mohsen_mahyar@yahoo.com

 

 

جلسة هشتم

 

اشاره‌گر ( Pointer )

اشاره‌‌گر متغیری است که حاوی آدرس یک متغیر است و در واقع به آن اشاره می‌کند.

 

 

C لزوم استفاده از اشاره‌گرها در

         درک و استفادة بهتر از آرایه‌ها و رشته‌ها

         استفاده از پارامترهای Call by reference در توابع

         تخصیص حافظة پویا

         ایجاد و کار با ساختمانهای داده‌ای پیچیده

 

نحوة تعریف متغیر اشاره‌گر

نام متغیر اشاره‌گر *                  نوع داده‌ای که به آن اشاره می‌کند

 

int        * p ;

char        * pc ; عملگرهای اشاره‌گر

& : آدرس عملوند خود را مشخص می‌کند.

عملوند آن نام یک متغیر است.                              & i

 

* : محتوای عملوند خود را مشخص می‌کند.

عملوند آن نام یک متغیر اشاره‌گر است.        * p

 

 

float    * fp ;

 

مثال

int  i = 100 ;

int  * pi ;

 

 

 

pi = & i ;

* pi = 450 ;

 

mo-mah.perssianblog.ir

mohsen_mahyar@yahoo.com

 

 

عملگرهای مجاز دیگر

         انتساب اشاره‌گرها به یکدیگر

         جمع و تفریق با یک ثابت یا عبارت محاسباتی

         عملگرهای رابطه‌ای

 

مثال

int  * p1 , * p2 , i ;

p1 = p2 ;

p1 = p1 + 2 ;

p1 = p1 + i * 2 ;

p1 == p2

p2 <= p1

 

اشاره‌گرها و توابع

پارامتر Call by reference پارامتری است که تغییرات آن در داخل تابع عینا به فراخوانندة آن منعکس می‌شود.

 

برای استفاده از این نوع پارامتر باید از اشاره‌گر استفاده کرد.

 

مثال برنامه‌نویسی

 

تابعی که محتوای دو متغیر را با یکدیگر عوض می‌کند.

 

 

روش غلط

void  swap (int  a , int  b)

{

            int  temp ;

            temp = a ;

            a = b ;

            b = temp ;

}

 

 

روش صحیح

void  swap (int  *a , int  *b)

{

            int  temp ;

            temp = *a ;

            *a = *b ;

            *b = temp ;

}

 

 

void  main ()

{

            int x = 10 , y = 20 ;

            swap ( &x , &y ) ;

            printf (“x = %d , y = %d” , x , y) ;

}

خروجی:

x = 20 , y = 10

 

 

 

اشاره‌گر و آرایه

نام آرایه اشاره‌گر به اولین عنصر آن است.

int A [5] ;

A + 2

 

بنابراین

A [2]

معادل

* (A + 2)

 

A [2] = 100 ;

* (A + 2) = 100 ; رشته و اشاره‌گر

رشته نیز یک آرایه است

و بنابراین

نام رشته اشاره‌گر به اولین عنصر آن است.

 

scanf (“%s” , s) ;

 

 

آرایه و رشته بعنوان پارامتر تابع

void  f (int  *a ; char *s) {

            ...

            a [2] = 100 ;

            strcpy (s , “Ali”) ;

}

 

void  main () {

            int  b [10] ;

            char  str [20] ;

            ...

            f (b , str) ;

}

تخصیص حافظة پویا

؟

نیاز به حافظه‌ای که مقدار آن موقع نوشتن برنامه مشخص نیست بلکه در زمان اجرا مشخص می‌شود.

تابع تخصیص حافظة پویا

 

void  * malloc (اندازة حافظة مورد نیاز به بایت)

 

int  *p ;

p = (int *) malloc ( sizeof (int) ) ;

 

تعریف یک آرایه بصورت پویا

 

int  *A ;

A = (int *) malloc ( sizeof (int) * 100 ) ;

 

با دستورات فوق آرایه‌ای با ظرفیت 100 عنصر با نام A و بصورت پویا ایجاد می‌شود.

 

تابع آزادسازی حافظة پویا

free (اشاره‌گری که قبلا به آن حافظه اختصاص داده شده)

 

int  *A ;

A = (int *) malloc ( sizeof (int) * 100 ) ;

کار با حافظة پویا...  //

free (A) ; مثال

برنامه‌ای که نمرة تعدادی دانشجو را دریافت کرده و ...

 

تعداد دانشجویان ؟

 

روش غلط

int  n ;

float  A [n] ;

...

scanf (“%d” , &n) ;

 

روش صحیح

int  n ;

float  *A ;

...

scanf (“%d” , &n) ;

A = (float *) malloc (sizeof (float) * n) ;

کار با آرایةA  ...  //

free (A) ;

 

 

mo-mah.perssianblog.ir

mohsen_mahyar@yahoo.com

 

   + MOHSEN GHASEMI - ۱٢:٢۱ ‎ق.ظ ; ۱۳۸٩/٦/٤