Στατικός πίνακας: δήλωση, συμπλήρωση, χρήση. Μονοδιάστατοι πίνακες Τρόποι απαρίθμησης στοιχείων πίνακα γ

Ένας πίνακας είναι μια δομή δεδομένων που αναπαρίσταται ως ομάδα κελιών του ίδιου τύπου, ενωμένα κάτω από ένα μόνο όνομα. Οι πίνακες χρησιμοποιούνται για την επεξεργασία μεγάλων ποσοτήτων δεδομένων του ίδιου τύπου. Το όνομα του πίνακα είναι αυτό που είναι οι δείκτες, θα σας πω λίγο αργότερα. Ένα μεμονωμένο κελί δεδομένων ενός πίνακα ονομάζεται στοιχείο πίνακα. Τα στοιχεία ενός πίνακα μπορεί να είναι δεδομένα οποιουδήποτε τύπου. Οι πίνακες μπορούν να έχουν μία ή περισσότερες από μία διαστάσεις. Ανάλογα με τον αριθμό των διαστάσεων, οι πίνακες χωρίζονται σε μονοδιάστατους πίνακες, σε δισδιάστατους πίνακες, σε τρισδιάστατους πίνακες και ούτω καθεξής μέχρι έναν n-διάστατο πίνακα. Οι μονοδιάστατοι και οι δισδιάστατοι πίνακες χρησιμοποιούνται συχνότερα στον προγραμματισμό, επομένως θα εξετάσουμε μόνο αυτούς τους πίνακες.

Μονοδιάστατοι πίνακες σε C++

Ο μονοδιάστατος πίνακας είναι ένας πίνακας με μία παράμετρο που χαρακτηρίζει τον αριθμό των στοιχείων του μονοδιάστατου πίνακα. Στην πραγματικότητα, ένας μονοδιάστατος πίνακας είναι ένας πίνακας που μπορεί να έχει μόνο μία γραμμή και n αριθμό στηλών. Οι στήλες σε έναν μονοδιάστατο πίνακα είναι τα στοιχεία του πίνακα. Το σχήμα 1 δείχνει τη δομή ενός ακέραιου μονοδιάστατου πίνακα ένα. Το μέγεθος αυτού του πίνακα είναι 16 κελιά.

Εικόνα 1 - Πίνακες σε C++

Σημειώστε ότι ο μέγιστος δείκτης ενός μονοδιάστατου πίνακα έναείναι 15, αλλά το μέγεθος του πίνακα είναι 16 κελιά, επειδή η αρίθμηση των κελιών του πίνακα ξεκινά πάντα από το 0. Ο δείκτης κελιών είναι ένας μη αρνητικός ακέραιος με τον οποίο μπορείτε να αποκτήσετε πρόσβαση σε κάθε κελί του πίνακα και να εκτελέσετε οποιεσδήποτε ενέργειες σε αυτό ( κύτταρο).

//σύνταξη για τη δήλωση ενός μονοδιάστατου πίνακα στη C++: /*τύπος δεδομένων*/ /*όνομα ενός μονοδιάστατου πίνακα*/; //ένα παράδειγμα δήλωσης ενός μονοδιάστατου πίνακα που φαίνεται στο Σχήμα 1: int a;

όπου το int είναι ακέραιος αριθμός.

A είναι το όνομα ενός μονοδιάστατου πίνακα.
Το 16 είναι το μέγεθος ενός μονοδιάστατου πίνακα, 16 κελιών.

Πάντα αμέσως μετά το όνομα του πίνακα υπάρχουν αγκύλες στις οποίες καθορίζεται το μέγεθος του μονοδιάστατου πίνακα· αυτό είναι που διακρίνει τον πίνακα από όλες τις άλλες μεταβλητές.

//άλλος τρόπος δήλωσης μονοδιάστατων πινάκων int mas, a;

Δηλώνονται δύο μονοδιάστατοι πίνακες mas και a με μεγέθη 10 και 16, αντίστοιχα. Επιπλέον, σε αυτήν τη μέθοδο δήλωσης, όλοι οι πίνακες θα έχουν τον ίδιο τύπο δεδομένων, στην περίπτωσή μας - int.

// οι πίνακες μπορούν να αρχικοποιηθούν όταν δηλωθούν: int a = ( 5, -12, -12, 9, 10, 0, -9, -12, -1, 23, 65, 64, 11, 43, 39, -15 ) // αρχικοποίηση ενός μονοδιάστατου πίνακα

