CKurs - Aufgaben zu C

Google

1.Aufgabe Zwei-Dimensionale Felder und Matrizen

Aufgabenstellung:

Das folgende C-Programm soll Funktionen zur Addition, Multiplikation und Ausgabe von nxn-Matrizen bereit stellen. Definieren und rufen Sie bitte die drei Funktionen auf, sodass das Programm die richtigen Ergebnisse liefert.

CCode:

#include <stdio.h>

/* Globale Konstante */

#define N 3

/* Funktionen Deklaration */

void add_matrices (double A[N][N], double B[N][N], double result[N][N]);

void mult_matrices(double A[N][N], double B[N][N], double result[N][N]);

void print_matrix(double M[N][N]);

int main(void)

{

   double m1[N][N] = {{10.5, 3.4, -4.12}, {1.0, 10.2, -2.9}, {-1.0, -2.0, 5.1}};

   double m2[N][N] = {{8.6, 13.7, 0.0}, {77.7, 10.8, 2.0}, {0.0, 2.2, 6.6} };

   double r[N][N];

   /* Rufe die Matrizen-Addition auf */

  

   /* Rufe die Ausgabe-Funktion auf */

   /* Rufe die Funktion zur Matrizen-Multiplikation auf */

   /* Rufe die Ausgabe-Funktion auf */

   return 0;

}

/* Funktionen-Definition */

void add_matrices (double A[N][N], double B[N][N], double result[N][N])

{

  /* Anweisungen */

}

void mult_matrices(double A[N][N], double B[N][N], double result[N][N])

{

   /* Anweisungen */

}

void print_matrix(double M[N][N])

{

   /* Anweisungen */

}

 

Lösung:

Das Programm

CCode:

#include <stdio.h>

/* Globale Konstante */

#define N 3

/* Funktionen Deklaration */

void add_matrices (double A[N][N], double B[N][N], double result[N][N]);

void mult_matrices(double A[N][N], double B[N][N], double result[N][N]);

void print_matrix(double M[N][N]);

int main(void)
{
double m1[N][N] = {{10.5, 3.4, -4.12}, {1.0, 10.2, -2.9}, {-1.0, -2.0, 5.1}};
double m2[N][N] = {{8.6, 13.7, 0.0}, {77.7, 10.8, 2.0}, {0.0, 2.2, 6.6} };
double r[N][N];
freopen( "stdout.txt", "w", stdout ); //Leitet die Standardausgabe in die Datei stdout.txt um
/* Rufe die Matrizen-Addition auf */
add_matrices(m1,m2,r);
/* Rufe die Ausgabe-Funktion auf */
print_matrix(r);
/* Rufe die Funktion zur Matrizen-Multiplikation auf */
mult_matrices(m1,m2,r);
/* Rufe die Ausgabe-Funktion auf */
print_matrix(r);
return 0;

}

/* Funktionen-Definition */
void add_matrices (double A[N][N], double B[N][N], double result[N][N])
{
int i,j;
for(i=0;i<N;i++)
{
for (j=0;j<N;j++)
result[i][j]=A[i][j]+B[i][j];
}
}

void mult_matrices(double A[N][N], double B[N][N], double result[N][N])
{
int i,j,k;
double tmp;
for(i=0;i<N;i++)
{
for (j=0;j<N;j++){
tmp=0;
for(k=0;k<N;k++)
tmp+=A[i][k]*B[k][j];
result[i][j]=tmp;
}
}
}
void print_matrix(double M[N][N])
{
int i,j;
for (i=0; i<N;i++){
printf("|");
for(j=0;j<N;j++){
printf("%8.2f",M[i][j]);
}
printf("|\n");
}
printf("\n");
}

erzeugt die Ausgabe

Ausgabe stdout:

|   19.10   17.10   -4.12|
|   78.70   21.00   -0.90|
|   -1.00    0.20   11.70|

|  354.48  171.51  -20.39|
|  801.14  117.48    1.26|
| -164.00  -24.08   29.66|

Dieses stimmt mit der Erwartung überein:

Der MupadCode:

m1:=matrix([[10.5, 3.4, -4.12], [1.0, 10.2, -2.9], [-1.0, -2.0, 5.1]]): m2:=matrix([[8.6, 13.7, 0.0], [77.7, 10.8, 2.0], [0.0, 2.2, 6.6]]): m1+m2,m1*m2

liefert die

Ausgabe: MupadOutput:

+-                   -+  +-                          -+ 
|  19.1, 17.1, -4.12  |  |  354.48, 171.506, -20.392  |
|                     |  |                            |
|  78.7, 21.0,  -0.9  |, |  801.14,  117.48,   1.26   |
|                     |  |                            |
|  -1.0,  0.2,  11.7  |  |  -164.0,  -24.08,  29.66   |

+-                   -+  +-                          -+

 

 

 

 

2.Aufgabe Zeichenketten (Strings)

Aufgabenstellung:

Testen Sie bitte folgendes C-Programm. Welche Kenntnisse kann man hier gewinnen bezüglich der Zeichenketten-Verarbeitung in C?

CCode:

#include <stdio.h>

#include <string.h> /* Fuer String-Funktionen wie strlen() */

int main() {

        char satz[80];       

          int i=0;

        printf("\nBitte einen Satz eingeben\n>");

        gets(satz); /* Besser fgets(satz, sizeof(satz), stdin) */

               /* Der Operator sizeof(typ_name) gibt die Speichergroesse zurueck */

        printf("\n%s",satz);

        printf("\nDer Satz besteht aus %i Zeichen.",strlen(satz));

          /* Ausgeben des Satzes zeichenweise */

        while (satz[i]){

               printf ("%c " , satz[i]);

               printf ("%d " , satz[i]); /* ASCII Code der Zeichen */

               i++;

        }

        printf("\n\nIch schreibe in satz[5] eine binaere Null.\n");

        satz[5]='\0';

        printf("\n%s",satz);

        printf("\nDer Satz besteht aus %i Zeichen.\n",strlen(satz));

          return 0;

}

Lösung

Die Eingabe

Eingabe stdin:

Dies ist ein vollständiger Satz.

liefert

Ausgabe stdout:

Bitte einen Satz eingeben

Dies ist ein vollständiger Satz.
Der Satz besteht aus 32 Zeichen.
D  68
i 105
e 101
s 115
   32
i 105
s 115
t 116
   32
e 101
i 105
n 110
   32
v 118
o 111
l 108
l 108
s 115
t 116
ä -28
n 110
d 100
i 105
g 103
e 101
r 114
   32
S  83
a  97
t 116
z 122
.  46

 

Ich schreibe in satz[5] eine binaere Null.

Dies
Der Satz besteht aus 5 Zeichen.

Man kann daraus schließen, dass Strings genau dort enden, wo die erste binäre Null steht. Außerdem sieht man, dass man mit der Verwendung von Sonderzeichen wie ä aufpassen muss, da sie keine ASCII Zeichen sind.