2016-12-25 18 views
2

Я хотел бы написать что-то вроде этого;Циклические операции

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

так, что на самом деле в конечном итоге выполняется что-то вроде этого

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

Как я могу написать это?

+0

Это слишком широкий и да, достижимый. Что вы пробовали? –

+0

Я попытался определить операции как макропеременные (#define plus +), но я не могу понять, как поместить операции в массив, который я могу перебрать через –

+3

. Btw 'a^b' не является показателем, это xclusive OR , Вы можете зациклиться на списке указателей функций, принимающих, например, 2 аргумента. –

ответ

3

Array функции указатели бы сделали.

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

Поскольку вы не отправили ни одного кода, я не буду писать никому, но буду рад помочь с некоторыми концепциями, которые вы можете превратить в рабочий код.

  1. прописывать функции для выполнения отдельных операций (сложение, вычитание, умножение и т.д.).

  2. Возьмите массив function pointers, инициализируйте его с помощью отдельных функций, которые вы хотите выполнить.

  3. Прокрутите массив и передайте необходимые переменные вызову функции, чтобы получить желаемый результат.

Нечто подобное (псевдокоду)

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

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

, что сказал, просто записка, a^b является не"показателя" оператора в C, как вы могли бы ожидать, , Это побитовое XOR. Вы можете использовать pow(), чтобы это сделать.

FYI, вы можете обратиться к this question за соответствующую информацию.