Η αρχικοποίηση μιας μονοδιάστατης διάταξης πραγματοποιείται σε σγουρά σιδεράκια μετά το σημάδι ισοδυναμεί, κάθε στοιχείο πίνακα χωρίζεται από το προηγούμενο με κόμμα.

Int a=(5,-12,-12,9,10,0,-9,-12,-1,23,65,64,11,43,39,-15); // αρχικοποίηση του πίνακα χωρίς να προσδιορίζεται το μέγεθός του.

Σε αυτήν την περίπτωση, ο ίδιος ο μεταγλωττιστής θα καθορίσει το μέγεθος του μονοδιάστατου πίνακα. Το μέγεθος ενός πίνακα μπορεί να παραλειφθεί μόνο κατά την αρχικοποίησή του· όταν δηλώνεται κανονικά ένας πίνακας, πρέπει να προσδιορίζεται το μέγεθος του πίνακα. Ας αναπτύξουμε ένα απλό πρόγραμμα για την επεξεργασία ενός μονοδιάστατου πίνακα.

// array.cpp: Καθορίζει το σημείο εισόδου για την εφαρμογή της κονσόλας. #include "stdafx.h" #include << "obrabotka massiva" << endl; int array1 = { 5, -12, -12, 9, 10, 0, -9, -12, -1, 23, 65, 64, 11, 43, 39, -15 }; // объявление и инициализация одномерного массива cout << "indeks" << "\t\t" << "element massiva" << endl; // печать заголовков for (int counter = 0; counter < 16; counter++) //начало цикла { //вывод на экран индекса ячейки массива, а затем содержимого этой ячейки, в нашем случае - это целое число cout << "array1[" << counter << "]" << "\t\t" << array1 << endl; } system("pause"); return 0; }

// code Code::Blocks

// Κώδικας Dev-C++

// array.cpp: Καθορίζει το σημείο εισόδου για την εφαρμογή της κονσόλας. #περιλαμβάνω χρησιμοποιώντας namespace std? int main(int argc, char* argv) ( cout<< "obrabotka massiva" << endl; int array1 = { 5, -12, -12, 9, 10, 0, -9, -12, -1, 23, 65, 64, 11, 43, 39, -15 }; // объявление и инициализация одномерного массива cout << "indeks" << "\t\t" << "element massiva" << endl; // печать заголовков for (int counter = 0; counter < 16; counter++) //начало цикла { //вывод на экран индекса ячейки массива, а затем содержимого этой ячейки, в нашем случае - это целое число cout << "array1[" << counter << "]" << "\t\t" << array1 << endl; } return 0; }

ΣΕ γραμμές 10-11Έχει δηλωθεί και αρχικοποιηθεί ένας ακέραιος μονοδιάστατος πίνακας με το όνομα array1, το μέγεθος του οποίου είναι 16 κελιά, δηλαδή ένας τέτοιος πίνακας μπορεί να αποθηκεύσει 16 αριθμούς. Οποιαδήποτε επεξεργασία πίνακα είναι δυνατή μόνο σε συνδυασμό με βρόχους. Ποιος βρόχος θα επιλέξετε για την επεξεργασία του πίνακα εξαρτάται από εσάς να αποφασίσετε. Αλλά είναι καταλληλότερο για αυτήν την εργασία. Θα χρησιμοποιήσουμε τον μετρητή μεταβλητής μετρητή για πρόσβαση στα στοιχεία του μονοδιάστατου πίνακα1. Η συνθήκη για τη συνέχιση του βρόχου for περιέχει ένα αυστηρό πρόσημο ανισότητας, αφού δεν υπάρχει δέκατος έκτος δείκτης στον μονοδιάστατο πίνακα1. Και δεδομένου ότι η αρίθμηση των κελιών ξεκινά από το μηδέν, υπάρχουν 16 στοιχεία στον πίνακα. Στο σώμα του βρόχου for, ο τελεστής cout εκτυπώνει τα στοιχεία ενός μονοδιάστατου πίνακα (βλ. Εικόνα 2).

Το Obrabotka massiva ευρετηριάζει το στοιχείο massiva array1 5 array1 -12 array1 -12 array1 9 array1 10 array1 0 array1 -9 array1 -12 array1 -1 array1 23 array1 65 array1 64 array1 11 array1 49 array1 (Συνέχεια) 1 43 array1 (Συνέχεια) πλήκτρο. . .

