CSC 4103 – Programmation système

Portail informatique

Langage C : Premiers pas

Dans cette première session de TP, l'objectif est de se familiariser avec le langage C, d'écrire des premiers programmes, les compiler et les exécuter, de savoir se documenter face à une fonction dont on ne connaît pas le comportement.

Hello World

Le but de cet exercice est d'écrire un premier programme, le compiler et l'exécuter depuis un terminal.

Créer, avec emacs, le fichier hello_world.c. Vous écrirez dans ce fichier un programme affichant le message "Hello World !"
$ emacs hello_world.c &

Compilez ce programme, puis exécutez le..
$ gcc hello_world.c -o hello_world -Wall -Werror $ ./hello_world

Structures algorithmiques

L'objectif de cet exercice est de se familiariser avec les structures algorithmiques du langage C.

is_prime

Créer, avec emacs, le fichier is_prime.c. Dans un premier temps, le programme doit demander à l'utilisateur de saisir un nombre entier, lire l'entier saisi et l'afficher.
$ emacs is_prime.c &

Complétez le programme is_prime.c pour qu'il vérifie si le nombre saisi est premier ou pas.

Jouons avec des boucles

Créer le programme trouver_valeur.c. Ce programme choisit au hasard une valeur entière comprise entre 0 et 99 que l'utilisateur doit trouver en moins de 10 essais.

Pour tirer au sort une valeur comprise entre 0 et 99, vous pouvez utiliser les instructions suivantes:

srand(getpid()); int valeur_a_trouver = rand() % 100;

Fonctions

Calcul d'exponentielle

Implémenter la fonction récursive long facto(int n) qui calcule n !.
Veillez à bien utiliser une variable de type long pour calculer votre factorielle, sans quoi vous constateriez de drôles de résultats. C'est parce que la factorielle de certaines valeurs est un nombre trop grand pour être représenté dans un int. N'hésitez pas à demander des précisions à votre professeur !

Le but de cet exercice est d'écrire un programme calculant l'exponentielle de x en utilisant la série: exponentielle de x = 1 + (x/1!) + (x^2/2!) + (x^3/3!) + (x^4/4!) + ...

Ecrire la fonction double power(double x, int n) qui calcule x^n.

Ecrire la fonction double expon(double x, int n) qui calcule exp(x) en développant la série jusqu'à l'indice n.

Ecrire la fonction main qui demande à l'utilisateur de saisir une valeur pour x, calcule exp(x) jusqu'à l'indice 20, et affiche le résultat.

Décomposition binaire

Le but de cet exercice est d'écrire la fonction void int_to_bits(int n) affichant les bits constituant une variable de type int.

Une façon d'implémenter cette fonction est d'utiliser des opérations bit à bit. Par exemple, en appliquant l'opérateur & entre le masque (en binaire) 0000 [...] 0010 et la variable entière n, on extrait le 2ème bit de n.

Lorsqu'on opère un décalage (avec <<) sur une valeur signée (par exemple, un int), l'opération est un décalage arithmétique, qui conserve le signe. Par exemple, si les bits d'un int a sont à 1010 0000 0000 0000 0000 0000 0000 0000, le résultat de a >> 1 est 1101 0000 0000 0000 0000 0000 0000 0000. Pour faire un décalage logique, utilisez une valeur non signée (par exemple, un unsigned int).