Notice: Undefined variable: SERVER_ADDR in /mnt/114/sda/5/e/thomas.leduc/constantes.php on line 20
Petite FAQ concernant le langage C...
[ accueil | doctorat | Java | JavaScript | faqs | cours ]

rdv sur mon nouveau site - visit my new website

Petite FAQ concernant le langage C...

Notes :
  1. Matrices et pointeurs
  2. /* ce programme permet de passer une matrice en argument de procedure */
    
    #include <stdio.h>
    #include <stdlib.h>
    #define NBC 5
    
    void afficher(double (*M)[NBC], int nbl, int nbc)
    {
        /* dans ce contexte *(*(M+i)+j) désigne le même élément que M[i][j] */
        int ligne, colonne;
        for (ligne = 0; ligne < nbl; ligne++)
    	for (colonne = 0; colonne < nbc; colonne++)
    	    printf("%4.1f%c", M[ligne][colonne],
    		   (colonne == nbc - 1) ? '\n' : '\t');
    }
    
    int main(void)
    {
        /* matrice à trois lignes et cinq colonnes définie statiquement : */
        double Matrice[][NBC] =
    	{ {1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15} };
        double (*pMatrice)[NBC] = Matrice;
        afficher(pMatrice, 3, NBC);
        return EXIT_SUCCESS;
    }
    
  3. Itoa et atoi
  4. /* ce programme permet de convertir le premier argument de la ligne de
     * commande en entier d'abord ("man 3c atoi"), puis de convertir cet entier en
     * une chaîne de caractères ("man 3 sprintf"). Prenez garde cependant à ce que
     * cet entier ne sorte pas de l'intervalle {INT_MIN, ..., INT_MAX}. Ces deux
     * bornes sont définies dans le fichier /usr/include/limits.h et valent
     * respectivement (-2147483647-1) et 2147483647 sur bacchus.
     */
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
        int unEntier;
        char *uneChaine;
    
        unEntier = atoi(argv[1]);
        uneChaine = (char *) calloc(8, sizeof(char));
        if (uneChaine != NULL)
    	sprintf(uneChaine, "%d", unEntier);
    
        printf("atoi : %d\nitoa : %s\n", unEntier, uneChaine);
        return EXIT_SUCCESS;
    }
    
  5. Génération d'un nombre entier pseudo-aléatoire
  6. /* 
     * Ce programme permet de generer aleatoire un entier naturel compris entre 0
     * et le nombre passe en argument de la ligne de commande. 
     */
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <time.h>
    #include <unistd.h>
    
    int alea(int N)
    {
        /* d'apres :
         * http://www.eskimo.com/~scs/C-faq/q13.16.html 
         * http://www.ulib.org/webRoot/Books/Numerical_Recipes/bookcpdf.html
         * RAND_MAX est definie dans /usr/include/stdlib.h et vaut (2^15)-1
         */
        return (int) (N * (double) rand() / ((double) RAND_MAX + 1));
    }
    
    int main(int argc, char *argv[])
    {
        if (argc != 2) {
    	fprintf(stderr, "Usage: %s UnEntierNaturel\n", argv[0]);
    	return EXIT_FAILURE;
        }
        /* initialisation du generateur aleatoire */
        srand((unsigned int) time(NULL) + getpid());
        printf("%d\n", alea(atoi(argv[1])));
    
        return EXIT_SUCCESS;
    }
    
  7. Copie du contenu d'un tableau dans un autre
  8. /*
     * Cet exemple presente une solution de copie du contenu d'un tableau de
     * flottants dans un autre, differente de celle qui consiste a dupliquer les
     * elements terme a terme. L'emploi du memcpy est "rentable" du point de vue
     * de l'efficacite surtout si l'on n'active pas les options d'optimisation a
     * la compilation.
     */
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>		/* necessaire au memcpy */
    
    int main(int argc, char *argv[])
    {
        double *src, *dst;
        int i, n;
    
        n = atoi(argv[1]);
        src = (double *) calloc(n, sizeof(double));
        dst = (double *) calloc(n, sizeof(double));
    
        /* initialisation du tableau src */
        for (i = 0; i < n; i++)
    	src[i] = (double) rand() / ((double) RAND_MAX + 1);
    
        /* copie du contenu du tableau src dans le tableau dst */
        memcpy(dst, src, n * sizeof(double));
    
        free(src);
        free(dst);
        return EXIT_SUCCESS;
    }
    

Notice: Undefined index: SCRIPT_FILENAME in /mnt/114/sda/5/e/thomas.leduc/lib/formatage.php on line 49

Copyright © Thomas LEDUC, version 0.2, le 1 janvier 1970.
Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'thomas.leduc'@'172.20.245.56' (using password: YES) in /mnt/114/sda/5/e/thomas.leduc/lib/mysql.php on line 20

Notice: sql.free.fr thomas.leduc PASSWD ... est injoignable !; in /mnt/114/sda/5/e/thomas.leduc/lib/divers.php on line 6