Εργαστήριο 1 - Χαροκόπειο Πανεπιστήμιο

Χαροκόπειο Πανεπιστήμιο
Τμήμα Πληροφορικής και Τηλεματικής
Εισαγωγή στον Προγραμματισμό
Εργαστήριο 1
Διδάσκοντες: Δημήτρης Μιχαήλ, Ουρανία Χατζή
Ακ. Έτος 2010-2011
1 Το πρώτο πρόγραμμα σε C
Γράψτε, μεταγλωττίστε και εκτελέστε το παρακάτω πρόγραμμα σε C:
1
#include < s t d i o . h>
2
3
4
5
int main ( )
{
printf ( "Hello,␣world!\n" ) ;
6
return 0 ;
7
8
}
Εκτελώντας το πρόγραμμα το παράθυρο ανοίγει και κλείνει πολύ γρήγορα. Προσθέστε την γραμμή
#include < s t d l i b . h>
αμέσως μετά την πρώτη γραμμή και την
system ( "PAUSE" ) ;
μετά την 6η γραμμή για να παραμείνει ανοικτό το παράθυρο μέχρι να πατήσουμε κάποιο πλήκτρο.
Προσοχή, η συνάρτηση system καλεί κάποια συνάρτηση του λειτουργικού συστήματος. Για αυτό το
λόγο η εντολή system("PAUSE") δουλεύει μόνο σε λειτουργικό σύστημα Windows.
2 Μορφοποίηση Εξόδου με την printf
Η γενική μορφή της printf() φαίνεται παρακάτω:
int printf ( const char * format ,
...
);
Το αλφαριθμητικό format περιέχει το κείμενο που θα εκτυπωθεί μαζί με ειδικές ακολουθίες
χαρακτήρων που βοηθούν στην εκτύπωση των μεταβλητών που ακολουθούν.
Οι ειδικές αυτές ακολουθίες έχουν την εξής γενική μορφή:
%[flags][width][.precision][length]specifier
όπου οι περισσότεροι specifiers φαίνονται στον παρακάτω πίνακα:
1
specifier
c
dήi
e
E
f
o
s
u
x
X
Έξοδος
χαρακτήρας
δεκαδικός αριθμός με πρόσημο
επιστημονικός συμβολισμός με e
επιστημονικός συμβολισμός με E
δεκαδικός αριθμός κινητής υποδιαστολής
οκταδικός με πρόσημο
αλφαριθμητικό
δεκαδικός ακέραιος χωρίς πρόσημο
δεκαεξαδικός αριθμός χωρίς πρόσημο
δεκαεξαδικός αριθμός χωρίς πρόσημο με κεφαλαία
Παράδειγμα
a
392
3.9265e+2
3.9265E+2
392.65
610
sample
7235
7fa
7FA
όλα τα άλλα στοιχεία είναι προαιρετικά.
2.1
Άσκηση
Γράψτε ένα πρόγραμμα που να δηλώνει μία μεταβλητή τύπου float, να της δίνει την τιμή 3.141592
και να τυπώνει στην έξοδο:
PI is approximately 3.141592
χρησιμοποιώντας αυτήν την μεταβλητή.
2.2 Άσκηση
Γράψτε ένα πρόγραμμα που να δηλώνει μία μεταβλητή τύπου int να της δίνει την τιμή 325 και μετά
να την εκτυπώνει 2 φορές, μία σε δεκαδικό και μία σε δεκαεξαδικό.
2.3
Ειδικοί Χαρακτήρες
Οι ειδικοί χαρακτήρες στην C φαίνονται παρακάτω:
χαρακτήρας
newline
tab
carriage return
backspace
form feed
backslash
single quotation mark
double quotation mark
null character
κωδικός ASCII
10
9
13
8
12
92
39
34
0
ειδικός χαρακτήρας στην C
'\n'
'\t'
'\r'
'\b'
'\f'
'\\'
'\''
'\"'
'\0'
Γράψτε ένα πρόγραμμα σε C που να εκτυπώνει:
Hello, world
Hello, world
Hello, world
Hello, world
3 Χαρακτήρες και Κωδικοποίηση
Η γλώσσα C παρέχει τον τύπο char για την αποθήκευση χαρακτήρων. Οι χαρακτήρες αυτοί είναι
ουσιαστικά αριθμοί οι οποίοι μετατρέπονται σε χαρακτήρες χρησιμοποιώντας την κωδικοποίηση ASCII.
Αυτό μας επιτρέπει να κάνουμε αριθμητική με τους χαρακτήρες.
Γράψτε και εκτελέστε τον παρακάτω κώδικα:
2
Figure 1: Οι 92 εκτυπώσιμοι χαρακτήρες από 32 έως 126. Οι χαρακτήρες από 0 έως 31 είναι ειδικοί
χαρακτήρες για τον έλεγχο των συσκευών εξόδου, πχ το 8 είναι το BACKSPACE, το 10 είναι ο
χαρακτήρας newline (νέα γραμμή), το 13 είναι το ENTER και το 27 το ESC.
1
2
#include < s t d i o . h>
#include < s t d l i b . h>
3
4
5
6
int main ( )
{
char c = 'a' ;
7
printf ( "letter␣%c␣is␣represented␣as␣%d␣in␣ASCII␣code\n" , c , c ) ;
printf ( "letter␣%c␣is␣represented␣as␣%d␣in␣ASCII␣code\n" , c+25 , c + 2 5 ) ;
8
9
10
system ( "PAUSE" ) ;
return 0 ;
11
12
13
}
Ποια είναι η κωδικοποίηση του χαρακτήρα a; Του χαρακτήρα z;
Ανάμεσα στις γραμμές 8 και 9 βάλτε ένα printf ακόμη που να τυπώνει τον χαρακτήρα c+1. Ποιός
είναι αυτός ο χαρακτήρας;
Στην συνέχεια αλλάξτε την τιμή της μεταβλητής c σε 'A'. Ποια είναι η κωδικοποίηση του 'B' με
βάση το ASCII;
4 Περισσότερη Μορφοποίηση Εξόδου με την printf
4.1 Padding
Το width είναι ένας αριθμός που λέει στην printf πόσα κενά να προσθέσει στην έξοδο ώστε το
αποτέλεσμα να έχει τόσους πολλούς χαρακτήρες. Γράψτε και εκτελέστε τον κώδικα που ακολουθεί:
1
2
#include < s t d i o . h>
#include < s t d l i b . h>
3
4
5
6
7
8
9
int main ( )
{
int a =
int b =
int c =
int d =
100;
1000;
10000;
1000000;
10
11
printf ( "%7d\n" , a ) ;
3
printf ( "%7d\n" , b ) ;
printf ( "%7d\n" , c ) ;
printf ( "%*d\n" , 7 , d ) ;
12
13
14
15
system ( "PAUSE" ) ;
return 0 ;
16
17
18
}
4.2 Precision
Το precision έχει διαφορετική έννοια για κάθε τύπο:
• για ακέραιους τύπους υποδηλώνει τον ελάχιστο αριθμό ψηφίων που πρέπει να εκτυπωθούν
(πιθανώς με μηδενικά στην αρχή)
• για αριθμούς κινητής υποδιαστολής υποδηλώνει τον αριθμό των ψηφίων μετά την υποδιαστολή
• για αλφαριθμητικά υποδηλώνει τον μέγιστο αριθμό χαρακτήρων που θα εκτυπωθούν
Εκτελέστε το παρακάτω πρόγραμμα:
1
2
#include < s t d i o . h>
#include < s t d l i b . h>
3
4
5
6
7
8
9
int main ( )
{
int a = 1 0 0 ;
int c = 1 0 0 0 0 ;
int d = 1 0 0 0 0 0 0 ;
float pi = 3 . 1 4 1 5 9 2 6 5 ;
10
printf ( "%7.7d\n" , a ) ;
printf ( "%7d\n" , d ) ;
printf ( "%*.*d\n" , 7 , 7 , c ) ;
11
12
13
14
printf ( "%.3f\n" , pi ) ;
printf ( "%.10f\n" , pi ) ;
printf ( "%.f\n" , pi ) ;
15
16
17
18
system ( "PAUSE" ) ;
return 0 ;
19
20
21
}
4