מערך מוגדר כאוסף של פריטי נתונים מסוג דומה המאוחסנים במיקומי זיכרון רציפים. מערכים הם סוג הנתונים הנגזר בשפת התכנות C אשר יכול לאחסן את הסוג הפרימיטיבי של נתונים כגון int, char, double, float וכו'. יש לו גם את היכולת לאחסן את אוסף סוגי הנתונים הנגזרים, כגון מצביעים, מבנה, וכו'. המערך הוא מבנה הנתונים הפשוט ביותר שבו ניתן לגשת באופן אקראי לכל רכיב נתונים באמצעות מספר האינדקס שלו.
מערך C מועיל אם אתה צריך לאחסן אלמנטים דומים. לדוגמה, אם אנחנו רוצים לאחסן את הציונים של תלמיד ב-6 מקצועות, אז אנחנו לא צריכים להגדיר משתנים שונים עבור הציונים במקצוע השונה. במקום זאת, אנו יכולים להגדיר מערך שיכול לאחסן את הסימנים בכל נושא במיקומי הזיכרון הרציפים.
על ידי שימוש במערך, נוכל לגשת לאלמנטים בקלות. נדרשות רק כמה שורות קוד כדי לגשת לרכיבי המערך.
מאפיינים של מערך
המערך מכיל את המאפיינים הבאים.
- כל אלמנט של מערך הוא מאותו סוג נתונים ונושא אותו גודל, כלומר, int = 4 בתים.
- אלמנטים של המערך מאוחסנים במיקומי זיכרון רציפים כאשר האלמנט הראשון מאוחסן במיקום הזיכרון הקטן ביותר.
- ניתן לגשת לאלמנטים של המערך באופן אקראי מכיוון שאנו יכולים לחשב את הכתובת של כל אלמנט של המערך עם כתובת הבסיס הנתונה וגודל אלמנט הנתונים.
יתרון של מערך C
1) אופטימיזציה של קוד : פחות קוד לגישה לנתונים.
2) קלות מעבר : על ידי שימוש בלולאת for, נוכל לאחזר את הרכיבים של מערך בקלות.
3) קלות מיון : כדי למיין את רכיבי המערך, אנו זקוקים למספר שורות קוד בלבד.
4) גישה אקראית : אנו יכולים לגשת לכל אלמנט באופן אקראי באמצעות המערך.
חסרון של מערך C
1) גודל קבוע : בכל גודל, אנו מגדירים בזמן ההכרזה על המערך, איננו יכולים לחרוג מהמגבלה. לכן, זה לא מגדיל את הגודל באופן דינמי כמו LinkedList שנלמד בהמשך.
הצהרת מערך C
אנו יכולים להכריז על מערך בשפת c באופן הבא.
data_type array_name[array_size];
כעת, הבה נראה את הדוגמה להכרזת המערך.
int marks[5];
כאן, אינט הוא ה סוג מידע , סימנים הם ה array_name , ו-5 הוא ה array_size .
אתחול של מערך C
הדרך הפשוטה ביותר לאתחל מערך היא באמצעות האינדקס של כל אלמנט. נוכל לאתחל כל רכיב במערך באמצעות האינדקס. שקול את הדוגמה הבאה.
mvc במסגרת אביבית
marks[0]=80;//initialization of array marks[1]=60; marks[2]=70; marks[3]=85; marks[4]=75;
דוגמה למערך C
#include int main(){ int i=0; int marks[5];//declaration of array marks[0]=80;//initialization of array marks[1]=60; marks[2]=70; marks[3]=85; marks[4]=75; //traversal of array for(i=0;i<5;i++){ printf('%d ',marks[i]); } end of for loop return 0; < pre> <p> <strong>Output</strong> </p> <pre> 80 60 70 85 75 </pre> <h2>C Array: Declaration with Initialization</h2> <p>We can initialize the c array at the time of declaration. Let's see the code.</p> <pre> int marks[5]={20,30,40,50,60}; </pre> <p>In such case, there is <strong>no requirement to define the size</strong> . So it may also be written as the following code.</p> <pre> int marks[]={20,30,40,50,60}; </pre> <p>Let's see the C program to declare and initialize the array in C.</p> <pre> #include int main(){ int i=0; int marks[5]={20,30,40,50,60};//declaration and initialization of array //traversal of array for(i=0;i<5;i++){ printf('%d ',marks[i]); } return 0; < pre> <p> <strong>Output</strong> </p> <pre> 20 30 40 50 60 </pre> <h2>C Array Example: Sorting an array</h2> <p>In the following program, we are using bubble sort method to sort the array in ascending order.</p> <pre> #include void main () { int i, j,temp; int a[10] = { 10, 9, 7, 101, 23, 44, 12, 78, 34, 23}; for(i = 0; i<10; i++) { for(j="i+1;" j a[i]) temp="a[i];" a[i]="a[j];" a[j]="temp;" } printf('printing sorted element list ... '); for(i="0;" i<10; printf('%d ',a[i]); < pre> <h2>Program to print the largest and second largest element of the array.</h2> <pre> #include void main () { int arr[100],i,n,largest,sec_largest; printf('Enter the size of the array?'); scanf('%d',&n); printf('Enter the elements of the array?'); for(i = 0; i<n; i++) { scanf('%d',&arr[i]); } largest="arr[0];" sec_largest="arr[1];" for(i="0;ilargest)" else if (arr[i]>sec_largest && arr[i]!=largest) { sec_largest=arr[i]; } } printf('largest = %d, second largest = %d',largest,sec_largest); } </n;></pre> <hr></10;></pre></5;i++){></pre></5;i++){>
מערך C: הצהרה עם אתחול
אנו יכולים לאתחל את מערך c בזמן ההכרזה. בוא נראה את הקוד.
int marks[5]={20,30,40,50,60};
במקרה כזה, יש אין צורך להגדיר את הגודל . אז זה עשוי להיכתב גם כקוד הבא.
int marks[]={20,30,40,50,60};
בוא נראה את תוכנית C להכרזה ולאתחול המערך ב-C.
#include int main(){ int i=0; int marks[5]={20,30,40,50,60};//declaration and initialization of array //traversal of array for(i=0;i<5;i++){ printf(\'%d \',marks[i]); } return 0; < pre> <p> <strong>Output</strong> </p> <pre> 20 30 40 50 60 </pre> <h2>C Array Example: Sorting an array</h2> <p>In the following program, we are using bubble sort method to sort the array in ascending order.</p> <pre> #include void main () { int i, j,temp; int a[10] = { 10, 9, 7, 101, 23, 44, 12, 78, 34, 23}; for(i = 0; i<10; i++) { for(j="i+1;" j a[i]) temp="a[i];" a[i]="a[j];" a[j]="temp;" } printf(\'printing sorted element list ... \'); for(i="0;" i<10; printf(\'%d \',a[i]); < pre> <h2>Program to print the largest and second largest element of the array.</h2> <pre> #include void main () { int arr[100],i,n,largest,sec_largest; printf('Enter the size of the array?'); scanf('%d',&n); printf('Enter the elements of the array?'); for(i = 0; i<n; i++) { scanf(\'%d\',&arr[i]); } largest="arr[0];" sec_largest="arr[1];" for(i="0;ilargest)" else if (arr[i]>sec_largest && arr[i]!=largest) { sec_largest=arr[i]; } } printf('largest = %d, second largest = %d',largest,sec_largest); } </n;></pre> <hr></10;></pre></5;i++){>
דוגמה למערך C: מיון מערך
בתוכנית הבאה, אנו משתמשים בשיטת מיון בועות כדי למיין את המערך בסדר עולה.
#include void main () { int i, j,temp; int a[10] = { 10, 9, 7, 101, 23, 44, 12, 78, 34, 23}; for(i = 0; i<10; i++) { for(j="i+1;" j a[i]) temp="a[i];" a[i]="a[j];" a[j]="temp;" } printf(\'printing sorted element list ... \'); for(i="0;" i<10; printf(\'%d \',a[i]); < pre> <h2>Program to print the largest and second largest element of the array.</h2> <pre> #include void main () { int arr[100],i,n,largest,sec_largest; printf('Enter the size of the array?'); scanf('%d',&n); printf('Enter the elements of the array?'); for(i = 0; i<n; i++) { scanf(\'%d\',&arr[i]); } largest="arr[0];" sec_largest="arr[1];" for(i="0;ilargest)" else if (arr[i]>sec_largest && arr[i]!=largest) { sec_largest=arr[i]; } } printf('largest = %d, second largest = %d',largest,sec_largest); } </n;></pre> <hr></10;>
10;>5;i++){>5;i++){>