Jezyk_ANSI_C_Programowanie_cwiczenia_Wydanie_II_cwjans.pdf
(
233 KB
)
Pobierz
Jêzyk ANSI C. Programowanie.
Æwiczenia. Wydanie II
Autorzy: Clovis L. Tondo, Scott E. Gimpel
T³umaczenie: Pawe³ Koronkiewicz
ISBN: 978-83-246-2591-8
Tytu³ orygina³u
:
The C Answer Book, (2nd Edition)
Format: 158
×
235, stron: 168
Ksi¹¿ka „Jêzyk ANSI C. Programowanie. Wydanie II” to jedna z najlepszych dostêpnych
na rynku pozycji do nauki tego jêzyka, zaliczana do klasyki literatury informatycznej
i ciesz¹ca siê niemalej¹c¹ popularności¹. Przejrzyście opisana teoria, liczne przyk³ady
oraz zbiór æwiczeñ to atuty doceniane przez kolejne pokolenia programistów.
Niniejsza ksi¹¿ka zawiera rozwi¹zania wszystkich æwiczeñ zawartych w „Jêzyku ANSI
C. Programowanie. Wydanie II”. Oprócz dzia³aj¹cego i przetestowanego kodu znajdziesz
w niej komentarze do specyficznych konstrukcji i samego sposobu rozwi¹zywania zadañ.
Po³¹czenie teorii z praktyk¹ pozwoli Ci b³yskawicznie przyswoiæ wiedzê na temat jêzyka
C, a nastêpnie wykorzystaæ j¹ w praktyce. Ponadto czêśæ rozwi¹zañ z pewności¹ przyda
siê w codziennej pracy, dlatego te¿ ksi¹¿ka ta sprawdzi siê zarówno w rêkach adepta
jêzyka C, jak i zawodowego programisty.
Spis treci
Wstp
5
Rozdzia 1. Wprowadzenie
7
Rozdzia 2. Typy, operatory i wyraenia
37
Rozdzia 3. Sterowanie wykonywaniem programu
49
Rozdzia 4. Funkcje i struktura programu
57
Rozdzia 5. Wskaniki i tablice
77
Rozdzia 6. Struktury
121
Rozdzia 7. Wejcie i wyjcie
135
Rozdzia 8. Interfejs systemu UNIX
149
Skorowidz
161
Rozdzia 4.
Funkcje
i struktura programu
wiczenie 4.1
(str. 89)
Napisz funkcj
strrindex(s,t)
, która zwraca pozycj
ostatniego
wystpienia
t
w
s
lub
-1
,
jeeli wyszukiwany cig nie zosta znaleziony.
/* strrindex: zwraca index ostatniego wystpienia t w s lub –1, jeeli nie wystpuje */
int strrindex(char s[], char t[])
{
int i, j, k, pos;
pos = -1;
for (i = 0; s[i] != '\0'; i++) {
for (j=i, k=0; t[k]!='\0' && s[j]==t[k]; j++, k++)
;
if (k > 0 && t[k] == '\0')
pos = i;
}
return pos;
}
Funkcja
strrindex
jest podobna do
strindex
, przedstawionej w podrozdziale 4.1 pod-
rcznika K&R. Gdy funkcja
strindex
znajduje dopasowany podcig, zwraca jego pozycj,
która jest pozycj pierwszego wystpienia
t
w
s
. Funkcja
strrindex
nie zwraca pozycji
znalezionego podcigu, ale kontynuuje wyszukiwanie, poniewa jej zadaniem jest okre-
lenie pooenia ostatniego wystpienia
t
w
s
:
if (k > 0 && t[k] == '\0')
pos = i;
Jzyk ANSI C. Programowanie. wiczenia
Ten sam problem mona rozwiza take nastpujco:
#include <string.h>
/* strrindex: zwraca index ostatniego wystpienia t w s lub –1, jeeli nie wystpuje */
int strrindex(char s[], char t[])
{
int i, j, k;
for (i = strlen(s) – strlen(t); i >= 0; i--) {
for (j=i, k=0; t[k]!='\0' && s[j]==t[k]; j++, k++)
;
if (k > 0 && t[k] == '\0')
return i;
}
return -1;
}
Jest to rozwizanie efektywniejsze. Przegldanie cigu rozpoczyna si od koca cigu
s
minus dugo cigu
t
. Brak dopasowania powoduje przesunicie wyszukiwania o jedn
pozycj w stron pocztku cigu. Gdy tylko funkcja znajduje
t
w
s
, zwraca biec
pozycj,
i
. Jest to ostatnie wystpienie
t
w
s
.
wiczenie 4.2
(str. 91)
Dodaj do funkcji
atof
moliwo obsugi notacji wykadniczej, postaci:
123.45e-6
gdzie po liczbie zmiennoprzecinkowej moe wystpi litera
e
lub
E
i wykadnik, z opcjo-
nalnym znakiem.
#include <ctype.h>
/* atof: konwertuje cig znaków s na liczb double */
double atof(char s[])
{
double val, power;
int exp, i, sign;
for (i = 0; isspace(s[i]); i++)
/* pomi biae znaki */
;
sign = (s[i] == '-') ? -1 : 1;
if (s[i] == '+' || s[i] == '-')
i++;
for (val = 0.0; isdigit(s[i]); i++)
val = 10.0 * val + (s[i] - '0');
if (s[i] == '.')
i++;
for (power = 1.0; isdigit(s[i]); i++) {
58
Rozdzia 4. • Funkcje i struktura programu
val = 10.0 * val + (s[i] - '0');
power *= 10;
}
val = sign * val / power;
if (s[i] == 'e' || s[i] == 'E') {
sign = (s[++i] == '-') ? -1 : 1;
if (s[i] == '+' || s[i] == '-')
i++;
for (exp = 0; isdigit(s[i]); i++)
exp = 10 * exp + (s[i] – '0');
if (sign == 1)
while (exp-- > 0)
/* wykadnik dodatni */
val *= 10;
else
while (exp-- > 0)
/* wykadnik ujemny */
val /= 10;
}
return val;
}
Pierwsza cz funkcji to powtórzenie funkcji
atof
z podrozdziau 4.2 podrcznika K&R.
Funkcja pomija biae znaki, zapisuje znak i oblicza liczb. Pobieranie liczby z kropk
dziesitn wymaga identycznej procedury niezalenie od tego, czy w dalszej czci
pojawi si wykadnik.
Druga cz funkcji odpowiada za konwersj opcjonalnego wykadnika. Jeeli ta cz
liczby nie wystpuje, funkcja zwraca warto zapisan w
val
. Jeeli wykadnik jest obecny,
to jego znak zostaje zapisany w zmiennej
sign
, po czym warto zostaje obliczona
i zapisana w zmiennej
exp
.
Kocowa operacja
if (sign == 1)
while (exp-- > 0)
val *= 10;
else
while (exp-- > 0)
val /= 10;
modyfikuje liczb odpowiednio do ustalonej wczeniej wartoci wykadnika. Jeeli
wykadnik jest dodatni, liczba zostaje pomnoona
exp
razy przez 10. Jeeli wykadnik
jest ujemny, liczba zostaje podzielona
exp
razy przez 10. W zmiennej
val
zostaje za-
pisany wynik, który jest zwracany do programu wywoujcego funkcj.
Zmienna
val
jest dzielona przez 10, a nie mnoona przez
0.1
, poniewa liczba 0,1 nie
jest w zapisie binarnym dokadna. Na wikszoci komputerów warto 0,1 jest repre-
zentowana jako nieco mniejsza ni 0,1. W efekcie mnoenie
10.0*0.1
rzadko daje
wynik
1.0
. Powtarzanie dzielenia przez 10 jest wic lepszym rozwizaniem ni po-
wtarzanie mnoenia przez 0,1, cho utrata dokadnoci wci wystpuje.
59
Plik z chomika:
sliwak
Inne pliki z tego folderu:
Algorytmy_w_C_algorc.pdf
(593 KB)
C_i_C_Bezpieczne_programowanie_Receptury_ccprec.pdf
(482 KB)
C_Leksykon_kieszonkowy_cleksk.pdf
(212 KB)
C_Rusz_glowa_cruszg.pdf
(3191 KB)
Jezyk_ANSI_C_Programowanie_cwiczenia_Wydanie_II_cwjans.pdf
(233 KB)
Inne foldery tego chomika:
ABC NBOX
Ajax
Aktywatory Windows
Algorytmy
Android
Zgłoś jeśli
naruszono regulamin