Εικόνα 2 - Πίνακες σε C++

Ας αναπτύξουμε ένα άλλο πρόγραμμα για την επεξεργασία ενός μονοδιάστατου πίνακα σε C++. Το πρόγραμμα πρέπει να διαβάζει διαδοχικά δέκα αριθμούς που έχουν εισαχθεί από το πληκτρολόγιο. Όλοι οι αριθμοί που έχουν εισαχθεί συνοψίζονται και το αποτέλεσμα εμφανίζεται στην οθόνη.

// array_sum.cpp: Καθορίζει το σημείο εισόδου για την εφαρμογή της κονσόλας. #include "stdafx.h" #include << "Enter elementi massiva: " << endl; int sum = 0; for (int counter = 0; counter < 10; counter++) // цикл для считывания чисел cin >> << "array1 = {"; for (int counter = 0; counter < 10; counter++) // цикл для вывода элементов массива cout << array1 << " "; // выводим элементы массива на стандартное устройство вывода for (int counter = 0; counter < 10; counter++) // цикл для суммирования чисел массива sum += array1; // суммируем элементы массива cout << "}\nsum = " << sum << endl; system("pause"); return 0; }

// code Code::Blocks

// Κώδικας Dev-C++

// array_sum.cpp: Καθορίζει το σημείο εισόδου για την εφαρμογή της κονσόλας. #περιλαμβάνω χρησιμοποιώντας namespace std? int main(int argc, char* argv) ( int array1; // δήλωση ακέραιου πίνακα cout<< "Enter elementi massiva: " << endl; int sum = 0; for (int counter = 0; counter < 10; counter++) // цикл для считывания чисел cin >>πίνακας1; // ανάγνωση αριθμών που εισάγονται από το πληκτρολόγιο<< "array1 = {"; for (int counter = 0; counter < 10; counter++) // цикл для вывода элементов массива cout << array1 << " "; // выводим элементы массива на стандартное устройство вывода for (int counter = 0; counter < 10; counter++) // цикл для суммирования чисел массива sum += array1; // суммируем элементы массива cout << "}\nsum = " << sum << endl; return 0; }

Πριν από την επεξεργασία ενός πίνακα, πρέπει να δηλωθεί και το μέγεθος ενός μονοδιάστατου πίνακα είναι 10, όπως αυτό ορίζεται από την συνθήκη της εργασίας. Στη μεταβλητή αθροίσματος θα συσσωρεύσουμε το άθροισμα των στοιχείων ενός μονοδιάστατου πίνακα. Ο πρώτος βρόχος for γεμίζει τον δηλωμένο μονοδιάστατο πίνακα με αριθμούς που εισάγονται από το πληκτρολόγιο, γραμμές 12 - 13. Η μεταβλητή μετρητή χρησιμοποιείται για τη διαδοχική πρόσβαση στα στοιχεία του μονοδιάστατου πίνακα1 , ξεκινώντας από τον δείκτη 0 και μέχρι τον 9ο συμπεριλαμβανομένου. Ο δεύτερος βρόχος for εμφανίζει τα στοιχεία του πίνακα, γραμμές 15 - 16. Ο τρίτος βρόχος for διαβάζει διαδοχικά τα στοιχεία ενός μονοδιάστατου πίνακα και τα αθροίζει, το άθροισμα συσσωρεύεται στη μεταβλητή αθροίσματος. γραμμές 17 - 18. Το αποτέλεσμα του προγράμματος φαίνεται στο σχήμα 3.

Εισαγάγετε elementi massiva: 0 1 2 3 4 5 6 7 8 9 array1 = (0 1 2 3 4 5 6 7 8 9 ) sum = 45 Για να συνεχίσετε, πατήστε οποιοδήποτε πλήκτρο. . .

Εικόνα 3 - Πίνακες σε C++

Αρχικά, και οι 10 αριθμοί εισήχθησαν διαδοχικά, μετά από την οποία εμφανίστηκε ένας μονοδιάστατος πίνακας και εκτυπώθηκε το άθροισμα των αριθμών στον πίνακα.

Δισδιάστατοι πίνακες σε C++

