2015-10-25 3 views
0

Je dois écrire une fonction en C pour mes devoirs. Étant donné les fonctions is_prime (n) et nth_prime (n), la première renvoyant 1 si n est premier (ou 0 s'il ne l'est pas) et nth_prime renvoyant le nième nombre premier, je dois écrire la fonction next_prime (count) qui compte le l'heure s'appelle, puis renvoie le nombre "count-th" nombre premier. count doit être une variable int statique non signée. Si n = 0 (n est indiqué avec un scanf), la valeur de comptage doit être réinitialisée à 0 et la fonction renvoie le premier nombre premier, 2.
Je ne peux pas utiliser de structures, de tableaux ou de récursion. Je suis novice en codage, et je ne sais pas quoi faire. J'utilise Visual Studio 2010 et je dois le compiler comme ISO C89 (ANSI C). Les fonctions doivent être écrites dans un fichier de bibliothèque, la seule chose qui va être évaluée, donc je ne peux pas utiliser count ++ dans la fonction main(). Voici ce que j'ai fait jusqu'ici.Fonction de comptage appels en ISO C89

unsigned int next_prime(unsigned int count) { 
    if(count == 0) { 
     if (n=!0) {      
      return nth_prime(count); 
      count++; 
     } else { 
      count = 0; 
      return 2; 
     }  
    } else {  
     if (n=!0) {      
      return nth_prime(count); 
     } else { 
      count = 0; 
      return 2; 
     }  
    } 
} 
+1

Si pas 'n = 0' être' n = 0'? – MikeCAT

+0

Commencez par créer une variable int statique non signée 'count'. – MikeCAT

+0

Je l'ai créé mais je l'ai mis en dehors du corps de la fonction. Est-ce que c'est faux? Oui, c'est n! = 0, j'ai fait je me trompe. Je m'excuse. – Luke

Répondre

0

Voici une fonction qui répondra à votre question:!

/* the function next_prime(count) */ 
unsigned int next_prime(unsigned int count) { 
    /* avoid "unused parameter" warning */ 
    (void)count; 
    /* introduce this block because defining the variable count here will read to an redeclaring error */ 
    { 
     static unsigned int count = 0; 
     int n = -1; 
     /* n is given with a scanf */ 
     scanf("%d", &n); 
     /* if n=0 */ 
     if (n == 0) { 
      /* count value must be reset to 0 */ 
      count = 0; 
      /* return the first prime number, 2 */ 
      return 2; 
     } else { 
      /* count the time it is called */ 
      count++; 
      /* return the "count-th" prime number */ 
      return nth_prime(count); 
     } 
    } 
}