c

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

code, coding, computer-1839406.jpg

1. Εισαγωγή

Ο προγραμματισμός C είναι μια ισχυρή και ευέλικτη γλώσσα προγραμματισμού που χρησιμοποιείται ευρέως σε διάφορους τομείς όπως η επιστήμη των υπολογιστών, η μηχανική και η επιστημονική έρευνα. Είναι μια γλώσσα υψηλού επιπέδου που είναι εύκολη στην εκμάθηση και στη χρήση. Με τη C, μπορείτε να δημιουργήσετε ένα ευρύ φάσμα εφαρμογών, όπως λειτουργικά συστήματα, προγράμματα οδήγησης συσκευών, ενσωματωμένα συστήματα και άλλα.

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

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

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

Για να ξεκινήσετε την εκμάθηση C, θα χρειαστείτε ένα περιβάλλον ανάπτυξης, όπως το GCC ή το Visual Studio, και ένα καλό πρόγραμμα επεξεργασίας κειμένου.

Ο προγραμματισμός C μπορεί να είναι προκλητικός, αλλά επίσης ανταμείβει. Με εξάσκηση και επιμονή, θα μπορέσετε να δημιουργήσετε προγράμματα που είναι αποτελεσματικά, ισχυρά και που μπορούν να λύσουν προβλήματα του πραγματικού κόσμου.

Για να κάνετε λήψη της C και ενός μεταγλωττιστή, θα χρειαστεί να ακολουθήσετε αυτές τις οδηγίες:

  • Μεταβείτε στον ιστότοπο ενός δημοφιλούς μεταγλωττιστή C, όπως το GCC (GNU Compiler Collection) ή το Microsoft Visual C++.
  • Κάντε κλικ στον σύνδεσμο λήψης για την κατάλληλη έκδοση του μεταγλωττιστή για το λειτουργικό σας σύστημα.
  • Ακολουθήστε τις οδηγίες για να εγκαταστήσετε τον μεταγλωττιστή στον υπολογιστή σας.
  • Μόλις ολοκληρωθεί η εγκατάσταση, μπορείτε να ανοίξετε τον μεταγλωττιστή αναζητώντας τον στις εφαρμογές σας ή εκτελώντας το εκτελέσιμο αρχείο.

Σημείωση:

Η διαδικασία εγκατάστασης μπορεί να διαφέρει ελαφρώς ανάλογα με τον μεταγλωττιστή και το λειτουργικό σύστημα που χρησιμοποιείτε. Μερικοί δημοφιλείς μεταγλωττιστές για την C είναι οι Turbo C, Borland C και Clang.

  •  Το GCC είναι μια δημοφιλής επιλογή για Windows, Linux και MacOS. 
  • Το Microsoft Visual C++ είναι μια δημοφιλής επιλογή για Windows.

Πριν ξεκινήσετε την κωδικοποίηση σε C, είναι καλή ιδέα να εξοικειωθείτε με τα βασικά του προγραμματισμού και τη γλώσσα C.

Μερικοί καλοί πόροι για την εκμάθηση της C είναι η “The C Programming Language” των Brian Kernighan και Dennis Ritchie και “C Programming Absolute Beginner’s Guide (3rd Edition)” των Greg Perry και Dean Miller.

Hello world !