Μέχρι αυτό το σημείο, έχουμε εξετάσει μονοδιάστατους πίνακες, στους οποίους δεν μπορεί πάντα να περιοριστεί. Ας υποθέσουμε ότι πρέπει να επεξεργαστείτε ορισμένα δεδομένα από έναν πίνακα. Ένας πίνακας έχει δύο χαρακτηριστικά: τον αριθμό των γραμμών και τον αριθμό των στηλών. Επίσης σε έναν δισδιάστατο πίνακα, εκτός από τον αριθμό των στοιχείων του πίνακα, υπάρχουν χαρακτηριστικά όπως ο αριθμός των σειρών και ο αριθμός των στηλών ενός δισδιάστατου πίνακα. Δηλαδή, οπτικά, ένας δισδιάστατος πίνακας είναι ένας κανονικός πίνακας, με γραμμές και στήλες. Στην πραγματικότητα, ένας δισδιάστατος πίνακας είναι ένας μονοδιάστατος πίνακας μονοδιάστατων πινάκων. Η δομή ενός δισδιάστατου πίνακα, με το όνομα a, μεγέθους m επί n φαίνεται παρακάτω (βλ. Εικόνα 4).

Εικόνα 4 - Πίνακες σε C++

όπου m είναι ο αριθμός των σειρών ενός δισδιάστατου πίνακα.
n είναι ο αριθμός των στηλών ενός δισδιάστατου πίνακα.
m * n — αριθμός στοιχείων πίνακα.

// σύνταξη για τη δήλωση ενός δισδιάστατου πίνακα /*τύπος δεδομένων*/ /*όνομα πίνακα*/;

Κατά τη δήλωση ενός δισδιάστατου πίνακα, καθώς και κατά τη δήλωση ενός μονοδιάστατου πίνακα, πρώτα απ 'όλα, πρέπει να καθορίσετε:

  • Τύπος δεδομένων;
  • όνομα πίνακα.

Μετά από αυτό, οι πρώτες αγκύλες υποδεικνύουν τον αριθμό των σειρών του δισδιάστατου πίνακα και οι δεύτερες αγκύλες υποδεικνύουν τον αριθμό των στηλών του δισδιάστατου πίνακα. Ένας δισδιάστατος πίνακας διακρίνεται οπτικά από έναν μονοδιάστατο πίνακα με ένα δεύτερο ζεύγος αγκύλων. Ας δούμε ένα παράδειγμα δήλωσης ενός δισδιάστατου πίνακα. Ας υποθέσουμε ότι πρέπει να δηλώσουμε έναν δισδιάστατο πίνακα με έναν αριθμό στοιχείων ίσο με 15. Σε αυτήν την περίπτωση, ένας δισδιάστατος πίνακας μπορεί να έχει τρεις σειρές και πέντε στήλες ή πέντε σειρές και τρεις στήλες.

// παράδειγμα δήλωσης ενός δισδιάστατου πίνακα: int a;

  • a είναι το όνομα του ακέραιου πίνακα
  • ο αριθμός στις πρώτες αγκύλες υποδεικνύει τον αριθμό των σειρών του δισδιάστατου πίνακα, σε αυτήν την περίπτωση υπάρχουν 5.
  • ο αριθμός στις δεύτερες αγκύλες υποδεικνύει τον αριθμό των στηλών του δισδιάστατου πίνακα, σε αυτήν την περίπτωση υπάρχουν 3.

// αρχικοποίηση ενός δισδιάστατου πίνακα: int a = ( (4, 7, 8), (9, 66, -1), (5, -5, 0), (3, -3, 30), ( 1, 1, 1) );

Αυτός ο πίνακας έχει 5 σειρές, 3 στήλες. Μετά το σύμβολο εκχώρησης, τοποθετούνται γενικές σγουρές αγκύλες, μέσα στις οποίες τοποθετούνται τόσα ζεύγη σγουρές αγκύλες όσα θα έπρεπε να υπάρχουν γραμμές σε έναν δισδιάστατο πίνακα και αυτές οι αγκύλες χωρίζονται με κόμματα. Σε κάθε ζεύγος σγουρά στηρίγματα, γράψτε τα στοιχεία ενός δισδιάστατου πίνακα που χωρίζονται με κόμματα. Σε όλα τα σγουρά σιδεράκια, ο αριθμός των στοιχείων πρέπει να είναι ίδιος. Δεδομένου ότι υπάρχουν πέντε γραμμές στον πίνακα, υπάρχουν επίσης πέντε εσωτερικά ζεύγη αγκύλων. Τρία στοιχεία είναι γραμμένα στις εσωτερικές αγκύλες, αφού ο αριθμός των στηλών είναι τρεις. Γραφικά, ο πίνακας μας θα μοιάζει με έναν δισδιάστατο πίνακα (βλ. Εικόνα 5).

