« INFO517 : Programmation C » : différence entre les versions

De Wiki du LAMA (UMR 5127)
Aller à la navigation Aller à la recherche
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 «&nbsp;caractère&nbsp;» <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">

  1. 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">

  1. 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">

  1. 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">

  1. 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">

  1. include<stdio.h>
  1. 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">

  1. include<stdio.h>
  1. define INCR 0.00001 /* incrément pour le test de précision */
  2. 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">

  1. 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">

  1. 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:
    1. 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.
    2. 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.