1. Einführung
2. Pointer Grundlagen
2.1 Fragen
2.2 Aufgaben
3. Pointer & Felder
3.1 Fragen
3.2 Aufgaben
4. Pointer & Funktionen
4.2 Fragen
4.3 Aufgaben
5. Lösungen
6. Download

5. Lösungen
Ausführliche Lösungen zu den Fragen und die Ergebnisse der Aufgaben jeder Einheit können hier eingesehen werden.
Bitte Kapitel auswählen:
2. Pointer Grundlagen
2.2.1 Pointer deklarieren und initialisieren
2.2.2 Adresse ausgeben
2.2.3 Verändern über Pointerzugriff
3. Pointer & Felder
3.2.1 ASCII-Tabelle
3.2.2 Messwerttabelle
3.2.3 Schachbrett
4. Pointer & Funktionen
4.2.1 Zahlentausch
4.2.2 Kaugummiautomat
4.2.3 Vektor 3D
Lösungen:
2. Pointer Grundlagen
2.2.1 Pointer deklarieren und initialisieren nach oben
01 #include <stdio.h>
02 
03 int main(void)
04 {
05     /*Variablen deklarieren und initialisieren*/
06     int var_a=4;
07     short var_b=26;
08     long var_c=586;
09     
10     /*Pointer deklarieren*/
11     int *pt_a;
12     short *pt_b;
13     long *pt_c;
14     int *pt_d=NULL;
15     
16     /*Anfangsadressen dem Pointer zuweisen*/
17     pt_a = &var_a;
18     pt_b = &var_b;
19     pt_c = &var_c;
20    
21     getchar();
22     return 0;
23 }
2.2.2 Adresse ausgeben nach oben
01 #include <stdio.h>
02
03 int main(void)
04 {
05     /*Variablen deklarieren und initialisieren*/
06     int var_a=4;
07     short var_b=26;
08     long var_c=586;
09    
10     /*Pointer deklarieren*/
11     int *pt_a;
12     short *pt_b;
13     long *pt_c;
14     int *pt_d=NULL;
15    
16     /*Anfangsadressen dem Pointer zuweisen*/
17     pt_a = &var_a;
18     pt_b = &var_b;
19     pt_c = &var_c;
20    
21     printf ("Ausgabe der Speicheradressen: \n");
22     printf ("------------------------------\n");
23     printf ("Variable 1 (direkt):         %d\n", &var_a);
24     printf ("Variable 1 (ueber Pointer):  %d\n", pt_a);
25     printf ("Variable 2 (direkt):         %d\n", &var_b);
26     printf ("Variable 2 (ueber Pointer):  %d\n", pt_b);
27     printf ("Variable 3 (direkt):         %ld\n", &var_c);
28     printf ("Variable 3 (ueber Pointer):  %ld\n", pt_c);
29     printf ("Nullpointer:                 %d\n", pt_d);
30     
31     getchar();
32     return 0;
33 }
2.2.3 Verändern über Pointerzugriff nach oben
01 #include <stdio.h>
02
03 int main(void)
04 {
05     /*Variablen deklarieren und initialisieren*/
06     int var_a=4;
07     short var_b=26;
08     long var_c=586;
09    
10     /*Pointer deklarieren*/
11     int *pt_a;
12     short *pt_b;
13     long *pt_c;
14     int *pt_d=NULL;
15    
16     /*Anfangsadressen dem Pointer zuweisen*/
17     pt_a = &var_a;
18     pt_b = &var_b;
19     pt_c = &var_c;
20    
21     printf ("Ausgabe der Speicheradressen: \n");
22     printf ("------------------------------\n");
23     printf ("Variable 1 (direkt):         %d\n", &var_a);
24     printf ("Variable 1 (ueber Pointer):  %d\n", pt_a);
25     printf ("Variable 2 (direkt):         %d\n", &var_b);
26     printf ("Variable 2 (ueber Pointer):  %d\n", pt_b);
27     printf ("Variable 3 (direkt):         %ld\n", &var_c);
28     printf ("Variable 3 (ueber Pointer):  %ld\n", pt_c);
29     printf ("Nullpointer:                 %d\n\n", pt_d);
30    
31     *pt_a = 18;
32     *pt_b = 20;
33     *pt_c = 22;
34   
35     printf ("Ausgabe ueber Variable: \n");
36     printf ("------------------------------\n");
37     printf ("Variable 1 (direkt):         %d\n", var_a);
38     printf ("Variable 2 (direkt):         %d\n", var_b);
39     printf ("Variable 3 (direkt):         %ld\n\n", var_c);
40
41     var_a = 19;
42     var_b = 21;
43     var_c = 23;
44    
45     printf ("Ausgabe ueber Pointer: \n");
46     printf ("------------------------------\n");
47     printf ("Variable 1 (ueber Pointer):  %d\n", *pt_a);
48     printf ("Variable 2 (ueber Pointer):  %d\n", *pt_b);
49     printf ("Variable 3 (ueber Pointer):  %ld\n", *pt_c);
50    
51     getchar();
52     return 0;
53 }
3. Pointer & Felder
3.2.1 ASCII-Tabelle nach oben
01 # include<stdio.h>
02 
03 int main(void)
04 {
05     char ascii[255];
06     char *ascii_pt;
07     int i=0;
08 
09     ascii_pt=&ascii[0];
10     
11     for(i=0; i<255; i++)
12     {
13         *(ascii_pt+i)=i;
14     }
15      
16     for(i=0; i<255; i++)
17     {
18            printf("%3d: %c\n",(i+1), *(ascii_pt+i));     
19    }   
20 
21     printf("%c", ascii[0]);
22 
23     getchar();
24     fflush(stdin);
25     return 0;
26 }
3.2.2 Messwerttabelle nach oben
01 #include<stdio.h>
02 
03 int main(void)
04 {
05   float messwert[10];
06   float *messwert_pt;
07   int i=0;
08 
09   messwert_pt = &messwert[0]; 
10 
11   for(i=0;i<10;i++)
12   {
13      printf("Bitte den %2d. Messwert eingeben: ", i+1);
14      scanf("%f", (messwert_pt+i));
15   }
16   
17   printf("\n*******************\n");
18   printf("* Nr. * Messwert  *\n");
19   printf("*******************\n");
20 
21   for(i=0;i<10;i++)
22   {
23      printf(" %2d   *  %6.2f\n", i+1, *(messwert_pt+i));
24   }  
25   printf("*******************\n"); 
26 
27   fflush(stdin);
28   getchar();
29   return 0;
30 }
3.2.3 Schachbrett nach oben
01 #include<stdio.h>
02 
03 int main(void)
04 {
05   char schachfeld [8][8];
06   char *pt_schachfeld;
07   pt_schachfeld = &schachfeld [0][0];
08   int i=0, j=0;
09   
10   /* Schachbrett initialisieren */
11   
12   do{
13     for (j=0; j<8; j++)
14     {        
15         if(i%2==0)
16         {
17              *(pt_schachfeld+i)=' ';
18         }
19         else
20         {
21              *(pt_schachfeld+i)='#';     
22         }
23         i++;
24     }
25     for (j=0; j<8; j++)
26     {        
27         if(i%2==0)
28         {
29              *(pt_schachfeld+i)='#';
30         }
31         else
32         {
33              *(pt_schachfeld+i)=' ';     
34         }
35         i++;
36     }
37   }while(i<8*8);
38   
39   /* Schachbrett ausgeben */
40   
41   printf ("Das Schachbrett: \n\n");
42 
43   for (i=0; i<8; i++)
44   {
45     for (j=0; j<8; j++)
46     {
47        printf ("| %2c ", *pt_schachfeld++);
48     }
49     printf ("|\n\n\n");
50    } 
51           
52   fflush(stdin);
53   getchar();
54   return 0;
55 }
4. Pointer & Funktionen
4.2.1 Zahlentausch nach oben
01 #include<stdio.h>
02
03 /*Prototyp der Tausche Funktion$*/
04 void tausche(float *zahla, float *zahlb);
05
06 int main(void)
07 {
08     float a,b;
09     float *a_pt, *b_pt;
10    
11     /*2 Zahlen einlesen*/
12     printf("Programm zum tauschen zweier float-Zahlen\n\n");
13     printf("Bitte erste Zahl eingeben:\n");
14     fflush(stdin);
15     scanf("%f", &a);
16     printf("Jetzt bitte die zweite Zahl eingeben:\n");
17     fflush(stdin);
18     scanf("%f", &b);
19     
20     /*Testausgabe*/
21     printf("\na ist %.3f und b ist %.3f\n\n", a, b);
22     printf("Die Variablen werden jetzt getauscht.\n\n");
23    
24     /*Pointer setzen*/
25     a_pt=&a;
26     b_pt=&b;
27     
28     /*Variablen tauschen*/    
29     tausche(a_pt, b_pt);
30
31     /*Testausgabe*/
32     printf("a ist %.3f und b ist %.3f\n", a, b);
33     
34     /*Auf Enter warten*/
35     fflush(stdin);
36     getchar();
37     return 0;
38 }
39 
40 /* tausche - Funktion */
41 void tausche(float *zahla, float *zahlb)
42 {
43     float temp = 0;
44    
45     temp=*zahla;
46     *zahla=*zahlb;
47     *zahlb=temp;    
48 }
4.2.2 Kaugummiautomat nach oben
01 #include <stdio.h>
02
03 void aufgeldwarten(int *geldeinwurf_pt);
04 void kaugummiausgeben(int *geldeinwurf_pt, int *geldstand_pt, int *kaugummistand_pt);
05
06 int main(void)
07 {
08     int kaugummistand=100, *kaugummistand_pt;
09     int geldstand=0, *geldstand_pt;
10     int geldeinwurf=0, *geldeinwurf_pt;
11     
12     geldstand_pt=&geldstand;
13     kaugummistand_pt=&kaugummistand;
14     geldeinwurf_pt=&geldeinwurf;
15     printf("Kaugummiautomat bereit.\n\n");
16    
17     do
18     {
19         printf("Noch %d Kaugummis im Automat.\n", kaugummistand);
20         if((geldstand < 100) && (kaugummistand>0))
21         {
22           aufgeldwarten(geldeinwurf_pt);
23           kaugummiausgeben(geldeinwurf_pt, geldstand_pt, kaugummistand_pt);    
24         }
25     }while((kaugummistand>0) && (geldstand<=100));
26     
27     
28     printf("Bitte Kaugummis auffuellen und Geldbox leeren!");
29       
30     fflush(stdin);
31     getchar();
32     return 0;
33 }
34 
35 void aufgeldwarten(int *geldeinwurf_pt)
36 {
37     char janein;    
38     do
39     {
40         printf("Willst du 1 Euro fuer Kaugummi einwerfen?(j/n)\n");
41         fflush(stdin);
42         janein=getchar();
43        
44     }while(janein!='j');
45     *geldeinwurf_pt=1; 
46 }
47 
48 void kaugummiausgeben(int *geldeinwurf_pt, int *geldstand_pt, int *kaugummistand_pt)
49 {
50     *geldeinwurf_pt=0;
51     *geldstand_pt=*geldstand_pt+1;
52     *kaugummistand_pt=*kaugummistand_pt-1;
53     
54     printf("Hier ist dein Kaugummi:\n");
55     printf("  __\n");
56     printf(" /o \\ \n");
57     printf(" \\__/\n\n");
58 
59 }
4.2.3 Vektor 3D nach oben
01 #include<stdio.h>
02 #include<math.h>
03
04 double abstand_3d_zwischen_a_und_b(int *a, int *b, int *c);
05 
06 int main(void)
07 {
08     int a[3]={6,3,4};
09     int b[3]={12,9,10};
10     int c[3]={0,0,0};
11     int *a_pt, *b_pt, *c_pt;
12     double betrag_des_vektors_c=0;
13     int i=0;
14 
15     a_pt=a;
16     b_pt=b;
17     c_pt=c;
18 
19     //printf("%d",*(a_pt+0));
20     betrag_des_vektors_c = abstand_3d_zwischen_a_und_b(a_pt, b_pt, c_pt);
21 
22     printf("Ausgabe der Vektoren:\n");
23     printf("=====================\n");
24     printf(" a:     b:     c:\n\n");
25     for(i=0; i<3; i++)
26     {
27         printf("|%3d|  |%3d|  |%3d|\n", a[i], b[i], c[i]);
28     }
29 
30     printf("\nDer Betrag des Vektors c ist: %.3f", betrag_des_vektors_c);
31 
32     fflush(stdin);
32     getchar();
33     return 0;
34 }
35 
36 double abstand_3d_zwischen_a_und_b(int *a, int *b, int *c)
37 {
38     double betrag;
39     int i=0;
40 
41     for(i=0; i<3; i++)
42     {
43         *(c+i)=(*(b+i))-(*(a+i));
44     }
45 
46     /* double pow(double x, double y); x^y   */
47     /* double sqrt(double x); Wurzel für x>0 */
48 
49     if(pow(*(c+0),2.0)+pow(*(c+1),2.0)+pow(*(c+2),2.0) > 0)
50     {
51      betrag = sqrt(pow(*(c+0),2.0)+pow(*(c+1),2.0)+pow(*(c+2),2.0));
52      return betrag;
53     }
54     else
55     {
56         printf("Achtung, Division durch null nicht moeglich. Fehler!!!\n\n");
57         return 0;
58     }
59 
60 }