2016-12-25 1 views
2

Je voudrais écrire quelque chose comme ceci;Opérations de bouclage

for (op1 in (plus, minus, times, divby, exponent)) { 
    printf("%d", a op1 b); 
} 

de sorte que ce qui se termine réellement en cours d'exécution est quelque chose comme ça

printf("%d", a + b); 
printf("%d", a - b); 
printf("%d", a * b); 
printf("%d", a/b); 
printf("%d", a^b); 

Comment puis-je écrire cela?

+0

Ceci est trop large et oui, réalisable. Qu'avez-vous essayé? –

+0

J'ai essayé de définir les opérations comme variables de macro (#define plus +), mais je ne peux pas comprendre comment mettre les opérations dans un tableau que je peux boucler –

+3

btw 'a^b' n'est pas exponent, c'est xclusive OU . Vous pourriez boucler sur une liste de pointeurs de fonction acceptant 2 arguments par exemple. –

Répondre

3

Un tableau de pointeurs de fonction ferait l'affaire.

double plus(int a, int b); 
double minus(int a, int b); 
double times(int a, int b); 
double divby(int a, int b); 
double exponent(int a, int b); 

typedef double (*p_fun)(int a, int b); 

int main() 
{ 
    int a = 5, b = 10; 
    p_fun pa[] = {plus, minus, times, divby, exponent}; 
    for(int i = 0; i < sizeof(pa)/sizeof(p_fun); i++) 
    { 
     printf("%f\n", pa[i](a, b)); 
    } 
    return 0; 
} 
4

Puisque vous n'avez pas posté de code, je ne vais pas en écrire, mais je serai heureux de vous aider avec quelques concepts que vous pouvez transformer en code de travail.

  1. fonctions d'écriture pour effectuer des opérations individuelles (addition, soustraction, multiplication, etc).

  2. Prenez un tableau de function pointers, initialisez-le avec les fonctions individuelles que vous voulez exécuter.

  3. Parcourez la baie et transmettez les variables requises à l'appel de la fonction pour obtenir la sortie souhaitée.

Quelque chose comme (pseudo-code)

funcptr arr[SIZE] = { func1, func2, func3... }; 

for (int i = 0; i < SIZE ; i++) { 
    printf("%d\n", arr[i](a, b)); 
} 

Cela dit, juste une note, a^b est pas un "exposant" opérateur en C, comme vous aurait pu s'y attendre . C'est XOR au niveau du bit. Vous pouvez utiliser pow() pour y arriver.

Pour votre information, vous pouvez vous référer à this question pour des informations connexes.