Merci de me signaler toute omission, ambiguïté ou erreur à cette adresse : webmaster@barbier-accary.info.
C fait la différence entre minuscules et majuscules,
donc attention à la typographie !
;". On
appelle ici phrase un bloc sémantique d'instruction tel que "je
déclare des entiers i et j" qui s'écrit int i, j; ou encore "j'affecte
à la variable v la valeur de retour de la fonction F qui n'a pas de
paramètre" qui s'écrit v = F();. Les blocs
composés tels
que if (<test>) { <instructions du alors> } else { <instructions
du sinon> } ou les boucles ne se terminent pas par un
point virgule car les accolades (nécessaires lorsqu'il y a plus d'une
instruction) jouent le rôle de délimiteur.int), le flottant
(float) et le caractère
(char).p
donnée, aucun flottant n'existe entre 1.10-p et
2.10-p par exemple).
int i;
float r;
char c;
int i,j;)int :
short et long. short utilise deux fois
moins d'octets pour stocker la variable, et long deux fois plus.unsigned avant le type int
ou char dans la définition (ex: unsigned int entierpos;).
Attention dans ce cas aux effets de boucle lorsque l'on décrémente un
entier non signé ayant pour valeur 0, le test (entierpos < 0) sera ainsi toujours faux !!double. Un double
est un flottant en double précision.bool
qui peut prendre les valeurs vrai (true) et faux
(false).<type d'une case>
mon_tableau[<nombre de cases>];.=.
On doit faire des affectations case par case. On accède à la ième case d'un tableau par mon_tableau[i-1].char chaine[128];. Pour
simplifier les manipulations des chaînes de caractères, on utilise des
instructions du fichier d'en-têtes <string.h> (cf
utilisation de fichiers d'en-têtes) comme strcpy (pour string copy) et
strcat (pour string concate).strcpy (chaine, "mon ");
donne la valeur "mon " à la variable chaine.strcat(chaine,
"nom"); concatène la valeur "nom" à celle de chaine."mon nom".'\0'
pour marquer la fin de la chaîne.typedef (ex : typedef unsigned char bool; pour ajouter le type
bool au C s'il n'existe pas). typedef et struct.typedef
struct
{
char
nom[20];
char
prenom[20];
unsigned int age;
} Personne;Personne
personne1;
strcpy(personne1.nom, "Dupont");
strcpy(personne1.prenom, "Jean");
personne1.age = 20;." pour séparer le nom de la variable et un de ses
champs.const.<type fonction> MaFonction(<type param1>
param1, ..., <type paramN> paramN)
{
<déclaration des variables locales>
<corps de la
fonction>
return(<constante, variable ou
résultat du type de la fonction>);
}void
entre les parenthèses.<type param1> var1;
...
<type paramN> varN;
<type fonction> ma_variable;
ma_variable = MaFonction(var1, ..., varN);& entre le type et le nom du paramètre). Une référence est
un synonyme ; le paramètre transmis et celui reçu sont donc totalement
équivalents.& pour pouvoir modifier les cases d'un tableau.void) et de ne pas terminer le corps par la commande
return devenue inutile..h
qu'il faut inclure de la manière suivante : #include <nom.h>#include "mon-en-tete.h"iostream.h. Pour utiliser
des fonctions mathématiques (cos, constante M_PI,
...) il faut inclure le fichier d'en-tête math.h. Pour les
fonctions sur les chaînes de caractères, on utilise string.h..h dans lequel vous ne mettrez que les prototypes des
fonctions que vous définirez dans un autre fichier .c
(généralement de même nom). Les fichiers .h et .c
créés doivent être ajoutés au projet.cout << "entier : " << 1 << ", flottant : " << 1.0
<< ", caractère : " << 'c' << ", chaîne : " << "chaine" << endl;endl indique un saut de ligne (END of Line).cin >> variable;cin >> var1 >> var2;
ou cin >> var1 >> endl;variable est un
tableau, il faut faire un cin pour chacune des cases du tableau : for(i=0; i<n; i++) cin >>
tableau[i];char machaine[128]; cin >> machaine;printf("entier : %d, flottant : %f, caractère : %c, chaîne : %s\n",
1, 1.0, 'c', "chaine");\n est le caractère d'échappement indiquant un saut de ligne.scanf("%d", &variable_entiere);%d, %f, %c, %s).& est obligatoire pour saisir un entier, un fottant
ou un caractère mais il ne doit pas être utilisé lors de la saisie d'une chaîne de caractères.= est l'opérateur d'affectation, il faut le lire
reçoit.
Ainsi, x = 2 * y; se lit x reçoit le double de la
valeur de y.+, -, *, /./
représente la
division entière si les deux opérandes
sont des nombres entiers.
% : calcule le modulo
(reste de la division entière).sqrt(x) : calcule la racine
carrée de x.++ : var_entiere++ ou ++var_entiere
est équivalent à
var_entiere = var_entiere + 1-- : var_entiere-- ou --var_entiere
est équivalent à var_entiere = var_entiere - 1var++ et ++var (idem avec --) :int i=0, j; |
int i=0, j; |
+= : var1+= var2 est équivalent à var1 = var1 + var2-=, *=, /=== : (var1 == var2) se lit est-ce que
var1 à la même valeur que var2 ?<, >, <=, >=
strcmp(chaine1,chaine2)
qui renvoit un nombre négatif, nul (égalité) ou positif.&& (et),
|| (ou), ! (non)(((var1<var2) &&
(var2<var3)) || ((var1>var2) && (var2 > var3))).& ou un seul |, le et binaire
et le ou binaire se font bit à bit.11 & 6 == 2 car en binaire 1011 & 0110 == 0010<< et >> sont des opérateurs de
déplacement et correspondent respectivement à des multiplication et division par des puissances de 2.1 << 3 == 8 car on déplace l'entier 1 de 3 positions sur la gauche, ce
qui donne 1000, soit 23=8.if (<test>) { <instructions du alors> } else {
<instructions du sinon> }if peuvent être imbriqués les uns dans les autres.
Dans ce cas, il est préférable de toujours mettre des accolades afin
d'éviter les problèmes de mauvais branchements de parties alors ou
sinon.
(<test>) ? { <instructions du si vrai> } :
{ <instructions du si faux> }double Minimum(double x, double y) { return (x<y) ? x : y; }switch (<variable entière>) {
case <valeur 1> :
<instructions>
[break;]
...
case <valeur N> :
<instructions>
[break;]
[default: <instructions pour les autres cas>]
}
[] indiquent les parties
optionnelles. Si un break n'est pas placé à la fin des
instructions d'un
case, alors les instructions du case d'après
seront également exécutées. La partie default permet de gérer
tous les autres cas non déclarés explicitement.do { <corps de la boucle> } while (<test de
répétition de boucle>);while(<test d'entrée de boucle>) { <corps de la
boucle> }do-while et whiledo-while est effectué au moins une
fois alors que celui d'une boucle while peut ne jamais être
effectué ! for(<initialisation>; <test d'entrée de boucle>; <incrémentation>) { <corps de boucle>
}for est une écriture plus simple
d'une boucle
while. Les deux programmes ci-dessous sont totalement
équivalents :i = 0; |
|
<inclusion des fichiers d'en-têtes>
<déclarations des types>
<déclarations des fonctions et procédures>
int main(void)
{
<corps du programme principal>
return EXIT_SUCCESS;
}
/* et */.// sur une ligne est
considéré comme un commentaire également (issu du C++).52 vaut 2*100+5*101.x0*20 +
x1*21 + x2*22 + ....0 ou 1) de droite à gauche.52=26*2+0 puis
26=13*2+0, 13=6*2+1, 6=3*2+0,
3=1*2+1 et 1=0*2+1 donc 52 s'écrit 110100.1 alors qu'il vaut
0 pour un entier négatif.int sont codés sur 4 octets, soit 32 bits.1 à la place des 0 et vice-versa) puis on
ajoute 1 à ce nombre.-52 s'écrit
11001100 car 52 s'écrit 00110100 et son complément
à 1 est 11001011.n et -n, on obtient bien zéro
mais avec un 1 de retenue dans le bit suivant du bit de poids fort (le
neuvième si on travaille avec 8 bits).float est codé sur 32 bits de la façon suivante (dans cet ordre)
-126 à 127
00000000 et 11111111 sont interdits)s|eeeeeeee|mmm...mmm pour représenter le flottant
(-1)s * 1,mmm...mmm * 2eeeeeeee-127.float est
déjà très importante. En cas de besoin, on utilise le type double qui
défini les flottants en double précision (11 bits d'exposant et 52 bits de mantisse).-52,40625 la valeur absolue
de la partie entière (52) s'écrit 110100 et la partie décimale
0,40625 = 0*0,5 + 1*0,25 + 1*0,125 + 0*0,0625 + 1*0,03125 soit 01101.-110100,01101 est noté (-1)1 *
1,1010001101 * 26=133-127 et on a donc 1 pour le bit de signe,
10000101b = 00000110b + 01111111b pour l'exposant et 1010001101
pour mantisse (le 1, étant obligatoire, il n'est pas représenté).-52,43 s'écrit 1|10000101|10100011010000000000000.