Institut National des Tlcommunications et des Technologies de l'Information et
de la Communication INT-TIC d'Oran Algrie
Langage de Programmation C 3 ime anne ingnieur Fiche de TP N 4 Procdures et Fonctions
Exercice 01 En utilisant les sous-programmes, crire un programme qui calcule la somme de deux entiers avant de permuter leurs valeurs. #include<stdio.h>
int somme(int a, int b){ return a+b; }
void permut(int* a, int* b){ int tmp; tmp=*a; *a=*b; *b=tmp; }
int main(){ int x, y; printf("x = "); scanf("%d",&x); printf("y = "); scanf("%d",&y); int s = somme(x, y); printf("%d + %d = %d\n", x, y, s); permut(&x, &y); printf("Apres permutation : x = %d et y = %d",x,y); return 0; }
Exercice 02 Ecrire une fonction estTrie qui vrifie si un tableau est tri dans un ordre croissant. Tester-la dans un programme principal. #include<stdio.h> #define N 10
int estTrie(int T[], int n) {
int i; for (i=0; i<n-1; i++) if (T[i]>T[i+1]) return 0;
if (croissant == 1) printf("Le tableau est trie dans une ordre croissant\n"); else printf("Le tableau n'est pas trie dans une ordre croissant\n");
return 0; }
Exercice 03 En utilisant les structures, crire une fonction lendemain qui renvoie le lendemain dune date. Tester-la dans un programme principal. #include <stdio.h> #include <malloc.h>
typedef struct date { int jour; int mois; int annee; } Date;
do { printf ("jour : "); scanf ("%d", &d.jour); } while (d.jour<1 || d.jour>31);
do { printf ("mois : "); scanf ("%d", &d.mois); } while (d.mois<1 || d.mois>12);
do { printf ("annee : "); scanf ("%d", &d.annee); } while (d.annee<1 || d.annee>2050);
Date dl = lendemain(d);
printf ("Le lendemain de %d/%d/%d est le %d/%d/%d\n", d.jour, d.mois, d.annee, dl.jour, dl.mois, dl.annee);
return 0; }
Exercice 04 Ecrire un programme saisissant une chane de caractres ainsi que deux indices a et b, et recopiant dans une deuxime chane la tranche comprise entre a et b. #include <stdio.h> #define N 21
int main() {
char ch1[N]; char ch2[N];
printf("Saississez une chaine de taille 20 au maximum : "); fgets(ch1, N, stdin); fflush(stdin);
int a, b; printf("Donnez les deux indices d'extraction de la sous-chaine\n"); printf(" indice de debut : "); scanf("%d",&a); printf(" indice de fin : "); scanf("%d",&b);
int i; for (i=a; i<=b; i++) ch2[i-a] = ch1[i]; ch2[i-a] = 0;
En utilisant une fonction qui fait lextraction de la sous-chaine :
#include <stdio.h> #include <malloc.h> #define N 21
char* extraction (char* ch, int a, int b) {
char* ext; // declaration de la chane ext = (char*) malloc((j-i+2)*sizeof(char)); //allocation de la chane if (ext == NULL) // test de lallocation exit(1);
int i; //copie de la sous chane for (i=a; i<=b; i++) ext[i-a] = ch[i]; ext[i-a] = 0;
return ext; // renvoie du rsultat (le pointeur ext) }
int main() {
char ch1[N]; printf("Saississez une chaine de taille 20 au maximum : "); fgets(ch1, N, stdin); fflush(stdin);
int a, b; printf("Donnez les deux indices d'extraction de la sous-chaine\n"); printf(" indice de debut : "); scanf("%d",&a); printf(" indice de fin : "); scanf("%d",&b);