نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی. پرتال اطلاعاتی
  • خانه
  • بررسی ها
  • روش های تعیین یک آرایه در c. آرایه استاتیک: اعلام، پر کردن، استفاده

روش های تعیین یک آرایه در c. آرایه استاتیک: اعلام، پر کردن، استفاده

آرایه ها در C چیست؟

چگونه آرایه ها را در C اعلام کنیم؟

چگونه آرایه ها را در C مقداردهی اولیه کنیم؟

آرایه های C برای آدمک ها.

آرایه ها در C

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

یک مثال ساده از ایجاد و پر کردن یک آرایه در C:

// @author Subbotin B.P..h> void main(void) (int nArr; nArr = 1; nArr = 2; nArr = 3; printf("\n\tArray\n\n"); printf("nArr\t =\t%d\n"، nArr)؛ printf("nArr\t=\t%d\n"، nArr)؛ printf("nArr\t=\t%d\n"، nArr)؛ بازگشت 0 ;)

ما گرفتیم:

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

در اینجا نام آرایه nArr، تعداد عناصر آرایه سه، نوع عنصر آرایه int است.

آرایه مجموعه ای از عناصر است. هر عنصر آرایه را می توان با شماره آن اشاره کرد. این عدد معمولاً شاخص نامیده می شود. عناصر آرایه با شروع از صفر شماره گذاری می شوند. بیایید به اولین عنصر آرایه مقداری اختصاص دهیم و اولین عنصر دارای اندیس صفر است:

بیایید یک مقدار به عنصر دوم آرایه اختصاص دهیم و عنصر دوم دارای شاخص یک است:

بیایید یک مقدار به عنصر سوم آرایه اختصاص دهیم و عنصر سوم دارای شاخص دو است:

وقتی عناصر آرایه را روی صفحه نمایش می دهیم، مقادیر آنها را دریافت می کنیم. مثل این:

printf("nArr\t=\t%d\n", nArr);

برای به دست آوردن یک عنصر آرایه، باید نام آرایه و شاخص عنصر را مشخص کنید:

این اولین عنصر آرایه است، زیرا اولین عنصر دارای شاخص صفر است.

بیایید مقدار عنصر سوم آرایه را به متغیر int a نسبت دهیم:

شاخص سومین عنصر آرایه برابر با دو است، زیرا شاخص ها از صفر شمارش می شوند.

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

int nArr; // آرایه ای اعلام شده است که دارای صد عدد صحیح است.
float fArr; // آرایه ای طراحی شده برای ذخیره 5 عدد شناور اعلام شده است.
char cArr; // آرایه ای برای ذخیره دو کاراکتر اعلام شده است.

اشتباه است که یک آرایه با تعداد متغیری از عناصر را اعلام کنیم:

Int varElem;
int nArr; // خطا! تعداد عناصر را نمی توان روی یک متغیر تنظیم کرد.

اما می توانید تعداد عناصر را با مقدار ثابت تنظیم کنید: یا یک عدد صحیح مثبت مستقیم 1، 2، 3... یا یک ثابت:

Const int arrayLength = 3;
int nArr;

هنگام اعلام یک آرایه در C، می توانید بلافاصله آن را مقداردهی اولیه کنید:

int nMassiv = (1، 2، 3);

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

int nMassiv = (1، 2، 3);

تعداد عناصر در این مورد به طور خودکار تعیین می شود.

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

int nMassiv = (1، 2);

در این مثال، دو عنصر اول آرایه مقداردهی اولیه شده اند، اما عنصر سوم تعریف نشده است.

نمونه ای از آرایه کاراکتری:

char cArr = ("S"، "B"، "P");

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

Int ind = 0;
char cr = cArr;

این در هنگام کار با حلقه ها استفاده می شود. مثال:

// @author Subbotin B.P..h> void main(void) (const int arrayLength = 3; int nArr; for(int inn = 0; inn< 3; inn++) { nArr = inn + 1; } printf("\n\tArray\n\n"); for(int inn = 0; inn < 3; inn++) { printf("nArr[%d]\t=\t%d\n", inn, nArr); } return 0; }

در مثال، در حلقه اول آرایه را با عناصری از نوع int پر می کنیم و در حلقه دوم این عناصر را روی صفحه نمایش می دهیم.

آرایه ها

آرایهمجموعه ای از متغیرهای هم نوع با نام مشترک برای اشاره به آنها است. در سی شارپ آرایه ها می توانند یک بعدی یا چند بعدی باشند. آرایه‌ها اهداف مختلفی را دنبال می‌کنند زیرا ابزار مناسبی برای گروه‌بندی متغیرهای مرتبط با یکدیگر فراهم می‌کنند.