Εικόνα 5 - Πίνακες σε C++

Σε κάθε κελί ενός δισδιάστατου πίνακα έναεμφανίζεται η τιμή, η διεύθυνση αυτού του κελιού εμφανίζεται στην κάτω δεξιά γωνία. Η διεύθυνση κελιού ενός δισδιάστατου πίνακα είναι το όνομα του πίνακα, ο αριθμός σειράς και ο αριθμός στήλης.

Ας αναπτύξουμε ένα απλό πρόγραμμα για την επεξεργασία ενός δισδιάστατου πίνακα, που ονομάζεται «Λαβύρινθος». Ο λαβύρινθος πρέπει να χτιστεί με βάση μια δισδιάστατη διάταξη. Θα επιλέξουμε το μέγεθος του λαβυρίνθου κατά την κρίση μας.

// array2.cpp: Καθορίζει το σημείο εισόδου για την εφαρμογή της κονσόλας. #include "stdafx.h" #include < 33; i++) //переключение по строкам { for (int j = 0; j < 20; j++)// переключение по столбцам if (mas[i][j] == 1) { // вывести два раза символ (номер которого 176 в таблице аски) в консоль cout << static_cast(176); cout<< static_cast(176); ) αλλιώς κόουτ<< " "; // вывести два пробела cout << endl; } system("pause"); return 0; }

// code Code::Blocks

// Κώδικας Dev-C++

// array2.cpp: Καθορίζει το σημείο εισόδου για την εφαρμογή της κονσόλας. #περιλαμβάνω χρησιμοποιώντας namespace std? int main(int argc, char* argv) ( // 1-υπό όρους "τοίχοι του λαβύρινθου" // 2-"σωστό μονοπάτι, έξοδος από τον λαβύρινθο" // 0-"ψευδής διαδρομή" int mas = (1, 2,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,), // αρχικοποίηση ενός δισδιάστατου πίνακα ( 1,2,1,0 ,0,1,0,1,2,2,2,1,1,1,1,0,0,0,0,1,), (1,2,1,1 ,0,1,0, 1,2,1,2,2,2,2,1,0,1,1,0,1, (1,2,2,2,2,2,2, 1,2,1,1 ,1,1,2,1,0,0,1,0,1, (1,1,1,1,1,1,2,1,2,1,0 ,0,1,2, 1,1,0,1,0,1,), (1,0,0,1,0,0,2,2,2,1,1,0,0,2, 0,0,0,1 ,0,1,), (1,0,1,1,0,1,1,1,1,1,0,0,1,2,1,1,1,1 ,0,1,), (1,0,0,0,0,0,0,0,0,1,1,1,1,2,1,0,0,0,0,1,), (1,1,1, 1,1,1,0,1,1,1,2,2,2,2,1,0,1,1,1,1,), (1,1,0, 0,0,1,0 ,0,1,1,2,1,1,1,1,0,0,0,0,1,), (1,0,0,1,0,0,0 ,0,0,1, 2,2,2,2,1,1,1,1,0,1,), (1,1,1,1,1,1,1,1,1,1, 1,1,1,2 ,1,0,0,0,0,1,), (1,2,2,2,2,2,2,2,2,2,2,2,2,2 ,1,0,1, 1,1,1,), (1,2,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0, 0,0,1,) , (1,2,1,0,0,0,1,2,2,2,1,0,0,0,0,0,1,1,0,1,) , (1,2,1 ,1,1,1,1,2,1,2,1,1,1,0,1,0,0,0,0,1,), (1,2,1 ,2,2,2, 1,2,1,2,2,2,1,1,1,1,1,1,1,1,), (1,2,1,2,1,2, 1,2,1,0 ,1,2,2,2,2,2,2,2,2,1,), (1,2,1,2,1,2,1,2,1,0 ,1,1,1, 1,1,1,1,1,2,1,), (1,2,1,2,1,2,1,2,1,0,0,0,0, 0,0,0,0 ,0,2,1,), (1,2,1,2,1,2,2,2,1,0,1,1,1,1,1,1,0 ,1,2,1, ), (1,2,1,2,1,1,1,1,1,0,0,0,1,0,1,0,0,1,2,1, ), (1,2, 1,2,2,1,0,0,1,1,1,0,0,0,1,0,1,1,2,1,), (1,2, 1,1,2,1 ,1,0,0,0,0,0,1,0,1,0,0,1,2,1,), (1,2,1,1,2,1 ,0,0,1, 1,1,1,1,1,1,1,1,1,2,1,), (1,2,1,1,2,1,1,0,1, 2,2,2,2 ,2,2,2,2,2,2,1,), (1,2,1,1,2,1,0,0,1,2,1,1,1 ,1,1,1, 1,1,1,1,), (1,2,1,1,2,1,0,1,1,2,1,1,1,1,1,1, 1,1,2,2 ,), (1,2,1,1,2,1,0,0,1,2,1,1,2,2,2,2,2,2,2,1 ,), (1,2 ,1,1,2,1,0,1,1,2,1,1,2,1,1,1,1,1,1,1,), (1,2 ,1,1,2, 1,0,0,1,2,1,1,2,1,0,0,0,1,0,1,), (1,2,2,2,2, 1,0,1,1 ,2,2,2,2,0,0,1,0,0,0,1,), (1,1,1,1,1,1,1,1,1 ,1,1,1, 1,1,1,1,1,1,1,1,) ); // δύο βρόχοι - εσωτερικός και εξωτερικός, πρόσβαση σε κάθε στοιχείο του πίνακα για (int i = 0; i< 33; i++) //переключение по строкам { for (int j = 0; j < 20; j++)// переключение по столбцам if (mas[i][j] == 1) { // вывести два раза символ (номер которого 176 в таблице аски) в консоль cout << static_cast(176); cout<< static_cast(176); ) αλλιώς κόουτ<< " "; // вывести два пробела cout << endl; } return 0; }

