Bases du langage C
1)PREMIERS PROGRAMMES:
Un programme informatique réalise en général trois choses :
• Il lit des données en entrée. Le programme doit en effet savoir à partir de quoi travailler.
Par exemple, pour utiliser une calculatrice, on doit lui donner des nombres
et lui dire quelles opérations effectuer. Pour cela, on utilise souvent un clavier,
mais le programme peut aussi tirer les données d’un disque dur ou encore d’un
autre ordinateur via un réseau ou autre.
• Il effectue des calculs. À partir des données en entrée, le programme va appliquer
automatiquement des méthodes pour traiter ces données et produire un résultat.
Les méthodes que sont capables d’effectuer les ordinateurs s’appellent des algorithmes.
Par exemple, une calculatrice va appliquer l’algorithme d’addition ou de
multiplication.
• Il écrit des données en sortie. Lorsque le programme a obtenu un résultat, il
doit écrire ce résultat quelque part pour qu’on puisse l’utiliser. Par exemple, une
calculatrice va afficher un résultat à l’écran ou stocker le résultat en mémoire.
Le travail d’un programmeur consiste à créer des programmes informatiques. Le
programmeur doit pour cela expliquer à l’ordinateur dans un certain langage, appelé
langage de programmation, quelles sont les données et quelles sont les méthodes à
appliquer pour traiter ces données. Dans ce chapitre, nous verrons en langage C, les
premiers exemples permettant :
1. de lire une donnée au clavier avec la fonction scanf ;
2. d’effectuer les calculs les plus simples sur des nombres et de stocker le résultat
dans une variable ;
3. d’afficher un texte ou un nombre à l’écran avec la fonction printf.
Ce faisant, nous verrons la structure d’un programme C très simple et quelques
notions sur la syntaxe du langage. Les notions vues dans ces exemples seront développées
dans les chapitres suivants. Une fois que le programmeur a écrit son programme,
qui est du texte en langage C, il doit compiler le programme pour créer un
fichier exécutable pour qu’un utilisateur du programme puisse utiliser ce programme.Le processus de compilation est décrit en annexe.
1.2 )AFFICHER UN MOT
Voici un programme C qui écrit un message de bienvenue : le mot “Bonjour”.
#include <stdio.h>
int main(void) /* programme principal */
{
printf("Bonjour !\n"); /* écriture à l’écran */
return 0;
¨ }
1.3 LIRE UN NOMBRE
Voici un programme permettant à l’utilisateur de taper un nombre au clavier. Ce
nombre est lu par le programme et mémorisé dans une variable x qui est un nombre
réel (type de données float). La variable x est ensuite ré-affichée par printf.
#include <stdio.h> /* pour pouvoir lire et écrire */
int main(void) /* programme principal */
{
float x; /* déclaration d’une variable x (nombre réel) */
printf("Veuillez entrer un nombre réel au clavier\n");
scanf("%f", &x); /* lecture au clavier de la valeur de x */
/* affichage de x : */
printf("Vous avez tapé %f, félicitations !", x);
return 0;
}
🔺 Ne pas oublier le & dans le scanf ! Cela provoquerait une erreur mémoire (ou erreur
de segmentation) lors de l’exécution du programme, et le programme serait
brutalement interrompu.
1.4 EFFECTUER UN CALCUL ET MÉMORISER
LE RÉSULTAT
Le programme suivant mémorise le double de x dans une variable y, par le biais d’une
affectation. L’affectation (symbole =) permet de stocker le résultat d’un calcul dans
une variable.
#include <stdio.h> /* pour pouvoir lire et écrire */
int main(void) /* programme principal */
{
float x, y; /* déclaration de deux variables x et y */
printf("Veuillez entrer un nombre réel au clavier\n");
scanf("%f", &x) ; /* lecture au clavier de la valeur de x */
y = 2*x; /* on met dans y le double du contenu de x */
printf("Le double du nombre tapé vaut %f \n", y);
return 0;
}
🔺 Le symbole de l’affectation a une toute autre signification que l’égalité mathématique.
L’affectation signifie qu’une variable prend la valeur du résultat d’un calcul.
Il correspond à une opération de recopie d’une donnée.
Exercices:
1: (∗) Pour convertir des degrés Fahrenheit en degrés Celsius, on a la formule suivante:
C = 0.55556 × (F − 32)
où F est une température en degrés Fahrenheit et C la température correspondante en
degrés Celsius.
a) Écrire un programme C qui convertit une température entrée au clavier exprimée en degrés Fahrenheit et affiche une valeur approchée de la même température en degrés
Celsius. Les températures seront exprimées par des nombres réels.
b) Même question qu’au a) pour la conversion inverse : de degrés Celsius en degrés
Fahrenheit.
2 (∗) Lors d’une opération de promotion, un magasin de composants hardware
applique une réduction de 10% sur tous les composants. Écrire un programme qui
lit le prix d’un composant au clavier et affiche le prix calculé en tenant compte de la
réduction.
2.1 (∗∗) Soit la fonction mathématique f définie par f (x) = (2x + 3)(3x² + 2)
a) Écrire un programme C qui calcule l’image par f d’un nombre saisi au clavier.
b) Une approximation de la dérivée f ' de la fonction f est donnée en chaque point x,
pour h assez petit (proche de 0), par :
f'(x) =f (x + h) − f (x)/h
Écrire un programme C qui calcule et affiche une approximation de la dérivée de f
en un point x entré au clavier. On pourra faire saisir le paramètre h au clavier.
Corrigés
1)
a
int main(void)
{
float celsius, fahrenheit;
printf("Entrez une température en degrés Fahrenheit : ");
scanf("%f", &fahrenheit);
celsius = 0.55556 * (fahrenheit - 32.0);
printf("Température de %f degré Celsius.\n", celsius);
return 0;
}
b)
int main(void)
{
float celsius, fahrenheit;
printf("Entrez une température en degrés Celsius : ");
scanf("%f", &celsius);
fahrenheit = (celsius / 0.55556) + 32.0;
printf("Température de %f degré Fahrenheit.\n", fahrenheit);
return 0;
}
2.1
int main(void)
{
float prix, prixRemise;
printf("Entrez un prix : ");
scanf("%f", &prix);
prixRemise = 0.9 * prix;
printf("Le prix avec 10 %% de remise est de %f.\n", prixremise);
return 0;
}
2.1
a)
int main(void)
{
float x, fx;
printf("Entrez un nombre : ");
scanf("%f", &x);
fx = (2.0 * x + 3.0) / (3.0 * x * x + 2.0);
printf("f(%f) = %f\n", x, fx);
return 0;
}
b)
int main(void)
{
float x, h, fx, fx_plus_h, fPrime_x;
printf("Entrez un nombre : ");
scanf("%f", &x);
printf("Entrez un écart h : ");
scanf("%f", &h);
fx = (2.0 * x + 3.0) / (3.0 * x * x + 2.0);
fx_plus_h = (2.0 * (x + h) + 3.0) / (3.0 * (x + h) * (x + h) + 2.0);
fPrime_x = (fx_plus_h - fx) / h;
printf("f’(%f) = %f\n", x, fPrime_x);
return 0;
}
2)TYPES DE DONNÉES:
2.1 VARIABLES ET OPÉRATIONS
Dans un programme, il apparaît des variables qui permettent de donner des noms à
des données. Chaque variable doit avoir un type (nombre entier, nombre réel, caractère,
suite de caractères, ou type plus complexe). Chaque variable a aussi un identificateur
qui est le nom de la variable. Une déclaration de variable a toujours la forme :
type identificateur;
ou bien la forme avec l’initialisation (c’est-à-dire que l’on donne à la variable une valeur initiale) :
type identificateur = valeur;
On peut aussi déclarer plusieurs variables d’un même type séparées par des virgules.
2.2 TYPE ENTIER int
Le type int (abréviation de l’anglais integer) est une représentation des nombres
entiers. Comme toute variable informatique, un int ne peut prendre qu’un nombre
fini de valeur. Un int est généralement codé sur 4 octets (32 bits).Dans ce cas, les
valeurs sont entre −231 et 231 − 1 (ce qui fait bien 232 valeurs possibles). Notons que
sur certains vieux systèmes, les int sont codés seulement sur 2 octets.
Les opérations arithmétiques binaires +, −, ∗, / sont définies sur les int et donnent
toujours pour résultat un int.
#include <stdio.h>
int main(void)
{
int nombre, chiffre;
puts("Tapez un nombre entier :");
scanf("%d", &nombre);
chiffre = nombre%10;
printf("Le dernier chiffre est : %d", chiffre);
return 0;
}
2.3 LES TYPES RÉELS float ET double
Les types float et double permettent de représenter des nombres réels avec une certaine précision (suivant une représentation des nombres appelée virgule flottante ou nombre flottant). Un nombre réel tel qu’il est ainsi représenté possède une mantisse (des chiffres) et
un exposant qui correspond à la multiplication par une certaine puissance de 10. Par
exemple 3.546E − 3 est égal à 3.546 × 10−3, ce qui fait 0.003546.
Le type double (codé sur 8 octets) est plus précis que le type float (codé sur 4 octets).
La valeur maximale d’un double est d’environ 10308 alors que celle d’un float
est de l’ordre de 1038. (Les valeurs limites exactes sont données par les constantes
DBL_MAX et FLT_MAX de la bibliothèque float.h).
2.4 LE TYPE char
Le type char (abréviation de l’anglais character) est un type caractère codé sur
1 octet. C’est la plus petite donnée qui puisse être stockée dans une variable. Les
valeurs (de −126 à 125) peuvent réprésenter des caractères conventionnels.
Par exemple, les caractères alphabétiques majuscules A, B, . . . , Z ont pour valeur
65, 66, . . . , 90 et les minuscules correspondantes a, b, . . . , z ont pour valeurs
97, 98, . . . , 122. On appelle ce codage des caractères le code ASCII.
Une variable de type char peut être considérée soit comme un nombre, soit comme
un caractère que l’on peut afficher. Dans tous les cas, il s’agit du même type. Pour
désigner par exemple le caractère Z dans un programme, on peut soit écrire ’Z’ (entre
quotes), soit écrire 90 qui est le code ASCII du caractère Z. Dans les deux cas il s’agit
du même caractère et de la même donnée qui peut être stockée dans la même variable
de type char.
2.5 LES TYPES unsigned
Aux types int et char correspondent des types unsigned int (aussi sur 4 octets) et
unsigned char (aussi sur 1 octet) qui représentent uniquement des valeurs positives.
Un unsigned int sur 4 octets va de 0 à 232 − 1.
Un unsigned char sur 1 octet va de 0 à 28 − 1 (c’est-à-dire de 0 à 255).
2.6 AFFECTATIONS ET CONVERSIONS
Étant données deux variables de même type, on peut recopier le contenu d’une variable
dans l’autre par une affectation (signe =). Plus généralement, on peut copier
dans une variable la valeur de toute une expression.
Si les deux variables sont de types différents, l’opération d’affectation = va réaliser,
lorsque c’est possible, une conversion. Si la conversion n’est pas possible, le
compilateur affichera un message d’erreur.
Exemple d’affectation
int var1=0, var2=3; /* déclarations avec initialisations */
var1=2*var2+1; /* affectation : après ceci var1 vaut 7 */
Exemple de conversion d’un float vers un int
int n;
float x=7.6587e2;
n = (int)x; /* après ceci n vaut 765 (arrondi à la partie entière) */
🔺 Pour le calcul de deuxtiers ci-dessus, écrire deuxtiers=n/m ou encore deuxtiers=2/3
est une grave erreur qui conduit au résultat que deuxtiers est égal à 0, car le
quotient entre entiers donne une division euclidienne, même lorsqu’on l’affecte
ensuite à un float ou un double.
2.7 LES CONSTANTES ET LE #define
Une constante est une valeur qui n’est pas susceptible de varier lors de l’exécution
d’un programme. Par exemple, 9.81 est une constante de type float, 1024 est une
constante de type int (qui peut aussi être affectée à une variable de type float).
Enfin, 65, ou "A" est une constante de type char (qui peut aussi être affectée à un int
ou un float).
🔺 Ne pas confondre le caractère ’6’, dont le code ASCII vaut 54, avec le caractère 6,
dont le code ASCII vaut 6, mais qui représente un autre caractère.
2.8 DÉFINIR SES PROPRES TYPES
En C, le programmeur peut définir ses propres types et donner les noms qu’il veut à
ses types. Pour donner un nom à un type, on utilise typedef. Dans l’exemple suivant,
le programmeur a préféré appeler les nombres entiers Entier plutôt que int.
#include <stdio.h>
typedef int Entier; /* Définition d’un nouveau type Entier */
int main(void)
{
Entier d, n;
scanf("%d", &n);
d = 2*n;
printf("Le double de %d est %d\n", n, d);
return 0;
}
Dans ce cas, le type Entier est simplement sinonyme de int. Nous verrons plus
loin comment définir des types plus compliqués pour représenter des informations de
toutes sortes. Les différents types définis et utilisés dans un programme s’appellent
les structures de données.
Exercices
3.1 (∗) Sachant que le premier avril 2004 était un jeudi, écrire un programme qui
détermine le jour de la semaine correspondant au 4 mai de la même année. On pourra
représenter les jours de la semaine par des numéros allant de 0 à 6.
3.2 (∗) Écrire un programme qui lit un nombre au clavier, répond 1 si le nombre est
impair et 0 si le nombre est pair.
Corrigés
3.1
int main(void)
{
int njours;
/* Convention : 0 <-> lundi, ... 6 <-> Dimanche
33 jours écoulés entre le 1er avril et le 4 mai */
njours = (33 + 3) % 7 + 1;
printf("Le 4 mai était le %d ème jour de la semaine.\n", njours);
return 0;
}
3.2
int main(void)
{
int n, parite;
printf("Entrez un nombre : ");
scanf("%d", &n);
parite = n % 2;
printf("La parité du nombre est %d\n", parite);
return 0;
}
1)PREMIERS PROGRAMMES:
Un programme informatique réalise en général trois choses :
• Il lit des données en entrée. Le programme doit en effet savoir à partir de quoi travailler.
Par exemple, pour utiliser une calculatrice, on doit lui donner des nombres
et lui dire quelles opérations effectuer. Pour cela, on utilise souvent un clavier,
mais le programme peut aussi tirer les données d’un disque dur ou encore d’un
autre ordinateur via un réseau ou autre.
• Il effectue des calculs. À partir des données en entrée, le programme va appliquer
automatiquement des méthodes pour traiter ces données et produire un résultat.
Les méthodes que sont capables d’effectuer les ordinateurs s’appellent des algorithmes.
Par exemple, une calculatrice va appliquer l’algorithme d’addition ou de
multiplication.
• Il écrit des données en sortie. Lorsque le programme a obtenu un résultat, il
doit écrire ce résultat quelque part pour qu’on puisse l’utiliser. Par exemple, une
calculatrice va afficher un résultat à l’écran ou stocker le résultat en mémoire.
Le travail d’un programmeur consiste à créer des programmes informatiques. Le
programmeur doit pour cela expliquer à l’ordinateur dans un certain langage, appelé
langage de programmation, quelles sont les données et quelles sont les méthodes à
appliquer pour traiter ces données. Dans ce chapitre, nous verrons en langage C, les
premiers exemples permettant :
1. de lire une donnée au clavier avec la fonction scanf ;
2. d’effectuer les calculs les plus simples sur des nombres et de stocker le résultat
dans une variable ;
3. d’afficher un texte ou un nombre à l’écran avec la fonction printf.
Ce faisant, nous verrons la structure d’un programme C très simple et quelques
notions sur la syntaxe du langage. Les notions vues dans ces exemples seront développées
dans les chapitres suivants. Une fois que le programmeur a écrit son programme,
qui est du texte en langage C, il doit compiler le programme pour créer un
fichier exécutable pour qu’un utilisateur du programme puisse utiliser ce programme.Le processus de compilation est décrit en annexe.
1.2 )AFFICHER UN MOT
Voici un programme C qui écrit un message de bienvenue : le mot “Bonjour”.
#include <stdio.h>
int main(void) /* programme principal */
{
printf("Bonjour !\n"); /* écriture à l’écran */
return 0;
¨ }
1.3 LIRE UN NOMBRE
Voici un programme permettant à l’utilisateur de taper un nombre au clavier. Ce
nombre est lu par le programme et mémorisé dans une variable x qui est un nombre
réel (type de données float). La variable x est ensuite ré-affichée par printf.
#include <stdio.h> /* pour pouvoir lire et écrire */
int main(void) /* programme principal */
{
float x; /* déclaration d’une variable x (nombre réel) */
printf("Veuillez entrer un nombre réel au clavier\n");
scanf("%f", &x); /* lecture au clavier de la valeur de x */
/* affichage de x : */
printf("Vous avez tapé %f, félicitations !", x);
return 0;
}
🔺 Ne pas oublier le & dans le scanf ! Cela provoquerait une erreur mémoire (ou erreur
de segmentation) lors de l’exécution du programme, et le programme serait
brutalement interrompu.
1.4 EFFECTUER UN CALCUL ET MÉMORISER
LE RÉSULTAT
Le programme suivant mémorise le double de x dans une variable y, par le biais d’une
affectation. L’affectation (symbole =) permet de stocker le résultat d’un calcul dans
une variable.
#include <stdio.h> /* pour pouvoir lire et écrire */
int main(void) /* programme principal */
{
float x, y; /* déclaration de deux variables x et y */
printf("Veuillez entrer un nombre réel au clavier\n");
scanf("%f", &x) ; /* lecture au clavier de la valeur de x */
y = 2*x; /* on met dans y le double du contenu de x */
printf("Le double du nombre tapé vaut %f \n", y);
return 0;
}
🔺 Le symbole de l’affectation a une toute autre signification que l’égalité mathématique.
L’affectation signifie qu’une variable prend la valeur du résultat d’un calcul.
Il correspond à une opération de recopie d’une donnée.
Exercices:
1: (∗) Pour convertir des degrés Fahrenheit en degrés Celsius, on a la formule suivante:
C = 0.55556 × (F − 32)
où F est une température en degrés Fahrenheit et C la température correspondante en
degrés Celsius.
a) Écrire un programme C qui convertit une température entrée au clavier exprimée en degrés Fahrenheit et affiche une valeur approchée de la même température en degrés
Celsius. Les températures seront exprimées par des nombres réels.
b) Même question qu’au a) pour la conversion inverse : de degrés Celsius en degrés
Fahrenheit.
2 (∗) Lors d’une opération de promotion, un magasin de composants hardware
applique une réduction de 10% sur tous les composants. Écrire un programme qui
lit le prix d’un composant au clavier et affiche le prix calculé en tenant compte de la
réduction.
2.1 (∗∗) Soit la fonction mathématique f définie par f (x) = (2x + 3)(3x² + 2)
a) Écrire un programme C qui calcule l’image par f d’un nombre saisi au clavier.
b) Une approximation de la dérivée f ' de la fonction f est donnée en chaque point x,
pour h assez petit (proche de 0), par :
f'(x) =f (x + h) − f (x)/h
Écrire un programme C qui calcule et affiche une approximation de la dérivée de f
en un point x entré au clavier. On pourra faire saisir le paramètre h au clavier.
Corrigés
1)
a
int main(void)
{
float celsius, fahrenheit;
printf("Entrez une température en degrés Fahrenheit : ");
scanf("%f", &fahrenheit);
celsius = 0.55556 * (fahrenheit - 32.0);
printf("Température de %f degré Celsius.\n", celsius);
return 0;
}
b)
int main(void)
{
float celsius, fahrenheit;
printf("Entrez une température en degrés Celsius : ");
scanf("%f", &celsius);
fahrenheit = (celsius / 0.55556) + 32.0;
printf("Température de %f degré Fahrenheit.\n", fahrenheit);
return 0;
}
2.1
int main(void)
{
float prix, prixRemise;
printf("Entrez un prix : ");
scanf("%f", &prix);
prixRemise = 0.9 * prix;
printf("Le prix avec 10 %% de remise est de %f.\n", prixremise);
return 0;
}
2.1
a)
int main(void)
{
float x, fx;
printf("Entrez un nombre : ");
scanf("%f", &x);
fx = (2.0 * x + 3.0) / (3.0 * x * x + 2.0);
printf("f(%f) = %f\n", x, fx);
return 0;
}
b)
int main(void)
{
float x, h, fx, fx_plus_h, fPrime_x;
printf("Entrez un nombre : ");
scanf("%f", &x);
printf("Entrez un écart h : ");
scanf("%f", &h);
fx = (2.0 * x + 3.0) / (3.0 * x * x + 2.0);
fx_plus_h = (2.0 * (x + h) + 3.0) / (3.0 * (x + h) * (x + h) + 2.0);
fPrime_x = (fx_plus_h - fx) / h;
printf("f’(%f) = %f\n", x, fPrime_x);
return 0;
}
2)TYPES DE DONNÉES:
2.1 VARIABLES ET OPÉRATIONS
Dans un programme, il apparaît des variables qui permettent de donner des noms à
des données. Chaque variable doit avoir un type (nombre entier, nombre réel, caractère,
suite de caractères, ou type plus complexe). Chaque variable a aussi un identificateur
qui est le nom de la variable. Une déclaration de variable a toujours la forme :
type identificateur;
ou bien la forme avec l’initialisation (c’est-à-dire que l’on donne à la variable une valeur initiale) :
type identificateur = valeur;
On peut aussi déclarer plusieurs variables d’un même type séparées par des virgules.
2.2 TYPE ENTIER int
Le type int (abréviation de l’anglais integer) est une représentation des nombres
entiers. Comme toute variable informatique, un int ne peut prendre qu’un nombre
fini de valeur. Un int est généralement codé sur 4 octets (32 bits).Dans ce cas, les
valeurs sont entre −231 et 231 − 1 (ce qui fait bien 232 valeurs possibles). Notons que
sur certains vieux systèmes, les int sont codés seulement sur 2 octets.
Les opérations arithmétiques binaires +, −, ∗, / sont définies sur les int et donnent
toujours pour résultat un int.
#include <stdio.h>
int main(void)
{
int nombre, chiffre;
puts("Tapez un nombre entier :");
scanf("%d", &nombre);
chiffre = nombre%10;
printf("Le dernier chiffre est : %d", chiffre);
return 0;
}
2.3 LES TYPES RÉELS float ET double
Les types float et double permettent de représenter des nombres réels avec une certaine précision (suivant une représentation des nombres appelée virgule flottante ou nombre flottant). Un nombre réel tel qu’il est ainsi représenté possède une mantisse (des chiffres) et
un exposant qui correspond à la multiplication par une certaine puissance de 10. Par
exemple 3.546E − 3 est égal à 3.546 × 10−3, ce qui fait 0.003546.
Le type double (codé sur 8 octets) est plus précis que le type float (codé sur 4 octets).
La valeur maximale d’un double est d’environ 10308 alors que celle d’un float
est de l’ordre de 1038. (Les valeurs limites exactes sont données par les constantes
DBL_MAX et FLT_MAX de la bibliothèque float.h).
2.4 LE TYPE char
Le type char (abréviation de l’anglais character) est un type caractère codé sur
1 octet. C’est la plus petite donnée qui puisse être stockée dans une variable. Les
valeurs (de −126 à 125) peuvent réprésenter des caractères conventionnels.
Par exemple, les caractères alphabétiques majuscules A, B, . . . , Z ont pour valeur
65, 66, . . . , 90 et les minuscules correspondantes a, b, . . . , z ont pour valeurs
97, 98, . . . , 122. On appelle ce codage des caractères le code ASCII.
Une variable de type char peut être considérée soit comme un nombre, soit comme
un caractère que l’on peut afficher. Dans tous les cas, il s’agit du même type. Pour
désigner par exemple le caractère Z dans un programme, on peut soit écrire ’Z’ (entre
quotes), soit écrire 90 qui est le code ASCII du caractère Z. Dans les deux cas il s’agit
du même caractère et de la même donnée qui peut être stockée dans la même variable
de type char.
2.5 LES TYPES unsigned
Aux types int et char correspondent des types unsigned int (aussi sur 4 octets) et
unsigned char (aussi sur 1 octet) qui représentent uniquement des valeurs positives.
Un unsigned int sur 4 octets va de 0 à 232 − 1.
Un unsigned char sur 1 octet va de 0 à 28 − 1 (c’est-à-dire de 0 à 255).
2.6 AFFECTATIONS ET CONVERSIONS
Étant données deux variables de même type, on peut recopier le contenu d’une variable
dans l’autre par une affectation (signe =). Plus généralement, on peut copier
dans une variable la valeur de toute une expression.
Si les deux variables sont de types différents, l’opération d’affectation = va réaliser,
lorsque c’est possible, une conversion. Si la conversion n’est pas possible, le
compilateur affichera un message d’erreur.
Exemple d’affectation
int var1=0, var2=3; /* déclarations avec initialisations */
var1=2*var2+1; /* affectation : après ceci var1 vaut 7 */
Exemple de conversion d’un float vers un int
int n;
float x=7.6587e2;
n = (int)x; /* après ceci n vaut 765 (arrondi à la partie entière) */
🔺 Pour le calcul de deuxtiers ci-dessus, écrire deuxtiers=n/m ou encore deuxtiers=2/3
est une grave erreur qui conduit au résultat que deuxtiers est égal à 0, car le
quotient entre entiers donne une division euclidienne, même lorsqu’on l’affecte
ensuite à un float ou un double.
2.7 LES CONSTANTES ET LE #define
Une constante est une valeur qui n’est pas susceptible de varier lors de l’exécution
d’un programme. Par exemple, 9.81 est une constante de type float, 1024 est une
constante de type int (qui peut aussi être affectée à une variable de type float).
Enfin, 65, ou "A" est une constante de type char (qui peut aussi être affectée à un int
ou un float).
🔺 Ne pas confondre le caractère ’6’, dont le code ASCII vaut 54, avec le caractère 6,
dont le code ASCII vaut 6, mais qui représente un autre caractère.
2.8 DÉFINIR SES PROPRES TYPES
En C, le programmeur peut définir ses propres types et donner les noms qu’il veut à
ses types. Pour donner un nom à un type, on utilise typedef. Dans l’exemple suivant,
le programmeur a préféré appeler les nombres entiers Entier plutôt que int.
#include <stdio.h>
typedef int Entier; /* Définition d’un nouveau type Entier */
int main(void)
{
Entier d, n;
scanf("%d", &n);
d = 2*n;
printf("Le double de %d est %d\n", n, d);
return 0;
}
Dans ce cas, le type Entier est simplement sinonyme de int. Nous verrons plus
loin comment définir des types plus compliqués pour représenter des informations de
toutes sortes. Les différents types définis et utilisés dans un programme s’appellent
les structures de données.
Exercices
3.1 (∗) Sachant que le premier avril 2004 était un jeudi, écrire un programme qui
détermine le jour de la semaine correspondant au 4 mai de la même année. On pourra
représenter les jours de la semaine par des numéros allant de 0 à 6.
3.2 (∗) Écrire un programme qui lit un nombre au clavier, répond 1 si le nombre est
impair et 0 si le nombre est pair.
Corrigés
3.1
int main(void)
{
int njours;
/* Convention : 0 <-> lundi, ... 6 <-> Dimanche
33 jours écoulés entre le 1er avril et le 4 mai */
njours = (33 + 3) % 7 + 1;
printf("Le 4 mai était le %d ème jour de la semaine.\n", njours);
return 0;
}
3.2
int main(void)
{
int n, parite;
printf("Entrez un nombre : ");
scanf("%d", &n);
parite = n % 2;
printf("La parité du nombre est %d\n", parite);
return 0;
}
Aucun commentaire:
Enregistrer un commentaire