N.F.I. 2 ième année |
Langage C
|
octobre 2000 |
Feuille 3 : lecture d'instructions
- Implantation de variables
Déterminez le nombre total d'octets réservés sur la machine dahlia,
pour mémoriser les variables déclarées par:
char car, c1; int i, maxt;
char c2; double dd, moy; char fin, c3; int nb;
Si vous placez les variables de telle sorte que les variables de
type int soient à une adresse multiple de 4, et celles de type
double soient à une adresse multiple de 8, quel encombrement, en
octets, obtenez-vous quand:
- les emplacements des variables se suivent dans l'ordre des
déclarations
- les variables sont implantées suivant le type: 'double'
puis 'int' puis 'char' (ce qui donne ici l'ordre: dd, moy i,
maxt, nb ...)
- Encombrement mémoire
Vous devez mémoriser 1000 valeurs numériques entières; déterminer
l'encombrement mémoire à prévoir.
Changez-vous vos prévisions si vous savez que ces entiers sont compris
entre -10000 et 20000 ?
.
- Compréhension d'instructions
Affichage obtenu par l'exécution de
- a)
#include <stdio.h>
void main() {
int i; char c;
for( i=4; i<9; i++) printf(" %d", i) ;
printf("\n");
for( c='4'; c<'9'; c++) printf(" %c", c) ;
printf("\n");
for( c='4'; c<'9'; c++) printf(" %d", c) ;
printf("\n");
for( i=10; i<16; i++)
printf(" %d %c", i-10+(int)'A', i-10+(int)'A');
printf("\n");
}
- b)
#include <stdio.h>
void main() {
int i = 65 ; char c = 'a';
printf(" %d %c\n", i+1 ,i+1) ;
printf(" %c%c%c", ' ', (int)c, '\n') ;
printf(" %d%d%c%c\n", ' ', (int)' ', (char)32, '0') ;
printf("%d %d --- %d %f", 4/3, ' ', 1 / 4 , i+1./4 );
}
- c)
#include <stdio.h>
void main() {
double x = 314.159 ; int n;
printf(" %d %d %f\n", (n=x), n/100, n/100.);
printf(" %d %d %d\n", (x < n), (1/x > 0), (x+1/2 == x ));
printf(" %d %d %d\n", 1/n, (1/n > 0), ( 1/n == 1/2));
printf(" %d %f %f\n", (x=n) , x/100 , x/100.) ;
}
- d)
#include <stdio.h>
void main() {
int n, i;
printf( "\nUn entier:"); scanf("%d" &n );
while( n > 0 ) {
i = n-1;
while( i > n-1-i) {
printf(" %4d %4d", i , n-1-i);
i = i-1;
}
if( i == n-1-i ) printf(" %4d ", i );
printf( "\nUn entier:"); scanf("%d" &n );
}
}
- e)
#include <stdio.h>
void main() {
int d, n;
printf("Un entier supérieur à 1 : "); scanf("%d",&n);
d = 2;
while ( d < n ) {
if( n % d == 0 ) {
printf(" %d", d);
n = n / p;
}
d = d+1;
}
}
- e)
#include <stdio.h>
void main() {
}
- Simplifiez les instructions
- a)
#include <stdio.h>
void main() {
int i, n, d, sd;
printf( "Un entier positif ") ; scanf( "%d", & n );
d=1; sd=0;
printf( "Diviseurs de %d :", n );
while( d <= n/d ) {
i=d;
if( n % i == 0) {
printf(" %d", i );
sd = sd + i; d = i;
d = d + 1;
}
else d = d + 1;
if(i < 1)
printf( "Valeur de n incorrecte" );
}
if (sd == 0) printf( " pas de diviseur\n";
else if ( sd == n )
printf( "%d est un nombre parfait\n", n );
d = 1+n; i = d-1;
}
- b)
if( n == 0 ) som = 0;
else {
som = 0;
i = 0;
while( i < n ) {
scanf("%d", & a );
if( a < a + 1 ) som = som + a;
i = i+1 ;
}
}
- c)
int cpt, n = 10;
cpt = 0;
while ( cpt < n-1 ) cpt++;
if ( cpt < n-1 ) printf( "Début : " );
printf( "%d valeurs", n) ;
- d)
int i, n=10; double som;
for( i=0; i < n; i++) {
if( i == 0 ) som = 0;
else som = som + 1 / double(i);
if( i == n )
printf( " Résultat: %lf\n", som );
}
- e)
double val, t[100]; int i, n, nb ;
scanf( "%d", & n ); nb = 0;
if( n > 0 ) {
for( i=0; i<n i++ ) {>
nb = nb+1;
scanf( "%lf", & val );
if( i < n) t[i] = val;
}
printf( "%d valeurs réelles lues", nb );
}
else printf( "0 valeurs réelles lues" );
- f)
n=0; i=0; cpt=i+1;
while( i < n && t[i] <= t[cpt] ) {
if( i < n && t[i] <= t[cpt] ) printf("%d", i );
else if( i == n ) printf( "Tableau ordonné" );
else printf( "Valeurs croissantes jusqu'à l'indice %d", i);
- g)
n = 12;
i = n ; while( i > 0 ) i--;
while( i < n && t[i]%2 == 0 ) i++;
if( i < n ) {
if(t[i]%2 == 0) printf(" premier nombre pair: %d",t[i]);
else printf( " premier nombre pair: %d", t[i] );
}
else printf( "Tous les nombres sont pairs" );