Η σωστή και η ψευδής διαδρομή θα μπορούσαν να οριστούν με τον ίδιο αριθμό, για παράδειγμα, μηδέν, αλλά για λόγους σαφήνειας, η σωστή διαδρομή ορίζεται με τον αριθμό 2. Ο πίνακας αρχικοποιήθηκε χειροκίνητα, μόνο για να απλοποιηθεί το πρόγραμμα. Εφόσον το πρόγραμμα επεξεργάζεται έναν δισδιάστατο πίνακα, απαιτούνται δύο βρόχοι για εναλλαγή μεταξύ στοιχείων του δισδιάστατου πίνακα. Ο πρώτος βρόχος for αλλάζει μεταξύ σειρών ενός δισδιάστατου πίνακα. Δεδομένου ότι υπάρχουν 33 σειρές σε έναν δισδιάστατο πίνακα, η μεταβλητή μετρητή i αυξάνεται από το 0 στο 33, γραμμή 46. Μέσα στον πρώτο βρόχο υπάρχει ένας βρόχος for που περνάει μέσα από τα στοιχεία της σειράς ενός δισδιάστατου πίνακα. Στο σώμα του δεύτερου βρόχου for, εκτελείται μια λειτουργία μετατροπής μοναδιαίου τύπου δεδομένων μέσα - static_cast<>() , το οποίο εκτυπώνει τον αριθμό χαρακτήρα 176. Η λειτουργία μετατροπής τύπου δεδομένων αντιγράφεται για να αυξηθεί το πλάτος του λαβύρινθου. Το αποτέλεσμα του προγράμματος (βλ. Εικόνα 6).

Εικόνα 6 - Πίνακες σε C++

Πίνακες

Πίνακαςείναι μια συλλογή μεταβλητών του ίδιου τύπου με ένα κοινό όνομα για αναφορά σε αυτές. Στην C#, οι πίνακες μπορούν να είναι είτε μονοδιάστατοι είτε πολυδιάστατοι. Οι πίνακες εξυπηρετούν διάφορους σκοπούς επειδή παρέχουν ένα βολικό μέσο ομαδοποίησης μεταβλητών που σχετίζονται μεταξύ τους.

Μπορείτε να χρησιμοποιήσετε πίνακες στη C# με τον ίδιο τρόπο όπως και σε άλλες γλώσσες προγραμματισμού. Ωστόσο, έχουν μια ιδιαιτερότητα: υλοποιούνται ως αντικείμενα.

Η χρήση ενός πίνακα σε ένα πρόγραμμα απαιτεί μια διαδικασία δύο βημάτων επειδή η C# υλοποιεί πίνακες ως αντικείμενα. Αρχικά, πρέπει να δηλώσετε μια μεταβλητή που μπορεί να έχει πρόσβαση στον πίνακα. Και δεύτερον, πρέπει να δημιουργήσετε μια παρουσία του πίνακα χρησιμοποιώντας τον νέο τελεστή.