Αυτό είναι ένα απλό “Hello, World!” πρόγραμμα σε C. Η πρώτη γραμμή περιλαμβάνει την κεφαλίδα “stdio.h” (#include <stdio.h>), η οποία περιέχει τη συνάρτηση που χρησιμοποιούμε για την έξοδο κειμένου στην κονσόλα (printf).

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

Η “επιστροφή 0;” Η δήλωση στο τέλος της συνάρτησης λέει στο λειτουργικό σύστημα ότι το πρόγραμμα ολοκληρώθηκε με επιτυχία.

ΚΩΔΙΚΑΣ

#include stdio.h>

int main() {
    printf("Hello, World!");
    return 0;
}   

2. Τύποι δεδομένων

ΠΕΡΙΕΧΟΜΕΝΑ:

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

  • int (ακέραιος) – ένας ακέραιος αριθμός, θετικός ή αρνητικός, χωρίς δεκαδικό ψηφίο. Παράδειγμα: int x = 5;
  • float (αριθμός κινητής υποδιαστολής) – αριθμός με υποδιαστολή. Παράδειγμα: float y = 3,14;
  • double (αριθμός κινητής υποδιαστολής διπλής ακρίβειας) – ένας αριθμός με υποδιαστολή που έχει μεγαλύτερη ακρίβεια από ένα float. Παράδειγμα: double z = 3,1415926535;
  • char (χαρακτήρας) – ένας μόνο χαρακτήρας, που περικλείεται σε μονά εισαγωγικά. Παράδειγμα: char my_char = ‘a’;
  • void (void) – ένας ειδικός τύπος που δεν έχει τιμή. Παράδειγμα: void my_function();
  • Bool (Boolean) – μια τιμή που είναι είτε true είτε false. Παράδειγμα: Bool is_true = true;

Εκτός από αυτούς τους ενσωματωμένους τύπους δεδομένων, το C επιτρέπει επίσης τύπους δεδομένων που καθορίζονται από το χρήστη μέσω της χρήσης δομών και απαριθμημένων τύπων.

Εξήγηση κώδικα παράδειγμα 1:

Το παράδειγμα 1 δηλώνει μεταβλητές διαφόρων τύπων δεδομένων και τους εκχωρεί τιμές. Στη συνέχεια χρησιμοποιεί τη συνάρτηση printf για να εκτυπώσει τις τιμές των μεταβλητών. Η έξοδος αυτού του προγράμματος θα είναι (ΕΙΚΟΝΑ 1)

Όπως μπορείτε να δείτε, οι μεταβλητές διαφορετικών τύπων δεδομένων χρησιμοποιούνται και εκτυπώνονται στην κατάλληλη μορφή.

#define

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

Για παράδειγμα, ο ακόλουθος κώδικας ορίζει μια συμβολική σταθερά PI με την τιμή 3.14,

Αυτή η σταθερά μπορεί στη συνέχεια να χρησιμοποιηθεί σε υπολογισμούς ή δηλώσεις εξόδου, όπως:  (ΠΑΡΑΔΕΙΓΜΑ 2)

ΣΗΜΕΙΩΣΗ:

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

Μια άλλη κοινή χρήση του #define είναι για τη δημιουργία σύντομων,  ονομάτων για ακέραιες τιμές που αντιπροσωπεύουν συγκεκριμένες συνθήκες ή καταστάσεις. Για παράδειγμα: (ΠΑΡΑΔΕΙΓΜΑ 3)

Εξήγηση κώδικα παράδειγμα 3:

Σε αυτήν την περίπτωση, τα TRUE και FALSE μπορούν να χρησιμοποιηθούν αντί για 1 και 0 σε προτάσεις υπό όρους, καθιστώντας τον κώδικα πιο κατανοητό.

Είναι επίσης δυνατό να ορίσετε μια συνάρτηση μακροεντολής χρησιμοποιώντας το #define. Αυτό θα σας επιτρέψει να χρησιμοποιήσετε τη συνάρτηση μακροεντολής SQUARE() στον κώδικά σας, ως εξής: (ΠΑΡΑΔΕΙΓΜΑ 4)

Κωδικασ

ΠΑΡΑΔΕΙΓΜΑ 1

#include *stdio.h>

int main() {
  int x = 5;
  float y = 3.14;
  double z = 3.1415926535;
  char my_char = 'a';
  _Bool is_true = true;

  printf("x = %d\n", x);
  printf("y = %f\n", y);
  printf("z = %lf\n", z);
  printf("my_char = %c\n", my_char);
  printf("is_true = %d\n", is_true);

  return 0;
}  

ΕΙΚΟΝΑ 1

x = 5
y = 3.140000
z = 3.141593
my_char = a
is_true = 1  

ΠΑΡΑΔΕΙΓΜΑ 2

#define PI 3.14
double radius = 5.0;
double area = PI * radius * radius;
printf("The area of a circle with radius %f is %f\n", radius, area); 

ΠΑΡΑΔΕΙΓΜΑ 3

#define TRUE 1
#define FALSE 0 

ΠΑΡΑΔΕΙΓΜΑ 4

#define SQUARE(x) ((x)*(x))
int x = 5;
printf("Square of %d is %d", x, SQUARE(x)); 

ΑΡΙΘΜΗΤΙΚΟΙ ΤΕΛΕΣΤΕΣ

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

Μερικές κοινές αριθμητικές συναρτήσεις είναι:

  • Προσθήκη (+)
  • Αφαίρεση (-)
  • Πολλαπλασιασμός (*)
  • Τμήμα (/)
  • Modulus (%), που επιστρέφει το υπόλοιπο μιας πράξης διαίρεσης

ΠΑΡΑΔΕΙΓΜΑ 5 και τα αποτελέσματα από αυτό το πρόγραμμα φαίνονται στη εικόνα 2

Σημειώστε ότι όταν διαιρείτε δύο ακέραιους αριθμούς, το αποτέλεσμα θα περικοπεί σε έναν ακέραιο. Για να λάβετε ένα αποτέλεσμα κινητής υποδιαστολής, τουλάχιστον ένας από τους τελεστές πρέπει να είναι αριθμός κινητής υποδιαστολής.

Ο προγραμματισμός C παρέχει επίσης ένα σύνολο ενσωματωμένων μαθηματικών συναρτήσεων όπως sqrt(), pow(), floor(), ceil(), κ.λπ. για την εκτέλεση πιο προηγμένων μαθηματικών υπολογισμών.

Στον προγραμματισμό C, οι τελεστές “–” και “++” είναι γνωστοί ως τελεστές μείωσης και αύξησης, αντίστοιχα. Αυτοί οι τελεστές χρησιμοποιούνται για τη μείωση ή την αύξηση της τιμής μιας μεταβλητής κατά 1.

  • Ο τελεστής “–” (τελεστής μείωσης) χρησιμοποιείται για τη μείωση της τιμής μιας μεταβλητής κατά 1. Για παράδειγμα: (ΠΑΡΑΔΕΙΓΜΑ 6)
  • Ο τελεστής “++” (τελεστής αύξησης) χρησιμοποιείται για την αύξηση της τιμής μιας μεταβλητής κατά 1. Για παράδειγμα: (ΠΑΡΑΔΕΙΓΜΑ 7)

Τόσο το “–” και το “++” μπορούν να χρησιμοποιηθούν ως πρόθεμα ή υστέρημα.

Ο συμβολισμός του προθέματος χρησιμοποιείται όταν ο τελεστής είναι γραμμένος πριν από τη μεταβλητή, π.χ.

  • –x; 

Αλλιώς :

  • x++;

Η διαφορά μεταξύ συμβολισμού προθέματος και μετάθεμα είναι η σειρά αξιολόγησης. Όταν είναι μπροστά από την μεταβλητή η αύξηση γίνεται πριν χρησιμοποιηθεί η τιμή. Ενώ όταν είναι μετά από την μεταβλητή η αύξηση γίνεται αφού χρησιμοποιηθεί η τιμή.

  • Για παράδειγμα, ο παρακάτω κώδικας θα εκτυπώσει “5” (ΠΑΡΑΔΕΙΓΜΑ 8)
  • Ενώ  ο κώδικας (ΠΑΡΑΔΕΙΓΜΑ 9) θα εκτυπώσει 6

Επιπλέον, αυτοί οι τελεστές μπορούν επίσης να χρησιμοποιηθούν στις εκφράσεις. Για παράδειγμα: ( ΠΑΡΑΔΕΙΓΜΑ 10)

ΠΑΡΑΔΕΙΓΜΑ 5

#include *stdio.h>

int main() {
    int a = 5;
    int b = 2;
    int sum = a + b;
    int difference = a - b;
    int product = a * b;
    int quotient = a / b;
    int remainder = a % b;
    printf("Sum: %d\n", sum);
    printf("Difference: %d\n", difference);
    printf("Product: %d\n", product);
    printf("Quotient: %d\n", quotient);
    printf("Remainder: %d\n", remainder);
    return 0;
} 

ΕΙΚΟΝΑ 2

Sum: 7
Difference: 3
Product: 10
Quotient: 2
Remainder: 1 

ΠΑΡΑΔΕΙΓΜΑ 6

int x = 5;
x--; // x is now 4

ΠΑΡΑΔΕΙΓΜΑ 7

int y = 7;
y++; // y is now 8

ΠΑΡΑΔΕΙΓΜΑ 8

int a = 5;
printf("%d", a++);

ΠΑΡΑΔΕΙΓΜΑ 9

int a = 5;
printf("%d", ++a);

ΠΑΡΑΔΕΙΓΜΑ 10

int x = 5;
int y = x++ + x++;
printf("%d", y); // prints 10

x = 5;
y = ++x + ++x;
printf("%d", y); // prints 12

λογικοι ΤΕΛΕΣΤΕΣ

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

Υπάρχουν τρεις λογικοί τελεστές στη C:

  1. && (λογικό ΚΑΙ) – Αυτός ο τελεστής επιστρέφει true εάν και οι δύο τελεστές είναι true. Για παράδειγμα: (a > b) && (c > d) επιστρέφει true μόνο εάν και τα δύο a > b και c > d είναι αληθή.
  2. || (λογικό Ή) – Αυτός ο τελεστής επιστρέφει true εάν κάποιος από τους τελεστές είναι αληθής. Για παράδειγμα: (α > β) || (c > d) επιστρέφει true εάν είτε a > b είτε c > d είναι αληθές.
  3. ! (λογικό ΟΧΙ) – Αυτός ο τελεστής αναιρεί τη δεδομένη συνθήκη. Για παράδειγμα: !(a > b) επιστρέφει true αν a <= b.

Ακολουθεί ένα παράδειγμα χρήσης λογικών τελεστών στο C: (ΠΑΡΑΔΕΙΓΜΑ 11)

ΠΑΡΑΔΕΙΓΜΑ 11

#include *stdio.h>

int main() {
    int a = 5;
    int b = 2;
    int c = 3;
    int d = 4;
    if((a > b) && (c > d)) {
        printf("Both conditions are true\n");
    }
    else {
        printf("Both conditions are not true\n");
    }
    if((a > b) || (c > d)) {
        printf("At least one condition is true\n");
    }
    else {
        printf("Both conditions are false\n");
    }
    if(!(a > b)) {
        printf("a is not greater than b\n");
    }
    else {
        printf("a is greater than b\n");
    }
    return 0;
}
 

3. Εντολές εισόδου και εξόδου

printf

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

Τα σύμβολα κράτησης θέσης στη συμβολοσειρά μορφής συμβολίζονται με ένα σύμβολο %, ακολουθούμενο από έναν προσδιοριστή μετατροπής που υποδεικνύει τον τύπο της μεταβλητής. Για παράδειγμα,

  • το %d χρησιμοποιείται για ακέραιους αριθμούς,
  • το %f χρησιμοποιείται για αριθμούς κινητής υποδιαστολής και
  • το %c χρησιμοποιείται για χαρακτήρες.

Ακολουθεί ένα παράδειγμα χρήσης της printf() για την εκτύπωση των τιμών ενός συνόλου μεταβλητών: (ΠΑΡΑΔΕΙΓΜΑ 1)

Μπορείτε επίσης να χρησιμοποιήσετε τη συνάρτηση printf() για να ελέγξετε τη μορφή της εξόδου, όπως τον αριθμό των δεκαδικών ψηφίων, το πλάτος του πεδίου και τη στοίχιση του πεδίου. (ΠΑΡΑΔΕΙΓΜΑ 2)

ΑΠΟΤΕΛΕΣΜΑΤΑ - ΠΑΡΑΔΕΙΓΜΑ 2

The value of a is:   5
The value of b is: 2.50
 

Εκτός από την printf(), η C παρέχει επίσης τη συνάρτηση sprintf(), η οποία λειτουργεί παρόμοια με την printf() αλλά γράφει την έξοδο σε μια συμβολοσειρά αντί για την κονσόλα.

ΠΑΡΑΔΕΙΓΜΑ 1

#include *stdio.h>

int main() {
    int a = 5;
    float b = 2.5;
    char c = 'A';
    printf("The value of a is: %d\n", a);
    printf("The value of b is: %f\n", b);
    printf("The value of c is: %c\n", c);
    return 0;
} 

ΑΠΟΤΕΛΕΣΜΑΤΑ - ΠΑΡΑΔΕΙΓΜΑ 1

The value of a is: 5
The value of b is: 2.500000
The value of c is: A

ΠΑΡΑΔΕΙΓΜΑ 2

#include *stdio.h>

int main() {
    int a = 5;
    float b = 2.5;
    printf("The value of a is: %3d\n", a);
    printf("The value of b is: %.2f\n", b);
    return 0;
}  

SCANF

Η συνάρτηση scanf() στη C χρησιμοποιείται για την ανάγνωση εισόδου από τον χρήστη και την αποθήκευση σε μεταβλητές. Η συνάρτηση λαμβάνει ως πρώτο όρισμα μια συμβολοσειρά μορφής, η οποία καθορίζει τον τύπο εισόδου που αναμένεται (π.χ. έναν ακέραιο, μια συμβολοσειρά κ.λπ.). Τα υπόλοιπα ορίσματα είναι δείκτες σε μεταβλητές όπου πρέπει να αποθηκευτεί η είσοδος.

Ακολουθεί ένα παράδειγμα χρήσης scanf() για την ανάγνωση ενός ακέραιου αριθμού και μιας συμβολοσειράς από τον χρήστη:  (ΠΑΡΑΔΕΙΓΜΑ 1)

Εξήγηση κώδικα παράδειγμα 1:

Σε αυτό το παράδειγμα, η πρώτη κλήση στη scanf() διαβάζει μια συμβολοσειρά από τον χρήστη και την αποθηκεύει στη μεταβλητή name. Η δεύτερη κλήση διαβάζει έναν ακέραιο και τον αποθηκεύει στη μεταβλητή age. Σημειώστε ότι ο τελεστής & χρησιμοποιείται για τη μετάδοση ενός δείκτη στη μεταβλητή age, αφού η scanf() αναμένει έναν δείκτη ως όρισμα.

ΠΑΡΑΔΕΙΓΜΑ 1

#include *stdio.h>

int main() {
    int age;
    char name[100];

    printf("What is your name? ");
    scanf("%s", name);

    printf("What is your age? ");
    scanf("%d", &age);

    printf("Hello, %s! You are %d years old.\n", name, age);
    return 0;
}

ΑΠΟΤΕΛΕΣΜΑΤΑ - ΠΑΡΑΔΕΙΓΜΑ 1

The value of a is: 5
The value of b is: 2.500000
The value of c is: A

4. ΕΝΤΟΛΕΣ ΕΛΕΓΧΟΥ

ΠΕΡΙΕΧΟΜΕΝΑ:

if

Στη C, η πρόταση “if” χρησιμοποιείται για τη λήψη αποφάσεων σε ένα πρόγραμμα. Η βασική σύνταξη μιας δήλωσης “if” είναι:

if (συνθήκη) {

// κώδικας για εκτέλεση εάν η συνθήκη είναι αληθής

}

Η “συνθήκη” είναι οποιαδήποτε έκφραση που αξιολογείται είτε ως αληθής είτε ως ψευδής. Εάν η συνθήκη είναι αληθής, θα εκτελεστεί ο κώδικας μέσα στις αγκύλες. Εάν η συνθήκη είναι ψευδής, ο κώδικας θα παραλειφθεί.

Ακολουθεί ένα παράδειγμα δήλωσης “αν”: (ΠΑΡΑΔΕΙΓΜΑ 1)

Εξήγηση κώδικα παράδειγμα 1:

Το παραπάνω παράδειγμα ελέγχει εάν η τιμή του x είναι μεγαλύτερη από 3. Εάν είναι, το πρόγραμμα θα εκτυπώσει “το x είναι μεγαλύτερο από 3”. Εάν όχι, το πρόγραμμα δεν θα εκτυπώσει τίποτα.

If-else

Μπορείτε επίσης να συμπεριλάβετε μια ρήτρα “else” μετά τη δήλωση “if” για να καθορίσετε ποιος κώδικας πρέπει να εκτελεστεί εάν η συνθήκη είναι ψευδής: (ΠΑΡΑΔΕΙΓΜΑ 2)

Εξήγηση κώδικα παράδειγμα 2:

Σε αυτό το παράδειγμα, εάν η τιμή του x είναι μεγαλύτερη από 3, το πρόγραμμα θα εκτυπώσει “το x είναι μεγαλύτερο από 3”. Εάν όχι, το πρόγραμμα θα εκτυπώσει “το x δεν είναι μεγαλύτερο από 3”.

Μπορείτε επίσης να συμπεριλάβετε πολλές συνθήκες χρησιμοποιώντας τον όρο “else if“. (ΠΑΡΑΔΕΙΓΜΑ 3)

Εξήγηση κώδικα παράδειγμα 3:

Σε αυτό το παράδειγμα, εάν το x είναι μεγαλύτερο από 3, το πρόγραμμα θα εκτυπώσει “x είναι μεγαλύτερο από 3”, εάν το x είναι μικρότερο από 3, το πρόγραμμα θα εκτυπώσει “x είναι μικρότερο από 3” διαφορετικά εάν το x είναι ίσο με 3, το πρόγραμμα θα εκτυπώσει “Το x ισούται με 3”.

ΠΑΡΑΔΕΙΓΜΑ 1

#include *stdio.h>

int main() {
    int x = 5;
    if (x > 3) {
        printf("x is greater than 3\n");
    }
    return 0;
}

ΠΑΡΑΔΕΙΓΜΑ 2

#include *stdio.h>

int main() {
    int x = 5;
    if (x > 3) {
        printf("x is greater than 3\n");
    } else {
        printf("x is not greater than 3\n");
    }
    return 0;
} 

ΠΑΡΑΔΕΙΓΜΑ 3

#include *stdio.h>

int main() {
    int x = 5;
    if (x > 3) {
        printf("x is greater than 3\n");
    } else if (x < 3){
        printf("x is less than 3\n");
    }else {
        printf("x is equal to 3\n");
    }
    return 0;
} 

sWITCH

Η δήλωση switch στη C είναι μια δήλωση ροής ελέγχου που σας επιτρέπει να εκτελείτε διαφορετικές ενέργειες με βάση διαφορετικές συνθήκες. Η δήλωση switch χρησιμοποιείται για τον έλεγχο πολλαπλών συνθηκών και την εκτέλεση διαφορετικών μπλοκ κώδικα με βάση το αποτέλεσμα. Είναι ένα εναλλακτικό για μια σειρά από δηλώσεις if-else.

Η βασική σύνταξη της εντολής switch είναι η εξής:  (ΠΑΡΑΔΕΙΓΜΑ 1)

Εξήγηση κώδικα παράδειγμα 1:

    • expression είναι η μεταβλητή ή η τιμή που θέλετε να ελέγξετε.
    • Το case χρησιμοποιείται για τον καθορισμό των διαφορετικών συνθηκών που θέλετε να ελέγξετε.
    • constant1,constant2 κ.λπ. είναι οι τιμές με τις οποίες θέλετε να συγκρίνετε την έκφραση.
    • Το break χρησιμοποιείται για έξοδο από τη δήλωση switch μόλις βρεθεί μια αντίστοιχη περίπτωση.

Ακολουθεί ένα παράδειγμα μιας δήλωσης switch που ελέγχει την τιμή μιας μεταβλητής x και εκτελεί διαφορετικό κώδικα με βάση το αποτέλεσμα: (ΠΑΡΑΔΕΙΓΜΑ 2)

Εξήγηση κώδικα παράδειγμα 2:

    • Σε αυτό το παράδειγμα, εάν η τιμή του x είναι 0, θα εκτελεστεί η πρώτη περίπτωση και η έξοδος θα είναι “x είναι 0”.
    • Εάν η τιμή του x είναι 1, θα εκτελεστεί η δεύτερη περίπτωση και η έξοδος θα είναι “x είναι 1”.
    • Εάν η τιμή του x είναι 2, θα εκτελεστεί η τρίτη περίπτωση και η έξοδος θα είναι “x είναι 2”.
    • Εάν καμία από τις περιπτώσεις δεν ταιριάζει, η προεπιλεγμένη περίπτωση θα εκτελεστεί και η έξοδος θα είναι “το x δεν είναι 0, 1 ή 2”.

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

ΠΑΡΑΔΕΙΓΜΑ 1

switch (expression) {
    case constant1:
        // Code to be executed if expression == constant1
        break;
    case constant2:
        // Code to be executed if expression == constant2
        break;
    ...
    default:
        // Code to be executed if no case matches
        break;
}

ΠΑΡΑΔΕΙΓΜΑ 2

#include *stdio.h>

int main() {
    int x = 2;
    switch (x) {
        case 0:
            printf("x is 0\n");
            break;
        case 1:
            printf("x is 1\n");
            break;
        case 2:
            printf("x is 2\n");
            break;
        default:
            printf("x is not 0, 1, or 2\n");
    }
    return 0;
} 

while

Ο βρόχος “while” στη C είναι μια δήλωση ροής ελέγχου που εκτελεί επανειλημμένα ένα μπλοκ κώδικα ενώ μια συγκεκριμένη συνθήκη είναι αληθής. Η βασική σύνταξη του βρόχου while είναι η εξής:

while (condition) {
            // code to be executed
}

Η condition αξιολογείται πριν από κάθε επανάληψη του βρόχου. Εάν είναι αληθές, εκτελείται ο κώδικας μέσα στον βρόχο. Αν είναι false, ο βρόχος βγαίνει και το πρόγραμμα συνεχίζει με την επόμενη εντολή μετά τον βρόχο.

Ακολουθεί ένα παράδειγμα απλού προγράμματος που χρησιμοποιεί βρόχο while για να μετρήσει από το 1 έως το 10: (ΠΑΡΑΔΕΙΓΜΑ 1)

Εξήγηση κώδικα παράδειγμα 1:

Σε αυτό το παράδειγμα, η μεταβλητή i αρχικοποιείται σε 1 πριν από τον βρόχο while. Η συνθήκη i <= 10 ελέγχεται πριν από κάθε επανάληψη του βρόχου. Εφόσον το i είναι μικρότερο ή ίσο με 10, εκτελείται ο κώδικας μέσα στον βρόχο. Ο κώδικας μέσα στον βρόχο εκτυπώνει την τρέχουσα τιμή του i και στη συνέχεια αυξάνει το i κατά 1. Αυτό συνεχίζεται μέχρι το i να γίνει μεγαλύτερο από 10, οπότε ο βρόχος εξέρχεται και το πρόγραμμα τελειώνει.

Σημειώστε ότι εάν ξεχάσετε να αυξήσετε τη μεταβλητή που χρησιμοποιείτε ως συνθήκη του βρόχου, τότε θα προκαλέσει έναν ατέρμονα βρόχο.

Ενα άλλο παράδειγμα: (ΠΑΡΑΔΕΙΓΜΑ 2)

Εξήγηση κώδικα παράδειγμα 2:

Αυτό το πρόγραμμα ζητά από τον χρήστη να εισαγάγει έναν θετικό ακέραιο και, στη συνέχεια, χρησιμοποιεί έναν βρόχο while για να μετρήσει αντίστροφα από αυτόν τον αριθμό στο 1, εκτυπώνοντας κάθε αριθμό σε μια νέα γραμμή.

Μπορείτε επίσης να χρησιμοποιήσετε τον βρόχο do-while στο C, ο οποίος είναι παρόμοιος με τον βρόχο while, αλλά ο κώδικας μέσα στον βρόχο εκτελείται τουλάχιστον μία φορά πριν από τον έλεγχο της συνθήκης. Η βασική σύνταξη για τον βρόχο do-while είναι η εξής: (ΕΙΚΟΝΑ 1)

ΠΑΡΑΔΕΙΓΜΑ 1

#include *stdio.h>

int main() {
    int i = 1;
    while (i <= 10) {
        printf("%d\n", i);
        i++;
    }
    return 0;
}

ΠΑΡΑΔΕΙΓΜΑ 2

#include *stdio.h>

int main() {
    int number;
    printf("Enter a positive integer: ");
    scanf("%d", &number);
    while (number > 0) {
        printf("%d\n", number);
        number--;
    }
    return 0;
}

ΕΙΚΟΝΑ 1

do {
    // code to be executed
} while (condition);

FOR

Ο βρόχος for στη C είναι μια δήλωση ροής ελέγχου που σας επιτρέπει να επαναλάβετε ένα μπλοκ κώδικα συγκεκριμένες φορές. Ο βρόχος for έχει την ακόλουθη σύνταξη:

for (initialization; condition; increment) {
         // code to be executed
}

  • Το τμήμα initialization εκτελείται μία φορά στην αρχή του βρόχου και συνήθως χρησιμοποιείται για την προετοιμασία μιας μεταβλητής μετρητή.
  • Το τμήμα condition αξιολογείται πριν από κάθε επανάληψη του βρόχου και αν είναι αληθές, ο βρόχος συνεχίζει. Εάν είναι false, ο βρόχος σταματάει.
  • Το τμήμα increment εκτελείται μετά από κάθε επανάληψη του βρόχου και συνήθως χρησιμοποιείται για την ενημέρωση της μεταβλητής μετρητή.

Ακολουθεί ένα παράδειγμα ενός βρόχου for που εκτυπώνει τους αριθμούς από το 1 έως το 10: (ΠΑΡΑΔΕΙΓΜΑ 1)

Είναι επίσης δυνατή η χρήση του βρόχου για ορισμένες συγκεκριμένες εργασίες, όπως η επανάληψη σε πίνακες ή άλλες δομές δεδομένων. Ακολουθεί ένα παράδειγμα ενός βρόχου for που εκτυπώνει τα στοιχεία ενός πίνακα: (ΠΑΡΑΔΕΙΓΜΑ 2)

Αποτελέσματα παραδείγματος 2

1
2
3
4
5 

Εξήγηση κώδικα παράδειγμα 2:

Σε αυτήν την περίπτωση, ο βρόχος for επαναλαμβάνεται πάνω από τα στοιχεία των αριθμών του πίνακα, από τον δείκτη 0 έως το τελευταίο στοιχείο. Η μεταβλητή i χρησιμοποιείται ως μετρητής βρόχου και αυξάνεται σε κάθε επανάληψη του βρόχου. Το μέγεθος του πίνακα υπολογίζεται χρησιμοποιώντας τον τελεστή sizeof και χρησιμοποιείται για τον προσδιορισμό του αριθμού των επαναλήψεων του βρόχου.

ΠΑΡΑΔΕΙΓΜΑ 1

#include *stdio.h>

int main() {
    for (int i = 1; i <= 10; i++) {
        printf("%d\n", i);
    }
    return 0;
}

Αποτελέσματα παραδείγματος 1

1
2
3
4
5
6
7
8
9
10 

ΠΑΡΑΔΕΙΓΜΑ 2

#include *stdio.h>

int main() {
    int numbers[] = {1, 2, 3, 4, 5};
    int size = sizeof(numbers) / sizeof(numbers[0]);
    for (int i = 0; i < size; i++) {
        printf("%d\n", numbers[i]);
    }
    return 0;
}
 

5. Συναρτήσεις

Οι συναρτήσεις στη C είναι ένας τρόπος οργάνωσης και επαναχρησιμοποίησης κώδικα. Είναι επίσης γνωστές ως υπορουτίνες ή διαδικασίες. Μια συνάρτηση είναι ένα μπλοκ κώδικα που μπορεί να λάβει μία ή περισσότερες παραμέτρους εισόδου και παράγει μια τιμή εξόδου ή επιστροφής: 

return_type function_name (parameter list) {
          // function body
}

  • return_type είναι ο τύπος δεδομένων της τιμής που επιστρέφει η συνάρτηση. Εάν η συνάρτηση δεν επιστρέφει μια τιμή, ο τύπος_επιστροφής θα πρέπει να είναι  void.
  • function_name είναι το όνομα της συνάρτησης, η οποία θα πρέπει να ακολουθεί τους ίδιους κανόνες για την ονομασία των μεταβλητών.
  • Η parameter list είναι μια λίστα μεταβλητών που μεταβιβάζονται ως είσοδος στη συνάρτηση. Κάθε μεταβλητή ακολουθείται από τον τύπο δεδομένων της. Εάν η συνάρτηση δεν δέχεται είσοδο, η parameter list θα πρέπει να είναι κενή.

Για παράδειγμα, ο ακόλουθος κώδικας ορίζει μια συνάρτηση find_sum που παίρνει δύο εισόδους ακέραιων αριθμών και επιστρέφει το άθροισμά τους: (ΠΑΡΑΔΕΙΓΜΑ 1)

Εξήγηση κώδικα παραδείγματος 1:

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

Οι συναρτήσεις μπορούν επίσης να χρησιμοποιηθούν για την εκτέλεση μιας συγκεκριμένης εργασίας χωρίς επιστροφή τιμής. Για παράδειγμα, η ακόλουθη συνάρτηση print_hello δεν δέχεται είσοδο και απλώς εκτυπώνει το “Hello, World!” στην κονσόλα:( ΠΑΡΑΔΕΙΓΜΑ 2).

Είναι επίσης δυνατό να περάσουν δείκτες ως ορίσματα σε μια συνάρτηση. Όταν ένας δείκτης μεταβιβάζεται σε μια συνάρτηση, η συνάρτηση μπορεί να αλλάξει την τιμή της μεταβλητής που δείχνει ο δείκτης. ( ΠΑΡΑΔΕΙΓΜΑ 3).

main()

Η main() συνάρτηση είναι μια ειδική συνάρτηση στη C, που είναι το σημείο εισόδου του προγράμματος. Η εκτέλεση του προγράμματος ξεκινά από την main() συνάρτηση. Η γενική σύνταξη για την κύρια συνάρτηση είναι: 

int main() {
          // program code
         return 0;
}

ΠΑΡΑΔΕΙΓΜΑ 1

int find_sum(int a, int b) {
    int result = a + b;
    return result;
} 

int x = 2;
int y = 3;
int sum = find_sum(x, y);

ΠΑΡΑΔΕΙΓΜΑ 2

void print_hello() {
    printf("Hello, World!\n");
}  

ΠΑΡΑΔΕΙΓΜΑ 3

void swap(int* a, int* b){
    int temp = *a;
    *a = *b;
    *b = temp;
} 

6. Δείκτες

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

Η βασική σύνταξη μιας μεταβλητής δείκτη είναι η χρήση του τελεστή * πριν από το όνομα της μεταβλητής. Για παράδειγμα:(ΠΑΡΑΔΕΙΓΜΑ 1)

Εξήγηση κώδικα παραδείγματος 1:

Σε αυτό το παράδειγμα, η μεταβλητή ‘x’ είναι μια ακέραια μεταβλητή με τιμή 5. Η μεταβλητή ‘p’ είναι δείκτης σε έναν ακέραιο και της εκχωρείται η διεύθυνση μνήμης του ‘x’ χρησιμοποιώντας τον τελεστή &. Αυτό σημαίνει ότι η τιμή που είναι αποθηκευμένη στο ‘p’ είναι η διεύθυνση μνήμης του ‘x’.

Για πρόσβαση στην τιμή που είναι αποθηκευμένη στη διεύθυνση μνήμης που είναι αποθηκευμένη σε έναν δείκτη, χρησιμοποιείται ο τελεστής *. Για παράδειγμα: ( ΠΑΡΑΔΕΙΓΜΑ 2).

Εξήγηση κώδικα παραδείγματος 2:

Αυτό θα εκτυπώσει την τιμή του x και την τιμή που είναι αποθηκευμένη στη διεύθυνση μνήμης στο p, που είναι 5.

Οι δείκτες μπορούν επίσης να χρησιμοποιηθούν για τη δυναμική κατανομή μνήμης χρησιμοποιώντας τις συναρτήσεις malloc() και calloc(). Για παράδειγμα: (ΠΑΡΑΔΕΙΓΜΑ 3)

Εξήγηση κώδικα παραδείγματος 3:

Αυτό δεσμεύει μνήμη για έναν ακέραιο και του εκχωρεί την τιμή 5. Είναι σημαντικό να θυμάστε να ελευθερώνετε δυναμικά δεσμευμένη μνήμη χρησιμοποιώντας τη συνάρτηση free() για να αποτρέψετε διαρροές μνήμης.

 

ΠΑΡΑΔΕΙΓΜΑ 1

int x = 5;
int *p;
p = &x;  

ΠΑΡΑΔΕΙΓΜΑ 2

printf("Value of x: %d\n", x);
printf("Value stored at memory address in p: %d\n", *p); 

ΠΑΡΑΔΕΙΓΜΑ 2

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

Οι δείκτες μπορούν να χρησιμοποιηθούν με πολλούς τρόπους στον προγραμματισμό C, όπως σε πίνακες και συναρτήσεις, και μπορούν να κάνουν τον κώδικα πιο αποτελεσματικό και ισχυρό. Ωστόσο, μπορεί επίσης να είναι επικίνδυνα εάν δεν χρησιμοποιηθούν σωστά και μπορεί να οδηγήσουν σε σφάλματα μνήμης, όπως υπερχείλιση buffer. Είναι σημαντικό να κατανοήσετε τα βασικά των δεικτών και τη χρήση τους πριν τους χρησιμοποιήσετε σε ένα πρόγραμμα

7. ΠΙΝΑΚΕΣ

Ένας πίνακας στη C είναι μια συλλογή στοιχείων του ίδιου τύπου δεδομένων. Μπορεί να αποθηκεύσει πολλές τιμές σε μια μεμονωμένη μεταβλητή, την οποία μπορείτε να προσπελάσετε χρησιμοποιώντας εντολές όπως η for, while. Τα στοιχεία ενός πίνακα αποθηκεύονται σε συνεχόμενες θέσεις μνήμης, γεγονός που καθιστά εύκολη την επανάληψη μέσω του πίνακα χρησιμοποιώντας έναν βρόχο.

Ακολουθεί ένα παράδειγμα του τρόπου δήλωσης και προετοιμασίας ενός πίνακα στη C: (ΠΑΡΑΔΕΙΓΜΑ 1)

Μπορούμε επίσης να δηλώσουμε έναν πίνακα χωρίς να αρχικοποιήσουμε τα στοιχεία του:

int numbers[5]; // declares an array of 5 integers

Μπορούμε να προσπελάσουμε μεμονωμένα στοιχεία ενός πίνακα χρησιμοποιώντας τον τελεστή ευρετηρίου []: ( ΠΑΡΑΔΕΙΓΜΑ 2).

Μπορούμε επίσης να χρησιμοποιήσουμε βρόχους για επανάληψη μέσω ενός πίνακα και πρόσβαση στα στοιχεία του: ( ΠΑΡΑΔΕΙΓΜΑ 3).

Εξήγηση κώδικα παραδείγματος 3:

Αυτό θα εκτυπώσει τα στοιχεία του πίνακα με τη σειρά: 1 2 3 4 5

Είναι επίσης δυνατό να χρησιμοποιήσετε έναν δείκτη για πρόσβαση στα στοιχεία ενός πίνακα. Εδώ είναι ένα παράδειγμα: ( ΠΑΡΑΔΕΙΓΜΑ 4).

Εξήγηση κώδικα παραδείγματος 4:

Σε αυτό το παράδειγμα, χρησιμοποιούμε έναν δείκτη για να επαναλάβουμε τον πίνακα και να αποκτήσουμε πρόσβαση στα στοιχεία του. Στον δείκτη “ptr” εκχωρείται η διεύθυνση του πρώτου στοιχείου του πίνακα, η οποία είναι ίδια με τη διεύθυνση του ίδιου του πίνακα. Στη συνέχεια, χρησιμοποιούμε τον τελεστή * για πρόσβαση στην τιμή που είναι αποθηκευμένη σε αυτή τη διεύθυνση, η οποία είναι το πρώτο στοιχείο του πίνακα. Στη συνέχεια, αυξάνουμε τον δείκτη για να δείχνει την επόμενη θέση μνήμης και εκτυπώνουμε το επόμενο στοιχείο του πίνακα.

Είναι επίσης δυνατό να χρησιμοποιήσετε την αριθμητική του δείκτη για πρόσβαση στα στοιχεία ενός πίνακα όπως φαίνεται δεξιά  ( ΠΑΡΑΔΕΙΓΜΑ 5).

Εξήγηση κώδικα παραδείγματος 5:

Σε αυτό το παράδειγμα χρησιμοποιούμε τον τελεστή * για να αποκτήσουμε πρόσβαση στην τιμή που είναι αποθηκευμένη στη θέση μνήμης που δείχνει ο δείκτης + 1. Αυτό είναι το ίδιο με την πρόσβαση στο δεύτερο στοιχείο του πίνακα.

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

Είναι σημαντικό να έχετε κατά νου ότι ο δείκτης ενός πίνακα στη C ξεκινά από το 0, επομένως το πρώτο στοιχείο ενός πίνακα βρίσκεται στο δείκτη 0, το δεύτερο στοιχείο βρίσκεται στο δείκτη 1 και ούτω καθεξής. Επίσης, το μέγεθος ενός πίνακα είναι σταθερό, επομένως δεν μπορείτε να αλλάξετε το μέγεθος ενός πίνακα αφού έχει δηλωθεί.

ΠΑΡΑΔΕΙΓΜΑ 1

int numbers[5] = {1, 2, 3, 4, 5}; // declares an array of 5 integers and initializes them with values 1, 2, 3, 4, and 5   

ΠΑΡΑΔΕΙΓΜΑ 2

printf("The second element of the array is: %d", numbers[1]); // prints 2 

ΠΑΡΑΔΕΙΓΜΑ 3

for (int i = 0; i < 5; i++) {
    printf("%d ", numbers[i]);
} 

ΠΑΡΑΔΕΙΓΜΑ 4

int* ptr = numbers;
printf("The first element of the array is: %d", *ptr); // prints 1
ptr++;
printf("The second element of the array is: %d", *ptr); // prints 2 

ΠΑΡΑΔΕΙΓΜΑ 4

printf("The second element of the array is: %d", *(ptr + 1)); // prints 2 

8. Αρχεία

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

Θεωρία:

Για να εργαστείτε με αρχεία στο C, το πρώτο βήμα είναι να συμπεριλάβετε το αρχείο κεφαλίδας <stdio.h>

  • Οι λειτουργίες της βιβλιοθήκης για το χειρισμό αρχείων είναι fopen(), fclose(), fread(), fwrite(), fseek() κ.λπ.
  • Η συνάρτηση fopen() χρησιμοποιείται για το άνοιγμα ενός αρχείου, απαιτεί δύο ορίσματα: το όνομα του αρχείου και τον τρόπο με τον οποίο θα ανοίξει το αρχείο. Η λειτουργία μπορεί να είναι “r” για ανάγνωση, “w” για γραφή, “a” για προσάρτηση και “b” για δυαδική λειτουργία.
  • Η συνάρτηση fclose() χρησιμοποιείται για το κλείσιμο ενός αρχείου. Παίρνει τον δείκτη του αρχείου ως όρισμα.
  • Η συνάρτηση fread() χρησιμοποιείται για την ανάγνωση δεδομένων από ένα αρχείο. Χρειάζονται τέσσερα ορίσματα: έναν δείκτη στην προσωρινή μνήμη όπου πρόκειται να αποθηκευτούν τα δεδομένα, το μέγεθος κάθε στοιχείου, τον αριθμό των στοιχείων προς ανάγνωση και τον δείκτη του αρχείου.
  • Η συνάρτηση fwrite() χρησιμοποιείται για την εγγραφή δεδομένων σε ένα αρχείο. Χρειάζονται τέσσερα ορίσματα: έναν δείκτη στο buffer όπου πρόκειται να αποθηκευτούν τα δεδομένα, το μέγεθος κάθε στοιχείου, τον αριθμό των στοιχείων που θα γραφτούν και τον δείκτη του αρχείου.
  • Η συνάρτηση fseek() χρησιμοποιείται για τη μετακίνηση του δείκτη του αρχείου σε μια συγκεκριμένη θέση σε ένα αρχείο. Χρειάζονται τρία ορίσματα: τον δείκτη του αρχείου, τον αριθμό των byte που θα μετακινηθούν και τη θέση από όπου θα μετακινηθεί.

Ανοίξτε και κλείστε ένα αρχείο: (ΠΑΡΑΔΕΙΓΜΑ 1)

Γράψτε σε ένα αρχείο : (ΠΑΡΑΔΕΙΓΜΑ 2)

Διαβάστε από ένα αρχείο : (ΠΑΡΑΔΕΙΓΜΑ 3)

Αντιγράψτε τα περιεχόμενα ενός αρχείου σε άλλο: (ΠΑΡΑΔΕΙΓΜΑ 4)

ΠΑΡΑΔΕΙΓΜΑ 3

#include *stdio.h>

int main() {
    FILE *fp;
    char text[100];
    fp = fopen("sample.txt", "r");
    if(fp == NULL) {
        printf("Error opening file");
        return 0;
    }
    fscanf(fp, "%s", text);
    printf("Text from file: %s", text);
    fclose(fp);
    return 0;
} 

ΠΑΡΑΔΕΙΓΜΑ 1

#include *stdio.h>

int main() {
    FILE *fp;
    fp = fopen("sample.txt", "w");
    if(fp == NULL) {
        printf("Error opening file");
        return 0;
    }
    printf("File opened successfully");
    fclose(fp);
    return 0;
} 

ΠΑΡΑΔΕΙΓΜΑ 2

#include *stdio.h>

int main() {
    FILE *fp;
    char text[100] = "Hello, this is a sample text";
    fp = fopen("sample.txt", "w");
    if(fp == NULL) {
        printf("Error opening file");
        return 0;
    }
    fprintf(fp, "%s", text);
    printf("Text written to file");
    fclose(fp);
    return 0;
}
 

ΠΑΡΑΔΕΙΓΜΑ 4

#include *stdio.h>

int main() {
    FILE *fp1, *fp2;
    char ch;
    fp1 = fopen("file1.txt", "r");
    if(fp1 == NULL) {
        printf("Error opening file");
        return 0;

10. Παραδειγματα

ΠΑΡΑΔΕΙΓΜΑ 1

Να γραφεί πρόγραμμα σε C το οποίο θα ζητάει τα απαραίτητα δεδομένα (a, b, c) και θα επιλύει και θα εμφανίζει το αποτέλεσμα από την γενική
εξίσωση 2ου βαθμού ax^2 +bx +c =0
Να λαμβάνονται υπόψη όλες οι περιπτώσεις επίλυσης.

Εξήγηση κώδικα παραδείγματος 1:

Αυτό το πρόγραμμα παίρνει τις τιμές των a, b και c ως είσοδο από τον χρήστη και στη συνέχεια χρησιμοποιεί τον τετραγωνικό τύπο για να λύσει τις ρίζες της εξίσωσης. Ελέγχει επίσης τη διακρίνουσα(b^2 – 4ac) για να προσδιορίσει εάν οι ρίζες είναι πραγματικές και διαφορετικές, πραγματικές και ίδιες ή σύνθετες και διαφορετικές. Ανάλογα με τη διακρίνουσα, το πρόγραμμα θα εκτυπώσει το κατάλληλο μήνυμα.

Κωδικασ

#include *stdio.h>
#include *math.h>

int main() {
    float a, b, c;
    double x1, x2, discriminant;

    printf("Enter the values of a, b, and c for the quadratic equation (ax^2 + bx + c = 0): ");
    scanf("%f%f%f", &a, &b, &c);

    discriminant = b*b - 4*a*c;

    if(discriminant > 0) {
        x1 = (-b + sqrt(discriminant)) / (2*a);
        x2 = (-b - sqrt(discriminant)) / (2*a);
        printf("The roots are real and different.\n");
        printf("x1 = %lf\n", x1);
        printf("x2 = %lf\n", x2);
    }
    else if(discriminant == 0) {
        x1 = x2 = -b / (2*a);
        printf("The roots are real and same.\n");
        printf("x1 = x2 = %lf\n", x1);
    }
    else {
        printf("The roots are complex and different.\n");
    }

    return 0;
}
  

ΠΑΡΑΔΕΙΓΜΑ 2

Να γραφεί πρόγραμμα σε C το οποίο θα ζητάει τα απαραίτητα δεδομένα
(x, y, k,n) και θα επιλύει και θα εμφανίζει το αποτέλεσμα από τo
παρακάτω:

Εξήγηση κώδικα παραδείγματος 2:

Αυτό το πρόγραμμα ζητά πρώτα από το χρήστη να εισαγάγει τιμές για τα x, y, k και n. Στη συνέχεια, χρησιμοποιεί μια πρόταση IF-ELSE για να ελέγξει την τιμή του y και να επιλέξει ποια έκδοση της εξίσωσης θα χρησιμοποιήσει. Στη συνέχεια υπολογίζει την τιμή του f και την εκτυπώνει.

Κωδικασ

#include *stdio.h>
#include *math.h>
#include *stdlib.h>
int main(){
	int x,y,k,n,sum;
	
	printf("This program will ask for four numbers (integers) and it will calculate and print the result of a function f(x) \n ");
	printf("Give me the first integer: \n");
	scanf("%d",&x);
	printf("Give me the second integer: \n");
    scanf("%d",&y);
    printf("Give me the third integer: \n");
    scanf("%d",&k);
    printf("Give me the fourth integer: \n");
    scanf("%d",&n);
    
    if(y>=-12){
    	printf("f(x,y)=(tan(kx)/1+x^4)+(e^(ny)/cosh(kn)) \n");
    	sum = tan(k*x)/(1+x*x*x*x)+ exp(n*y)/ cosh(k*n);
    	printf("tan(%d*%d)/(1+%d^4)+ exp (%d*%d)/ cosh(%d*%d)= %d \n",k,x,x,n,y,k,n,sum);
	}
    if(y<-12) {  
        printf("f(x,y)=(log(kx)+e^ny/cosh(kn))^1/4 \n");
        sum = sqrt( log10( k*x )+ exp (n*y) / cosh (k*n) );
        printf("alog10(%d*%d) + (exp(%d*%d)/ cosh (%d*%n))^(1/4)= %d \n",k,x,n,y,k,n,sum);
}
system("pause");
}  

ΠΑΡΑΔΕΙΓΜΑ 3

Να γραφεί πρόγραμμα σε C το οποίο θα ζητάει τα απαραίτητα δεδομένα
(x και y) και θα επιλύει και θα εμφανίζει το αποτέλεσμα από τo
παρακάτω:

Εξήγηση κώδικα παραδείγματος 3:

Το πρόγραμμα αρχικά δηλώνει μεταβλητές για x, y και το αποτέλεσμα της συνάρτησης. Στη συνέχεια, ζητά από το χρήστη να εισαγάγει τιμές για x και y χρησιμοποιώντας τη δήλωση “scanf”.

Στη συνέχεια, το πρόγραμμα χρησιμοποιεί ένα μπλοκ “if-else” για να αξιολογήσει τη συνάρτηση με βάση τις τιμές των x και y και αποθηκεύει το αποτέλεσμα στη μεταβλητή “αποτέλεσμα”.

Τέλος, το πρόγραμμα χρησιμοποιεί τη δήλωση “printf” για να εμφανίσει την τιμή της μεταβλητής “sum”, η οποία είναι η τελική έξοδος της συνάρτησης.

 

Κωδικασ

#include *stdio.h>
#include *stdlib.h>
int main(){
    int x,y,sum;
	
	printf("This program will ask for two numbers(integers) and it will calculate and print the sum of them in four cases depending on the numbers (integers)\n ");
	
	printf("Give me the first integer: \n");
	scanf("%d",&x);
	printf("Give me the second integer: \n");
	scanf("%d",&y);
	
	if(x>=0 && y>=0)	{
	printf("f(x,y)=x+y \n");
	sum=x+y;
	printf("%d+ %d=%d \n",x,y,sum);
		 } 	
	else if(x>=0 && y<0){
		printf("f(x,y)=x+y^2) \n");
		sum=x+y*y;
		printf("%d+ %d^2 = %d \n",x,y,sum);
		 }	 
    else if(x<0 && y>=0)	{
		printf("f(x,y)=x^2+y \n");
		sum=x*x+y;
		printf("%d^2+ %d=%d \n",x,y,sum);
	}
	else if(x<0 && y<0)	{
		printf("f(x,y)=x^2+y^2 \n");
		sum=x*x+y*y;
		printf("%d^2+%d^2=%d \n",x,y,sum);	
	}
	system("pause");
} 

ΠΑΡΑΔΕΙΓΜΑ 4

Αυτό το πρόγραμμα λύνει τη γενική τετραγωνική εξίσωση της μορφής ax^2 + bx + c = 0. Προτρέπει τον χρήστη να εισαγάγει τις τιμές των a, b και c και στη συνέχεια καλεί μια συνάρτηση που ονομάζεται quadraticRoots() που υπολογίζει τις ρίζες της εξίσωσης. Οι ρίζες μπορεί να είναι πραγματικές και διαφορετικές, πραγματικές και ίδιες ή σύνθετες. Ανάλογα με την τιμή του (b^2 – 4ac), το πρόγραμμα εκτυπώνει την κατάλληλη έξοδο.

 

Κωδικασ

#include *stdio.h>
#include *stdlib.h>
#include *math.h>
// function to calculate the roots of a quadratic equation
void quadraticRoots(double a, double b, double c) {
    double discriminant = b*b - 4*a*c;
    double root1, root2;
    if (discriminant > 0) {
        root1 = (-b + sqrt(discriminant)) / (2*a);
        root2 = (-b - sqrt(discriminant)) / (2*a);
        printf("Roots are real and different.\n");
        printf("root1 = %.2lf and root2 = %.2lf", root1, root2);
    }
    else if (discriminant == 0) {
        root1 = root2 = -b / (2*a);
        printf("Roots are real and same.\n");
        printf("root1 = root2 = %.2lf;", root1);
    }
    else {
        double realPart = -b / (2*a);
        double imaginaryPart = sqrt(-discriminant) / (2*a);
        printf("Roots are complex and different.\n");
        printf("root1 = %.2lf+%.2lfi and root2 = %.2lf-%.2lfi", realPart, imaginaryPart, realPart, imaginaryPart);
    }
}
int main() {
    double a, b, c;
    printf("Enter the coefficients a, b and c: ");
    scanf("%lf %lf %lf", &a, &b, &c);
    quadraticRoots(a, b, c);
    return 0;
}

ΠΑΡΑΔΕΙΓΜΑ 5

Αυτό το πρόγραμμα υπολογίζει το παραγοντικό ενός δεδομένου ακέραιου αριθμού. Προτρέπει τον χρήστη να εισαγάγει έναν ακέραιο και στη συνέχεια καλεί μια αναδρομική συνάρτηση που ονομάζεται factorial() για να βρει το παραγοντικό του εισαγόμενου αριθμού. Η συνάρτηση χρησιμοποιεί μια βασική περίπτωση n = 0, στην οποία επιστρέφει 1. Για όλες τις άλλες τιμές του n, καλεί τον εαυτό της με το όρισμα (n-1) και πολλαπλασιάζει το αποτέλεσμα με

 

Κωδικασ

#include *stdio.h>
int factorial(int n) {
    if (n == 0)
        return 1;
    return n*factorial(n-1);
}
int main() {
    int n;
    printf("Enter an integer: ");
    scanf("%d", &n);
    if (n < 0) {
        printf("Error: Factorial of a negative number doesn't exist.");
    }
    else {
        printf("Factorial of %d = %d", n, factorial(n));
    }
    return 0;
}
ΦΟΡΜΑ ΕΠΙΚΟΙΝΩΝΙΑΣ
Μπορείτε να προτείνετε ιδέες για βελτίωση της σελίδας, επίσης μπορείτε να βοηθήσετε στην βελτίωση του Cimi συμπληρώνοντας την φόρμα!
Scroll to Top