2016-08-03 3 views
-1

Ich weiß, die Antworten sind a = 0, b = 10 und c = 2, weil ich es geschrieben und kompiliert habe, aber ich bin mir nicht sicher, wie die Antworten gefunden wurden.Tracing-Code nach Funktionen

#include <stdio.h> 

int f(int a, int b) 
{ 
    int c; 

    c=3*a-b; 
    a=(c+17)%23; 
    b=23%(a+5); 

    return a-b+c; 
} 

int main() 
{ 
    int a=7, b=3, c=2; 

    a=f(c,b); 
    b=f(a,c); 
    printf("a=%d,b=%d,c=%d\n", a,b,c); 

    return 0; 
} 
+1

Sieht aus wie einfache Mathematik. Worüber bist du dir besonders unsicher? – dbush

+0

Was ist das Problem hier? Dies ist nur ein paar einfache mathematische Operationen ... – naccyde

+0

Ich muss nur den Punkt vermissen. Ich bekomme a = 19, b = 23, c = 18, wenn ich es von Hand nachführe. –

Antwort

2

Lassen Sie sich durch die Linie dieser Linie tun -

a = f (c, b) -

c = 3 * a - b --> (3 * 2) - 3 = 3 
a = (c+17) % 23 --> 20 % 23 = 20 
b = 23 % (a+5) --> 23 % 25 = 23 

return a - b + c --> 20 - 23 + 3 = 0 

a = 0

b = f (a, c) -

c = 3 * a - b --> (3 * 0) - 2 = -2 
a = (c+17) % 23 --> (-2 + 17) % 23 = 15 
b = 23 % (a+5) --> 23 % 20 = 3 

return a - b + c --> 15 - 3 + -2 = 10 

b = 10

Und c Wert bleiben 2

0

Der Code ist voll von Neuzuordnungen und überflüssige Initialisierungen, die den Code unnötig schwer zu folgen macht. Wenn wir es so umschreiben, werden die Berechnungen einfacher zu verstehen sein:

#include <stdio.h> 

int f(int a, int b) 
{ 
    const int c = 3 * a - b; 
    const int d = (c + 17) % 23; 
    const int e = 23 % (d + 5); 

    return c + d - e; 
} 

int main(void) 
{ 
    const int c = 2; 
    const int a = f(c, 3); 
    const int b = f(a, c); 

    printf("a=%d,b=%d,c=%d\n", a, b, c); 
    return 0; 
} 
Verwandte Themen