Χρήση του συστήματος. χρησιμοποιώντας System.Collections.Generic; χρησιμοποιώντας System.Linq; χρησιμοποιώντας System.Text; namespace ConsoleApplication1 ( class 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 = ( "Επώνυμο", "Όνομα", "Πατρώνυμο" ); // Χρησιμοποιήστε τη νέα λέξη-κλειδί και το επιθυμητό μέγεθος σύμβολο char = νέο char ( "X", "Y", "Z", "M" );

Λάβετε υπόψη ότι όταν χρησιμοποιείτε σύνταξη σγουρά άγκιστρα, δεν χρειάζεται να καθορίσετε το μέγεθος του πίνακα (όπως φαίνεται στη δημιουργία της μεταβλητής myArr), επειδή το μέγεθος υπολογίζεται αυτόματα με βάση τον αριθμό των στοιχείων μέσα στα σγουρά άγκιστρα. Επίσης, χρησιμοποιήστε τη λέξη-κλειδί νέοςπροαιρετικό (όπως όταν δημιουργείτε έναν πίνακα πληροφοριών).

Η λέξη-κλειδί var σάς επιτρέπει να ορίσετε μια μεταβλητή έτσι ώστε ο υποκείμενος τύπος της να συμπεραίνεται από τον μεταγλωττιστή. Μπορείτε επίσης να ορίσετε τοπικούς πίνακες έμμεσα πληκτρολογημένους με παρόμοιο τρόπο. Χρησιμοποιώντας αυτήν την προσέγγιση, μπορείτε να ορίσετε μια νέα μεταβλητή πίνακα χωρίς να καθορίσετε τον τύπο των στοιχείων που περιέχονται στον πίνακα. Ας δούμε ένα παράδειγμα:

Χρήση του συστήματος. χρησιμοποιώντας System.Collections.Generic; χρησιμοποιώντας System.Linq; χρησιμοποιώντας System.Text; namespace ConsoleApplication1 ( class Program ( static void Main(string args) ( var arr1 = new ( 1, 2, 3 ); Console.WriteLine ("Type array arr1 is (0)",arr1.GetType()); var arr2 = νέο ("One", "Two", "Three"); Console.WriteLine("Τύπος πίνακα arr2 - (0)", arr2.GetType()); Console.ReadLine(); ) )

Φυσικά, όπως και κατά τη δημιουργία ενός πίνακα χρησιμοποιώντας ρητή σύνταξη C#, τα στοιχεία που καθορίζονται στη λίστα αρχικοποίησης πίνακα πρέπει να είναι του ίδιου υποκείμενου τύπου (δηλαδή, πρέπει να είναι όλα int, string ή MyCar).

Καθορισμός μιας Πίνακας Αντικειμένων

Στις περισσότερες περιπτώσεις, κατά τον ορισμό ενός πίνακα, ο τύπος του στοιχείου που περιέχεται στον πίνακα προσδιορίζεται ρητά. Αν και αυτό φαίνεται αρκετά απλό με την πρώτη ματιά, υπάρχει ένα σημαντικό χαρακτηριστικό. Στην καρδιά κάθε τύπου στο σύστημα τύπου .NET (συμπεριλαμβανομένων των βασικών τύπων δεδομένων) βρίσκεται τελικά μια βασική κλάση, 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(); ) ) )

Ας πούμε ότι πρέπει να δουλέψουμε με μεγάλο όγκο δεδομένων του ίδιου τύπου. Για παράδειγμα, έχουμε χίλιες μετρήσεις των συντεταγμένων ενός εκκρεμούς με κάποιο χρονικό βήμα. Η δημιουργία 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 είναι μια μετατόπιση byte i*sizeof(type) από την αρχή

Ο δείκτης πίνακα υποδεικνύει πόσα byte πρέπει να μετατοπιστούν από την αρχή του πίνακα για να αποκτήσετε πρόσβαση στο επιθυμητό στοιχείο. Για παράδειγμα, εάν ο πίνακας ΕΝΑέχει τύπο ενθ, τότε το A σημαίνει ότι έχουμε μετακινήσει 10*sizeof(int) byte σε σχέση με την αρχή. Το πρώτο στοιχείο βρίσκεται στην αρχή και έχει μετατόπιση 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] >

