Dlaczego taka komenda:
printf("4) %.2lf\n", 4/9);
wypisuje wartość 0.5
a nie 0.4
? 4/9 = 0.44
więc powinno w dół zaokrąglać?
Dlaczego taka komenda:
printf("4) %.2lf\n", 4/9);
wypisuje wartość 0.5
a nie 0.4
? 4/9 = 0.44
więc powinno w dół zaokrąglać?
printf("4) %.2lf\n", 4/9);
Ten kod wypisuje losową wartość: http://ideone.com/GE58tL, pewnie dlatego że wynik 4/9
to 0
(dzielenie całkowitoliczbowe).
printf("4) %.2lf\n", 4/(float)9);
Ten kod wypisuje 0.44
, a nie żadne 0.5
czy 0.4
.
Kod programu:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int z1 = 4, z2 = 8;
int m = 1;
int t[10] = {-1,-2,-3};
char s1[30] = "programowanie", s2[30] = "strukturalne";
double z =(++z2-(z1--))%--z1;
printf("1) %.1lf\n", z/3);
printf("2) %d\n", --s1[2]<*s2);
printf("3) %c\n", *(strlen(s1)-4+s1));
printf("4) %.2lf\n", !(z1%z2--)+ 2.0*z1/z2);
printf("5) %d\n",(3*(++*(t+2)>>2)));
printf("6) %d\n", !(!z2|| --z1));
printf("4) %.2lf\n", 4/9);
return 0;
}
Ale chodzi tylko o ostatni ten wypis.
Bo ten program jest niepoprawny. Jego zachowanie jest niezdefiniowane: http://4programmers.net/Forum/1109355
Ciekawostka: zakomentuj linię:
printf("4) %.2lf\n", !(z1%z2--)+ 2.0*z1/z2);
i dostaniesz inny wynik przy ostatnim wypisaniu.
Albo zmień ostatnią liniję w swoim programie na:
printf("4) %.2lf\n", 0);
i podziwiaj wynik :P
Może nie losową, ale przypadkową. Wyświetlasz zmienną całkowitą 4/9 korzystając z formatu liczb zmiennoprzecinkowych "%.2lf". To co się pojawi na ekranie ma bardzo luźny związek z faktyczną wartością zmiennej.
to ja nie wiem jak to interpretować. My takie zadania mamy mieć na egzaminie z podstaw programowania.
Idź do wykładowcy i powiedz mu, że ma niepoprawny program.
Już mówiłem. Te kody to totalne bzdury. Nie dość, że są błędne to nie mają niczego wspólnego z programowaniem.
Serio. Co to za przedmiot, kierunek i uczelnia?
Napisz autorowi tych zadań, że tak Ci tutaj powiedzieli. Jak będzie chciał dowodów, że to bzdury, to niech przeczyta sobie standard języka C - mogę podać konkretne miejsca.