Studium, Ausbildung und Beruf
 StudiumHome   FAQFAQ   RegelnRegeln   SuchenSuchen    RegistrierenRegistrieren   LoginLogin

kleine Verständnisfrage zu C.
Neues Thema eröffnen   Neue Antwort erstellen
Foren-Übersicht -> Informatik-Forum -> kleine Verständnisfrage zu C.
 
Autor Nachricht
Mentality18
Newbie
Benutzer-Profile anzeigen
Newbie


Anmeldungsdatum: 31.08.2008
Beiträge: 10

BeitragVerfasst am: 13 Sep 2008 - 13:54:12    Titel: kleine Verständnisfrage zu C.

Hi,
ich brauche dringend etwas Hilfe!
Ich habe hier ein paar DV Aufgaben mit denen ich nicht klar komme.

Wieso ist 123456789*100 gleich -939222988 ?

Wieso liefert das Programmfragment
{
double x;
printf("x="); scanf("%f", &x);
printf("%f\n", 3*x+1);
} nach der Eingabe von 1 wertmäßig nicht das Ergebnis 4?
Ja das weiß ich nur das %f für exponentenfreie Augabe steht aber mehr auch nicht!

Vielen dank im Voraus!

Mfg Felix



Klicke hier, um den Artikel bei Amazon.de anzuschauen.
just_phil
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 23.08.2008
Beiträge: 1006

BeitragVerfasst am: 13 Sep 2008 - 15:20:33    Titel:

hallo,


das erste wird wohl ein überlauffehler sein, so dass der verwendete datentyp eine solche große zahl nicht mehr erfassen kann. das verhalten ist dann oft undefiniert oder das programm bricht komplett ab.

das formatierungszeichen für einen double-wert (deine variable "x") ist "%lf" (long float), damit funktioniert es.

also:

Code:
#include <stdio.h>

int main (void) {

double x;
printf("x="); scanf("%lf", &x);
printf("%lf\n", 3*x+1);

return 0;

}


hier mal ein link, wo alle formatierungszeichen für "printf" und "scanf" erklärt werden: http://irc.essex.ac.uk/www.iota-six.co.uk/c/c2_printf_and_scanf.asp
Mentality18
Newbie
Benutzer-Profile anzeigen
Newbie


Anmeldungsdatum: 31.08.2008
Beiträge: 10

BeitragVerfasst am: 13 Sep 2008 - 15:27:47    Titel:

Ah super,
vielen Dank für die schnelle Hilfe!

Ich habe da noch ein Frage:

Was ist in C eine Bedingung, wie sie in Programmen etwa bei if-Anweisungen oder zur Kontrolle von Schleifen verwendet wird, und was ist wahr und was ist falsch?

Da fällt mir auch keine richtige Antwort ein.

Mfg Felix
just_phil
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 23.08.2008
Beiträge: 1006

BeitragVerfasst am: 13 Sep 2008 - 15:55:33    Titel:

hm, ausdrücke, die dann einen wahrheitswert als ergebnis haben, gibt es quasi unendlich viele...

z.b.

(1 == 1) ergibt immer wahr

(5 == 0) ergibt dementsprechend immer falsch

(x <= 9) ergibt eben solange wahr, bis x größer als 9 wird

natürlich bleibt es längst nicht bei zahlenvergleichen. kannst auch zeichenketten oder rückgabewerte ganzer funktionen auf wahrheit überprüfen, das hier aber alles aufzuzählen, würde den rahmen sprengen.

ein beliebter fehler ist übrigens auch statt zwei gleichheitszeichen nur eins zu benutzen. das ergebnis von (x = 5) [wo geprüft werden soll, ob x genau 5 ist] ist immer(!) wahr, denn ein gleichheitszeichen ist (hier fälschlicherweise) der zuweisungsoperator, so dass x einfach auf 5 gesetzt wird. das ergebnis einer zuweisung ist immer wahr.

hier noch ein schöner artikel über vergleiche und wahrheitswerte: http://de.wikibooks.org/wiki/C-Programmierung:_Ausdr%C3%BCcke_und_Operatoren#Vergleiche
Armin Gibbs
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 06.02.2008
Beiträge: 992

BeitragVerfasst am: 13 Sep 2008 - 16:12:29    Titel:

Zitat:
das ergebnis einer zuweisung ist immer wahr.


Code:
    int x;
   
    if (x = 0) {
       printf("wahr\n");
    } else {
       printf("falsch\n");   
    }
just_phil
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 23.08.2008
Beiträge: 1006

BeitragVerfasst am: 13 Sep 2008 - 16:15:33    Titel:

hehe, korrekt! Smile

ich korrigiere: das ergebnis einer zuweisung eines nicht bereits als "falsch" deklarierten wertes (die 0 z.b. wird als "falsch" ausgewertet!) ist immer wahr! *gg*
Smutje
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 18.07.2008
Beiträge: 3004
Wohnort: Gießen

BeitragVerfasst am: 13 Sep 2008 - 19:44:27    Titel:

naja, ich würds eher so sagen: das "ergebnis" einer zuweisung (eigentlich falscher begriff, denn die zuweisung wird ausgeführt und danach getestet) ist der wert, der zugewiesen wurde -- und da laut c semantik alle werte != 0 als wahr interpretiert werden, lässt die syntax den fehler

Code:
if (x = 0) { ... }


auch als solchen durchgehen. in strengeren sprachen, wie z.b. java, geht der oben genannte code nicht durch, da java in bedingungen explizit boolean als ergebnistyp verlangt.

Wink
Beiträge der letzten Zeit anzeigen:   
Foren-Übersicht -> Informatik-Forum -> kleine Verständnisfrage zu C.
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

Chat :: Nachrichten:: Lexikon :: Bücher :: Impressum