Ας δούμε ένα παράδειγμα. Πρώτα δημιουργούμε τον πίνακα και τον αρχικοποιούμε κατά τη δημιουργία. Μετά από αυτό, εκχωρούμε στο μέγιστο στοιχείο που βρέθηκε την τιμή του πρώτου στοιχείου του πίνακα.

Max = a;

Στη συνέχεια περνάμε από τον πίνακα. Εφόσον έχουμε ήδη εξετάσει το πρώτο στοιχείο (έχει δείκτη 1), δεν έχει νόημα να το δούμε ξανά.
Το ίδιο παράδειγμα, μόνο τώρα ο χρήστης εισάγει τιμές

#περιλαμβάνω #περιλαμβάνω void main() ( int a; ανυπόγραφο i; int max; printf("Εισαγάγετε 10 αριθμούς\n"); for (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", max); getch(); )

Εάν κατά την αρχικοποίηση καθορίζονται λιγότερες τιμές από το μέγεθος του πίνακα, τα υπόλοιπα στοιχεία γεμίζονται με μηδενικά.

#περιλαμβάνω #περιλαμβάνω void main() ( int a = (1,2,3); ανυπόγραφο i; for (i = 0; i<10; i++) { printf("%d ", a[i]); } getch(); }

Εάν πρέπει να γεμίσετε ολόκληρο τον πίνακα με μηδενικά, τότε γράψτε

Int a = (0);

Δεν χρειάζεται να προσδιορίσετε ρητά το μέγεθος του πίνακα, για παράδειγμα

Int a = (1, 2, 3);

ο πίνακας θα έχει μέγεθος 3

Μέγεθος πίνακα

Ένας πίνακας στο C πρέπει να έχει σταθερό μέγεθος. Αυτό σημαίνει ότι είναι αδύνατο, για παράδειγμα, να ζητήσετε από τον χρήστη ένα μέγεθος και στη συνέχεια να ορίσετε αυτό το μέγεθος σε έναν πίνακα.

Printf("Εισαγάγετε το μήκος του πίνακα"); scanf("%d", &length); (float x;)

Η δημιουργία δυναμικών πινάκων θα συζητηθεί περαιτέρω κατά την εργασία με δείκτες και μνήμη.
Σε ορισμένες περιπτώσεις, μπορείτε να μάθετε το μέγεθος του πίνακα χρησιμοποιώντας τη συνάρτηση μέγεθος του.

#περιλαμβάνω #περιλαμβάνω void main() ( int A; //sizeof επιστρέφει το μέγεθος ολόκληρου του πίνακα σε byte //Για να προσδιορίσετε τον αριθμό των στοιχείων, //διαιρέστε το μέγεθος του πίνακα με το μέγεθος του στοιχείου του 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, //προσωρινή μεταβλητή για την ανταλλαγή τιμών μισό = ΜΕΓΕΘΟΣ / 2; //Ο ένας μετρητής πηγαίνει από αριστερά προς τα δεξιά, ο άλλος από τα δεξιά προς τα αριστερά για (i = 0, j = ΜΕΓΕΘΟΣ - 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(); }

Εδώ είναι ένα άγνωστο σχέδιο για εσάς

#define SIZE 10u

μακροεντολή. Σε όλο τον κώδικα, ο προεπεξεργαστής θα αντικαταστήσει αυτόματα όλες τις εμφανίσεις SIZE με 10u.
2. Διαγραφή στοιχείου που έχει επιλέξει ο χρήστης.

#περιλαμβάνω #περιλαμβάνω #define SIZE 10u void main() ( int A = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9); ανυπόγραφο i; //counter int 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; 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() ( //Οι συντελεστές σπουδαστών ξεκινούν από δύο διαστάσεις const float student = (12.7, 4.3, 3.2, 2.8, 2.6, 2.4, 2.4, 2.3, 2.3); float A; unsigned unsigned; float tmp; float sum = .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; flag = true; ) ) ) while(flag == true); //Έξοδος του ταξινομημένου πίνακα για (i = 0; i< SIZE; i++) { printf("%.3f ", a[i]); } getch(); }

6. Ανακατέψτε τη συστοιχία. Ας χρησιμοποιήσουμε τον αλγόριθμο για αυτό

Τι είναι οι πίνακες στο 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 αριθμούς float.
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 και στον δεύτερο βρόχο εμφανίζουμε αυτά τα στοιχεία στην οθόνη.

mob_info