This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
dydaktyka:cprog:2015:basic_stdio-solutions [2015/10/22 08:51] pkleczek [Interakcja z użytkownikiem - rozwiązania i odpowiedzi] |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Interakcja z użytkownikiem - rozwiązania i odpowiedzi ====== | ||
- | |||
- | ===== Treść laboratorium ===== | ||
- | |||
- | ==== Dlaczego wyświetlają się "śmieci"? ==== | ||
- | |||
- | ([[http://home.agh.edu.pl/~pkleczek/dokuwiki/doku.php?id=dydaktyka:cprog:2015:basic_stdio#wypisywanie_danych|Treść pytania]]) | ||
- | |||
- | Użyto niewłaściwych specyfikatorów konwersji. Specyfikatory konwersji **nie weryfikują** zgodności typów danych, a jedynie **interpretują** przekazane dane (a więc zawartość pamięci w danym miejscu) w zadany sposób. | ||
- | |||
- | Czyli: | ||
- | * Pierwszy ''printf()'' oczekuje liczby całkowitej i znaku, a dostaje dwie liczby całkowite. Za drugim razem interpretuje liczbę dziesiętną jako znak z (rozszerzonego) kodu ASCII. //Ok, ale ten zestaw znaków ma kody od 0 do 256!// Zgadza się, dlatego "liczenie" zaczyna się od nowa, czyli $300 - 256 = 44$ (','). | ||
- | * Za drugim razem przekazujemy liczbę całkowitą, którą następnie ''printf()'' interpretuje jako liczbę zmiennoprzecinkową. Otrzymujemy "śmieci", gdyż komputer zupełnie inaczej reprezentuje w pamięci te dwa typy liczb. | ||
- | * Za trzecim razem mamy sytuację podobną, co przy drugim wywołaniu funkcji ''printf()''. | ||
- | ===== Zadania podsumowujące ===== | ||
- | |||
- | ==== Zadanie 1 ==== | ||
- | |||
- | <code c> | ||
- | #include <stdio.h> | ||
- | #include <stdlib.h> | ||
- | |||
- | int main() | ||
- | { | ||
- | double a, b, c; | ||
- | double suma, srednia; | ||
- | |||
- | printf("Podaj 3 liczby rzeczywiste (oddzielone spacja): \n"); | ||
- | scanf("%lf %lf %lf", &a, &b, &c); | ||
- | |||
- | suma = a + b + c; | ||
- | srednia = suma / 3; | ||
- | |||
- | printf("Suma to: %.2f\n", suma); | ||
- | printf("Srednia to: %.2f\n", srednia); | ||
- | |||
- | return 0; | ||
- | } | ||
- | </code> | ||
- | |||
- | |||
- | ==== Zadanie 2 ==== | ||
- | |||
- | <code c> | ||
- | #include <stdio.h> | ||
- | #include <stdlib.h> | ||
- | |||
- | int main() | ||
- | { | ||
- | int usds; | ||
- | |||
- | printf("Podaj kwote w dolarach: "); | ||
- | scanf("%d", &usds); | ||
- | |||
- | printf("$%d = %7.2f EUR\n", usds, usds * 0.77); | ||
- | printf("$%d = %7.2f PLN\n", usds, usds * 3.04); | ||
- | |||
- | return 0; | ||
- | } | ||
- | </code> | ||
- | |||
- | ==== Zadanie 3 ==== | ||
- | |||
- | <code c> | ||
- | #include <stdio.h> | ||
- | #include <stdlib.h> | ||
- | |||
- | int main() | ||
- | { | ||
- | char c; | ||
- | |||
- | printf("Podaj znak: "); | ||
- | scanf("%c",&c); | ||
- | printf("Kod ASCII znaku '%c' to %d\n", c, c); | ||
- | |||
- | return 0; | ||
- | } | ||
- | </code> | ||