شما می توانید از آرایه ها در سی شارپ مانند سایر زبان های برنامه نویسی استفاده کنید. با این حال، آنها یک ویژگی دارند: آنها به عنوان اشیاء اجرا می شوند.

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

استفاده از سیستم؛ با استفاده از System.Collections.Generic. با استفاده از System.Linq؛ با استفاده از System.Text. namespace ConsoleApplication1 ( کلاس Program ( static void Main(string args) ( // آرایه را اعلام کنید int myArr = new int؛ // هر عنصر آرایه را به صورت دستی مقداردهی کنید myArr = 100؛ myArr = 23؛ myArr = 25؛ myArr = 31; myArr = 1 ؛ foreach (int i در myArr) Console.WriteLine(i)؛ Console.ReadLine(); ) )

به خاطر داشته باشید که اگر یک آرایه فقط اعلام شده باشد اما به طور صریح مقداردهی اولیه نشده باشد، هر عنصر روی مقدار پیش فرض برای نوع داده مربوطه تنظیم می شود (به عنوان مثال، عناصر یک آرایه از نوع bool روی false تنظیم می شوند و عناصر یک آرایه از نوع int روی 0 تنظیم می شود).

راه اندازی یک آرایه

علاوه بر پر کردن عنصر آرایه به عنصر (همانطور که در مثال قبلی نشان داده شده است)، می توانید آن را با استفاده از یک دستور اولیه آرایه خاص نیز پر کنید. برای انجام این کار، باید عناصر موجود در آرایه را در پرانتزهای فرفری ( ) فهرست کنید. این نحو هنگام ایجاد یک آرایه با اندازه شناخته شده و نیاز به تنظیم سریع مقادیر اولیه آن مفید است:

// نحو برای مقداردهی اولیه آرایه با استفاده از // کلمه کلیدی new int myArr = new int (10,20,30,40,50); // نحو برای مقداردهی اولیه یک آرایه بدون استفاده از // کلمه کلیدی new string info = ( "Last Name", "First Name", "Patronymic" ); // از کلمه کلیدی جدید و اندازه دلخواه char استفاده کنید = علامت جدید ( "X", "Y", "Z", "M" );

توجه داشته باشید که هنگام استفاده از نحو پرانتز، نیازی به تعیین اندازه آرایه ندارید (همانطور که در ایجاد متغیر myArr مشاهده می‌شود) زیرا اندازه به طور خودکار بر اساس تعداد عناصر داخل بریس‌های فرفری محاسبه می‌شود. همچنین از کلمه کلیدی استفاده کنید جدیداختیاری (مانند ایجاد یک آرایه اطلاعات).

کلمه کلیدی var به شما امکان می دهد یک متغیر را طوری تعریف کنید که نوع اصلی آن توسط کامپایلر استنباط شود. همچنین می توانید آرایه های محلی تایپ شده ضمنی را به روشی مشابه تعریف کنید. با استفاده از این روش، می توانید یک متغیر آرایه جدید را بدون تعیین نوع عناصر موجود در آرایه تعریف کنید. بیایید به یک مثال نگاه کنیم:

استفاده از سیستم؛ با استفاده از System.Collections.Generic. با استفاده از System.Linq؛ با استفاده از System.Text. namespace ConsoleApplication1 ( کلاس برنامه ( static void Main (string args) ( var arr1 = new ( 1, 2, 3 ); Console.WriteLine ("نوع آرایه arr1 است (0)",arr1.GetType())؛ var arr2 = جدید ("یک"، "دو"، "سه")؛ Console.WriteLine("نوع آرایه arr2 - (0)"، arr2.GetType())؛ Console.ReadLine(); ) )

البته، همانطور که هنگام ایجاد یک آرایه با استفاده از نحو صریح C#، عناصر مشخص شده در لیست اولیه سازی آرایه باید از یک نوع اصلی باشند (یعنی همه آنها باید int، string یا MyCar باشند).

تعریف آرایه ای از اشیا

در اغلب موارد، هنگام تعریف یک آرایه، نوع عنصر موجود در آرایه به صراحت مشخص می شود. اگرچه این در نگاه اول بسیار ساده به نظر می رسد، اما یک ویژگی مهم وجود دارد. در قلب هر نوع در سیستم نوع دات نت (شامل انواع داده های اساسی) در نهایت یک کلاس پایه، System.Object قرار دارد. نتیجه این است که اگر آرایه ای از اشیاء را تعریف کنید، عناصر داخل آن می توانند هر چیزی باشند:

استفاده از سیستم؛ با استفاده از System.Collections.Generic. با استفاده از System.Linq؛ با استفاده از System.Text. namespace ConsoleApplication1 ( class Program ( static void Main(string args) ( // اعلان و مقداردهی اولیه آرایه ای از اشیاء شی arrByObject = ( true, 10, "Hello", 13.7m )؛ // چاپ نوع هر عضو آرایه در کنسول foreach (من را در arrByObject شیء کنید) Console.WriteLine("Type (0) - (1)",me,me.GetType()); Console.ReadLine(); ) ) )

هنگام حل مسائل با حجم زیادی از داده های یکسان، استفاده از متغیرهایی با نام های مختلف که بر اساس آدرس های حافظه مرتب نشده اند، برنامه نویسی را دشوار می کند. در چنین مواردی زبان C از اشیایی به نام آرایه استفاده می کند.

یک قطعه حافظه پیوسته حاوی دنباله ای از اشیاء از همان نوع است که با یک نام مشخص می شود.

آرایه با مفاهیم اساسی زیر مشخص می شود:

عنصر آرایه (مقدار عنصر آرایه)- یک مقدار ذخیره شده در یک سلول حافظه خاص که در داخل آرایه قرار دارد و همچنین آدرس این سلول حافظه.
هر عنصر آرایه با سه مقدار مشخص می شود:

  • آدرس عنصر - آدرس سلول حافظه شروع که این عنصر در آن قرار دارد.
  • شاخص عنصر (شماره ترتیبی عنصر در آرایه)؛
  • مقدار عنصر

آدرس آرایه - آدرس عنصر شروع آرایه.

نام آرایه یک شناسه است که برای اشاره به عناصر آرایه استفاده می شود.

اندازه آرایه - تعداد عناصر آرایه

اندازه عنصر تعداد بایت های اشغال شده توسط یک عنصر آرایه است.

از نظر گرافیکی، مکان آرایه در حافظه کامپیوتر را می توان به صورت یک نوار پیوسته از آدرس ها نشان داد.

آرایه نشان داده شده در شکل حاوی عناصر q با شاخص های 0 تا q-1 است. هر عنصر k بایت در حافظه کامپیوتر اشغال می کند و ترتیب عناصر در حافظه به صورت ترتیبی است.

آدرس های عنصر i آرایه هستند

آدرس آرایه آدرس عنصر شروع (صفر) آرایه است. برای دسترسی به عناصر آرایه از شماره سریال (شاخص) عنصر استفاده می شود که مقدار اولیه آن 0 است. بنابراین، اگر یک آرایه حاوی عناصر q باشد، شاخص های عناصر آرایه از 0 تا q-1 متفاوت است.

طول آرایه تعداد بایت هایی است که در حافظه برای ذخیره تمام عناصر آرایه اختصاص داده می شود.

طول آرایه = اندازه عنصر * تعداد عناصر

از این تابع می توان برای تعیین اندازه یک عنصر آرایه استفاده کرد

int sizeof(type);

مثلا،

sizeof(char) = 1;
sizeof(int) = 4;
sizeof(float) = 4;
اندازه (دو برابر) = 8;

اعلان و مقداردهی اولیه آرایه ها

برای اعلان آرایه در C از دستور زیر استفاده می شود:

تایپ کنید name[dimension]=(init);

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

int a = (0، 1، 2، 3، 4، 5، 6، 7، 8، 9)؛ // آرایه a از 10 عدد صحیح

اگر تعداد مقادیر مقداردهی اولیه مشخص شده در پرانتزهای فرفری کمتر از تعداد عناصر آرایه مشخص شده در براکت های مربع باشد، آنگاه تمام عناصر باقیمانده در آرایه (که مقادیر مقداردهی اولیه برای آنها کافی نبود) صفر خواهند بود. استفاده از این ویژگی برای تنظیم تمام عناصر یک آرایه روی مقادیر صفر راحت است.

int b = (0); // آرایه b از 10 عنصر به 0 مقدار دهی اولیه شده است


اگر آرایه هنگام اعلام مقداردهی اولیه شود، مقادیر اولیه ثابت عناصر آن با کاما در پرانتزهای فرفری از هم جدا شده اند. در این مورد، تعداد عناصر موجود در براکت ها را می توان حذف کرد.

int a = (1، 2، 3، 4، 5، 6، 7، 8، 9)؛

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

مثال در C

1
2
3
4
5
6
7
8

#عبارتند از
int main()
{
int a = ( 5، 4، 3، 2، 1); // آرایه a شامل 5 عنصر است
printf("%d %d %d %d %d\n" , a, a, a, a, a);
getchar();
بازگشت 0;
}

نتیجه اجرای برنامه:

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

int a;

برای تنظیم مقادیر اولیه عناصر آرایه، اغلب از یک حلقه پارامتریک استفاده می شود:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18


#عبارتند از
int main()
{
int a;
int i;
// وارد کردن عناصر آرایه
برای (i = 0; i<5; i++)
{
printf("a[%d] = " , i);
scanf("%d" , &a[i]);
}
// خروجی عناصر آرایه
برای (i = 0; i<5; i++)
printf("%d " , a[i]); // فضا در قالب چاپ مورد نیاز است
getchar(); getchar();
بازگشت 0;
}

نتیجه اجرای برنامه

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

آرایه های چند بعدی را می توان در C نیز اعلام کرد. تفاوت بین یک آرایه چند بعدی و یک بعدی در این است که در یک آرایه یک بعدی موقعیت یک عنصر با یک شاخص تعیین می شود و در یک آرایه چند بعدی - با چندین. نمونه ای از آرایه های چند بعدی یک ماتریس است.

شکل کلی اعلان یک آرایه چند بعدی

تایپ نام[dimension1][dimension2]...[dimensionm];

عناصر یک آرایه چند بعدی در سلول های RAM متوالی به ترتیب صعودی آدرس ها قرار دارند. در حافظه کامپیوتر، عناصر یک آرایه چند بعدی در یک ردیف مرتب شده اند، به عنوان مثال یک آرایه با 2 سطر و 3 ستون،

int a;


به صورت زیر در حافظه قرار می گیرد

تعداد کل عناصر در آرایه دو بعدی داده شده به صورت تعیین می شود

تعداد سطر * تعداد ستون = 2 * 3 = 6.

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

تعداد آیتم ها * اندازه آیتم = 6 * 4 = 24 بایت.

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

مقادیر عناصر یک آرایه چندبعدی، مانند حالت یک بعدی، می تواند با مقادیر ثابت زمانی که در پرانتزهای فرفری محصور شده است، مشخص شود. با این حال، در این مورد، تعداد عناصر در سطرها و ستون ها باید در کروشه نشان داده شود.

مثال در C

1
2
3
4
5
6
7
8
9

#عبارتند از
int main()
{
int a = (1، 2، 3، 4، 5، 6);
printf("%d %d %d\n" , a, a, a);
getchar();
بازگشت 0;
}



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

مثال در C

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

#define _CRT_SECURE_NO_WARNINGS
#عبارتند از
int main()
{
int a; // آرایه 2 سطر و 3 ستون
int i, j;
// وارد کردن عناصر آرایه
برای (i = 0; i<2; i++) // از طریق خطوط حلقه بزنید
{
برای (j = 0؛ j<3; j++) // از میان ستون ها حلقه بزنید
{
printf("a[%d][%d] = " , i, j);
scanf("%d" , &a[i][j]);
}
}
// خروجی عناصر آرایه
برای (i = 0; i<2; i++) // از طریق خطوط حلقه بزنید
{
برای (j = 0؛ j<3; j++) // از میان ستون ها حلقه بزنید
{
printf("%d " , a[i][j]);
}
printf("\n"); // خط جدید
}
getchar(); getchar();
بازگشت 0;
}



ارسال یک آرایه به یک تابع

پردازش آرایه را می توان با استفاده از توابع ویژه به راحتی سازماندهی کرد. برای پردازش یک آرایه، باید به عنوان آرگومان به تابع ارسال کنید

  • آدرس آرایه،
  • اندازه آرایه

استثنا توابع پردازش رشته هستند، جایی که کافی است فقط آدرس را منتقل کنید.

هنگام ارسال متغیرها به عنوان آرگومان به یک تابع، داده ها به صورت کپی ارسال می شوند. این بدان معناست که اگر مقدار پارامتر در داخل تابع تغییر کند، این روی مقدار آن در داخل تابع فراخوانی تاثیری نخواهد داشت.

اگر یک آدرس متغیر (یا آدرس آرایه) به یک تابع ارسال شود، تمام عملیات انجام شده در تابع روی داده در محدوده آدرس مشخص شده روی داده اصلی انجام می شود، بنابراین آرایه اصلی (یا مقدار متغیر) را می توان تغییر داد. توسط تابع فراخوانی شده

مثال در آرایه 10 عنصری C Dan. بزرگترین و ابتدایی ترین عناصر آرایه را جابه جا کنید. برای حداکثر عملیات جستجو و تبادل عنصر، از تابع استفاده کنید.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

#define _CRT_SECURE_NO_WARNINGS
#عبارتند از
// تابع تبادل
تغییر خالی (int *x، int n)
{
// x - اشاره گر به آرایه (آدرس آرایه)
// n - اندازه آرایه
int i;
int max, index;
حداکثر = x;
شاخص = 0;
// یافتن حداکثر عنصر
برای (i = 1; i {
اگر (x[i]> حداکثر)
{
حداکثر = x[i];
index = i;
}
}
// تبادل
x = x;
x = حداکثر;
}
// تابع اصلی
int main()
{
int a;
int i;
برای (i = 0; i<10; i++)
{
printf("a[%d] = " , i);
scanf("%d" , &a[i]);
}
تغییر (a, 10); // تابع تبادل را فراخوانی کنید
// خروجی عناصر آرایه
برای (i = 0; i<10; i++)
printf("%d " , a[i]);
getchar();
getchar();
برگشت
p = p * x[i];
}
بازگشت p;
}
// تابع اصلی
int main()
{
int a; // آرایه a از 5 عنصر را اعلام کرد
int i;
int pr;
// وارد کردن عناصر آرایه
برای (i = 0; i<5; i++)
{
printf("a[%d] = " , i);
scanf("%d" , &a[i]); // &a[i] - آدرس عنصر i آرایه
}
pr = func(a, 5); // محصول را محاسبه کنید
printf("\n pr = %d" , pr); // خروجی حاصل ضرب عناصر زوج
getchar(); getchar();
بازگشت 0;
}



لطفا AdBlock را در این سایت تعلیق کنید.

آرایه ساده ترین نوع داده ترکیبی است. وقتی در مورد متغیرها بحث می کردیم، تشابه خوبی با یک جعبه داشتیم. بیایید به آن برگردیم. اگر یک متغیر یک جعبه باشد، آنگاه یک آرایه چندین جعبه یکسان شماره گذاری شده است که نام یکسانی دارند و فقط در شماره سریال آنها متفاوت است.

شکل 1 متغیرها و آرایه ها. قیاس با جعبه.

تصویر بالا سه آرایه را نشان می دهد:

  • یک آرایه عدد صحیح 8 عنصری به نام arr_int
  • آرایه شناور از 11 عنصر به نام arr_float
  • یک آرایه کاراکتری 6 عنصری به نام arr_char

یک آرایه، مانند یک متغیر، نام و نوع داده خاص خود را دارد. علاوه بر این، آرایه یک ویژگی اضافی دارد - اندازه آرایه. اندازه یک آرایه تعداد عناصری است که می توان در آن ذخیره کرد. در قیاس جعبه ما، این تعداد جعبه ها است.

توجه داشته باشید!

شماره گذاری عناصر آرایه از صفر شروع می شود نه از یک.

اعلام و مقداردهی اولیه یک آرایه

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

لیست 1.

Int arr_int; double arr_float; عدد شناور؛

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

قانون نامگذاری آرایه

نام آرایه هر دنباله ای از کاراکترها، اعداد و زیرخط "_" است که با یک حرف شروع می شود. مورد نامه مهم است.

در اینجا چند نمونه دیگر از اعلان آرایه آورده شده است:

لیست 2.

نمرات بین المللی، سفارش; قیمت دو برابری؛

یک آرایه، مانند هر متغیری، می‌تواند مقادیر اولیه را در صورت اعلان به آن اختصاص دهد. اگر به عناصر آرایه مقداری اختصاص داده نشود، مانند متغیرهای معمولی، زباله‌ها را ذخیره می‌کنند.

لیست 3.

Int arr_int = (2، 5، 5، 3، 4); double arr_float = (1.2، -2.3، 4.5، 3.83، 0.01، -0.12، 44.2، 123.7، 23.44، -3.7، 7);

اگر نیاز دارید که مقادیر صفر را به تمام عناصر یک آرایه اختصاص دهید، می توانید این کار را به صورت زیر انجام دهید:

لیست 4.

دو آرر = (0);

کار با عناصر آرایه مجزا

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

برای مثال، بیایید عناصر یک آرایه پنج عنصری را روی صفحه نمایش دهیم.

لیست 5.

#عبارتند از int main(void)( int arr = (2, 4, 3, 5, 5); printf("%d %d %d %d %d\n", arr, arr, arr, arr, arr); return (0)؛

البته، اگر آرایه بسیار بزرگ باشد، خروجی عنصر به عنصر به این روش همچنان لذت بخش است. و هیچ کس این کار را با آرایه های کوچک انجام نمی دهد. استفاده از حلقه ها بهتر و صحیح تر است. مثلا:

لیست 6.

#عبارتند از int main(void)( int arr = (0)؛ for(int i = 0; i< 100; i = i + 1){ arr[i] = 2*i; } for(int i = 0; i < 100; i = i + 1){ printf("%d\t",arr[i]); } return(0); }

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

با ابزارهای جدیدمان، بیایید برنامه خود را از ابتدای درس بازنویسی کنیم تا از یک آرایه برای ذخیره آمار اعداد تصادفی استفاده کند.

لیست 7.

#عبارتند از #عبارتند از #عبارتند از int main(void) (srand(time(NULL)); int count = (0); int rand_number; for (int i = 0; i< 100000; i = i + 1){ rand_number = rand()%3; count = count + 1; } for(int i = 0; i < 3; i = i + 1){ printf("%d - %d\n", i, count[i]); } return 0; }

به تکنیک استفاده شده در این برنامه دقت کنید.
عنصر صفر آرایه تعداد دفعات عدد 0، عنصر اول - تعداد دفعات عدد 1، عنصر دوم - عدد 2 را ذخیره می کند. یعنی خود عدد تولید شده به شما این امکان را می دهد که تعیین کنید به کدام عنصر آرایه باید یکی را اضافه کنید. بنابراین، نیازی به دستور انتخاب سوئیچ نیست. راحت است، اینطور نیست؟

بیایید بگوییم که باید با حجم زیادی از داده های مشابه کار کنیم. به عنوان مثال، ما هزار اندازه از مختصات یک آونگ با مقداری گام زمانی داریم. ایجاد 1000 متغیر برای ذخیره همه مقادیر بسیار... دست و پا گیر است. در عوض، بسیاری از یک نوع داده را می توان تحت یک نام ترکیب کرد و هر عنصر خاص را می توان با شماره سریال آن دسترسی داشت.
یک آرایه در C به صورت زیر تعریف می شود
<тип> <имя массива>[<размер>];
مثلا،
int a;
آرایه ای به نام دریافت خواهیم کرد آ، که شامل صد عنصر نوع است بین المللی. مانند متغیرها، آرایه حاوی زباله است.
برای دسترسی به عنصر اول، عدد (شاخص) آن را در پرانتز بنویسید. مثلا

#عبارتند از #عبارتند از void main() (int a; a = 10; a = 333; a = 234; printf("%d %d %d"، a, a, a); getch(); )

اولین عنصر دارای شماره شاخص 0 است. درک دلیل آن مهم است. در ادامه، حافظه کامپیوتر را به صورت نوار نشان خواهیم داد. نام آرایه یک اشاره گر به آدرس حافظه است که عناصر آرایه در آن قرار دارند.

برنج. 1 آرایه آدرس اولین عنصر را ذخیره می کند. شاخص عنصر i یک تغییر بایت i*sizeof(type) از ابتدا است

شاخص آرایه نشان می دهد که چند بایت باید از ابتدای آرایه جابجا شود تا به عنصر مورد نظر دسترسی پیدا کند. به عنوان مثال، اگر آرایه آنوع دارد بین المللی، سپس A به این معنی است که 10*sizeof(int) بایت را نسبت به ابتدا منتقل کرده ایم. عنصر اول در همان ابتدا قرار دارد و دارای افست 0*sizeof(int) است.
در C، یک آرایه اندازه خود را ذخیره نمی کند و شاخص آرایه را برای صحت بررسی نمی کند. این بدان معنی است که می توانید به خارج از آرایه بروید و به حافظه ای که از آخرین عنصر آرایه دورتر است (یا نزدیکتر) دسترسی پیدا کنید.

مقداردهی اولیه آرایه

بیایید یک برنامه ساده بنویسیم. بیایید یک آرایه ایجاد کنیم و سپس حداکثر عنصر آن را پیدا کنیم.

#عبارتند از #عبارتند از void main() ( int a = (1، 2، 5، 3، 9، 6، 7، 7، 2، 4)؛ i بدون علامت؛ int max؛ max = a؛ برای (i = 1؛ i<10; i++) { if (a[i] >

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

حداکثر = a;

سپس از آرایه عبور می کنیم. از آنجایی که ما قبلاً به اولین عنصر نگاه کرده ایم (این عنصر دارای شاخص 1 است) دیگر فایده ای ندارد که دوباره به آن نگاه کنیم.
به عنوان مثال، فقط اکنون کاربر مقادیر را وارد می کند

#عبارتند از #عبارتند از void main() (int a; i بدون علامت; int max; printf ("10 عدد را وارد کنید\n")؛ برای (i = 0; i<10; i++) { printf("%d. ", i); scanf("%d", &a[i]); } max = a; for (i = 1; i<10; i++) { if (a[i] >max) ( max = a[i]; ) ) printf("عنصر حداکثر %d است"، حداکثر); getch(); )

اگر در طول مقداردهی اولیه مقادیر کمتری از اندازه آرایه مشخص شود، عناصر باقیمانده با صفر پر می شوند.

#عبارتند از #عبارتند از void main() ( int a = (1,2,3); i بدون علامت؛ برای (i = 0; i<10; i++) { printf("%d ", a[i]); } getch(); }

اگر می خواهید کل آرایه را با صفر پر کنید، بنویسید

Int a = (0);

برای مثال، لازم نیست اندازه آرایه را به صراحت مشخص کنید

Int a = (1، 2، 3);

آرایه اندازه 3 خواهد داشت

اندازه آرایه

یک آرایه در C باید اندازه ثابتی داشته باشد. این به این معنی است که برای مثال نمی توان از کاربر یک اندازه درخواست کرد و سپس این اندازه را روی یک آرایه تنظیم کرد.

Printf("طول آرایه را وارد کنید"); scanf("%d"، &length); (شناور x;)

ایجاد آرایه های پویا در هنگام کار با اشاره گر و حافظه بیشتر مورد بحث قرار خواهد گرفت.
در برخی موارد، می توانید اندازه آرایه را با استفاده از تابع دریابید اندازه.

#عبارتند از #عبارتند از void main() ( int A; //sizeof اندازه کل آرایه را بر حسب بایت برمی گرداند //برای تعیین تعداد عناصر، //اندازه آرایه را بر اندازه عنصر آن تقسیم کنید int size = sizeof(A) / sizeof(int); printf("اندازه آرایه برابر است با %d"، اندازه)؛ getch(); )

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

سرریز آرایه

امیدواریم این کد را داشته باشید

Int A; int i; برای (i=0; i<=10; i++) { A[i] = 1; }

اینجا یک حلقه است برایبا یک خطا مشخص شده است. در برخی از نسخه های قدیمی کامپایلرها، این کد حلقه می شود. نکته این است که متغیر منبلافاصله پس از آرایه در هنگام کامپایل قرار گرفت آ. وقتی آرایه از مرزها فراتر رفت، شمارنده روی 1 تنظیم شد.
آرایه ها ناامن هستند، زیرا کار نادرست با ایندکس می تواند منجر به دسترسی به بخشی دلخواه از حافظه شود (از لحاظ تئوری. کامپایلرهای مدرن خودشان مراقب هستند که شما در حافظه شخص دیگری غوطه ور نشوید).
اگر با آرایه ها کار می کنید، باید اطمینان حاصل کنید که شمارنده از اندازه آرایه تجاوز نمی کند و منفی نیست. برای این، حداقل،

  • 1. از نوع size_t برای نمایه سازی استفاده کنید. از شما در برابر مقادیر منفی محافظت می کند و همیشه برای آرایه ای با هر اندازه کافی است.
  • 2. به یاد داشته باشید که آرایه از صفر شروع می شود.
  • 3. آخرین عنصر آرایه دارای شاخص است (اندازه آرایه 1 است)
هیچ راه کاملی برای بررسی اینکه آیا از محدودیت های آرایه فراتر رفته ایم یا خیر وجود ندارد. بنابراین یا اندازه آن را دقیقاً می دانیم یا آن را در یک متغیر ذخیره می کنیم و در صورت لزوم می خوانیم.

مثال ها

اکنون در اینجا چند نمونه معمولی از کار با آرایه ها آورده شده است
1. آرایه را معکوس کنید.

#عبارتند از #عبارتند از //این یک ماکرو است. SIZE در کد با 10u جایگزین می شود #define SIZE 10u void main() int A = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9); بدون علامت i, j; // شمارنده های نیمی بدون علامت؛ //وسط آرایه بدون علامت tmp؛ //متغیر موقت برای تبادل مقادیر Half = SIZE / 2؛ //یک شمارنده از چپ به راست، دیگری از راست به چپ برای (i = 0، j = SIZE - 1؛ i< half; i++, j--) { tmp = A[i]; A[i] = A[j]; A[j] = tmp; } for (i = 0; i < SIZE; i++) { printf("%d ", A[i]); } getch(); }

در اینجا یک طرح برای شما ناآشنا است

#SIZE 10u را تعریف کنید

کلان. در سراسر کد، پیش پردازنده به طور خودکار همه موارد SIZE را با 10u جایگزین می کند.
2. حذف یک عنصر انتخاب شده توسط کاربر.

#عبارتند از #عبارتند از #define SIZE 10u void main() (int A = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9); i unsigned; //counter int index; //index وارد شده توسط کاربر / /آرایه خروجی برای (i = 0; i< SIZE; i++) { printf("(%d)=%d ", i, A[i]); } //Просим пользователя ввести валидный индекс while (1) { printf("\nEnter index of element to delete "); scanf("%d", &index); if (index >0 && نمایه< SIZE) { break; } } //Копируем следующий элемент массива на место удаляемого //и так до конца for (i = index; i < SIZE-1; i++) { A[i] = A; } //Выводим результат for (i = 0; i < SIZE-1; i++) { printf("(%d)=%d ", i, A[i]); } getch(); }

در این صورت البته عنصر حذف نمی شود. آرایه به همان اندازه قبلی باقی می ماند. ما به سادگی عنصر در حال حذف را با عنصر بعدی بازنویسی می کنیم و عناصر SIZE-1 را خروجی می کنیم.
3. کاربر مقادیر را در آرایه وارد می کند. پس از آن، تمام مقادیر مختلف وارد شده را چاپ کنید.
اجازه دهید کاربر تعداد محدودی از عناصر را وارد کند، مثلاً 10. سپس از قبل مشخص شده است که در مجموع بیش از 10 مقدار مختلف وجود نخواهد داشت. آیا چنین شماره ای وارد شده است.

#عبارتند از #عبارتند از #define SIZE 10u void main() ( int A = (0)؛ بدون علامت i, j؛ int counter = 1؛ //چند اعداد مختلف وارد شده است. حداقل یک. ورودی int؛ int wasntFound؛ //پرچم گذاری که شماره وارد شده یافت نشد // اولین عدد را وارد کنید. هنوز پیدا نشده است. printf("0. "); scanf("%d", &A); for (i = 1; i< SIZE; i++) { printf("%d. ", i); scanf("%d", &input); wasntFound = 1; //Проверяем, встречалось ли такое число. Если да, //то выставляем флаг и выходим из цикла for (j = 0; j <= counter; j++) { if (input == A[j]) { wasntFound = 0; break; } } //Если флаг был поднят, то заносим число в массив if (wasntFound) { A = input; counter++; } } for (i = 0; i < counter; i++) { printf("%d ", A[i]); } getch(); }

4. کاربر یک عدد را وارد می کند - تعداد اندازه گیری ها (از 2 تا 10). پس از این، تمام اندازه گیری ها را وارد می کند. برنامه مقدار متوسط، واریانس و خطا را نمایش می دهد.

#عبارتند از #عبارتند از #عبارتند از #define SIZE 20u void main() ( //ضرایب دانشجویی از دو بعد شروع می‌شوند. float tmp؛ float sum = 0.0f؛ float mean؛ float disp؛ float absError؛ float relError; do ( printf("تعداد اندازه گیری ها را وارد کنید"); scanf("%u"، &limit); if (محدود > 1 && limit< 11) { break; } } while(1); for (i = 0; i < limit; i++) { printf("#%d: ", i); scanf("%f", &A[i]); sum += A[i]; } mean = sum / (float)limit; sum = .0f; for (i = 0; i < limit; i++) { tmp = A[i] - mean; sum += tmp * tmp; } disp = sum / (float)limit; absError = student * sqrt(sum / (float)(limit - 1)); relError = absError / mean * 100; printf("Mean = %.6f\n", mean); printf("Dispertion = %.6f\n", disp); printf("Abs. Error = %.6f\n", absError); printf("Rel. Error = %.4f%", relError); getch(); }

5. مرتب سازی حباب آرایه

#عبارتند از #عبارتند از #define SIZE 10 #define false 0 #define true !false void main() ( float a = (1.0f، 2.0f، 3.0f، 4.0f، 5.0f، 6.0f، 7.0f، 8.0f، 9.0f، 0.0 f؛ float tmp؛ بدون علامت i, j؛ پرچم char؛ //خروجی آرایه برای (i = 0; i< SIZE; i++) { printf("%.3f ", a[i]); } printf("\n"); //Пока массив не отсортирован do { flag = false; //Проходим по массиву. Если следующий элемент больше предыдущего, то //меняем их местами и по новой проверяем массив for (i = 1; i < SIZE; i++) { if (a[i] >الف) ( tmp = a[i]؛ a[i] = a؛ a = tmp؛ پرچم = درست؛ ) ) ) while(flag == true); //خروجی آرایه مرتب شده برای (i = 0; i< SIZE; i++) { printf("%.3f ", a[i]); } getch(); }

6. آرایه را مخلوط کنید. بیایید برای این کار از الگوریتم استفاده کنیم

بهترین مقالات در این زمینه