Vous êtes sur la page 1sur 13

Exercice

crire un programme qui:


lit les dimensions L et C d'un tableau Tab deux
dimensions du type rel (dimensions maximales: 50 lignes
et 50 colonnes)
remplit le tableau par des valeurs rentres au clavier
affiche la somme de tous ses lments
Solution
#include
#include<stdio.h>
<stdio.h>
#include
#include<stdlib.h>
<stdlib.h>
#define
#defineMax Max50 50
int
intmain(){
main(){
float
floatT[Max][Max];
T[Max][Max];
int
int L,L,C,
C,i,i,j;j;
float
floatsomme
somme=0; =0;
do{
do{
printf("Nombre
printf("Nombrede delignes
lignes(max.50)
(max.50)etetde
decolonne
colonne(max
(max50)
50): :");
");
scanf("%d%d",
scanf("%d%d",&L &L, ,&C
&C);); } }
while(L>Max
while(L>Max||||C> C>Max);
Max);
/*/*Saisie
Saisiedesdesdonnes
donnes*/*/
for
for(i=0;
(i=0;i<L;
i<L;i++)
i++)
for
for(j=0;
(j=0;j<C;
j<C;j++){
j++){
printf("Element[%d][%d]
printf("Element[%d][%d]: :",",i,i,j);j);
scanf("%f",&T[i][j]);
scanf("%f",&T[i][j]);
somme=somme
somme=somme++T[i][j];
T[i][j];
}}
printf("la
printf("lasomme
sommedes deslments
lmentsdu
dutableau
tableauest est%.2f",
%.2f",somme);
somme);
return
returnEXIT_SUCCESS;
EXIT_SUCCESS;
}}
#include
#include<stdio.h>
<stdio.h>
Solution
#include
#include<stdlib.h>
#define
#defineMax
<stdlib.h>
Max50 50
int
intmain(){
main(){
float
floatT[Max][Max];
T[Max][Max];
int
int L,L,C;
C;
float
float*PL,
*PL,*PC;
*PC; ////pointeur
pointeurpourpourparcourir
parcourirleletableau
tableau
float
floatsomme
somme=0; =0;
do{
do{
printf("Nombre
printf("Nombrede delignes
lignes(max.50)
(max.50)etetde decolonne
colonne(max(max50)
50): :");
");
scanf("%d%d",
scanf("%d%d",&L &L, ,&C
&C);); } }
while(L>50
while(L>50||||C> C>50);
50);
/*/*Saisie
Saisiedes
desdonnes
donnes*/*/
for(PL=T[0];PL<T[0]+(L*Max);PL=PL+Max)
for(PL=T[0];PL<T[0]+(L*Max);PL=PL+Max)
for(PC=PL;
for(PC=PL;PC<PL+C;PC++){
PC<PL+C;PC++){
scanf("%f",PC);
scanf("%f",PC);
somme=somme
somme=somme++(*PC);
(*PC);
}}
printf("la
printf("lasomme
sommedes
deslments
lmentsdu
dutableau
tableauest
est%.2f",somme);
%.2f",somme);
system("pause");
system("pause");
return
returnEXIT_SUCCESS;
EXIT_SUCCESS;
Manipulation de caractres

Les caractres sont classifis en sous-ensembles de


caractres: alphabtiques, numriques,...
Le fichier en-tte <ctype.h> contient des dclarations de
fonctions permettant de tester les caractres
Ces fonctions admettent un argument de type entier (code
ascii) et retourne 0 ou 1: char
charc='A';
c='A';
printf("
printf("%d
%d",",isalpha(c));
isalpha(c)); 1
isalpha() : lettres a--z A--Z printf("
printf("%d
%d",",islower(c));
islower(c)); 0
isupper() : majuscule A--Z
/* tolower : convertit en miniscule*/
islower() : minuscule a--z
/* toupper convertit en majuscule*/
Manipulation de caractres

Ces fonctions admettent un argument de type entier (code


ASCII) et retourne 0 ou 1:
isdigit() : chiffres 0 9
isxdigit(): chiffres hexadcimaux
isalnum(): caractre alphanumerique a--z A--Z 09
isspace() : espaces \n \t \r
ispunct() : ponctuation ! " # % $
Chanes de caractres

Il nexiste pas de type chane spcifique


Une chane de caractres en C est un tableau unidimensionnel
de caractres
Le nom de la chane fait rfrence ladresse de dbut du
premier caractre de la chane
Une chane de caractres bien forme est toujours termine
par un caractre nul '\0'
Indique o le contenu utile de la chane finit
Ne pas oublier de compter et de rserver sa place!!
Chanes de caractres
Dclaration

On peut dclarer et initialiser une chane de caractres comme


on dclare un tableau de caractre
char t[] = {'B', 'o', 'n', 'j', 'o', 'u', 'r', '\0' };
Il est prfrable dutiliser les constantes
char t[] = "Bonjour\n"; /* tableau modifiable en mmoire */
char * s ="Bonsoir"; /* pointeur sur une constante */
t[1] = 'Z'; /* lgal car t est modifiable */
s[1] = 'A'; /*illgal car s pointeur sur une zone constante */
s = t; /* lgal car s est une variable */

B o n j o u r \0
t
ss
B o n s o i r \0
Chanes de caractres
Affichage

Affichage: directement dans printf, si chane simple :


%s pour affiche les chanes
char
char*str="Bonjour";
*str="Bonjour";
printf("%s",str);
printf("%s",str);/*/*affiche
afficheBonjour
Bonjour*/*/

La chane est affiche jusquau premier \0 rencontr

char
chart[]t[]=="Bon\0jour\0";
"Bon\0jour\0";
printf("%s",t);
printf("%s",t); /*/*affiche
afficheBon
Bon*/*/
Chanes de caractres
Lecture

Lecture: on utilise scanf, Code %s aussi


Pas besoin de & car une chane est dj une rfrence
sur une zone mmoire
Limiter la taille avec la syntaxe %nums pour viter les
dbordements de tampons

char
charstr[10];
str[10];
printf("Enterez
printf("Enterezvotre
votrenom
nom: :");
");
scanf("%s",
scanf("%s",str);
str); /*/*pas
pasde de&&car
carstr
strest
estune
unerfrence*/
rfrence*/
scanf("%9s",
scanf("%9s",str);
str); /*/*on
onlimite
limite99pour
pour\0\0*/*/
Fonctions de manipulation de
chanes
Le fichier en-tte string.h contient des dclarations de
fonctions permettant la manipulation de chanes de caractres
strlen(s) : retourne la longueur de la chane s sans compter
le '\0' final
char
char*str=Bonjo\0ur;
*str=Bonjo\0ur;
int
intLL=strlen(str);
=strlen(str);
printf("%d",L);
printf("%d",L); /*/*affiche
affiche55*/*/

strcpy (s, t ) : copie la chanes t vers s


char
chars[20]=porte;
s[20]=porte;
char
charr[10]=mine;
r[10]=mine;
strcpy(s,r);
strcpy(s,r);
printf("%s",s);
printf("%s",s); /*/*affiche
affichemine
mine*/*/
Fonctions de manipulation de
chanes
Le fichier en-tte string.h contient des dclarations de
fonctions permettant la manipulation de chanes de caractres
strcat(s, t): ajoute la chane t la fin de de la chane s
char
chars[20]=porte;
s[20]=porte;
char
charr[10]=mine;
r[10]=mine;
strcpy(s,r);
strcpy(s,r);
printf("%s",s);
printf("%s",s); /*/*affiche
afficheportemine
portemine*/*/

strncpy(s, t, n): copie au plus n caractres de t vers s

strncat(s, t, n) : ajoute au plus n caractres de t la fin de


s
char
chars[20]=porte;
s[20]=porte;
char
charr[10]=mine;
r[10]=mine;
strncat(s,r,2);
strncat(s,r,2);
printf("%s",s);
printf("%s",s); /*/*affiche
afficheportemi
portemi*/*/
Fonctions de manipulation de
chanes
Le fichier en-tte string.h contient des dclarations de
fonctions permettant la manipulation de chanes de caractres
strcmp(s, t): compare s et t pour l'ordre lexicographique
(ordre des mots dans un dictionnaire) et fournit un rsultat :
ngatif si s prcde t
zro si s est gal t
positif si s suit t

strchr (s, c) : retourne un pointeur sur la premire


occurrence dun caractre dans une chane ou NULL
...
Exemples

#include<stdio.h> #include<stdio.h>
#include<string.h> #include<string.h>
int main (){ int main (){
char t[] = "Bon\0jour\0"; char t[] = "Bon\0jour\0";
char *s; char s[10];
for(int i=0; i<strlen(t); i++) for(int i=0; i<strlen(t); i++)
printf(" %c ",t[i]); printf(" %c ",t[i]);
strcpy(s,t);
strcpy(s,t); printf("%s", s); /* affiche Bon*/
printf("%s", s); strcat(s,t);
/* ERREUR : allocation de mmoire!! */ printf("%s", s); /* affiche BonBon*/
printf("%s", t); /* Affiche Bon*/
printf("%s",strchr(s,n'));

Vous aimerez peut-être aussi