- langage compiler
- base : fichier text nomer avec un ".c"
- c'est un langage compiler
- on travaille dans le "fichier source" (celui que l'on compile)
- Consaille rester sur de ASCII (sans accents)
Le C :
Fonction particuliere : main()
fonction de "base" de C, c'est celui qui est executer en premier. on peu inclure des librairies ( ex : on en a besion pour faire un print)
Ex :
#include <stdio.h>
On doit declarer les variable avant de pouvoir les utilisers (ex : "int toto;")
Type de variable :
- int, -> entier (32 bits sur PC)
- float, -> nombre a virgule (32/64 bits sur PC)
- double, -> nombre a virgule ( +grand) (64/128 bits sur PC)
- char, -> entier sur 1 octet
- (viod)
Les tailles :
- int >= char
- double >= float
Chaque instruction termine par un ";"
definition d'une variable :
(modificateur) type nom.variable ;
ex :
|| float B;
|| int toto;
-
modifie sur la taille, ex ; short (reduit la taille), long (augmente la taille de la variable)
-
modifie la presence du signe, ex ; signet (par defaut), unsigne (enleve le bite de signe) (ex si un "unsigned char L;" de base une variable sur 8 bits vas de -127 a +127 elle ira de 0 a 255)
int i;
-> de base juste comme ça il vaut ce qui il y avait avant a sont enplacement de RAM.
i = 17;
-> "=" -> recoit -> opérteur d'affectation -> on peut lui affecter un valeur ou une expression -> l'instrucation est calculer de droite a gauche
<variable> **=** valeur;
<variable> = expretion,
Autre exenple :
a = i = 17
on affect "17" a "i" et ce resultat a "a"
Autre operateur :
<variable> **+=** valeur;
Ex :
i = i + 1;
i += 1;
-
+=
-
-=
-
*=
-
/=
-
<<= (decalage a gauche) (utiliser pour simplifier les operation pour eviter les divisions)
-
[]>>= (decalage a droite)
int i; i = 12; i = 5/2; !! pas possible car i est un int et 5 et 2 aussi
== ->Test d'egaliter
!= ->Test different
Tandis que :
i = ((float)5)/((float)2); -> fonctionne
i = 5.0 / 2.0 -> fonctionne le compilateur comprend
Exemple de code :
#include <stdio.h>
int main{
int i;
printf("i vaut %d \n",i);
return 0;
}
-> pour un int %d -> pour un float %f -> pour un long int %ld -> pour un double %lf -> pour un char %c (-> pour un chaine de char %s) (string = tableau de char)
En C il n'y a pas de type boulein (si c'est 0 c'est vrai si c'est autre chose c'est faux)
if(expression)
expression; ou {bloc}
Ex :
if (i==0)
printf("i est nul \n");
// le if prend que la premiere ligne donc :
if (i==0){
printf("i est nul \n");
printf("i est nul !\n");
}
if(expression)
expression; ou {bloc}
else
bloc ou instruction
wile (expression)
bloc ou instruction
// 1 je test 2 je fait tant que
do
bloc ou instruction
while(expretion);
// je fait et je test si je doit reboucler
for(exp1;exp2;exp3)
bloc ou intruction
Ex :
for (i=0; i<10; i++)
//depart;test;pas
printf("Coucou\n")
// execution : exp1 > contenue > exp3 > exp2
// si vrai : > contenue
// si faux (go next)
Ex bouvle infinie :
for(;;)
switch(expression){
case valeur :
bloc ou instruction
break;
case valeur :
bloc ou instruction
break;
.
.
.
default : ...
}
Ex :
int i;
i = 17
switch(i){
case 14 :
printf("A");
break;
case 17 :
printf("A");
break;
case 18 :
printf("C");
case 22 :
printf("D");
break;
default :
printf("E");
}
Resultat :
- i = 17 -> B
- i = 12 -> A
- i = 51 -> E
- i = 18 -> CD
- i = 22 -> D
Chose qui marche pas :
case 12+1 :... (pas d'expretion)
case a :... (pas de variavle)
Ex :
char d;
char e;
d = 65;
e = 'A';
if (e == d)
printf("Pareil \n");
a = 'C';
a = '\n';
a = 17.9;
a = oxFFB2;
a = 0b10011101
ou a = 2b10011101
Une variable est valide que dans son bloque de declaration
Ex :
#include <stdio.h>
int main{
int i;
for (i=0; i<10; i++){
int a;
a = 17
printf("%d \n",a),
}
printf("%d \n",a);
return 0;
}
Syntaxe :
cc -o fablab alaide.c
cc -o (executable generer) (fichier de base)
Moins bien :
gcc -o fablab alaide.c
Pour executer :
./fablab
Tips bash :
Si on a un return "return 0;" et que l'on fait ./fablab && eject /dev/cdrom
On aura tout executer
Et :
Si on a un return "return 1;" et que l'on fait ./fablab && eject /dev/cdrom
On aura pas le eject
Avec un pointeur: int** c; int* b; int a; a = 17;
b = &a -> adresse de a
// pour la stoquer on a besion de : int* b; qui sert a stoquer les adresses des int
c= &b
// pour la stoquer on a besion de : int** c; qui sert a stoquer les adresses des int*
Pour les adress on utilise donc les etoiles ex : "float*"
Un tableau n'est que la valeur de la premiere case.
int c;
printf("Entrez un chiffre ? \n");
scanf("%d",&c);
Faire les premier TP de python en C