Institut Sup´ erieur de l’A´ eronautique et de l’Espace
The C Programming Language
J´ erˆ
- me Hugues
ISAE/DMIA – jerome.hugues@isae.fr
J´ erˆ
- me Hugues
C Language 1/ 152
The C Programming Language J er ome Hugues ISAE/DMIA - - PowerPoint PPT Presentation
Institut Sup erieur de lA eronautique et de lEspace The C Programming Language J er ome Hugues ISAE/DMIA jerome.hugues@isae.fr J er ome Hugues C Language 1/ 152 License CC BY-NC-SA 3.0 This work is licensed under
J´ erˆ
C Language 1/ 152
J´ erˆ
C Language 2/ 152
J´ erˆ
C Language 3/ 152
J´ erˆ
C Language 4/ 152
J´ erˆ
C Language 5/ 152
J´ erˆ
C Language 6/ 152
J´ erˆ
C Language 7/ 152
J´ erˆ
C Language 8/ 152
1
2
3
4
5
J´ erˆ
C Language 9/ 152
1
2
3
4
5
J´ erˆ
C Language 10/ 152
J´ erˆ
C Language 11/ 152
J´ erˆ
C Language 12/ 152
J´ erˆ
C Language 13/ 152
#include <s t d i o . h> i n t main ( i n t argc , char ** argv ) { p r i n t f ( " Hello World !\ n" ) ; return 0; }
J´ erˆ
C Language 14/ 152
#include <s t d i o . h> i n t main ( i n t argc , char ** argv ) { p r i n t f ( " Hello World !\ n" ) ; return 0; }
J´ erˆ
C Language 14/ 152
#include <s t d i o . h> i n t main ( i n t argc , char ** argv ) { p r i n t f ( " Hello World !\ n" ) ; return 0; }
J´ erˆ
C Language 14/ 152
1Assuming a GNU compilation toolchain J´ erˆ
C Language 15/ 152
J´ erˆ
C Language 16/ 152
1
2
3
4
5
J´ erˆ
C Language 17/ 152
J´ erˆ
C Language 18/ 152
J´ erˆ
C Language 19/ 152
J´ erˆ
C Language 20/ 152
i n t a , b , c ; /* i n t e g e r v a r i a b l e s */ b = 10 , c = 32; a = b + c ; i f (b != 0) { a = c / b ; }
J´ erˆ
C Language 21/ 152
J´ erˆ
C Language 22/ 152
/* Return the minimum value
two i n t e g e r s */ i n t min ( i n t a , i n t b) { i n t r e s u l t ; i f ( a <= b) r e s u l t = a ; e l s e r e s u l t = b ; return r e s u l t ; }
J´ erˆ
C Language 23/ 152
/* Print the l i s t
arguments from the command l i n e */ #include <s t d i o . h> i n t main ( i n t argc , char ** argv ) { i n t i ; f o r ( i = 0; i < argc ; i++) p r i n t f ( "argument # %d : %s \n" , i , argv [ i ] ) ; return 0; }
J´ erˆ
C Language 24/ 152
1
2
3
4
5
J´ erˆ
C Language 25/ 152
J´ erˆ
C Language 26/ 152
#include <s t d i o . h> i n t main ( i n t argc , char ** argv ) { unsigned char c = ’A’ ; p r i n t f ( "%d %c\n" , c , c ) ; /* Prints "65 A" */ return 0; }
J´ erˆ
C Language 27/ 152
32 | 0 48 | @ 64 | P 80 | ‘ 96 | p 112 | ! 33 | 1 49 | A 65 | Q 81 | a 97 | q 113 | " 34 | 2 50 | B 66 | R 82 | b 98 | r 114 | # 35 | 3 51 | C 67 | S 83 | c 99 | s 115 | $ 36 | 4 52 | D 68 | T 84 | d 100 | t 116 | % 37 | 5 53 | E 69 | U 85 | e 101 | u 117 | & 38 | 6 54 | F 70 | V 86 | f 102 | v 118 | ’ 39 | 7 55 | G 71 | W 87 | g 103 | w 119 | ( 40 | 8 56 | H 72 | X 88 | h 104 | x 120 | ) 41 | 9 57 | I 73 | Y 89 | i 105 | y 121 | * 42 | : 58 | J 74 | Z 90 | j 106 | z 122 | + 43 | ; 59 | K 75 | [ 91 | k 107 | { 123 | , 44 | < 60 | L 76 | \ 92 | l 108 | | 124 |
61 | M 77 | ] 93 | m 109 | } 125 | . 46 | > 62 | N 78 | ^ 94 | n 110 | ~ 126 | / 47 | ? 63 | O 79 | _ 95 | o 111 |
J´ erˆ
C Language 28/ 152
0x0, NUL, Null character, string termination 0x7, BEL, Bell 0x8, BS, Backspace 0x9, HT, Horizontal Tab 0xA, LF, Line Feed 0xD, CR, Carriage Return
J´ erˆ
C Language 29/ 152
char a_string [ ] = " Hello World ! " ;
/* from s t r i n g . h */ char * s t r c a t ( char * , const char * ) ; char * s t r c h r ( const char * , i n t ) ; i n t strcmp ( const char * , const char * ) ; i n t s t r c o l l ( const char * , const char * ) ; char * strcpy ( char * , const char * ) ; size_t s t r l e n ( const char * ) ;
J´ erˆ
C Language 30/ 152
J´ erˆ
C Language 31/ 152
J´ erˆ
C Language 32/ 152
#include <s t d i o . h> i n t main ( i n t argc , char ** argv ) { p r i n t f ( " Hello World ! \ n" ) ; /* \n to f l u s h the
*/ p r i n t f ( " Universe constant %d\n" , 4 2 ) ; /* print i n t e g e r */ p r i n t f ( "Hexadecimal %x\n" , 4 2 ) ; /* print i n t e g e r */ return 0; }
J´ erˆ
C Language 33/ 152
J´ erˆ
C Language 34/ 152
J´ erˆ
C Language 35/ 152
#include <stdbool . h> bool status = true ;
J´ erˆ
C Language 36/ 152
J´ erˆ
C Language 37/ 152
i n t i n t e g e r = 123; /* i n t e g e r */ i n t
= 0123; /*
( base 8) */ i n t hexa = 0 xc00fee ; /* hexadecimal */ long a_long = 123456789L ; /* long i n t e g e r */ unsigned i n t u_int = 1234U; /* unsigned i n t e g e r */ unsigned long i n t u l i = 123456789UL; /* unsigned long i n t e g e r */ double a_double = 3.14159; /* a double */ f l o a t a_float = 3.14156F; /* a f l o a t */ long double l_double = 3.14159L ; /* a long double */ /* The f o l l o w i n g i s a GNU gcc extension */ i n t binary = 0b1010 ; /* binary number */
J´ erˆ
C Language 38/ 152
1
2
3
4
5
J´ erˆ
C Language 39/ 152
#include <s t d i o . h> i n t main ( i n t argc , char ** argv ) { i n t i , j = 2; f l o a t x = 2 .6 , y = 2 . 7 ; i = x + y ; /* i = 5 */ j = ( i n t ) x + ( i n t ) y ; /* j = 4 */ x = i + 2 . 6 ; /* x = 7.6 */ p r i n t f ( " i = %d , j = %d , x = %f \n" , i , j , x ) ; return 0; }
J´ erˆ
C Language 40/ 152
#include <math . h> /* mathematical f u n c t i o n s */ #include <s t d i o . h> i n t main ( i n t argc , char ** argv ) { double s , s2 ; s = s i n (M_PI / 4 ) ; s2 = sqrt ( 2 . 0 ) / 2 . 0 ; p r i n t f ( "%f %f \n" , s , s2 ) ; return 0; }
J´ erˆ
C Language 41/ 152
#include <s t d i o . h> i n t main ( i n t argc , char ** argv ) { f l o a t x , x2 ; x = 3 / 2; /* x = 1.0 */ x2 = 3 / 2 . 0 ; /* x = 1.5 */ p r i n t f ( "%f %f \n" , x , x2 ) ; return 0; }
J´ erˆ
C Language 42/ 152
#include <s t d i o . h> i n t main ( i n t argc , char ** argv ) { signed char c r e s u l t , c1 , c2 , c3 ; c1 = 100; c2 = 3 ; c3 = 4 ; c r e s u l t = c1 * c2 / c3 ; p r i n t f ( "%d\n" , c r e s u l t ) ; /* returns 75 */ c1 = 100; c2 = 3 ; c3 = 4 ; c r e s u l t = c1 * c2 ; c r e s u l t /= c3 ; p r i n t f ( "%d\n" , c r e s u l t ) ; /* returns 11 */ return 0; }
J´ erˆ
C Language 43/ 152
No two different signed integer types have the same rank, even if they have the same representation. The rank of a signed integer type is greater than the rank of any signed integer type with less precision. The rank of long long int is greater than the rank of long int, which is greater than the rank of int, which is greater than the rank of short int, which is greater than the rank of signed char. The rank of any unsigned integer type is equal to the rank of the corresponding signed integer type, if any. The rank of any standard integer type is greater than the rank of any extended integer type with the same width. The rank of char is equal to the rank of signed char and unsigned char. The rank of any extended signed integer type relative to another extended signed integer type with the same precision is implementation defined but still subject to the other rules for determining the integer conversion rank. For all integer types T1, T2, and T3, if T1 has greater rank than T2, and T2 has greater rank than T3, then T1 has greater rank than T3.
J´ erˆ
C Language 44/ 152
1
If both operands have the same type, no further conversion is needed.
2
If both operands are of the same integer type (signed or unsigned), the operand with the type of lesser integer conversion rank is converted to the type of the
3
If the operand that has unsigned integer type has rank greater than or equal to the rank of the type of the other operand, the operand with signed integer type is converted to the type of the operand with unsigned integer type.
4
If the type of the operand with signed integer type can represent all of the values of the type of the operand with unsigned integer type, the operand with unsigned integer type is converted to the type of the operand with signed integer type.
5
Otherwise, both operands are converted to the unsigned integer type corresponding to the type of the operand with signed integer type. Specific
J´ erˆ
C Language 45/ 152
#include <s t d i o . h> i n t main ( i n t argc , char ** argv ) { i n t s i =
unsigned i n t ui = 1; p r i n t f ( "%d\n" , s i < ui ) ; p r i n t f ( "%d\n" , s i < ( i n t ) ui ) ; return 0; }
J´ erˆ
C Language 46/ 152
J´ erˆ
C Language 47/ 152
J´ erˆ
C Language 48/ 152
J´ erˆ
C Language 49/ 152
1
2
3
4
5
J´ erˆ
C Language 50/ 152
J´ erˆ
C Language 51/ 152
J´ erˆ
C Language 52/ 152
J´ erˆ
C Language 53/ 152
J´ erˆ
C Language 54/ 152
J´ erˆ
C Language 55/ 152
/* Sieve Of Eratosthenes : fi n d prime numbers l e s s than SIZE */ #include <s t d i o . h> #d e f i n e SIZE 100 s t a t i c i n t s i e v e [ SIZE ] ; /* By default , array i n i t i a l i z e d to 0 */ void eratosthenes ( void ) { i n t i , j ; f o r ( i =2; i * i <= SIZE ; i++) i f ( ! s i e v e [ i ] ) /* i - th entry i s a prime number */ f o r ( j = i+i ; j < SIZE ; j += i ) s i e v e [ j ] = 1 ; /* non - prime are multiple
i */ }
J´ erˆ
C Language 56/ 152
J´ erˆ
C Language 57/ 152
J´ erˆ
C Language 58/ 152
6
7
8
9
J´ erˆ
C Language 59/ 152
6
7
8
9
J´ erˆ
C Language 60/ 152
J´ erˆ
C Language 61/ 152
1 one instruction per line, ’;’ being the last character; 2 the layout of the program should be obvious, braces should be
3 use text editors features to indent source; 4 there should be a whitespace character between keywords, and
5 there is no whitespace between a unary operator and the
J´ erˆ
C Language 62/ 152
J´ erˆ
C Language 63/ 152
6
7
8
9
J´ erˆ
C Language 64/ 152
2dynamic arrays are discussed with pointers J´ erˆ
C Language 65/ 152
void f ( void ) { i n t i ; unsigned char tab [ 1 0 ] ; /* tab i s an array
s i z e 10 */ f o r ( i = 0; i < 10; i++) /* i n d i c e s are to 9 */ tab [ i ] = i ; /* a f f e c t i n g values to tab */ }
J´ erˆ
C Language 66/ 152
J´ erˆ
C Language 67/ 152
#include <math . h> s t r u c t point { /* d e f i n i t i o n
a s t r u c t : */ double x , y ; /* two doubles : x , y */ } ; s t r u c t point
0 . , 0. }; /* a v a r i a b l e */ double norm ( s t r u c t point p) { return ( sqrt (p . x * p . x + p . y * p . y ) ) ; /* manipulation */ }
J´ erˆ
C Language 68/ 152
#include <s t d i o . h> enum days { sun , mon, tue , wed , thur , f r i , sat } ; i n t main ( i n t argc , char ** argv ) { enum days a_day = sun ; p r i n t f ( "%d\n" , a_day ) ; /* p r i n t s "0" */ return 0; }
J´ erˆ
C Language 69/ 152
#include <s t d i o . h> union foo { i n t a ; f l o a t b ; }; i n t main ( i n t argc , char ** argv ) { union foo bar ; bar . b = 4 2 . 0 ; p r i n t f ( "%d %f \n" , bar . a , bar . b ) ; /* p r i n t s "1109917696 42.000000" */ return 0; }
J´ erˆ
C Language 70/ 152
s t r u c t _point { f l o a t x , y ; }; typedef s t r u c t _point point ; point a_point = { 0 .5 , 1.0 }; i n t main ( i n t argc , char ** argv ) { a_point . x = 3 . 1 4 ; return 0; }
J´ erˆ
C Language 71/ 152
6
7
8
9
J´ erˆ
C Language 72/ 152
J´ erˆ
C Language 73/ 152
#include <s t d i o . h> i n t main ( i n t argc , char ** argv ) { i n t i = 42 , *p ; p = &i ; p r i n t f ( " i : %d %p\n" , i , &i ) ; p r i n t f ( "p : %p %p\n" , p , &p ) ; p r i n t f ( "*p : %p %d\n" , p , *p ) ; /* p r i n t f ( on a 64 b i t machine ) i : 42 0 x 7 f f f 5 f b f f 8 e c p : 0 x 7 f f f 5 f b f f 8 e c 0 x 7 f f f 5 f b f f 8 e 0 *p : 0 x 7 f f f 5 f b f f 8 e c 42 */ return 0; }
J´ erˆ
C Language 74/ 152
J´ erˆ
C Language 75/ 152
#include <s t d l i b . h> /* f o r malloc () */ #include <s t d i o . h> i n t main ( i n t argc , char ** argv ) { i n t *memory = malloc (100 * s i z e o f ( i n t ) ) ; /* a l l o c a t e */ p r i n t f ( "Memory a l l o c a t e d at %p\n" , memory ) ; f r e e (memory ) ; /* f r e e a l l o c a t e d memory */ return 0; }
J´ erˆ
C Language 76/ 152
J´ erˆ
C Language 77/ 152
J´ erˆ
C Language 78/ 152
J´ erˆ
C Language 79/ 152
#include <s t d l i b . h> i n t main ( i n t argc , char ** argv ) { i n t i , ** array ; array = ( i n t **) malloc (10 * s i z e o f ( i n t * ) ) ; f o r ( i = 0 ; i < 10; i++) array [ i ] = ( i n t *) malloc (10 * s i z e o f ( i n t ) ) ; f o r ( i = 0 ; i < 10; i++) f r e e ( array [ i ] ) ; f r e e ( array ) ; return 0; }
J´ erˆ
C Language 80/ 152
#include <s t d i o . h> i n t main ( i n t argc , char ** argv ) { i n t i ; char * s t r i n g = " Hello World ! " ; f o r ( i = 0; * s t r i n g != ’ \0 ’ ; i++) s t r i n g ++; p r i n t f ( "%s has %d cha ra cters \n" , s t r i n g
i ) ; return 0; }
J´ erˆ
C Language 81/ 152
s t r u c t c e l l { i n t value ; s t r u c t c e l l * next ; } ; typedef s t r u c t c e l l * l i s t ;
J´ erˆ
C Language 82/ 152
void copy ( char *to , char *from , i n t count ) { do { /* count > 0 assumed */ * to++ = *from++; } while ( - - count > 0 ) ; }
J´ erˆ
C Language 83/ 152
void duff_device ( char *to , char *from , i n t count ) { i n t n = ( count + 7) / 8 ; switch ( count % 8){ case 0: do{ * to++ = *from++; case 7: * to++ = *from++; case 6: * to++ = *from++; case 5: * to++ = *from++; case 4: * to++ = *from++; case 3: * to++ = *from++; case 2: * to++ = *from++; case 1: * to++ = *from++; } while ( - - n > 0 ) ; } }
J´ erˆ
C Language 84/ 152
6
7
8
9
J´ erˆ
C Language 85/ 152
J´ erˆ
C Language 86/ 152
/* Return the minimum value
two i n t e g e r s */ i n t min ( i n t a , i n t b) { i n t r e s u l t ; i f ( a <= b) r e s u l t = a ; e l s e r e s u l t = b ; return r e s u l t ; }
J´ erˆ
C Language 87/ 152
J´ erˆ
C Language 88/ 152
#include <s t d i o . h> void swap ( i n t *a , i n t *b) { i n t temp ; temp = *a ; *a = *b ; *b = temp ; } i n t main ( i n t argc , char ** argv ) { i n t a = 42 , b = 51; swap (&a , &b ) ; p r i n t f ( "%d %d\n" , a , b ) ; }
J´ erˆ
C Language 89/ 152
J´ erˆ
C Language 90/ 152
#include <s t d i o . h> #include <stdarg . h> i n t add ( i n t nb , . . . ) { i n t r e s = 0 , i ; va_list parameters ; va_start ( parameters , nb ) ; f o r ( i = 0; i < nb ; i++) r e s += va_arg ( parameters , i n t ) ; va_end( parameters ) ; return ( r e s ) ; } i n t main ( i n t argc , char ** argv ) { p r i n t f ( "%d \n" , add ( 4 , 1 0 , 2 , 8 , 5 ) ) ; return 0; }
J´ erˆ
C Language 91/ 152
/* Print the l i s t
arguments from the command l i n e */ #include <s t d i o . h> i n t main ( i n t argc , char ** argv ) { i n t i ; f o r ( i = 0; i < argc ; i++) p r i n t f ( "argument # %d : %s \n" , i , argv [ i ] ) ; return 0; }
J´ erˆ
C Language 92/ 152
J´ erˆ
C Language 93/ 152
10 C libraries
J´ erˆ
C Language 94/ 152
10 C libraries
J´ erˆ
C Language 95/ 152
J´ erˆ
C Language 96/ 152
J´ erˆ
C Language 97/ 152
#include <s t d i o . h> i n t main ( i n t argc , char ** argv ) { i n t age ; p r i n t f ( "Type your age\n" ) ; /* \n to f l u s h the
*/ scanf ( "%d" , &age ) ; /* read from the stdin */ p r i n t f ( "you typed : %d\n" , age ) ; return 0; }
J´ erˆ
C Language 98/ 152
J´ erˆ
C Language 99/ 152
#include <s t d i o . h> i n t main ( i n t argc , char ** argv ) { FILE * f ; f = fopen ( " t e s t . out" , "w" ) ; /* "w" i n d i c a t e s mode , here write */ f p r i n t f ( f , " Hello World !\ n" ) ; f c l o s e ( f ) ; return 0; }
J´ erˆ
C Language 100/ 152
#include <s t d l i b . h> #include <a s s e r t . h> i n t main ( i n t argc , char ** argv ) { i n t * ptr = malloc ( s i z e o f ( i n t ) * 1 0 ) ; a s s e r t ( ptr != NULL) ; /* a s s e r t ptr i s c o r r e c t l y s e t */ return 0; }
J´ erˆ
C Language 101/ 152
J´ erˆ
C Language 102/ 152
#include <s t d i o . h> #include <time . h> i n t main ( void ) { time_t timer = time (NULL) ; p r i n t f ( "Time
the day %s \n" , ctime(&timer ) ) ; return 0; }
J´ erˆ
C Language 103/ 152
J´ erˆ
C Language 104/ 152
J´ erˆ
C Language 105/ 152
J´ erˆ
C Language 106/ 152
11 Anatomy of a C toolchain 12 The preprocessor 13 Building large C programs 14 Debugging a C Program
J´ erˆ
C Language 107/ 152
11 Anatomy of a C toolchain 12 The preprocessor 13 Building large C programs 14 Debugging a C Program
J´ erˆ
C Language 108/ 152
1 Preprocessing of file: executing statements associates to
2 Compilation of each file: building an object file for each
3 Linking phase: combining object files + prologue to build the
J´ erˆ
C Language 109/ 152
J´ erˆ
C Language 110/ 152
J´ erˆ
C Language 111/ 152
J´ erˆ
C Language 112/ 152
11 Anatomy of a C toolchain 12 The preprocessor 13 Building large C programs 14 Debugging a C Program
J´ erˆ
C Language 113/ 152
J´ erˆ
C Language 114/ 152
J´ erˆ
C Language 115/ 152
J´ erˆ
C Language 116/ 152
/* Define booleans */ #i f n d e f __BOOL_H_ #d e f i n e __BOOL_H_ #i f __STDC_VERSION__ >= 199901L /* We are using a C99 compiler , nothing to do */ # include <stdbool . h> #e l s e # d e f i n e bool unsigned char ; # d e f i n e f a l s e ( bool )0 # d e f i n e true ( bool )1 #e n d i f /* __STDC_VERSION__ */ #e n d i f /* __BOOL_H_ */
J´ erˆ
C Language 117/ 152
J´ erˆ
C Language 118/ 152
11 Anatomy of a C toolchain 12 The preprocessor 13 Building large C programs 14 Debugging a C Program
J´ erˆ
C Language 119/ 152
J´ erˆ
C Language 120/ 152
J´ erˆ
C Language 121/ 152
J´ erˆ
C Language 122/ 152
J´ erˆ
C Language 123/ 152
J´ erˆ
C Language 124/ 152
J´ erˆ
C Language 125/ 152
J´ erˆ
C Language 126/ 152
11 Anatomy of a C toolchain 12 The preprocessor 13 Building large C programs 14 Debugging a C Program
J´ erˆ
C Language 127/ 152
J´ erˆ
C Language 128/ 152
J´ erˆ
C Language 129/ 152
J´ erˆ
C Language 130/ 152
J´ erˆ
C Language 131/ 152
J´ erˆ
C Language 132/ 152
J´ erˆ
C Language 133/ 152
J´ erˆ
C Language 134/ 152
15 Bit manipulation 16 Storage class 17 Case study: Arduino AVR board
J´ erˆ
C Language 135/ 152
J´ erˆ
C Language 136/ 152
15 Bit manipulation 16 Storage class 17 Case study: Arduino AVR board
J´ erˆ
C Language 137/ 152
J´ erˆ
C Language 138/ 152
J´ erˆ
C Language 139/ 152
typedef s t r u c t { unsigned i n t reg_status : 1 ; /* f i e l d
1 b i t */ unsigned i n t data : 4; unsigned i n t padding : 3 ; /* 3 b i t s
padding */ } _ b i t f i e l d ; void f ( void ) { _ b i t f i e l d f i e l d ; f i e l d . reg_status = 1 ; f i e l d . data = 0x0b ; }
J´ erˆ
C Language 140/ 152
enum status {
} ;
J´ erˆ
C Language 141/ 152
15 Bit manipulation 16 Storage class 17 Case study: Arduino AVR board
J´ erˆ
C Language 142/ 152
J´ erˆ
C Language 143/ 152
#include <s t d i o . h> void f ( void ) { s t a t i c i n t storage ; /* i n i t i a l i z e d to 0 */ p r i n t f ( " storage = %d\n" , storage ++); /* v a r i e s from 1 to 10 */ } i n t main ( i n t argc , char ** argv ) { i n t i ; f o r ( i = 0; i < 10; i++) f ( ) ; return 0; }
J´ erˆ
C Language 144/ 152
15 Bit manipulation 16 Storage class 17 Case study: Arduino AVR board
J´ erˆ
C Language 145/ 152
J´ erˆ
C Language 146/ 152
#include <avr / i o . h> #include <u t i l / delay . h> i n t main ( void ) { /* I n i t i a l i z a t i o n part */ DDRB |= (1 < < DDB5) ; /* s e t PB5 f o r
/* Main i n f i n i t e loop */ while (1) { PORTB |= (1 < < PORTB5) ; /* s e t PB5 high */ _delay_ms ( 1 0 0 0 . 0 ) ; PORTB &= ~(1 < < PORTB5) ; /* s e t PB5 low */ _delay_ms ( 1 0 0 0 . 0 ) ; } return 1; }
J´ erˆ
C Language 147/ 152
J´ erˆ
C Language 148/ 152
18 Conclusion
J´ erˆ
C Language 149/ 152
18 Conclusion
J´ erˆ
C Language 150/ 152
J´ erˆ
C Language 151/ 152
J´ erˆ
C Language 152/ 152