Τμήμα:C/Μάθημα 2ο

Από Βικιεπιστήμιο
(Ανακατεύθυνση από C/Μάθημα 2ο)
Προηγούμενη
Ενότητα
Περιεχόμενα Επόμενη
Ενότητα


Δεδομένα[επεξεργασία]

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

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

Τύποι δεδομένων[επεξεργασία]

Στην C υπάρχουν οι ακόλουθοι τύποι δεδομένων

ΤύποςΔιάκρισηBytesΕμβέλεια
charχαρακτήρας1-128 έως 127 ή 0 έως 255 (εξαρτάται από την υλοποίηση)
intακέραιος αριθμός2-4-32,768 έως 32,767 αν έχει μέγεθος 2 byte,
όλοι οι σύγχρονοι έχουν από -2,147,483,648 έως 2,147,483,647
shortακέραιος αριθμός2-32,768 έως 32,767
longακέραιος αριθμός4-2,147,483,648 έως 2,147,483,647
unsigned charχαρακτήρας10 έως 255
unsigned intθετικός ακέραιος αριθμός2-40 έως 65,535 αν έχει μέγεθος 2 byte,
όλοι οι σύγχρονοι έχουν από 0 έως 4,294,967,295
unsigned shortθετικός ακέραιος αριθμός20 έως 65,535
unsigned longθετικός ακέραιος αριθμός40 έως 4,294,967,295
floatπραγματικός αριθμός41.2E-38 έως 3.4E+38
doubleπραγματικός αριθμός82.2E-308 έως 1.8E+308
long doubleπραγματικός αριθμός8-163.4E-4932 έως 1.2E+4932 (αν έχει μέγεθος 16 byte)

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

Αναφορά στα δεδομένα[επεξεργασία]

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

Στην C, τα ονόματα των μεταβλητών και των σταθερών πρέπει να ακολουθούν τους παρακάτω κανόνες:

  • Μπορούν να χρησιμοποιηθούν γράμματα, αριθμοί, και η κάτω παύλα (_).
  • Ο πρώτος χαρακτήρας είναι αναγκαστικά γράμμα.
  • Οι μεταβλητές είναι case sensitive, δηλαδή έχει σημασία αν δηλωθούν με μικρά ή κεφαλαία καθώς οι μεταβλητές myvar και MyVar είναι διαφορετικές.
  • Δεσμευμένες λέξεις της C δεν μπορούν να χρησιμοποιηθούν ως ονόματα μεταβλητών.

Μεταβλητές[επεξεργασία]

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

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

 int myval; // δηλώνουμε μια μεταβλητή ακέραιου τύπου με όνομα myval 
 unsigned int marker1;
 char alpha, beta; //εδώ δηλώνονται δυο μεταβλητές τύπου char, ξεχωρίζουν με το κόμμα

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

 int myval=10, tmp1=20, tmp2; // δηλώνεται η myval και αρχικοποιήται με την τιμή 10 
 unsigned int marker1, marker2=10+20; // η marker2 παίρνει το αποτέλεσμα της πράξης, δηλαδή marker2=30
 float magnitude = 25.50f, phase;
 char alpha='a', beta='b';

Σταθερές[επεξεργασία]

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

int number= 20;

Οι τιμές 20 και 0.21 είναι κυριολεκτικές σταθερές που μπορεί να αντιπροσωπεύουν μια έννοια, πχ. το ΦΠΑ 21%.

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

#include<stdio.h>
// Δήλωση σταθερής τιμής με define
#define FPA_PERCENT 0.21

int main()
{
	// Δήλωση σταθερής τιμής με const
	const float fpa_percent = 0.21;
}

Παρατηρήστε ότι η define ορίζεται εκτός main() και δεν χρειάζεται ερωτηματικό στο τέλος.

Ειδικοί χαρακτήρες[επεξεργασία]

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

ΧαρακτήραςΛειτουργία
\nαλλαγή γραμμής
\tαλλαγή στήλης (tab)
\'προσθήκη αποστρόφου
\\προσθήκη χαρακτήρας backslash
\"προσθήκη εισαγωγικού
\0χαρακτήρας με ASCII = 0 (null)
\037χαρακτήρας με ASCII = 37 (οκταδικό)
\x1fχαρακτήρας με ASCII = 1f (δεκαεξαδικό)

Οι ειδικοί χαρακτήρες χρησιμοποιούνται κυρίως για μορφοποίηση κατά την εμφάνιση.

Είσοδος/Έξοδος Δεδομένων[επεξεργασία]

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

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

ΤύποςΣυμβολισμός
int%d
char%c
float%f
double%lf
string%s

Εισαγωγή με scanf()[επεξεργασία]

Η συνάρτηση για εισαγωγή δεδομένων είναι η scanf(). Έτσι γράφοντας

scanf("%d",&number);

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

Εκτός της scanf() υπάρχουν και άλλες συναρτήσεις που σκοπό έχουν την εισαγωγή δεδομένων, αλλά θα αναφερθούμε σε αυτές σε επόμενο μάθημα.

Εμφάνιση με printf()[επεξεργασία]

Η εμφάνιση αριθμών, χαρακτήρων, μεταβλητών, συμβολοσειρών κτλ γίνεται με την συνάρτηση printf(), για παράδειγμα

#include<stdio.h>
int main() 
{
	int age = 11; 
	char letter = 'k';
	printf("I am %d years old,", age); // εδώ η γραμμή δεν αλλάζει γιατί δεν έχουμε βάλει \n
	printf(" and my name starts with a %c.\n", letter);
	return 0;
}

Η επισήμανση %d υποδηλώνει ότι σε αυτή την θέση θα εμφανιστεί η μεταβλητή που ακολουθεί.


Εκτός της printf() υπάρχουν και άλλες συναρτήσεις που σκοπό έχουν την εμφάνιση δεδομένων, αλλά θα αναφερθούμε σε αυτές σε επόμενο μάθημα.

Παράδειγμα Ε/Ε[επεξεργασία]

/* Παράδειγμα Εισόδου και Εξόδου δεδομένων */
#include <stdio.h>
int main()
{
	int fav_num;
	printf("What is your favorite number? ");
	scanf("%d\n",&fav_num);
	printf("Your favorite number is %d.\n\n",fav_num); // Εμφανίζει και μετά κατεβαίνει δύο γραμμές
	return 0;
}


Ασκήσεις[επεξεργασία]

  1. Εκτελέστε τον κώδικα του παραδείγματος.
  2. Δοκιμάστε να εμφανίσετε σε ένα printf() δύο μεταβλητές βάζοντας δύο επισημάνσεις %d.
  3. Η συνάρτηση sizeof() δέχεται έναν τύπο δεδομένων και σας δείχνει πόσο χώρο καταλαμβάνει στην μνήμη του συστήματός σας. Παράδειγμα
    printf("char\t%d bytes\n",sizeof(char));
    
    Δοκιμάστε το παραπάνω και έπειτα προσθέστε και άλλα printf() ώστε να εμφανίσετε όλους τους τύπους δεδομένων.
Προηγούμενη
Ενότητα
Περιεχόμενα Επόμενη
Ενότητα