2016-12-25 3 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'は指数ではなく、排他的OR 。たとえば、2つの引数を受け入れる関数ポインタのリストをループすることができます。 –

答えて

3

ファンクションポインタの配列が行います。

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. ループを配列に渡し、目的の出力を得るために必要な変数を関数呼び出しに渡します。

あなたが期待している可能性があるとしてちょうどノート、a^bは、Cでない"指数"オペレータである、と述べた(擬似コード

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

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

ような何か。これはビット単位のXORです。あなたはそれを達成するためにpow()を利用することができます。

FYIについては、関連情報についてはthis questionを参照してください。

関連する問題