خانه / دوره آموزش مقدماتی C و ++C / قسمت هیجدهم آموزش C – آرایه ها

قسمت هیجدهم آموزش C – آرایه ها

آرایه ، اسمی برای چند متغیر همنوع است و یا به عبارت دیگر مجموعه ای است از چند کمیت که دارای یک اسم باشند . به هر یک از این کمیت ها یک عنصر آرایه گفته می شود .

دسترسی به هر یک از عناصر آرایه توسط نام آرایه و محل قرار گرفتن این عنصر در آرایه مشخص می شود . نامگذاری برای آرایه ها از قانون نامگذاری برای متغیرها تبعیت می کند. بعنوان مثال مجموعه ای از دانشجویان یک کلاس می توانند تشکیل یک آرایه بدهند . اگر نام این آرایه را Y انتخاب کنیم ، آنگاه (۱)Y اولین عنصر آرایه ، (۲)Y دومین عنصر آرایه  را مشخص می کند . به هر یک از اعداد ۱، ۲، و … و n که محل قرار گرفتن یک عنصر را در آرایه مشخص می کنند ، اندیس آرایه گفته می شود . اندیس آرایه ارتباط بین عناصر آرایه را مشخص می کند مثلا (َ۲)Y در آرایه قبل از (۳)Y و بعد از (۱)Y قرار دارد. چون دسترسی به عناصر آرایه از طریق اندیس امکان پذیر است ، آرایه را متغیر اندیس دار نیز می گویند . آرایه های دارای یک اندیس را آرایه های یک بعدی ، آرایه های دارای دو اندیس را آرایه های دو بعدی و به طور کلی آرایه های دارای n اندیس را آرایه های n بعدی می گویند . آرایه ها و رشته ها دو قسمت مجزا نیستند زیرا : رشته آرایه ای از کاراکترها است .

آرایه های یک بعدی آرایه یک بعدی که نام دیگر آن لیست است ، بصورت زیر تعریف می شود :

<طول آرایه > <نوع آرایه > <اسم آرایه >
نوع ، یکی از نوع های معتبر در زبان C مثل int ، float و .. است که مشخص می کند هر یک از عناصر آرایه از چه نوعی هستند . طول آرایه ، عددی صحیح است که تعداد عناصر آرایه را مشخص می کند . با استفاده از طول آرایه و نوع آن می توان مشخص کرد که آرایه چند بایت از حافظه را اشغال می کند:

طول آرایه * ( نوع آرایه ) = sizeof

مقدار حافظه مورد نیاز آرایه اندیس آرایه ها در زبان C از صفر شروع می شود . به عنوان مثال اگر آرایه ای به طول ۵ داشته باشیم ، اولین متغیر آن دارای اندیس صفر و آخرین عنصر دارای اندیس ۴ خواهد بود .

مثال ۱ :

int temp [5];

دستور فوق آرایه ای بنام temp و به طول ۵ را تعریف میکند که همه عناصر آن از نوع int هستند .

نکته ای که در مورد آرایه ها در زبان C باید توجه داشت این است که در آن bounds checking وجود ندارد. بعنوان مثال ، اگر آرایه ای بنام x و به طول ۱۰ را تعریف کرده باشیم ( با توجه به این که بزرگترین اندیس آن ۹ است ) ، می توانیم این آرایه را با اندیس های بزرگتر از ۹ ( بدون اینکه از طرف کامپایلر C جلوی آن گرفته شود ) مورد استفاده قرار دهیم . در این مورد دستوری مثل [۱۰]x = y ازنظر کامپایلر با اشکالی مواجه نخواهد شد. ولی بدیهی است که نتیجه مطلوبی حاصل نخواهد شد. لذا برنامه نویس باید مطلب فوق را در نظر داشته باشد تا در نتیجه اجرای برنامه اشکالی پیش نیاید .

مثال ۲ : برنامه ای که با تعریف یک آرایه به طول ۱۰ ، مقدار هر عنصر آن را برابر با اندیس آن قرار داده و سپس با محاسبه مجموع مربعات عناصر آرایه ، آنها را در خروجی چاپ می کند .

#include <stdio.h>
#include <conio.h>
void main()
{
float list[5],max ;
int i , j ;
for(i=0 ; i<5 ; i++)
{
printf("\n enter moadel %d :",i+1);
scanf("%f",&list[i]);
}
max=list[0] ;
j=1 ;
for(i=1 ;i<5 ; i++)
{
if(list[i]>max)
{
max=list[i] ;
j=i+1 ;
}
}
printf("\nmax=%f/position=%d",max,j);
getch();
}

خروجی حاصل از برنامه مثال ۲ :

enter moadel 1 :1.5
enter moadel 2 :5
enter moadel 3 :2

enter moadel 4 :3

enter moadel 5 :4

max=5.000000/position=1.5

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

تاکنون نحوه تعریف و استفاده از آرایه های یک بعدی را مورد بررسی قرار داده ایم . اکنون می خواهیم ببینیم که  چگونه می توان آرایه بیش از یک بعدی را تعریف کرده و به عناصر آن دسترسی پیدا کرد . در تعریف آرایه دو بعدی باید ۲ اندیس و در تعریف آرایه سه بعدی باید ۳ اندیس و در تعریف آرایه n بعدی باید n اندیس را ذکر کرد .

