Attention : Pour ces exercices, testez vos fonctions avec onlinegdb
Définissez une fonction void triple(...)
qui prend un paramètre entier en entrée et ne retourne rien.
Cette fonction modifie le paramètre passé afin d'avoir le triple de la valeur
// exemple d'appel de la fonction
int val = 2;
triple(...);
printf("Res : %d", val);
Res : 6;
Définir une fonction de type bool
qui prend un caractère en entrée.
- si c'est une lettre minuscule, la fonction modifie la lettre en majuscule et retourne
true
- sinon elle retourne
false
et le paramètre reste inchangé.
Quel est l'affichage du programme suivant
void func1(int val){
val = val + 5;
printf("Q2 = %d\n", val);
}
void func2(int* val){
printf("Q3 = %d\n", val);
printf("Q4 = %d\n", *val);
*val = 0;
}
void func3(int val1, int val2, double* val3){
*val3 = val1 + val2;
}
int func4(int* i, double* d){
printf("Q10 = %d\n", *i);
*i = *d;
return 8;
}
int main(int argc, char *argv[])
{
int i1 = 12;
int i2 = 1;
int i3 = 0;
double d1 = 1.2;
func1(i1);
printf("Q1 = %d\n", i1);
func2(&i1);
printf("Q5 = %d\n", i1);
func2(&i2);
printf("Q6 = %d\n", i2);
i1 = 5;
i2 = 2;
func3(i1, i2, &d1);
printf("Q7 i1=%d\n", i1);
printf("Q8 i2=%d\n", i2);
printf("Q9 d1=%lf\n", d1);
i1 = 3;
d1 = 4.5;
int res = func4(&i1, &d1);
printf("Q11 i1=%d\n", i1);
printf("Q12 d1=%lf\n", d1);
printf("Q13 res=%d\n", res);
}
Définir une fonction swap
qui intervertit deux valeurs entières passées en paramètre.
Écrire une fonction tri
de type void
qui prend trois entiers en entrée.
Une fois la fonction terminée, il faut que les valeurs soient triées par ordre croissant.
Utiliser la fonction swap
de l'exercice #4
Le premier paramètre doit être le plus petit.
i1 = 6;
i2 = 12;
i3 = 2;
tri( i1, i2, i3)
printf("Res tri : i1=%d, i2=%d, i3=%d\n", i1, i2, i3);
Affichage
Res tri : i1=2, i2=6, i3=12
Écrire une fonction de type void
qui prend 3 paramètres en entrée
-
val : int
-
min : int
-
max : int
-
Si
val
est plus grand quemax
,val
prend la valeur demax
-
Si
val
est plus petit quemin
,val
prend la valeur demin
-
Sinon
val
reste inchangée.
Écrire une fonction qui cherche le plus grand diviseur commun entre deux nombres.
Le prototype de la fonction est : bool pgmc(int val1, int val2, int* res);
Utiliser les boucles for
.
Si un diviseur différent de 1
existe, la fonction retourne true
sinon false
.
La valeur du plus grand multiple sera retournée au travers du paramètre res
.
Quel est l'affichage du programme suivant
#include <stdio.h>
void afficher(double val, int* nbr){
printf("Val %d : %.2lf\n", *nbr, val);
(*nbr)++;
}
void func1(double* val, int* nbr){
int cpt = 0;
while(*val > 0){
*val -= 10;
cpt++;
}
afficher(*val, nbr);
}
int main()
{
int valeur_nbr = 0;
double val = 56.0;
afficher(25, &valeur_nbr);
func1(&val, &valeur_nbr);
afficher(val, &valeur_nbr);
return 0;
}
Quel est l'affichage du programme suivant
#include <stdio.h>
void fonc(double* val){
printf("Val : %d\n", val);
printf("Val* : %lf", *val);
}
int main()
{
int val = 10;
fonc(&val);
return 0;
}
#include <stdio.h>
void triple(int* val){
*val = 3*(*val);
}
int main()
{
int demo = 2;
triple(&demo);
printf("Res : %d", demo);
return 0;
}
#include <stdio.h>
#include <stdbool.h>
bool to_upper(char* c){
if( *c >= 'a' && *c <= 'z' ){
*c -= ('a'-'A');
return true;
}
return false;
}
int main()
{
char demo = 'a';
bool res = to_upper(&demo);
printf("Res : %d - Char : %c\n", res, demo);
demo = 'C';
res = to_upper(&demo);
printf("Res : %d - Char : %c\n", res, demo);
demo = '1';
res = to_upper(&demo);
printf("Res : %d - Char : %c\n", res, demo);
return 0;
}
Q2 = 17
Q1 = 12
Q3 = -1600249280 (adresse, nombre aléatoire)
Q4 = 12
Q5 = 0
Q3 = -1600249276 (adresse, nombre aléatoire)
Q4 = 1
Q6 = 0
Q7 i1=5
Q8 i2=2
Q9 d1=7.000000
Q10 = 3
Q11 i1=4
Q12 d1=4.500000
Q13 res=8
#include <stdio.h>
void swap(int* a, int* b){
int tmp = *a;
*a = *b;
*b = tmp;
}
int main()
{
int v1 = 12;
int v2 = 45;
printf("V1 : %d - V2 : %d\n", v1, v2);
swap(&v1, &v2);
printf("V1 : %d - V2 : %d\n", v1, v2);
return 0;
}
#include <stdio.h>
void swap(int* i1, int* i2){
int tmp = *i1;
*i1 = *i2;
*i2 = tmp;
}
void tri(int* i1, int* i2, int* i3){
if( *i1 > *i2) swap(i1, i2);
if( *i1 > *i3) swap(i1, i3);
if( *i2 > *i3) swap(i2, i3);
}
int main(int argc, char* argv[])
{
int i1=1, i2=3, i3=2;
tri(&i1, &i2, &i3);
printf("i1=%d i2=%d i3=%d\n", i1, i2, i3);
i1=7, i2=3, i3=1;
tri(&i1, &i2, &i3);
printf("i1=%d i2=%d i3=%d\n", i1, i2, i3);
i1=10, i2=20, i3=30;
tri(&i1, &i2, &i3);
printf("i1=%d i2=%d i3=%d\n", i1, i2, i3);
i1=6, i2=6, i3=6;
tri(&i1, &i2, &i3);
printf("i1=%d i2=%d i3=%d\n", i1, i2, i3);
}
#include <stdio.h>
void check(int* val, int min, int max){
*val = *val >= max ? max : *val;
*val = *val <= min ? min : *val;
}
int main(int argc, char* argv[])
{
int min = 0;
int max = 12;
int val = 1;
printf("Test 1 : min=%d / max=%d / val=%d ", min, max,val);
check(&val, min, max);
printf("Res : %d\n", val);
min = 10;
max = 12;
val = 1;
printf("Test 2 : min=%d / max=%d / val=%d ", min, max,val);
check(&val, min, max);
printf("Res : %d\n", val);
min = -6;
max = 12;
val = 145;
printf("Test 2 : min=%d / max=%d / val=%d ", min, max,val);
check(&val, min, max);
printf("Res : %d\n", val);
}
#include <stdbool.h>
bool pgmc(int val1, int val2, int* res){
int max = val1 > val2 ? val1 : val2;
for(int i=max; i>1; i--){
if( (val1 % i == 0 && val2 % i == 0) ){
*res = i;
return true;
}
}
return false;
}
int main()
{
int val1 = 489;
int val2 = 123;
int res;
if( pgmc(val1, val2, &res) )
printf("Test 1 : val1=%d / val2=%d / pgmc=%d\n", val1, val2, res);
val1 = 123*7;
val2 = 123;
if( pgmc(val1, val2, &res) )
printf("Test 1 : val1=%d / val2=%d / pgmc=%d\n", val1, val2, res);
val1 = 85*17;
val2 = 85*59;
if( pgmc(val1, val2, &res) )
printf("Test 1 : val1=%d / val2=%d / pgmc=%d\n", val1, val2, res);
return 0;
}
???