Ausgabe < Sonstige < Schule < Informatik < Vorhilfe
|
Aufgabe | Welche Ausgaben erzeugt das folgende C-Programm? Ergänzen Sie die
entsprechenden Ausgaben in Tabelle 1.2!
#include <stdio.h>
int main(void)
{
int a = 3, b = 5 , c = 1 ;
float d = 2.5;
int i;
printf("Wert 1: [mm] %i\n", [/mm] 7 * (a/7));
printf("Wert 2: [mm] %i\n", [/mm] a - (4 + b / 5));
printf("Wert 3: [mm] %u\n", [/mm] (unsigned)d);
printf("Wert 4: [mm] %f\n", [/mm] d / (float)(-b));
printf("Wert 5: [mm] %f\n", [/mm] (float)(a/b));
printf("Wert 6: [mm] %i\n", [/mm] b>>2<<a);
printf("Wert 7: [mm] %i\n", [/mm] 1&2);
printf("Wert 8: [mm] %i\n", [/mm] (b <= 8) && (a+2 == b-3));
printf("Wert 9: [mm] %i\n", [/mm] (0 > 1) || !(!0 || !1));
printf("Wert 10: [mm] %s\n", [/mm] a!=0 ? "a!" : "0");
printf("Wert 11: [mm] %i\n", [/mm] ++a * b--);
printf("Wert 12: [mm] %i\n", [/mm] a * (-b));
printf("drei Zahlen:");
for(i=0; i<3; i++) {
c *= (i+2);
printf("%i, [mm] \t", [/mm] c);
}
return 0;
} |
Meine Ausgaben lauten:
0
-2
2
-0,5
0,6
danach weiß ich leider nicht, wie ich vorgehen soll?
Kann mir einer erklären, was da genau verlangt wird und wie man da rechnen muss?
danke
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 13:52 Sa 22.08.2009 | Autor: | Void09 |
> int a = 3, b = 5 , c = 1 ;
> float d = 2.5;
> int i;
> printf("Wert 1: [mm]%i\n",[/mm] 7 * (a/7));
7 * (3/7) = 3
> printf("Wert 2: [mm]%i\n",[/mm] a - (4 + b / 5));
3 - (4 + 5 / 5) = 3 - (4 + 1) = -2
> printf("Wert 3: [mm]%u\n",[/mm] (unsigned)d);
Die Variable wird in einen Ganzzahltypen gewandelt (dabei immer abgerunde) => 2
> printf("Wert 4: [mm]%f\n",[/mm] d / (float)(-b));
2.5 / -5 = -0.5
> printf("Wert 5: [mm]%f\n",[/mm] (float)(a/b));
3 / 5 = 0.6
> printf("Wert 6: [mm]%i\n",[/mm] b>>2<<a);
Bei >> und << handelt es sich um Bitverschiebungen der Variable. b = 5 = 0b101. Diese Bits werden zunächst um 2 Stellen nach rechts verschoben und dann um 3 wieder nach links. Also Effektiv 1 nach links, was 0b1010 ergibt und somit 10 als Ausgabe liefern sollte
> printf("Wert 7: [mm]%i\n",[/mm] 1&2);
Bitweise UND-Verknüpfung :
1 = 0b01
2 = 0b10
0b01 & 0b10 = 0b00 = 0 (Also Ausgabe : 0)
> printf("Wert 8: [mm]%i\n",[/mm] (b <= 8) && (a+2 == b-3));
Hierbei dürfte ein boolesches Ergebnis ausgegeben werden, weiß gerade nicht, ob C++ da "true" bzw. "false" oder 1 bzw. 0 ausgibt, aber aufjedenfall wäre:
(b <= 8) = (5 <= 8): true
(a+2 == b-3) = (5 == 2) : false
und somit
true && false => false
Ausgabe also 0 bzw. false
> printf("Wert 9: [mm]%i\n",[/mm] (0 > 1) || !(!0 || !1));
Wieder ein paar Vergleiche.
(0 > 1) ist schonmal false.
Nicht(Nicht(0) oder Nicht(1)) = Nicht(1 oder 0) = Nicht(1) = 0
also insgesamt 0 oder 0 ==> 0 bzw. false als Ausgabe
> printf("Wert 10: [mm]%s\n",[/mm] a!=0 ? "a!" : "0");
Hier liegt eine Inline-If-Abfrage vor:
"Bedingung" ? "Aktion wenn erfüllt" : "Aktion ansonsten"
da a = 3 != 0 wird also "a!" ausgegeben.
> printf("Wert 11: [mm]%i\n",[/mm] ++a * b--);
++a inkrementiert a BEVOR die Berechnung durchgeführt wird, b-- hingegen erst nach der Berechnung dekrementiert, die Berechnung ist als : 4 * 5 = 20 (20 ist also die Ausgabe)
Ab hier haben sich die Werte für a und b geändert:
a = 4
b = 4
> printf("Wert 12: [mm]%i\n",[/mm]Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
a * (-b));
4 * -4 = -16
> printf("drei Zahlen:");
> for(i=0; i<3; i++) {
> c *= (i+2);
> printf("%i, [mm]\t",[/mm]Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
c);
Erster Durchlauf : c *= 2, also 1 *= 2
Ausgabe : 2 (Ab hier c = 2 !)
Zweiter durchlauf : c *= (1+2), also 2 *= 3
Ausgabe : 6 (Ab hier c = 6 !)
Dritter Durchlauf : c *= (2+2), also 6 *= 4
Ausgabe : 24
> }
> return 0;
> }
So, ich hoffe das war alles richtig, bitte ggf. von jemandem noch einmal überprüfen
|
|
|
|
|
Status: |
(Korrektur) kleiner Fehler | Datum: | 14:05 Sa 22.08.2009 | Autor: | Kroni |
> > int a = 3, b = 5 , c = 1 ;
> > float d = 2.5;
> > int i;
>
> > printf("Wert 1: [mm]%i\n",[/mm] 7 * (a/7));
>
> 7 * (3/7) = 3
Hi,
hier bin ich mir ziemlich sicher, dass das nicht passt. Denn: a ist ein int, dann wird durch ein int geteilt, also macht C daraus ne ganzzahlige Divison. D.h. 3/7 ist ganzzahlig 0! Also kommt da Null raus, was mein Compiler auch bestaetigt. Um da 3 rauszubekommen, muss man $a/7.0$ schreiben, weil dann durch nen double/float geteilt wird, und C das Ergebnis dann als Gleitkommazahl speichert. Das ist ein sehr beliebter Fehler beim Programmieren..
Die restlichen Erklaerungen habe ich nicht weiter ueberprueft.
LG
Kroni
|
|
|
|