به عنوان مثال ، دستور :

int table [10] [10];

یک آرایه دو بعدی بنام table را تعریف میکند که دارای ۱۰ سطر و ۱۰ ستون است و نوع عناصر آن int است .

دستور :

int k[5] [10] [15];

آرایه ای سه بعدی بنام k را تعریف می کند که دارای ۵ سطر ، ۱۰ ستون و ۱۵ ارتفاع است و نوع عناصر آن int می باشد . به دو نکته در مورد آرایه توجه کنید :

۱ – عناصر آرایه در محل های متوالی حافظه ذخیره می شوند .

۲ –  عناصر آرایه به صورت سطر ذخیره می شوند .

مثال  ۳ : برنامه ای که با محاسبه جدول ضرب اعداد ۱ تا ۱۰، ضمن قرار دادن آنها در یک آرایه به خروجی نیز منتقل می کند .

#include <stdio.h>
#include <conio.h>
void main()
{
int table[10][10];
int i , j ;
for(i=0 ; i<10 ; i++)
for(j=0 ; j<10 ; j++)
table[i][j]=(i+1)*(j+1 );
for(i=0 ; i<10 ; i++)
{
for(j=0 ; j<10 ; j++)
printf("%4d",table[i][j]);
printf("\n");
}
getch();
}

خروجی حاصل از مثال ۳ :

۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰
۲ ۴ ۶ ۸ ۱۰ ۱۲ ۱۴ ۱۶ ۱۸ ۲۰
۳ ۶ ۹ ۱۲ ۱۵ ۱۸ ۲۱ ۲۴ ۲۷ ۳۰
۴ ۸ ۱۲ ۱۶ ۲۰ ۲۴ ۲۸ ۳۲ ۳۶ ۴۰
۵ ۱۰ ۱۵ ۲۰ ۲۵ ۳۰ ۳۵ ۴۰ ۴۵ ۵۰
۶ ۱۲ ۱۸ ۲۴ ۳۰ ۳۶ ۴۲ ۴۸ ۵۴ ۶۰
۷ ۱۴ ۲۱ ۲۸ ۳۵ ۴۲ ۴۹ ۵۶ ۶۳ ۷۰
۸ ۱۶ ۲۴ ۳۲ ۴۰ ۴۸ ۵۶ ۶۴ ۷۲ ۸۰
۹ ۱۸ ۲۷ ۳۶ ۴۵ ۵۴ ۶۳ ۷۲ ۸۱ ۹۰
۱۰ ۲۰ ۳۰ ۴۰ ۵۰ ۶۰ ۷۰ ۸۰ ۹۰ ۱۰۰

نقد و بررسی

User Rating: ۴٫۷۵ ( ۵ votes)

درباره ی آریـان پــور

سلام . آریــان پور هستم . از نویسندگان میکروپـدیا .. علاقه مــند به برنامه نویسی و طراحی وب و شبکه ! دیدگاه ها و نظرات شما دوستان بررسی میشه و باعث دلگرمـی برای نوشتن مطالب بهتر و به روزتر . در تماس باشید با : aryanpour [at] micropedia [dot] ir با مـا همراه باشید ..

همچنین ببینید

قسمت بیست و چهارم آموزش C – عملگرهای اشاره گر

این جلسه بسیار ساده و کوتاه خواهد بود. دو عملگر در مورد اشاره گرها مورد …

۶ دیدگاه ها

  1. سلام.میشه بگین چطوری کد game of life رو بنویسم تو زبان سی پلاس پلاس.لطفا اگه کسی میدونه جواب بده حیاطیه😢😢😢😢😢😢😢😢😢😢😢

  2. با سلام ببخشید میشه لطفا بگین چطور یه تابع بسازم که پارامترش ارایه باشه و اینکه چطور فراخوانیش کنم؟

  3. با سلام و خسته نباشید
    من میخوام تو زبان c یک ارایه دو بعدی بسازم که هر ستون اطلاعات یک ملک رو ذخیره کنه و تعداد سطر ها هم تعداد ملک ها باشه. (تعداد ستون ها چهار و تعداد سطر ها ۱۰۰ هستش).ممنون میشم بگین چجوری باید به ترتیب اطلاعات رو بگیرم و در آرایه ذخیره کنم .🙏

  4. منظور از stdio و conio و %۴d و getch چی بود ؟ممنون میشم به سوالم جواب بدید…

    • stdioیک کتابخانه است یعنی یک سری تابع در آن تعریف شده است مثلscanfوprintfکه مادرجریان برنامه ازآن استفاده میکنیم.پس باید headerمربوط به آن راincludeکنیم.%۴dمشخص میکند که طول چیزی که برای ماچاپ میشود چقدر است.مثلادراین حالت۴بیت برای نمایش خروجی اختصاص داده میشود.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

پاسخ عبارت زیر را وارد کنید: *