0 Daumen
260 Aufrufe

Frage:

Betrachten Sie die folgenden Ausschnitte aus einem C-Programm:

1 // Einbnden der benötigten Bibliotheken und Header−Dateien
2 #include <s t d i o . h>
3 #define ABS(A) ( ( (A) >0) ? (A) : −(A) )
4 #define SIGN(A) ( ( (A) >0) ? 1 : ( ( (A) <0) ? −1 : 0 ) )
5 #define GLOBALI 6
6
7 int main ( ) {
8     int i , j , k ;
9     double x , y , z ;
10   i = GLOBALI;
11   i=i >> 2 ;
12   j = −( i << 3 ) ;
13   j /= 3 . 9 ;
14   k = SIGN( j ) ;
15   k++;
16   k∗= ABS( i ) ;
17   if ( k ) x = 2 . 1 ;
18   else x = −2.1;
19   y = ( int ) x ;
20   z = 3∗ ( ( int ) ( x / 3 ) ) − 1 ;
21   i f ( x++ >0) return −1;
22   y += 1 . 5 ;
23   z −= 1 . 4 ;
24   return 0 ;
25 }
Gehen Sie die Schritte der Funktion durch und dokumentieren Sie die durchgeführten Updates.
Welche Werte haben die Variablen i, j, k, y und z, wenn das Programm terminiert und welchen
Wert gibt das Programm zurück?
Hinweis: Wir setzen eine Binärdarstellung der Maschinenzahlen (d.h. b = 2) voraus.

Avatar von

1 Antwort

0 Daumen

Durch Einfügen geeigneter printf-Anweisungen kannst du dir ausgeben lassen, welchen Wert eine bestimmte Variable nach einer bestimmen Zeile hat.

Beispiel.

#include <stdio.h>
#define ABS(A) (((A) > 0) ? (A) : -(A))
#define SIGN(A) (((A) > 0) ? 1 : (((A) < 0) ? -1 : 0))
#define GLOBALI 6

int main() {
  int i, j, k;
  double x, y, z;
  i = GLOBALI;
  i = i>>2 ;
  j = -(i<<3);
  j /= 3.9;
  printf("%d\n",j); // Gibt den aktuellen Wert von j aus
  k = SIGN(j);
  k++;
  k *= ABS(i) ;
  if(k) x = 2.1;
  else x = -2.1;
  y = (int)x;
  z = 3*((int)(x/3))-1 ;
  if (x++ > 0) return -1;
  y += 1.5;
  z -= 1.4;
  return 0;
}

Natürlich könntest du auch einen Debugger verwenden anstatt dieses sogenannte Caveman-Debugging.

Avatar von 5,6 k

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community