Exercices sur la syntaxe de base

Objectifs
Déclaration / manipulation de variables, structures de contrôle, boucles

Manipulations d’affectations

Exercice

Soient deux variables entières x et y. Quelles sont les valeurs successives prises par x et y dans les deux scénarios suivantes:

int x = 0;
x = x + 1;
x = x + 1;
x = 1 + x;
int y = -1;
x = x + y;
y = y + x;
x = x + y;
y = y + x;
x = x + y;
y = y + x;
int x = 7, y = -2;
x = y; y = x;
x = y; y = 1;
x = y;

x = 2; y = 10; x = y; y = x;

x = 2; y = 10;
int z = x; x = y; y = z;

Suite d’affectations

Donner les valeurs des variables entières et initialisées a, b et c à la suite du bloc d’instructions:

if (c - b == b)
{
    a = a + 1;
    c = c + b;
    b = a;
}
else
{
    b = a;
    a = a - 1;
    c = c * b;
}

Opérations sur les entiers

  • Soit unsigned int a = 0;. Que vaut a si on la décrémente ?
  • Soit short a = 32766; Que vaut short b = a + 3; ?
  • Soient short b = 30000, c = 30000; Que vaut short d = b * c; ?

Suite d’instructions

Soient trois variables entières x, y, z déclarées et initialisées. Écrire les suites d’instructions pour:

  • Afficher le maximum de xet y
  • Afficher la valeur absolue de z
  • Afficher la parité de l’entier x
  • Afficher le maximum de x, y, z

Soient les variables de type caractère c et d déclarées et initialisées. Écrire les suites d’instructions pour:

  • Déterminer entre c et d quelle est la lettre en premier dans l’alphabet
  • Déterminer si c est en lettre minuscule ou majuscule
  • Transformer c pour obtenir une lettre majuscule (on ne sait pas à priori si elle est minuscule ou majuscule)
  • Déterminer si c est une consonne ou une voyelle

Expressions booléennes classiques

Traduire chacune des expressions suivantes en langage C:

  • x=y=z
  • x,y,z différents deux à deux
  • x<y<=z
  • au moins deux nombres égaux parmi x,y,z
  • exactement deux nombres égaux parmi x,y,z
  • au plus deux nombres égaux parmi x,y,z

Problèmes simples

  • À partir de la date de naissance de deux personnes fournies sous la forme jour, mois, année (où chaque variable est un entier). Déterminer quel est la personne la plus âgée (1 ou 2).
  • À partir d’un entier i représentant une durée, afficher la durée équivalente sous la forme $h:min:sec$. Écrire la réciproque: à partir de 3 variables entières h, m, s determiner la durée équivalente en secondes.

Boucles for

Boucles simples

Écrire les suites d’instructions pour:

  • Afficher les entiers de 1 à 10 séparés par des espaces, puis de 10 à 1.
  • Ajouter les entiers de 1 à 100 puis afficher le résultat
  • Ajouter les entiers pairs de 6 à 2048 puis afficher le résultat.
  • Afficher la liste des multiples de (3 ou 5 ou les deux) inférieurs à 60.

Calcul de puissance

Écrire un algorithme pour le calcul de x^n uniquement avec des multiplications.

Problème

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. Find the sum of all the multiples of 3 or 5 below 1000. –source Project Euler

Multiplication et exponentiation modulaire

  • Quelle est la dernière décimale de 17x923 et la dernière de 123345678987654x836548971236 ?
  • On voit que pour connaître (a * b) % 10, il suffit de faire (a % 10) * (b % 10). Ce principe se généralise pour n’importe quel entier (i.e. pas forcément 10). En vous inspirant de l’exercice 28, calculer 123456^654321 % 1234567. Donner les avantages de cette méthode par rapport à un calcul brut.

Boucles while

Termes d’une suite

Soit $u_n$ définie par $u_0=1515$ et $u_{n+1}=3u_n+42$ pour $n \in N$. Écrire un algorithme qui calcule le premier $k$ tel que $u_k$ est strictement supérieur à 1 million.

Termes d’une suite (bis)

Écrire un algorithme itératif permettant de calculer le quotient et le reste de la division euclidienne de a par b sans utiliser la division ni le modulo. Si $a=37$ et $b=5$ votre algorithme devra calculer $q=7$ et $r=2$.

Valeur approchée de Pi

On sait que $\frac{\pi}{4}=arctan(1)=\sum_{n=0}\frac{(-1)^n}{2*n+1}$. Écrire un algorithme qui calcule une valeur approchée de $\pi$ à epsilon près.

Suites

Concevoir un algorithme qui calcule et affiche le plus petit entier $n$ tel que $\sum_{i=1}^n \big(\sum_{j=1}^i(i+j)\big) \geq 1000$.

Triplet pythagoricien

A Pythagorean triplet is a set of three natural numbers, a b c, for which: $a^2 + b^2 = c^2$. For example, $3^2 + 4^2 = 9 + 16 = 25 = 5^2$. There exists exactly one Pythagorean triplet for which $a + b + c = 1000$. Find the product $abc$. –source Project Euler

Palindromes et nombres

A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is $9009 = 91 × 99$. Find the largest palindrome made from the product of two 3-digit numbers. –source Project Euler

Diviseurs

2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder. What is the smallest number that is evenly divisible by all of the numbers from 1 to 20? –source Project Euler