BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
BSIO1 - SI4 Les bases de la programmation
Un tableau (uni-dimensionnel) A est une variable structurée formée d'un nombre entier N de variables simples du même type.
Le nombre N est alors la dimension du tableau.
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
Déclaration de tableaux en C
TypeSimple NomTableau[Dimension] ;
Les noms des tableaux sont des identificateurs qui doivent correspondre aux restrictions et normes définies pour le langage C (cf cours 2).
Les chaînes de caractères en C sont considérées comme des tableaux de caractères.
Déclaration de chaînes de caractères en C
char NomVariable[Longueur];
Exemples
char NOM [20];
char PRENOM [20];
char PHRASE [300];
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
BSIO1 - SI4 Les bases de la programmation
Lors de la déclaration, il faut indiquer l'espace à réserver en mémoire pour le stockage de la chaîne.
Une chaîne de caractères est terminée par le symbole '\0' (caractère NULL).
Ainsi, pour une chaîne de n caractères, nous devons prévoir n+1 octets : pour la mémorisation de la chaîne de caractères "Hello", le compilateur C a besoin de six (!!) octets en mémoire.
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
Le nom d'une chaîne est le représentant de l'adresse du premier caractère de la chaîne.
Pour mémoriser une variable TXT qui doit être capable de contenir un mot de N caractères, nous avons besoin de N+1 octets en mémoire:
Il existe plusieurs façon d'initialiser une chaîne de caractères.
Soit en lui affectant un tableau de caractères entre accolades:
char CHAINE[6] = {'H','e','l','l','o','\0'};
Soit en indiquant simplement une chaîne de caractère constante:
char CHAINE[] = "Hello";
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
Les chaînes de caractères constantes (string literals) sont indiquées entre guillemets. La chaîne de caractères vide est alors: ""
Le symbole " peut être représenté à l'intérieur d'une chaîne par la séquence d'échappement \":
printf("Affichage de \"guillemets\" \n");
Le symbole ' peut être représenté à l'intérieur d'une liste de caractères par la séquence d'échappement \' :
char TXT[]={'L','\'','a','s','t','u','c','e','\0'};
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
L'accès à un élément d'une chaîne de caractères peut se faire de la même façon que l'accès à un élément d'un tableau.
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
La précédence des caractères dans l'alphabet d'une machine est dépendante du code de caractères utilisé. Pour le code ASCII, nous pouvons constater l'ordre suivant:
. . . ,0,1,2, ... ,9, . . . ,A,B,C, ... ,Z, . . . ,a,b,c, ... ,z, . . .
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
1. Ecrire un programme qui lit deux chaînes de caractères, et qui indique leur précédence lexicographique dans le code de caractères de la machine (ici: code ASCII).
Testez votre programme à l'aide des exemples suivants :
"ABC" et "BCD" |
|
"ABC" et "B" | |
"Abc" et "abc" | |
"ab" et "abcd" | |
" ab" et "ab" |
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
2. Ecrire un programme qui lit une chaîne de caractères CH saisie au clavier par l'utilisateur et qui convertit toutes les majuscules dans des minuscules et vice-versa.
Le résultat de la conversion sera mémorisé dans la même variable CH et affiché après la modification.
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
3. Écrire un programme qui saisit une chaîne pouvant contenir des espaces et qui affiche le nombre de mots de la phrase, puis affiche chaque mot de la chaîne. Le séparateur étant l’espace.
Testez votre programme à l'aide des exemples suivants :
J'aime tant la programmation, surtout le module SI4
Est-il possible d'aimer autant une matiere?
Je programme donc je suis
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
4. Ecrire un programme qui lit une chaîne de caractères CH saisie au clavier par l'utilisateur et qui vérifie si CH contient une adresse IPv4 valide : c'est à dire 4 valeurs décimales séparées par des '.'
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
5. Ecrire un programme qui demande à l’utilisateur de taper une chaîne de caractères et qui affiche la lettre (minuscule ou majuscule) la plus fréquente.
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
Les bibliothèques de fonctions de C contiennent une série de fonctions spéciales pour le traitement de chaînes de caractères.
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
char NOM[] = "hello, world";
printf(":%s:", NOM);
char LIEU[25];
int JOUR, MOIS, ANNEE;
printf("Entrez lieu et date de naissance : \n");
scanf("%s %d %d %d", LIEU, &JOUR, &MOIS, &ANNEE);
int MAXI = 1000;
char LIGNE[MAXI];
gets(LIGNE);
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
BSIO1 - SI4 Les bases de la programmation
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
La fonction: | retourne une valeur différente de zéro si: |
---|---|
isupper(<c>) | si <c> est une majuscule ('A'...'Z') |
islower(<c>) | si <c> est une minuscule ('a'...'z') |
isdigit(<c>) | si <c> est un chiffre décimal ('0'...'9') |
isalpha(<c>) | si islower(<c>) ou isupper(<c>) |
isalnum(<c>) | si isalpha(<c>) ou isdigit(<c>) |
isxdigit(<c>) | si <c> est un chiffre hexadécimal ('0'...'9') ou ('A'...'F') ou ('a'...'f') |
isspace(<c>) | si <c> est un signe d'espacement |