Das Buch für Anfänger zur C Programmierung unter Linux und MS Windows, Einstieg in C Jürgen Wolf C C++ C/C++ Programmieren Linux ANSI C Standard C C99 Einstieg in C Buch Bücher Einstieg in C - C Kurs Programmieren C/C++ Tutorial Lösungen zu den Aufgaben von Kapitel 14 bis 16
  1. Hier ein möglicher Lösungsweg:

    #include <stdio.h>
    
    #define TAGE 7
    
    int main()
    {
       int einnahmen[TAGE];
       int i;
       int gesamt=0;
    
       for(i=0; i < TAGE; i++)
          {
             printf("Einnahmen von Tag %d: ",i+1);
             scanf("%d",&einnahmen[i]);
             gesamt+=einnahmen[i];
          }
    
       printf("Tagesdurchschnitt der Woche: %d\n",gesamt/TAGE);
       return 0;
    }
  2. Hier ein möglicher Ansatz:

    #include <stdio.h>
    
    #define TAGE  7
    #define WOCHE 4
    
    int main()
    {
       int einnahmen[TAGE][WOCHE];
       int i,j;
       int gesamt[WOCHE]={0};
    
       for(i=0; i < WOCHE; i++)
          {
             for(j=0; j < TAGE; j++)
                {
                   printf("Einnahmen von Tag %d Woche %d: ",j+1, i+1);
                   scanf("%d",&einnahmen[j][i]);
                   gesamt[i]+=einnahmen[j][i];
                }
          }
       for(i=0; i < WOCHE; i++)
          printf("Tagesdurchschnitt der %d.Woche: %d\n",i,gesamt[i]/TAGE);
       return 0;
    }
  3. Eine mögliche Lösung:

    #include <stdio.h>
    
    void strupper(char *string)
    {
       for(; *string != '\0'; string++ )
          if(*string >= 'a' && *string <='z')
             *string -= 32;   /* siehe ASCII-Tabelle */
    }
    
    void strlower(char *string)
    {
       for(; *string != '\0'; string++ )
          if(*string >= 'A' && *string <='Z')
             *string += 32;
    }
    
    
    int main()
    {
       char str[255];
    
       fgets(str, 255, stdin);
       strupper(str);
       printf("%s",str);
       strlower(str);
       printf("%s",str);
       return 0;
    }
  4. Mit call by refernce wird bei einem Aufruf einer Funktion die Adresse der Variable als Argument an den Parameter der Funktion, einen Zeiger, übergeben. Über diese Adresse kann man nun direkt auf den Speicherbereich dieser Variablen zugreifen und damit den Wert beliebig ändern. Verändernungen an den Werten mit call by reference sind allerdings endgültig, im Gegensatz zum call by value wo Sie ja mit einer Kopie in der Funktion gearbeitet haben.

  5. Hier eine Lösung dazu:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    char *strrev(char *s)
    {
       int i;
       char tmp,*p;
    
       i=strlen(s) - 1;
       p=s;
    
       while(*s != '\0' && i > 0)
          {
             tmp = *s;
             *s = *(s+i);
             *(s+i) = tmp;
             s++;
             i-=2;
          }
       return p;
    }
    
    int main()
    {
            char str[]="Hallo Welt";
            printf("%s umgedreht ",str);
            printf("%s\n", strrev(str));
    
            return 0;
    }
  6. Hier die Lösung:

    #include <stdio.h>
    
    void strsecret(char *string, int key)
    {
       for(; *string != '\0'; string++ )
          if(*string != ' ')
             *string += key;
    }
    
    void strsecret_return(char *string, int key)
    {
       for(; *string != '\0'; string++ )
          if(*string != ' ')
             *string -= key;
    }
    
    
    int main()
    {
       char str[4096];
       int key;
    
       fgets(str, 4096, stdin);
       strsecret(str, 666);
       printf("%s\n",str);
    
       strsecret_return(str, 666);
       printf("Dekodiert: %s\n",str);getchar();
    
       return 0;
    }

    Dieses Beispiel berücksichtigt allerdings nur darstellbare Zeichen. Sonderzeichen unter dem ASCII-Wert 32 müssen extra behandelt werden.

  7. Hier der Lösungsweg:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    #define PASS "myname"
    #define KEY  1234
    
    int main(int argc, char *argv[])
    {
       char pas[255];
    
       if(argc < 3)
          {
              printf("Aufruf: Programmname Passwort Schlüsselnr.\n");
              exit(0);
          }
    
       if( (strcmp(PASS, argv[1]) == 0) && atoi(argv[2]) == KEY)
          printf("Passwort und Schlüssel stimmen\n");
       else
          printf("Zugriff verweigert\n");
    
       return 0;
    }