« INFO517 : Programmation C » : différence entre les versions
m (Menues corrections) |
|||
Ligne 32 : | Ligne 32 : | ||
Après cette première séance, les étudiants devraient être capable de s'amuser un peu avec le langage. |
Après cette première séance, les étudiants devraient être capable de s'amuser un peu avec le langage. |
||
==== Les exemples vus en cours ==== |
|||
<tt>bateau.c</tt> |
|||
<source lang="c"> |
|||
#include <stdio.h> |
|||
int main () { |
|||
/* Écrit une chaîne */ |
|||
puts("Bateau !"); |
|||
/* Renvoie la valeur de sortie en cas de succès */ |
|||
return 0; |
|||
} |
|||
</source> |
|||
<tt>euros-francs-v1.c</tt> |
|||
<source lang="c"> |
|||
#include<stdio.h> |
|||
/* Écrit une table de conversion euros/francs |
|||
* pour euros = 0, 5, 10, ..., 100 : |
|||
* version initiale */ |
|||
main() |
|||
{ |
|||
int euros, euros_max, pas ; |
|||
float francs, un_euro ; |
|||
un_euro = 6.55957 ; /* taux de conversion */ |
|||
pas = 5 ; /* pas d'itération */ |
|||
euros = 0 ; /* valeur initiale */ |
|||
euros_max = 100 ; /* valeur maximale */ |
|||
while (euros <= euros_max) { |
|||
francs = un_euro * euros ; |
|||
printf("%d\t%f\n", euros, francs) ; |
|||
euros = euros + pas ; |
|||
} |
|||
} |
|||
</source> |
|||
<tt>euros-francs-v2.c</tt> |
|||
<source lang="c"> |
|||
#include<stdio.h> |
|||
/* Écrit une table de conversion euros/francs |
|||
* pour euros = 0, 5, 10, ..., 100 : |
|||
* correction de l'alignement */ |
|||
main() |
|||
{ |
|||
int euros, euros_max, pas ; |
|||
float francs, un_euro ; |
|||
un_euro = 6.55957 ; /* taux de conversion */ |
|||
pas = 5 ; /* pas d'itération */ |
|||
euros = 0 ; /* valeur initiale */ |
|||
euros_max = 100 ; /* valeur maximale */ |
|||
while (euros <= euros_max) { |
|||
francs = un_euro * euros ; |
|||
printf("%3d\t%6.2f\n", euros, francs) ; |
|||
euros = euros + pas ; |
|||
} |
|||
} |
|||
</source> |
|||
<tt>euros-francs-v3.c</tt> |
|||
<source lang="c"> |
|||
#include<stdio.h> |
|||
/* Écrit une table de conversion euros/francs |
|||
* pour euros = 0, 5, 10, ..., 100 : |
|||
* avec un `for' */ |
|||
main() |
|||
{ |
|||
int euros ; |
|||
for (euros = 0 ; euros <= 100 ; euros = euros + 5) |
|||
printf("%3d\t%6.2f\n", euros, 6.55957*euros) ; |
|||
} |
|||
</source> |
|||
<tt>euros-francs-v4.c</tt> |
|||
<source lang="c"> |
|||
#include<stdio.h> |
|||
#define UN_EURO 6.55957 /* un euro en francs */ |
|||
/* Écrit une table de conversion euros/francs |
|||
* pour euros = 0, 5, 10, ..., 100 : |
|||
* définition pour le préprocesseur */ |
|||
main() |
|||
{ |
|||
int euros ; |
|||
for (euros = 0 ; euros <= 100 ; euros = euros + 5) |
|||
printf("%3d\t%6.2f\n", euros, UN_EURO*euros) ; |
|||
} |
|||
</source> |
|||
<tt>arrondi.c</tt> |
|||
<source lang="c"> |
|||
#include<stdio.h> |
|||
#define INCR 0.00001 /* incrément pour le test de précision */ |
|||
#define NUM 100000 /* nombre de pas */ |
|||
/* Calcule 100000*0.00001=1 ? */ |
|||
main() |
|||
{ |
|||
float accu ; |
|||
int i ; |
|||
accu = 0 ; |
|||
for (i=0 ; i < PAS ; i=i+1) |
|||
accu = accu + INCREMENT ; |
|||
printf("%d=%f?\n",PAS*INCREMENT,accu) ; |
|||
} |
|||
</source> |
|||
<tt>copie-v1.c</tt> |
|||
<source lang="c"> |
|||
#include<stdio.h> |
|||
/* Copie l'entrée standard sur la sortie standard */ |
|||
main() |
|||
{ |
|||
int c; |
|||
c = getchar(); |
|||
while (c != EOF) { |
|||
putchar(c); |
|||
c = getchar(); |
|||
} |
|||
} |
|||
</source> |
|||
<tt>copie-v2.c</tt> |
|||
<source lang="c"> |
|||
#include<stdio.h> |
|||
/* Copie l'entrée standard sur la sortie standard : |
|||
* assignation comme valeur */ |
|||
main() |
|||
{ |
|||
int c; |
|||
while ((c = getchar()) != EOF) { |
|||
putchar(c); |
|||
} |
|||
} |
|||
</source> |
|||
==== Exercices pour le 29 septembre ==== |
|||
* Au choix: |
|||
*# Sur la machine et le système de votre choix, écrire et compiler un programme C (par exemple <tt>bateau.c</tt>), puis envoyer le fichier source et le binaire obtenu à l'adresse <tt>lionel.vaux@univ-savoie.fr</tt>. |
|||
*# Ne pas y parvenir et alors me contacter au plus tôt pour y remédier. Ensuite revenir au choix 1, évidemment. |
|||
* Modifier l'un des fichiers <tt>euros-francs-v?.c</tt> pour afficher une ligne d'en-tête alignée sur les résultats (et quelques fioritures). C'est-à-dire que la sortie doit ressembler à: |
|||
Euros: Francs: |
|||
0 -> 0.00 |
|||
5 -> 32.80 |
|||
10 -> 65.60 |
|||
15 -> 98.39 |
|||
20 -> 131.19 |
|||
... |
|||
* Écrire un programme <tt>francs-euros.c</tt> qui affiche une table de conversion dans le sens contraire (les comptes ronds sont en francs). |
|||
* Écrire un programme qui affiche la valeur entière, de type <tt>int</tt>, de <tt>EOF</tt> (vérifier qu'elle n'est pas dans l'intervalle entier <tt>[0..255]</tt>). |
|||
* Écrire un programme qui affiche la valeur entière du « caractère » <tt>€</tt> (il est possible que vous ne compreniez pas très bien ce qui vous arrive: on en parlera). |
|||
* Écrire un programme qui compte le nombre de caractères (au sens de <tt>getchar()</tt>) dans un fichier. |
Version du 22 septembre 2008 à 12:41
Cours du semestre 5 de la license STIC INFO.
Organisation
Responsable pour 2008--2009: Lionel Vaux.
10 séances de cours/TD (1h30) et 3 séances de TP (4h).
Objectifs du cours
- Principes généraux et particularités du langage (programmation impérative, typage fort, adressage mémoire)
- Syntaxe
- Bibliothèque standard (pour les entrées-sorties et l'interaction avec le système d'exploitation)
- Gestion de la mémoire
- Bonnes pratiques
- Outils et concepts:
- automatisation de la compilation (make),
- analyse de l'exécution et déboguage (gdb, valgrind),
- documentation (doxygen),
- boîte à outils graphique (gtk+)
Séances
Cours/TD 1 : lundi 22 septembre 2008
Présentation tout-en-un.
Le but de ce cours est de fournir le minimum vital aux étudiants pour:
- écrire un programme simple et court utilisant les types de base
- le compiler et l'exécuter
- trouver de la documentation
Après cette première séance, les étudiants devraient être capable de s'amuser un peu avec le langage.
Les exemples vus en cours
bateau.c <source lang="c">
- include <stdio.h>
int main () { /* Écrit une chaîne */ puts("Bateau !");
/* Renvoie la valeur de sortie en cas de succès */ return 0; } </source>
euros-francs-v1.c <source lang="c">
- include<stdio.h>
/* Écrit une table de conversion euros/francs
* pour euros = 0, 5, 10, ..., 100 : * version initiale */
main() {
int euros, euros_max, pas ; float francs, un_euro ;
un_euro = 6.55957 ; /* taux de conversion */
pas = 5 ; /* pas d'itération */ euros = 0 ; /* valeur initiale */ euros_max = 100 ; /* valeur maximale */ while (euros <= euros_max) { francs = un_euro * euros ; printf("%d\t%f\n", euros, francs) ; euros = euros + pas ; }
} </source>
euros-francs-v2.c <source lang="c">
- include<stdio.h>
/* Écrit une table de conversion euros/francs
* pour euros = 0, 5, 10, ..., 100 : * correction de l'alignement */
main() {
int euros, euros_max, pas ; float francs, un_euro ;
un_euro = 6.55957 ; /* taux de conversion */
pas = 5 ; /* pas d'itération */ euros = 0 ; /* valeur initiale */ euros_max = 100 ; /* valeur maximale */ while (euros <= euros_max) { francs = un_euro * euros ; printf("%3d\t%6.2f\n", euros, francs) ; euros = euros + pas ; }
} </source>
euros-francs-v3.c <source lang="c">
- include<stdio.h>
/* Écrit une table de conversion euros/francs
* pour euros = 0, 5, 10, ..., 100 : * avec un `for' */
main() {
int euros ; for (euros = 0 ; euros <= 100 ; euros = euros + 5) printf("%3d\t%6.2f\n", euros, 6.55957*euros) ;
} </source>
euros-francs-v4.c <source lang="c">
- include<stdio.h>
- define UN_EURO 6.55957 /* un euro en francs */
/* Écrit une table de conversion euros/francs
* pour euros = 0, 5, 10, ..., 100 : * définition pour le préprocesseur */
main() {
int euros ; for (euros = 0 ; euros <= 100 ; euros = euros + 5) printf("%3d\t%6.2f\n", euros, UN_EURO*euros) ;
} </source>
arrondi.c <source lang="c">
- include<stdio.h>
- define INCR 0.00001 /* incrément pour le test de précision */
- define NUM 100000 /* nombre de pas */
/* Calcule 100000*0.00001=1 ? */ main() {
float accu ; int i ; accu = 0 ; for (i=0 ; i < PAS ; i=i+1) accu = accu + INCREMENT ; printf("%d=%f?\n",PAS*INCREMENT,accu) ;
} </source>
copie-v1.c <source lang="c">
- include<stdio.h>
/* Copie l'entrée standard sur la sortie standard */ main() {
int c;
c = getchar(); while (c != EOF) { putchar(c); c = getchar(); }
} </source>
copie-v2.c <source lang="c">
- include<stdio.h>
/* Copie l'entrée standard sur la sortie standard :
* assignation comme valeur */
main() {
int c;
while ((c = getchar()) != EOF) { putchar(c); }
} </source>
Exercices pour le 29 septembre
- Au choix:
- Sur la machine et le système de votre choix, écrire et compiler un programme C (par exemple bateau.c), puis envoyer le fichier source et le binaire obtenu à l'adresse lionel.vaux@univ-savoie.fr.
- Ne pas y parvenir et alors me contacter au plus tôt pour y remédier. Ensuite revenir au choix 1, évidemment.
- Modifier l'un des fichiers euros-francs-v?.c pour afficher une ligne d'en-tête alignée sur les résultats (et quelques fioritures). C'est-à-dire que la sortie doit ressembler à:
Euros: Francs: 0 -> 0.00 5 -> 32.80 10 -> 65.60 15 -> 98.39 20 -> 131.19 ...
- Écrire un programme francs-euros.c qui affiche une table de conversion dans le sens contraire (les comptes ronds sont en francs).
- Écrire un programme qui affiche la valeur entière, de type int, de EOF (vérifier qu'elle n'est pas dans l'intervalle entier [0..255]).
- Écrire un programme qui affiche la valeur entière du « caractère » € (il est possible que vous ne compreniez pas très bien ce qui vous arrive: on en parlera).
- Écrire un programme qui compte le nombre de caractères (au sens de getchar()) dans un fichier.